From 37cf893ad9055f9e5b57e13e5adac0a01e5606ac Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 14:24:53 +0200 Subject: [PATCH 001/204] Core/Dep: + Added recastnavigation. + Add Info to Packagelist. + Link recastnavigation in Cmake. --- dep/CMakeLists.txt | 1 + dep/PackageList.txt | 4 + dep/recastnavigation/CMakeLists.txt | 20 + dep/recastnavigation/Detour/CMakeLists.txt | 28 + dep/recastnavigation/Detour/DetourAlloc.cpp | 50 + dep/recastnavigation/Detour/DetourAlloc.h | 36 + dep/recastnavigation/Detour/DetourAssert.h | 33 + dep/recastnavigation/Detour/DetourCommon.cpp | 329 +++ dep/recastnavigation/Detour/DetourCommon.h | 248 ++ dep/recastnavigation/Detour/DetourNavMesh.cpp | 1235 ++++++++ dep/recastnavigation/Detour/DetourNavMesh.h | 428 +++ .../Detour/DetourNavMeshBuilder.cpp | 717 +++++ .../Detour/DetourNavMeshBuilder.h | 77 + .../Detour/DetourNavMeshQuery.cpp | 2564 +++++++++++++++++ .../Detour/DetourNavMeshQuery.h | 407 +++ dep/recastnavigation/Detour/DetourNode.cpp | 164 ++ dep/recastnavigation/Detour/DetourNode.h | 157 + .../Detour/DetourObstacleAvoidance.cpp | 532 ++++ .../Detour/DetourObstacleAvoidance.h | 148 + dep/recastnavigation/License.txt | 18 + dep/recastnavigation/Readme.txt | 120 + dep/recastnavigation/Recast/CMakeLists.txt | 31 + dep/recastnavigation/Recast/Recast.cpp | 423 +++ dep/recastnavigation/Recast/Recast.h | 688 +++++ dep/recastnavigation/Recast/RecastAlloc.cpp | 67 + dep/recastnavigation/Recast/RecastAlloc.h | 69 + dep/recastnavigation/Recast/RecastArea.cpp | 413 +++ dep/recastnavigation/Recast/RecastAssert.h | 33 + dep/recastnavigation/Recast/RecastContour.cpp | 804 ++++++ dep/recastnavigation/Recast/RecastFilter.cpp | 179 ++ dep/recastnavigation/Recast/RecastMesh.cpp | 1322 +++++++++ .../Recast/RecastMeshDetail.cpp | 1237 ++++++++ .../Recast/RecastRasterization.cpp | 360 +++ dep/recastnavigation/Recast/RecastRegion.cpp | 1283 +++++++++ dep/recastnavigation/TODO.txt | 20 + 35 files changed, 14245 insertions(+) create mode 100644 dep/recastnavigation/CMakeLists.txt create mode 100644 dep/recastnavigation/Detour/CMakeLists.txt create mode 100644 dep/recastnavigation/Detour/DetourAlloc.cpp create mode 100644 dep/recastnavigation/Detour/DetourAlloc.h create mode 100644 dep/recastnavigation/Detour/DetourAssert.h create mode 100644 dep/recastnavigation/Detour/DetourCommon.cpp create mode 100644 dep/recastnavigation/Detour/DetourCommon.h create mode 100644 dep/recastnavigation/Detour/DetourNavMesh.cpp create mode 100644 dep/recastnavigation/Detour/DetourNavMesh.h create mode 100644 dep/recastnavigation/Detour/DetourNavMeshBuilder.cpp create mode 100644 dep/recastnavigation/Detour/DetourNavMeshBuilder.h create mode 100644 dep/recastnavigation/Detour/DetourNavMeshQuery.cpp create mode 100644 dep/recastnavigation/Detour/DetourNavMeshQuery.h create mode 100644 dep/recastnavigation/Detour/DetourNode.cpp create mode 100644 dep/recastnavigation/Detour/DetourNode.h create mode 100644 dep/recastnavigation/Detour/DetourObstacleAvoidance.cpp create mode 100644 dep/recastnavigation/Detour/DetourObstacleAvoidance.h create mode 100644 dep/recastnavigation/License.txt create mode 100644 dep/recastnavigation/Readme.txt create mode 100644 dep/recastnavigation/Recast/CMakeLists.txt create mode 100644 dep/recastnavigation/Recast/Recast.cpp create mode 100644 dep/recastnavigation/Recast/Recast.h create mode 100644 dep/recastnavigation/Recast/RecastAlloc.cpp create mode 100644 dep/recastnavigation/Recast/RecastAlloc.h create mode 100644 dep/recastnavigation/Recast/RecastArea.cpp create mode 100644 dep/recastnavigation/Recast/RecastAssert.h create mode 100644 dep/recastnavigation/Recast/RecastContour.cpp create mode 100644 dep/recastnavigation/Recast/RecastFilter.cpp create mode 100644 dep/recastnavigation/Recast/RecastMesh.cpp create mode 100644 dep/recastnavigation/Recast/RecastMeshDetail.cpp create mode 100644 dep/recastnavigation/Recast/RecastRasterization.cpp create mode 100644 dep/recastnavigation/Recast/RecastRegion.cpp create mode 100644 dep/recastnavigation/TODO.txt diff --git a/dep/CMakeLists.txt b/dep/CMakeLists.txt index d658ba43ffe..48a2fd56ec0 100644 --- a/dep/CMakeLists.txt +++ b/dep/CMakeLists.txt @@ -34,6 +34,7 @@ if(CMAKE_SYSTEM_NAME MATCHES "Windows") endif() add_subdirectory(g3dlite) +add_subdirectory(recastnavigation) if(SERVERS) add_subdirectory(gsoap) diff --git a/dep/PackageList.txt b/dep/PackageList.txt index ef1b9b58fca..e28f9ea201b 100644 --- a/dep/PackageList.txt +++ b/dep/PackageList.txt @@ -39,3 +39,7 @@ zlib (A Massively Spiffy Yet Delicately Unobtrusive Compression Library) gSOAP (a portable development toolkit for C and C++ XML Web services and XML data bindings) http://gsoap2.sourceforge.net/ Version: 2.8.0 + +recastnavigation (Recast is state of the art navigation mesh construction toolset for games) + http://code.google.com/p/recastnavigation/ + Version: 1.4 \ No newline at end of file diff --git a/dep/recastnavigation/CMakeLists.txt b/dep/recastnavigation/CMakeLists.txt new file mode 100644 index 00000000000..4a406f7833c --- /dev/null +++ b/dep/recastnavigation/CMakeLists.txt @@ -0,0 +1,20 @@ +# +# Copyright (C) 2005-2011 MaNGOS project +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +add_subdirectory(Detour) +add_subdirectory(Recast) diff --git a/dep/recastnavigation/Detour/CMakeLists.txt b/dep/recastnavigation/Detour/CMakeLists.txt new file mode 100644 index 00000000000..c09e0e35d42 --- /dev/null +++ b/dep/recastnavigation/Detour/CMakeLists.txt @@ -0,0 +1,28 @@ +# Copyright (C) 2008-2010 Trinity +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +set(Detour_STAT_SRCS + DetourAlloc.cpp + DetourCommon.cpp + DetourNavMesh.cpp + DetourNavMeshBuilder.cpp + DetourNavMeshQuery.cpp + DetourNode.cpp +) + +if(WIN32) + include_directories( + ${CMAKE_SOURCE_DIR}/dep/zlib + ) +endif() + +add_library(Detour STATIC ${Detour_STAT_SRCS}) + +target_link_libraries(Detour ${ZLIB_LIBRARIES}) diff --git a/dep/recastnavigation/Detour/DetourAlloc.cpp b/dep/recastnavigation/Detour/DetourAlloc.cpp new file mode 100644 index 00000000000..5f671df5bdb --- /dev/null +++ b/dep/recastnavigation/Detour/DetourAlloc.cpp @@ -0,0 +1,50 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#include +#include "DetourAlloc.h" + +static void *dtAllocDefault(int size, dtAllocHint) +{ + return malloc(size); +} + +static void dtFreeDefault(void *ptr) +{ + free(ptr); +} + +static dtAllocFunc* sAllocFunc = dtAllocDefault; +static dtFreeFunc* sFreeFunc = dtFreeDefault; + +void dtAllocSetCustom(dtAllocFunc *allocFunc, dtFreeFunc *freeFunc) +{ + sAllocFunc = allocFunc ? allocFunc : dtAllocDefault; + sFreeFunc = freeFunc ? freeFunc : dtFreeDefault; +} + +void* dtAlloc(int size, dtAllocHint hint) +{ + return sAllocFunc(size, hint); +} + +void dtFree(void* ptr) +{ + if (ptr) + sFreeFunc(ptr); +} diff --git a/dep/recastnavigation/Detour/DetourAlloc.h b/dep/recastnavigation/Detour/DetourAlloc.h new file mode 100644 index 00000000000..8693475419e --- /dev/null +++ b/dep/recastnavigation/Detour/DetourAlloc.h @@ -0,0 +1,36 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef DETOURALLOCATOR_H +#define DETOURALLOCATOR_H + +enum dtAllocHint +{ + DT_ALLOC_PERM, // Memory persist after a function call. + DT_ALLOC_TEMP // Memory used temporarily within a function. +}; + +typedef void* (dtAllocFunc)(int size, dtAllocHint hint); +typedef void (dtFreeFunc)(void* ptr); + +void dtAllocSetCustom(dtAllocFunc *allocFunc, dtFreeFunc *freeFunc); + +void* dtAlloc(int size, dtAllocHint hint); +void dtFree(void* ptr); + +#endif diff --git a/dep/recastnavigation/Detour/DetourAssert.h b/dep/recastnavigation/Detour/DetourAssert.h new file mode 100644 index 00000000000..709ebd9f5f8 --- /dev/null +++ b/dep/recastnavigation/Detour/DetourAssert.h @@ -0,0 +1,33 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef DETOURASSERT_H +#define DETOURASSERT_H + +// Note: This header file's only purpose is to include define assert. +// Feel free to change the file and include your own implementation instead. + +#ifdef NDEBUG +// From http://cnicholson.net/2009/02/stupid-c-tricks-adventures-in-assert/ +# define dtAssert(x) do { (void)sizeof(x); } while(__LINE__==-1,false) +#else +# include +# define dtAssert assert +#endif + +#endif // DETOURASSERT_H diff --git a/dep/recastnavigation/Detour/DetourCommon.cpp b/dep/recastnavigation/Detour/DetourCommon.cpp new file mode 100644 index 00000000000..c0b973e4a75 --- /dev/null +++ b/dep/recastnavigation/Detour/DetourCommon.cpp @@ -0,0 +1,329 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#include +#include "DetourCommon.h" + +////////////////////////////////////////////////////////////////////////////////////////// + +float dtSqrt(float x) +{ + return sqrtf(x); +} + +void dtClosestPtPointTriangle(float* closest, const float* p, + const float* a, const float* b, const float* c) +{ + // Check if P in vertex region outside A + float ab[3], ac[3], ap[3]; + dtVsub(ab, b, a); + dtVsub(ac, c, a); + dtVsub(ap, p, a); + float d1 = dtVdot(ab, ap); + float d2 = dtVdot(ac, ap); + if (d1 <= 0.0f && d2 <= 0.0f) + { + // barycentric coordinates (1,0,0) + dtVcopy(closest, a); + return; + } + + // Check if P in vertex region outside B + float bp[3]; + dtVsub(bp, p, b); + float d3 = dtVdot(ab, bp); + float d4 = dtVdot(ac, bp); + if (d3 >= 0.0f && d4 <= d3) + { + // barycentric coordinates (0,1,0) + dtVcopy(closest, b); + return; + } + + // Check if P in edge region of AB, if so return projection of P onto AB + float vc = d1*d4 - d3*d2; + if (vc <= 0.0f && d1 >= 0.0f && d3 <= 0.0f) + { + // barycentric coordinates (1-v,v,0) + float v = d1 / (d1 - d3); + closest[0] = a[0] + v * ab[0]; + closest[1] = a[1] + v * ab[1]; + closest[2] = a[2] + v * ab[2]; + return; + } + + // Check if P in vertex region outside C + float cp[3]; + dtVsub(cp, p, c); + float d5 = dtVdot(ab, cp); + float d6 = dtVdot(ac, cp); + if (d6 >= 0.0f && d5 <= d6) + { + // barycentric coordinates (0,0,1) + dtVcopy(closest, c); + return; + } + + // Check if P in edge region of AC, if so return projection of P onto AC + float vb = d5*d2 - d1*d6; + if (vb <= 0.0f && d2 >= 0.0f && d6 <= 0.0f) + { + // barycentric coordinates (1-w,0,w) + float w = d2 / (d2 - d6); + closest[0] = a[0] + w * ac[0]; + closest[1] = a[1] + w * ac[1]; + closest[2] = a[2] + w * ac[2]; + return; + } + + // Check if P in edge region of BC, if so return projection of P onto BC + float va = d3*d6 - d5*d4; + if (va <= 0.0f && (d4 - d3) >= 0.0f && (d5 - d6) >= 0.0f) + { + // barycentric coordinates (0,1-w,w) + float w = (d4 - d3) / ((d4 - d3) + (d5 - d6)); + closest[0] = b[0] + w * (c[0] - b[0]); + closest[1] = b[1] + w * (c[1] - b[1]); + closest[2] = b[2] + w * (c[2] - b[2]); + return; + } + + // P inside face region. Compute Q through its barycentric coordinates (u,v,w) + float denom = 1.0f / (va + vb + vc); + float v = vb * denom; + float w = vc * denom; + closest[0] = a[0] + ab[0] * v + ac[0] * w; + closest[1] = a[1] + ab[1] * v + ac[1] * w; + closest[2] = a[2] + ab[2] * v + ac[2] * w; +} + +bool dtIntersectSegmentPoly2D(const float* p0, const float* p1, + const float* verts, int nverts, + float& tmin, float& tmax, + int& segMin, int& segMax) +{ + static const float EPS = 0.00000001f; + + tmin = 0; + tmax = 1; + segMin = -1; + segMax = -1; + + float dir[3]; + dtVsub(dir, p1, p0); + + for (int i = 0, j = nverts-1; i < nverts; j=i++) + { + float edge[3], diff[3]; + dtVsub(edge, &verts[i*3], &verts[j*3]); + dtVsub(diff, p0, &verts[j*3]); + const float n = dtVperp2D(edge, diff); + const float d = dtVperp2D(dir, edge); + if (fabsf(d) < EPS) + { + // S is nearly parallel to this edge + if (n < 0) + return false; + else + continue; + } + const float t = n / d; + if (d < 0) + { + // segment S is entering across this edge + if (t > tmin) + { + tmin = t; + segMin = j; + // S enters after leaving polygon + if (tmin > tmax) + return false; + } + } + else + { + // segment S is leaving across this edge + if (t < tmax) + { + tmax = t; + segMax = j; + // S leaves before entering polygon + if (tmax < tmin) + return false; + } + } + } + + return true; +} + +float dtDistancePtSegSqr2D(const float* pt, const float* p, const float* q, float& t) +{ + float pqx = q[0] - p[0]; + float pqz = q[2] - p[2]; + float dx = pt[0] - p[0]; + float dz = pt[2] - p[2]; + float d = pqx*pqx + pqz*pqz; + t = pqx*dx + pqz*dz; + if (d > 0) t /= d; + if (t < 0) t = 0; + else if (t > 1) t = 1; + dx = p[0] + t*pqx - pt[0]; + dz = p[2] + t*pqz - pt[2]; + return dx*dx + dz*dz; +} + +void dtCalcPolyCenter(float* tc, const unsigned short* idx, int nidx, const float* verts) +{ + tc[0] = 0.0f; + tc[1] = 0.0f; + tc[2] = 0.0f; + for (int j = 0; j < nidx; ++j) + { + const float* v = &verts[idx[j]*3]; + tc[0] += v[0]; + tc[1] += v[1]; + tc[2] += v[2]; + } + const float s = 1.0f / nidx; + tc[0] *= s; + tc[1] *= s; + tc[2] *= s; +} + +bool dtClosestHeightPointTriangle(const float* p, const float* a, const float* b, const float* c, float& h) +{ + float v0[3], v1[3], v2[3]; + dtVsub(v0, c,a); + dtVsub(v1, b,a); + dtVsub(v2, p,a); + + const float dot00 = dtVdot2D(v0, v0); + const float dot01 = dtVdot2D(v0, v1); + const float dot02 = dtVdot2D(v0, v2); + const float dot11 = dtVdot2D(v1, v1); + const float dot12 = dtVdot2D(v1, v2); + + // Compute barycentric coordinates + const float invDenom = 1.0f / (dot00 * dot11 - dot01 * dot01); + const float u = (dot11 * dot02 - dot01 * dot12) * invDenom; + const float v = (dot00 * dot12 - dot01 * dot02) * invDenom; + + // The (sloppy) epsilon is needed to allow to get height of points which + // are interpolated along the edges of the triangles. + static const float EPS = 1e-4f; + + // If point lies inside the triangle, return interpolated ycoord. + if (u >= -EPS && v >= -EPS && (u+v) <= 1+EPS) + { + h = a[1] + v0[1]*u + v1[1]*v; + return true; + } + + return false; +} + +bool dtPointInPolygon(const float* pt, const float* verts, const int nverts) +{ + // TODO: Replace pnpoly with triArea2D tests? + int i, j; + bool c = false; + for (i = 0, j = nverts-1; i < nverts; j = i++) + { + const float* vi = &verts[i*3]; + const float* vj = &verts[j*3]; + if (((vi[2] > pt[2]) != (vj[2] > pt[2])) && + (pt[0] < (vj[0]-vi[0]) * (pt[2]-vi[2]) / (vj[2]-vi[2]) + vi[0]) ) + c = !c; + } + return c; +} + +bool dtDistancePtPolyEdgesSqr(const float* pt, const float* verts, const int nverts, + float* ed, float* et) +{ + // TODO: Replace pnpoly with triArea2D tests? + int i, j; + bool c = false; + for (i = 0, j = nverts-1; i < nverts; j = i++) + { + const float* vi = &verts[i*3]; + const float* vj = &verts[j*3]; + if (((vi[2] > pt[2]) != (vj[2] > pt[2])) && + (pt[0] < (vj[0]-vi[0]) * (pt[2]-vi[2]) / (vj[2]-vi[2]) + vi[0]) ) + c = !c; + ed[j] = dtDistancePtSegSqr2D(pt, vj, vi, et[j]); + } + return c; +} + +static void projectPoly(const float* axis, const float* poly, const int npoly, + float& rmin, float& rmax) +{ + rmin = rmax = dtVdot2D(axis, &poly[0]); + for (int i = 1; i < npoly; ++i) + { + const float d = dtVdot2D(axis, &poly[i*3]); + rmin = dtMin(rmin, d); + rmax = dtMax(rmax, d); + } +} + +inline bool overlapRange(const float amin, const float amax, + const float bmin, const float bmax, + const float eps) +{ + return ((amin+eps) > bmax || (amax-eps) < bmin) ? false : true; +} + +bool dtOverlapPolyPoly2D(const float* polya, const int npolya, + const float* polyb, const int npolyb) +{ + const float eps = 1e-4f; + + for (int i = 0, j = npolya-1; i < npolya; j=i++) + { + const float* va = &polya[j*3]; + const float* vb = &polya[i*3]; + const float n[3] = { vb[2]-va[2], 0, -(vb[0]-va[0]) }; + float amin,amax,bmin,bmax; + projectPoly(n, polya, npolya, amin,amax); + projectPoly(n, polyb, npolyb, bmin,bmax); + if (!overlapRange(amin,amax, bmin,bmax, eps)) + { + // Found separating axis + return false; + } + } + for (int i = 0, j = npolyb-1; i < npolyb; j=i++) + { + const float* va = &polyb[j*3]; + const float* vb = &polyb[i*3]; + const float n[3] = { vb[2]-va[2], 0, -(vb[0]-va[0]) }; + float amin,amax,bmin,bmax; + projectPoly(n, polya, npolya, amin,amax); + projectPoly(n, polyb, npolyb, bmin,bmax); + if (!overlapRange(amin,amax, bmin,bmax, eps)) + { + // Found separating axis + return false; + } + } + return true; +} + diff --git a/dep/recastnavigation/Detour/DetourCommon.h b/dep/recastnavigation/Detour/DetourCommon.h new file mode 100644 index 00000000000..3cee3f63510 --- /dev/null +++ b/dep/recastnavigation/Detour/DetourCommon.h @@ -0,0 +1,248 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef DETOURCOMMON_H +#define DETOURCOMMON_H + +template inline void dtSwap(T& a, T& b) { T t = a; a = b; b = t; } +template inline T dtMin(T a, T b) { return a < b ? a : b; } +template inline T dtMax(T a, T b) { return a > b ? a : b; } +template inline T dtAbs(T a) { return a < 0 ? -a : a; } +template inline T dtSqr(T a) { return a*a; } +template inline T dtClamp(T v, T mn, T mx) { return v < mn ? mn : (v > mx ? mx : v); } + +float dtSqrt(float x); + +inline void dtVcross(float* dest, const float* v1, const float* v2) +{ + dest[0] = v1[1]*v2[2] - v1[2]*v2[1]; + dest[1] = v1[2]*v2[0] - v1[0]*v2[2]; + dest[2] = v1[0]*v2[1] - v1[1]*v2[0]; +} + +inline float dtVdot(const float* v1, const float* v2) +{ + return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; +} + +inline void dtVmad(float* dest, const float* v1, const float* v2, const float s) +{ + dest[0] = v1[0]+v2[0]*s; + dest[1] = v1[1]+v2[1]*s; + dest[2] = v1[2]+v2[2]*s; +} + +inline void dtVlerp(float* dest, const float* v1, const float* v2, const float t) +{ + dest[0] = v1[0]+(v2[0]-v1[0])*t; + dest[1] = v1[1]+(v2[1]-v1[1])*t; + dest[2] = v1[2]+(v2[2]-v1[2])*t; +} + +inline void dtVadd(float* dest, const float* v1, const float* v2) +{ + dest[0] = v1[0]+v2[0]; + dest[1] = v1[1]+v2[1]; + dest[2] = v1[2]+v2[2]; +} + +inline void dtVsub(float* dest, const float* v1, const float* v2) +{ + dest[0] = v1[0]-v2[0]; + dest[1] = v1[1]-v2[1]; + dest[2] = v1[2]-v2[2]; +} + +inline void dtVscale(float* dest, const float* v, const float t) +{ + dest[0] = v[0]*t; + dest[1] = v[1]*t; + dest[2] = v[2]*t; +} + +inline void dtVmin(float* mn, const float* v) +{ + mn[0] = dtMin(mn[0], v[0]); + mn[1] = dtMin(mn[1], v[1]); + mn[2] = dtMin(mn[2], v[2]); +} + +inline void dtVmax(float* mx, const float* v) +{ + mx[0] = dtMax(mx[0], v[0]); + mx[1] = dtMax(mx[1], v[1]); + mx[2] = dtMax(mx[2], v[2]); +} + +inline void dtVset(float* dest, const float x, const float y, const float z) +{ + dest[0] = x; dest[1] = y; dest[2] = z; +} + +inline void dtVcopy(float* dest, const float* a) +{ + dest[0] = a[0]; + dest[1] = a[1]; + dest[2] = a[2]; +} + +inline float dtVlen(const float* v) +{ + return dtSqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); +} + +inline float dtVlenSqr(const float* v) +{ + return v[0]*v[0] + v[1]*v[1] + v[2]*v[2]; +} + +inline float dtVdist(const float* v1, const float* v2) +{ + const float dx = v2[0] - v1[0]; + const float dy = v2[1] - v1[1]; + const float dz = v2[2] - v1[2]; + return dtSqrt(dx*dx + dy*dy + dz*dz); +} + +inline float dtVdistSqr(const float* v1, const float* v2) +{ + const float dx = v2[0] - v1[0]; + const float dy = v2[1] - v1[1]; + const float dz = v2[2] - v1[2]; + return dx*dx + dy*dy + dz*dz; +} + +inline float dtVdist2D(const float* v1, const float* v2) +{ + const float dx = v2[0] - v1[0]; + const float dz = v2[2] - v1[2]; + return dtSqrt(dx*dx + dz*dz); +} + +inline float dtVdist2DSqr(const float* v1, const float* v2) +{ + const float dx = v2[0] - v1[0]; + const float dz = v2[2] - v1[2]; + return dx*dx + dz*dz; +} + +inline void dtVnormalize(float* v) +{ + float d = 1.0f / dtSqrt(dtSqr(v[0]) + dtSqr(v[1]) + dtSqr(v[2])); + v[0] *= d; + v[1] *= d; + v[2] *= d; +} + +inline bool dtVequal(const float* p0, const float* p1) +{ + static const float thr = dtSqr(1.0f/16384.0f); + const float d = dtVdistSqr(p0, p1); + return d < thr; +} + +inline unsigned int dtNextPow2(unsigned int v) +{ + v--; + v |= v >> 1; + v |= v >> 2; + v |= v >> 4; + v |= v >> 8; + v |= v >> 16; + v++; + return v; +} + +inline unsigned int dtIlog2(unsigned int v) +{ + unsigned int r; + unsigned int shift; + r = (v > 0xffff) << 4; v >>= r; + shift = (v > 0xff) << 3; v >>= shift; r |= shift; + shift = (v > 0xf) << 2; v >>= shift; r |= shift; + shift = (v > 0x3) << 1; v >>= shift; r |= shift; + r |= (v >> 1); + return r; +} + +inline int dtAlign4(int x) { return (x+3) & ~3; } + +inline int dtOppositeTile(int side) { return (side+4) & 0x7; } + +inline float dtVdot2D(const float* u, const float* v) +{ + return u[0]*v[0] + u[2]*v[2]; +} + +inline float dtVperp2D(const float* u, const float* v) +{ + return u[2]*v[0] - u[0]*v[2]; +} + +inline float dtTriArea2D(const float* a, const float* b, const float* c) +{ + const float abx = b[0] - a[0]; + const float abz = b[2] - a[2]; + const float acx = c[0] - a[0]; + const float acz = c[2] - a[2]; + return acx*abz - abx*acz; +} + +inline bool dtOverlapQuantBounds(const unsigned short amin[3], const unsigned short amax[3], + const unsigned short bmin[3], const unsigned short bmax[3]) +{ + bool overlap = true; + overlap = (amin[0] > bmax[0] || amax[0] < bmin[0]) ? false : overlap; + overlap = (amin[1] > bmax[1] || amax[1] < bmin[1]) ? false : overlap; + overlap = (amin[2] > bmax[2] || amax[2] < bmin[2]) ? false : overlap; + return overlap; +} + +inline bool dtOverlapBounds(const float* amin, const float* amax, + const float* bmin, const float* bmax) +{ + bool overlap = true; + overlap = (amin[0] > bmax[0] || amax[0] < bmin[0]) ? false : overlap; + overlap = (amin[1] > bmax[1] || amax[1] < bmin[1]) ? false : overlap; + overlap = (amin[2] > bmax[2] || amax[2] < bmin[2]) ? false : overlap; + return overlap; +} + +void dtClosestPtPointTriangle(float* closest, const float* p, + const float* a, const float* b, const float* c); + +bool dtClosestHeightPointTriangle(const float* p, const float* a, const float* b, const float* c, float& h); + +bool dtIntersectSegmentPoly2D(const float* p0, const float* p1, + const float* verts, int nverts, + float& tmin, float& tmax, + int& segMin, int& segMax); + +bool dtPointInPolygon(const float* pt, const float* verts, const int nverts); + +bool dtDistancePtPolyEdgesSqr(const float* pt, const float* verts, const int nverts, + float* ed, float* et); + +float dtDistancePtSegSqr2D(const float* pt, const float* p, const float* q, float& t); + +void dtCalcPolyCenter(float* tc, const unsigned short* idx, int nidx, const float* verts); + +bool dtOverlapPolyPoly2D(const float* polya, const int npolya, + const float* polyb, const int npolyb); + +#endif // DETOURCOMMON_H diff --git a/dep/recastnavigation/Detour/DetourNavMesh.cpp b/dep/recastnavigation/Detour/DetourNavMesh.cpp new file mode 100644 index 00000000000..e139e3f5c63 --- /dev/null +++ b/dep/recastnavigation/Detour/DetourNavMesh.cpp @@ -0,0 +1,1235 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#include +#include +#include +#include +#include "DetourNavMesh.h" +#include "DetourNode.h" +#include "DetourCommon.h" +#include "DetourAlloc.h" +#include "DetourAssert.h" +#include + + +inline bool overlapSlabs(const float* amin, const float* amax, + const float* bmin, const float* bmax, + const float px, const float py) +{ + // Check for horizontal overlap. + // The segment is shrunken a little so that slabs which touch + // at end points are not connected. + const float minx = dtMax(amin[0]+px,bmin[0]+px); + const float maxx = dtMin(amax[0]-px,bmax[0]-px); + if (minx > maxx) + return false; + + // Check vertical overlap. + const float ad = (amax[1]-amin[1]) / (amax[0]-amin[0]); + const float ak = amin[1] - ad*amin[0]; + const float bd = (bmax[1]-bmin[1]) / (bmax[0]-bmin[0]); + const float bk = bmin[1] - bd*bmin[0]; + const float aminy = ad*minx + ak; + const float amaxy = ad*maxx + ak; + const float bminy = bd*minx + bk; + const float bmaxy = bd*maxx + bk; + const float dmin = bminy - aminy; + const float dmax = bmaxy - amaxy; + + // Crossing segments always overlap. + if (dmin*dmax < 0) + return true; + + // Check for overlap at endpoints. + const float thr = dtSqr(py*2); + if (dmin*dmin <= thr || dmax*dmax <= thr) + return true; + + return false; +} + +static void calcSlabEndPoints(const float* va, const float* vb, float* bmin, float* bmax, const int side) +{ + if (side == 0 || side == 4) + { + if (va[2] < vb[2]) + { + bmin[0] = va[2]; + bmin[1] = va[1]; + bmax[0] = vb[2]; + bmax[1] = vb[1]; + } + else + { + bmin[0] = vb[2]; + bmin[1] = vb[1]; + bmax[0] = va[2]; + bmax[1] = va[1]; + } + } + else if (side == 2 || side == 6) + { + if (va[0] < vb[0]) + { + bmin[0] = va[0]; + bmin[1] = va[1]; + bmax[0] = vb[0]; + bmax[1] = vb[1]; + } + else + { + bmin[0] = vb[0]; + bmin[1] = vb[1]; + bmax[0] = va[0]; + bmax[1] = va[1]; + } + } +} + +inline int computeTileHash(int x, int y, const int mask) +{ + const unsigned int h1 = 0x8da6b343; // Large multiplicative constants; + const unsigned int h2 = 0xd8163841; // here arbitrarily chosen primes + unsigned int n = h1 * x + h2 * y; + return (int)(n & mask); +} + +inline unsigned int allocLink(dtMeshTile* tile) +{ + if (tile->linksFreeList == DT_NULL_LINK) + return DT_NULL_LINK; + unsigned int link = tile->linksFreeList; + tile->linksFreeList = tile->links[link].next; + return link; +} + +inline void freeLink(dtMeshTile* tile, unsigned int link) +{ + tile->links[link].next = tile->linksFreeList; + tile->linksFreeList = link; +} + + +dtNavMesh* dtAllocNavMesh() +{ + void* mem = dtAlloc(sizeof(dtNavMesh), DT_ALLOC_PERM); + if (!mem) return 0; + return new(mem) dtNavMesh; +} + +void dtFreeNavMesh(dtNavMesh* navmesh) +{ + if (!navmesh) return; + navmesh->~dtNavMesh(); + dtFree(navmesh); +} + +////////////////////////////////////////////////////////////////////////////////////////// +dtNavMesh::dtNavMesh() : + m_tileWidth(0), + m_tileHeight(0), + m_maxTiles(0), + m_tileLutSize(0), + m_tileLutMask(0), + m_posLookup(0), + m_nextFree(0), + m_tiles(0), + m_saltBits(0), + m_tileBits(0), + m_polyBits(0) +{ + m_orig[0] = 0; + m_orig[1] = 0; + m_orig[2] = 0; +} + +dtNavMesh::~dtNavMesh() +{ + for (int i = 0; i < m_maxTiles; ++i) + { + if (m_tiles[i].flags & DT_TILE_FREE_DATA) + { + dtFree(m_tiles[i].data); + m_tiles[i].data = 0; + m_tiles[i].dataSize = 0; + } + } + dtFree(m_posLookup); + dtFree(m_tiles); +} + +dtStatus dtNavMesh::init(const dtNavMeshParams* params) +{ + memcpy(&m_params, params, sizeof(dtNavMeshParams)); + dtVcopy(m_orig, params->orig); + m_tileWidth = params->tileWidth; + m_tileHeight = params->tileHeight; + + // Init tiles + m_maxTiles = params->maxTiles; + m_tileLutSize = dtNextPow2(params->maxTiles/4); + if (!m_tileLutSize) m_tileLutSize = 1; + m_tileLutMask = m_tileLutSize-1; + + m_tiles = (dtMeshTile*)dtAlloc(sizeof(dtMeshTile)*m_maxTiles, DT_ALLOC_PERM); + if (!m_tiles) + return DT_FAILURE; + m_posLookup = (dtMeshTile**)dtAlloc(sizeof(dtMeshTile*)*m_tileLutSize, DT_ALLOC_PERM); + if (!m_posLookup) + return DT_FAILURE; + memset(m_tiles, 0, sizeof(dtMeshTile)*m_maxTiles); + memset(m_posLookup, 0, sizeof(dtMeshTile*)*m_tileLutSize); + m_nextFree = 0; + for (int i = m_maxTiles-1; i >= 0; --i) + { + m_tiles[i].salt = 1; + m_tiles[i].next = m_nextFree; + m_nextFree = &m_tiles[i]; + } + + // Init ID generator values. + m_tileBits = STATIC_TILE_BITS; //dtIlog2(dtNextPow2((unsigned int)params->maxTiles)); + m_polyBits = STATIC_POLY_BITS; //dtIlog2(dtNextPow2((unsigned int)params->maxPolys)); + m_saltBits = STATIC_SALT_BITS; //sizeof(dtPolyRef)*8 - m_tileBits - m_polyBits; + //if (m_saltBits < SALT_MIN_BITS) + //return DT_FAILURE; + + return DT_SUCCESS; +} + +dtStatus dtNavMesh::init(unsigned char* data, const int dataSize, const int flags) +{ + // Make sure the data is in right format. + dtMeshHeader* header = (dtMeshHeader*)data; + if (header->magic != DT_NAVMESH_MAGIC) + return DT_FAILURE; + if (header->version != DT_NAVMESH_VERSION) + return DT_FAILURE; + + dtNavMeshParams params; + dtVcopy(params.orig, header->bmin); + params.tileWidth = header->bmax[0] - header->bmin[0]; + params.tileHeight = header->bmax[2] - header->bmin[2]; + params.maxTiles = 1; + params.maxPolys = header->polyCount; + + dtStatus res = init(¶ms); + if (res != DT_SUCCESS) + return res; + + return addTile(data, dataSize, flags, 0, 0); +} + +const dtNavMeshParams* dtNavMesh::getParams() const +{ + return &m_params; +} + +////////////////////////////////////////////////////////////////////////////////////////// +int dtNavMesh::findConnectingPolys(const float* va, const float* vb, + const dtMeshTile* tile, int side, + dtPolyRef* con, float* conarea, int maxcon) const +{ + if (!tile) return 0; + + float amin[2], amax[2]; + calcSlabEndPoints(va,vb, amin,amax, side); + + // Remove links pointing to 'side' and compact the links array. + float bmin[2], bmax[2]; + unsigned short m = DT_EXT_LINK | (unsigned short)side; + int n = 0; + + dtPolyRef base = getPolyRefBase(tile); + + for (int i = 0; i < tile->header->polyCount; ++i) + { + dtPoly* poly = &tile->polys[i]; + const int nv = poly->vertCount; + for (int j = 0; j < nv; ++j) + { + // Skip edges which do not point to the right side. + if (poly->neis[j] != m) continue; + // Check if the segments touch. + const float* vc = &tile->verts[poly->verts[j]*3]; + const float* vd = &tile->verts[poly->verts[(j+1) % nv]*3]; + calcSlabEndPoints(vc,vd, bmin,bmax, side); + + if (!overlapSlabs(amin,amax, bmin,bmax, 0.01f, tile->header->walkableClimb)) continue; + + // Add return value. + if (n < maxcon) + { + conarea[n*2+0] = dtMax(amin[0], bmin[0]); + conarea[n*2+1] = dtMin(amax[0], bmax[0]); + con[n] = base | (dtPolyRef)i; + n++; + } + break; + } + } + return n; +} + +void dtNavMesh::unconnectExtLinks(dtMeshTile* tile, int side) +{ + if (!tile) return; + + for (int i = 0; i < tile->header->polyCount; ++i) + { + dtPoly* poly = &tile->polys[i]; + unsigned int j = poly->firstLink; + unsigned int pj = DT_NULL_LINK; + while (j != DT_NULL_LINK) + { + if (tile->links[j].side == side) + { + // Revove link. + unsigned int nj = tile->links[j].next; + if (pj == DT_NULL_LINK) + poly->firstLink = nj; + else + tile->links[pj].next = nj; + freeLink(tile, j); + j = nj; + } + else + { + // Advance + pj = j; + j = tile->links[j].next; + } + } + } +} + +void dtNavMesh::connectExtLinks(dtMeshTile* tile, dtMeshTile* target, int side) +{ + if (!tile) return; + + // Connect border links. + for (int i = 0; i < tile->header->polyCount; ++i) + { + dtPoly* poly = &tile->polys[i]; + + // Create new links. + unsigned short m = DT_EXT_LINK | (unsigned short)side; + const int nv = poly->vertCount; + for (int j = 0; j < nv; ++j) + { + // Skip edges which do not point to the right side. + if (poly->neis[j] != m) continue; + + // Create new links + const float* va = &tile->verts[poly->verts[j]*3]; + const float* vb = &tile->verts[poly->verts[(j+1) % nv]*3]; + dtPolyRef nei[4]; + float neia[4*2]; + int nnei = findConnectingPolys(va,vb, target, dtOppositeTile(side), nei,neia,4); + for (int k = 0; k < nnei; ++k) + { + unsigned int idx = allocLink(tile); + if (idx != DT_NULL_LINK) + { + dtLink* link = &tile->links[idx]; + link->ref = nei[k]; + link->edge = (unsigned char)j; + link->side = (unsigned char)side; + + link->next = poly->firstLink; + poly->firstLink = idx; + + // Compress portal limits to a byte value. + if (side == 0 || side == 4) + { + float tmin = (neia[k*2+0]-va[2]) / (vb[2]-va[2]); + float tmax = (neia[k*2+1]-va[2]) / (vb[2]-va[2]); + if (tmin > tmax) + dtSwap(tmin,tmax); + link->bmin = (unsigned char)(dtClamp(tmin, 0.0f, 1.0f)*255.0f); + link->bmax = (unsigned char)(dtClamp(tmax, 0.0f, 1.0f)*255.0f); + } + else if (side == 2 || side == 6) + { + float tmin = (neia[k*2+0]-va[0]) / (vb[0]-va[0]); + float tmax = (neia[k*2+1]-va[0]) / (vb[0]-va[0]); + if (tmin > tmax) + dtSwap(tmin,tmax); + link->bmin = (unsigned char)(dtClamp(tmin, 0.0f, 1.0f)*255.0f); + link->bmax = (unsigned char)(dtClamp(tmax, 0.0f, 1.0f)*255.0f); + } + } + } + } + } +} + +void dtNavMesh::connectExtOffMeshLinks(dtMeshTile* tile, dtMeshTile* target, int side) +{ + if (!tile) return; + + // Connect off-mesh links. + // We are interested on links which land from target tile to this tile. + const unsigned char oppositeSide = (unsigned char)dtOppositeTile(side); + + for (int i = 0; i < target->header->offMeshConCount; ++i) + { + dtOffMeshConnection* targetCon = &target->offMeshCons[i]; + if (targetCon->side != oppositeSide) + continue; + + dtPoly* targetPoly = &target->polys[targetCon->poly]; + + const float ext[3] = { targetCon->rad, target->header->walkableClimb, targetCon->rad }; + + // Find polygon to connect to. + const float* p = &targetCon->pos[3]; + float nearestPt[3]; + dtPolyRef ref = findNearestPolyInTile(tile, p, ext, nearestPt); + if (!ref) continue; + // findNearestPoly may return too optimistic results, further check to make sure. + if (dtSqr(nearestPt[0]-p[0])+dtSqr(nearestPt[2]-p[2]) > dtSqr(targetCon->rad)) + continue; + // Make sure the location is on current mesh. + float* v = &target->verts[targetPoly->verts[1]*3]; + dtVcopy(v, nearestPt); + + // Link off-mesh connection to target poly. + unsigned int idx = allocLink(target); + if (idx != DT_NULL_LINK) + { + dtLink* link = &target->links[idx]; + link->ref = ref; + link->edge = (unsigned char)1; + link->side = oppositeSide; + link->bmin = link->bmax = 0; + // Add to linked list. + link->next = targetPoly->firstLink; + targetPoly->firstLink = idx; + } + + // Link target poly to off-mesh connection. + if (targetCon->flags & DT_OFFMESH_CON_BIDIR) + { + unsigned int idx = allocLink(tile); + if (idx != DT_NULL_LINK) + { + const unsigned short landPolyIdx = (unsigned short)decodePolyIdPoly(ref); + dtPoly* landPoly = &tile->polys[landPolyIdx]; + dtLink* link = &tile->links[idx]; + link->ref = getPolyRefBase(target) | (dtPolyRef)(targetCon->poly); + link->edge = 0xff; + link->side = (unsigned char)side; + link->bmin = link->bmax = 0; + // Add to linked list. + link->next = landPoly->firstLink; + landPoly->firstLink = idx; + } + } + } + +} + +void dtNavMesh::connectIntLinks(dtMeshTile* tile) +{ + if (!tile) return; + + dtPolyRef base = getPolyRefBase(tile); + + for (int i = 0; i < tile->header->polyCount; ++i) + { + dtPoly* poly = &tile->polys[i]; + poly->firstLink = DT_NULL_LINK; + + if (poly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION) + continue; + + // Build edge links backwards so that the links will be + // in the linked list from lowest index to highest. + for (int j = poly->vertCount-1; j >= 0; --j) + { + // Skip hard and non-internal edges. + if (poly->neis[j] == 0 || (poly->neis[j] & DT_EXT_LINK)) continue; + + unsigned int idx = allocLink(tile); + if (idx != DT_NULL_LINK) + { + dtLink* link = &tile->links[idx]; + link->ref = base | (dtPolyRef)(poly->neis[j]-1); + link->edge = (unsigned char)j; + link->side = 0xff; + link->bmin = link->bmax = 0; + // Add to linked list. + link->next = poly->firstLink; + poly->firstLink = idx; + } + } + } +} + +void dtNavMesh::connectIntOffMeshLinks(dtMeshTile* tile) +{ + if (!tile) return; + + dtPolyRef base = getPolyRefBase(tile); + + // Find Off-mesh connection end points. + for (int i = 0; i < tile->header->offMeshConCount; ++i) + { + dtOffMeshConnection* con = &tile->offMeshCons[i]; + dtPoly* poly = &tile->polys[con->poly]; + + const float ext[3] = { con->rad, tile->header->walkableClimb, con->rad }; + + for (int j = 0; j < 2; ++j) + { + unsigned char side = j == 0 ? 0xff : con->side; + + if (side == 0xff) + { + // Find polygon to connect to. + const float* p = &con->pos[j*3]; + float nearestPt[3]; + dtPolyRef ref = findNearestPolyInTile(tile, p, ext, nearestPt); + if (!ref) continue; + // findNearestPoly may return too optimistic results, further check to make sure. + if (dtSqr(nearestPt[0]-p[0])+dtSqr(nearestPt[2]-p[2]) > dtSqr(con->rad)) + continue; + // Make sure the location is on current mesh. + float* v = &tile->verts[poly->verts[j]*3]; + dtVcopy(v, nearestPt); + + // Link off-mesh connection to target poly. + unsigned int idx = allocLink(tile); + if (idx != DT_NULL_LINK) + { + dtLink* link = &tile->links[idx]; + link->ref = ref; + link->edge = (unsigned char)j; + link->side = 0xff; + link->bmin = link->bmax = 0; + // Add to linked list. + link->next = poly->firstLink; + poly->firstLink = idx; + } + + // Start end-point is always connect back to off-mesh connection, + // Destination end-point only if it is bidirectional link. + if (j == 0 || (j == 1 && (con->flags & DT_OFFMESH_CON_BIDIR))) + { + // Link target poly to off-mesh connection. + unsigned int idx = allocLink(tile); + if (idx != DT_NULL_LINK) + { + const unsigned short landPolyIdx = (unsigned short)decodePolyIdPoly(ref); + dtPoly* landPoly = &tile->polys[landPolyIdx]; + dtLink* link = &tile->links[idx]; + link->ref = base | (dtPolyRef)(con->poly); + link->edge = 0xff; + link->side = 0xff; + link->bmin = link->bmax = 0; + // Add to linked list. + link->next = landPoly->firstLink; + landPoly->firstLink = idx; + } + } + + } + } + } +} + +dtStatus dtNavMesh::closestPointOnPolyInTile(const dtMeshTile* tile, unsigned int ip, + const float* pos, float* closest) const +{ + const dtPoly* poly = &tile->polys[ip]; + + float closestDistSqr = FLT_MAX; + const dtPolyDetail* pd = &tile->detailMeshes[ip]; + + for (int j = 0; j < pd->triCount; ++j) + { + const unsigned char* t = &tile->detailTris[(pd->triBase+j)*4]; + const float* v[3]; + for (int k = 0; k < 3; ++k) + { + if (t[k] < poly->vertCount) + v[k] = &tile->verts[poly->verts[t[k]]*3]; + else + v[k] = &tile->detailVerts[(pd->vertBase+(t[k]-poly->vertCount))*3]; + } + float pt[3]; + dtClosestPtPointTriangle(pt, pos, v[0], v[1], v[2]); + float d = dtVdistSqr(pos, pt); + if (d < closestDistSqr) + { + dtVcopy(closest, pt); + closestDistSqr = d; + } + } + + return DT_SUCCESS; +} + +dtPolyRef dtNavMesh::findNearestPolyInTile(const dtMeshTile* tile, + const float* center, const float* extents, + float* nearestPt) const +{ + float bmin[3], bmax[3]; + dtVsub(bmin, center, extents); + dtVadd(bmax, center, extents); + + // Get nearby polygons from proximity grid. + dtPolyRef polys[128]; + int polyCount = queryPolygonsInTile(tile, bmin, bmax, polys, 128); + + // Find nearest polygon amongst the nearby polygons. + dtPolyRef nearest = 0; + float nearestDistanceSqr = FLT_MAX; + for (int i = 0; i < polyCount; ++i) + { + dtPolyRef ref = polys[i]; + float closestPtPoly[3]; + if (closestPointOnPolyInTile(tile, decodePolyIdPoly(ref), center, closestPtPoly) != DT_SUCCESS) + continue; + float d = dtVdistSqr(center, closestPtPoly); + if (d < nearestDistanceSqr) + { + if (nearestPt) + dtVcopy(nearestPt, closestPtPoly); + nearestDistanceSqr = d; + nearest = ref; + } + } + + return nearest; +} + +int dtNavMesh::queryPolygonsInTile(const dtMeshTile* tile, const float* qmin, const float* qmax, + dtPolyRef* polys, const int maxPolys) const +{ + if (tile->bvTree) + { + const dtBVNode* node = &tile->bvTree[0]; + const dtBVNode* end = &tile->bvTree[tile->header->bvNodeCount]; + const float* tbmin = tile->header->bmin; + const float* tbmax = tile->header->bmax; + const float qfac = tile->header->bvQuantFactor; + + // Calculate quantized box + unsigned short bmin[3], bmax[3]; + // dtClamp query box to world box. + float minx = dtClamp(qmin[0], tbmin[0], tbmax[0]) - tbmin[0]; + float miny = dtClamp(qmin[1], tbmin[1], tbmax[1]) - tbmin[1]; + float minz = dtClamp(qmin[2], tbmin[2], tbmax[2]) - tbmin[2]; + float maxx = dtClamp(qmax[0], tbmin[0], tbmax[0]) - tbmin[0]; + float maxy = dtClamp(qmax[1], tbmin[1], tbmax[1]) - tbmin[1]; + float maxz = dtClamp(qmax[2], tbmin[2], tbmax[2]) - tbmin[2]; + // Quantize + bmin[0] = (unsigned short)(qfac * minx) & 0xfffe; + bmin[1] = (unsigned short)(qfac * miny) & 0xfffe; + bmin[2] = (unsigned short)(qfac * minz) & 0xfffe; + bmax[0] = (unsigned short)(qfac * maxx + 1) | 1; + bmax[1] = (unsigned short)(qfac * maxy + 1) | 1; + bmax[2] = (unsigned short)(qfac * maxz + 1) | 1; + + // Traverse tree + dtPolyRef base = getPolyRefBase(tile); + int n = 0; + while (node < end) + { + const bool overlap = dtOverlapQuantBounds(bmin, bmax, node->bmin, node->bmax); + const bool isLeafNode = node->i >= 0; + + if (isLeafNode && overlap) + { + if (n < maxPolys) + polys[n++] = base | (dtPolyRef)node->i; + } + + if (overlap || isLeafNode) + node++; + else + { + const int escapeIndex = -node->i; + node += escapeIndex; + } + } + + return n; + } + else + { + float bmin[3], bmax[3]; + int n = 0; + dtPolyRef base = getPolyRefBase(tile); + for (int i = 0; i < tile->header->polyCount; ++i) + { + // Calc polygon bounds. + dtPoly* p = &tile->polys[i]; + const float* v = &tile->verts[p->verts[0]*3]; + dtVcopy(bmin, v); + dtVcopy(bmax, v); + for (int j = 1; j < p->vertCount; ++j) + { + v = &tile->verts[p->verts[j]*3]; + dtVmin(bmin, v); + dtVmax(bmax, v); + } + if (dtOverlapBounds(qmin,qmax, bmin,bmax)) + { + if (n < maxPolys) + polys[n++] = base | (dtPolyRef)i; + } + } + return n; + } +} + +dtStatus dtNavMesh::addTile(unsigned char* data, int dataSize, int flags, + dtTileRef lastRef, dtTileRef* result) +{ + // Make sure the data is in right format. + dtMeshHeader* header = (dtMeshHeader*)data; + if (header->magic != DT_NAVMESH_MAGIC) + return DT_FAILURE_DATA_MAGIC; + if (header->version != DT_NAVMESH_VERSION) + return DT_FAILURE_DATA_VERSION; + + // Make sure the location is free. + if (getTileAt(header->x, header->y)) + return DT_FAILURE; + + // Allocate a tile. + dtMeshTile* tile = 0; + if (!lastRef) + { + if (m_nextFree) + { + tile = m_nextFree; + m_nextFree = tile->next; + tile->next = 0; + } + } + else + { + // Try to relocate the tile to specific index with same salt. + int tileIndex = (int)decodePolyIdTile((dtPolyRef)lastRef); + if (tileIndex >= m_maxTiles) + return DT_FAILURE_OUT_OF_MEMORY; + // Try to find the specific tile id from the free list. + dtMeshTile* target = &m_tiles[tileIndex]; + dtMeshTile* prev = 0; + tile = m_nextFree; + while (tile && tile != target) + { + prev = tile; + tile = tile->next; + } + // Could not find the correct location. + if (tile != target) + return DT_FAILURE_OUT_OF_MEMORY; + // Remove from freelist + if (!prev) + m_nextFree = tile->next; + else + prev->next = tile->next; + + // Restore salt. + tile->salt = decodePolyIdSalt((dtPolyRef)lastRef); + } + + // Make sure we could allocate a tile. + if (!tile) + return DT_FAILURE_OUT_OF_MEMORY; + + // Insert tile into the position lut. + int h = computeTileHash(header->x, header->y, m_tileLutMask); + tile->next = m_posLookup[h]; + m_posLookup[h] = tile; + + // Patch header pointers. + const int headerSize = dtAlign4(sizeof(dtMeshHeader)); + const int vertsSize = dtAlign4(sizeof(float)*3*header->vertCount); + const int polysSize = dtAlign4(sizeof(dtPoly)*header->polyCount); + const int linksSize = dtAlign4(sizeof(dtLink)*(header->maxLinkCount)); + const int detailMeshesSize = dtAlign4(sizeof(dtPolyDetail)*header->detailMeshCount); + const int detailVertsSize = dtAlign4(sizeof(float)*3*header->detailVertCount); + const int detailTrisSize = dtAlign4(sizeof(unsigned char)*4*header->detailTriCount); + const int bvtreeSize = dtAlign4(sizeof(dtBVNode)*header->bvNodeCount); + const int offMeshLinksSize = dtAlign4(sizeof(dtOffMeshConnection)*header->offMeshConCount); + + unsigned char* d = data + headerSize; + tile->verts = (float*)d; d += vertsSize; + tile->polys = (dtPoly*)d; d += polysSize; + tile->links = (dtLink*)d; d += linksSize; + tile->detailMeshes = (dtPolyDetail*)d; d += detailMeshesSize; + tile->detailVerts = (float*)d; d += detailVertsSize; + tile->detailTris = (unsigned char*)d; d += detailTrisSize; + tile->bvTree = (dtBVNode*)d; d += bvtreeSize; + tile->offMeshCons = (dtOffMeshConnection*)d; d += offMeshLinksSize; + + // Build links freelist + tile->linksFreeList = 0; + tile->links[header->maxLinkCount-1].next = DT_NULL_LINK; + for (int i = 0; i < header->maxLinkCount-1; ++i) + tile->links[i].next = i+1; + + // Init tile. + tile->header = header; + tile->data = data; + tile->dataSize = dataSize; + tile->flags = flags; + + connectIntLinks(tile); + connectIntOffMeshLinks(tile); + + // Create connections connections. + for (int i = 0; i < 8; ++i) + { + dtMeshTile* nei = getNeighbourTileAt(header->x, header->y, i); + if (nei) + { + connectExtLinks(tile, nei, i); + connectExtLinks(nei, tile, dtOppositeTile(i)); + connectExtOffMeshLinks(tile, nei, i); + connectExtOffMeshLinks(nei, tile, dtOppositeTile(i)); + } + } + + if (result) + *result = getTileRef(tile); + + return DT_SUCCESS; +} + +const dtMeshTile* dtNavMesh::getTileAt(int x, int y) const +{ + // Find tile based on hash. + int h = computeTileHash(x,y,m_tileLutMask); + dtMeshTile* tile = m_posLookup[h]; + while (tile) + { + if (tile->header && tile->header->x == x && tile->header->y == y) + return tile; + tile = tile->next; + } + return 0; +} + +dtMeshTile* dtNavMesh::getNeighbourTileAt(int x, int y, int side) const +{ + switch (side) + { + case 0: x++; break; + case 1: x++; y++; break; + case 2: y++; break; + case 3: x--; y++; break; + case 4: x--; break; + case 5: x--; y--; break; + case 6: y--; break; + case 7: x++; y--; break; + }; + + // Find tile based on hash. + int h = computeTileHash(x,y,m_tileLutMask); + dtMeshTile* tile = m_posLookup[h]; + while (tile) + { + if (tile->header && tile->header->x == x && tile->header->y == y) + return tile; + tile = tile->next; + } + return 0; +} + +dtTileRef dtNavMesh::getTileRefAt(int x, int y) const +{ + // Find tile based on hash. + int h = computeTileHash(x,y,m_tileLutMask); + dtMeshTile* tile = m_posLookup[h]; + while (tile) + { + if (tile->header && tile->header->x == x && tile->header->y == y) + return getTileRef(tile); + tile = tile->next; + } + return 0; +} + +const dtMeshTile* dtNavMesh::getTileByRef(dtTileRef ref) const +{ + if (!ref) + return 0; + unsigned int tileIndex = decodePolyIdTile((dtPolyRef)ref); + unsigned int tileSalt = decodePolyIdSalt((dtPolyRef)ref); + if ((int)tileIndex >= m_maxTiles) + return 0; + const dtMeshTile* tile = &m_tiles[tileIndex]; + if (tile->salt != tileSalt) + return 0; + return tile; +} + +int dtNavMesh::getMaxTiles() const +{ + return m_maxTiles; +} + +dtMeshTile* dtNavMesh::getTile(int i) +{ + return &m_tiles[i]; +} + +const dtMeshTile* dtNavMesh::getTile(int i) const +{ + return &m_tiles[i]; +} + +void dtNavMesh::calcTileLoc(const float* pos, int* tx, int* ty) const +{ + *tx = (int)floorf((pos[0]-m_orig[0]) / m_tileWidth); + *ty = (int)floorf((pos[2]-m_orig[2]) / m_tileHeight); +} + +dtStatus dtNavMesh::getTileAndPolyByRef(const dtPolyRef ref, const dtMeshTile** tile, const dtPoly** poly) const +{ + unsigned int salt, it, ip; + decodePolyId(ref, salt, it, ip); + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; + if (ip >= (unsigned int)m_tiles[it].header->polyCount) return DT_FAILURE; + *tile = &m_tiles[it]; + *poly = &m_tiles[it].polys[ip]; + return DT_SUCCESS; +} + +void dtNavMesh::getTileAndPolyByRefUnsafe(const dtPolyRef ref, const dtMeshTile** tile, const dtPoly** poly) const +{ + unsigned int salt, it, ip; + decodePolyId(ref, salt, it, ip); + *tile = &m_tiles[it]; + *poly = &m_tiles[it].polys[ip]; +} + +bool dtNavMesh::isValidPolyRef(dtPolyRef ref) const +{ + unsigned int salt, it, ip; + decodePolyId(ref, salt, it, ip); + if (it >= (unsigned int)m_maxTiles) return false; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return false; + if (ip >= (unsigned int)m_tiles[it].header->polyCount) return false; + return true; +} + +dtStatus dtNavMesh::removeTile(dtTileRef ref, unsigned char** data, int* dataSize) +{ + if (!ref) + return DT_FAILURE; + unsigned int tileIndex = decodePolyIdTile((dtPolyRef)ref); + unsigned int tileSalt = decodePolyIdSalt((dtPolyRef)ref); + if ((int)tileIndex >= m_maxTiles) + return DT_FAILURE; + dtMeshTile* tile = &m_tiles[tileIndex]; + if (tile->salt != tileSalt) + return DT_FAILURE; + + // Remove tile from hash lookup. + int h = computeTileHash(tile->header->x,tile->header->y,m_tileLutMask); + dtMeshTile* prev = 0; + dtMeshTile* cur = m_posLookup[h]; + while (cur) + { + if (cur == tile) + { + if (prev) + prev->next = cur->next; + else + m_posLookup[h] = cur->next; + break; + } + prev = cur; + cur = cur->next; + } + + // Remove connections to neighbour tiles. + for (int i = 0; i < 8; ++i) + { + dtMeshTile* nei = getNeighbourTileAt(tile->header->x,tile->header->y,i); + if (!nei) continue; + unconnectExtLinks(nei, dtOppositeTile(i)); + } + + + // Reset tile. + if (tile->flags & DT_TILE_FREE_DATA) + { + // Owns data + dtFree(tile->data); + tile->data = 0; + tile->dataSize = 0; + if (data) *data = 0; + if (dataSize) *dataSize = 0; + } + else + { + if (data) *data = tile->data; + if (dataSize) *dataSize = tile->dataSize; + } + + tile->header = 0; + tile->flags = 0; + tile->linksFreeList = 0; + tile->polys = 0; + tile->verts = 0; + tile->links = 0; + tile->detailMeshes = 0; + tile->detailVerts = 0; + tile->detailTris = 0; + tile->bvTree = 0; + tile->offMeshCons = 0; + + // Update salt, salt should never be zero. + tile->salt = (tile->salt+1) & ((1<salt == 0) + tile->salt++; + + // Add to free list. + tile->next = m_nextFree; + m_nextFree = tile; + + return DT_SUCCESS; +} + +dtTileRef dtNavMesh::getTileRef(const dtMeshTile* tile) const +{ + if (!tile) return 0; + const unsigned int it = tile - m_tiles; + return (dtTileRef)encodePolyId(tile->salt, it, 0); +} + +dtPolyRef dtNavMesh::getPolyRefBase(const dtMeshTile* tile) const +{ + if (!tile) return 0; + const unsigned int it = tile - m_tiles; + return encodePolyId(tile->salt, it, 0); +} + +struct dtTileState +{ + int magic; // Magic number, used to identify the data. + int version; // Data version number. + dtTileRef ref; // Tile ref at the time of storing the data. +}; + +struct dtPolyState +{ + unsigned short flags; // Flags (see dtPolyFlags). + unsigned char area; // Area ID of the polygon. +}; + +int dtNavMesh::getTileStateSize(const dtMeshTile* tile) const +{ + if (!tile) return 0; + const int headerSize = dtAlign4(sizeof(dtTileState)); + const int polyStateSize = dtAlign4(sizeof(dtPolyState) * tile->header->polyCount); + return headerSize + polyStateSize; +} + +dtStatus dtNavMesh::storeTileState(const dtMeshTile* tile, unsigned char* data, const int maxDataSize) const +{ + // Make sure there is enough space to store the state. + const int sizeReq = getTileStateSize(tile); + if (maxDataSize < sizeReq) + return DT_FAILURE; + + dtTileState* tileState = (dtTileState*)data; data += dtAlign4(sizeof(dtTileState)); + dtPolyState* polyStates = (dtPolyState*)data; data += dtAlign4(sizeof(dtPolyState) * tile->header->polyCount); + + // Store tile state. + tileState->magic = DT_NAVMESH_STATE_MAGIC; + tileState->version = DT_NAVMESH_STATE_VERSION; + tileState->ref = getTileRef(tile); + + // Store per poly state. + for (int i = 0; i < tile->header->polyCount; ++i) + { + const dtPoly* p = &tile->polys[i]; + dtPolyState* s = &polyStates[i]; + s->flags = p->flags; + s->area = p->getArea(); + } + + return DT_SUCCESS; +} + +dtStatus dtNavMesh::restoreTileState(dtMeshTile* tile, const unsigned char* data, const int maxDataSize) +{ + // Make sure there is enough space to store the state. + const int sizeReq = getTileStateSize(tile); + if (maxDataSize < sizeReq) + return DT_FAILURE; + + const dtTileState* tileState = (const dtTileState*)data; data += dtAlign4(sizeof(dtTileState)); + const dtPolyState* polyStates = (const dtPolyState*)data; data += dtAlign4(sizeof(dtPolyState) * tile->header->polyCount); + + // Check that the restore is possible. + if (tileState->magic != DT_NAVMESH_STATE_MAGIC) + return DT_FAILURE_DATA_MAGIC; + if (tileState->version != DT_NAVMESH_STATE_VERSION) + return DT_FAILURE_DATA_VERSION; + if (tileState->ref != getTileRef(tile)) + return DT_FAILURE; + + // Restore per poly state. + for (int i = 0; i < tile->header->polyCount; ++i) + { + dtPoly* p = &tile->polys[i]; + const dtPolyState* s = &polyStates[i]; + p->flags = s->flags; + p->setArea(s->area); + } + + return DT_SUCCESS; +} + +// Returns start and end location of an off-mesh link polygon. +dtStatus dtNavMesh::getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyRef polyRef, float* startPos, float* endPos) const +{ + unsigned int salt, it, ip; + + // Get current polygon + decodePolyId(polyRef, salt, it, ip); + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; + const dtMeshTile* tile = &m_tiles[it]; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; + const dtPoly* poly = &tile->polys[ip]; + + // Make sure that the current poly is indeed off-mesh link. + if (poly->getType() != DT_POLYTYPE_OFFMESH_CONNECTION) + return DT_FAILURE; + + // Figure out which way to hand out the vertices. + int idx0 = 0, idx1 = 1; + + // Find link that points to first vertex. + for (unsigned int i = poly->firstLink; i != DT_NULL_LINK; i = tile->links[i].next) + { + if (tile->links[i].edge == 0) + { + if (tile->links[i].ref != prevRef) + { + idx0 = 1; + idx1 = 0; + } + break; + } + } + + dtVcopy(startPos, &tile->verts[poly->verts[idx0]*3]); + dtVcopy(endPos, &tile->verts[poly->verts[idx1]*3]); + + return DT_SUCCESS; +} + + +const dtOffMeshConnection* dtNavMesh::getOffMeshConnectionByRef(dtPolyRef ref) const +{ + unsigned int salt, it, ip; + + // Get current polygon + decodePolyId(ref, salt, it, ip); + if (it >= (unsigned int)m_maxTiles) return 0; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return 0; + const dtMeshTile* tile = &m_tiles[it]; + if (ip >= (unsigned int)tile->header->polyCount) return 0; + const dtPoly* poly = &tile->polys[ip]; + + // Make sure that the current poly is indeed off-mesh link. + if (poly->getType() != DT_POLYTYPE_OFFMESH_CONNECTION) + return 0; + + const unsigned int idx = ip - tile->header->offMeshBase; + dtAssert(idx < (unsigned int)tile->header->offMeshConCount); + return &tile->offMeshCons[idx]; +} + + +dtStatus dtNavMesh::setPolyFlags(dtPolyRef ref, unsigned short flags) +{ + unsigned int salt, it, ip; + decodePolyId(ref, salt, it, ip); + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; + dtMeshTile* tile = &m_tiles[it]; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; + dtPoly* poly = &tile->polys[ip]; + + // Change flags. + poly->flags = flags; + + return DT_SUCCESS; +} + +dtStatus dtNavMesh::getPolyFlags(dtPolyRef ref, unsigned short* resultFlags) const +{ + unsigned int salt, it, ip; + decodePolyId(ref, salt, it, ip); + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; + const dtMeshTile* tile = &m_tiles[it]; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; + const dtPoly* poly = &tile->polys[ip]; + + *resultFlags = poly->flags; + + return DT_SUCCESS; +} + +dtStatus dtNavMesh::setPolyArea(dtPolyRef ref, unsigned char area) +{ + unsigned int salt, it, ip; + decodePolyId(ref, salt, it, ip); + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; + dtMeshTile* tile = &m_tiles[it]; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; + dtPoly* poly = &tile->polys[ip]; + + poly->setArea(area); + + return DT_SUCCESS; +} + +dtStatus dtNavMesh::getPolyArea(dtPolyRef ref, unsigned char* resultArea) const +{ + unsigned int salt, it, ip; + decodePolyId(ref, salt, it, ip); + if (it >= (unsigned int)m_maxTiles) return DT_FAILURE; + if (m_tiles[it].salt != salt || m_tiles[it].header == 0) return DT_FAILURE; + const dtMeshTile* tile = &m_tiles[it]; + if (ip >= (unsigned int)tile->header->polyCount) return DT_FAILURE; + const dtPoly* poly = &tile->polys[ip]; + + *resultArea = poly->getArea(); + + return DT_SUCCESS; +} + diff --git a/dep/recastnavigation/Detour/DetourNavMesh.h b/dep/recastnavigation/Detour/DetourNavMesh.h new file mode 100644 index 00000000000..52d2c505ec9 --- /dev/null +++ b/dep/recastnavigation/Detour/DetourNavMesh.h @@ -0,0 +1,428 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef DETOURNAVMESH_H +#define DETOURNAVMESH_H + +#include "DetourAlloc.h" + +#ifdef WIN32 + typedef unsigned __int64 uint64; +#else +#include +#ifndef uint64_t +#ifdef __linux__ +#include +#endif +#endif + typedef uint64_t uint64; +#endif + +// Note: If you want to use 64-bit refs, change the types of both dtPolyRef & dtTileRef. +// It is also recommended to change dtHashRef() to proper 64-bit hash too. + +// Reference to navigation polygon. +typedef uint64 dtPolyRef; + +// Reference to navigation mesh tile. +typedef uint64 dtTileRef; + +// Maximum number of vertices per navigation polygon. +static const int DT_VERTS_PER_POLYGON = 6; + +static const int DT_NAVMESH_MAGIC = 'D'<<24 | 'N'<<16 | 'A'<<8 | 'V'; //'DNAV'; +static const int DT_NAVMESH_VERSION = 6; + +static const int DT_NAVMESH_STATE_MAGIC = 'D'<<24 | 'N'<<16 | 'M'<<8 | 'S'; //'DNMS'; +static const int DT_NAVMESH_STATE_VERSION = 1; + +static const unsigned short DT_EXT_LINK = 0x8000; +static const unsigned int DT_NULL_LINK = 0xffffffff; +static const unsigned int DT_OFFMESH_CON_BIDIR = 1; + +static const int DT_MAX_AREAS = 64; + +static const int STATIC_SALT_BITS = 12; +static const int STATIC_TILE_BITS = 21; +static const int STATIC_POLY_BITS = 31; +// we cannot have over 31 bits for either tile nor poly +// without changing polyCount to use 64bits too. + +// Flags for addTile +enum dtTileFlags +{ + DT_TILE_FREE_DATA = 0x01, // Navmesh owns the tile memory and should free it. +}; + +// Flags returned by findStraightPath(). +enum dtStraightPathFlags +{ + DT_STRAIGHTPATH_START = 0x01, // The vertex is the start position. + DT_STRAIGHTPATH_END = 0x02, // The vertex is the end position. + DT_STRAIGHTPATH_OFFMESH_CONNECTION = 0x04, // The vertex is start of an off-mesh link. +}; + +// Flags describing polygon properties. +enum dtPolyTypes +{ + DT_POLYTYPE_GROUND = 0, // Regular ground polygons. + DT_POLYTYPE_OFFMESH_CONNECTION = 1, // Off-mesh connections. +}; + +enum dtStatus +{ + DT_FAILURE = 0, // Operation failed. + DT_FAILURE_DATA_MAGIC, + DT_FAILURE_DATA_VERSION, + DT_FAILURE_OUT_OF_MEMORY, + DT_SUCCESS, // Operation succeed. + DT_IN_PROGRESS, // Operation still in progress. +}; + + +// Structure describing the navigation polygon data. +struct dtPoly +{ + unsigned int firstLink; // Index to first link in linked list. + unsigned short verts[DT_VERTS_PER_POLYGON]; // Indices to vertices of the poly. + unsigned short neis[DT_VERTS_PER_POLYGON]; // Refs to neighbours of the poly. + unsigned short flags; // Flags (see dtPolyFlags). + unsigned char vertCount; // Number of vertices. + unsigned char areaAndtype; // Bit packed: Area ID of the polygon, and Polygon type, see dtPolyTypes.. + inline void setArea(unsigned char a) { areaAndtype = (areaAndtype & 0xc0) | (a & 0x3f); } + inline void setType(unsigned char t) { areaAndtype = (areaAndtype & 0x3f) | (t << 6); } + inline unsigned char getArea() const { return areaAndtype & 0x3f; } + inline unsigned char getType() const { return areaAndtype >> 6; } +}; + +// Stucture describing polygon detail triangles. +struct dtPolyDetail +{ + unsigned int vertBase; // Offset to detail vertex array. + unsigned int triBase; // Offset to detail triangle array. + unsigned char vertCount; // Number of vertices in the detail mesh. + unsigned char triCount; // Number of triangles. +}; + +// Stucture describing a link to another polygon. +struct dtLink +{ + dtPolyRef ref; // Neighbour reference. + unsigned int next; // Index to next link. + unsigned char edge; // Index to polygon edge which owns this link. + unsigned char side; // If boundary link, defines on which side the link is. + unsigned char bmin, bmax; // If boundary link, defines the sub edge area. +}; + +struct dtBVNode +{ + unsigned short bmin[3], bmax[3]; // BVnode bounds + int i; // Index to item or if negative, escape index. +}; + +struct dtOffMeshConnection +{ + float pos[6]; // Both end point locations. + float rad; // Link connection radius. + unsigned short poly; // Poly Id + unsigned char flags; // Link flags + unsigned char side; // End point side. + unsigned int userId; // User ID to identify this connection. +}; + +struct dtMeshHeader +{ + int magic; // Magic number, used to identify the data. + int version; // Data version number. + int x, y; // Location of the time on the grid. + unsigned int userId; // User ID of the tile. + int polyCount; // Number of polygons in the tile. + int vertCount; // Number of vertices in the tile. + int maxLinkCount; // Number of allocated links. + int detailMeshCount; // Number of detail meshes. + int detailVertCount; // Number of detail vertices. + int detailTriCount; // Number of detail triangles. + int bvNodeCount; // Number of BVtree nodes. + int offMeshConCount; // Number of Off-Mesh links. + int offMeshBase; // Index to first polygon which is Off-Mesh link. + float walkableHeight; // Height of the agent. + float walkableRadius; // Radius of the agent + float walkableClimb; // Max climb height of the agent. + float bmin[3], bmax[3]; // Bounding box of the tile. + float bvQuantFactor; // BVtree quantization factor (world to bvnode coords) +}; + +struct dtMeshTile +{ + unsigned int salt; // Counter describing modifications to the tile. + + unsigned int linksFreeList; // Index to next free link. + dtMeshHeader* header; // Pointer to tile header. + dtPoly* polys; // Pointer to the polygons (will be updated when tile is added). + float* verts; // Pointer to the vertices (will be updated when tile added). + dtLink* links; // Pointer to the links (will be updated when tile added). + dtPolyDetail* detailMeshes; // Pointer to detail meshes (will be updated when tile added). + float* detailVerts; // Pointer to detail vertices (will be updated when tile added). + unsigned char* detailTris; // Pointer to detail triangles (will be updated when tile added). + dtBVNode* bvTree; // Pointer to BVtree nodes (will be updated when tile added). + dtOffMeshConnection* offMeshCons; // Pointer to Off-Mesh links. (will be updated when tile added). + + unsigned char* data; // Pointer to tile data. + int dataSize; // Size of the tile data. + int flags; // Tile flags, see dtTileFlags. + dtMeshTile* next; // Next free tile or, next tile in spatial grid. +}; + +struct dtNavMeshParams +{ + float orig[3]; // Origin of the nav mesh tile space. + float tileWidth, tileHeight; // Width and height of each tile. + int maxTiles; // Maximum number of tiles the navmesh can contain. + int maxPolys; // Maximum number of polygons each tile can contain. +}; + + +class dtNavMesh +{ +public: + dtNavMesh(); + ~dtNavMesh(); + + // Initializes the nav mesh for tiled use. + // Params: + // params - (in) navmesh initialization params, see dtNavMeshParams. + // Returns: True if succeed, else false. + dtStatus init(const dtNavMeshParams* params); + + // Initializes the nav mesh for single tile use. + // Params: + // data - (in) Data of the new tile mesh. + // dataSize - (in) Data size of the new tile mesh. + // flags - (in) Tile flags, see dtTileFlags. + // Returns: True if succeed, else false. + dtStatus init(unsigned char* data, const int dataSize, const int flags); + + // Returns pointer to navmesh initialization params. + const dtNavMeshParams* getParams() const; + + // Adds new tile into the navmesh. + // The add will fail if the data is in wrong format, + // there is not enough tiles left, or if there is a tile already at the location. + // Params: + // data - (in) Data of the new tile mesh. + // dataSize - (in) Data size of the new tile mesh. + // flags - (in) Tile flags, see dtTileFlags. + // lastRef - (in,optional) Last tile ref, the tile will be restored so that + // the reference (as well as poly references) will be the same. Default: 0. + // result - (out,optional) tile ref if the tile was succesfully added. + dtStatus addTile(unsigned char* data, int dataSize, int flags, dtTileRef lastRef, dtTileRef* result); + + // Removes specified tile. + // Params: + // ref - (in) Reference to the tile to remove. + // data - (out) Data associated with deleted tile. + // dataSize - (out) Size of the data associated with deleted tile. + dtStatus removeTile(dtTileRef ref, unsigned char** data, int* dataSize); + + // Calculates tile location based in input world position. + // Params: + // pos - (in) world position of the query. + // tx - (out) tile x location. + // ty - (out) tile y location. + void calcTileLoc(const float* pos, int* tx, int* ty) const; + + // Returns pointer to tile at specified location. + // Params: + // x,y - (in) Location of the tile to get. + // Returns: pointer to tile if tile exists or 0 tile does not exists. + const dtMeshTile* getTileAt(int x, int y) const; + + // Returns reference to tile at specified location. + // Params: + // x,y - (in) Location of the tile to get. + // Returns: reference to tile if tile exists or 0 tile does not exists. + dtTileRef getTileRefAt(int x, int y) const; + + // Returns tile references of a tile based on tile pointer. + dtTileRef getTileRef(const dtMeshTile* tile) const; + + // Returns tile based on references. + const dtMeshTile* getTileByRef(dtTileRef ref) const; + + // Returns max number of tiles. + int getMaxTiles() const; + + // Returns pointer to tile in the tile array. + // Params: + // i - (in) Index to the tile to retrieve, max index is getMaxTiles()-1. + // Returns: Pointer to specified tile. + const dtMeshTile* getTile(int i) const; + + // Returns pointer to tile and polygon pointed by the polygon reference. + // Params: + // ref - (in) reference to a polygon. + // tile - (out) pointer to the tile containing the polygon. + // poly - (out) pointer to the polygon. + dtStatus getTileAndPolyByRef(const dtPolyRef ref, const dtMeshTile** tile, const dtPoly** poly) const; + + // Returns pointer to tile and polygon pointed by the polygon reference. + // Note: this function does not check if 'ref' s valid, and is thus faster. Use only with valid refs! + // Params: + // ref - (in) reference to a polygon. + // tile - (out) pointer to the tile containing the polygon. + // poly - (out) pointer to the polygon. + void getTileAndPolyByRefUnsafe(const dtPolyRef ref, const dtMeshTile** tile, const dtPoly** poly) const; + + // Returns true if polygon reference points to valid data. + bool isValidPolyRef(dtPolyRef ref) const; + + // Returns base poly id for specified tile, polygon refs can be deducted from this. + dtPolyRef getPolyRefBase(const dtMeshTile* tile) const; + + // Returns start and end location of an off-mesh link polygon. + // Params: + // prevRef - (in) ref to the polygon before the link (used to select direction). + // polyRef - (in) ref to the off-mesh link polygon. + // startPos[3] - (out) start point of the link. + // endPos[3] - (out) end point of the link. + // Returns: true if link is found. + dtStatus getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyRef polyRef, float* startPos, float* endPos) const; + + // Returns pointer to off-mesh connection based on polyref, or null if ref not valid. + const dtOffMeshConnection* getOffMeshConnectionByRef(dtPolyRef ref) const; + + // Sets polygon flags. + dtStatus setPolyFlags(dtPolyRef ref, unsigned short flags); + + // Return polygon flags. + dtStatus getPolyFlags(dtPolyRef ref, unsigned short* resultFlags) const; + + // Set polygon type. + dtStatus setPolyArea(dtPolyRef ref, unsigned char area); + + // Return polygon area type. + dtStatus getPolyArea(dtPolyRef ref, unsigned char* resultArea) const; + + + // Returns number of bytes required to store tile state. + int getTileStateSize(const dtMeshTile* tile) const; + + // Stores tile state to buffer. + dtStatus storeTileState(const dtMeshTile* tile, unsigned char* data, const int maxDataSize) const; + + // Restores tile state. + dtStatus restoreTileState(dtMeshTile* tile, const unsigned char* data, const int maxDataSize); + + + // Encodes a tile id. + inline dtPolyRef encodePolyId(unsigned int salt, unsigned int it, unsigned int ip) const + { + return ((dtPolyRef)salt << (m_polyBits+m_tileBits)) | ((dtPolyRef)it << m_polyBits) | (dtPolyRef)ip; + } + + // Decodes a tile id. + inline void decodePolyId(dtPolyRef ref, unsigned int& salt, unsigned int& it, unsigned int& ip) const + { + const dtPolyRef saltMask = ((dtPolyRef)1<> (m_polyBits+m_tileBits)) & saltMask); + it = (unsigned int)((ref >> m_polyBits) & tileMask); + ip = (unsigned int)(ref & polyMask); + } + + // Decodes a tile salt. + inline unsigned int decodePolyIdSalt(dtPolyRef ref) const + { + const dtPolyRef saltMask = ((dtPolyRef)1<> (m_polyBits+m_tileBits)) & saltMask); + } + + // Decodes a tile id. + inline unsigned int decodePolyIdTile(dtPolyRef ref) const + { + const dtPolyRef tileMask = ((dtPolyRef)1<> m_polyBits) & tileMask); + } + + // Decodes a poly id. + inline unsigned int decodePolyIdPoly(dtPolyRef ref) const + { + const dtPolyRef polyMask = ((dtPolyRef)1< +#include +#include +#include +#include "DetourNavMesh.h" +#include "DetourCommon.h" +#include "DetourNavMeshBuilder.h" +#include "DetourAlloc.h" +#include "DetourAssert.h" + +static unsigned short MESH_NULL_IDX = 0xffff; + + +struct BVItem +{ + unsigned short bmin[3]; + unsigned short bmax[3]; + int i; +}; + +static int compareItemX(const void* va, const void* vb) +{ + const BVItem* a = (const BVItem*)va; + const BVItem* b = (const BVItem*)vb; + if (a->bmin[0] < b->bmin[0]) + return -1; + if (a->bmin[0] > b->bmin[0]) + return 1; + return 0; +} + +static int compareItemY(const void* va, const void* vb) +{ + const BVItem* a = (const BVItem*)va; + const BVItem* b = (const BVItem*)vb; + if (a->bmin[1] < b->bmin[1]) + return -1; + if (a->bmin[1] > b->bmin[1]) + return 1; + return 0; +} + +static int compareItemZ(const void* va, const void* vb) +{ + const BVItem* a = (const BVItem*)va; + const BVItem* b = (const BVItem*)vb; + if (a->bmin[2] < b->bmin[2]) + return -1; + if (a->bmin[2] > b->bmin[2]) + return 1; + return 0; +} + +static void calcExtends(BVItem* items, const int /*nitems*/, const int imin, const int imax, + unsigned short* bmin, unsigned short* bmax) +{ + bmin[0] = items[imin].bmin[0]; + bmin[1] = items[imin].bmin[1]; + bmin[2] = items[imin].bmin[2]; + + bmax[0] = items[imin].bmax[0]; + bmax[1] = items[imin].bmax[1]; + bmax[2] = items[imin].bmax[2]; + + for (int i = imin+1; i < imax; ++i) + { + const BVItem& it = items[i]; + if (it.bmin[0] < bmin[0]) bmin[0] = it.bmin[0]; + if (it.bmin[1] < bmin[1]) bmin[1] = it.bmin[1]; + if (it.bmin[2] < bmin[2]) bmin[2] = it.bmin[2]; + + if (it.bmax[0] > bmax[0]) bmax[0] = it.bmax[0]; + if (it.bmax[1] > bmax[1]) bmax[1] = it.bmax[1]; + if (it.bmax[2] > bmax[2]) bmax[2] = it.bmax[2]; + } +} + +inline int longestAxis(unsigned short x, unsigned short y, unsigned short z) +{ + int axis = 0; + unsigned short maxVal = x; + if (y > maxVal) + { + axis = 1; + maxVal = y; + } + if (z > maxVal) + { + axis = 2; + maxVal = z; + } + return axis; +} + +static void subdivide(BVItem* items, int nitems, int imin, int imax, int& curNode, dtBVNode* nodes) +{ + int inum = imax - imin; + int icur = curNode; + + dtBVNode& node = nodes[curNode++]; + + if (inum == 1) + { + // Leaf + node.bmin[0] = items[imin].bmin[0]; + node.bmin[1] = items[imin].bmin[1]; + node.bmin[2] = items[imin].bmin[2]; + + node.bmax[0] = items[imin].bmax[0]; + node.bmax[1] = items[imin].bmax[1]; + node.bmax[2] = items[imin].bmax[2]; + + node.i = items[imin].i; + } + else + { + // Split + calcExtends(items, nitems, imin, imax, node.bmin, node.bmax); + + int axis = longestAxis(node.bmax[0] - node.bmin[0], + node.bmax[1] - node.bmin[1], + node.bmax[2] - node.bmin[2]); + + if (axis == 0) + { + // Sort along x-axis + qsort(items+imin, inum, sizeof(BVItem), compareItemX); + } + else if (axis == 1) + { + // Sort along y-axis + qsort(items+imin, inum, sizeof(BVItem), compareItemY); + } + else + { + // Sort along z-axis + qsort(items+imin, inum, sizeof(BVItem), compareItemZ); + } + + int isplit = imin+inum/2; + + // Left + subdivide(items, nitems, imin, isplit, curNode, nodes); + // Right + subdivide(items, nitems, isplit, imax, curNode, nodes); + + int iescape = curNode - icur; + // Negative index means escape. + node.i = -iescape; + } +} + +static int createBVTree(const unsigned short* verts, const int /*nverts*/, + const unsigned short* polys, const int npolys, const int nvp, + const float cs, const float ch, + const int /*nnodes*/, dtBVNode* nodes) +{ + // Build tree + BVItem* items = (BVItem*)dtAlloc(sizeof(BVItem)*npolys, DT_ALLOC_TEMP); + for (int i = 0; i < npolys; i++) + { + BVItem& it = items[i]; + it.i = i; + // Calc polygon bounds. + const unsigned short* p = &polys[i*nvp*2]; + it.bmin[0] = it.bmax[0] = verts[p[0]*3+0]; + it.bmin[1] = it.bmax[1] = verts[p[0]*3+1]; + it.bmin[2] = it.bmax[2] = verts[p[0]*3+2]; + + for (int j = 1; j < nvp; ++j) + { + if (p[j] == MESH_NULL_IDX) break; + unsigned short x = verts[p[j]*3+0]; + unsigned short y = verts[p[j]*3+1]; + unsigned short z = verts[p[j]*3+2]; + + if (x < it.bmin[0]) it.bmin[0] = x; + if (y < it.bmin[1]) it.bmin[1] = y; + if (z < it.bmin[2]) it.bmin[2] = z; + + if (x > it.bmax[0]) it.bmax[0] = x; + if (y > it.bmax[1]) it.bmax[1] = y; + if (z > it.bmax[2]) it.bmax[2] = z; + } + // Remap y + it.bmin[1] = (unsigned short)floorf((float)it.bmin[1]*ch/cs); + it.bmax[1] = (unsigned short)ceilf((float)it.bmax[1]*ch/cs); + } + + int curNode = 0; + subdivide(items, npolys, 0, npolys, curNode, nodes); + + dtFree(items); + + return curNode; +} + +static unsigned char classifyOffMeshPoint(const float* pt, const float* bmin, const float* bmax) +{ + static const unsigned char XP = 1<<0; + static const unsigned char ZP = 1<<1; + static const unsigned char XM = 1<<2; + static const unsigned char ZM = 1<<3; + + unsigned char outcode = 0; + outcode |= (pt[0] >= bmax[0]) ? XP : 0; + outcode |= (pt[2] >= bmax[2]) ? ZP : 0; + outcode |= (pt[0] < bmin[0]) ? XM : 0; + outcode |= (pt[2] < bmin[2]) ? ZM : 0; + + switch (outcode) + { + case XP: return 0; + case XP|ZP: return 1; + case ZP: return 2; + case XM|ZP: return 3; + case XM: return 4; + case XM|ZM: return 5; + case ZM: return 6; + case XP|ZM: return 7; + }; + return 0xff; +} + +// TODO: Better error handling. + +bool dtCreateNavMeshData(dtNavMeshCreateParams* params, unsigned char** outData, int* outDataSize) +{ + if (params->nvp > DT_VERTS_PER_POLYGON) + return false; + if (params->vertCount >= 0xffff) + return false; + if (!params->vertCount || !params->verts) + return false; + if (!params->polyCount || !params->polys) + return false; + if (!params->detailMeshes || !params->detailVerts || !params->detailTris) + return false; + + const int nvp = params->nvp; + + // Classify off-mesh connection points. We store only the connections + // whose start point is inside the tile. + unsigned char* offMeshConClass = 0; + int storedOffMeshConCount = 0; + int offMeshConLinkCount = 0; + + if (params->offMeshConCount > 0) + { + offMeshConClass = (unsigned char*)dtAlloc(sizeof(unsigned char)*params->offMeshConCount*2, DT_ALLOC_TEMP); + if (!offMeshConClass) + return false; + + for (int i = 0; i < params->offMeshConCount; ++i) + { + offMeshConClass[i*2+0] = classifyOffMeshPoint(¶ms->offMeshConVerts[(i*2+0)*3], params->bmin, params->bmax); + offMeshConClass[i*2+1] = classifyOffMeshPoint(¶ms->offMeshConVerts[(i*2+1)*3], params->bmin, params->bmax); + + // Cound how many links should be allocated for off-mesh connections. + if (offMeshConClass[i*2+0] == 0xff) + offMeshConLinkCount++; + if (offMeshConClass[i*2+1] == 0xff) + offMeshConLinkCount++; + + if (offMeshConClass[i*2+0] == 0xff) + storedOffMeshConCount++; + } + } + + // Off-mesh connectionss are stored as polygons, adjust values. + const int totPolyCount = params->polyCount + storedOffMeshConCount; + const int totVertCount = params->vertCount + storedOffMeshConCount*2; + + // Find portal edges which are at tile borders. + int edgeCount = 0; + int portalCount = 0; + for (int i = 0; i < params->polyCount; ++i) + { + const unsigned short* p = ¶ms->polys[i*2*nvp]; + for (int j = 0; j < nvp; ++j) + { + if (p[j] == MESH_NULL_IDX) break; + int nj = j+1; + if (nj >= nvp || p[nj] == MESH_NULL_IDX) nj = 0; + const unsigned short* va = ¶ms->verts[p[j]*3]; + const unsigned short* vb = ¶ms->verts[p[nj]*3]; + + edgeCount++; + + if (params->tileSize > 0) + { + if (va[0] == params->tileSize && vb[0] == params->tileSize) + portalCount++; // x+ + else if (va[2] == params->tileSize && vb[2] == params->tileSize) + portalCount++; // z+ + else if (va[0] == 0 && vb[0] == 0) + portalCount++; // x- + else if (va[2] == 0 && vb[2] == 0) + portalCount++; // z- + } + } + } + + const int maxLinkCount = edgeCount + portalCount*2 + offMeshConLinkCount*2; + + // Find unique detail vertices. + int uniqueDetailVertCount = 0; + for (int i = 0; i < params->polyCount; ++i) + { + const unsigned short* p = ¶ms->polys[i*nvp*2]; + int ndv = params->detailMeshes[i*4+1]; + int nv = 0; + for (int j = 0; j < nvp; ++j) + { + if (p[j] == MESH_NULL_IDX) break; + nv++; + } + ndv -= nv; + uniqueDetailVertCount += ndv; + } + + // Calculate data size + const int headerSize = dtAlign4(sizeof(dtMeshHeader)); + const int vertsSize = dtAlign4(sizeof(float)*3*totVertCount); + const int polysSize = dtAlign4(sizeof(dtPoly)*totPolyCount); + const int linksSize = dtAlign4(sizeof(dtLink)*maxLinkCount); + const int detailMeshesSize = dtAlign4(sizeof(dtPolyDetail)*params->polyCount); + const int detailVertsSize = dtAlign4(sizeof(float)*3*uniqueDetailVertCount); + const int detailTrisSize = dtAlign4(sizeof(unsigned char)*4*params->detailTriCount); + const int bvTreeSize = dtAlign4(sizeof(dtBVNode)*params->polyCount*2); + const int offMeshConsSize = dtAlign4(sizeof(dtOffMeshConnection)*storedOffMeshConCount); + + const int dataSize = headerSize + vertsSize + polysSize + linksSize + + detailMeshesSize + detailVertsSize + detailTrisSize + + bvTreeSize + offMeshConsSize; + + unsigned char* data = (unsigned char*)dtAlloc(sizeof(unsigned char)*dataSize, DT_ALLOC_PERM); + if (!data) + { + dtFree(offMeshConClass); + return false; + } + memset(data, 0, dataSize); + + unsigned char* d = data; + dtMeshHeader* header = (dtMeshHeader*)d; d += headerSize; + float* navVerts = (float*)d; d += vertsSize; + dtPoly* navPolys = (dtPoly*)d; d += polysSize; + d += linksSize; + dtPolyDetail* navDMeshes = (dtPolyDetail*)d; d += detailMeshesSize; + float* navDVerts = (float*)d; d += detailVertsSize; + unsigned char* navDTris = (unsigned char*)d; d += detailTrisSize; + dtBVNode* navBvtree = (dtBVNode*)d; d += bvTreeSize; + dtOffMeshConnection* offMeshCons = (dtOffMeshConnection*)d; d += offMeshConsSize; + + + // Store header + header->magic = DT_NAVMESH_MAGIC; + header->version = DT_NAVMESH_VERSION; + header->x = params->tileX; + header->y = params->tileY; + header->userId = params->userId; + header->polyCount = totPolyCount; + header->vertCount = totVertCount; + header->maxLinkCount = maxLinkCount; + dtVcopy(header->bmin, params->bmin); + dtVcopy(header->bmax, params->bmax); + header->detailMeshCount = params->polyCount; + header->detailVertCount = uniqueDetailVertCount; + header->detailTriCount = params->detailTriCount; + header->bvQuantFactor = 1.0f / params->cs; + header->offMeshBase = params->polyCount; + header->walkableHeight = params->walkableHeight; + header->walkableRadius = params->walkableRadius; + header->walkableClimb = params->walkableClimb; + header->offMeshConCount = storedOffMeshConCount; + header->bvNodeCount = params->polyCount*2; + + const int offMeshVertsBase = params->vertCount; + const int offMeshPolyBase = params->polyCount; + + // Store vertices + // Mesh vertices + for (int i = 0; i < params->vertCount; ++i) + { + const unsigned short* iv = ¶ms->verts[i*3]; + float* v = &navVerts[i*3]; + v[0] = params->bmin[0] + iv[0] * params->cs; + v[1] = params->bmin[1] + iv[1] * params->ch; + v[2] = params->bmin[2] + iv[2] * params->cs; + } + // Off-mesh link vertices. + int n = 0; + for (int i = 0; i < params->offMeshConCount; ++i) + { + // Only store connections which start from this tile. + if (offMeshConClass[i*2+0] == 0xff) + { + const float* linkv = ¶ms->offMeshConVerts[i*2*3]; + float* v = &navVerts[(offMeshVertsBase + n*2)*3]; + dtVcopy(&v[0], &linkv[0]); + dtVcopy(&v[3], &linkv[3]); + n++; + } + } + + // Store polygons + // Mesh polys + const unsigned short* src = params->polys; + for (int i = 0; i < params->polyCount; ++i) + { + dtPoly* p = &navPolys[i]; + p->vertCount = 0; + p->flags = params->polyFlags[i]; + p->setArea(params->polyAreas[i]); + p->setType(DT_POLYTYPE_GROUND); + for (int j = 0; j < nvp; ++j) + { + if (src[j] == MESH_NULL_IDX) break; + p->verts[j] = src[j]; + p->neis[j] = (src[nvp+j]+1) & 0xffff; + p->vertCount++; + } + src += nvp*2; + } + // Off-mesh connection vertices. + n = 0; + for (int i = 0; i < params->offMeshConCount; ++i) + { + // Only store connections which start from this tile. + if (offMeshConClass[i*2+0] == 0xff) + { + dtPoly* p = &navPolys[offMeshPolyBase+n]; + p->vertCount = 2; + p->verts[0] = (unsigned short)(offMeshVertsBase + n*2+0); + p->verts[1] = (unsigned short)(offMeshVertsBase + n*2+1); + p->flags = params->offMeshConFlags[i]; + p->setArea(params->offMeshConAreas[i]); + p->setType(DT_POLYTYPE_OFFMESH_CONNECTION); + n++; + } + } + + // Store portal edges. + if (params->tileSize > 0) + { + for (int i = 0; i < params->polyCount; ++i) + { + dtPoly* poly = &navPolys[i]; + for (int j = 0; j < poly->vertCount; ++j) + { + int nj = j+1; + if (nj >= poly->vertCount) nj = 0; + + const unsigned short* va = ¶ms->verts[poly->verts[j]*3]; + const unsigned short* vb = ¶ms->verts[poly->verts[nj]*3]; + + if (va[0] == params->tileSize && vb[0] == params->tileSize) // x+ + poly->neis[j] = DT_EXT_LINK | 0; + else if (va[2] == params->tileSize && vb[2] == params->tileSize) // z+ + poly->neis[j] = DT_EXT_LINK | 2; + else if (va[0] == 0 && vb[0] == 0) // x- + poly->neis[j] = DT_EXT_LINK | 4; + else if (va[2] == 0 && vb[2] == 0) // z- + poly->neis[j] = DT_EXT_LINK | 6; + } + } + } + + // Store detail meshes and vertices. + // The nav polygon vertices are stored as the first vertices on each mesh. + // We compress the mesh data by skipping them and using the navmesh coordinates. + unsigned short vbase = 0; + for (int i = 0; i < params->polyCount; ++i) + { + dtPolyDetail& dtl = navDMeshes[i]; + const int vb = (int)params->detailMeshes[i*4+0]; + const int ndv = (int)params->detailMeshes[i*4+1]; + const int nv = navPolys[i].vertCount; + dtl.vertBase = (unsigned int)vbase; + dtl.vertCount = (unsigned char)(ndv-nv); + dtl.triBase = (unsigned int)params->detailMeshes[i*4+2]; + dtl.triCount = (unsigned char)params->detailMeshes[i*4+3]; + // Copy vertices except the first 'nv' verts which are equal to nav poly verts. + if (ndv-nv) + { + memcpy(&navDVerts[vbase*3], ¶ms->detailVerts[(vb+nv)*3], sizeof(float)*3*(ndv-nv)); + vbase += (unsigned short)(ndv-nv); + } + } + // Store triangles. + memcpy(navDTris, params->detailTris, sizeof(unsigned char)*4*params->detailTriCount); + + // Store and create BVtree. + // TODO: take detail mesh into account! use byte per bbox extent? + createBVTree(params->verts, params->vertCount, params->polys, params->polyCount, + nvp, params->cs, params->ch, params->polyCount*2, navBvtree); + + // Store Off-Mesh connections. + n = 0; + for (int i = 0; i < params->offMeshConCount; ++i) + { + // Only store connections which start from this tile. + if (offMeshConClass[i*2+0] == 0xff) + { + dtOffMeshConnection* con = &offMeshCons[n]; + con->poly = (unsigned short)(offMeshPolyBase + n); + // Copy connection end-points. + const float* endPts = ¶ms->offMeshConVerts[i*2*3]; + dtVcopy(&con->pos[0], &endPts[0]); + dtVcopy(&con->pos[3], &endPts[3]); + con->rad = params->offMeshConRad[i]; + con->flags = params->offMeshConDir[i] ? DT_OFFMESH_CON_BIDIR : 0; + con->side = offMeshConClass[i*2+1]; + if (params->offMeshConUserID) + con->userId = params->offMeshConUserID[i]; + n++; + } + } + + dtFree(offMeshConClass); + + *outData = data; + *outDataSize = dataSize; + + return true; +} + +inline void swapByte(unsigned char* a, unsigned char* b) +{ + unsigned char tmp = *a; + *a = *b; + *b = tmp; +} + +inline void swapEndian(unsigned short* v) +{ + unsigned char* x = (unsigned char*)v; + swapByte(x+0, x+1); +} + +inline void swapEndian(short* v) +{ + unsigned char* x = (unsigned char*)v; + swapByte(x+0, x+1); +} + +inline void swapEndian(unsigned int* v) +{ + unsigned char* x = (unsigned char*)v; + swapByte(x+0, x+3); swapByte(x+1, x+2); +} + +inline void swapEndian(int* v) +{ + unsigned char* x = (unsigned char*)v; + swapByte(x+0, x+3); swapByte(x+1, x+2); +} + +inline void swapEndian(float* v) +{ + unsigned char* x = (unsigned char*)v; + swapByte(x+0, x+3); swapByte(x+1, x+2); +} + +bool dtNavMeshHeaderSwapEndian(unsigned char* data, const int /*dataSize*/) +{ + dtMeshHeader* header = (dtMeshHeader*)data; + + int swappedMagic = DT_NAVMESH_MAGIC; + int swappedVersion = DT_NAVMESH_VERSION; + swapEndian(&swappedMagic); + swapEndian(&swappedVersion); + + if ((header->magic != DT_NAVMESH_MAGIC || header->version != DT_NAVMESH_VERSION) && + (header->magic != swappedMagic || header->version != swappedVersion)) + { + return false; + } + + swapEndian(&header->magic); + swapEndian(&header->version); + swapEndian(&header->x); + swapEndian(&header->y); + swapEndian(&header->userId); + swapEndian(&header->polyCount); + swapEndian(&header->vertCount); + swapEndian(&header->maxLinkCount); + swapEndian(&header->detailMeshCount); + swapEndian(&header->detailVertCount); + swapEndian(&header->detailTriCount); + swapEndian(&header->bvNodeCount); + swapEndian(&header->offMeshConCount); + swapEndian(&header->offMeshBase); + swapEndian(&header->walkableHeight); + swapEndian(&header->walkableRadius); + swapEndian(&header->walkableClimb); + swapEndian(&header->bmin[0]); + swapEndian(&header->bmin[1]); + swapEndian(&header->bmin[2]); + swapEndian(&header->bmax[0]); + swapEndian(&header->bmax[1]); + swapEndian(&header->bmax[2]); + swapEndian(&header->bvQuantFactor); + + // Freelist index and pointers are updated when tile is added, no need to swap. + + return true; +} + +bool dtNavMeshDataSwapEndian(unsigned char* data, const int /*dataSize*/) +{ + // Make sure the data is in right format. + dtMeshHeader* header = (dtMeshHeader*)data; + if (header->magic != DT_NAVMESH_MAGIC) + return false; + if (header->version != DT_NAVMESH_VERSION) + return false; + + // Patch header pointers. + const int headerSize = dtAlign4(sizeof(dtMeshHeader)); + const int vertsSize = dtAlign4(sizeof(float)*3*header->vertCount); + const int polysSize = dtAlign4(sizeof(dtPoly)*header->polyCount); + const int linksSize = dtAlign4(sizeof(dtLink)*(header->maxLinkCount)); + const int detailMeshesSize = dtAlign4(sizeof(dtPolyDetail)*header->detailMeshCount); + const int detailVertsSize = dtAlign4(sizeof(float)*3*header->detailVertCount); + const int detailTrisSize = dtAlign4(sizeof(unsigned char)*4*header->detailTriCount); + const int bvtreeSize = dtAlign4(sizeof(dtBVNode)*header->bvNodeCount); + const int offMeshLinksSize = dtAlign4(sizeof(dtOffMeshConnection)*header->offMeshConCount); + + unsigned char* d = data + headerSize; + float* verts = (float*)d; d += vertsSize; + dtPoly* polys = (dtPoly*)d; d += polysSize; + /*dtLink* links = (dtLink*)d;*/ d += linksSize; + dtPolyDetail* detailMeshes = (dtPolyDetail*)d; d += detailMeshesSize; + float* detailVerts = (float*)d; d += detailVertsSize; + /*unsigned char* detailTris = (unsigned char*)d;*/ d += detailTrisSize; + dtBVNode* bvTree = (dtBVNode*)d; d += bvtreeSize; + dtOffMeshConnection* offMeshCons = (dtOffMeshConnection*)d; d += offMeshLinksSize; + + // Vertices + for (int i = 0; i < header->vertCount*3; ++i) + { + swapEndian(&verts[i]); + } + + // Polys + for (int i = 0; i < header->polyCount; ++i) + { + dtPoly* p = &polys[i]; + // poly->firstLink is update when tile is added, no need to swap. + for (int j = 0; j < DT_VERTS_PER_POLYGON; ++j) + { + swapEndian(&p->verts[j]); + swapEndian(&p->neis[j]); + } + swapEndian(&p->flags); + } + + // Links are rebuild when tile is added, no need to swap. + + // Detail meshes + for (int i = 0; i < header->detailMeshCount; ++i) + { + dtPolyDetail* pd = &detailMeshes[i]; + swapEndian(&pd->vertBase); + swapEndian(&pd->triBase); + } + + // Detail verts + for (int i = 0; i < header->detailVertCount*3; ++i) + { + swapEndian(&detailVerts[i]); + } + + // BV-tree + for (int i = 0; i < header->bvNodeCount; ++i) + { + dtBVNode* node = &bvTree[i]; + for (int j = 0; j < 3; ++j) + { + swapEndian(&node->bmin[j]); + swapEndian(&node->bmax[j]); + } + swapEndian(&node->i); + } + + // Off-mesh Connections. + for (int i = 0; i < header->offMeshConCount; ++i) + { + dtOffMeshConnection* con = &offMeshCons[i]; + for (int j = 0; j < 6; ++j) + swapEndian(&con->pos[j]); + swapEndian(&con->rad); + swapEndian(&con->poly); + } + + return true; +} diff --git a/dep/recastnavigation/Detour/DetourNavMeshBuilder.h b/dep/recastnavigation/Detour/DetourNavMeshBuilder.h new file mode 100644 index 00000000000..8d8ef2e6546 --- /dev/null +++ b/dep/recastnavigation/Detour/DetourNavMeshBuilder.h @@ -0,0 +1,77 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef DETOURNAVMESHBUILDER_H +#define DETOURNAVMESHBUILDER_H + +#include "DetourAlloc.h" + + +// The units of the parameters are specified in parenthesis as follows: +// (vx) voxels, (wu) world units +struct dtNavMeshCreateParams +{ + // Navmesh vertices. + const unsigned short* verts; // Array of vertices, each vertex has 3 components. (vx). + int vertCount; // Vertex count + // Navmesh polygons + const unsigned short* polys; // Array of polygons, uses same format as rcPolyMesh. + const unsigned short* polyFlags; // Array of flags per polygon. + const unsigned char* polyAreas; // Array of area ids per polygon. + int polyCount; // Number of polygons + int nvp; // Number of verts per polygon. + // Navmesh Detail + const unsigned int* detailMeshes; // Detail meshes, uses same format as rcPolyMeshDetail. + const float* detailVerts; // Detail mesh vertices, uses same format as rcPolyMeshDetail (wu). + int detailVertsCount; // Total number of detail vertices + const unsigned char* detailTris; // Array of detail tris per detail mesh. + int detailTriCount; // Total number of detail triangles. + // Off-Mesh Connections. + const float* offMeshConVerts; // Off-mesh connection vertices (wu). + const float* offMeshConRad; // Off-mesh connection radii (wu). + const unsigned short* offMeshConFlags; // Off-mesh connection flags. + const unsigned char* offMeshConAreas; // Off-mesh connection area ids. + const unsigned char* offMeshConDir; // Off-mesh connection direction flags (1 = bidir, 0 = oneway). + const unsigned int* offMeshConUserID; // Off-mesh connection user id (optional). + int offMeshConCount; // Number of off-mesh connections + // Tile location + unsigned int userId; // User ID bound to the tile. + int tileX, tileY; // Tile location (tile coords). + float bmin[3], bmax[3]; // Tile bounds (wu). + // Settings + float walkableHeight; // Agent height (wu). + float walkableRadius; // Agent radius (wu). + float walkableClimb; // Agent max climb (wu). + float cs; // Cell size (xz) (wu). + float ch; // Cell height (y) (wu). + int tileSize; // Tile size (width & height) (vx). +}; + +// Build navmesh data from given input data. +bool dtCreateNavMeshData(dtNavMeshCreateParams* params, unsigned char** outData, int* outDataSize); + +// Swaps endianess of navmesh header. +bool dtNavMeshHeaderSwapEndian(unsigned char* data, const int dataSize); + +// Swaps endianess of the navmesh data. This function assumes that the header is in correct +// endianess already. Call dtNavMeshHeaderSwapEndian() first on the data if the data is +// assumed to be in wrong endianess to start with. If converting from native endianess to foreign, +// call dtNavMeshHeaderSwapEndian() after the data has been swapped. +bool dtNavMeshDataSwapEndian(unsigned char* data, const int dataSize); + +#endif // DETOURNAVMESHBUILDER_H diff --git a/dep/recastnavigation/Detour/DetourNavMeshQuery.cpp b/dep/recastnavigation/Detour/DetourNavMeshQuery.cpp new file mode 100644 index 00000000000..6a6eb94b6d4 --- /dev/null +++ b/dep/recastnavigation/Detour/DetourNavMeshQuery.cpp @@ -0,0 +1,2564 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#include +#include +#include +#include "DetourNavMeshQuery.h" +#include "DetourNavMesh.h" +#include "DetourNode.h" +#include "DetourCommon.h" +#include "DetourAlloc.h" +#include "DetourAssert.h" +#include + + +dtQueryFilter::dtQueryFilter() : + m_includeFlags(0xffff), + m_excludeFlags(0) +{ + for (int i = 0; i < DT_MAX_AREAS; ++i) + m_areaCost[i] = 1.0f; +} + +#ifdef DT_VIRTUAL_QUERYFILTER +bool dtQueryFilter::passFilter(const dtPolyRef /*ref*/, + const dtMeshTile* /*tile*/, + const dtPoly* poly) const +{ + return (poly->flags & m_includeFlags) != 0 && (poly->flags & m_excludeFlags) == 0; +} + +float dtQueryFilter::getCost(const float* pa, const float* pb, + const dtPolyRef /*prevRef*/, const dtMeshTile* /*prevTile*/, const dtPoly* /*prevPoly*/, + const dtPolyRef /*curRef*/, const dtMeshTile* /*curTile*/, const dtPoly* curPoly, + const dtPolyRef /*nextRef*/, const dtMeshTile* /*nextTile*/, const dtPoly* /*nextPoly*/) const +{ + return dtVdist(pa, pb) * m_areaCost[curPoly->area]; +} +#else +inline bool dtQueryFilter::passFilter(const dtPolyRef /*ref*/, + const dtMeshTile* /*tile*/, + const dtPoly* poly) const +{ + return (poly->flags & m_includeFlags) != 0 && (poly->flags & m_excludeFlags) == 0; +} + +inline float dtQueryFilter::getCost(const float* pa, const float* pb, + const dtPolyRef /*prevRef*/, const dtMeshTile* /*prevTile*/, const dtPoly* /*prevPoly*/, + const dtPolyRef /*curRef*/, const dtMeshTile* /*curTile*/, const dtPoly* curPoly, + const dtPolyRef /*nextRef*/, const dtMeshTile* /*nextTile*/, const dtPoly* /*nextPoly*/) const +{ + return dtVdist(pa, pb) * m_areaCost[curPoly->getArea()]; +} +#endif + +static const float H_SCALE = 2.0f; // Search heuristic scale. + + +dtNavMeshQuery* dtAllocNavMeshQuery() +{ + void* mem = dtAlloc(sizeof(dtNavMeshQuery), DT_ALLOC_PERM); + if (!mem) return 0; + return new(mem) dtNavMeshQuery; +} + +void dtFreeNavMeshQuery(dtNavMeshQuery* navmesh) +{ + if (!navmesh) return; + navmesh->~dtNavMeshQuery(); + dtFree(navmesh); +} + +////////////////////////////////////////////////////////////////////////////////////////// +dtNavMeshQuery::dtNavMeshQuery() : + m_tinyNodePool(0), + m_nodePool(0), + m_openList(0) +{ + memset(&m_query, 0, sizeof(dtQueryData)); +} + +dtNavMeshQuery::~dtNavMeshQuery() +{ + if (m_tinyNodePool) + m_tinyNodePool->~dtNodePool(); + if (m_nodePool) + m_nodePool->~dtNodePool(); + if (m_openList) + m_openList->~dtNodeQueue(); + dtFree(m_tinyNodePool); + dtFree(m_nodePool); + dtFree(m_openList); +} + +dtStatus dtNavMeshQuery::init(const dtNavMesh* nav, const int maxNodes) +{ + m_nav = nav; + + if (!m_nodePool || m_nodePool->getMaxNodes() < maxNodes) + { + if (m_nodePool) + { + m_nodePool->~dtNodePool(); + dtFree(m_nodePool); + m_nodePool = 0; + } + m_nodePool = new (dtAlloc(sizeof(dtNodePool), DT_ALLOC_PERM)) dtNodePool(maxNodes, dtNextPow2(maxNodes/4)); + if (!m_nodePool) + return DT_FAILURE_OUT_OF_MEMORY; + } + else + { + m_nodePool->clear(); + } + + if (!m_tinyNodePool) + { + m_tinyNodePool = new (dtAlloc(sizeof(dtNodePool), DT_ALLOC_PERM)) dtNodePool(64, 32); + if (!m_tinyNodePool) + return DT_FAILURE_OUT_OF_MEMORY; + } + else + { + m_tinyNodePool->clear(); + } + + // TODO: check the open list size too. + if (!m_openList || m_openList->getCapacity() < maxNodes) + { + if (m_openList) + { + m_openList->~dtNodeQueue(); + dtFree(m_openList); + m_openList = 0; + } + m_openList = new (dtAlloc(sizeof(dtNodeQueue), DT_ALLOC_PERM)) dtNodeQueue(maxNodes); + if (!m_openList) + return DT_FAILURE_OUT_OF_MEMORY; + } + else + { + m_openList->clear(); + } + + return DT_SUCCESS; +} + +////////////////////////////////////////////////////////////////////////////////////////// +dtStatus dtNavMeshQuery::closestPointOnPoly(dtPolyRef ref, const float* pos, float* closest) const +{ + dtAssert(m_nav); + const dtMeshTile* tile = 0; + const dtPoly* poly = 0; + if (m_nav->getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) + return DT_FAILURE; + if (!tile) return DT_FAILURE; + + if (poly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION) + return DT_FAILURE; + + if (closestPointOnPolyInTile(tile, poly, pos, closest) != DT_SUCCESS) + return DT_FAILURE; + return DT_SUCCESS; +} + +dtStatus dtNavMeshQuery::closestPointOnPolyInTile(const dtMeshTile* tile, const dtPoly* poly, + const float* pos, float* closest) const +{ + const unsigned int ip = (unsigned int)(poly - tile->polys); + const dtPolyDetail* pd = &tile->detailMeshes[ip]; + + // TODO: The commented out version finds 'cylinder distance' instead of 'sphere distance' to the navmesh. + // Test and enable. +/* + // Clamp point to be inside the polygon. + float verts[DT_VERTS_PER_POLYGON*3]; + float edged[DT_VERTS_PER_POLYGON]; + float edget[DT_VERTS_PER_POLYGON]; + const int nv = poly->vertCount; + for (int i = 0; i < nv; ++i) + dtVcopy(&verts[i*3], &tile->verts[poly->verts[i]*3]); + + dtVcopy(closest, pos); + if (!dtDistancePtPolyEdgesSqr(pos, verts, nv, edged, edget)) + { + // Point is outside the polygon, dtClamp to nearest edge. + float dmin = FLT_MAX; + int imin = -1; + for (int i = 0; i < nv; ++i) + { + if (edged[i] < dmin) + { + dmin = edged[i]; + imin = i; + } + } + const float* va = &verts[imin*3]; + const float* vb = &verts[((imin+1)%nv)*3]; + dtVlerp(closest, va, vb, edget[imin]); + } + + // Find height at the location. + for (int j = 0; j < pd->triCount; ++j) + { + const unsigned char* t = &tile->detailTris[(pd->triBase+j)*4]; + const float* v[3]; + for (int k = 0; k < 3; ++k) + { + if (t[k] < poly->vertCount) + v[k] = &tile->verts[poly->verts[t[k]]*3]; + else + v[k] = &tile->detailVerts[(pd->vertBase+(t[k]-poly->vertCount))*3]; + } + float h; + if (dtClosestHeightPointTriangle(pos, v[0], v[1], v[2], h)) + { + closest[1] = h; + break; + } + } +*/ + float closestDistSqr = FLT_MAX; + for (int j = 0; j < pd->triCount; ++j) + { + const unsigned char* t = &tile->detailTris[(pd->triBase+j)*4]; + const float* v[3]; + for (int k = 0; k < 3; ++k) + { + if (t[k] < poly->vertCount) + v[k] = &tile->verts[poly->verts[t[k]]*3]; + else + v[k] = &tile->detailVerts[(pd->vertBase+(t[k]-poly->vertCount))*3]; + } + + float pt[3]; + dtClosestPtPointTriangle(pt, pos, v[0], v[1], v[2]); + float d = dtVdistSqr(pos, pt); + + if (d < closestDistSqr) + { + dtVcopy(closest, pt); + closestDistSqr = d; + } + } + + return DT_SUCCESS; +} + +dtStatus dtNavMeshQuery::closestPointOnPolyBoundary(dtPolyRef ref, const float* pos, float* closest) const +{ + dtAssert(m_nav); + + const dtMeshTile* tile = 0; + const dtPoly* poly = 0; + if (m_nav->getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) + return DT_FAILURE; + + // Collect vertices. + float verts[DT_VERTS_PER_POLYGON*3]; + float edged[DT_VERTS_PER_POLYGON]; + float edget[DT_VERTS_PER_POLYGON]; + int nv = 0; + for (int i = 0; i < (int)poly->vertCount; ++i) + { + dtVcopy(&verts[nv*3], &tile->verts[poly->verts[i]*3]); + nv++; + } + + bool inside = dtDistancePtPolyEdgesSqr(pos, verts, nv, edged, edget); + if (inside) + { + // Point is inside the polygon, return the point. + dtVcopy(closest, pos); + } + else + { + // Point is outside the polygon, dtClamp to nearest edge. + float dmin = FLT_MAX; + int imin = -1; + for (int i = 0; i < nv; ++i) + { + if (edged[i] < dmin) + { + dmin = edged[i]; + imin = i; + } + } + const float* va = &verts[imin*3]; + const float* vb = &verts[((imin+1)%nv)*3]; + dtVlerp(closest, va, vb, edget[imin]); + } + + return DT_SUCCESS; +} + + +dtStatus dtNavMeshQuery::getPolyHeight(dtPolyRef ref, const float* pos, float* height) const +{ + dtAssert(m_nav); + + const dtMeshTile* tile = 0; + const dtPoly* poly = 0; + if (m_nav->getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) + return DT_FAILURE; + + if (poly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION) + { + const float* v0 = &tile->verts[poly->verts[0]*3]; + const float* v1 = &tile->verts[poly->verts[1]*3]; + const float d0 = dtVdist(pos, v0); + const float d1 = dtVdist(pos, v1); + const float u = d0 / (d0+d1); + if (height) + *height = v0[1] + (v1[1] - v0[1]) * u; + return DT_SUCCESS; + } + else + { + const unsigned int ip = (unsigned int)(poly - tile->polys); + const dtPolyDetail* pd = &tile->detailMeshes[ip]; + for (int j = 0; j < pd->triCount; ++j) + { + const unsigned char* t = &tile->detailTris[(pd->triBase+j)*4]; + const float* v[3]; + for (int k = 0; k < 3; ++k) + { + if (t[k] < poly->vertCount) + v[k] = &tile->verts[poly->verts[t[k]]*3]; + else + v[k] = &tile->detailVerts[(pd->vertBase+(t[k]-poly->vertCount))*3]; + } + float h; + if (dtClosestHeightPointTriangle(pos, v[0], v[1], v[2], h)) + { + if (height) + *height = h; + return DT_SUCCESS; + } + } + } + + return DT_FAILURE; +} + +dtStatus dtNavMeshQuery::findNearestPoly(const float* center, const float* extents, + const dtQueryFilter* filter, + dtPolyRef* nearestRef, float* nearestPt) const +{ + dtAssert(m_nav); + + *nearestRef = 0; + + // Get nearby polygons from proximity grid. + dtPolyRef polys[128]; + int polyCount = 0; + if (queryPolygons(center, extents, filter, polys, &polyCount, 128) != DT_SUCCESS) + return DT_FAILURE; + + // Find nearest polygon amongst the nearby polygons. + dtPolyRef nearest = 0; + float nearestDistanceSqr = FLT_MAX; + for (int i = 0; i < polyCount; ++i) + { + dtPolyRef ref = polys[i]; + float closestPtPoly[3]; + if (closestPointOnPoly(ref, center, closestPtPoly) != DT_SUCCESS) + continue; + float d = dtVdistSqr(center, closestPtPoly); + if (d < nearestDistanceSqr) + { + if (nearestPt) + dtVcopy(nearestPt, closestPtPoly); + nearestDistanceSqr = d; + nearest = ref; + } + } + + if (nearestRef) + *nearestRef = nearest; + + return DT_SUCCESS; +} + +dtPolyRef dtNavMeshQuery::findNearestPolyInTile(const dtMeshTile* tile, const float* center, const float* extents, + const dtQueryFilter* filter, float* nearestPt) const +{ + dtAssert(m_nav); + + float bmin[3], bmax[3]; + dtVsub(bmin, center, extents); + dtVadd(bmax, center, extents); + + // Get nearby polygons from proximity grid. + dtPolyRef polys[128]; + int polyCount = queryPolygonsInTile(tile, bmin, bmax, filter, polys, 128); + + // Find nearest polygon amongst the nearby polygons. + dtPolyRef nearest = 0; + float nearestDistanceSqr = FLT_MAX; + for (int i = 0; i < polyCount; ++i) + { + dtPolyRef ref = polys[i]; + const dtPoly* poly = &tile->polys[m_nav->decodePolyIdPoly(ref)]; + float closestPtPoly[3]; + if (closestPointOnPolyInTile(tile, poly, center, closestPtPoly) != DT_SUCCESS) + continue; + + float d = dtVdistSqr(center, closestPtPoly); + if (d < nearestDistanceSqr) + { + if (nearestPt) + dtVcopy(nearestPt, closestPtPoly); + nearestDistanceSqr = d; + nearest = ref; + } + } + + return nearest; +} + +int dtNavMeshQuery::queryPolygonsInTile(const dtMeshTile* tile, const float* qmin, const float* qmax, + const dtQueryFilter* filter, + dtPolyRef* polys, const int maxPolys) const +{ + dtAssert(m_nav); + + if (tile->bvTree) + { + const dtBVNode* node = &tile->bvTree[0]; + const dtBVNode* end = &tile->bvTree[tile->header->bvNodeCount]; + const float* tbmin = tile->header->bmin; + const float* tbmax = tile->header->bmax; + const float qfac = tile->header->bvQuantFactor; + + // Calculate quantized box + unsigned short bmin[3], bmax[3]; + // dtClamp query box to world box. + float minx = dtClamp(qmin[0], tbmin[0], tbmax[0]) - tbmin[0]; + float miny = dtClamp(qmin[1], tbmin[1], tbmax[1]) - tbmin[1]; + float minz = dtClamp(qmin[2], tbmin[2], tbmax[2]) - tbmin[2]; + float maxx = dtClamp(qmax[0], tbmin[0], tbmax[0]) - tbmin[0]; + float maxy = dtClamp(qmax[1], tbmin[1], tbmax[1]) - tbmin[1]; + float maxz = dtClamp(qmax[2], tbmin[2], tbmax[2]) - tbmin[2]; + // Quantize + bmin[0] = (unsigned short)(qfac * minx) & 0xfffe; + bmin[1] = (unsigned short)(qfac * miny) & 0xfffe; + bmin[2] = (unsigned short)(qfac * minz) & 0xfffe; + bmax[0] = (unsigned short)(qfac * maxx + 1) | 1; + bmax[1] = (unsigned short)(qfac * maxy + 1) | 1; + bmax[2] = (unsigned short)(qfac * maxz + 1) | 1; + + // Traverse tree + const dtPolyRef base = m_nav->getPolyRefBase(tile); + int n = 0; + while (node < end) + { + const bool overlap = dtOverlapQuantBounds(bmin, bmax, node->bmin, node->bmax); + const bool isLeafNode = node->i >= 0; + + if (isLeafNode && overlap) + { + dtPolyRef ref = base | (dtPolyRef)node->i; + if (filter->passFilter(ref, tile, &tile->polys[node->i])) + { + if (n < maxPolys) + polys[n++] = ref; + } + } + + if (overlap || isLeafNode) + node++; + else + { + const int escapeIndex = -node->i; + node += escapeIndex; + } + } + + return n; + } + else + { + float bmin[3], bmax[3]; + int n = 0; + const dtPolyRef base = m_nav->getPolyRefBase(tile); + for (int i = 0; i < tile->header->polyCount; ++i) + { + // Calc polygon bounds. + dtPoly* p = &tile->polys[i]; + const float* v = &tile->verts[p->verts[0]*3]; + dtVcopy(bmin, v); + dtVcopy(bmax, v); + for (int j = 1; j < p->vertCount; ++j) + { + v = &tile->verts[p->verts[j]*3]; + dtVmin(bmin, v); + dtVmax(bmax, v); + } + if (dtOverlapBounds(qmin,qmax, bmin,bmax)) + { + const dtPolyRef ref = base | (dtPolyRef)i; + if (filter->passFilter(ref, tile, p)) + { + if (n < maxPolys) + polys[n++] = ref; + } + } + } + return n; + } +} + +dtStatus dtNavMeshQuery::queryPolygons(const float* center, const float* extents, + const dtQueryFilter* filter, + dtPolyRef* polys, int* polyCount, const int maxPolys) const +{ + dtAssert(m_nav); + + float bmin[3], bmax[3]; + dtVsub(bmin, center, extents); + dtVadd(bmax, center, extents); + + // Find tiles the query touches. + int minx, miny, maxx, maxy; + m_nav->calcTileLoc(bmin, &minx, &miny); + m_nav->calcTileLoc(bmax, &maxx, &maxy); + + int n = 0; + for (int y = miny; y <= maxy; ++y) + { + for (int x = minx; x <= maxx; ++x) + { + const dtMeshTile* tile = m_nav->getTileAt(x,y); + if (!tile) continue; + n += queryPolygonsInTile(tile, bmin, bmax, filter, polys+n, maxPolys-n); + if (n >= maxPolys) + { + *polyCount = n; + return DT_SUCCESS; + } + } + } + *polyCount = n; + + return DT_SUCCESS; +} + +dtStatus dtNavMeshQuery::findPath(dtPolyRef startRef, dtPolyRef endRef, + const float* startPos, const float* endPos, + const dtQueryFilter* filter, + dtPolyRef* path, int* pathCount, const int maxPath) const +{ + dtAssert(m_nav); + dtAssert(m_nodePool); + dtAssert(m_openList); + + *pathCount = 0; + + if (!startRef || !endRef) + return DT_FAILURE; + + if (!maxPath) + return DT_FAILURE; + + // Validate input + if (!m_nav->isValidPolyRef(startRef) || !m_nav->isValidPolyRef(endRef)) + return DT_FAILURE; + + if (startRef == endRef) + { + path[0] = startRef; + *pathCount = 1; + return DT_SUCCESS; + } + + m_nodePool->clear(); + m_openList->clear(); + + dtNode* startNode = m_nodePool->getNode(startRef); + dtVcopy(startNode->pos, startPos); + startNode->pidx = 0; + startNode->cost = 0; + startNode->total = dtVdist(startPos, endPos) * H_SCALE; + startNode->id = startRef; + startNode->flags = DT_NODE_OPEN; + m_openList->push(startNode); + + dtNode* lastBestNode = startNode; + float lastBestNodeCost = startNode->total; + + while (!m_openList->empty()) + { + // Remove node from open list and put it in closed list. + dtNode* bestNode = m_openList->pop(); + bestNode->flags &= ~DT_NODE_OPEN; + bestNode->flags |= DT_NODE_CLOSED; + + // Reached the goal, stop searching. + if (bestNode->id == endRef) + { + lastBestNode = bestNode; + break; + } + + // Get current poly and tile. + // The API input has been cheked already, skip checking internal data. + const dtPolyRef bestRef = bestNode->id; + const dtMeshTile* bestTile = 0; + const dtPoly* bestPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(bestRef, &bestTile, &bestPoly); + + // Get parent poly and tile. + dtPolyRef parentRef = 0; + const dtMeshTile* parentTile = 0; + const dtPoly* parentPoly = 0; + if (bestNode->pidx) + parentRef = m_nodePool->getNodeAtIdx(bestNode->pidx)->id; + if (parentRef) + m_nav->getTileAndPolyByRefUnsafe(parentRef, &parentTile, &parentPoly); + + for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestTile->links[i].next) + { + dtPolyRef neighbourRef = bestTile->links[i].ref; + + // Skip invalid ids and do not expand back to where we came from. + if (!neighbourRef || neighbourRef == parentRef) + continue; + + // Get neighbour poly and tile. + // The API input has been cheked already, skip checking internal data. + const dtMeshTile* neighbourTile = 0; + const dtPoly* neighbourPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(neighbourRef, &neighbourTile, &neighbourPoly); + + if (!filter->passFilter(neighbourRef, neighbourTile, neighbourPoly)) + continue; + + dtNode* neighbourNode = m_nodePool->getNode(neighbourRef); + if (!neighbourNode) + continue; + + // If the node is visited the first time, calculate node position. + if (neighbourNode->flags == 0) + { + getEdgeMidPoint(bestRef, bestPoly, bestTile, + neighbourRef, neighbourPoly, neighbourTile, + neighbourNode->pos); + } + + // Calculate cost and heuristic. + float cost = 0; + float heuristic = 0; + + // Special case for last node. + if (neighbourRef == endRef) + { + // Cost + const float curCost = filter->getCost(bestNode->pos, neighbourNode->pos, + parentRef, parentTile, parentPoly, + bestRef, bestTile, bestPoly, + neighbourRef, neighbourTile, neighbourPoly); + const float endCost = filter->getCost(neighbourNode->pos, endPos, + bestRef, bestTile, bestPoly, + neighbourRef, neighbourTile, neighbourPoly, + 0, 0, 0); + + cost = bestNode->cost + curCost + endCost; + heuristic = 0; + } + else + { + // Cost + const float curCost = filter->getCost(bestNode->pos, neighbourNode->pos, + parentRef, parentTile, parentPoly, + bestRef, bestTile, bestPoly, + neighbourRef, neighbourTile, neighbourPoly); + cost = bestNode->cost + curCost; + heuristic = dtVdist(neighbourNode->pos, endPos)*H_SCALE; + } + + const float total = cost + heuristic; + + // The node is already in open list and the new result is worse, skip. + if ((neighbourNode->flags & DT_NODE_OPEN) && total >= neighbourNode->total) + continue; + // The node is already visited and process, and the new result is worse, skip. + if ((neighbourNode->flags & DT_NODE_CLOSED) && total >= neighbourNode->total) + continue; + + // Add or update the node. + neighbourNode->pidx = m_nodePool->getNodeIdx(bestNode); + neighbourNode->id = neighbourRef; + neighbourNode->flags &= ~DT_NODE_CLOSED; + neighbourNode->cost = cost; + neighbourNode->total = total; + + if (neighbourNode->flags & DT_NODE_OPEN) + { + // Already in open, update node location. + m_openList->modify(neighbourNode); + } + else + { + // Put the node in open list. + neighbourNode->flags |= DT_NODE_OPEN; + m_openList->push(neighbourNode); + } + + // Update nearest node to target so far. + if (heuristic < lastBestNodeCost) + { + lastBestNodeCost = heuristic; + lastBestNode = neighbourNode; + } + } + } + + // Reverse the path. + dtNode* prev = 0; + dtNode* node = lastBestNode; + do + { + dtNode* next = m_nodePool->getNodeAtIdx(node->pidx); + node->pidx = m_nodePool->getNodeIdx(prev); + prev = node; + node = next; + } + while (node); + + // Store path + node = prev; + int n = 0; + do + { + path[n++] = node->id; + node = m_nodePool->getNodeAtIdx(node->pidx); + } + while (node && n < maxPath); + + *pathCount = n; + + return DT_SUCCESS; +} + +dtStatus dtNavMeshQuery::initSlicedFindPath(dtPolyRef startRef, dtPolyRef endRef, + const float* startPos, const float* endPos, + const dtQueryFilter* filter) +{ + dtAssert(m_nav); + dtAssert(m_nodePool); + dtAssert(m_openList); + + // Init path state. + memset(&m_query, 0, sizeof(dtQueryData)); + m_query.status = DT_FAILURE; + m_query.startRef = startRef; + m_query.endRef = endRef; + dtVcopy(m_query.startPos, startPos); + dtVcopy(m_query.endPos, endPos); + m_query.filter = filter; + + if (!startRef || !endRef) + return DT_FAILURE; + + // Validate input + if (!m_nav->isValidPolyRef(startRef) || !m_nav->isValidPolyRef(endRef)) + return DT_FAILURE; + + if (startRef == endRef) + { + m_query.status = DT_SUCCESS; + return DT_SUCCESS; + } + + m_nodePool->clear(); + m_openList->clear(); + + dtNode* startNode = m_nodePool->getNode(startRef); + dtVcopy(startNode->pos, startPos); + startNode->pidx = 0; + startNode->cost = 0; + startNode->total = dtVdist(startPos, endPos) * H_SCALE; + startNode->id = startRef; + startNode->flags = DT_NODE_OPEN; + m_openList->push(startNode); + + m_query.status = DT_IN_PROGRESS; + m_query.lastBestNode = startNode; + m_query.lastBestNodeCost = startNode->total; + + return m_query.status; +} + +dtStatus dtNavMeshQuery::updateSlicedFindPath(const int maxIter) +{ + if (m_query.status!= DT_IN_PROGRESS) + return m_query.status; + + // Make sure the request is still valid. + if (!m_nav->isValidPolyRef(m_query.startRef) || !m_nav->isValidPolyRef(m_query.endRef)) + { + m_query.status = DT_FAILURE; + return DT_FAILURE; + } + + int iter = 0; + while (iter < maxIter && !m_openList->empty()) + { + iter++; + + // Remove node from open list and put it in closed list. + dtNode* bestNode = m_openList->pop(); + bestNode->flags &= ~DT_NODE_OPEN; + bestNode->flags |= DT_NODE_CLOSED; + + // Reached the goal, stop searching. + if (bestNode->id == m_query.endRef) + { + m_query.lastBestNode = bestNode; + m_query.status = DT_SUCCESS; + return m_query.status; + } + + // Get current poly and tile. + // The API input has been cheked already, skip checking internal data. + const dtPolyRef bestRef = bestNode->id; + const dtMeshTile* bestTile = 0; + const dtPoly* bestPoly = 0; + if (m_nav->getTileAndPolyByRef(bestRef, &bestTile, &bestPoly) != DT_SUCCESS) + { + // The polygon has disappeared during the sliced query, fail. + m_query.status = DT_FAILURE; + return m_query.status; + } + + // Get parent poly and tile. + dtPolyRef parentRef = 0; + const dtMeshTile* parentTile = 0; + const dtPoly* parentPoly = 0; + if (bestNode->pidx) + parentRef = m_nodePool->getNodeAtIdx(bestNode->pidx)->id; + if (parentRef) + { + if (m_nav->getTileAndPolyByRef(parentRef, &parentTile, &parentPoly) != DT_SUCCESS) + { + // The polygon has disappeared during the sliced query, fail. + m_query.status = DT_FAILURE; + return m_query.status; + } + } + + for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestTile->links[i].next) + { + dtPolyRef neighbourRef = bestTile->links[i].ref; + + // Skip invalid ids and do not expand back to where we came from. + if (!neighbourRef || neighbourRef == parentRef) + continue; + + // Get neighbour poly and tile. + // The API input has been cheked already, skip checking internal data. + const dtMeshTile* neighbourTile = 0; + const dtPoly* neighbourPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(neighbourRef, &neighbourTile, &neighbourPoly); + + if (!m_query.filter->passFilter(neighbourRef, neighbourTile, neighbourPoly)) + continue; + + dtNode* neighbourNode = m_nodePool->getNode(neighbourRef); + if (!neighbourNode) + continue; + + // If the node is visited the first time, calculate node position. + if (neighbourNode->flags == 0) + { + getEdgeMidPoint(bestRef, bestPoly, bestTile, + neighbourRef, neighbourPoly, neighbourTile, + neighbourNode->pos); + } + + // Calculate cost and heuristic. + float cost = 0; + float heuristic = 0; + + // Special case for last node. + if (neighbourRef == m_query.endRef) + { + // Cost + const float curCost = m_query.filter->getCost(bestNode->pos, neighbourNode->pos, + parentRef, parentTile, parentPoly, + bestRef, bestTile, bestPoly, + neighbourRef, neighbourTile, neighbourPoly); + const float endCost = m_query.filter->getCost(neighbourNode->pos, m_query.endPos, + bestRef, bestTile, bestPoly, + neighbourRef, neighbourTile, neighbourPoly, + 0, 0, 0); + + cost = bestNode->cost + curCost + endCost; + heuristic = 0; + } + else + { + // Cost + const float curCost = m_query.filter->getCost(bestNode->pos, neighbourNode->pos, + parentRef, parentTile, parentPoly, + bestRef, bestTile, bestPoly, + neighbourRef, neighbourTile, neighbourPoly); + cost = bestNode->cost + curCost; + heuristic = dtVdist(neighbourNode->pos, m_query.endPos)*H_SCALE; + } + + const float total = cost + heuristic; + + // The node is already in open list and the new result is worse, skip. + if ((neighbourNode->flags & DT_NODE_OPEN) && total >= neighbourNode->total) + continue; + // The node is already visited and process, and the new result is worse, skip. + if ((neighbourNode->flags & DT_NODE_CLOSED) && total >= neighbourNode->total) + continue; + + // Add or update the node. + neighbourNode->pidx = m_nodePool->getNodeIdx(bestNode); + neighbourNode->id = neighbourRef; + neighbourNode->flags &= ~DT_NODE_CLOSED; + neighbourNode->cost = cost; + neighbourNode->total = total; + + if (neighbourNode->flags & DT_NODE_OPEN) + { + // Already in open, update node location. + m_openList->modify(neighbourNode); + } + else + { + // Put the node in open list. + neighbourNode->flags |= DT_NODE_OPEN; + m_openList->push(neighbourNode); + } + + // Update nearest node to target so far. + if (heuristic < m_query.lastBestNodeCost) + { + m_query.lastBestNodeCost = heuristic; + m_query.lastBestNode = neighbourNode; + } + } + } + + // Exhausted all nodes, but could not find path. + if (m_openList->empty()) + m_query.status = DT_SUCCESS; + + return m_query.status; +} + +dtStatus dtNavMeshQuery::finalizeSlicedFindPath(dtPolyRef* path, int* pathCount, const int maxPath) +{ + *pathCount = 0; + + if (m_query.status != DT_SUCCESS) + { + // Reset query. + memset(&m_query, 0, sizeof(dtQueryData)); + return DT_FAILURE; + } + + int n = 0; + + if (m_query.startRef == m_query.endRef) + { + // Special case: the search starts and ends at same poly. + path[n++] = m_query.startRef; + } + else + { + // Reverse the path. + dtAssert(m_query.lastBestNode); + dtNode* prev = 0; + dtNode* node = m_query.lastBestNode; + do + { + dtNode* next = m_nodePool->getNodeAtIdx(node->pidx); + node->pidx = m_nodePool->getNodeIdx(prev); + prev = node; + node = next; + } + while (node); + + // Store path + node = prev; + do + { + path[n++] = node->id; + node = m_nodePool->getNodeAtIdx(node->pidx); + } + while (node && n < maxPath); + } + + // Reset query. + memset(&m_query, 0, sizeof(dtQueryData)); + + *pathCount = n; + + return DT_SUCCESS; +} + +dtStatus dtNavMeshQuery::finalizeSlicedFindPathPartial(const dtPolyRef* existing, const int existingSize, + dtPolyRef* path, int* pathCount, const int maxPath) +{ + *pathCount = 0; + + if (existingSize == 0) + { + return DT_FAILURE; + } + + if (m_query.status != DT_SUCCESS && m_query.status != DT_IN_PROGRESS) + { + // Reset query. + memset(&m_query, 0, sizeof(dtQueryData)); + return DT_FAILURE; + } + + int n = 0; + + if (m_query.startRef == m_query.endRef) + { + // Special case: the search starts and ends at same poly. + path[n++] = m_query.startRef; + } + else + { + // Find furthest existing node that was visited. + dtNode* prev = 0; + dtNode* node = 0; + for (int i = existingSize-1; i >= 0; --i) + { + node = m_nodePool->findNode(existing[i]); + if (node) + break; + } + + if (!node) + { + return DT_FAILURE; + } + + // Reverse the path. + do + { + dtNode* next = m_nodePool->getNodeAtIdx(node->pidx); + node->pidx = m_nodePool->getNodeIdx(prev); + prev = node; + node = next; + } + while (node); + + // Store path + node = prev; + do + { + path[n++] = node->id; + node = m_nodePool->getNodeAtIdx(node->pidx); + } + while (node && n < maxPath); + } + + // Reset query. + memset(&m_query, 0, sizeof(dtQueryData)); + + *pathCount = n; + + return DT_SUCCESS; +} + + +dtStatus dtNavMeshQuery::findStraightPath(const float* startPos, const float* endPos, + const dtPolyRef* path, const int pathSize, + float* straightPath, unsigned char* straightPathFlags, dtPolyRef* straightPathRefs, + int* straightPathCount, const int maxStraightPath) const +{ + dtAssert(m_nav); + + *straightPathCount = 0; + + if (!maxStraightPath) + return DT_FAILURE; + + if (!path[0]) + return DT_FAILURE; + + int n = 0; + + // TODO: Should this be callers responsibility? + float closestStartPos[3]; + if (closestPointOnPolyBoundary(path[0], startPos, closestStartPos) != DT_SUCCESS) + return DT_FAILURE; + + // Add start point. + dtVcopy(&straightPath[n*3], closestStartPos); + if (straightPathFlags) + straightPathFlags[n] = DT_STRAIGHTPATH_START; + if (straightPathRefs) + straightPathRefs[n] = path[0]; + n++; + if (n >= maxStraightPath) + { + *straightPathCount = n; + return DT_SUCCESS; + } + + float closestEndPos[3]; + if (closestPointOnPolyBoundary(path[pathSize-1], endPos, closestEndPos) != DT_SUCCESS) + return DT_FAILURE; + + if (pathSize > 1) + { + float portalApex[3], portalLeft[3], portalRight[3]; + dtVcopy(portalApex, closestStartPos); + dtVcopy(portalLeft, portalApex); + dtVcopy(portalRight, portalApex); + int apexIndex = 0; + int leftIndex = 0; + int rightIndex = 0; + + unsigned char leftPolyType = 0; + unsigned char rightPolyType = 0; + + dtPolyRef leftPolyRef = path[0]; + dtPolyRef rightPolyRef = path[0]; + + for (int i = 0; i < pathSize; ++i) + { + float left[3], right[3]; + unsigned char fromType, toType; + + if (i+1 < pathSize) + { + // Next portal. + if (getPortalPoints(path[i], path[i+1], left, right, fromType, toType) != DT_SUCCESS) + { + if (closestPointOnPolyBoundary(path[i], endPos, closestEndPos) != DT_SUCCESS) + return DT_FAILURE; + + dtVcopy(&straightPath[n*3], closestEndPos); + if (straightPathFlags) + straightPathFlags[n] = 0; + if (straightPathRefs) + straightPathRefs[n] = path[i]; + n++; + + return DT_SUCCESS; + } + + // If starting really close the portal, advance. + if (i == 0) + { + float t; + if (dtDistancePtSegSqr2D(portalApex, left, right, t) < dtSqr(0.001f)) + continue; + } + } + else + { + // End of the path. + dtVcopy(left, closestEndPos); + dtVcopy(right, closestEndPos); + + fromType = toType = DT_POLYTYPE_GROUND; + } + + // Right vertex. + if (dtTriArea2D(portalApex, portalRight, right) <= 0.0f) + { + if (dtVequal(portalApex, portalRight) || dtTriArea2D(portalApex, portalLeft, right) > 0.0f) + { + dtVcopy(portalRight, right); + rightPolyRef = (i+1 < pathSize) ? path[i+1] : 0; + rightPolyType = toType; + rightIndex = i; + } + else + { + dtVcopy(portalApex, portalLeft); + apexIndex = leftIndex; + + unsigned char flags = 0; + if (!leftPolyRef) + flags = DT_STRAIGHTPATH_END; + else if (leftPolyType == DT_POLYTYPE_OFFMESH_CONNECTION) + flags = DT_STRAIGHTPATH_OFFMESH_CONNECTION; + dtPolyRef ref = leftPolyRef; + + if (!dtVequal(&straightPath[(n-1)*3], portalApex)) + { + // Append new vertex. + dtVcopy(&straightPath[n*3], portalApex); + if (straightPathFlags) + straightPathFlags[n] = flags; + if (straightPathRefs) + straightPathRefs[n] = ref; + n++; + // If reached end of path or there is no space to append more vertices, return. + if (flags == DT_STRAIGHTPATH_END || n >= maxStraightPath) + { + *straightPathCount = n; + return DT_SUCCESS; + } + } + else + { + // The vertices are equal, update flags and poly. + if (straightPathFlags) + straightPathFlags[n-1] = flags; + if (straightPathRefs) + straightPathRefs[n-1] = ref; + } + + dtVcopy(portalLeft, portalApex); + dtVcopy(portalRight, portalApex); + leftIndex = apexIndex; + rightIndex = apexIndex; + + // Restart + i = apexIndex; + + continue; + } + } + + // Left vertex. + if (dtTriArea2D(portalApex, portalLeft, left) >= 0.0f) + { + if (dtVequal(portalApex, portalLeft) || dtTriArea2D(portalApex, portalRight, left) < 0.0f) + { + dtVcopy(portalLeft, left); + leftPolyRef = (i+1 < pathSize) ? path[i+1] : 0; + leftPolyType = toType; + leftIndex = i; + } + else + { + dtVcopy(portalApex, portalRight); + apexIndex = rightIndex; + + unsigned char flags = 0; + if (!rightPolyRef) + flags = DT_STRAIGHTPATH_END; + else if (rightPolyType == DT_POLYTYPE_OFFMESH_CONNECTION) + flags = DT_STRAIGHTPATH_OFFMESH_CONNECTION; + dtPolyRef ref = rightPolyRef; + + if (!dtVequal(&straightPath[(n-1)*3], portalApex)) + { + // Append new vertex. + dtVcopy(&straightPath[n*3], portalApex); + if (straightPathFlags) + straightPathFlags[n] = flags; + if (straightPathRefs) + straightPathRefs[n] = ref; + n++; + // If reached end of path or there is no space to append more vertices, return. + if (flags == DT_STRAIGHTPATH_END || n >= maxStraightPath) + { + *straightPathCount = n; + return DT_SUCCESS; + } + } + else + { + // The vertices are equal, update flags and poly. + if (straightPathFlags) + straightPathFlags[n-1] = flags; + if (straightPathRefs) + straightPathRefs[n-1] = ref; + } + + dtVcopy(portalLeft, portalApex); + dtVcopy(portalRight, portalApex); + leftIndex = apexIndex; + rightIndex = apexIndex; + + // Restart + i = apexIndex; + + continue; + } + } + } + } + + // If the point already exists, remove it and add reappend the actual end location. + if (n > 0 && dtVequal(&straightPath[(n-1)*3], closestEndPos)) + n--; + + // Add end point. + if (n < maxStraightPath) + { + dtVcopy(&straightPath[n*3], closestEndPos); + if (straightPathFlags) + straightPathFlags[n] = DT_STRAIGHTPATH_END; + if (straightPathRefs) + straightPathRefs[n] = 0; + n++; + } + + *straightPathCount = n; + return DT_SUCCESS; +} + +dtStatus dtNavMeshQuery::moveAlongSurface(dtPolyRef startRef, const float* startPos, const float* endPos, + const dtQueryFilter* filter, + float* resultPos, dtPolyRef* visited, int* visitedCount, const int maxVisitedSize) const +{ + dtAssert(m_nav); + dtAssert(m_tinyNodePool); + + *visitedCount = 0; + + // Validate input + if (!startRef) return DT_FAILURE; + if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; + + static const int MAX_STACK = 48; + dtNode* stack[MAX_STACK]; + int nstack = 0; + + m_tinyNodePool->clear(); + + dtNode* startNode = m_tinyNodePool->getNode(startRef); + startNode->pidx = 0; + startNode->cost = 0; + startNode->total = 0; + startNode->id = startRef; + startNode->flags = DT_NODE_CLOSED; + stack[nstack++] = startNode; + + float bestPos[3]; + float bestDist = FLT_MAX; + dtNode* bestNode = 0; + dtVcopy(bestPos, startPos); + + // Search constraints + float searchPos[3], searchRadSqr; + dtVlerp(searchPos, startPos, endPos, 0.5f); + searchRadSqr = dtSqr(dtVdist(startPos, endPos)/2.0f + 0.001f); + + float verts[DT_VERTS_PER_POLYGON*3]; + + while (nstack) + { + // Pop front. + dtNode* curNode = stack[0]; + for (int i = 0; i < nstack-1; ++i) + stack[i] = stack[i+1]; + nstack--; + + // Get poly and tile. + // The API input has been cheked already, skip checking internal data. + const dtPolyRef curRef = curNode->id; + const dtMeshTile* curTile = 0; + const dtPoly* curPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(curRef, &curTile, &curPoly); + + // Collect vertices. + const int nverts = curPoly->vertCount; + for (int i = 0; i < nverts; ++i) + dtVcopy(&verts[i*3], &curTile->verts[curPoly->verts[i]*3]); + + // If target is inside the poly, stop search. + if (dtPointInPolygon(endPos, verts, nverts)) + { + bestNode = curNode; + dtVcopy(bestPos, endPos); + break; + } + + // Find wall edges and find nearest point inside the walls. + for (int i = 0, j = (int)curPoly->vertCount-1; i < (int)curPoly->vertCount; j = i++) + { + // Find links to neighbours. + static const int MAX_NEIS = 8; + int nneis = 0; + dtPolyRef neis[MAX_NEIS]; + + if (curPoly->neis[j] & DT_EXT_LINK) + { + // Tile border. + for (unsigned int k = curPoly->firstLink; k != DT_NULL_LINK; k = curTile->links[k].next) + { + const dtLink* link = &curTile->links[k]; + if (link->edge == j) + { + if (link->ref != 0) + { + const dtMeshTile* neiTile = 0; + const dtPoly* neiPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(link->ref, &neiTile, &neiPoly); + if (filter->passFilter(link->ref, neiTile, neiPoly)) + { + if (nneis < MAX_NEIS) + neis[nneis++] = link->ref; + } + } + } + } + } + else if (curPoly->neis[j]) + { + const unsigned int idx = (unsigned int)(curPoly->neis[j]-1); + const dtPolyRef ref = m_nav->getPolyRefBase(curTile) | idx; + if (filter->passFilter(ref, curTile, &curTile->polys[idx])) + { + // Internal edge, encode id. + neis[nneis++] = ref; + } + } + + if (!nneis) + { + // Wall edge, calc distance. + const float* vj = &verts[j*3]; + const float* vi = &verts[i*3]; + float tseg; + const float distSqr = dtDistancePtSegSqr2D(endPos, vj, vi, tseg); + if (distSqr < bestDist) + { + // Update nearest distance. + dtVlerp(bestPos, vj,vi, tseg); + bestDist = distSqr; + bestNode = curNode; + } + } + else + { + for (int k = 0; k < nneis; ++k) + { + // Skip if no node can be allocated. + dtNode* neighbourNode = m_tinyNodePool->getNode(neis[k]); + if (!neighbourNode) + continue; + // Skip if already visited. + if (neighbourNode->flags & DT_NODE_CLOSED) + continue; + + // Skip the link if it is too far from search constraint. + // TODO: Maybe should use getPortalPoints(), but this one is way faster. + const float* vj = &verts[j*3]; + const float* vi = &verts[i*3]; + float tseg; + float distSqr = dtDistancePtSegSqr2D(searchPos, vj, vi, tseg); + if (distSqr > searchRadSqr) + continue; + + // Mark as the node as visited and push to queue. + if (nstack < MAX_STACK) + { + neighbourNode->pidx = m_tinyNodePool->getNodeIdx(curNode); + neighbourNode->flags |= DT_NODE_CLOSED; + stack[nstack++] = neighbourNode; + } + } + } + } + } + + int n = 0; + if (bestNode) + { + // Reverse the path. + dtNode* prev = 0; + dtNode* node = bestNode; + do + { + dtNode* next = m_tinyNodePool->getNodeAtIdx(node->pidx); + node->pidx = m_tinyNodePool->getNodeIdx(prev); + prev = node; + node = next; + } + while (node); + + // Store result + node = prev; + do + { + visited[n++] = node->id; + node = m_tinyNodePool->getNodeAtIdx(node->pidx); + } + while (node && n < maxVisitedSize); + } + + dtVcopy(resultPos, bestPos); + + *visitedCount = n; + + return DT_SUCCESS; +} + + +dtStatus dtNavMeshQuery::getPortalPoints(dtPolyRef from, dtPolyRef to, float* left, float* right, + unsigned char& fromType, unsigned char& toType) const +{ + dtAssert(m_nav); + + const dtMeshTile* fromTile = 0; + const dtPoly* fromPoly = 0; + if (m_nav->getTileAndPolyByRef(from, &fromTile, &fromPoly) != DT_SUCCESS) + return DT_FAILURE; + fromType = fromPoly->getType(); + + const dtMeshTile* toTile = 0; + const dtPoly* toPoly = 0; + if (m_nav->getTileAndPolyByRef(to, &toTile, &toPoly) != DT_SUCCESS) + return DT_FAILURE; + toType = toPoly->getType(); + + return getPortalPoints(from, fromPoly, fromTile, to, toPoly, toTile, left, right); +} + +// Returns portal points between two polygons. +dtStatus dtNavMeshQuery::getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, + dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, + float* left, float* right) const +{ + // Find the link that points to the 'to' polygon. + const dtLink* link = 0; + for (unsigned int i = fromPoly->firstLink; i != DT_NULL_LINK; i = fromTile->links[i].next) + { + if (fromTile->links[i].ref == to) + { + link = &fromTile->links[i]; + break; + } + } + if (!link) + return DT_FAILURE; + + // Handle off-mesh connections. + if (fromPoly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION) + { + // Find link that points to first vertex. + for (unsigned int i = fromPoly->firstLink; i != DT_NULL_LINK; i = fromTile->links[i].next) + { + if (fromTile->links[i].ref == to) + { + const int v = fromTile->links[i].edge; + dtVcopy(left, &fromTile->verts[fromPoly->verts[v]*3]); + dtVcopy(right, &fromTile->verts[fromPoly->verts[v]*3]); + return DT_SUCCESS; + } + } + return DT_FAILURE; + } + + if (toPoly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION) + { + for (unsigned int i = toPoly->firstLink; i != DT_NULL_LINK; i = toTile->links[i].next) + { + if (toTile->links[i].ref == from) + { + const int v = toTile->links[i].edge; + dtVcopy(left, &toTile->verts[toPoly->verts[v]*3]); + dtVcopy(right, &toTile->verts[toPoly->verts[v]*3]); + return DT_SUCCESS; + } + } + return DT_FAILURE; + } + + // Find portal vertices. + const int v0 = fromPoly->verts[link->edge]; + const int v1 = fromPoly->verts[(link->edge+1) % (int)fromPoly->vertCount]; + dtVcopy(left, &fromTile->verts[v0*3]); + dtVcopy(right, &fromTile->verts[v1*3]); + + // If the link is at tile boundary, dtClamp the vertices to + // the link width. + if (link->side != 0xff) + { + // Unpack portal limits. + if (link->bmin != 0 || link->bmax != 255) + { + const float s = 1.0f/255.0f; + const float tmin = link->bmin*s; + const float tmax = link->bmax*s; + dtVlerp(left, &fromTile->verts[v0*3], &fromTile->verts[v1*3], tmin); + dtVlerp(right, &fromTile->verts[v0*3], &fromTile->verts[v1*3], tmax); + } + } + + return DT_SUCCESS; +} + +// Returns edge mid point between two polygons. +dtStatus dtNavMeshQuery::getEdgeMidPoint(dtPolyRef from, dtPolyRef to, float* mid) const +{ + float left[3], right[3]; + unsigned char fromType, toType; + if (!getPortalPoints(from, to, left,right, fromType, toType)) return DT_FAILURE; + mid[0] = (left[0]+right[0])*0.5f; + mid[1] = (left[1]+right[1])*0.5f; + mid[2] = (left[2]+right[2])*0.5f; + return DT_SUCCESS; +} + +dtStatus dtNavMeshQuery::getEdgeMidPoint(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, + dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, + float* mid) const +{ + float left[3], right[3]; + if (getPortalPoints(from, fromPoly, fromTile, to, toPoly, toTile, left, right) != DT_SUCCESS) + return DT_FAILURE; + mid[0] = (left[0]+right[0])*0.5f; + mid[1] = (left[1]+right[1])*0.5f; + mid[2] = (left[2]+right[2])*0.5f; + return DT_SUCCESS; +} + +dtStatus dtNavMeshQuery::raycast(dtPolyRef startRef, const float* startPos, const float* endPos, + const dtQueryFilter* filter, + float* t, float* hitNormal, dtPolyRef* path, int* pathCount, const int maxPath) const +{ + dtAssert(m_nav); + + *t = 0; + if (pathCount) + *pathCount = 0; + + // Validate input + if (!startRef || !m_nav->isValidPolyRef(startRef)) + return DT_FAILURE; + + dtPolyRef curRef = startRef; + float verts[DT_VERTS_PER_POLYGON*3]; + int n = 0; + + hitNormal[0] = 0; + hitNormal[1] = 0; + hitNormal[2] = 0; + + while (curRef) + { + // Cast ray against current polygon. + + // The API input has been cheked already, skip checking internal data. + const dtMeshTile* tile = 0; + const dtPoly* poly = 0; + m_nav->getTileAndPolyByRefUnsafe(curRef, &tile, &poly); + + // Collect vertices. + int nv = 0; + for (int i = 0; i < (int)poly->vertCount; ++i) + { + dtVcopy(&verts[nv*3], &tile->verts[poly->verts[i]*3]); + nv++; + } + + float tmin, tmax; + int segMin, segMax; + if (!dtIntersectSegmentPoly2D(startPos, endPos, verts, nv, tmin, tmax, segMin, segMax)) + { + // Could not hit the polygon, keep the old t and report hit. + if (pathCount) + *pathCount = n; + return DT_SUCCESS; + } + // Keep track of furthest t so far. + if (tmax > *t) + *t = tmax; + + // Store visited polygons. + if (n < maxPath) + path[n++] = curRef; + + // Ray end is completely inside the polygon. + if (segMax == -1) + { + *t = FLT_MAX; + if (pathCount) + *pathCount = n; + return DT_SUCCESS; + } + + // Follow neighbours. + dtPolyRef nextRef = 0; + + for (unsigned int i = poly->firstLink; i != DT_NULL_LINK; i = tile->links[i].next) + { + const dtLink* link = &tile->links[i]; + + // Find link which contains this edge. + if ((int)link->edge != segMax) + continue; + + // Get pointer to the next polygon. + const dtMeshTile* nextTile = 0; + const dtPoly* nextPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(link->ref, &nextTile, &nextPoly); + + // Skip off-mesh connections. + if (nextPoly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION) + continue; + + // Skip links based on filter. + if (!filter->passFilter(link->ref, nextTile, nextPoly)) + continue; + + // If the link is internal, just return the ref. + if (link->side == 0xff) + { + nextRef = link->ref; + break; + } + + // If the link is at tile boundary, + + // Check if the link spans the whole edge, and accept. + if (link->bmin == 0 && link->bmax == 255) + { + nextRef = link->ref; + break; + } + + // Check for partial edge links. + const int v0 = poly->verts[link->edge]; + const int v1 = poly->verts[(link->edge+1) % poly->vertCount]; + const float* left = &tile->verts[v0*3]; + const float* right = &tile->verts[v1*3]; + + // Check that the intersection lies inside the link portal. + if (link->side == 0 || link->side == 4) + { + // Calculate link size. + const float s = 1.0f/255.0f; + float lmin = left[2] + (right[2] - left[2])*(link->bmin*s); + float lmax = left[2] + (right[2] - left[2])*(link->bmax*s); + if (lmin > lmax) dtSwap(lmin, lmax); + + // Find Z intersection. + float z = startPos[2] + (endPos[2]-startPos[2])*tmax; + if (z >= lmin && z <= lmax) + { + nextRef = link->ref; + break; + } + } + else if (link->side == 2 || link->side == 6) + { + // Calculate link size. + const float s = 1.0f/255.0f; + float lmin = left[0] + (right[0] - left[0])*(link->bmin*s); + float lmax = left[0] + (right[0] - left[0])*(link->bmax*s); + if (lmin > lmax) dtSwap(lmin, lmax); + + // Find X intersection. + float x = startPos[0] + (endPos[0]-startPos[0])*tmax; + if (x >= lmin && x <= lmax) + { + nextRef = link->ref; + break; + } + } + } + + if (!nextRef) + { + // No neighbour, we hit a wall. + + // Calculate hit normal. + const int a = segMax; + const int b = segMax+1 < nv ? segMax+1 : 0; + const float* va = &verts[a*3]; + const float* vb = &verts[b*3]; + const float dx = vb[0] - va[0]; + const float dz = vb[2] - va[2]; + hitNormal[0] = dz; + hitNormal[1] = 0; + hitNormal[2] = -dx; + dtVnormalize(hitNormal); + + if (pathCount) + *pathCount = n; + return DT_SUCCESS; + } + + // No hit, advance to neighbour polygon. + curRef = nextRef; + } + + if (pathCount) + *pathCount = n; + + return DT_SUCCESS; +} + +dtStatus dtNavMeshQuery::findPolysAroundCircle(dtPolyRef startRef, const float* centerPos, const float radius, + const dtQueryFilter* filter, + dtPolyRef* resultRef, dtPolyRef* resultParent, float* resultCost, + int* resultCount, const int maxResult) const +{ + dtAssert(m_nav); + dtAssert(m_nodePool); + dtAssert(m_openList); + + *resultCount = 0; + + // Validate input + if (!startRef) return DT_FAILURE; + if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; + + m_nodePool->clear(); + m_openList->clear(); + + dtNode* startNode = m_nodePool->getNode(startRef); + dtVcopy(startNode->pos, centerPos); + startNode->pidx = 0; + startNode->cost = 0; + startNode->total = 0; + startNode->id = startRef; + startNode->flags = DT_NODE_OPEN; + m_openList->push(startNode); + + int n = 0; + if (n < maxResult) + { + if (resultRef) + resultRef[n] = startNode->id; + if (resultParent) + resultParent[n] = 0; + if (resultCost) + resultCost[n] = 0; + ++n; + } + + const float radiusSqr = dtSqr(radius); + + while (!m_openList->empty()) + { + dtNode* bestNode = m_openList->pop(); + bestNode->flags &= ~DT_NODE_OPEN; + bestNode->flags |= DT_NODE_CLOSED; + + // Get poly and tile. + // The API input has been cheked already, skip checking internal data. + const dtPolyRef bestRef = bestNode->id; + const dtMeshTile* bestTile = 0; + const dtPoly* bestPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(bestRef, &bestTile, &bestPoly); + + // Get parent poly and tile. + dtPolyRef parentRef = 0; + const dtMeshTile* parentTile = 0; + const dtPoly* parentPoly = 0; + if (bestNode->pidx) + parentRef = m_nodePool->getNodeAtIdx(bestNode->pidx)->id; + if (parentRef) + m_nav->getTileAndPolyByRefUnsafe(parentRef, &parentTile, &parentPoly); + + for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestTile->links[i].next) + { + const dtLink* link = &bestTile->links[i]; + dtPolyRef neighbourRef = link->ref; + // Skip invalid neighbours and do not follow back to parent. + if (!neighbourRef || neighbourRef == parentRef) + continue; + + // Expand to neighbour + const dtMeshTile* neighbourTile = 0; + const dtPoly* neighbourPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(neighbourRef, &neighbourTile, &neighbourPoly); + + // Do not advance if the polygon is excluded by the filter. + if (!filter->passFilter(neighbourRef, neighbourTile, neighbourPoly)) + continue; + + // Find edge and calc distance to the edge. + float va[3], vb[3]; + if (!getPortalPoints(bestRef, bestPoly, bestTile, neighbourRef, neighbourPoly, neighbourTile, va, vb)) + continue; + + // If the circle is not touching the next polygon, skip it. + float tseg; + float distSqr = dtDistancePtSegSqr2D(centerPos, va, vb, tseg); + if (distSqr > radiusSqr) + continue; + + dtNode* neighbourNode = m_nodePool->getNode(neighbourRef); + if (!neighbourNode) + continue; + + if (neighbourNode->flags & DT_NODE_CLOSED) + continue; + + // Cost + if (neighbourNode->flags == 0) + dtVlerp(neighbourNode->pos, va, vb, 0.5f); + + const float total = bestNode->total + dtVdist(bestNode->pos, neighbourNode->pos); + + // The node is already in open list and the new result is worse, skip. + if ((neighbourNode->flags & DT_NODE_OPEN) && total >= neighbourNode->total) + continue; + + neighbourNode->id = neighbourRef; + neighbourNode->flags &= ~DT_NODE_CLOSED; + neighbourNode->pidx = m_nodePool->getNodeIdx(bestNode); + neighbourNode->total = total; + + if (neighbourNode->flags & DT_NODE_OPEN) + { + m_openList->modify(neighbourNode); + } + else + { + if (n < maxResult) + { + if (resultRef) + resultRef[n] = neighbourNode->id; + if (resultParent) + resultParent[n] = m_nodePool->getNodeAtIdx(neighbourNode->pidx)->id; + if (resultCost) + resultCost[n] = neighbourNode->total; + ++n; + } + neighbourNode->flags = DT_NODE_OPEN; + m_openList->push(neighbourNode); + } + } + } + + *resultCount = n; + + return DT_SUCCESS; +} + +dtStatus dtNavMeshQuery::findPolysAroundShape(dtPolyRef startRef, const float* verts, const int nverts, + const dtQueryFilter* filter, + dtPolyRef* resultRef, dtPolyRef* resultParent, float* resultCost, + int* resultCount, const int maxResult) const +{ + dtAssert(m_nav); + dtAssert(m_nodePool); + dtAssert(m_openList); + + *resultCount = 0; + + // Validate input + if (!startRef) return DT_FAILURE; + if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; + + m_nodePool->clear(); + m_openList->clear(); + + float centerPos[3] = {0,0,0}; + for (int i = 0; i < nverts; ++i) + dtVadd(centerPos,centerPos,&verts[i*3]); + dtVscale(centerPos,centerPos,1.0f/nverts); + + dtNode* startNode = m_nodePool->getNode(startRef); + dtVcopy(startNode->pos, centerPos); + startNode->pidx = 0; + startNode->cost = 0; + startNode->total = 0; + startNode->id = startRef; + startNode->flags = DT_NODE_OPEN; + m_openList->push(startNode); + + int n = 0; + if (n < maxResult) + { + if (resultRef) + resultRef[n] = startNode->id; + if (resultParent) + resultParent[n] = 0; + if (resultCost) + resultCost[n] = 0; + ++n; + } + + while (!m_openList->empty()) + { + dtNode* bestNode = m_openList->pop(); + bestNode->flags &= ~DT_NODE_OPEN; + bestNode->flags |= DT_NODE_CLOSED; + + // Get poly and tile. + // The API input has been cheked already, skip checking internal data. + const dtPolyRef bestRef = bestNode->id; + const dtMeshTile* bestTile = 0; + const dtPoly* bestPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(bestRef, &bestTile, &bestPoly); + + // Get parent poly and tile. + dtPolyRef parentRef = 0; + const dtMeshTile* parentTile = 0; + const dtPoly* parentPoly = 0; + if (bestNode->pidx) + parentRef = m_nodePool->getNodeAtIdx(bestNode->pidx)->id; + if (parentRef) + m_nav->getTileAndPolyByRefUnsafe(parentRef, &parentTile, &parentPoly); + + for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestTile->links[i].next) + { + const dtLink* link = &bestTile->links[i]; + dtPolyRef neighbourRef = link->ref; + // Skip invalid neighbours and do not follow back to parent. + if (!neighbourRef || neighbourRef == parentRef) + continue; + + // Expand to neighbour + const dtMeshTile* neighbourTile = 0; + const dtPoly* neighbourPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(neighbourRef, &neighbourTile, &neighbourPoly); + + // Do not advance if the polygon is excluded by the filter. + if (!filter->passFilter(neighbourRef, neighbourTile, neighbourPoly)) + continue; + + // Find edge and calc distance to the edge. + float va[3], vb[3]; + if (!getPortalPoints(bestRef, bestPoly, bestTile, neighbourRef, neighbourPoly, neighbourTile, va, vb)) + continue; + + // If the poly is not touching the edge to the next polygon, skip the connection it. + float tmin, tmax; + int segMin, segMax; + if (!dtIntersectSegmentPoly2D(va, vb, verts, nverts, tmin, tmax, segMin, segMax)) + continue; + if (tmin > 1.0f || tmax < 0.0f) + continue; + + dtNode* neighbourNode = m_nodePool->getNode(neighbourRef); + if (!neighbourNode) + continue; + + if (neighbourNode->flags & DT_NODE_CLOSED) + continue; + + // Cost + if (neighbourNode->flags == 0) + dtVlerp(neighbourNode->pos, va, vb, 0.5f); + + const float total = bestNode->total + dtVdist(bestNode->pos, neighbourNode->pos); + + // The node is already in open list and the new result is worse, skip. + if ((neighbourNode->flags & DT_NODE_OPEN) && total >= neighbourNode->total) + continue; + + neighbourNode->id = neighbourRef; + neighbourNode->flags &= ~DT_NODE_CLOSED; + neighbourNode->pidx = m_nodePool->getNodeIdx(bestNode); + neighbourNode->total = total; + + if (neighbourNode->flags & DT_NODE_OPEN) + { + m_openList->modify(neighbourNode); + } + else + { + if (n < maxResult) + { + if (resultRef) + resultRef[n] = neighbourNode->id; + if (resultParent) + resultParent[n] = m_nodePool->getNodeAtIdx(neighbourNode->pidx)->id; + if (resultCost) + resultCost[n] = neighbourNode->total; + ++n; + } + neighbourNode->flags = DT_NODE_OPEN; + m_openList->push(neighbourNode); + } + } + } + + *resultCount = n; + + return DT_SUCCESS; +} + +dtStatus dtNavMeshQuery::findLocalNeighbourhood(dtPolyRef startRef, const float* centerPos, const float radius, + const dtQueryFilter* filter, + dtPolyRef* resultRef, dtPolyRef* resultParent, + int* resultCount, const int maxResult) const +{ + dtAssert(m_nav); + dtAssert(m_tinyNodePool); + + *resultCount = 0; + + // Validate input + if (!startRef) return DT_FAILURE; + if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; + + static const int MAX_STACK = 48; + dtNode* stack[MAX_STACK]; + int nstack = 0; + + m_tinyNodePool->clear(); + + dtNode* startNode = m_tinyNodePool->getNode(startRef); + startNode->pidx = 0; + startNode->id = startRef; + startNode->flags = DT_NODE_CLOSED; + stack[nstack++] = startNode; + + const float radiusSqr = dtSqr(radius); + + float pa[DT_VERTS_PER_POLYGON*3]; + float pb[DT_VERTS_PER_POLYGON*3]; + + int n = 0; + if (n < maxResult) + { + resultRef[n] = startNode->id; + if (resultParent) + resultParent[n] = 0; + ++n; + } + + while (nstack) + { + // Pop front. + dtNode* curNode = stack[0]; + for (int i = 0; i < nstack-1; ++i) + stack[i] = stack[i+1]; + nstack--; + + // Get poly and tile. + // The API input has been cheked already, skip checking internal data. + const dtPolyRef curRef = curNode->id; + const dtMeshTile* curTile = 0; + const dtPoly* curPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(curRef, &curTile, &curPoly); + + for (unsigned int i = curPoly->firstLink; i != DT_NULL_LINK; i = curTile->links[i].next) + { + const dtLink* link = &curTile->links[i]; + dtPolyRef neighbourRef = link->ref; + // Skip invalid neighbours. + if (!neighbourRef) + continue; + + // Skip if cannot alloca more nodes. + dtNode* neighbourNode = m_tinyNodePool->getNode(neighbourRef); + if (!neighbourNode) + continue; + // Skip visited. + if (neighbourNode->flags & DT_NODE_CLOSED) + continue; + + // Expand to neighbour + const dtMeshTile* neighbourTile = 0; + const dtPoly* neighbourPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(neighbourRef, &neighbourTile, &neighbourPoly); + + // Skip off-mesh connections. + if (neighbourPoly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION) + continue; + + // Do not advance if the polygon is excluded by the filter. + if (!filter->passFilter(neighbourRef, neighbourTile, neighbourPoly)) + continue; + + // Find edge and calc distance to the edge. + float va[3], vb[3]; + if (!getPortalPoints(curRef, curPoly, curTile, neighbourRef, neighbourPoly, neighbourTile, va, vb)) + continue; + + // If the circle is not touching the next polygon, skip it. + float tseg; + float distSqr = dtDistancePtSegSqr2D(centerPos, va, vb, tseg); + if (distSqr > radiusSqr) + continue; + + // Mark node visited, this is done before the overlap test so that + // we will not visit the poly again if the test fails. + neighbourNode->flags |= DT_NODE_CLOSED; + neighbourNode->pidx = m_tinyNodePool->getNodeIdx(curNode); + + // Check that the polygon does not collide with existing polygons. + + // Collect vertices of the neighbour poly. + const int npa = neighbourPoly->vertCount; + for (int k = 0; k < npa; ++k) + dtVcopy(&pa[k*3], &neighbourTile->verts[neighbourPoly->verts[k]*3]); + + bool overlap = false; + for (int j = 0; j < n; ++j) + { + dtPolyRef pastRef = resultRef[j]; + + // Connected polys do not overlap. + bool connected = false; + for (unsigned int k = curPoly->firstLink; k != DT_NULL_LINK; k = curTile->links[k].next) + { + if (curTile->links[k].ref == pastRef) + { + connected = true; + break; + } + } + if (connected) + continue; + + // Potentially overlapping. + const dtMeshTile* pastTile = 0; + const dtPoly* pastPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(pastRef, &pastTile, &pastPoly); + + // Get vertices and test overlap + const int npb = pastPoly->vertCount; + for (int k = 0; k < npb; ++k) + dtVcopy(&pb[k*3], &pastTile->verts[pastPoly->verts[k]*3]); + + if (dtOverlapPolyPoly2D(pa,npa, pb,npb)) + { + overlap = true; + break; + } + } + if (overlap) + continue; + + // This poly is fine, store and advance to the poly. + if (n < maxResult) + { + resultRef[n] = neighbourRef; + if (resultParent) + resultParent[n] = curRef; + ++n; + } + + if (nstack < MAX_STACK) + { + stack[nstack++] = neighbourNode; + } + } + } + + *resultCount = n; + + return DT_SUCCESS; +} + + +struct dtSegInterval +{ + short tmin, tmax; +}; + +static void insertInterval(dtSegInterval* ints, int& nints, const int maxInts, + const short tmin, const short tmax) +{ + if (nints+1 > maxInts) return; + // Find insertion point. + int idx = 0; + while (idx < nints) + { + if (tmax <= ints[idx].tmin) + break; + idx++; + } + // Move current results. + if (nints-idx) + memmove(ints+idx+1, ints+idx, sizeof(dtSegInterval)*(nints-idx)); + // Store + ints[idx].tmin = tmin; + ints[idx].tmax = tmax; + nints++; +} + +dtStatus dtNavMeshQuery::getPolyWallSegments(dtPolyRef ref, const dtQueryFilter* filter, + float* segments, int* segmentCount, const int maxSegments) const +{ + dtAssert(m_nav); + + *segmentCount = 0; + + const dtMeshTile* tile = 0; + const dtPoly* poly = 0; + if (m_nav->getTileAndPolyByRef(ref, &tile, &poly) != DT_SUCCESS) + return DT_FAILURE; + + int n = 0; + static const int MAX_INTERVAL = 16; + dtSegInterval ints[MAX_INTERVAL]; + int nints; + + for (int i = 0, j = (int)poly->vertCount-1; i < (int)poly->vertCount; j = i++) + { + // Skip non-solid edges. + nints = 0; + if (poly->neis[j] & DT_EXT_LINK) + { + // Tile border. + for (unsigned int k = poly->firstLink; k != DT_NULL_LINK; k = tile->links[k].next) + { + const dtLink* link = &tile->links[k]; + if (link->edge == j) + { + if (link->ref != 0) + { + const dtMeshTile* neiTile = 0; + const dtPoly* neiPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(link->ref, &neiTile, &neiPoly); + if (filter->passFilter(link->ref, neiTile, neiPoly)) + { + insertInterval(ints, nints, MAX_INTERVAL, link->bmin, link->bmax); + } + } + } + } + } + else if (poly->neis[j]) + { + // Internal edge + const unsigned int idx = (unsigned int)(poly->neis[j]-1); + const dtPolyRef ref = m_nav->getPolyRefBase(tile) | idx; + if (filter->passFilter(ref, tile, &tile->polys[idx])) + continue; + } + + // Add sentinels + insertInterval(ints, nints, MAX_INTERVAL, -1, 0); + insertInterval(ints, nints, MAX_INTERVAL, 255, 256); + + // Store segment. + const float* vj = &tile->verts[poly->verts[j]*3]; + const float* vi = &tile->verts[poly->verts[i]*3]; + for (int k = 1; k < nints; ++k) + { + // Find the space inbetween the opening areas. + const int imin = ints[k-1].tmax; + const int imax = ints[k].tmin; + if (imin == imax) continue; + if (imin == 0 && imax == 255) + { + if (n < maxSegments) + { + float* seg = &segments[n*6]; + n++; + dtVcopy(seg+0, vj); + dtVcopy(seg+3, vi); + } + } + else + { + const float tmin = imin/255.0f; + const float tmax = imax/255.0f; + if (n < maxSegments) + { + float* seg = &segments[n*6]; + n++; + dtVlerp(seg+0, vj,vi, tmin); + dtVlerp(seg+3, vj,vi, tmax); + } + } + } + } + + *segmentCount = n; + + return DT_SUCCESS; +} + +dtStatus dtNavMeshQuery::findDistanceToWall(dtPolyRef startRef, const float* centerPos, const float maxRadius, + const dtQueryFilter* filter, + float* hitDist, float* hitPos, float* hitNormal) const +{ + dtAssert(m_nav); + dtAssert(m_nodePool); + dtAssert(m_openList); + + // Validate input + if (!startRef) return DT_FAILURE; + if (!m_nav->isValidPolyRef(startRef)) return DT_FAILURE; + + m_nodePool->clear(); + m_openList->clear(); + + dtNode* startNode = m_nodePool->getNode(startRef); + dtVcopy(startNode->pos, centerPos); + startNode->pidx = 0; + startNode->cost = 0; + startNode->total = 0; + startNode->id = startRef; + startNode->flags = DT_NODE_OPEN; + m_openList->push(startNode); + + float radiusSqr = dtSqr(maxRadius); + + while (!m_openList->empty()) + { + dtNode* bestNode = m_openList->pop(); + bestNode->flags &= ~DT_NODE_OPEN; + bestNode->flags |= DT_NODE_CLOSED; + + // Get poly and tile. + // The API input has been cheked already, skip checking internal data. + const dtPolyRef bestRef = bestNode->id; + const dtMeshTile* bestTile = 0; + const dtPoly* bestPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(bestRef, &bestTile, &bestPoly); + + // Get parent poly and tile. + dtPolyRef parentRef = 0; + const dtMeshTile* parentTile = 0; + const dtPoly* parentPoly = 0; + if (bestNode->pidx) + parentRef = m_nodePool->getNodeAtIdx(bestNode->pidx)->id; + if (parentRef) + m_nav->getTileAndPolyByRefUnsafe(parentRef, &parentTile, &parentPoly); + + // Hit test walls. + for (int i = 0, j = (int)bestPoly->vertCount-1; i < (int)bestPoly->vertCount; j = i++) + { + // Skip non-solid edges. + if (bestPoly->neis[j] & DT_EXT_LINK) + { + // Tile border. + bool solid = true; + for (unsigned int k = bestPoly->firstLink; k != DT_NULL_LINK; k = bestTile->links[k].next) + { + const dtLink* link = &bestTile->links[k]; + if (link->edge == j) + { + if (link->ref != 0) + { + const dtMeshTile* neiTile = 0; + const dtPoly* neiPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(link->ref, &neiTile, &neiPoly); + if (filter->passFilter(link->ref, neiTile, neiPoly)) + solid = false; + } + break; + } + } + if (!solid) continue; + } + else if (bestPoly->neis[j]) + { + // Internal edge + const unsigned int idx = (unsigned int)(bestPoly->neis[j]-1); + const dtPolyRef ref = m_nav->getPolyRefBase(bestTile) | idx; + if (filter->passFilter(ref, bestTile, &bestTile->polys[idx])) + continue; + } + + // Calc distance to the edge. + const float* vj = &bestTile->verts[bestPoly->verts[j]*3]; + const float* vi = &bestTile->verts[bestPoly->verts[i]*3]; + float tseg; + float distSqr = dtDistancePtSegSqr2D(centerPos, vj, vi, tseg); + + // Edge is too far, skip. + if (distSqr > radiusSqr) + continue; + + // Hit wall, update radius. + radiusSqr = distSqr; + // Calculate hit pos. + hitPos[0] = vj[0] + (vi[0] - vj[0])*tseg; + hitPos[1] = vj[1] + (vi[1] - vj[1])*tseg; + hitPos[2] = vj[2] + (vi[2] - vj[2])*tseg; + } + + for (unsigned int i = bestPoly->firstLink; i != DT_NULL_LINK; i = bestTile->links[i].next) + { + const dtLink* link = &bestTile->links[i]; + dtPolyRef neighbourRef = link->ref; + // Skip invalid neighbours and do not follow back to parent. + if (!neighbourRef || neighbourRef == parentRef) + continue; + + // Expand to neighbour. + const dtMeshTile* neighbourTile = 0; + const dtPoly* neighbourPoly = 0; + m_nav->getTileAndPolyByRefUnsafe(neighbourRef, &neighbourTile, &neighbourPoly); + + // Skip off-mesh connections. + if (neighbourPoly->getType() == DT_POLYTYPE_OFFMESH_CONNECTION) + continue; + + // Calc distance to the edge. + const float* va = &bestTile->verts[bestPoly->verts[link->edge]*3]; + const float* vb = &bestTile->verts[bestPoly->verts[(link->edge+1) % bestPoly->vertCount]*3]; + float tseg; + float distSqr = dtDistancePtSegSqr2D(centerPos, va, vb, tseg); + + // If the circle is not touching the next polygon, skip it. + if (distSqr > radiusSqr) + continue; + + if (!filter->passFilter(neighbourRef, neighbourTile, neighbourPoly)) + continue; + + dtNode* neighbourNode = m_nodePool->getNode(neighbourRef); + if (!neighbourNode) + continue; + + if (neighbourNode->flags & DT_NODE_CLOSED) + continue; + + // Cost + if (neighbourNode->flags == 0) + { + getEdgeMidPoint(bestRef, bestPoly, bestTile, + neighbourRef, neighbourPoly, neighbourTile, neighbourNode->pos); + } + + const float total = bestNode->total + dtVdist(bestNode->pos, neighbourNode->pos); + + // The node is already in open list and the new result is worse, skip. + if ((neighbourNode->flags & DT_NODE_OPEN) && total >= neighbourNode->total) + continue; + + neighbourNode->id = neighbourRef; + neighbourNode->flags &= ~DT_NODE_CLOSED; + neighbourNode->pidx = m_nodePool->getNodeIdx(bestNode); + neighbourNode->total = total; + + if (neighbourNode->flags & DT_NODE_OPEN) + { + m_openList->modify(neighbourNode); + } + else + { + neighbourNode->flags |= DT_NODE_OPEN; + m_openList->push(neighbourNode); + } + } + } + + // Calc hit normal. + dtVsub(hitNormal, centerPos, hitPos); + dtVnormalize(hitNormal); + + *hitDist = sqrtf(radiusSqr); + + return DT_SUCCESS; +} + +bool dtNavMeshQuery::isInClosedList(dtPolyRef ref) const +{ + if (!m_nodePool) return false; + const dtNode* node = m_nodePool->findNode(ref); + return node && node->flags & DT_NODE_CLOSED; +} diff --git a/dep/recastnavigation/Detour/DetourNavMeshQuery.h b/dep/recastnavigation/Detour/DetourNavMeshQuery.h new file mode 100644 index 00000000000..f5046d83290 --- /dev/null +++ b/dep/recastnavigation/Detour/DetourNavMeshQuery.h @@ -0,0 +1,407 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef DETOURNAVMESHQUERY_H +#define DETOURNAVMESHQUERY_H + +#include "DetourNavMesh.h" + + +// Define DT_VIRTUAL_QUERYFILTER if you wish to derive a custom filter from dtQueryFilter. +// On certain platforms indirect or virtual function call is expensive. The default +// setting is to use non-virtual functions, the actualy implementations of the functions +// are declared as inline for maximum speed. + +//#define DT_VIRTUAL_QUERYFILTER 1 + +// Class for polygon filtering and cost calculation during query operations. +// - It is possible to derive a custom query filter from dtQueryFilter by overriding +// the virtual functions passFilter() and getCost(). +// - Both functions should be as fast as possible. Use cached local copy of data +// instead of accessing your own objects where possible. +// - You do not need to adhere to the flags and cost logic provided by the default +// implementation. +// - In order for the A* to work properly, the cost should be proportional to +// the travel distance. Using cost modifier less than 1.0 is likely to lead +// to problems during pathfinding. +class dtQueryFilter +{ + float m_areaCost[DT_MAX_AREAS]; // Array storing cost per area type, used by default implementation. + unsigned short m_includeFlags; // Include poly flags, used by default implementation. + unsigned short m_excludeFlags; // Exclude poly flags, used by default implementation. + +public: + dtQueryFilter(); + + // Returns true if the polygon is can visited. + // Params: + // ref - (in) reference to the polygon test. + // tile - (in) pointer to the tile of the polygon test. + // poly - (in) pointer to the polygon test. +#ifdef DT_VIRTUAL_QUERYFILTER + virtual bool passFilter(const dtPolyRef ref, + const dtMeshTile* tile, + const dtPoly* poly) const; +#else + bool passFilter(const dtPolyRef ref, + const dtMeshTile* tile, + const dtPoly* poly) const; +#endif + + // Returns cost to travel from 'pa' to 'pb'.' + // The segment is fully contained inside 'cur'. + // 'pa' lies on the edge between 'prev' and 'cur', + // 'pb' lies on the edge between 'cur' and 'next'. + // Params: + // pa - (in) segment start position. + // pb - (in) segment end position. + // prevRef, prevTile, prevPoly - (in) data describing the previous polygon, can be null. + // curRef, curTile, curPoly - (in) data describing the current polygon. + // nextRef, nextTile, nextPoly - (in) data describing the next polygon, can be null. +#ifdef DT_VIRTUAL_QUERYFILTER + virtual float getCost(const float* pa, const float* pb, + const dtPolyRef prevRef, const dtMeshTile* prevTile, const dtPoly* prevPoly, + const dtPolyRef curRef, const dtMeshTile* curTile, const dtPoly* curPoly, + const dtPolyRef nextRef, const dtMeshTile* nextTile, const dtPoly* nextPoly) const; +#else + float getCost(const float* pa, const float* pb, + const dtPolyRef prevRef, const dtMeshTile* prevTile, const dtPoly* prevPoly, + const dtPolyRef curRef, const dtMeshTile* curTile, const dtPoly* curPoly, + const dtPolyRef nextRef, const dtMeshTile* nextTile, const dtPoly* nextPoly) const; +#endif + + // Getters and setters for the default implementation data. + inline float getAreaCost(const int i) const { return m_areaCost[i]; } + inline void setAreaCost(const int i, const float cost) { m_areaCost[i] = cost; } + + inline unsigned short getIncludeFlags() const { return m_includeFlags; } + inline void setIncludeFlags(const unsigned short flags) { m_includeFlags = flags; } + + inline unsigned short getExcludeFlags() const { return m_excludeFlags; } + inline void setExcludeFlags(const unsigned short flags) { m_excludeFlags = flags; } +}; + +class dtNavMeshQuery +{ +public: + dtNavMeshQuery(); + ~dtNavMeshQuery(); + + // Initializes the nav mesh query. + // Params: + // nav - (in) pointer to navigation mesh data. + // maxNodes - (in) Maximum number of search nodes to use (max 65536). + // Returns: True if succeed, else false. + dtStatus init(const dtNavMesh* nav, const int maxNodes); + + // Finds the nearest navigation polygon around the center location. + // Params: + // center[3] - (in) The center of the search box. + // extents[3] - (in) The extents of the search box. + // filter - (in) path polygon filter. + // nearestRef - (out) Reference to the nearest polygon. + // nearestPt[3] - (out, opt) The nearest point on found polygon, null if not needed. + // Returns: Reference identifier for the polygon, or 0 if no polygons found. + dtStatus findNearestPoly(const float* center, const float* extents, + const dtQueryFilter* filter, + dtPolyRef* nearestRef, float* nearestPt) const; + + // Returns polygons which overlap the query box. + // Params: + // center[3] - (in) the center of the search box. + // extents[3] - (in) the extents of the search box. + // filter - (in) path polygon filter. + // polys - (out) array holding the search result. + // polyCount - (out) Number of polygons in search result array. + // maxPolys - (in) The max number of polygons the polys array can hold. + dtStatus queryPolygons(const float* center, const float* extents, + const dtQueryFilter* filter, + dtPolyRef* polys, int* polyCount, const int maxPolys) const; + + // Finds path from start polygon to end polygon. + // If target polygon canno be reached through the navigation graph, + // the last node on the array is nearest node to the end polygon. + // Start end end positions are needed to calculate more accurate + // traversal cost at start end end polygons. + // Params: + // startRef - (in) ref to path start polygon. + // endRef - (in) ref to path end polygon. + // startPos[3] - (in) Path start location. + // endPos[3] - (in) Path end location. + // filter - (in) path polygon filter. + // path - (out) array holding the search result. + // pathCount - (out) Number of polygons in search result array. + // maxPath - (in) The max number of polygons the path array can hold. Must be at least 1. + dtStatus findPath(dtPolyRef startRef, dtPolyRef endRef, + const float* startPos, const float* endPos, + const dtQueryFilter* filter, + dtPolyRef* path, int* pathCount, const int maxPath) const; + + // Intializes sliced path find query. + // Note 1: calling any other dtNavMeshQuery method before calling findPathEnd() + // may results in corrupted data! + // Note 2: The pointer to filter is store, and used in subsequent + // calls to updateSlicedFindPath(). + // Params: + // startRef - (in) ref to path start polygon. + // endRef - (in) ref to path end polygon. + // startPos[3] - (in) Path start location. + // endPos[3] - (in) Path end location. + // filter - (in) path polygon filter. + dtStatus initSlicedFindPath(dtPolyRef startRef, dtPolyRef endRef, + const float* startPos, const float* endPos, + const dtQueryFilter* filter); + + // Updates sliced path find query. + // Params: + // maxIter - (in) max number of iterations to update. + // Returns: Path query state. + dtStatus updateSlicedFindPath(const int maxIter); + + // Finalizes sliced path find query and returns found path. + // path - (out) array holding the search result. + // pathCount - (out) Number of polygons in search result array. + // maxPath - (in) The max number of polygons the path array can hold. + dtStatus finalizeSlicedFindPath(dtPolyRef* path, int* pathCount, const int maxPath); + + // Finalizes partial sliced path find query and returns path to the furthest + // polygon on the existing path that was visited during the search. + // existing - (out) Array of polygons in the existing path. + // existingSize - (out) Number of polygons in existing path array. + // path - (out) array holding the search result. + // pathCount - (out) Number of polygons in search result array. + // maxPath - (in) The max number of polygons the path array can hold. + dtStatus finalizeSlicedFindPathPartial(const dtPolyRef* existing, const int existingSize, + dtPolyRef* path, int* pathCount, const int maxPath); + + // Finds a straight path from start to end locations within the corridor + // described by the path polygons. + // Start and end locations will be clamped on the corridor. + // The returned polygon references are point to polygon which was entered when + // a path point was added. For the end point, zero will be returned. This allows + // to match for example off-mesh link points to their representative polygons. + // Params: + // startPos[3] - (in) Path start location. + // endPo[3] - (in) Path end location. + // path - (in) Array of connected polygons describing the corridor. + // pathSize - (in) Number of polygons in path array. + // straightPath - (out) Points describing the straight path. + // straightPathFlags - (out, opt) Flags describing each point type, see dtStraightPathFlags. + // straightPathRefs - (out, opt) References to polygons at point locations. + // straightPathCount - (out) Number of points in the path. + // maxStraightPath - (in) The max number of points the straight path array can hold. Must be at least 1. + dtStatus findStraightPath(const float* startPos, const float* endPos, + const dtPolyRef* path, const int pathSize, + float* straightPath, unsigned char* straightPathFlags, dtPolyRef* straightPathRefs, + int* straightPathCount, const int maxStraightPath) const; + + // Moves from startPos to endPos constrained to the navmesh. + // If the endPos is reachable, the resultPos will be endPos, + // or else the resultPos will be the nearest point in navmesh. + // Note: The resulting point is not projected to the ground, use getPolyHeight() to get height. + // Note: The algorithm is optimized for small delta movement and small number of polygons. + // Params: + // startRef - (in) ref to the polygon where startPos lies. + // startPos[3] - (in) start position of the mover. + // endPos[3] - (in) desired end position of the mover. + // filter - (in) path polygon filter. + // resultPos[3] - (out) new position of the mover. + // visited - (out) array of visited polygons. + // visitedCount - (out) Number of entries in the visited array. + // maxVisitedSize - (in) max number of polygons in the visited array. + dtStatus moveAlongSurface(dtPolyRef startRef, const float* startPos, const float* endPos, + const dtQueryFilter* filter, + float* resultPos, dtPolyRef* visited, int* visitedCount, const int maxVisitedSize) const; + + // Casts 'walkability' ray along the navmesh surface from startPos towards the endPos. + // Params: + // startRef - (in) ref to the polygon where the start lies. + // startPos[3] - (in) start position of the query. + // endPos[3] - (in) end position of the query. + // t - (out) hit parameter along the segment, FLT_MAX if no hit. + // hitNormal[3] - (out) normal of the nearest hit. + // filter - (in) path polygon filter. + // path - (out,opt) visited path polygons. + // pathCount - (out,opt) Number of polygons visited. + // maxPath - (in) max number of polygons in the path array. + dtStatus raycast(dtPolyRef startRef, const float* startPos, const float* endPos, + const dtQueryFilter* filter, + float* t, float* hitNormal, dtPolyRef* path, int* pathCount, const int maxPath) const; + + // Returns distance to nearest wall from the specified location. + // Params: + // startRef - (in) ref to the polygon where the center lies. + // centerPos[3] - (in) center if the query circle. + // maxRadius - (in) max search radius. + // filter - (in) path polygon filter. + // hitDist - (out) distance to nearest wall from the test location. + // hitPos[3] - (out) location of the nearest hit. + // hitNormal[3] - (out) normal of the nearest hit. + dtStatus findDistanceToWall(dtPolyRef startRef, const float* centerPos, const float maxRadius, + const dtQueryFilter* filter, + float* hitDist, float* hitPos, float* hitNormal) const; + + // Finds polygons found along the navigation graph which touch the specified circle. + // Params: + // startRef - (in) ref to the polygon where the search starts. + // centerPos[3] - (in) center if the query circle. + // radius - (in) radius of the query circle. + // filter - (in) path polygon filter. + // resultRef - (out, opt) refs to the polygons touched by the circle. + // resultParent - (out, opt) parent of each result polygon. + // resultCost - (out, opt) search cost at each result polygon. + // resultCount - (out, opt) Number of results. + // maxResult - (int) maximum capacity of search results. + dtStatus findPolysAroundCircle(dtPolyRef startRef, const float* centerPos, const float radius, + const dtQueryFilter* filter, + dtPolyRef* resultRef, dtPolyRef* resultParent, float* resultCost, + int* resultCount, const int maxResult) const; + + // Finds polygons found along the navigation graph which touch the convex polygon shape. + // Params: + // startRef - (in) ref to the polygon where the search starts. + // verts[3*n] - (in) vertices describing convex polygon shape (CCW). + // nverts - (in) number of vertices in the polygon. + // filter - (in) path polygon filter. + // resultRef - (out, opt) refs to the polygons touched by the circle. + // resultParent - (out, opt) parent of each result polygon. + // resultCost - (out, opt) search cost at each result polygon. + // resultCount - (out) number of results. + // maxResult - (int) maximum capacity of search results. + dtStatus findPolysAroundShape(dtPolyRef startRef, const float* verts, const int nverts, + const dtQueryFilter* filter, + dtPolyRef* resultRef, dtPolyRef* resultParent, float* resultCost, + int* resultCount, const int maxResult) const; + + // Finds non-overlapping local neighbourhood around center location. + // Note: The algorithm is optimized for small query radius and small number of polygons. + // Params: + // startRef - (in) ref to the polygon where the search starts. + // centerPos[3] - (in) center if the query circle. + // radius - (in) radius of the query circle. + // filter - (in) path polygon filter. + // resultRef - (out) refs to the polygons touched by the circle. + // resultParent - (out, opt) parent of each result polygon. + // resultCount - (out) number of results. + // maxResult - (int) maximum capacity of search results. + dtStatus findLocalNeighbourhood(dtPolyRef startRef, const float* centerPos, const float radius, + const dtQueryFilter* filter, + dtPolyRef* resultRef, dtPolyRef* resultParent, + int* resultCount, const int maxResult) const; + + // Returns wall segments of specified polygon. + // Params: + // ref - (in) ref to the polygon. + // filter - (in) path polygon filter. + // segments[6*maxSegments] - (out) wall segments (2 endpoints per segment). + // segmentCount - (out) number of wall segments. + // maxSegments - (in) max number of segments that can be stored in 'segments'. + dtStatus getPolyWallSegments(dtPolyRef ref, const dtQueryFilter* filter, + float* segments, int* segmentCount, const int maxSegments) const; + + // Returns closest point on navigation polygon. + // Uses detail polygons to find the closest point to the navigation polygon surface. + // Params: + // ref - (in) ref to the polygon. + // pos[3] - (in) the point to check. + // closest[3] - (out) closest point. + // Returns: true if closest point found. + dtStatus closestPointOnPoly(dtPolyRef ref, const float* pos, float* closest) const; + + // Returns closest point on navigation polygon boundary. + // Uses the navigation polygon boundary to snap the point to poly boundary + // if it is outside the polygon. Much faster than closestPointToPoly. Does not affect height. + // Params: + // ref - (in) ref to the polygon. + // pos[3] - (in) the point to check. + // closest[3] - (out) closest point. + // Returns: true if closest point found. + dtStatus closestPointOnPolyBoundary(dtPolyRef ref, const float* pos, float* closest) const; + + // Returns start and end location of an off-mesh link polygon. + // Params: + // prevRef - (in) ref to the polygon before the link (used to select direction). + // polyRef - (in) ref to the off-mesh link polygon. + // startPos[3] - (out) start point of the link. + // endPos[3] - (out) end point of the link. + // Returns: true if link is found. + dtStatus getOffMeshConnectionPolyEndPoints(dtPolyRef prevRef, dtPolyRef polyRef, float* startPos, float* endPos) const; + + // Returns height of the polygon at specified location. + // Params: + // ref - (in) ref to the polygon. + // pos[3] - (in) the point where to locate the height. + // height - (out) height at the location. + // Returns: true if over polygon. + dtStatus getPolyHeight(dtPolyRef ref, const float* pos, float* height) const; + + // Returns true if poly reference ins in closed list. + bool isInClosedList(dtPolyRef ref) const; + + class dtNodePool* getNodePool() const { return m_nodePool; } + +private: + + // Returns neighbour tile based on side. + dtMeshTile* getNeighbourTileAt(int x, int y, int side) const; + + // Queries polygons within a tile. + int queryPolygonsInTile(const dtMeshTile* tile, const float* qmin, const float* qmax, const dtQueryFilter* filter, + dtPolyRef* polys, const int maxPolys) const; + // Find nearest polygon within a tile. + dtPolyRef findNearestPolyInTile(const dtMeshTile* tile, const float* center, const float* extents, + const dtQueryFilter* filter, float* nearestPt) const; + // Returns closest point on polygon. + dtStatus closestPointOnPolyInTile(const dtMeshTile* tile, const dtPoly* poly, const float* pos, float* closest) const; + + // Returns portal points between two polygons. + dtStatus getPortalPoints(dtPolyRef from, dtPolyRef to, float* left, float* right, + unsigned char& fromType, unsigned char& toType) const; + dtStatus getPortalPoints(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, + dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, + float* left, float* right) const; + + // Returns edge mid point between two polygons. + dtStatus getEdgeMidPoint(dtPolyRef from, dtPolyRef to, float* mid) const; + dtStatus getEdgeMidPoint(dtPolyRef from, const dtPoly* fromPoly, const dtMeshTile* fromTile, + dtPolyRef to, const dtPoly* toPoly, const dtMeshTile* toTile, + float* mid) const; + + const dtNavMesh* m_nav; // Pointer to navmesh data. + + struct dtQueryData + { + dtStatus status; + struct dtNode* lastBestNode; + float lastBestNodeCost; + dtPolyRef startRef, endRef; + float startPos[3], endPos[3]; + const dtQueryFilter* filter; + }; + dtQueryData m_query; // Sliced query state. + + class dtNodePool* m_tinyNodePool; // Pointer to small node pool. + class dtNodePool* m_nodePool; // Pointer to node pool. + class dtNodeQueue* m_openList; // Pointer to open list queue. +}; + +// Helper function to allocate navmesh query class using Detour allocator. +dtNavMeshQuery* dtAllocNavMeshQuery(); +void dtFreeNavMeshQuery(dtNavMeshQuery* query); + +#endif // DETOURNAVMESHQUERY_H diff --git a/dep/recastnavigation/Detour/DetourNode.cpp b/dep/recastnavigation/Detour/DetourNode.cpp new file mode 100644 index 00000000000..0d1af837865 --- /dev/null +++ b/dep/recastnavigation/Detour/DetourNode.cpp @@ -0,0 +1,164 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#include "DetourNode.h" +#include "DetourAlloc.h" +#include "DetourAssert.h" +#include "DetourCommon.h" +#include + +inline unsigned int dtHashRef(dtPolyRef a) +{ + a = (~a) + (a << 18); + a = a ^ (a >> 31); + a = a * 21; + a = a ^ (a >> 11); + a = a + (a << 6); + a = a ^ (a >> 22); + return (unsigned int)a; +} + +////////////////////////////////////////////////////////////////////////////////////////// +dtNodePool::dtNodePool(int maxNodes, int hashSize) : + m_nodes(0), + m_first(0), + m_next(0), + m_maxNodes(maxNodes), + m_hashSize(hashSize), + m_nodeCount(0) +{ + dtAssert(dtNextPow2(m_hashSize) == (unsigned int)m_hashSize); + dtAssert(m_maxNodes > 0); + + m_nodes = (dtNode*)dtAlloc(sizeof(dtNode)*m_maxNodes, DT_ALLOC_PERM); + m_next = (unsigned short*)dtAlloc(sizeof(unsigned short)*m_maxNodes, DT_ALLOC_PERM); + m_first = (unsigned short*)dtAlloc(sizeof(unsigned short)*hashSize, DT_ALLOC_PERM); + + dtAssert(m_nodes); + dtAssert(m_next); + dtAssert(m_first); + + memset(m_first, 0xff, sizeof(unsigned short)*m_hashSize); + memset(m_next, 0xff, sizeof(unsigned short)*m_maxNodes); +} + +dtNodePool::~dtNodePool() +{ + dtFree(m_nodes); + dtFree(m_next); + dtFree(m_first); +} + +void dtNodePool::clear() +{ + memset(m_first, 0xff, sizeof(unsigned short)*m_hashSize); + m_nodeCount = 0; +} + +dtNode* dtNodePool::findNode(dtPolyRef id) +{ + unsigned int bucket = dtHashRef(id) & (m_hashSize-1); + unsigned short i = m_first[bucket]; + while (i != DT_NULL_IDX) + { + if (m_nodes[i].id == id) + return &m_nodes[i]; + i = m_next[i]; + } + return 0; +} + +dtNode* dtNodePool::getNode(dtPolyRef id) +{ + unsigned int bucket = dtHashRef(id) & (m_hashSize-1); + unsigned short i = m_first[bucket]; + dtNode* node = 0; + while (i != DT_NULL_IDX) + { + if (m_nodes[i].id == id) + return &m_nodes[i]; + i = m_next[i]; + } + + if (m_nodeCount >= m_maxNodes) + return 0; + + i = (unsigned short)m_nodeCount; + m_nodeCount++; + + // Init node + node = &m_nodes[i]; + node->pidx = 0; + node->cost = 0; + node->total = 0; + node->id = id; + node->flags = 0; + + m_next[i] = m_first[bucket]; + m_first[bucket] = i; + + return node; +} + + +////////////////////////////////////////////////////////////////////////////////////////// +dtNodeQueue::dtNodeQueue(int n) : + m_heap(0), + m_capacity(n), + m_size(0) +{ + dtAssert(m_capacity > 0); + + m_heap = (dtNode**)dtAlloc(sizeof(dtNode*)*(m_capacity+1), DT_ALLOC_PERM); + dtAssert(m_heap); +} + +dtNodeQueue::~dtNodeQueue() +{ + dtFree(m_heap); +} + +void dtNodeQueue::bubbleUp(int i, dtNode* node) +{ + int parent = (i-1)/2; + // note: (index > 0) means there is a parent + while ((i > 0) && (m_heap[parent]->total > node->total)) + { + m_heap[i] = m_heap[parent]; + i = parent; + parent = (i-1)/2; + } + m_heap[i] = node; +} + +void dtNodeQueue::trickleDown(int i, dtNode* node) +{ + int child = (i*2)+1; + while (child < m_size) + { + if (((child+1) < m_size) && + (m_heap[child]->total > m_heap[child+1]->total)) + { + child++; + } + m_heap[i] = m_heap[child]; + i = child; + child = (i*2)+1; + } + bubbleUp(i, node); +} diff --git a/dep/recastnavigation/Detour/DetourNode.h b/dep/recastnavigation/Detour/DetourNode.h new file mode 100644 index 00000000000..e893f784dcc --- /dev/null +++ b/dep/recastnavigation/Detour/DetourNode.h @@ -0,0 +1,157 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef DETOURNODE_H +#define DETOURNODE_H + +#include "DetourNavMesh.h" + +enum dtNodeFlags +{ + DT_NODE_OPEN = 0x01, + DT_NODE_CLOSED = 0x02, +}; + +static const unsigned short DT_NULL_IDX = 0xffff; + +struct dtNode +{ + float pos[3]; // Position of the node. + float cost; // Cost from previous node to current node. + float total; // Cost up to the node. + unsigned int pidx : 30; // Index to parent node. + unsigned int flags : 2; // Node flags 0/open/closed. + dtPolyRef id; // Polygon ref the node corresponds to. +}; + +class dtNodePool +{ +public: + dtNodePool(int maxNodes, int hashSize); + ~dtNodePool(); + inline void operator=(const dtNodePool&) {} + void clear(); + dtNode* getNode(dtPolyRef id); + dtNode* findNode(dtPolyRef id); + + inline unsigned int getNodeIdx(const dtNode* node) const + { + if (!node) return 0; + return (unsigned int)(node - m_nodes)+1; + } + + inline dtNode* getNodeAtIdx(unsigned int idx) + { + if (!idx) return 0; + return &m_nodes[idx-1]; + } + + inline const dtNode* getNodeAtIdx(unsigned int idx) const + { + if (!idx) return 0; + return &m_nodes[idx-1]; + } + + inline int getMemUsed() const + { + return sizeof(*this) + + sizeof(dtNode)*m_maxNodes + + sizeof(unsigned short)*m_maxNodes + + sizeof(unsigned short)*m_hashSize; + } + + inline int getMaxNodes() const { return m_maxNodes; } + + inline int getHashSize() const { return m_hashSize; } + inline unsigned short getFirst(int bucket) const { return m_first[bucket]; } + inline unsigned short getNext(int i) const { return m_next[i]; } + +private: + + dtNode* m_nodes; + unsigned short* m_first; + unsigned short* m_next; + const int m_maxNodes; + const int m_hashSize; + int m_nodeCount; +}; + +class dtNodeQueue +{ +public: + dtNodeQueue(int n); + ~dtNodeQueue(); + inline void operator=(dtNodeQueue&) {} + + inline void clear() + { + m_size = 0; + } + + inline dtNode* top() + { + return m_heap[0]; + } + + inline dtNode* pop() + { + dtNode* result = m_heap[0]; + m_size--; + trickleDown(0, m_heap[m_size]); + return result; + } + + inline void push(dtNode* node) + { + m_size++; + bubbleUp(m_size-1, node); + } + + inline void modify(dtNode* node) + { + for (int i = 0; i < m_size; ++i) + { + if (m_heap[i] == node) + { + bubbleUp(i, node); + return; + } + } + } + + inline bool empty() const { return m_size == 0; } + + inline int getMemUsed() const + { + return sizeof(*this) + + sizeof(dtNode*)*(m_capacity+1); + } + + inline int getCapacity() const { return m_capacity; } + +private: + void bubbleUp(int i, dtNode* node); + void trickleDown(int i, dtNode* node); + + dtNode** m_heap; + const int m_capacity; + int m_size; +}; + + +#endif // DETOURNODE_H \ No newline at end of file diff --git a/dep/recastnavigation/Detour/DetourObstacleAvoidance.cpp b/dep/recastnavigation/Detour/DetourObstacleAvoidance.cpp new file mode 100644 index 00000000000..a255c9b3fd1 --- /dev/null +++ b/dep/recastnavigation/Detour/DetourObstacleAvoidance.cpp @@ -0,0 +1,532 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#include "DetourObstacleAvoidance.h" +#include "DetourCommon.h" +#include "DetourAlloc.h" +#include "DetourAssert.h" +#include +#include +#include +#include + + +static int sweepCircleCircle(const float* c0, const float r0, const float* v, + const float* c1, const float r1, + float& tmin, float& tmax) +{ + static const float EPS = 0.0001f; + float s[3]; + dtVsub(s,c1,c0); + float r = r0+r1; + float c = dtVdot2D(s,s) - r*r; + float a = dtVdot2D(v,v); + if (a < EPS) return 0; // not moving + + // Overlap, calc time to exit. + float b = dtVdot2D(v,s); + float d = b*b - a*c; + if (d < 0.0f) return 0; // no intersection. + a = 1.0f / a; + const float rd = dtSqrt(d); + tmin = (b - rd) * a; + tmax = (b + rd) * a; + return 1; +} + +static int isectRaySeg(const float* ap, const float* u, + const float* bp, const float* bq, + float& t) +{ + float v[3], w[3]; + dtVsub(v,bq,bp); + dtVsub(w,ap,bp); + float d = dtVperp2D(u,v); + if (fabsf(d) < 1e-6f) return 0; + d = 1.0f/d; + t = dtVperp2D(v,w) * d; + if (t < 0 || t > 1) return 0; + float s = dtVperp2D(u,w) * d; + if (s < 0 || s > 1) return 0; + return 1; +} + + + +dtObstacleAvoidanceDebugData* dtAllocObstacleAvoidanceDebugData() +{ + void* mem = dtAlloc(sizeof(dtObstacleAvoidanceDebugData), DT_ALLOC_PERM); + if (!mem) return 0; + return new(mem) dtObstacleAvoidanceDebugData; +} + +void dtFreeObstacleAvoidanceDebugData(dtObstacleAvoidanceDebugData* ptr) +{ + if (!ptr) return; + ptr->~dtObstacleAvoidanceDebugData(); + dtFree(ptr); +} + + +dtObstacleAvoidanceDebugData::dtObstacleAvoidanceDebugData() : + m_nsamples(0), + m_maxSamples(0), + m_vel(0), + m_ssize(0), + m_pen(0), + m_vpen(0), + m_vcpen(0), + m_spen(0), + m_tpen(0) +{ +} + +dtObstacleAvoidanceDebugData::~dtObstacleAvoidanceDebugData() +{ + dtFree(m_vel); + dtFree(m_ssize); + dtFree(m_pen); + dtFree(m_vpen); + dtFree(m_vcpen); + dtFree(m_spen); + dtFree(m_tpen); +} + +bool dtObstacleAvoidanceDebugData::init(const int maxSamples) +{ + dtAssert(maxSamples); + m_maxSamples = maxSamples; + + m_vel = (float*)dtAlloc(sizeof(float)*3*m_maxSamples, DT_ALLOC_PERM); + if (!m_vel) + return false; + m_pen = (float*)dtAlloc(sizeof(float)*m_maxSamples, DT_ALLOC_PERM); + if (!m_pen) + return false; + m_ssize = (float*)dtAlloc(sizeof(float)*m_maxSamples, DT_ALLOC_PERM); + if (!m_ssize) + return false; + m_vpen = (float*)dtAlloc(sizeof(float)*m_maxSamples, DT_ALLOC_PERM); + if (!m_vpen) + return false; + m_vcpen = (float*)dtAlloc(sizeof(float)*m_maxSamples, DT_ALLOC_PERM); + if (!m_vcpen) + return false; + m_spen = (float*)dtAlloc(sizeof(float)*m_maxSamples, DT_ALLOC_PERM); + if (!m_spen) + return false; + m_tpen = (float*)dtAlloc(sizeof(float)*m_maxSamples, DT_ALLOC_PERM); + if (!m_tpen) + return false; + + return true; +} + +void dtObstacleAvoidanceDebugData::reset() +{ + m_nsamples = 0; +} + +void dtObstacleAvoidanceDebugData::addSample(const float* vel, const float ssize, const float pen, + const float vpen, const float vcpen, const float spen, const float tpen) +{ + if (m_nsamples >= m_maxSamples) + return; + dtAssert(m_vel); + dtAssert(m_ssize); + dtAssert(m_pen); + dtAssert(m_vpen); + dtAssert(m_vcpen); + dtAssert(m_spen); + dtAssert(m_tpen); + dtVcopy(&m_vel[m_nsamples*3], vel); + m_ssize[m_nsamples] = ssize; + m_pen[m_nsamples] = pen; + m_vpen[m_nsamples] = vpen; + m_vcpen[m_nsamples] = vcpen; + m_spen[m_nsamples] = spen; + m_tpen[m_nsamples] = tpen; + m_nsamples++; +} + +static void normalizeArray(float* arr, const int n) +{ + // Normalize penaly range. + float minPen = FLT_MAX; + float maxPen = -FLT_MAX; + for (int i = 0; i < n; ++i) + { + minPen = dtMin(minPen, arr[i]); + maxPen = dtMax(maxPen, arr[i]); + } + const float penRange = maxPen-minPen; + const float s = penRange > 0.001f ? (1.0f / penRange) : 1; + for (int i = 0; i < n; ++i) + arr[i] = dtClamp((arr[i]-minPen)*s, 0.0f, 1.0f); +} + +void dtObstacleAvoidanceDebugData::normalizeSamples() +{ + normalizeArray(m_pen, m_nsamples); + normalizeArray(m_vpen, m_nsamples); + normalizeArray(m_vcpen, m_nsamples); + normalizeArray(m_spen, m_nsamples); + normalizeArray(m_tpen, m_nsamples); +} + + +dtObstacleAvoidanceQuery* dtAllocObstacleAvoidanceQuery() +{ + void* mem = dtAlloc(sizeof(dtObstacleAvoidanceQuery), DT_ALLOC_PERM); + if (!mem) return 0; + return new(mem) dtObstacleAvoidanceQuery; +} + +void dtFreeObstacleAvoidanceQuery(dtObstacleAvoidanceQuery* ptr) +{ + if (!ptr) return; + ptr->~dtObstacleAvoidanceQuery(); + dtFree(ptr); +} + + +dtObstacleAvoidanceQuery::dtObstacleAvoidanceQuery() : + m_velBias(0.0f), + m_weightDesVel(0.0f), + m_weightCurVel(0.0f), + m_weightSide(0.0f), + m_weightToi(0.0f), + m_horizTime(0.0f), + m_maxCircles(0), + m_circles(0), + m_ncircles(0), + m_maxSegments(0), + m_segments(0), + m_nsegments(0) +{ +} + +dtObstacleAvoidanceQuery::~dtObstacleAvoidanceQuery() +{ + dtFree(m_circles); + dtFree(m_segments); +} + +bool dtObstacleAvoidanceQuery::init(const int maxCircles, const int maxSegments) +{ + m_maxCircles = maxCircles; + m_ncircles = 0; + m_circles = (dtObstacleCircle*)dtAlloc(sizeof(dtObstacleCircle)*m_maxCircles, DT_ALLOC_PERM); + if (!m_circles) + return false; + memset(m_circles, 0, sizeof(dtObstacleCircle)*m_maxCircles); + + m_maxSegments = maxSegments; + m_nsegments = 0; + m_segments = (dtObstacleSegment*)dtAlloc(sizeof(dtObstacleSegment)*m_maxSegments, DT_ALLOC_PERM); + if (!m_segments) + return false; + memset(m_segments, 0, sizeof(dtObstacleSegment)*m_maxSegments); + + return true; +} + +void dtObstacleAvoidanceQuery::reset() +{ + m_ncircles = 0; + m_nsegments = 0; +} + +void dtObstacleAvoidanceQuery::addCircle(const float* pos, const float rad, + const float* vel, const float* dvel) +{ + if (m_ncircles >= m_maxCircles) + return; + + dtObstacleCircle* cir = &m_circles[m_ncircles++]; + dtVcopy(cir->p, pos); + cir->rad = rad; + dtVcopy(cir->vel, vel); + dtVcopy(cir->dvel, dvel); +} + +void dtObstacleAvoidanceQuery::addSegment(const float* p, const float* q) +{ + if (m_nsegments > m_maxSegments) + return; + + dtObstacleSegment* seg = &m_segments[m_nsegments++]; + dtVcopy(seg->p, p); + dtVcopy(seg->q, q); +} + +void dtObstacleAvoidanceQuery::prepare(const float* pos, const float* dvel) +{ + // Prepare obstacles + for (int i = 0; i < m_ncircles; ++i) + { + dtObstacleCircle* cir = &m_circles[i]; + + // Side + const float* pa = pos; + const float* pb = cir->p; + + const float orig[3] = {0,0}; + float dv[3]; + dtVsub(cir->dp,pb,pa); + dtVnormalize(cir->dp); + dtVsub(dv, cir->dvel, dvel); + + const float a = dtTriArea2D(orig, cir->dp,dv); + if (a < 0.01f) + { + cir->np[0] = -cir->dp[2]; + cir->np[2] = cir->dp[0]; + } + else + { + cir->np[0] = cir->dp[2]; + cir->np[2] = -cir->dp[0]; + } + } + + for (int i = 0; i < m_nsegments; ++i) + { + dtObstacleSegment* seg = &m_segments[i]; + + // Precalc if the agent is really close to the segment. + const float r = 0.01f; + float t; + seg->touch = dtDistancePtSegSqr2D(pos, seg->p, seg->q, t) < dtSqr(r); + } +} + +float dtObstacleAvoidanceQuery::processSample(const float* vcand, const float cs, + const float* pos, const float rad, + const float vmax, const float* vel, const float* dvel, + dtObstacleAvoidanceDebugData* debug) +{ + // Find min time of impact and exit amongst all obstacles. + float tmin = m_horizTime; + float side = 0; + int nside = 0; + + for (int i = 0; i < m_ncircles; ++i) + { + const dtObstacleCircle* cir = &m_circles[i]; + + // RVO + float vab[3]; + dtVscale(vab, vcand, 2); + dtVsub(vab, vab, vel); + dtVsub(vab, vab, cir->vel); + + // Side + side += dtClamp(dtMin(dtVdot2D(cir->dp,vab)*0.5f+0.5f, dtVdot2D(cir->np,vab)*2), 0.0f, 1.0f); + nside++; + + float htmin = 0, htmax = 0; + if (!sweepCircleCircle(pos,rad, vab, cir->p,cir->rad, htmin, htmax)) + continue; + + // Handle overlapping obstacles. + if (htmin < 0.0f && htmax > 0.0f) + { + // Avoid more when overlapped. + htmin = -htmin * 0.5f; + } + + if (htmin >= 0.0f) + { + // The closest obstacle is somewhere ahead of us, keep track of nearest obstacle. + if (htmin < tmin) + tmin = htmin; + } + } + + for (int i = 0; i < m_nsegments; ++i) + { + const dtObstacleSegment* seg = &m_segments[i]; + float htmin = 0; + + if (seg->touch) + { + // Special case when the agent is very close to the segment. + float sdir[3], snorm[3]; + dtVsub(sdir, seg->q, seg->p); + snorm[0] = -sdir[2]; + snorm[2] = sdir[0]; + // If the velocity is pointing towards the segment, no collision. + if (dtVdot2D(snorm, vcand) < 0.0f) + continue; + // Else immediate collision. + htmin = 0.0f; + } + else + { + if (!isectRaySeg(pos, vcand, seg->p, seg->q, htmin)) + continue; + } + + // Avoid less when facing walls. + htmin *= 2.0f; + + // The closest obstacle is somewhere ahead of us, keep track of nearest obstacle. + if (htmin < tmin) + tmin = htmin; + } + + // Normalize side bias, to prevent it dominating too much. + if (nside) + side /= nside; + + const float ivmax = 1.0f / vmax; + const float vpen = m_weightDesVel * (dtVdist2D(vcand, dvel) * ivmax); + const float vcpen = m_weightCurVel * (dtVdist2D(vcand, vel) * ivmax); + const float spen = m_weightSide * side; + const float tpen = m_weightToi * (1.0f/(0.1f+tmin / m_horizTime)); + + const float penalty = vpen + vcpen + spen + tpen; + + // Store different penalties for debug viewing + if (debug) + debug->addSample(vcand, cs, penalty, vpen, vcpen, spen, tpen); + + return penalty; +} + +void dtObstacleAvoidanceQuery::sampleVelocityGrid(const float* pos, const float rad, const float vmax, + const float* vel, const float* dvel, + float* nvel, const int gsize, + dtObstacleAvoidanceDebugData* debug) +{ + prepare(pos, dvel); + + dtVset(nvel, 0,0,0); + + if (debug) + debug->reset(); + + const float cvx = dvel[0] * m_velBias; + const float cvz = dvel[2] * m_velBias; + const float cs = vmax * 2 * (1 - m_velBias) / (float)(gsize-1); + const float half = (gsize-1)*cs*0.5f; + + float minPenalty = FLT_MAX; + + for (int y = 0; y < gsize; ++y) + { + for (int x = 0; x < gsize; ++x) + { + float vcand[3]; + vcand[0] = cvx + x*cs - half; + vcand[1] = 0; + vcand[2] = cvz + y*cs - half; + + if (dtSqr(vcand[0])+dtSqr(vcand[2]) > dtSqr(vmax+cs/2)) continue; + + const float penalty = processSample(vcand, cs, pos,rad,vmax,vel,dvel, debug); + if (penalty < minPenalty) + { + minPenalty = penalty; + dtVcopy(nvel, vcand); + } + } + } +} + + +static const float DT_PI = 3.14159265f; + +void dtObstacleAvoidanceQuery::sampleVelocityAdaptive(const float* pos, const float rad, const float vmax, + const float* vel, const float* dvel, float* nvel, + const int ndivs, const int nrings, const int depth, + dtObstacleAvoidanceDebugData* debug) +{ + prepare(pos, dvel); + + dtVset(nvel, 0,0,0); + + if (debug) + debug->reset(); + + // Build sampling pattern aligned to desired velocity. + static const int MAX_PATTERN_DIVS = 32; + static const int MAX_PATTERN_RINGS = 4; + float pat[(MAX_PATTERN_DIVS*MAX_PATTERN_RINGS+1)*2]; + int npat = 0; + + const int nd = dtClamp(ndivs, 1, MAX_PATTERN_DIVS); + const int nr = dtClamp(nrings, 1, MAX_PATTERN_RINGS); + const float da = (1.0f/nd) * DT_PI*2; + const float dang = atan2f(dvel[2], dvel[0]); + + // Always add sample at zero + pat[npat*2+0] = 0; + pat[npat*2+1] = 0; + npat++; + + for (int j = 0; j < nr; ++j) + { + const float rad = (float)(nr-j)/(float)nr; + float a = dang + (j&1)*0.5f*da; + for (int i = 0; i < nd; ++i) + { + pat[npat*2+0] = cosf(a)*rad; + pat[npat*2+1] = sinf(a)*rad; + npat++; + a += da; + } + } + + // Start sampling. + float cr = vmax * (1.0f-m_velBias); + float res[3]; + dtVset(res, dvel[0] * m_velBias, 0, dvel[2] * m_velBias); + + for (int k = 0; k < depth; ++k) + { + float minPenalty = FLT_MAX; + float bvel[3]; + dtVset(bvel, 0,0,0); + + for (int i = 0; i < npat; ++i) + { + float vcand[3]; + vcand[0] = res[0] + pat[i*2+0]*cr; + vcand[1] = 0; + vcand[2] = res[2] + pat[i*2+1]*cr; + + if (dtSqr(vcand[0])+dtSqr(vcand[2]) > dtSqr(vmax+0.001f)) continue; + + const float penalty = processSample(vcand,cr/10, pos,rad,vmax,vel,dvel, debug); + if (penalty < minPenalty) + { + minPenalty = penalty; + dtVcopy(bvel, vcand); + } + } + + dtVcopy(res, bvel); + + cr *= 0.5f; + } + + dtVcopy(nvel, res); +} + diff --git a/dep/recastnavigation/Detour/DetourObstacleAvoidance.h b/dep/recastnavigation/Detour/DetourObstacleAvoidance.h new file mode 100644 index 00000000000..4a7187a7998 --- /dev/null +++ b/dep/recastnavigation/Detour/DetourObstacleAvoidance.h @@ -0,0 +1,148 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef DETOUROBSTACLEAVOIDANCE_H +#define DETOUROBSTACLEAVOIDANCE_H + +struct dtObstacleCircle +{ + float p[3]; // Position of the obstacle + float vel[3]; // Velocity of the obstacle + float dvel[3]; // Velocity of the obstacle + float rad; // Radius of the obstacle + float dp[3], np[3]; // Use for side selection during sampling. +}; + +struct dtObstacleSegment +{ + float p[3], q[3]; // End points of the obstacle segment + bool touch; +}; + +static const int RVO_SAMPLE_RAD = 15; +static const int MAX_RVO_SAMPLES = (RVO_SAMPLE_RAD*2+1)*(RVO_SAMPLE_RAD*2+1) + 100; + +class dtObstacleAvoidanceDebugData +{ +public: + dtObstacleAvoidanceDebugData(); + ~dtObstacleAvoidanceDebugData(); + + bool init(const int maxSamples); + void reset(); + void addSample(const float* vel, const float ssize, const float pen, + const float vpen, const float vcpen, const float spen, const float tpen); + + void normalizeSamples(); + + inline int getSampleCount() const { return m_nsamples; } + inline const float* getSampleVelocity(const int i) const { return &m_vel[i*3]; } + inline float getSampleSize(const int i) const { return m_ssize[i]; } + inline float getSamplePenalty(const int i) const { return m_pen[i]; } + inline float getSampleDesiredVelocityPenalty(const int i) const { return m_vpen[i]; } + inline float getSampleCurrentVelocityPenalty(const int i) const { return m_vcpen[i]; } + inline float getSamplePreferredSidePenalty(const int i) const { return m_spen[i]; } + inline float getSampleCollisionTimePenalty(const int i) const { return m_tpen[i]; } + +private: + int m_nsamples; + int m_maxSamples; + float* m_vel; + float* m_ssize; + float* m_pen; + float* m_vpen; + float* m_vcpen; + float* m_spen; + float* m_tpen; +}; + +dtObstacleAvoidanceDebugData* dtAllocObstacleAvoidanceDebugData(); +void dtFreeObstacleAvoidanceDebugData(dtObstacleAvoidanceDebugData* ptr); + + +class dtObstacleAvoidanceQuery +{ +public: + dtObstacleAvoidanceQuery(); + ~dtObstacleAvoidanceQuery(); + + bool init(const int maxCircles, const int maxSegments); + + void reset(); + + void addCircle(const float* pos, const float rad, + const float* vel, const float* dvel); + + void addSegment(const float* p, const float* q); + + inline void setVelocitySelectionBias(float v) { m_velBias = v; } + inline void setDesiredVelocityWeight(float w) { m_weightDesVel = w; } + inline void setCurrentVelocityWeight(float w) { m_weightCurVel = w; } + inline void setPreferredSideWeight(float w) { m_weightSide = w; } + inline void setCollisionTimeWeight(float w) { m_weightToi = w; } + inline void setTimeHorizon(float t) { m_horizTime = t; } + + void sampleVelocityGrid(const float* pos, const float rad, const float vmax, + const float* vel, const float* dvel, float* nvel, + const int gsize, + dtObstacleAvoidanceDebugData* debug = 0); + + void sampleVelocityAdaptive(const float* pos, const float rad, const float vmax, + const float* vel, const float* dvel, float* nvel, + const int ndivs, const int nrings, const int depth, + dtObstacleAvoidanceDebugData* debug = 0); + + inline int getObstacleCircleCount() const { return m_ncircles; } + const dtObstacleCircle* getObstacleCircle(const int i) { return &m_circles[i]; } + + inline int getObstacleSegmentCount() const { return m_nsegments; } + const dtObstacleSegment* getObstacleSegment(const int i) { return &m_segments[i]; } + +private: + + void prepare(const float* pos, const float* dvel); + + float processSample(const float* vcand, const float cs, + const float* pos, const float rad, + const float vmax, const float* vel, const float* dvel, + dtObstacleAvoidanceDebugData* debug); + + dtObstacleCircle* insertCircle(const float dist); + dtObstacleSegment* insertSegment(const float dist); + + float m_velBias; + float m_weightDesVel; + float m_weightCurVel; + float m_weightSide; + float m_weightToi; + float m_horizTime; + + int m_maxCircles; + dtObstacleCircle* m_circles; + int m_ncircles; + + int m_maxSegments; + dtObstacleSegment* m_segments; + int m_nsegments; +}; + +dtObstacleAvoidanceQuery* dtAllocObstacleAvoidanceQuery(); +void dtFreeObstacleAvoidanceQuery(dtObstacleAvoidanceQuery* ptr); + + +#endif // DETOUROBSTACLEAVOIDANCE_H \ No newline at end of file diff --git a/dep/recastnavigation/License.txt b/dep/recastnavigation/License.txt new file mode 100644 index 00000000000..95f4bfc9654 --- /dev/null +++ b/dep/recastnavigation/License.txt @@ -0,0 +1,18 @@ +Copyright (c) 2009 Mikko Mononen memon@inside.org + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software +in a product, an acknowledgment in the product documentation would be +appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + diff --git a/dep/recastnavigation/Readme.txt b/dep/recastnavigation/Readme.txt new file mode 100644 index 00000000000..0c2f7b1675f --- /dev/null +++ b/dep/recastnavigation/Readme.txt @@ -0,0 +1,120 @@ + +Recast & Detour Version 1.4 + + +Recast + +Recast is state of the art navigation mesh construction toolset for games. + + * It is automatic, which means that you can throw any level geometry + at it and you will get robust mesh out + * It is fast which means swift turnaround times for level designers + * It is open source so it comes with full source and you can + customize it to your hearts content. + +The Recast process starts with constructing a voxel mold from a level geometry +and then casting a navigation mesh over it. The process consists of three steps, +building the voxel mold, partitioning the mold into simple regions, peeling off +the regions as simple polygons. + + 1. The voxel mold is build from the input triangle mesh by rasterizing + the triangles into a multi-layer heightfield. Some simple filters are + then applied to the mold to prune out locations where the character + would not be able to move. + 2. The walkable areas described by the mold are divided into simple + overlayed 2D regions. The resulting regions have only one non-overlapping + contour, which simplifies the final step of the process tremendously. + 3. The navigation polygons are peeled off from the regions by first tracing + the boundaries and then simplifying them. The resulting polygons are + finally converted to convex polygons which makes them perfect for + pathfinding and spatial reasoning about the level. + +The toolset code is located in the Recast folder and demo application using the Recast +toolset is located in the RecastDemo folder. + +The project files with this distribution can be compiled with Microsoft Visual C++ 2008 +(you can download it for free) and XCode 3.1. + + +Detour + +Recast is accompanied with Detour, path-finding and spatial reasoning toolkit. You can use any navigation mesh with Detour, but of course the data generated with Recast fits perfectly. + +Detour offers simple static navigation mesh which is suitable for many simple cases, as well as tiled navigation mesh which allows you to plug in and out pieces of the mesh. The tiled mesh allows to create systems where you stream new navigation data in and out as the player progresses the level, or you may regenerate tiles as the world changes. + + +Latest code available at http://code.google.com/p/recastnavigation/ + + +-- + +Release Notes + +---------------- +* Recast 1.4 + Released August 24th, 2009 + +- Added detail height mesh generation (RecastDetailMesh.cpp) for single, + tiled statmeshes as well as tilemesh. +- Added feature to contour tracing which detects extra vertices along + tile edges which should be removed later. +- Changed the tiled stat mesh preprocess, so that it first generated + polymeshes per tile and finally combines them. +- Fixed bug in the GUI code where invisible buttons could be pressed. + +---------------- +* Recast 1.31 + Released July 24th, 2009 + +- Better cost and heuristic functions. +- Fixed tile navmesh raycast on tile borders. + +---------------- +* Recast 1.3 + Released July 14th, 2009 + +- Added dtTileNavMesh which allows to dynamically add and remove navmesh pieces at runtime. +- Renamed stat navmesh types to dtStat* (i.e. dtPoly is now dtStatPoly). +- Moved common code used by tile and stat navmesh to DetourNode.h/cpp and DetourCommon.h/cpp. +- Refactores the demo code. + +---------------- +* Recast 1.2 + Released June 17th, 2009 + +- Added tiled mesh generation. The tiled generation allows to generate navigation for + much larger worlds, it removes some of the artifacts that comes from distance fields + in open areas, and allows later streaming and dynamic runtime generation +- Improved and added some debug draw modes +- API change: The helper function rcBuildNavMesh does not exists anymore, + had to change few internal things to cope with the tiled processing, + similar API functionality will be added later once the tiled process matures +- The demo is getting way too complicated, need to split demos +- Fixed several filtering functions so that the mesh is tighter to the geometry, + sometimes there could be up error up to tow voxel units close to walls, + now it should be just one. + +---------------- +* Recast 1.1 + Released April 11th, 2009 + +This is the first release of Detour. + +---------------- +* Recast 1.0 + Released March 29th, 2009 + +This is the first release of Recast. + +The process is not always as robust as I would wish. The watershed phase sometimes swallows tiny islands +which are close to edges. These droppings are handled in rcBuildContours, but the code is not +particularly robust either. + +Another non-robust case is when portal contours (contours shared between two regions) are always +assumed to be straight. That can lead to overlapping contours specially when the level has +large open areas. + + + +Mikko Mononen +memon@inside.org diff --git a/dep/recastnavigation/Recast/CMakeLists.txt b/dep/recastnavigation/Recast/CMakeLists.txt new file mode 100644 index 00000000000..7ced79c10b7 --- /dev/null +++ b/dep/recastnavigation/Recast/CMakeLists.txt @@ -0,0 +1,31 @@ +# Copyright (C) 2008-2010 Trinity +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +set(Recast_STAT_SRCS + Recast.cpp + RecastAlloc.cpp + RecastArea.cpp + RecastContour.cpp + RecastFilter.cpp + RecastMesh.cpp + RecastMeshDetail.cpp + RecastRasterization.cpp + RecastRegion.cpp +) + +if(WIN32) + include_directories( + ${CMAKE_SOURCE_DIR}/dep/zlib + ) +endif() + +add_library(Recast STATIC ${Recast_STAT_SRCS}) + +target_link_libraries(Recast ${ZLIB_LIBRARIES}) \ No newline at end of file diff --git a/dep/recastnavigation/Recast/Recast.cpp b/dep/recastnavigation/Recast/Recast.cpp new file mode 100644 index 00000000000..d051418e810 --- /dev/null +++ b/dep/recastnavigation/Recast/Recast.cpp @@ -0,0 +1,423 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#include +#define _USE_MATH_DEFINES +#include +#include +#include +#include +#include +#include "Recast.h" +#include "RecastAlloc.h" +#include "RecastAssert.h" + +float rcSqrt(float x) +{ + return sqrtf(x); +} + + +void rcContext::log(const rcLogCategory category, const char* format, ...) +{ + if (!m_logEnabled) + return; + static const int MSG_SIZE = 512; + char msg[MSG_SIZE]; + va_list ap; + va_start(ap, format); + int len = vsnprintf(msg, MSG_SIZE, format, ap); + if (len >= MSG_SIZE) + { + len = MSG_SIZE-1; + msg[MSG_SIZE-1] = '\0'; + } + va_end(ap); + doLog(category, msg, len); +} + +rcHeightfield* rcAllocHeightfield() +{ + rcHeightfield* hf = (rcHeightfield*)rcAlloc(sizeof(rcHeightfield), RC_ALLOC_PERM); + memset(hf, 0, sizeof(rcHeightfield)); + return hf; +} + +void rcFreeHeightField(rcHeightfield* hf) +{ + if (!hf) return; + // Delete span array. + rcFree(hf->spans); + // Delete span pools. + while (hf->pools) + { + rcSpanPool* next = hf->pools->next; + rcFree(hf->pools); + hf->pools = next; + } + rcFree(hf); +} + +rcCompactHeightfield* rcAllocCompactHeightfield() +{ + rcCompactHeightfield* chf = (rcCompactHeightfield*)rcAlloc(sizeof(rcCompactHeightfield), RC_ALLOC_PERM); + memset(chf, 0, sizeof(rcCompactHeightfield)); + return chf; +} + +void rcFreeCompactHeightfield(rcCompactHeightfield* chf) +{ + if (!chf) return; + rcFree(chf->cells); + rcFree(chf->spans); + rcFree(chf->dist); + rcFree(chf->areas); + rcFree(chf); +} + +rcContourSet* rcAllocContourSet() +{ + rcContourSet* cset = (rcContourSet*)rcAlloc(sizeof(rcContourSet), RC_ALLOC_PERM); + memset(cset, 0, sizeof(rcContourSet)); + return cset; +} + +void rcFreeContourSet(rcContourSet* cset) +{ + if (!cset) return; + for (int i = 0; i < cset->nconts; ++i) + { + rcFree(cset->conts[i].verts); + rcFree(cset->conts[i].rverts); + } + rcFree(cset->conts); + rcFree(cset); +} + +rcPolyMesh* rcAllocPolyMesh() +{ + rcPolyMesh* pmesh = (rcPolyMesh*)rcAlloc(sizeof(rcPolyMesh), RC_ALLOC_PERM); + memset(pmesh, 0, sizeof(rcPolyMesh)); + return pmesh; +} + +void rcFreePolyMesh(rcPolyMesh* pmesh) +{ + if (!pmesh) return; + rcFree(pmesh->verts); + rcFree(pmesh->polys); + rcFree(pmesh->regs); + rcFree(pmesh->flags); + rcFree(pmesh->areas); + rcFree(pmesh); +} + +rcPolyMeshDetail* rcAllocPolyMeshDetail() +{ + rcPolyMeshDetail* dmesh = (rcPolyMeshDetail*)rcAlloc(sizeof(rcPolyMeshDetail), RC_ALLOC_PERM); + memset(dmesh, 0, sizeof(rcPolyMeshDetail)); + return dmesh; +} + +void rcFreePolyMeshDetail(rcPolyMeshDetail* dmesh) +{ + if (!dmesh) return; + rcFree(dmesh->meshes); + rcFree(dmesh->verts); + rcFree(dmesh->tris); + rcFree(dmesh); +} + + +void rcCalcBounds(const float* verts, int nv, float* bmin, float* bmax) +{ + // Calculate bounding box. + rcVcopy(bmin, verts); + rcVcopy(bmax, verts); + for (int i = 1; i < nv; ++i) + { + const float* v = &verts[i*3]; + rcVmin(bmin, v); + rcVmax(bmax, v); + } +} + +void rcCalcGridSize(const float* bmin, const float* bmax, float cs, int* w, int* h) +{ + *w = (int)((bmax[0] - bmin[0])/cs+0.5f); + *h = (int)((bmax[2] - bmin[2])/cs+0.5f); +} + +bool rcCreateHeightfield(rcContext* /*ctx*/, rcHeightfield& hf, int width, int height, + const float* bmin, const float* bmax, + float cs, float ch) +{ + // TODO: VC complains about unref formal variable, figure out a way to handle this better. +// rcAssert(ctx); + + hf.width = width; + hf.height = height; + rcVcopy(hf.bmin, bmin); + rcVcopy(hf.bmax, bmax); + hf.cs = cs; + hf.ch = ch; + hf.spans = (rcSpan**)rcAlloc(sizeof(rcSpan*)*hf.width*hf.height, RC_ALLOC_PERM); + if (!hf.spans) + return false; + memset(hf.spans, 0, sizeof(rcSpan*)*hf.width*hf.height); + return true; +} + +static void calcTriNormal(const float* v0, const float* v1, const float* v2, float* norm) +{ + float e0[3], e1[3]; + rcVsub(e0, v1, v0); + rcVsub(e1, v2, v0); + rcVcross(norm, e0, e1); + rcVnormalize(norm); +} + +void rcMarkWalkableTriangles(rcContext* /*ctx*/, const float walkableSlopeAngle, + const float* verts, int /*nv*/, + const int* tris, int nt, + unsigned char* areas) +{ + // TODO: VC complains about unref formal variable, figure out a way to handle this better. +// rcAssert(ctx); + + const float walkableThr = cosf(walkableSlopeAngle/180.0f*RC_PI); + + float norm[3]; + + for (int i = 0; i < nt; ++i) + { + const int* tri = &tris[i*3]; + calcTriNormal(&verts[tri[0]*3], &verts[tri[1]*3], &verts[tri[2]*3], norm); + // Check if the face is walkable. + if (norm[1] > walkableThr) + areas[i] = RC_WALKABLE_AREA; + } +} + +void rcClearUnwalkableTriangles(rcContext* /*ctx*/, const float walkableSlopeAngle, + const float* verts, int /*nv*/, + const int* tris, int nt, + unsigned char* areas) +{ + // TODO: VC complains about unref formal variable, figure out a way to handle this better. +// rcAssert(ctx); + + const float walkableThr = cosf(walkableSlopeAngle/180.0f*RC_PI); + + float norm[3]; + + for (int i = 0; i < nt; ++i) + { + const int* tri = &tris[i*3]; + calcTriNormal(&verts[tri[0]*3], &verts[tri[1]*3], &verts[tri[2]*3], norm); + // Check if the face is walkable. + if (norm[1] <= walkableThr) + areas[i] = RC_NULL_AREA; + } +} + +int rcGetHeightFieldSpanCount(rcContext* /*ctx*/, rcHeightfield& hf) +{ + // TODO: VC complains about unref formal variable, figure out a way to handle this better. +// rcAssert(ctx); + + const int w = hf.width; + const int h = hf.height; + int spanCount = 0; + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + for (rcSpan* s = hf.spans[x + y*w]; s; s = s->next) + { + if (s->area != RC_NULL_AREA) + spanCount++; + } + } + } + return spanCount; +} + +bool rcBuildCompactHeightfield(rcContext* ctx, const int walkableHeight, const int walkableClimb, + rcHeightfield& hf, rcCompactHeightfield& chf) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_BUILD_COMPACTHEIGHTFIELD); + + const int w = hf.width; + const int h = hf.height; + const int spanCount = rcGetHeightFieldSpanCount(ctx, hf); + + // Fill in header. + chf.width = w; + chf.height = h; + chf.spanCount = spanCount; + chf.walkableHeight = walkableHeight; + chf.walkableClimb = walkableClimb; + chf.maxRegions = 0; + rcVcopy(chf.bmin, hf.bmin); + rcVcopy(chf.bmax, hf.bmax); + chf.bmax[1] += walkableHeight*hf.ch; + chf.cs = hf.cs; + chf.ch = hf.ch; + chf.cells = (rcCompactCell*)rcAlloc(sizeof(rcCompactCell)*w*h, RC_ALLOC_PERM); + if (!chf.cells) + { + ctx->log(RC_LOG_ERROR, "rcBuildCompactHeightfield: Out of memory 'chf.cells' (%d)", w*h); + return false; + } + memset(chf.cells, 0, sizeof(rcCompactCell)*w*h); + chf.spans = (rcCompactSpan*)rcAlloc(sizeof(rcCompactSpan)*spanCount, RC_ALLOC_PERM); + if (!chf.spans) + { + ctx->log(RC_LOG_ERROR, "rcBuildCompactHeightfield: Out of memory 'chf.spans' (%d)", spanCount); + return false; + } + memset(chf.spans, 0, sizeof(rcCompactSpan)*spanCount); + chf.areas = (unsigned char*)rcAlloc(sizeof(unsigned char)*spanCount, RC_ALLOC_PERM); + if (!chf.areas) + { + ctx->log(RC_LOG_ERROR, "rcBuildCompactHeightfield: Out of memory 'chf.areas' (%d)", spanCount); + return false; + } + memset(chf.areas, RC_NULL_AREA, sizeof(unsigned char)*spanCount); + + const int MAX_HEIGHT = 0xffff; + + // Fill in cells and spans. + int idx = 0; + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const rcSpan* s = hf.spans[x + y*w]; + // If there are no spans at this cell, just leave the data to index=0, count=0. + if (!s) continue; + rcCompactCell& c = chf.cells[x+y*w]; + c.index = idx; + c.count = 0; + while (s) + { + if (s->area != RC_NULL_AREA) + { + const int bot = (int)s->smax; + const int top = s->next ? (int)s->next->smin : MAX_HEIGHT; + chf.spans[idx].y = (unsigned short)rcClamp(bot, 0, 0xffff); + chf.spans[idx].h = (unsigned char)rcClamp(top - bot, 0, 0xff); + chf.areas[idx] = s->area; + idx++; + c.count++; + } + s = s->next; + } + } + } + + // Find neighbour connections. + const int MAX_LAYERS = RC_NOT_CONNECTED-1; + int tooHighNeighbour = 0; + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + rcCompactSpan& s = chf.spans[i]; + + for (int dir = 0; dir < 4; ++dir) + { + rcSetCon(s, dir, RC_NOT_CONNECTED); + const int nx = x + rcGetDirOffsetX(dir); + const int ny = y + rcGetDirOffsetY(dir); + // First check that the neighbour cell is in bounds. + if (nx < 0 || ny < 0 || nx >= w || ny >= h) + continue; + + // Iterate over all neighbour spans and check if any of the is + // accessible from current cell. + const rcCompactCell& nc = chf.cells[nx+ny*w]; + for (int k = (int)nc.index, nk = (int)(nc.index+nc.count); k < nk; ++k) + { + const rcCompactSpan& ns = chf.spans[k]; + const int bot = rcMax(s.y, ns.y); + const int top = rcMin(s.y+s.h, ns.y+ns.h); + + // Check that the gap between the spans is walkable, + // and that the climb height between the gaps is not too high. + if ((top - bot) >= walkableHeight && rcAbs((int)ns.y - (int)s.y) <= walkableClimb) + { + // Mark direction as walkable. + const int idx = k - (int)nc.index; + if (idx < 0 || idx > MAX_LAYERS) + { + tooHighNeighbour = rcMax(tooHighNeighbour, idx); + continue; + } + rcSetCon(s, dir, idx); + break; + } + } + + } + } + } + } + + if (tooHighNeighbour > MAX_LAYERS) + { + ctx->log(RC_LOG_ERROR, "rcBuildCompactHeightfield: Heightfield has too many layers %d (max: %d)", + tooHighNeighbour, MAX_LAYERS); + } + + ctx->stopTimer(RC_TIMER_BUILD_COMPACTHEIGHTFIELD); + + return true; +} + +/* +static int getHeightfieldMemoryUsage(const rcHeightfield& hf) +{ + int size = 0; + size += sizeof(hf); + size += hf.width * hf.height * sizeof(rcSpan*); + + rcSpanPool* pool = hf.pools; + while (pool) + { + size += (sizeof(rcSpanPool) - sizeof(rcSpan)) + sizeof(rcSpan)*RC_SPANS_PER_POOL; + pool = pool->next; + } + return size; +} + +static int getCompactHeightFieldMemoryusage(const rcCompactHeightfield& chf) +{ + int size = 0; + size += sizeof(rcCompactHeightfield); + size += sizeof(rcCompactSpan) * chf.spanCount; + size += sizeof(rcCompactCell) * chf.width * chf.height; + return size; +} +*/ \ No newline at end of file diff --git a/dep/recastnavigation/Recast/Recast.h b/dep/recastnavigation/Recast/Recast.h new file mode 100644 index 00000000000..0e5f0742486 --- /dev/null +++ b/dep/recastnavigation/Recast/Recast.h @@ -0,0 +1,688 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef RECAST_H +#define RECAST_H + +// Some math headers don't have PI defined. +static const float RC_PI = 3.14159265f; + +enum rcLogCategory +{ + RC_LOG_PROGRESS = 1, + RC_LOG_WARNING, + RC_LOG_ERROR, +}; + +enum rcTimerLabel +{ + RC_TIMER_TOTAL, + RC_TIMER_TEMP, + RC_TIMER_RASTERIZE_TRIANGLES, + RC_TIMER_BUILD_COMPACTHEIGHTFIELD, + RC_TIMER_BUILD_CONTOURS, + RC_TIMER_BUILD_CONTOURS_TRACE, + RC_TIMER_BUILD_CONTOURS_SIMPLIFY, + RC_TIMER_FILTER_BORDER, + RC_TIMER_FILTER_WALKABLE, + RC_TIMER_MEDIAN_AREA, + RC_TIMER_FILTER_LOW_OBSTACLES, + RC_TIMER_BUILD_POLYMESH, + RC_TIMER_MERGE_POLYMESH, + RC_TIMER_ERODE_AREA, + RC_TIMER_MARK_BOX_AREA, + RC_TIMER_MARK_CONVEXPOLY_AREA, + RC_TIMER_BUILD_DISTANCEFIELD, + RC_TIMER_BUILD_DISTANCEFIELD_DIST, + RC_TIMER_BUILD_DISTANCEFIELD_BLUR, + RC_TIMER_BUILD_REGIONS, + RC_TIMER_BUILD_REGIONS_WATERSHED, + RC_TIMER_BUILD_REGIONS_EXPAND, + RC_TIMER_BUILD_REGIONS_FLOOD, + RC_TIMER_BUILD_REGIONS_FILTER, + RC_TIMER_BUILD_POLYMESHDETAIL, + RC_TIMER_MERGE_POLYMESHDETAIL, + RC_MAX_TIMERS +}; + +// Build context provides several optional utilities needed for the build process, +// such as timing, logging, and build time collecting. +class rcContext +{ +public: + inline rcContext(bool state = true) : m_logEnabled(state), m_timerEnabled(state) {} + virtual ~rcContext() {} + + // Enables or disables logging. + inline void enableLog(bool state) { m_logEnabled = state; } + // Resets log. + inline void resetLog() { if (m_logEnabled) doResetLog(); } + // Logs a message. + void log(const rcLogCategory category, const char* format, ...); + + // Enables or disables timer. + inline void enableTimer(bool state) { m_timerEnabled = state; } + // Resets all timers. + inline void resetTimers() { if (m_timerEnabled) doResetTimers(); } + // Starts timer, used for performance timing. + inline void startTimer(const rcTimerLabel label) { if (m_timerEnabled) doStartTimer(label); } + // Stops timer, used for performance timing. + inline void stopTimer(const rcTimerLabel label) { if (m_timerEnabled) doStopTimer(label); } + // Returns time accumulated between timer start/stop. + inline int getAccumulatedTime(const rcTimerLabel label) const { return m_timerEnabled ? doGetAccumulatedTime(label) : -1; } + +protected: + // Virtual functions to override for custom implementations. + virtual void doResetLog() {} + virtual void doLog(const rcLogCategory /*category*/, const char* /*msg*/, const int /*len*/) {} + virtual void doResetTimers() {} + virtual void doStartTimer(const rcTimerLabel /*label*/) {} + virtual void doStopTimer(const rcTimerLabel /*label*/) {} + virtual int doGetAccumulatedTime(const rcTimerLabel /*label*/) const { return -1; } + + bool m_logEnabled; + bool m_timerEnabled; +}; + + +// The units of the parameters are specified in parenthesis as follows: +// (vx) voxels, (wu) world units +struct rcConfig +{ + int width, height; // Dimensions of the rasterized heightfield (vx) + int tileSize; // Width and Height of a tile (vx) + int borderSize; // Non-navigable Border around the heightfield (vx) + float cs, ch; // Grid cell size and height (wu) + float bmin[3], bmax[3]; // Grid bounds (wu) + float walkableSlopeAngle; // Maximum walkable slope angle in degrees. + int walkableHeight; // Minimum height where the agent can still walk (vx) + int walkableClimb; // Maximum height between grid cells the agent can climb (vx) + int walkableRadius; // Radius of the agent in cells (vx) + int maxEdgeLen; // Maximum contour edge length (vx) + float maxSimplificationError; // Maximum distance error from contour to cells (vx) + int minRegionArea; // Regions whose area is smaller than this threshold will be removed. (vx) + int mergeRegionArea; // Regions whose area is smaller than this threshold will be merged (vx) + int maxVertsPerPoly; // Max number of vertices per polygon + float detailSampleDist; // Detail mesh sample spacing. + float detailSampleMaxError; // Detail mesh simplification max sample error. +}; + +// Define number of bits in the above structure for smin/smax. +// The max height is used for clamping rasterized values. +static const int RC_SPAN_HEIGHT_BITS = 16; +static const int RC_SPAN_MAX_HEIGHT = (1<> shift) & 0x3f; +} + +inline int rcGetDirOffsetX(int dir) +{ + const int offset[4] = { -1, 0, 1, 0, }; + return offset[dir&0x03]; +} + +inline int rcGetDirOffsetY(int dir) +{ + const int offset[4] = { 0, 1, 0, -1 }; + return offset[dir&0x03]; +} + +// Common helper functions +template inline void rcSwap(T& a, T& b) { T t = a; a = b; b = t; } +template inline T rcMin(T a, T b) { return a < b ? a : b; } +template inline T rcMax(T a, T b) { return a > b ? a : b; } +template inline T rcAbs(T a) { return a < 0 ? -a : a; } +template inline T rcSqr(T a) { return a*a; } +template inline T rcClamp(T v, T mn, T mx) { return v < mn ? mn : (v > mx ? mx : v); } +float rcSqrt(float x); + +// Common vector helper functions. +inline void rcVcross(float* dest, const float* v1, const float* v2) +{ + dest[0] = v1[1]*v2[2] - v1[2]*v2[1]; + dest[1] = v1[2]*v2[0] - v1[0]*v2[2]; + dest[2] = v1[0]*v2[1] - v1[1]*v2[0]; +} + +inline float rcVdot(const float* v1, const float* v2) +{ + return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]; +} + +inline void rcVmad(float* dest, const float* v1, const float* v2, const float s) +{ + dest[0] = v1[0]+v2[0]*s; + dest[1] = v1[1]+v2[1]*s; + dest[2] = v1[2]+v2[2]*s; +} + +inline void rcVadd(float* dest, const float* v1, const float* v2) +{ + dest[0] = v1[0]+v2[0]; + dest[1] = v1[1]+v2[1]; + dest[2] = v1[2]+v2[2]; +} + +inline void rcVsub(float* dest, const float* v1, const float* v2) +{ + dest[0] = v1[0]-v2[0]; + dest[1] = v1[1]-v2[1]; + dest[2] = v1[2]-v2[2]; +} + +inline void rcVmin(float* mn, const float* v) +{ + mn[0] = rcMin(mn[0], v[0]); + mn[1] = rcMin(mn[1], v[1]); + mn[2] = rcMin(mn[2], v[2]); +} + +inline void rcVmax(float* mx, const float* v) +{ + mx[0] = rcMax(mx[0], v[0]); + mx[1] = rcMax(mx[1], v[1]); + mx[2] = rcMax(mx[2], v[2]); +} + +inline void rcVcopy(float* dest, const float* v) +{ + dest[0] = v[0]; + dest[1] = v[1]; + dest[2] = v[2]; +} + +inline float rcVdist(const float* v1, const float* v2) +{ + float dx = v2[0] - v1[0]; + float dy = v2[1] - v1[1]; + float dz = v2[2] - v1[2]; + return rcSqrt(dx*dx + dy*dy + dz*dz); +} + +inline float rcVdistSqr(const float* v1, const float* v2) +{ + float dx = v2[0] - v1[0]; + float dy = v2[1] - v1[1]; + float dz = v2[2] - v1[2]; + return dx*dx + dy*dy + dz*dz; +} + +inline void rcVnormalize(float* v) +{ + float d = 1.0f / rcSqrt(rcSqr(v[0]) + rcSqr(v[1]) + rcSqr(v[2])); + v[0] *= d; + v[1] *= d; + v[2] *= d; +} + +inline bool rcVequal(const float* p0, const float* p1) +{ + static const float thr = rcSqr(1.0f/16384.0f); + const float d = rcVdistSqr(p0, p1); + return d < thr; +} + +// Calculated bounding box of array of vertices. +// Params: +// verts - (in) array of vertices +// nv - (in) vertex count +// bmin, bmax - (out) bounding box +void rcCalcBounds(const float* verts, int nv, float* bmin, float* bmax); + +// Calculates grid size based on bounding box and grid cell size. +// Params: +// bmin, bmax - (in) bounding box +// cs - (in) grid cell size +// w - (out) grid width +// h - (out) grid height +void rcCalcGridSize(const float* bmin, const float* bmax, float cs, int* w, int* h); + +// Creates and initializes new heightfield. +// Params: +// hf - (in/out) heightfield to initialize. +// width - (in) width of the heightfield. +// height - (in) height of the heightfield. +// bmin, bmax - (in) bounding box of the heightfield +// cs - (in) grid cell size +// ch - (in) grid cell height +bool rcCreateHeightfield(rcContext* ctx, rcHeightfield& hf, int width, int height, + const float* bmin, const float* bmax, + float cs, float ch); + +// Sets the RC_WALKABLE_AREA for every triangle whose slope is below +// the maximum walkable slope angle. +// Params: +// walkableSlopeAngle - (in) maximum slope angle in degrees. +// verts - (in) array of vertices +// nv - (in) vertex count +// tris - (in) array of triangle vertex indices +// nt - (in) triangle count +// areas - (out) array of triangle area types +void rcMarkWalkableTriangles(rcContext* ctx, const float walkableSlopeAngle, const float* verts, int nv, + const int* tris, int nt, unsigned char* areas); + +// Sets the RC_NULL_AREA for every triangle whose slope is steeper than +// the maximum walkable slope angle. +// Params: +// walkableSlopeAngle - (in) maximum slope angle in degrees. +// verts - (in) array of vertices +// nv - (in) vertex count +// tris - (in) array of triangle vertex indices +// nt - (in) triangle count +// areas - (out) array of triangle are types +void rcClearUnwalkableTriangles(rcContext* ctx, const float walkableSlopeAngle, const float* verts, int nv, + const int* tris, int nt, unsigned char* areas); + +// Adds span to heightfield. +// The span addition can set to favor flags. If the span is merged to +// another span and the new smax is within 'flagMergeThr' units away +// from the existing span the span flags are merged and stored. +// Params: +// solid - (in) heightfield where the spans is added to +// x,y - (in) location on the heightfield where the span is added +// smin,smax - (in) spans min/max height +// flags - (in) span flags (zero or WALKABLE) +// flagMergeThr - (in) merge threshold. +void rcAddSpan(rcContext* ctx, rcHeightfield& solid, const int x, const int y, + const unsigned short smin, const unsigned short smax, + const unsigned short area, const int flagMergeThr); + +// Rasterizes a triangle into heightfield spans. +// Params: +// v0,v1,v2 - (in) the vertices of the triangle. +// area - (in) area type of the triangle. +// solid - (in) heightfield where the triangle is rasterized +// flagMergeThr - (in) distance in voxel where walkable flag is favored over non-walkable. +void rcRasterizeTriangle(rcContext* ctx, const float* v0, const float* v1, const float* v2, + const unsigned char area, rcHeightfield& solid, + const int flagMergeThr = 1); + +// Rasterizes indexed triangle mesh into heightfield spans. +// Params: +// verts - (in) array of vertices +// nv - (in) vertex count +// tris - (in) array of triangle vertex indices +// area - (in) array of triangle area types. +// nt - (in) triangle count +// solid - (in) heightfield where the triangles are rasterized +// flagMergeThr - (in) distance in voxel where walkable flag is favored over non-walkable. +void rcRasterizeTriangles(rcContext* ctx, const float* verts, const int nv, + const int* tris, const unsigned char* areas, const int nt, + rcHeightfield& solid, const int flagMergeThr = 1); + +// Rasterizes indexed triangle mesh into heightfield spans. +// Params: +// verts - (in) array of vertices +// nv - (in) vertex count +// tris - (in) array of triangle vertex indices +// area - (in) array of triangle area types. +// nt - (in) triangle count +// solid - (in) heightfield where the triangles are rasterized +// flagMergeThr - (in) distance in voxel where walkable flag is favored over non-walkable. +void rcRasterizeTriangles(rcContext* ctx, const float* verts, const int nv, + const unsigned short* tris, const unsigned char* areas, const int nt, + rcHeightfield& solid, const int flagMergeThr = 1); + +// Rasterizes the triangles into heightfield spans. +// Params: +// verts - (in) array of vertices +// area - (in) array of triangle area types. +// nt - (in) triangle count +// solid - (in) heightfield where the triangles are rasterized +void rcRasterizeTriangles(rcContext* ctx, const float* verts, const unsigned char* areas, const int nt, + rcHeightfield& solid, const int flagMergeThr = 1); + +// Marks non-walkable low obstacles as walkable if they are closer than walkableClimb +// from a walkable surface. Applying this filter allows to step over low hanging +// low obstacles. +// Params: +// walkableHeight - (in) minimum height where the agent can still walk +// solid - (in/out) heightfield describing the solid space +// TODO: Missuses ledge flag, must be called before rcFilterLedgeSpans! +void rcFilterLowHangingWalkableObstacles(rcContext* ctx, const int walkableClimb, rcHeightfield& solid); + +// Removes WALKABLE flag from all spans that are at ledges. This filtering +// removes possible overestimation of the conservative voxelization so that +// the resulting mesh will not have regions hanging in air over ledges. +// Params: +// walkableHeight - (in) minimum height where the agent can still walk +// walkableClimb - (in) maximum height between grid cells the agent can climb +// solid - (in/out) heightfield describing the solid space +void rcFilterLedgeSpans(rcContext* ctx, const int walkableHeight, + const int walkableClimb, rcHeightfield& solid); + +// Removes WALKABLE flag from all spans which have smaller than +// 'walkableHeight' clearance above them. +// Params: +// walkableHeight - (in) minimum height where the agent can still walk +// solid - (in/out) heightfield describing the solid space +void rcFilterWalkableLowHeightSpans(rcContext* ctx, int walkableHeight, rcHeightfield& solid); + +// Returns number of spans contained in a heightfield. +// Params: +// hf - (in) heightfield to be compacted +// Returns number of spans. +int rcGetHeightFieldSpanCount(rcContext* ctx, rcHeightfield& hf); + +// Builds compact representation of the heightfield. +// Params: +// walkableHeight - (in) minimum height where the agent can still walk +// walkableClimb - (in) maximum height between grid cells the agent can climb +// flags - (in) require flags for a cell to be included in the compact heightfield. +// hf - (in) heightfield to be compacted +// chf - (out) compact heightfield representing the open space. +// Returns false if operation ran out of memory. +bool rcBuildCompactHeightfield(rcContext* ctx, const int walkableHeight, const int walkableClimb, + rcHeightfield& hf, rcCompactHeightfield& chf); + +// Erodes walkable area. +// Params: +// radius - (in) radius of erosion (max 255). +// chf - (in/out) compact heightfield to erode. +// Returns false if operation ran out of memory. +bool rcErodeWalkableArea(rcContext* ctx, int radius, rcCompactHeightfield& chf); + +// Applies median filter to walkable area types, removing noise. +// Params: +// chf - (in/out) compact heightfield to erode. +// Returns false if operation ran out of memory. +bool rcMedianFilterWalkableArea(rcContext* ctx, rcCompactHeightfield& chf); + +// Marks the area of the convex polygon into the area type of the compact heightfield. +// Params: +// bmin/bmax - (in) bounds of the axis aligned box. +// areaId - (in) area ID to mark. +// chf - (in/out) compact heightfield to mark. +void rcMarkBoxArea(rcContext* ctx, const float* bmin, const float* bmax, unsigned char areaId, + rcCompactHeightfield& chf); + +// Marks the area of the convex polygon into the area type of the compact heightfield. +// Params: +// verts - (in) vertices of the convex polygon. +// nverts - (in) number of vertices in the polygon. +// hmin/hmax - (in) min and max height of the polygon. +// areaId - (in) area ID to mark. +// chf - (in/out) compact heightfield to mark. +void rcMarkConvexPolyArea(rcContext* ctx, const float* verts, const int nverts, + const float hmin, const float hmax, unsigned char areaId, + rcCompactHeightfield& chf); + +// Builds distance field and stores it into the combat heightfield. +// Params: +// chf - (in/out) compact heightfield representing the open space. +// Returns false if operation ran out of memory. +bool rcBuildDistanceField(rcContext* ctx, rcCompactHeightfield& chf); + +// Divides the walkable heighfied into simple regions using watershed partitioning. +// Each region has only one contour and no overlaps. +// The regions are stored in the compact heightfield 'reg' field. +// The process sometimes creates small regions. If the area of a regions is +// smaller than 'mergeRegionArea' then the region will be merged with a neighbour +// region if possible. If multiple regions form an area which is smaller than +// 'minRegionArea' all the regions belonging to that area will be removed. +// Here area means the count of spans in an area. +// Params: +// chf - (in/out) compact heightfield representing the open space. +// minRegionArea - (in) the smallest allowed region area. +// maxMergeRegionArea - (in) the largest allowed region area which can be merged. +// Returns false if operation ran out of memory. +bool rcBuildRegions(rcContext* ctx, rcCompactHeightfield& chf, + const int borderSize, const int minRegionArea, const int mergeRegionArea); + +// Divides the walkable heighfied into simple regions using simple monotone partitioning. +// Each region has only one contour and no overlaps. +// The regions are stored in the compact heightfield 'reg' field. +// The process sometimes creates small regions. If the area of a regions is +// smaller than 'mergeRegionArea' then the region will be merged with a neighbour +// region if possible. If multiple regions form an area which is smaller than +// 'minRegionArea' all the regions belonging to that area will be removed. +// Here area means the count of spans in an area. +// Params: +// chf - (in/out) compact heightfield representing the open space. +// minRegionArea - (in) the smallest allowed regions size. +// maxMergeRegionArea - (in) the largest allowed regions size which can be merged. +// Returns false if operation ran out of memory. +bool rcBuildRegionsMonotone(rcContext* ctx, rcCompactHeightfield& chf, + const int borderSize, const int minRegionArea, const int mergeRegionArea); + +// Builds simplified contours from the regions outlines. +// Params: +// chf - (in) compact heightfield which has regions set. +// maxError - (in) maximum allowed distance between simplified contour and cells. +// maxEdgeLen - (in) maximum allowed contour edge length in cells. +// cset - (out) Resulting contour set. +// flags - (in) build flags, see rcBuildContoursFlags. +// Returns false if operation ran out of memory. +bool rcBuildContours(rcContext* ctx, rcCompactHeightfield& chf, + const float maxError, const int maxEdgeLen, + rcContourSet& cset, const int flags = RC_CONTOUR_TESS_WALL_EDGES); + +// Builds connected convex polygon mesh from contour polygons. +// Params: +// cset - (in) contour set. +// nvp - (in) maximum number of vertices per polygon. +// mesh - (out) poly mesh. +// Returns false if operation ran out of memory. +bool rcBuildPolyMesh(rcContext* ctx, rcContourSet& cset, int nvp, rcPolyMesh& mesh); + +bool rcMergePolyMeshes(rcContext* ctx, rcPolyMesh** meshes, const int nmeshes, rcPolyMesh& mesh); + +// Builds detail triangle mesh for each polygon in the poly mesh. +// Params: +// mesh - (in) poly mesh to detail. +// chf - (in) compact height field, used to query height for new vertices. +// sampleDist - (in) spacing between height samples used to generate more detail into mesh. +// sampleMaxError - (in) maximum allowed distance between simplified detail mesh and height sample. +// pmdtl - (out) detail mesh. +// Returns false if operation ran out of memory. +bool rcBuildPolyMeshDetail(rcContext* ctx, const rcPolyMesh& mesh, const rcCompactHeightfield& chf, + const float sampleDist, const float sampleMaxError, + rcPolyMeshDetail& dmesh); + +bool rcMergePolyMeshDetails(rcContext* ctx, rcPolyMeshDetail** meshes, const int nmeshes, rcPolyMeshDetail& mesh); + + +#endif // RECAST_H diff --git a/dep/recastnavigation/Recast/RecastAlloc.cpp b/dep/recastnavigation/Recast/RecastAlloc.cpp new file mode 100644 index 00000000000..2c7396a1bfa --- /dev/null +++ b/dep/recastnavigation/Recast/RecastAlloc.cpp @@ -0,0 +1,67 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#include +#include +#include "RecastAlloc.h" + +static void *rcAllocDefault(int size, rcAllocHint) +{ + return malloc(size); +} + +static void rcFreeDefault(void *ptr) +{ + free(ptr); +} + +static rcAllocFunc* sRecastAllocFunc = rcAllocDefault; +static rcFreeFunc* sRecastFreeFunc = rcFreeDefault; + +void rcAllocSetCustom(rcAllocFunc *allocFunc, rcFreeFunc *freeFunc) +{ + sRecastAllocFunc = allocFunc ? allocFunc : rcAllocDefault; + sRecastFreeFunc = freeFunc ? freeFunc : rcFreeDefault; +} + +void* rcAlloc(int size, rcAllocHint hint) +{ + return sRecastAllocFunc(size, hint); +} + +void rcFree(void* ptr) +{ + if (ptr) + sRecastFreeFunc(ptr); +} + + +void rcIntArray::resize(int n) +{ + if (n > m_cap) + { + if (!m_cap) m_cap = n; + while (m_cap < n) m_cap *= 2; + int* newData = (int*)rcAlloc(m_cap*sizeof(int), RC_ALLOC_TEMP); + if (m_size && newData) memcpy(newData, m_data, m_size*sizeof(int)); + rcFree(m_data); + m_data = newData; + } + m_size = n; +} + diff --git a/dep/recastnavigation/Recast/RecastAlloc.h b/dep/recastnavigation/Recast/RecastAlloc.h new file mode 100644 index 00000000000..9a316374a73 --- /dev/null +++ b/dep/recastnavigation/Recast/RecastAlloc.h @@ -0,0 +1,69 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef RECASTALLOC_H +#define RECASTALLOC_H + +enum rcAllocHint +{ + RC_ALLOC_PERM, // Memory persist after a function call. + RC_ALLOC_TEMP // Memory used temporarily within a function. +}; + +typedef void* (rcAllocFunc)(int size, rcAllocHint hint); +typedef void (rcFreeFunc)(void* ptr); + +void rcAllocSetCustom(rcAllocFunc *allocFunc, rcFreeFunc *freeFunc); + +void* rcAlloc(int size, rcAllocHint hint); +void rcFree(void* ptr); + + + +// Simple dynamic array ints. +class rcIntArray +{ + int* m_data; + int m_size, m_cap; + inline rcIntArray(const rcIntArray&); + inline rcIntArray& operator=(const rcIntArray&); +public: + inline rcIntArray() : m_data(0), m_size(0), m_cap(0) {} + inline rcIntArray(int n) : m_data(0), m_size(0), m_cap(0) { resize(n); } + inline ~rcIntArray() { rcFree(m_data); } + void resize(int n); + inline void push(int item) { resize(m_size+1); m_data[m_size-1] = item; } + inline int pop() { if (m_size > 0) m_size--; return m_data[m_size]; } + inline const int& operator[](int i) const { return m_data[i]; } + inline int& operator[](int i) { return m_data[i]; } + inline int size() const { return m_size; } +}; + +// Simple internal helper class to delete array in scope +template class rcScopedDelete +{ + T* ptr; + inline T* operator=(T* p); +public: + inline rcScopedDelete() : ptr(0) {} + inline rcScopedDelete(T* p) : ptr(p) {} + inline ~rcScopedDelete() { rcFree(ptr); } + inline operator T*() { return ptr; } +}; + +#endif diff --git a/dep/recastnavigation/Recast/RecastArea.cpp b/dep/recastnavigation/Recast/RecastArea.cpp new file mode 100644 index 00000000000..e89caee2a49 --- /dev/null +++ b/dep/recastnavigation/Recast/RecastArea.cpp @@ -0,0 +1,413 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#include +#define _USE_MATH_DEFINES +#include +#include +#include +#include +#include "Recast.h" +#include "RecastAlloc.h" +#include "RecastAssert.h" + + +bool rcErodeWalkableArea(rcContext* ctx, int radius, rcCompactHeightfield& chf) +{ + rcAssert(ctx); + + const int w = chf.width; + const int h = chf.height; + + ctx->startTimer(RC_TIMER_ERODE_AREA); + + unsigned char* dist = (unsigned char*)rcAlloc(sizeof(unsigned char)*chf.spanCount, RC_ALLOC_TEMP); + if (!dist) + { + ctx->log(RC_LOG_ERROR, "erodeWalkableArea: Out of memory 'dist' (%d).", chf.spanCount); + return false; + } + + // Init distance. + memset(dist, 0xff, sizeof(unsigned char)*chf.spanCount); + + // Mark boundary cells. + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + if (chf.areas[i] != RC_NULL_AREA) + { + const rcCompactSpan& s = chf.spans[i]; + int nc = 0; + for (int dir = 0; dir < 4; ++dir) + { + if (rcGetCon(s, dir) != RC_NOT_CONNECTED) + nc++; + } + // At least one missing neighbour. + if (nc != 4) + dist[i] = 0; + } + } + } + } + + unsigned char nd; + + // Pass 1 + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + const rcCompactSpan& s = chf.spans[i]; + + if (rcGetCon(s, 0) != RC_NOT_CONNECTED) + { + // (-1,0) + const int ax = x + rcGetDirOffsetX(0); + const int ay = y + rcGetDirOffsetY(0); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, 0); + const rcCompactSpan& as = chf.spans[ai]; + nd = (unsigned char)rcMin((int)dist[ai]+2, 255); + if (nd < dist[i]) + dist[i] = nd; + + // (-1,-1) + if (rcGetCon(as, 3) != RC_NOT_CONNECTED) + { + const int aax = ax + rcGetDirOffsetX(3); + const int aay = ay + rcGetDirOffsetY(3); + const int aai = (int)chf.cells[aax+aay*w].index + rcGetCon(as, 3); + nd = (unsigned char)rcMin((int)dist[aai]+3, 255); + if (nd < dist[i]) + dist[i] = nd; + } + } + if (rcGetCon(s, 3) != RC_NOT_CONNECTED) + { + // (0,-1) + const int ax = x + rcGetDirOffsetX(3); + const int ay = y + rcGetDirOffsetY(3); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, 3); + const rcCompactSpan& as = chf.spans[ai]; + nd = (unsigned char)rcMin((int)dist[ai]+2, 255); + if (nd < dist[i]) + dist[i] = nd; + + // (1,-1) + if (rcGetCon(as, 2) != RC_NOT_CONNECTED) + { + const int aax = ax + rcGetDirOffsetX(2); + const int aay = ay + rcGetDirOffsetY(2); + const int aai = (int)chf.cells[aax+aay*w].index + rcGetCon(as, 2); + nd = (unsigned char)rcMin((int)dist[aai]+3, 255); + if (nd < dist[i]) + dist[i] = nd; + } + } + } + } + } + + // Pass 2 + for (int y = h-1; y >= 0; --y) + { + for (int x = w-1; x >= 0; --x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + const rcCompactSpan& s = chf.spans[i]; + + if (rcGetCon(s, 2) != RC_NOT_CONNECTED) + { + // (1,0) + const int ax = x + rcGetDirOffsetX(2); + const int ay = y + rcGetDirOffsetY(2); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, 2); + const rcCompactSpan& as = chf.spans[ai]; + nd = (unsigned char)rcMin((int)dist[ai]+2, 255); + if (nd < dist[i]) + dist[i] = nd; + + // (1,1) + if (rcGetCon(as, 1) != RC_NOT_CONNECTED) + { + const int aax = ax + rcGetDirOffsetX(1); + const int aay = ay + rcGetDirOffsetY(1); + const int aai = (int)chf.cells[aax+aay*w].index + rcGetCon(as, 1); + nd = (unsigned char)rcMin((int)dist[aai]+3, 255); + if (nd < dist[i]) + dist[i] = nd; + } + } + if (rcGetCon(s, 1) != RC_NOT_CONNECTED) + { + // (0,1) + const int ax = x + rcGetDirOffsetX(1); + const int ay = y + rcGetDirOffsetY(1); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, 1); + const rcCompactSpan& as = chf.spans[ai]; + nd = (unsigned char)rcMin((int)dist[ai]+2, 255); + if (nd < dist[i]) + dist[i] = nd; + + // (-1,1) + if (rcGetCon(as, 0) != RC_NOT_CONNECTED) + { + const int aax = ax + rcGetDirOffsetX(0); + const int aay = ay + rcGetDirOffsetY(0); + const int aai = (int)chf.cells[aax+aay*w].index + rcGetCon(as, 0); + nd = (unsigned char)rcMin((int)dist[aai]+3, 255); + if (nd < dist[i]) + dist[i] = nd; + } + } + } + } + } + + const unsigned char thr = (unsigned char)(radius*2); + for (int i = 0; i < chf.spanCount; ++i) + if (dist[i] < thr) + chf.areas[i] = RC_NULL_AREA; + + rcFree(dist); + + ctx->stopTimer(RC_TIMER_ERODE_AREA); + + return true; +} + +static void insertSort(unsigned char* a, const int n) +{ + int i, j; + for (i = 1; i < n; i++) + { + const unsigned char value = a[i]; + for (j = i - 1; j >= 0 && a[j] > value; j--) + a[j+1] = a[j]; + a[j+1] = value; + } +} + + +bool rcMedianFilterWalkableArea(rcContext* ctx, rcCompactHeightfield& chf) +{ + rcAssert(ctx); + + const int w = chf.width; + const int h = chf.height; + + ctx->startTimer(RC_TIMER_MEDIAN_AREA); + + unsigned char* areas = (unsigned char*)rcAlloc(sizeof(unsigned char)*chf.spanCount, RC_ALLOC_TEMP); + if (!areas) + { + ctx->log(RC_LOG_ERROR, "medianFilterWalkableArea: Out of memory 'areas' (%d).", chf.spanCount); + return false; + } + + // Init distance. + memset(areas, 0xff, sizeof(unsigned char)*chf.spanCount); + + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + const rcCompactSpan& s = chf.spans[i]; + if (chf.areas[i] == RC_NULL_AREA) + { + areas[i] = chf.areas[i]; + continue; + } + + unsigned char nei[9]; + for (int j = 0; j < 9; ++j) + nei[j] = chf.areas[i]; + + for (int dir = 0; dir < 4; ++dir) + { + if (rcGetCon(s, dir) != RC_NOT_CONNECTED) + { + const int ax = x + rcGetDirOffsetX(dir); + const int ay = y + rcGetDirOffsetY(dir); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, dir); + if (chf.areas[ai] != RC_NULL_AREA) + nei[dir*2+0] = chf.areas[ai]; + + const rcCompactSpan& as = chf.spans[ai]; + const int dir2 = (dir+1) & 0x3; + if (rcGetCon(as, dir2) != RC_NOT_CONNECTED) + { + const int ax2 = ax + rcGetDirOffsetX(dir2); + const int ay2 = ay + rcGetDirOffsetY(dir2); + const int ai2 = (int)chf.cells[ax2+ay2*w].index + rcGetCon(as, dir2); + if (chf.areas[ai2] != RC_NULL_AREA) + nei[dir*2+1] = chf.areas[ai2]; + } + } + } + insertSort(nei, 9); + areas[i] = nei[4]; + } + } + } + + memcpy(chf.areas, areas, sizeof(unsigned char)*chf.spanCount); + + rcFree(areas); + + ctx->stopTimer(RC_TIMER_MEDIAN_AREA); + + return true; +} + +void rcMarkBoxArea(rcContext* ctx, const float* bmin, const float* bmax, unsigned char areaId, + rcCompactHeightfield& chf) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_MARK_BOX_AREA); + + int minx = (int)((bmin[0]-chf.bmin[0])/chf.cs); + int miny = (int)((bmin[1]-chf.bmin[1])/chf.ch); + int minz = (int)((bmin[2]-chf.bmin[2])/chf.cs); + int maxx = (int)((bmax[0]-chf.bmin[0])/chf.cs); + int maxy = (int)((bmax[1]-chf.bmin[1])/chf.ch); + int maxz = (int)((bmax[2]-chf.bmin[2])/chf.cs); + + if (maxx < 0) return; + if (minx >= chf.width) return; + if (maxz < 0) return; + if (minz >= chf.height) return; + + if (minx < 0) minx = 0; + if (maxx >= chf.width) maxx = chf.width-1; + if (minz < 0) minz = 0; + if (maxz >= chf.height) maxz = chf.height-1; + + for (int z = minz; z <= maxz; ++z) + { + for (int x = minx; x <= maxx; ++x) + { + const rcCompactCell& c = chf.cells[x+z*chf.width]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + rcCompactSpan& s = chf.spans[i]; + if ((int)s.y >= miny && (int)s.y <= maxy) + { + chf.areas[i] = areaId; + } + } + } + } + + ctx->stopTimer(RC_TIMER_MARK_BOX_AREA); + +} + + +static int pointInPoly(int nvert, const float* verts, const float* p) +{ + int i, j, c = 0; + for (i = 0, j = nvert-1; i < nvert; j = i++) + { + const float* vi = &verts[i*3]; + const float* vj = &verts[j*3]; + if (((vi[2] > p[2]) != (vj[2] > p[2])) && + (p[0] < (vj[0]-vi[0]) * (p[2]-vi[2]) / (vj[2]-vi[2]) + vi[0]) ) + c = !c; + } + return c; +} + +void rcMarkConvexPolyArea(rcContext* ctx, const float* verts, const int nverts, + const float hmin, const float hmax, unsigned char areaId, + rcCompactHeightfield& chf) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_MARK_CONVEXPOLY_AREA); + + float bmin[3], bmax[3]; + rcVcopy(bmin, verts); + rcVcopy(bmax, verts); + for (int i = 1; i < nverts; ++i) + { + rcVmin(bmin, &verts[i*3]); + rcVmax(bmax, &verts[i*3]); + } + bmin[1] = hmin; + bmax[1] = hmax; + + int minx = (int)((bmin[0]-chf.bmin[0])/chf.cs); + int miny = (int)((bmin[1]-chf.bmin[1])/chf.ch); + int minz = (int)((bmin[2]-chf.bmin[2])/chf.cs); + int maxx = (int)((bmax[0]-chf.bmin[0])/chf.cs); + int maxy = (int)((bmax[1]-chf.bmin[1])/chf.ch); + int maxz = (int)((bmax[2]-chf.bmin[2])/chf.cs); + + if (maxx < 0) return; + if (minx >= chf.width) return; + if (maxz < 0) return; + if (minz >= chf.height) return; + + if (minx < 0) minx = 0; + if (maxx >= chf.width) maxx = chf.width-1; + if (minz < 0) minz = 0; + if (maxz >= chf.height) maxz = chf.height-1; + + + // TODO: Optimize. + for (int z = minz; z <= maxz; ++z) + { + for (int x = minx; x <= maxx; ++x) + { + const rcCompactCell& c = chf.cells[x+z*chf.width]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + rcCompactSpan& s = chf.spans[i]; + if ((int)s.y >= miny && (int)s.y <= maxy) + { + float p[3]; + p[0] = chf.bmin[0] + (x+0.5f)*chf.cs; + p[1] = 0; + p[2] = chf.bmin[2] + (z+0.5f)*chf.cs; + + if (pointInPoly(nverts, verts, p)) + { + chf.areas[i] = areaId; + } + } + } + } + } + + ctx->stopTimer(RC_TIMER_MARK_CONVEXPOLY_AREA); +} diff --git a/dep/recastnavigation/Recast/RecastAssert.h b/dep/recastnavigation/Recast/RecastAssert.h new file mode 100644 index 00000000000..b58b8fcd286 --- /dev/null +++ b/dep/recastnavigation/Recast/RecastAssert.h @@ -0,0 +1,33 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#ifndef RECASTASSERT_H +#define RECASTASSERT_H + +// Note: This header file's only purpose is to include define assert. +// Feel free to change the file and include your own implementation instead. + +#ifdef NDEBUG +// From http://cnicholson.net/2009/02/stupid-c-tricks-adventures-in-assert/ +# define rcAssert(x) do { (void)sizeof(x); } while(__LINE__==-1,false) +#else +# include +# define rcAssert assert +#endif + +#endif // RECASTASSERT_H diff --git a/dep/recastnavigation/Recast/RecastContour.cpp b/dep/recastnavigation/Recast/RecastContour.cpp new file mode 100644 index 00000000000..1906b6e6f44 --- /dev/null +++ b/dep/recastnavigation/Recast/RecastContour.cpp @@ -0,0 +1,804 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#define _USE_MATH_DEFINES +#include +#include +#include +#include "Recast.h" +#include "RecastAlloc.h" +#include "RecastAssert.h" + + +static int getCornerHeight(int x, int y, int i, int dir, + const rcCompactHeightfield& chf, + bool& isBorderVertex) +{ + const rcCompactSpan& s = chf.spans[i]; + int ch = (int)s.y; + int dirp = (dir+1) & 0x3; + + unsigned int regs[4] = {0,0,0,0}; + + // Combine region and area codes in order to prevent + // border vertices which are in between two areas to be removed. + regs[0] = chf.spans[i].reg | (chf.areas[i] << 16); + + if (rcGetCon(s, dir) != RC_NOT_CONNECTED) + { + const int ax = x + rcGetDirOffsetX(dir); + const int ay = y + rcGetDirOffsetY(dir); + const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(s, dir); + const rcCompactSpan& as = chf.spans[ai]; + ch = rcMax(ch, (int)as.y); + regs[1] = chf.spans[ai].reg | (chf.areas[ai] << 16); + if (rcGetCon(as, dirp) != RC_NOT_CONNECTED) + { + const int ax2 = ax + rcGetDirOffsetX(dirp); + const int ay2 = ay + rcGetDirOffsetY(dirp); + const int ai2 = (int)chf.cells[ax2+ay2*chf.width].index + rcGetCon(as, dirp); + const rcCompactSpan& as2 = chf.spans[ai2]; + ch = rcMax(ch, (int)as2.y); + regs[2] = chf.spans[ai2].reg | (chf.areas[ai2] << 16); + } + } + if (rcGetCon(s, dirp) != RC_NOT_CONNECTED) + { + const int ax = x + rcGetDirOffsetX(dirp); + const int ay = y + rcGetDirOffsetY(dirp); + const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(s, dirp); + const rcCompactSpan& as = chf.spans[ai]; + ch = rcMax(ch, (int)as.y); + regs[3] = chf.spans[ai].reg | (chf.areas[ai] << 16); + if (rcGetCon(as, dir) != RC_NOT_CONNECTED) + { + const int ax2 = ax + rcGetDirOffsetX(dir); + const int ay2 = ay + rcGetDirOffsetY(dir); + const int ai2 = (int)chf.cells[ax2+ay2*chf.width].index + rcGetCon(as, dir); + const rcCompactSpan& as2 = chf.spans[ai2]; + ch = rcMax(ch, (int)as2.y); + regs[2] = chf.spans[ai2].reg | (chf.areas[ai2] << 16); + } + } + + // Check if the vertex is special edge vertex, these vertices will be removed later. + for (int j = 0; j < 4; ++j) + { + const int a = j; + const int b = (j+1) & 0x3; + const int c = (j+2) & 0x3; + const int d = (j+3) & 0x3; + + // The vertex is a border vertex there are two same exterior cells in a row, + // followed by two interior cells and none of the regions are out of bounds. + const bool twoSameExts = (regs[a] & regs[b] & RC_BORDER_REG) != 0 && regs[a] == regs[b]; + const bool twoInts = ((regs[c] | regs[d]) & RC_BORDER_REG) == 0; + const bool intsSameArea = (regs[c]>>16) == (regs[d]>>16); + const bool noZeros = regs[a] != 0 && regs[b] != 0 && regs[c] != 0 && regs[d] != 0; + if (twoSameExts && twoInts && intsSameArea && noZeros) + { + isBorderVertex = true; + break; + } + } + + return ch; +} + +static void walkContour(int x, int y, int i, + rcCompactHeightfield& chf, + unsigned char* flags, rcIntArray& points) +{ + // Choose the first non-connected edge + unsigned char dir = 0; + while ((flags[i] & (1 << dir)) == 0) + dir++; + + unsigned char startDir = dir; + int starti = i; + + const unsigned char area = chf.areas[i]; + + int iter = 0; + while (++iter < 40000) + { + if (flags[i] & (1 << dir)) + { + // Choose the edge corner + bool isBorderVertex = false; + bool isAreaBorder = false; + int px = x; + int py = getCornerHeight(x, y, i, dir, chf, isBorderVertex); + int pz = y; + switch(dir) + { + case 0: pz++; break; + case 1: px++; pz++; break; + case 2: px++; break; + } + int r = 0; + const rcCompactSpan& s = chf.spans[i]; + if (rcGetCon(s, dir) != RC_NOT_CONNECTED) + { + const int ax = x + rcGetDirOffsetX(dir); + const int ay = y + rcGetDirOffsetY(dir); + const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(s, dir); + r = (int)chf.spans[ai].reg; + if (area != chf.areas[ai]) + isAreaBorder = true; + } + if (isBorderVertex) + r |= RC_BORDER_VERTEX; + if (isAreaBorder) + r |= RC_AREA_BORDER; + points.push(px); + points.push(py); + points.push(pz); + points.push(r); + + flags[i] &= ~(1 << dir); // Remove visited edges + dir = (dir+1) & 0x3; // Rotate CW + } + else + { + int ni = -1; + const int nx = x + rcGetDirOffsetX(dir); + const int ny = y + rcGetDirOffsetY(dir); + const rcCompactSpan& s = chf.spans[i]; + if (rcGetCon(s, dir) != RC_NOT_CONNECTED) + { + const rcCompactCell& nc = chf.cells[nx+ny*chf.width]; + ni = (int)nc.index + rcGetCon(s, dir); + } + if (ni == -1) + { + // Should not happen. + return; + } + x = nx; + y = ny; + i = ni; + dir = (dir+3) & 0x3; // Rotate CCW + } + + if (starti == i && startDir == dir) + { + break; + } + } +} + +static float distancePtSeg(const int x, const int z, + const int px, const int pz, + const int qx, const int qz) +{ +/* float pqx = (float)(qx - px); + float pqy = (float)(qy - py); + float pqz = (float)(qz - pz); + float dx = (float)(x - px); + float dy = (float)(y - py); + float dz = (float)(z - pz); + float d = pqx*pqx + pqy*pqy + pqz*pqz; + float t = pqx*dx + pqy*dy + pqz*dz; + if (d > 0) + t /= d; + if (t < 0) + t = 0; + else if (t > 1) + t = 1; + + dx = px + t*pqx - x; + dy = py + t*pqy - y; + dz = pz + t*pqz - z; + + return dx*dx + dy*dy + dz*dz;*/ + + float pqx = (float)(qx - px); + float pqz = (float)(qz - pz); + float dx = (float)(x - px); + float dz = (float)(z - pz); + float d = pqx*pqx + pqz*pqz; + float t = pqx*dx + pqz*dz; + if (d > 0) + t /= d; + if (t < 0) + t = 0; + else if (t > 1) + t = 1; + + dx = px + t*pqx - x; + dz = pz + t*pqz - z; + + return dx*dx + dz*dz; +} + +static void simplifyContour(rcIntArray& points, rcIntArray& simplified, + const float maxError, const int maxEdgeLen, const int buildFlags) +{ + // Add initial points. + bool hasConnections = false; + for (int i = 0; i < points.size(); i += 4) + { + if ((points[i+3] & RC_CONTOUR_REG_MASK) != 0) + { + hasConnections = true; + break; + } + } + + if (hasConnections) + { + // The contour has some portals to other regions. + // Add a new point to every location where the region changes. + for (int i = 0, ni = points.size()/4; i < ni; ++i) + { + int ii = (i+1) % ni; + const bool differentRegs = (points[i*4+3] & RC_CONTOUR_REG_MASK) != (points[ii*4+3] & RC_CONTOUR_REG_MASK); + const bool areaBorders = (points[i*4+3] & RC_AREA_BORDER) != (points[ii*4+3] & RC_AREA_BORDER); + if (differentRegs || areaBorders) + { + simplified.push(points[i*4+0]); + simplified.push(points[i*4+1]); + simplified.push(points[i*4+2]); + simplified.push(i); + } + } + } + + if (simplified.size() == 0) + { + // If there is no connections at all, + // create some initial points for the simplification process. + // Find lower-left and upper-right vertices of the contour. + int llx = points[0]; + int lly = points[1]; + int llz = points[2]; + int lli = 0; + int urx = points[0]; + int ury = points[1]; + int urz = points[2]; + int uri = 0; + for (int i = 0; i < points.size(); i += 4) + { + int x = points[i+0]; + int y = points[i+1]; + int z = points[i+2]; + if (x < llx || (x == llx && z < llz)) + { + llx = x; + lly = y; + llz = z; + lli = i/4; + } + if (x > urx || (x == urx && z > urz)) + { + urx = x; + ury = y; + urz = z; + uri = i/4; + } + } + simplified.push(llx); + simplified.push(lly); + simplified.push(llz); + simplified.push(lli); + + simplified.push(urx); + simplified.push(ury); + simplified.push(urz); + simplified.push(uri); + } + + // Add points until all raw points are within + // error tolerance to the simplified shape. + const int pn = points.size()/4; + for (int i = 0; i < simplified.size()/4; ) + { + int ii = (i+1) % (simplified.size()/4); + + const int ax = simplified[i*4+0]; + const int az = simplified[i*4+2]; + const int ai = simplified[i*4+3]; + + const int bx = simplified[ii*4+0]; + const int bz = simplified[ii*4+2]; + const int bi = simplified[ii*4+3]; + + // Find maximum deviation from the segment. + float maxd = 0; + int maxi = -1; + int ci, cinc, endi; + + // Traverse the segment in lexilogical order so that the + // max deviation is calculated similarly when traversing + // opposite segments. + if (bx > ax || (bx == ax && bz > az)) + { + cinc = 1; + ci = (ai+cinc) % pn; + endi = bi; + } + else + { + cinc = pn-1; + ci = (bi+cinc) % pn; + endi = ai; + } + + // Tessellate only outer edges oredges between areas. + if ((points[ci*4+3] & RC_CONTOUR_REG_MASK) == 0 || + (points[ci*4+3] & RC_AREA_BORDER)) + { + while (ci != endi) + { + float d = distancePtSeg(points[ci*4+0], points[ci*4+2], ax, az, bx, bz); + if (d > maxd) + { + maxd = d; + maxi = ci; + } + ci = (ci+cinc) % pn; + } + } + + + // If the max deviation is larger than accepted error, + // add new point, else continue to next segment. + if (maxi != -1 && maxd > (maxError*maxError)) + { + // Add space for the new point. + simplified.resize(simplified.size()+4); + const int n = simplified.size()/4; + for (int j = n-1; j > i; --j) + { + simplified[j*4+0] = simplified[(j-1)*4+0]; + simplified[j*4+1] = simplified[(j-1)*4+1]; + simplified[j*4+2] = simplified[(j-1)*4+2]; + simplified[j*4+3] = simplified[(j-1)*4+3]; + } + // Add the point. + simplified[(i+1)*4+0] = points[maxi*4+0]; + simplified[(i+1)*4+1] = points[maxi*4+1]; + simplified[(i+1)*4+2] = points[maxi*4+2]; + simplified[(i+1)*4+3] = maxi; + } + else + { + ++i; + } + } + + // Split too long edges. + if (maxEdgeLen > 0 && (buildFlags & (RC_CONTOUR_TESS_WALL_EDGES|RC_CONTOUR_TESS_AREA_EDGES)) != 0) + { + for (int i = 0; i < simplified.size()/4; ) + { + const int ii = (i+1) % (simplified.size()/4); + + const int ax = simplified[i*4+0]; + const int az = simplified[i*4+2]; + const int ai = simplified[i*4+3]; + + const int bx = simplified[ii*4+0]; + const int bz = simplified[ii*4+2]; + const int bi = simplified[ii*4+3]; + + // Find maximum deviation from the segment. + int maxi = -1; + int ci = (ai+1) % pn; + + // Tessellate only outer edges or edges between areas. + bool tess = false; + // Wall edges. + if ((buildFlags & RC_CONTOUR_TESS_WALL_EDGES) && (points[ci*4+3] & RC_CONTOUR_REG_MASK) == 0) + tess = true; + // Edges between areas. + if ((buildFlags & RC_CONTOUR_TESS_AREA_EDGES) && (points[ci*4+3] & RC_AREA_BORDER)) + tess = true; + + if (tess) + { + int dx = bx - ax; + int dz = bz - az; + if (dx*dx + dz*dz > maxEdgeLen*maxEdgeLen) + { + // Round based on the segments in lexilogical order so that the + // max tesselation is consistent regardles in which direction + // segments are traversed. + if (bx > ax || (bx == ax && bz > az)) + { + const int n = bi < ai ? (bi+pn - ai) : (bi - ai); + maxi = (ai + n/2) % pn; + } + else + { + const int n = bi < ai ? (bi+pn - ai) : (bi - ai); + maxi = (ai + (n+1)/2) % pn; + } + } + } + + // If the max deviation is larger than accepted error, + // add new point, else continue to next segment. + if (maxi != -1) + { + // Add space for the new point. + simplified.resize(simplified.size()+4); + const int n = simplified.size()/4; + for (int j = n-1; j > i; --j) + { + simplified[j*4+0] = simplified[(j-1)*4+0]; + simplified[j*4+1] = simplified[(j-1)*4+1]; + simplified[j*4+2] = simplified[(j-1)*4+2]; + simplified[j*4+3] = simplified[(j-1)*4+3]; + } + // Add the point. + simplified[(i+1)*4+0] = points[maxi*4+0]; + simplified[(i+1)*4+1] = points[maxi*4+1]; + simplified[(i+1)*4+2] = points[maxi*4+2]; + simplified[(i+1)*4+3] = maxi; + } + else + { + ++i; + } + } + } + + for (int i = 0; i < simplified.size()/4; ++i) + { + // The edge vertex flag is take from the current raw point, + // and the neighbour region is take from the next raw point. + const int ai = (simplified[i*4+3]+1) % pn; + const int bi = simplified[i*4+3]; + simplified[i*4+3] = (points[ai*4+3] & RC_CONTOUR_REG_MASK) | (points[bi*4+3] & RC_BORDER_VERTEX); + } + +} + +static void removeDegenerateSegments(rcIntArray& simplified) +{ + // Remove adjacent vertices which are equal on xz-plane, + // or else the triangulator will get confused. + for (int i = 0; i < simplified.size()/4; ++i) + { + int ni = i+1; + if (ni >= (simplified.size()/4)) + ni = 0; + + if (simplified[i*4+0] == simplified[ni*4+0] && + simplified[i*4+2] == simplified[ni*4+2]) + { + // Degenerate segment, remove. + for (int j = i; j < simplified.size()/4-1; ++j) + { + simplified[j*4+0] = simplified[(j+1)*4+0]; + simplified[j*4+1] = simplified[(j+1)*4+1]; + simplified[j*4+2] = simplified[(j+1)*4+2]; + simplified[j*4+3] = simplified[(j+1)*4+3]; + } + simplified.resize(simplified.size()-4); + } + } +} + +static int calcAreaOfPolygon2D(const int* verts, const int nverts) +{ + int area = 0; + for (int i = 0, j = nverts-1; i < nverts; j=i++) + { + const int* vi = &verts[i*4]; + const int* vj = &verts[j*4]; + area += vi[0] * vj[2] - vj[0] * vi[2]; + } + return (area+1) / 2; +} + +inline bool ileft(const int* a, const int* b, const int* c) +{ + return (b[0] - a[0]) * (c[2] - a[2]) - (c[0] - a[0]) * (b[2] - a[2]) <= 0; +} + +static void getClosestIndices(const int* vertsa, const int nvertsa, + const int* vertsb, const int nvertsb, + int& ia, int& ib) +{ + int closestDist = 0xfffffff; + ia = -1, ib = -1; + for (int i = 0; i < nvertsa; ++i) + { + const int in = (i+1) % nvertsa; + const int ip = (i+nvertsa-1) % nvertsa; + const int* va = &vertsa[i*4]; + const int* van = &vertsa[in*4]; + const int* vap = &vertsa[ip*4]; + + for (int j = 0; j < nvertsb; ++j) + { + const int* vb = &vertsb[j*4]; + // vb must be "infront" of va. + if (ileft(vap,va,vb) && ileft(va,van,vb)) + { + const int dx = vb[0] - va[0]; + const int dz = vb[2] - va[2]; + const int d = dx*dx + dz*dz; + if (d < closestDist) + { + ia = i; + ib = j; + closestDist = d; + } + } + } + } +} + +static bool mergeContours(rcContour& ca, rcContour& cb, int ia, int ib) +{ + const int maxVerts = ca.nverts + cb.nverts + 2; + int* verts = (int*)rcAlloc(sizeof(int)*maxVerts*4, RC_ALLOC_PERM); + if (!verts) + return false; + + int nv = 0; + + // Copy contour A. + for (int i = 0; i <= ca.nverts; ++i) + { + int* dst = &verts[nv*4]; + const int* src = &ca.verts[((ia+i)%ca.nverts)*4]; + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + dst[3] = src[3]; + nv++; + } + + // Copy contour B + for (int i = 0; i <= cb.nverts; ++i) + { + int* dst = &verts[nv*4]; + const int* src = &cb.verts[((ib+i)%cb.nverts)*4]; + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + dst[3] = src[3]; + nv++; + } + + rcFree(ca.verts); + ca.verts = verts; + ca.nverts = nv; + + rcFree(cb.verts); + cb.verts = 0; + cb.nverts = 0; + + return true; +} + +bool rcBuildContours(rcContext* ctx, rcCompactHeightfield& chf, + const float maxError, const int maxEdgeLen, + rcContourSet& cset, const int buildFlags) +{ + rcAssert(ctx); + + const int w = chf.width; + const int h = chf.height; + + ctx->startTimer(RC_TIMER_BUILD_CONTOURS); + + rcVcopy(cset.bmin, chf.bmin); + rcVcopy(cset.bmax, chf.bmax); + cset.cs = chf.cs; + cset.ch = chf.ch; + + int maxContours = rcMax((int)chf.maxRegions, 8); + cset.conts = (rcContour*)rcAlloc(sizeof(rcContour)*maxContours, RC_ALLOC_PERM); + if (!cset.conts) + return false; + cset.nconts = 0; + + rcScopedDelete flags = (unsigned char*)rcAlloc(sizeof(unsigned char)*chf.spanCount, RC_ALLOC_TEMP); + if (!flags) + { + ctx->log(RC_LOG_ERROR, "rcBuildContours: Out of memory 'flags' (%d).", chf.spanCount); + return false; + } + + ctx->startTimer(RC_TIMER_BUILD_CONTOURS_TRACE); + + // Mark boundaries. + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + unsigned char res = 0; + const rcCompactSpan& s = chf.spans[i]; + if (!chf.spans[i].reg || (chf.spans[i].reg & RC_BORDER_REG)) + { + flags[i] = 0; + continue; + } + for (int dir = 0; dir < 4; ++dir) + { + unsigned short r = 0; + if (rcGetCon(s, dir) != RC_NOT_CONNECTED) + { + const int ax = x + rcGetDirOffsetX(dir); + const int ay = y + rcGetDirOffsetY(dir); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, dir); + r = chf.spans[ai].reg; + } + if (r == chf.spans[i].reg) + res |= (1 << dir); + } + flags[i] = res ^ 0xf; // Inverse, mark non connected edges. + } + } + } + + ctx->stopTimer(RC_TIMER_BUILD_CONTOURS_TRACE); + + ctx->startTimer(RC_TIMER_BUILD_CONTOURS_SIMPLIFY); + + rcIntArray verts(256); + rcIntArray simplified(64); + + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + if (flags[i] == 0 || flags[i] == 0xf) + { + flags[i] = 0; + continue; + } + const unsigned short reg = chf.spans[i].reg; + if (!reg || (reg & RC_BORDER_REG)) + continue; + const unsigned char area = chf.areas[i]; + + verts.resize(0); + simplified.resize(0); + walkContour(x, y, i, chf, flags, verts); + simplifyContour(verts, simplified, maxError, maxEdgeLen, buildFlags); + removeDegenerateSegments(simplified); + + // Store region->contour remap info. + // Create contour. + if (simplified.size()/4 >= 3) + { + if (cset.nconts >= maxContours) + { + // Allocate more contours. + // This can happen when there are tiny holes in the heightfield. + const int oldMax = maxContours; + maxContours *= 2; + rcContour* newConts = (rcContour*)rcAlloc(sizeof(rcContour)*maxContours, RC_ALLOC_PERM); + for (int j = 0; j < cset.nconts; ++j) + { + newConts[j] = cset.conts[j]; + // Reset source pointers to prevent data deletion. + cset.conts[j].verts = 0; + cset.conts[j].rverts = 0; + } + rcFree(cset.conts); + cset.conts = newConts; + + ctx->log(RC_LOG_WARNING, "rcBuildContours: Expanding max contours from %d to %d.", oldMax, maxContours); + } + + rcContour* cont = &cset.conts[cset.nconts++]; + + cont->nverts = simplified.size()/4; + cont->verts = (int*)rcAlloc(sizeof(int)*cont->nverts*4, RC_ALLOC_PERM); + if (!cont->verts) + { + ctx->log(RC_LOG_ERROR, "rcBuildContours: Out of memory 'verts' (%d).", cont->nverts); + return false; + } + memcpy(cont->verts, &simplified[0], sizeof(int)*cont->nverts*4); + + cont->nrverts = verts.size()/4; + cont->rverts = (int*)rcAlloc(sizeof(int)*cont->nrverts*4, RC_ALLOC_PERM); + if (!cont->rverts) + { + ctx->log(RC_LOG_ERROR, "rcBuildContours: Out of memory 'rverts' (%d).", cont->nrverts); + return false; + } + memcpy(cont->rverts, &verts[0], sizeof(int)*cont->nrverts*4); + +/* cont->cx = cont->cy = cont->cz = 0; + for (int i = 0; i < cont->nverts; ++i) + { + cont->cx += cont->verts[i*4+0]; + cont->cy += cont->verts[i*4+1]; + cont->cz += cont->verts[i*4+2]; + } + cont->cx /= cont->nverts; + cont->cy /= cont->nverts; + cont->cz /= cont->nverts;*/ + + cont->reg = reg; + cont->area = area; + } + } + } + } + + // Check and merge droppings. + // Sometimes the previous algorithms can fail and create several contours + // per area. This pass will try to merge the holes into the main region. + for (int i = 0; i < cset.nconts; ++i) + { + rcContour& cont = cset.conts[i]; + // Check if the contour is would backwards. + if (calcAreaOfPolygon2D(cont.verts, cont.nverts) < 0) + { + // Find another contour which has the same region ID. + int mergeIdx = -1; + for (int j = 0; j < cset.nconts; ++j) + { + if (i == j) continue; + if (cset.conts[j].nverts && cset.conts[j].reg == cont.reg) + { + // Make sure the polygon is correctly oriented. + if (calcAreaOfPolygon2D(cset.conts[j].verts, cset.conts[j].nverts)) + { + mergeIdx = j; + break; + } + } + } + if (mergeIdx == -1) + { + ctx->log(RC_LOG_WARNING, "rcBuildContours: Could not find merge target for bad contour %d.", i); + } + else + { + rcContour& mcont = cset.conts[mergeIdx]; + // Merge by closest points. + int ia = 0, ib = 0; + getClosestIndices(mcont.verts, mcont.nverts, cont.verts, cont.nverts, ia, ib); + if (ia == -1 || ib == -1) + { + ctx->log(RC_LOG_WARNING, "rcBuildContours: Failed to find merge points for %d and %d.", i, mergeIdx); + continue; + } + if (!mergeContours(mcont, cont, ia, ib)) + { + ctx->log(RC_LOG_WARNING, "rcBuildContours: Failed to merge contours %d and %d.", i, mergeIdx); + continue; + } + } + } + } + + ctx->stopTimer(RC_TIMER_BUILD_CONTOURS_SIMPLIFY); + + ctx->stopTimer(RC_TIMER_BUILD_CONTOURS); + + return true; +} diff --git a/dep/recastnavigation/Recast/RecastFilter.cpp b/dep/recastnavigation/Recast/RecastFilter.cpp new file mode 100644 index 00000000000..d01808a79a8 --- /dev/null +++ b/dep/recastnavigation/Recast/RecastFilter.cpp @@ -0,0 +1,179 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#define _USE_MATH_DEFINES +#include +#include +#include "Recast.h" +#include "RecastAssert.h" + + +void rcFilterLowHangingWalkableObstacles(rcContext* ctx, const int walkableClimb, rcHeightfield& solid) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_FILTER_LOW_OBSTACLES); + + const int w = solid.width; + const int h = solid.height; + + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + rcSpan* ps = 0; + bool previousWalkable = false; + + for (rcSpan* s = solid.spans[x + y*w]; s; ps = s, s = s->next) + { + const bool walkable = s->area != RC_NULL_AREA; + // If current span is not walkable, but there is walkable + // span just below it, mark the span above it walkable too. + if (!walkable && previousWalkable) + { + if (rcAbs((int)s->smax - (int)ps->smax) <= walkableClimb) + s->area = RC_NULL_AREA; + } + // Copy walkable flag so that it cannot propagate + // past multiple non-walkable objects. + previousWalkable = walkable; + } + } + } + + ctx->stopTimer(RC_TIMER_FILTER_LOW_OBSTACLES); +} + +void rcFilterLedgeSpans(rcContext* ctx, const int walkableHeight, const int walkableClimb, + rcHeightfield& solid) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_FILTER_BORDER); + + const int w = solid.width; + const int h = solid.height; + const int MAX_HEIGHT = 0xffff; + + // Mark border spans. + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + for (rcSpan* s = solid.spans[x + y*w]; s; s = s->next) + { + // Skip non walkable spans. + if (s->area == RC_NULL_AREA) + continue; + + const int bot = (int)(s->smax); + const int top = s->next ? (int)(s->next->smin) : MAX_HEIGHT; + + // Find neighbours minimum height. + int minh = MAX_HEIGHT; + + // Min and max height of accessible neighbours. + int asmin = s->smax; + int asmax = s->smax; + + for (int dir = 0; dir < 4; ++dir) + { + int dx = x + rcGetDirOffsetX(dir); + int dy = y + rcGetDirOffsetY(dir); + // Skip neighbours which are out of bounds. + if (dx < 0 || dy < 0 || dx >= w || dy >= h) + { + minh = rcMin(minh, -walkableClimb - bot); + continue; + } + + // From minus infinity to the first span. + rcSpan* ns = solid.spans[dx + dy*w]; + int nbot = -walkableClimb; + int ntop = ns ? (int)ns->smin : MAX_HEIGHT; + // Skip neightbour if the gap between the spans is too small. + if (rcMin(top,ntop) - rcMax(bot,nbot) > walkableHeight) + minh = rcMin(minh, nbot - bot); + + // Rest of the spans. + for (ns = solid.spans[dx + dy*w]; ns; ns = ns->next) + { + nbot = (int)ns->smax; + ntop = ns->next ? (int)ns->next->smin : MAX_HEIGHT; + // Skip neightbour if the gap between the spans is too small. + if (rcMin(top,ntop) - rcMax(bot,nbot) > walkableHeight) + { + minh = rcMin(minh, nbot - bot); + + // Find min/max accessible neighbour height. + if (rcAbs(nbot - bot) <= walkableClimb) + { + if (nbot < asmin) asmin = nbot; + if (nbot > asmax) asmax = nbot; + } + + } + } + } + + // The current span is close to a ledge if the drop to any + // neighbour span is less than the walkableClimb. + if (minh < -walkableClimb) + s->area = RC_NULL_AREA; + + // If the difference between all neighbours is too large, + // we are at steep slope, mark the span as ledge. + if ((asmax - asmin) > walkableClimb) + { + s->area = RC_NULL_AREA; + } + } + } + } + + ctx->stopTimer(RC_TIMER_FILTER_BORDER); +} + +void rcFilterWalkableLowHeightSpans(rcContext* ctx, int walkableHeight, rcHeightfield& solid) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_FILTER_WALKABLE); + + const int w = solid.width; + const int h = solid.height; + const int MAX_HEIGHT = 0xffff; + + // Remove walkable flag from spans which do not have enough + // space above them for the agent to stand there. + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + for (rcSpan* s = solid.spans[x + y*w]; s; s = s->next) + { + const int bot = (int)(s->smax); + const int top = s->next ? (int)(s->next->smin) : MAX_HEIGHT; + if ((top - bot) <= walkableHeight) + s->area = RC_NULL_AREA; + } + } + } + + ctx->stopTimer(RC_TIMER_FILTER_WALKABLE); +} diff --git a/dep/recastnavigation/Recast/RecastMesh.cpp b/dep/recastnavigation/Recast/RecastMesh.cpp new file mode 100644 index 00000000000..4b33c106d10 --- /dev/null +++ b/dep/recastnavigation/Recast/RecastMesh.cpp @@ -0,0 +1,1322 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#define _USE_MATH_DEFINES +#include +#include +#include +#include "Recast.h" +#include "RecastAlloc.h" +#include "RecastAssert.h" + +struct rcEdge +{ + unsigned short vert[2]; + unsigned short polyEdge[2]; + unsigned short poly[2]; +}; + +static bool buildMeshAdjacency(unsigned short* polys, const int npolys, + const int nverts, const int vertsPerPoly) +{ + // Based on code by Eric Lengyel from: + // http://www.terathon.com/code/edges.php + + int maxEdgeCount = npolys*vertsPerPoly; + unsigned short* firstEdge = (unsigned short*)rcAlloc(sizeof(unsigned short)*(nverts + maxEdgeCount), RC_ALLOC_TEMP); + if (!firstEdge) + return false; + unsigned short* nextEdge = firstEdge + nverts; + int edgeCount = 0; + + rcEdge* edges = (rcEdge*)rcAlloc(sizeof(rcEdge)*maxEdgeCount, RC_ALLOC_TEMP); + if (!edges) + { + rcFree(firstEdge); + return false; + } + + for (int i = 0; i < nverts; i++) + firstEdge[i] = RC_MESH_NULL_IDX; + + for (int i = 0; i < npolys; ++i) + { + unsigned short* t = &polys[i*vertsPerPoly*2]; + for (int j = 0; j < vertsPerPoly; ++j) + { + unsigned short v0 = t[j]; + unsigned short v1 = (j+1 >= vertsPerPoly || t[j+1] == RC_MESH_NULL_IDX) ? t[0] : t[j+1]; + if (v0 < v1) + { + rcEdge& edge = edges[edgeCount]; + edge.vert[0] = v0; + edge.vert[1] = v1; + edge.poly[0] = (unsigned short)i; + edge.polyEdge[0] = (unsigned short)j; + edge.poly[1] = (unsigned short)i; + edge.polyEdge[1] = 0; + // Insert edge + nextEdge[edgeCount] = firstEdge[v0]; + firstEdge[v0] = (unsigned short)edgeCount; + edgeCount++; + } + } + } + + for (int i = 0; i < npolys; ++i) + { + unsigned short* t = &polys[i*vertsPerPoly*2]; + for (int j = 0; j < vertsPerPoly; ++j) + { + unsigned short v0 = t[j]; + unsigned short v1 = (j+1 >= vertsPerPoly || t[j+1] == RC_MESH_NULL_IDX) ? t[0] : t[j+1]; + if (v0 > v1) + { + for (unsigned short e = firstEdge[v1]; e != RC_MESH_NULL_IDX; e = nextEdge[e]) + { + rcEdge& edge = edges[e]; + if (edge.vert[1] == v0 && edge.poly[0] == edge.poly[1]) + { + edge.poly[1] = (unsigned short)i; + edge.polyEdge[1] = (unsigned short)j; + break; + } + } + } + } + } + + // Store adjacency + for (int i = 0; i < edgeCount; ++i) + { + const rcEdge& e = edges[i]; + if (e.poly[0] != e.poly[1]) + { + unsigned short* p0 = &polys[e.poly[0]*vertsPerPoly*2]; + unsigned short* p1 = &polys[e.poly[1]*vertsPerPoly*2]; + p0[vertsPerPoly + e.polyEdge[0]] = e.poly[1]; + p1[vertsPerPoly + e.polyEdge[1]] = e.poly[0]; + } + } + + rcFree(firstEdge); + rcFree(edges); + + return true; +} + + +static const int VERTEX_BUCKET_COUNT = (1<<12); + +inline int computeVertexHash(int x, int y, int z) +{ + const unsigned int h1 = 0x8da6b343; // Large multiplicative constants; + const unsigned int h2 = 0xd8163841; // here arbitrarily chosen primes + const unsigned int h3 = 0xcb1ab31f; + unsigned int n = h1 * x + h2 * y + h3 * z; + return (int)(n & (VERTEX_BUCKET_COUNT-1)); +} + +static unsigned short addVertex(unsigned short x, unsigned short y, unsigned short z, + unsigned short* verts, int* firstVert, int* nextVert, int& nv) +{ + int bucket = computeVertexHash(x, 0, z); + int i = firstVert[bucket]; + + while (i != -1) + { + const unsigned short* v = &verts[i*3]; + if (v[0] == x && (rcAbs(v[1] - y) <= 2) && v[2] == z) + return (unsigned short)i; + i = nextVert[i]; // next + } + + // Could not find, create new. + i = nv; nv++; + unsigned short* v = &verts[i*3]; + v[0] = x; + v[1] = y; + v[2] = z; + nextVert[i] = firstVert[bucket]; + firstVert[bucket] = i; + + return (unsigned short)i; +} + +inline int prev(int i, int n) { return i-1 >= 0 ? i-1 : n-1; } +inline int next(int i, int n) { return i+1 < n ? i+1 : 0; } + +inline int area2(const int* a, const int* b, const int* c) +{ + return (b[0] - a[0]) * (c[2] - a[2]) - (c[0] - a[0]) * (b[2] - a[2]); +} + +// Exclusive or: true iff exactly one argument is true. +// The arguments are negated to ensure that they are 0/1 +// values. Then the bitwise Xor operator may apply. +// (This idea is due to Michael Baldwin.) +inline bool xorb(bool x, bool y) +{ + return !x ^ !y; +} + +// Returns true iff c is strictly to the left of the directed +// line through a to b. +inline bool left(const int* a, const int* b, const int* c) +{ + return area2(a, b, c) < 0; +} + +inline bool leftOn(const int* a, const int* b, const int* c) +{ + return area2(a, b, c) <= 0; +} + +inline bool collinear(const int* a, const int* b, const int* c) +{ + return area2(a, b, c) == 0; +} + +// Returns true iff ab properly intersects cd: they share +// a point interior to both segments. The properness of the +// intersection is ensured by using strict leftness. +bool intersectProp(const int* a, const int* b, const int* c, const int* d) +{ + // Eliminate improper cases. + if (collinear(a,b,c) || collinear(a,b,d) || + collinear(c,d,a) || collinear(c,d,b)) + return false; + + return xorb(left(a,b,c), left(a,b,d)) && xorb(left(c,d,a), left(c,d,b)); +} + +// Returns T iff (a,b,c) are collinear and point c lies +// on the closed segement ab. +static bool between(const int* a, const int* b, const int* c) +{ + if (!collinear(a, b, c)) + return false; + // If ab not vertical, check betweenness on x; else on y. + if (a[0] != b[0]) + return ((a[0] <= c[0]) && (c[0] <= b[0])) || ((a[0] >= c[0]) && (c[0] >= b[0])); + else + return ((a[2] <= c[2]) && (c[2] <= b[2])) || ((a[2] >= c[2]) && (c[2] >= b[2])); +} + +// Returns true iff segments ab and cd intersect, properly or improperly. +static bool intersect(const int* a, const int* b, const int* c, const int* d) +{ + if (intersectProp(a, b, c, d)) + return true; + else if (between(a, b, c) || between(a, b, d) || + between(c, d, a) || between(c, d, b)) + return true; + else + return false; +} + +static bool vequal(const int* a, const int* b) +{ + return a[0] == b[0] && a[2] == b[2]; +} + +// Returns T iff (v_i, v_j) is a proper internal *or* external +// diagonal of P, *ignoring edges incident to v_i and v_j*. +static bool diagonalie(int i, int j, int n, const int* verts, int* indices) +{ + const int* d0 = &verts[(indices[i] & 0x0fffffff) * 4]; + const int* d1 = &verts[(indices[j] & 0x0fffffff) * 4]; + + // For each edge (k,k+1) of P + for (int k = 0; k < n; k++) + { + int k1 = next(k, n); + // Skip edges incident to i or j + if (!((k == i) || (k1 == i) || (k == j) || (k1 == j))) + { + const int* p0 = &verts[(indices[k] & 0x0fffffff) * 4]; + const int* p1 = &verts[(indices[k1] & 0x0fffffff) * 4]; + + if (vequal(d0, p0) || vequal(d1, p0) || vequal(d0, p1) || vequal(d1, p1)) + continue; + + if (intersect(d0, d1, p0, p1)) + return false; + } + } + return true; +} + +// Returns true iff the diagonal (i,j) is strictly internal to the +// polygon P in the neighborhood of the i endpoint. +static bool inCone(int i, int j, int n, const int* verts, int* indices) +{ + const int* pi = &verts[(indices[i] & 0x0fffffff) * 4]; + const int* pj = &verts[(indices[j] & 0x0fffffff) * 4]; + const int* pi1 = &verts[(indices[next(i, n)] & 0x0fffffff) * 4]; + const int* pin1 = &verts[(indices[prev(i, n)] & 0x0fffffff) * 4]; + + // If P[i] is a convex vertex [ i+1 left or on (i-1,i) ]. + if (leftOn(pin1, pi, pi1)) + return left(pi, pj, pin1) && left(pj, pi, pi1); + // Assume (i-1,i,i+1) not collinear. + // else P[i] is reflex. + return !(leftOn(pi, pj, pi1) && leftOn(pj, pi, pin1)); +} + +// Returns T iff (v_i, v_j) is a proper internal +// diagonal of P. +static bool diagonal(int i, int j, int n, const int* verts, int* indices) +{ + return inCone(i, j, n, verts, indices) && diagonalie(i, j, n, verts, indices); +} + +static int triangulate(int n, const int* verts, int* indices, int* tris) +{ + int ntris = 0; + int* dst = tris; + + // The last bit of the index is used to indicate if the vertex can be removed. + for (int i = 0; i < n; i++) + { + int i1 = next(i, n); + int i2 = next(i1, n); + if (diagonal(i, i2, n, verts, indices)) + indices[i1] |= 0x80000000; + } + + while (n > 3) + { + int minLen = -1; + int mini = -1; + for (int i = 0; i < n; i++) + { + int i1 = next(i, n); + if (indices[i1] & 0x80000000) + { + const int* p0 = &verts[(indices[i] & 0x0fffffff) * 4]; + const int* p2 = &verts[(indices[next(i1, n)] & 0x0fffffff) * 4]; + + int dx = p2[0] - p0[0]; + int dy = p2[2] - p0[2]; + int len = dx*dx + dy*dy; + + if (minLen < 0 || len < minLen) + { + minLen = len; + mini = i; + } + } + } + + if (mini == -1) + { + // Should not happen. +/* printf("mini == -1 ntris=%d n=%d\n", ntris, n); + for (int i = 0; i < n; i++) + { + printf("%d ", indices[i] & 0x0fffffff); + } + printf("\n");*/ + return -ntris; + } + + int i = mini; + int i1 = next(i, n); + int i2 = next(i1, n); + + *dst++ = indices[i] & 0x0fffffff; + *dst++ = indices[i1] & 0x0fffffff; + *dst++ = indices[i2] & 0x0fffffff; + ntris++; + + // Removes P[i1] by copying P[i+1]...P[n-1] left one index. + n--; + for (int k = i1; k < n; k++) + indices[k] = indices[k+1]; + + if (i1 >= n) i1 = 0; + i = prev(i1,n); + // Update diagonal flags. + if (diagonal(prev(i, n), i1, n, verts, indices)) + indices[i] |= 0x80000000; + else + indices[i] &= 0x0fffffff; + + if (diagonal(i, next(i1, n), n, verts, indices)) + indices[i1] |= 0x80000000; + else + indices[i1] &= 0x0fffffff; + } + + // Append the remaining triangle. + *dst++ = indices[0] & 0x0fffffff; + *dst++ = indices[1] & 0x0fffffff; + *dst++ = indices[2] & 0x0fffffff; + ntris++; + + return ntris; +} + +static int countPolyVerts(const unsigned short* p, const int nvp) +{ + for (int i = 0; i < nvp; ++i) + if (p[i] == RC_MESH_NULL_IDX) + return i; + return nvp; +} + +inline bool uleft(const unsigned short* a, const unsigned short* b, const unsigned short* c) +{ + return ((int)b[0] - (int)a[0]) * ((int)c[2] - (int)a[2]) - + ((int)c[0] - (int)a[0]) * ((int)b[2] - (int)a[2]) < 0; +} + +static int getPolyMergeValue(unsigned short* pa, unsigned short* pb, + const unsigned short* verts, int& ea, int& eb, + const int nvp) +{ + const int na = countPolyVerts(pa, nvp); + const int nb = countPolyVerts(pb, nvp); + + // If the merged polygon would be too big, do not merge. + if (na+nb-2 > nvp) + return -1; + + // Check if the polygons share an edge. + ea = -1; + eb = -1; + + for (int i = 0; i < na; ++i) + { + unsigned short va0 = pa[i]; + unsigned short va1 = pa[(i+1) % na]; + if (va0 > va1) + rcSwap(va0, va1); + for (int j = 0; j < nb; ++j) + { + unsigned short vb0 = pb[j]; + unsigned short vb1 = pb[(j+1) % nb]; + if (vb0 > vb1) + rcSwap(vb0, vb1); + if (va0 == vb0 && va1 == vb1) + { + ea = i; + eb = j; + break; + } + } + } + + // No common edge, cannot merge. + if (ea == -1 || eb == -1) + return -1; + + // Check to see if the merged polygon would be convex. + unsigned short va, vb, vc; + + va = pa[(ea+na-1) % na]; + vb = pa[ea]; + vc = pb[(eb+2) % nb]; + if (!uleft(&verts[va*3], &verts[vb*3], &verts[vc*3])) + return -1; + + va = pb[(eb+nb-1) % nb]; + vb = pb[eb]; + vc = pa[(ea+2) % na]; + if (!uleft(&verts[va*3], &verts[vb*3], &verts[vc*3])) + return -1; + + va = pa[ea]; + vb = pa[(ea+1)%na]; + + int dx = (int)verts[va*3+0] - (int)verts[vb*3+0]; + int dy = (int)verts[va*3+2] - (int)verts[vb*3+2]; + + return dx*dx + dy*dy; +} + +static void mergePolys(unsigned short* pa, unsigned short* pb, int ea, int eb, + unsigned short* tmp, const int nvp) +{ + const int na = countPolyVerts(pa, nvp); + const int nb = countPolyVerts(pb, nvp); + + // Merge polygons. + memset(tmp, 0xff, sizeof(unsigned short)*nvp); + int n = 0; + // Add pa + for (int i = 0; i < na-1; ++i) + tmp[n++] = pa[(ea+1+i) % na]; + // Add pb + for (int i = 0; i < nb-1; ++i) + tmp[n++] = pb[(eb+1+i) % nb]; + + memcpy(pa, tmp, sizeof(unsigned short)*nvp); +} + +static void pushFront(int v, int* arr, int& an) +{ + an++; + for (int i = an-1; i > 0; --i) arr[i] = arr[i-1]; + arr[0] = v; +} + +static void pushBack(int v, int* arr, int& an) +{ + arr[an] = v; + an++; +} + +static bool canRemoveVertex(rcContext* ctx, rcPolyMesh& mesh, const unsigned short rem) +{ + const int nvp = mesh.nvp; + + // Count number of polygons to remove. + int numRemovedVerts = 0; + int numTouchedVerts = 0; + int numRemainingEdges = 0; + for (int i = 0; i < mesh.npolys; ++i) + { + unsigned short* p = &mesh.polys[i*nvp*2]; + const int nv = countPolyVerts(p, nvp); + int numRemoved = 0; + int numVerts = 0; + for (int j = 0; j < nv; ++j) + { + if (p[j] == rem) + { + numTouchedVerts++; + numRemoved++; + } + numVerts++; + } + if (numRemoved) + { + numRemovedVerts += numRemoved; + numRemainingEdges += numVerts-(numRemoved+1); + } + } + + // There would be too few edges remaining to create a polygon. + // This can happen for example when a tip of a triangle is marked + // as deletion, but there are no other polys that share the vertex. + // In this case, the vertex should not be removed. + if (numRemainingEdges <= 2) + return false; + + // Find edges which share the removed vertex. + const int maxEdges = numTouchedVerts*2; + int nedges = 0; + rcScopedDelete edges = (int*)rcAlloc(sizeof(int)*maxEdges*3, RC_ALLOC_TEMP); + if (!edges) + { + ctx->log(RC_LOG_WARNING, "canRemoveVertex: Out of memory 'edges' (%d).", maxEdges*3); + return false; + } + + for (int i = 0; i < mesh.npolys; ++i) + { + unsigned short* p = &mesh.polys[i*nvp*2]; + const int nv = countPolyVerts(p, nvp); + + // Collect edges which touches the removed vertex. + for (int j = 0, k = nv-1; j < nv; k = j++) + { + if (p[j] == rem || p[k] == rem) + { + // Arrange edge so that a=rem. + int a = p[j], b = p[k]; + if (b == rem) + rcSwap(a,b); + + // Check if the edge exists + bool exists = false; + for (int k = 0; k < nedges; ++k) + { + int* e = &edges[k*3]; + if (e[1] == b) + { + // Exists, increment vertex share count. + e[2]++; + exists = true; + } + } + // Add new edge. + if (!exists) + { + int* e = &edges[nedges*3]; + e[0] = a; + e[1] = b; + e[2] = 1; + nedges++; + } + } + } + } + + // There should be no more than 2 open edges. + // This catches the case that two non-adjacent polygons + // share the removed vertex. In that case, do not remove the vertex. + int numOpenEdges = 0; + for (int i = 0; i < nedges; ++i) + { + if (edges[i*3+2] < 2) + numOpenEdges++; + } + if (numOpenEdges > 2) + return false; + + return true; +} + +static bool removeVertex(rcContext* ctx, rcPolyMesh& mesh, const unsigned short rem, const int maxTris) +{ + const int nvp = mesh.nvp; + + // Count number of polygons to remove. + int numRemovedVerts = 0; + for (int i = 0; i < mesh.npolys; ++i) + { + unsigned short* p = &mesh.polys[i*nvp*2]; + const int nv = countPolyVerts(p, nvp); + for (int j = 0; j < nv; ++j) + { + if (p[j] == rem) + numRemovedVerts++; + } + } + + int nedges = 0; + rcScopedDelete edges = (int*)rcAlloc(sizeof(int)*numRemovedVerts*nvp*4, RC_ALLOC_TEMP); + if (!edges) + { + ctx->log(RC_LOG_WARNING, "removeVertex: Out of memory 'edges' (%d).", numRemovedVerts*nvp*4); + return false; + } + + int nhole = 0; + rcScopedDelete hole = (int*)rcAlloc(sizeof(int)*numRemovedVerts*nvp, RC_ALLOC_TEMP); + if (!hole) + { + ctx->log(RC_LOG_WARNING, "removeVertex: Out of memory 'hole' (%d).", numRemovedVerts*nvp); + return false; + } + + int nhreg = 0; + rcScopedDelete hreg = (int*)rcAlloc(sizeof(int)*numRemovedVerts*nvp, RC_ALLOC_TEMP); + if (!hreg) + { + ctx->log(RC_LOG_WARNING, "removeVertex: Out of memory 'hreg' (%d).", numRemovedVerts*nvp); + return false; + } + + int nharea = 0; + rcScopedDelete harea = (int*)rcAlloc(sizeof(int)*numRemovedVerts*nvp, RC_ALLOC_TEMP); + if (!harea) + { + ctx->log(RC_LOG_WARNING, "removeVertex: Out of memory 'harea' (%d).", numRemovedVerts*nvp); + return false; + } + + for (int i = 0; i < mesh.npolys; ++i) + { + unsigned short* p = &mesh.polys[i*nvp*2]; + const int nv = countPolyVerts(p, nvp); + bool hasRem = false; + for (int j = 0; j < nv; ++j) + if (p[j] == rem) hasRem = true; + if (hasRem) + { + // Collect edges which does not touch the removed vertex. + for (int j = 0, k = nv-1; j < nv; k = j++) + { + if (p[j] != rem && p[k] != rem) + { + int* e = &edges[nedges*4]; + e[0] = p[k]; + e[1] = p[j]; + e[2] = mesh.regs[i]; + e[3] = mesh.areas[i]; + nedges++; + } + } + // Remove the polygon. + unsigned short* p2 = &mesh.polys[(mesh.npolys-1)*nvp*2]; + memcpy(p,p2,sizeof(unsigned short)*nvp); + memset(p+nvp,0xff,sizeof(unsigned short)*nvp); + mesh.regs[i] = mesh.regs[mesh.npolys-1]; + mesh.areas[i] = mesh.areas[mesh.npolys-1]; + mesh.npolys--; + --i; + } + } + + // Remove vertex. + for (int i = (int)rem; i < mesh.nverts; ++i) + { + mesh.verts[i*3+0] = mesh.verts[(i+1)*3+0]; + mesh.verts[i*3+1] = mesh.verts[(i+1)*3+1]; + mesh.verts[i*3+2] = mesh.verts[(i+1)*3+2]; + } + mesh.nverts--; + + // Adjust indices to match the removed vertex layout. + for (int i = 0; i < mesh.npolys; ++i) + { + unsigned short* p = &mesh.polys[i*nvp*2]; + const int nv = countPolyVerts(p, nvp); + for (int j = 0; j < nv; ++j) + if (p[j] > rem) p[j]--; + } + for (int i = 0; i < nedges; ++i) + { + if (edges[i*4+0] > rem) edges[i*4+0]--; + if (edges[i*4+1] > rem) edges[i*4+1]--; + } + + if (nedges == 0) + return true; + + // Start with one vertex, keep appending connected + // segments to the start and end of the hole. + pushBack(edges[0], hole, nhole); + pushBack(edges[2], hreg, nhreg); + pushBack(edges[3], harea, nharea); + + while (nedges) + { + bool match = false; + + for (int i = 0; i < nedges; ++i) + { + const int ea = edges[i*4+0]; + const int eb = edges[i*4+1]; + const int r = edges[i*4+2]; + const int a = edges[i*4+3]; + bool add = false; + if (hole[0] == eb) + { + // The segment matches the beginning of the hole boundary. + pushFront(ea, hole, nhole); + pushFront(r, hreg, nhreg); + pushFront(a, harea, nharea); + add = true; + } + else if (hole[nhole-1] == ea) + { + // The segment matches the end of the hole boundary. + pushBack(eb, hole, nhole); + pushBack(r, hreg, nhreg); + pushBack(a, harea, nharea); + add = true; + } + if (add) + { + // The edge segment was added, remove it. + edges[i*4+0] = edges[(nedges-1)*4+0]; + edges[i*4+1] = edges[(nedges-1)*4+1]; + edges[i*4+2] = edges[(nedges-1)*4+2]; + edges[i*4+3] = edges[(nedges-1)*4+3]; + --nedges; + match = true; + --i; + } + } + + if (!match) + break; + } + + rcScopedDelete tris = (int*)rcAlloc(sizeof(int)*nhole*3, RC_ALLOC_TEMP); + if (!tris) + { + ctx->log(RC_LOG_WARNING, "removeVertex: Out of memory 'tris' (%d).", nhole*3); + return false; + } + + rcScopedDelete tverts = (int*)rcAlloc(sizeof(int)*nhole*4, RC_ALLOC_TEMP); + if (!tverts) + { + ctx->log(RC_LOG_WARNING, "removeVertex: Out of memory 'tverts' (%d).", nhole*4); + return false; + } + + rcScopedDelete thole = (int*)rcAlloc(sizeof(int)*nhole, RC_ALLOC_TEMP); + if (!tverts) + { + ctx->log(RC_LOG_WARNING, "removeVertex: Out of memory 'thole' (%d).", nhole); + return false; + } + + // Generate temp vertex array for triangulation. + for (int i = 0; i < nhole; ++i) + { + const int pi = hole[i]; + tverts[i*4+0] = mesh.verts[pi*3+0]; + tverts[i*4+1] = mesh.verts[pi*3+1]; + tverts[i*4+2] = mesh.verts[pi*3+2]; + tverts[i*4+3] = 0; + thole[i] = i; + } + + // Triangulate the hole. + int ntris = triangulate(nhole, &tverts[0], &thole[0], tris); + if (ntris < 0) + { + ntris = -ntris; + ctx->log(RC_LOG_WARNING, "removeVertex: triangulate() returned bad results."); + } + + // Merge the hole triangles back to polygons. + rcScopedDelete polys = (unsigned short*)rcAlloc(sizeof(unsigned short)*(ntris+1)*nvp, RC_ALLOC_TEMP); + if (!polys) + { + ctx->log(RC_LOG_ERROR, "removeVertex: Out of memory 'polys' (%d).", (ntris+1)*nvp); + return false; + } + rcScopedDelete pregs = (unsigned short*)rcAlloc(sizeof(unsigned short)*ntris, RC_ALLOC_TEMP); + if (!pregs) + { + ctx->log(RC_LOG_ERROR, "removeVertex: Out of memory 'pregs' (%d).", ntris); + return false; + } + rcScopedDelete pareas = (unsigned char*)rcAlloc(sizeof(unsigned char)*ntris, RC_ALLOC_TEMP); + if (!pregs) + { + ctx->log(RC_LOG_ERROR, "removeVertex: Out of memory 'pareas' (%d).", ntris); + return false; + } + + unsigned short* tmpPoly = &polys[ntris*nvp]; + + // Build initial polygons. + int npolys = 0; + memset(polys, 0xff, ntris*nvp*sizeof(unsigned short)); + for (int j = 0; j < ntris; ++j) + { + int* t = &tris[j*3]; + if (t[0] != t[1] && t[0] != t[2] && t[1] != t[2]) + { + polys[npolys*nvp+0] = (unsigned short)hole[t[0]]; + polys[npolys*nvp+1] = (unsigned short)hole[t[1]]; + polys[npolys*nvp+2] = (unsigned short)hole[t[2]]; + pregs[npolys] = (unsigned short)hreg[t[0]]; + pareas[npolys] = (unsigned char)harea[t[0]]; + npolys++; + } + } + if (!npolys) + return true; + + // Merge polygons. + if (nvp > 3) + { + for (;;) + { + // Find best polygons to merge. + int bestMergeVal = 0; + int bestPa = 0, bestPb = 0, bestEa = 0, bestEb = 0; + + for (int j = 0; j < npolys-1; ++j) + { + unsigned short* pj = &polys[j*nvp]; + for (int k = j+1; k < npolys; ++k) + { + unsigned short* pk = &polys[k*nvp]; + int ea, eb; + int v = getPolyMergeValue(pj, pk, mesh.verts, ea, eb, nvp); + if (v > bestMergeVal) + { + bestMergeVal = v; + bestPa = j; + bestPb = k; + bestEa = ea; + bestEb = eb; + } + } + } + + if (bestMergeVal > 0) + { + // Found best, merge. + unsigned short* pa = &polys[bestPa*nvp]; + unsigned short* pb = &polys[bestPb*nvp]; + mergePolys(pa, pb, bestEa, bestEb, tmpPoly, nvp); + memcpy(pb, &polys[(npolys-1)*nvp], sizeof(unsigned short)*nvp); + pregs[bestPb] = pregs[npolys-1]; + pareas[bestPb] = pareas[npolys-1]; + npolys--; + } + else + { + // Could not merge any polygons, stop. + break; + } + } + } + + // Store polygons. + for (int i = 0; i < npolys; ++i) + { + if (mesh.npolys >= maxTris) break; + unsigned short* p = &mesh.polys[mesh.npolys*nvp*2]; + memset(p,0xff,sizeof(unsigned short)*nvp*2); + for (int j = 0; j < nvp; ++j) + p[j] = polys[i*nvp+j]; + mesh.regs[mesh.npolys] = pregs[i]; + mesh.areas[mesh.npolys] = pareas[i]; + mesh.npolys++; + if (mesh.npolys > maxTris) + { + ctx->log(RC_LOG_ERROR, "removeVertex: Too many polygons %d (max:%d).", mesh.npolys, maxTris); + return false; + } + } + + return true; +} + + +bool rcBuildPolyMesh(rcContext* ctx, rcContourSet& cset, int nvp, rcPolyMesh& mesh) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_BUILD_POLYMESH); + + rcVcopy(mesh.bmin, cset.bmin); + rcVcopy(mesh.bmax, cset.bmax); + mesh.cs = cset.cs; + mesh.ch = cset.ch; + + int maxVertices = 0; + int maxTris = 0; + int maxVertsPerCont = 0; + for (int i = 0; i < cset.nconts; ++i) + { + // Skip null contours. + if (cset.conts[i].nverts < 3) continue; + maxVertices += cset.conts[i].nverts; + maxTris += cset.conts[i].nverts - 2; + maxVertsPerCont = rcMax(maxVertsPerCont, cset.conts[i].nverts); + } + + if (maxVertices >= 0xfffe) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Too many vertices %d.", maxVertices); + return false; + } + + rcScopedDelete vflags = (unsigned char*)rcAlloc(sizeof(unsigned char)*maxVertices, RC_ALLOC_TEMP); + if (!vflags) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'mesh.verts' (%d).", maxVertices); + return false; + } + memset(vflags, 0, maxVertices); + + mesh.verts = (unsigned short*)rcAlloc(sizeof(unsigned short)*maxVertices*3, RC_ALLOC_PERM); + if (!mesh.verts) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'mesh.verts' (%d).", maxVertices); + return false; + } + mesh.polys = (unsigned short*)rcAlloc(sizeof(unsigned short)*maxTris*nvp*2*2, RC_ALLOC_PERM); + if (!mesh.polys) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'mesh.polys' (%d).", maxTris*nvp*2); + return false; + } + mesh.regs = (unsigned short*)rcAlloc(sizeof(unsigned short)*maxTris, RC_ALLOC_PERM); + if (!mesh.regs) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'mesh.regs' (%d).", maxTris); + return false; + } + mesh.areas = (unsigned char*)rcAlloc(sizeof(unsigned char)*maxTris, RC_ALLOC_PERM); + if (!mesh.areas) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'mesh.areas' (%d).", maxTris); + return false; + } + + mesh.nverts = 0; + mesh.npolys = 0; + mesh.nvp = nvp; + mesh.maxpolys = maxTris; + + memset(mesh.verts, 0, sizeof(unsigned short)*maxVertices*3); + memset(mesh.polys, 0xff, sizeof(unsigned short)*maxTris*nvp*2); + memset(mesh.regs, 0, sizeof(unsigned short)*maxTris); + memset(mesh.areas, 0, sizeof(unsigned char)*maxTris); + + rcScopedDelete nextVert = (int*)rcAlloc(sizeof(int)*maxVertices, RC_ALLOC_TEMP); + if (!nextVert) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'nextVert' (%d).", maxVertices); + return false; + } + memset(nextVert, 0, sizeof(int)*maxVertices); + + rcScopedDelete firstVert = (int*)rcAlloc(sizeof(int)*VERTEX_BUCKET_COUNT, RC_ALLOC_TEMP); + if (!firstVert) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'firstVert' (%d).", VERTEX_BUCKET_COUNT); + return false; + } + for (int i = 0; i < VERTEX_BUCKET_COUNT; ++i) + firstVert[i] = -1; + + rcScopedDelete indices = (int*)rcAlloc(sizeof(int)*maxVertsPerCont, RC_ALLOC_TEMP); + if (!indices) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'indices' (%d).", maxVertsPerCont); + return false; + } + rcScopedDelete tris = (int*)rcAlloc(sizeof(int)*maxVertsPerCont*3, RC_ALLOC_TEMP); + if (!tris) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'tris' (%d).", maxVertsPerCont*3); + return false; + } + rcScopedDelete polys = (unsigned short*)rcAlloc(sizeof(unsigned short)*(maxVertsPerCont+1)*nvp, RC_ALLOC_TEMP); + if (!polys) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'polys' (%d).", maxVertsPerCont*nvp); + return false; + } + unsigned short* tmpPoly = &polys[maxVertsPerCont*nvp]; + + for (int i = 0; i < cset.nconts; ++i) + { + rcContour& cont = cset.conts[i]; + + // Skip null contours. + if (cont.nverts < 3) + continue; + + // Triangulate contour + for (int j = 0; j < cont.nverts; ++j) + indices[j] = j; + + int ntris = triangulate(cont.nverts, cont.verts, &indices[0], &tris[0]); + if (ntris <= 0) + { + // Bad triangulation, should not happen. +/* printf("\tconst float bmin[3] = {%ff,%ff,%ff};\n", cset.bmin[0], cset.bmin[1], cset.bmin[2]); + printf("\tconst float cs = %ff;\n", cset.cs); + printf("\tconst float ch = %ff;\n", cset.ch); + printf("\tconst int verts[] = {\n"); + for (int k = 0; k < cont.nverts; ++k) + { + const int* v = &cont.verts[k*4]; + printf("\t\t%d,%d,%d,%d,\n", v[0], v[1], v[2], v[3]); + } + printf("\t};\n\tconst int nverts = sizeof(verts)/(sizeof(int)*4);\n");*/ + ctx->log(RC_LOG_WARNING, "rcBuildPolyMesh: Bad triangulation Contour %d.", i); + ntris = -ntris; + } + + // Add and merge vertices. + for (int j = 0; j < cont.nverts; ++j) + { + const int* v = &cont.verts[j*4]; + indices[j] = addVertex((unsigned short)v[0], (unsigned short)v[1], (unsigned short)v[2], + mesh.verts, firstVert, nextVert, mesh.nverts); + if (v[3] & RC_BORDER_VERTEX) + { + // This vertex should be removed. + vflags[indices[j]] = 1; + } + } + + // Build initial polygons. + int npolys = 0; + memset(polys, 0xff, maxVertsPerCont*nvp*sizeof(unsigned short)); + for (int j = 0; j < ntris; ++j) + { + int* t = &tris[j*3]; + if (t[0] != t[1] && t[0] != t[2] && t[1] != t[2]) + { + polys[npolys*nvp+0] = (unsigned short)indices[t[0]]; + polys[npolys*nvp+1] = (unsigned short)indices[t[1]]; + polys[npolys*nvp+2] = (unsigned short)indices[t[2]]; + npolys++; + } + } + if (!npolys) + continue; + + // Merge polygons. + if (nvp > 3) + { + for(;;) + { + // Find best polygons to merge. + int bestMergeVal = 0; + int bestPa = 0, bestPb = 0, bestEa = 0, bestEb = 0; + + for (int j = 0; j < npolys-1; ++j) + { + unsigned short* pj = &polys[j*nvp]; + for (int k = j+1; k < npolys; ++k) + { + unsigned short* pk = &polys[k*nvp]; + int ea, eb; + int v = getPolyMergeValue(pj, pk, mesh.verts, ea, eb, nvp); + if (v > bestMergeVal) + { + bestMergeVal = v; + bestPa = j; + bestPb = k; + bestEa = ea; + bestEb = eb; + } + } + } + + if (bestMergeVal > 0) + { + // Found best, merge. + unsigned short* pa = &polys[bestPa*nvp]; + unsigned short* pb = &polys[bestPb*nvp]; + mergePolys(pa, pb, bestEa, bestEb, tmpPoly, nvp); + memcpy(pb, &polys[(npolys-1)*nvp], sizeof(unsigned short)*nvp); + npolys--; + } + else + { + // Could not merge any polygons, stop. + break; + } + } + } + + // Store polygons. + for (int j = 0; j < npolys; ++j) + { + unsigned short* p = &mesh.polys[mesh.npolys*nvp*2]; + unsigned short* q = &polys[j*nvp]; + for (int k = 0; k < nvp; ++k) + p[k] = q[k]; + mesh.regs[mesh.npolys] = cont.reg; + mesh.areas[mesh.npolys] = cont.area; + mesh.npolys++; + if (mesh.npolys > maxTris) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Too many polygons %d (max:%d).", mesh.npolys, maxTris); + return false; + } + } + } + + + // Remove edge vertices. + for (int i = 0; i < mesh.nverts; ++i) + { + if (vflags[i]) + { + if (!canRemoveVertex(ctx, mesh, (unsigned short)i)) + continue; + if (!removeVertex(ctx, mesh, (unsigned short)i, maxTris)) + { + // Failed to remove vertex + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Failed to remove edge vertex %d.", i); + return false; + } + // Remove vertex + // Note: mesh.nverts is already decremented inside removeVertex()! + for (int j = i; j < mesh.nverts; ++j) + vflags[j] = vflags[j+1]; + --i; + } + } + + // Calculate adjacency. + if (!buildMeshAdjacency(mesh.polys, mesh.npolys, mesh.nverts, nvp)) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Adjacency failed."); + return false; + } + + // Just allocate the mesh flags array. The user is resposible to fill it. + mesh.flags = (unsigned short*)rcAlloc(sizeof(unsigned short)*mesh.npolys, RC_ALLOC_PERM); + if (!mesh.flags) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'mesh.flags' (%d).", mesh.npolys); + return false; + } + memset(mesh.flags, 0, sizeof(unsigned short) * mesh.npolys); + + if (mesh.nverts > 0xffff) + { + ctx->log(RC_LOG_ERROR, "rcMergePolyMeshes: The resulting mesh has too many vertices %d (max %d). Data can be corrupted.", mesh.nverts, 0xffff); + } + if (mesh.npolys > 0xffff) + { + ctx->log(RC_LOG_ERROR, "rcMergePolyMeshes: The resulting mesh has too many polygons %d (max %d). Data can be corrupted.", mesh.npolys, 0xffff); + } + + ctx->stopTimer(RC_TIMER_BUILD_POLYMESH); + + return true; +} + +bool rcMergePolyMeshes(rcContext* ctx, rcPolyMesh** meshes, const int nmeshes, rcPolyMesh& mesh) +{ + rcAssert(ctx); + + if (!nmeshes || !meshes) + return true; + + ctx->startTimer(RC_TIMER_MERGE_POLYMESH); + + mesh.nvp = meshes[0]->nvp; + mesh.cs = meshes[0]->cs; + mesh.ch = meshes[0]->ch; + rcVcopy(mesh.bmin, meshes[0]->bmin); + rcVcopy(mesh.bmax, meshes[0]->bmax); + + int maxVerts = 0; + int maxPolys = 0; + int maxVertsPerMesh = 0; + for (int i = 0; i < nmeshes; ++i) + { + rcVmin(mesh.bmin, meshes[i]->bmin); + rcVmax(mesh.bmax, meshes[i]->bmax); + maxVertsPerMesh = rcMax(maxVertsPerMesh, meshes[i]->nverts); + maxVerts += meshes[i]->nverts; + maxPolys += meshes[i]->npolys; + } + + mesh.nverts = 0; + mesh.verts = (unsigned short*)rcAlloc(sizeof(unsigned short)*maxVerts*3, RC_ALLOC_PERM); + if (!mesh.verts) + { + ctx->log(RC_LOG_ERROR, "rcMergePolyMeshes: Out of memory 'mesh.verts' (%d).", maxVerts*3); + return false; + } + + mesh.npolys = 0; + mesh.polys = (unsigned short*)rcAlloc(sizeof(unsigned short)*maxPolys*2*mesh.nvp, RC_ALLOC_PERM); + if (!mesh.polys) + { + ctx->log(RC_LOG_ERROR, "rcMergePolyMeshes: Out of memory 'mesh.polys' (%d).", maxPolys*2*mesh.nvp); + return false; + } + memset(mesh.polys, 0xff, sizeof(unsigned short)*maxPolys*2*mesh.nvp); + + mesh.regs = (unsigned short*)rcAlloc(sizeof(unsigned short)*maxPolys, RC_ALLOC_PERM); + if (!mesh.regs) + { + ctx->log(RC_LOG_ERROR, "rcMergePolyMeshes: Out of memory 'mesh.regs' (%d).", maxPolys); + return false; + } + memset(mesh.regs, 0, sizeof(unsigned short)*maxPolys); + + mesh.areas = (unsigned char*)rcAlloc(sizeof(unsigned char)*maxPolys, RC_ALLOC_PERM); + if (!mesh.areas) + { + ctx->log(RC_LOG_ERROR, "rcMergePolyMeshes: Out of memory 'mesh.areas' (%d).", maxPolys); + return false; + } + memset(mesh.areas, 0, sizeof(unsigned char)*maxPolys); + + mesh.flags = (unsigned short*)rcAlloc(sizeof(unsigned short)*maxPolys, RC_ALLOC_PERM); + if (!mesh.flags) + { + ctx->log(RC_LOG_ERROR, "rcMergePolyMeshes: Out of memory 'mesh.flags' (%d).", maxPolys); + return false; + } + memset(mesh.flags, 0, sizeof(unsigned short)*maxPolys); + + rcScopedDelete nextVert = (int*)rcAlloc(sizeof(int)*maxVerts, RC_ALLOC_TEMP); + if (!nextVert) + { + ctx->log(RC_LOG_ERROR, "rcMergePolyMeshes: Out of memory 'nextVert' (%d).", maxVerts); + return false; + } + memset(nextVert, 0, sizeof(int)*maxVerts); + + rcScopedDelete firstVert = (int*)rcAlloc(sizeof(int)*VERTEX_BUCKET_COUNT, RC_ALLOC_TEMP); + if (!firstVert) + { + ctx->log(RC_LOG_ERROR, "rcMergePolyMeshes: Out of memory 'firstVert' (%d).", VERTEX_BUCKET_COUNT); + return false; + } + for (int i = 0; i < VERTEX_BUCKET_COUNT; ++i) + firstVert[i] = -1; + + rcScopedDelete vremap = (unsigned short*)rcAlloc(sizeof(unsigned short)*maxVertsPerMesh, RC_ALLOC_PERM); + if (!vremap) + { + ctx->log(RC_LOG_ERROR, "rcMergePolyMeshes: Out of memory 'vremap' (%d).", maxVertsPerMesh); + return false; + } + memset(nextVert, 0, sizeof(int)*maxVerts); + + for (int i = 0; i < nmeshes; ++i) + { + const rcPolyMesh* pmesh = meshes[i]; + + const unsigned short ox = (unsigned short)floorf((pmesh->bmin[0]-mesh.bmin[0])/mesh.cs+0.5f); + const unsigned short oz = (unsigned short)floorf((pmesh->bmin[2]-mesh.bmin[2])/mesh.cs+0.5f); + + for (int j = 0; j < pmesh->nverts; ++j) + { + unsigned short* v = &pmesh->verts[j*3]; + vremap[j] = addVertex(v[0]+ox, v[1], v[2]+oz, + mesh.verts, firstVert, nextVert, mesh.nverts); + } + + for (int j = 0; j < pmesh->npolys; ++j) + { + unsigned short* tgt = &mesh.polys[mesh.npolys*2*mesh.nvp]; + unsigned short* src = &pmesh->polys[j*2*mesh.nvp]; + mesh.regs[mesh.npolys] = pmesh->regs[j]; + mesh.areas[mesh.npolys] = pmesh->areas[j]; + mesh.flags[mesh.npolys] = pmesh->flags[j]; + mesh.npolys++; + for (int k = 0; k < mesh.nvp; ++k) + { + if (src[k] == RC_MESH_NULL_IDX) break; + tgt[k] = vremap[src[k]]; + } + } + } + + // Calculate adjacency. + if (!buildMeshAdjacency(mesh.polys, mesh.npolys, mesh.nverts, mesh.nvp)) + { + ctx->log(RC_LOG_ERROR, "rcMergePolyMeshes: Adjacency failed."); + return false; + } + + if (mesh.nverts > 0xffff) + { + ctx->log(RC_LOG_ERROR, "rcMergePolyMeshes: The resulting mesh has too many vertices %d (max %d). Data can be corrupted.", mesh.nverts, 0xffff); + } + if (mesh.npolys > 0xffff) + { + ctx->log(RC_LOG_ERROR, "rcMergePolyMeshes: The resulting mesh has too many polygons %d (max %d). Data can be corrupted.", mesh.npolys, 0xffff); + } + + ctx->stopTimer(RC_TIMER_MERGE_POLYMESH); + + return true; +} diff --git a/dep/recastnavigation/Recast/RecastMeshDetail.cpp b/dep/recastnavigation/Recast/RecastMeshDetail.cpp new file mode 100644 index 00000000000..ffb4b58ee9c --- /dev/null +++ b/dep/recastnavigation/Recast/RecastMeshDetail.cpp @@ -0,0 +1,1237 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#include +#define _USE_MATH_DEFINES +#include +#include +#include +#include +#include "Recast.h" +#include "RecastAlloc.h" +#include "RecastAssert.h" + + +static const unsigned RC_UNSET_HEIGHT = 0xffff; + +struct rcHeightPatch +{ + inline rcHeightPatch() : data(0), xmin(0), ymin(0), width(0), height(0) {} + inline ~rcHeightPatch() { rcFree(data); } + unsigned short* data; + int xmin, ymin, width, height; +}; + + +inline float vdot2(const float* a, const float* b) +{ + return a[0]*b[0] + a[2]*b[2]; +} + +inline float vdistSq2(const float* p, const float* q) +{ + const float dx = q[0] - p[0]; + const float dy = q[2] - p[2]; + return dx*dx + dy*dy; +} + +inline float vdist2(const float* p, const float* q) +{ + return sqrtf(vdistSq2(p,q)); +} + +inline float vcross2(const float* p1, const float* p2, const float* p3) +{ + const float u1 = p2[0] - p1[0]; + const float v1 = p2[2] - p1[2]; + const float u2 = p3[0] - p1[0]; + const float v2 = p3[2] - p1[2]; + return u1 * v2 - v1 * u2; +} + +static bool circumCircle(const float* p1, const float* p2, const float* p3, + float* c, float& r) +{ + static const float EPS = 1e-6f; + + const float cp = vcross2(p1, p2, p3); + if (fabsf(cp) > EPS) + { + const float p1Sq = vdot2(p1,p1); + const float p2Sq = vdot2(p2,p2); + const float p3Sq = vdot2(p3,p3); + c[0] = (p1Sq*(p2[2]-p3[2]) + p2Sq*(p3[2]-p1[2]) + p3Sq*(p1[2]-p2[2])) / (2*cp); + c[2] = (p1Sq*(p3[0]-p2[0]) + p2Sq*(p1[0]-p3[0]) + p3Sq*(p2[0]-p1[0])) / (2*cp); + r = vdist2(c, p1); + return true; + } + + c[0] = p1[0]; + c[2] = p1[2]; + r = 0; + return false; +} + +static float distPtTri(const float* p, const float* a, const float* b, const float* c) +{ + float v0[3], v1[3], v2[3]; + rcVsub(v0, c,a); + rcVsub(v1, b,a); + rcVsub(v2, p,a); + + const float dot00 = vdot2(v0, v0); + const float dot01 = vdot2(v0, v1); + const float dot02 = vdot2(v0, v2); + const float dot11 = vdot2(v1, v1); + const float dot12 = vdot2(v1, v2); + + // Compute barycentric coordinates + const float invDenom = 1.0f / (dot00 * dot11 - dot01 * dot01); + const float u = (dot11 * dot02 - dot01 * dot12) * invDenom; + float v = (dot00 * dot12 - dot01 * dot02) * invDenom; + + // If point lies inside the triangle, return interpolated y-coord. + static const float EPS = 1e-4f; + if (u >= -EPS && v >= -EPS && (u+v) <= 1+EPS) + { + const float y = a[1] + v0[1]*u + v1[1]*v; + return fabsf(y-p[1]); + } + return FLT_MAX; +} + +static float distancePtSeg(const float* pt, const float* p, const float* q) +{ + float pqx = q[0] - p[0]; + float pqy = q[1] - p[1]; + float pqz = q[2] - p[2]; + float dx = pt[0] - p[0]; + float dy = pt[1] - p[1]; + float dz = pt[2] - p[2]; + float d = pqx*pqx + pqy*pqy + pqz*pqz; + float t = pqx*dx + pqy*dy + pqz*dz; + if (d > 0) + t /= d; + if (t < 0) + t = 0; + else if (t > 1) + t = 1; + + dx = p[0] + t*pqx - pt[0]; + dy = p[1] + t*pqy - pt[1]; + dz = p[2] + t*pqz - pt[2]; + + return dx*dx + dy*dy + dz*dz; +} + +static float distancePtSeg2d(const float* pt, const float* p, const float* q) +{ + float pqx = q[0] - p[0]; + float pqz = q[2] - p[2]; + float dx = pt[0] - p[0]; + float dz = pt[2] - p[2]; + float d = pqx*pqx + pqz*pqz; + float t = pqx*dx + pqz*dz; + if (d > 0) + t /= d; + if (t < 0) + t = 0; + else if (t > 1) + t = 1; + + dx = p[0] + t*pqx - pt[0]; + dz = p[2] + t*pqz - pt[2]; + + return dx*dx + dz*dz; +} + +static float distToTriMesh(const float* p, const float* verts, const int /*nverts*/, const int* tris, const int ntris) +{ + float dmin = FLT_MAX; + for (int i = 0; i < ntris; ++i) + { + const float* va = &verts[tris[i*4+0]*3]; + const float* vb = &verts[tris[i*4+1]*3]; + const float* vc = &verts[tris[i*4+2]*3]; + float d = distPtTri(p, va,vb,vc); + if (d < dmin) + dmin = d; + } + if (dmin == FLT_MAX) return -1; + return dmin; +} + +static float distToPoly(int nvert, const float* verts, const float* p) +{ + + float dmin = FLT_MAX; + int i, j, c = 0; + for (i = 0, j = nvert-1; i < nvert; j = i++) + { + const float* vi = &verts[i*3]; + const float* vj = &verts[j*3]; + if (((vi[2] > p[2]) != (vj[2] > p[2])) && + (p[0] < (vj[0]-vi[0]) * (p[2]-vi[2]) / (vj[2]-vi[2]) + vi[0]) ) + c = !c; + dmin = rcMin(dmin, distancePtSeg2d(p, vj, vi)); + } + return c ? -dmin : dmin; +} + + +static unsigned short getHeight(const float fx, const float fy, const float fz, + const float /*cs*/, const float ics, const float ch, + const rcHeightPatch& hp) +{ + int ix = (int)floorf(fx*ics + 0.01f); + int iz = (int)floorf(fz*ics + 0.01f); + ix = rcClamp(ix-hp.xmin, 0, hp.width); + iz = rcClamp(iz-hp.ymin, 0, hp.height); + unsigned short h = hp.data[ix+iz*hp.width]; + if (h == RC_UNSET_HEIGHT) + { + // Special case when data might be bad. + // Find nearest neighbour pixel which has valid height. + const int off[8*2] = { -1,0, -1,-1, 0,-1, 1,-1, 1,0, 1,1, 0,1, -1,1}; + float dmin = FLT_MAX; + for (int i = 0; i < 8; ++i) + { + const int nx = ix+off[i*2+0]; + const int nz = iz+off[i*2+1]; + if (nx < 0 || nz < 0 || nx >= hp.width || nz >= hp.height) continue; + const unsigned short nh = hp.data[nx+nz*hp.width]; + if (nh == RC_UNSET_HEIGHT) continue; + + const float d = fabsf(nh*ch - fy); + if (d < dmin) + { + h = nh; + dmin = d; + } + +/* const float dx = (nx+0.5f)*cs - fx; + const float dz = (nz+0.5f)*cs - fz; + const float d = dx*dx+dz*dz; + if (d < dmin) + { + h = nh; + dmin = d; + } */ + } + } + return h; +} + + +enum EdgeValues +{ + UNDEF = -1, + HULL = -2, +}; + +static int findEdge(const int* edges, int nedges, int s, int t) +{ + for (int i = 0; i < nedges; i++) + { + const int* e = &edges[i*4]; + if ((e[0] == s && e[1] == t) || (e[0] == t && e[1] == s)) + return i; + } + return UNDEF; +} + +static int addEdge(rcContext* ctx, int* edges, int& nedges, const int maxEdges, int s, int t, int l, int r) +{ + if (nedges >= maxEdges) + { + ctx->log(RC_LOG_ERROR, "addEdge: Too many edges (%d/%d).", nedges, maxEdges); + return UNDEF; + } + + // Add edge if not already in the triangulation. + int e = findEdge(edges, nedges, s, t); + if (e == UNDEF) + { + int* e = &edges[nedges*4]; + e[0] = s; + e[1] = t; + e[2] = l; + e[3] = r; + return nedges++; + } + else + { + return UNDEF; + } +} + +static void updateLeftFace(int* e, int s, int t, int f) +{ + if (e[0] == s && e[1] == t && e[2] == UNDEF) + e[2] = f; + else if (e[1] == s && e[0] == t && e[3] == UNDEF) + e[3] = f; +} + +static int overlapSegSeg2d(const float* a, const float* b, const float* c, const float* d) +{ + const float a1 = vcross2(a, b, d); + const float a2 = vcross2(a, b, c); + if (a1*a2 < 0.0f) + { + float a3 = vcross2(c, d, a); + float a4 = a3 + a2 - a1; + if (a3 * a4 < 0.0f) + return 1; + } + return 0; +} + +static bool overlapEdges(const float* pts, const int* edges, int nedges, int s1, int t1) +{ + for (int i = 0; i < nedges; ++i) + { + const int s0 = edges[i*4+0]; + const int t0 = edges[i*4+1]; + // Same or connected edges do not overlap. + if (s0 == s1 || s0 == t1 || t0 == s1 || t0 == t1) + continue; + if (overlapSegSeg2d(&pts[s0*3],&pts[t0*3], &pts[s1*3],&pts[t1*3])) + return true; + } + return false; +} + +static void completeFacet(rcContext* ctx, const float* pts, int npts, int* edges, int& nedges, const int maxEdges, int& nfaces, int e) +{ + static const float EPS = 1e-5f; + + int* edge = &edges[e*4]; + + // Cache s and t. + int s,t; + if (edge[2] == UNDEF) + { + s = edge[0]; + t = edge[1]; + } + else if (edge[3] == UNDEF) + { + s = edge[1]; + t = edge[0]; + } + else + { + // Edge already completed. + return; + } + + // Find best point on left of edge. + int pt = npts; + float c[3] = {0,0,0}; + float r = -1; + for (int u = 0; u < npts; ++u) + { + if (u == s || u == t) continue; + if (vcross2(&pts[s*3], &pts[t*3], &pts[u*3]) > EPS) + { + if (r < 0) + { + // The circle is not updated yet, do it now. + pt = u; + circumCircle(&pts[s*3], &pts[t*3], &pts[u*3], c, r); + continue; + } + const float d = vdist2(c, &pts[u*3]); + const float tol = 0.001f; + if (d > r*(1+tol)) + { + // Outside current circumcircle, skip. + continue; + } + else if (d < r*(1-tol)) + { + // Inside safe circumcircle, update circle. + pt = u; + circumCircle(&pts[s*3], &pts[t*3], &pts[u*3], c, r); + } + else + { + // Inside epsilon circum circle, do extra tests to make sure the edge is valid. + // s-u and t-u cannot overlap with s-pt nor t-pt if they exists. + if (overlapEdges(pts, edges, nedges, s,u)) + continue; + if (overlapEdges(pts, edges, nedges, t,u)) + continue; + // Edge is valid. + pt = u; + circumCircle(&pts[s*3], &pts[t*3], &pts[u*3], c, r); + } + } + } + + // Add new triangle or update edge info if s-t is on hull. + if (pt < npts) + { + // Update face information of edge being completed. + updateLeftFace(&edges[e*4], s, t, nfaces); + + // Add new edge or update face info of old edge. + e = findEdge(edges, nedges, pt, s); + if (e == UNDEF) + addEdge(ctx, edges, nedges, maxEdges, pt, s, nfaces, UNDEF); + else + updateLeftFace(&edges[e*4], pt, s, nfaces); + + // Add new edge or update face info of old edge. + e = findEdge(edges, nedges, t, pt); + if (e == UNDEF) + addEdge(ctx, edges, nedges, maxEdges, t, pt, nfaces, UNDEF); + else + updateLeftFace(&edges[e*4], t, pt, nfaces); + + nfaces++; + } + else + { + updateLeftFace(&edges[e*4], s, t, HULL); + } +} + +static void delaunayHull(rcContext* ctx, const int npts, const float* pts, + const int nhull, const int* hull, + rcIntArray& tris, rcIntArray& edges) +{ + int nfaces = 0; + int nedges = 0; + const int maxEdges = npts*10; + edges.resize(maxEdges*4); + + for (int i = 0, j = nhull-1; i < nhull; j=i++) + addEdge(ctx, &edges[0], nedges, maxEdges, hull[j],hull[i], HULL, UNDEF); + + int currentEdge = 0; + while (currentEdge < nedges) + { + if (edges[currentEdge*4+2] == UNDEF) + completeFacet(ctx, pts, npts, &edges[0], nedges, maxEdges, nfaces, currentEdge); + if (edges[currentEdge*4+3] == UNDEF) + completeFacet(ctx, pts, npts, &edges[0], nedges, maxEdges, nfaces, currentEdge); + currentEdge++; + } + + // Create tris + tris.resize(nfaces*4); + for (int i = 0; i < nfaces*4; ++i) + tris[i] = -1; + + for (int i = 0; i < nedges; ++i) + { + const int* e = &edges[i*4]; + if (e[3] >= 0) + { + // Left face + int* t = &tris[e[3]*4]; + if (t[0] == -1) + { + t[0] = e[0]; + t[1] = e[1]; + } + else if (t[0] == e[1]) + t[2] = e[0]; + else if (t[1] == e[0]) + t[2] = e[1]; + } + if (e[2] >= 0) + { + // Right + int* t = &tris[e[2]*4]; + if (t[0] == -1) + { + t[0] = e[1]; + t[1] = e[0]; + } + else if (t[0] == e[0]) + t[2] = e[1]; + else if (t[1] == e[1]) + t[2] = e[0]; + } + } + + for (int i = 0; i < tris.size()/4; ++i) + { + int* t = &tris[i*4]; + if (t[0] == -1 || t[1] == -1 || t[2] == -1) + { + ctx->log(RC_LOG_WARNING, "delaunayHull: Removing dangling face %d [%d,%d,%d].", i, t[0],t[1],t[2]); + t[0] = tris[tris.size()-4]; + t[1] = tris[tris.size()-3]; + t[2] = tris[tris.size()-2]; + t[3] = tris[tris.size()-1]; + tris.resize(tris.size()-4); + --i; + } + } +} + + +inline float getJitterX(const int i) +{ + return (((i * 0x8da6b343) & 0xffff) / 65535.0f * 2.0f) - 1.0f; +} + +inline float getJitterY(const int i) +{ + return (((i * 0xd8163841) & 0xffff) / 65535.0f * 2.0f) - 1.0f; +} + +static bool buildPolyDetail(rcContext* ctx, const float* in, const int nin, + const float sampleDist, const float sampleMaxError, + const rcCompactHeightfield& chf, const rcHeightPatch& hp, + float* verts, int& nverts, rcIntArray& tris, + rcIntArray& edges, rcIntArray& samples) +{ + static const int MAX_VERTS = 127; + static const int MAX_TRIS = 255; // Max tris for delaunay is 2n-2-k (n=num verts, k=num hull verts). + static const int MAX_VERTS_PER_EDGE = 32; + float edge[(MAX_VERTS_PER_EDGE+1)*3]; + int hull[MAX_VERTS]; + int nhull = 0; + + nverts = 0; + + for (int i = 0; i < nin; ++i) + rcVcopy(&verts[i*3], &in[i*3]); + nverts = nin; + + const float cs = chf.cs; + const float ics = 1.0f/cs; + + // Tessellate outlines. + // This is done in separate pass in order to ensure + // seamless height values across the ply boundaries. + if (sampleDist > 0) + { + for (int i = 0, j = nin-1; i < nin; j=i++) + { + const float* vj = &in[j*3]; + const float* vi = &in[i*3]; + bool swapped = false; + // Make sure the segments are always handled in same order + // using lexological sort or else there will be seams. + if (fabsf(vj[0]-vi[0]) < 1e-6f) + { + if (vj[2] > vi[2]) + { + rcSwap(vj,vi); + swapped = true; + } + } + else + { + if (vj[0] > vi[0]) + { + rcSwap(vj,vi); + swapped = true; + } + } + // Create samples along the edge. + float dx = vi[0] - vj[0]; + float dy = vi[1] - vj[1]; + float dz = vi[2] - vj[2]; + float d = sqrtf(dx*dx + dz*dz); + int nn = 1 + (int)floorf(d/sampleDist); + if (nn >= MAX_VERTS_PER_EDGE) nn = MAX_VERTS_PER_EDGE-1; + if (nverts+nn >= MAX_VERTS) + nn = MAX_VERTS-1-nverts; + + for (int k = 0; k <= nn; ++k) + { + float u = (float)k/(float)nn; + float* pos = &edge[k*3]; + pos[0] = vj[0] + dx*u; + pos[1] = vj[1] + dy*u; + pos[2] = vj[2] + dz*u; + pos[1] = getHeight(pos[0],pos[1],pos[2], cs, ics, chf.ch, hp)*chf.ch; + } + // Simplify samples. + int idx[MAX_VERTS_PER_EDGE] = {0,nn}; + int nidx = 2; + for (int k = 0; k < nidx-1; ) + { + const int a = idx[k]; + const int b = idx[k+1]; + const float* va = &edge[a*3]; + const float* vb = &edge[b*3]; + // Find maximum deviation along the segment. + float maxd = 0; + int maxi = -1; + for (int m = a+1; m < b; ++m) + { + float d = distancePtSeg(&edge[m*3],va,vb); + if (d > maxd) + { + maxd = d; + maxi = m; + } + } + // If the max deviation is larger than accepted error, + // add new point, else continue to next segment. + if (maxi != -1 && maxd > rcSqr(sampleMaxError)) + { + for (int m = nidx; m > k; --m) + idx[m] = idx[m-1]; + idx[k+1] = maxi; + nidx++; + } + else + { + ++k; + } + } + + hull[nhull++] = j; + // Add new vertices. + if (swapped) + { + for (int k = nidx-2; k > 0; --k) + { + rcVcopy(&verts[nverts*3], &edge[idx[k]*3]); + hull[nhull++] = nverts; + nverts++; + } + } + else + { + for (int k = 1; k < nidx-1; ++k) + { + rcVcopy(&verts[nverts*3], &edge[idx[k]*3]); + hull[nhull++] = nverts; + nverts++; + } + } + } + } + + + // Tessellate the base mesh. + edges.resize(0); + tris.resize(0); + + delaunayHull(ctx, nverts, verts, nhull, hull, tris, edges); + + if (tris.size() == 0) + { + // Could not triangulate the poly, make sure there is some valid data there. + ctx->log(RC_LOG_WARNING, "buildPolyDetail: Could not triangulate polygon, adding default data."); + for (int i = 2; i < nverts; ++i) + { + tris.push(0); + tris.push(i-1); + tris.push(i); + tris.push(0); + } + return true; + } + + if (sampleDist > 0) + { + // Create sample locations in a grid. + float bmin[3], bmax[3]; + rcVcopy(bmin, in); + rcVcopy(bmax, in); + for (int i = 1; i < nin; ++i) + { + rcVmin(bmin, &in[i*3]); + rcVmax(bmax, &in[i*3]); + } + int x0 = (int)floorf(bmin[0]/sampleDist); + int x1 = (int)ceilf(bmax[0]/sampleDist); + int z0 = (int)floorf(bmin[2]/sampleDist); + int z1 = (int)ceilf(bmax[2]/sampleDist); + samples.resize(0); + for (int z = z0; z < z1; ++z) + { + for (int x = x0; x < x1; ++x) + { + float pt[3]; + pt[0] = x*sampleDist; + pt[1] = (bmax[1]+bmin[1])*0.5f; + pt[2] = z*sampleDist; + // Make sure the samples are not too close to the edges. + if (distToPoly(nin,in,pt) > -sampleDist/2) continue; + samples.push(x); + samples.push(getHeight(pt[0], pt[1], pt[2], cs, ics, chf.ch, hp)); + samples.push(z); + samples.push(0); // Not added + } + } + + // Add the samples starting from the one that has the most + // error. The procedure stops when all samples are added + // or when the max error is within treshold. + const int nsamples = samples.size()/4; + for (int iter = 0; iter < nsamples; ++iter) + { + if (nverts >= MAX_VERTS) + break; + + // Find sample with most error. + float bestpt[3] = {0,0,0}; + float bestd = 0; + int besti = -1; + for (int i = 0; i < nsamples; ++i) + { + const int* s = &samples[i*4]; + if (s[3]) continue; // skip added. + float pt[3]; + // The sample location is jittered to get rid of some bad triangulations + // which are cause by symmetrical data from the grid structure. + pt[0] = s[0]*sampleDist + getJitterX(i)*cs*0.1f; + pt[1] = s[1]*chf.ch; + pt[2] = s[2]*sampleDist + getJitterY(i)*cs*0.1f; + float d = distToTriMesh(pt, verts, nverts, &tris[0], tris.size()/4); + if (d < 0) continue; // did not hit the mesh. + if (d > bestd) + { + bestd = d; + besti = i; + rcVcopy(bestpt,pt); + } + } + // If the max error is within accepted threshold, stop tesselating. + if (bestd <= sampleMaxError || besti == -1) + break; + // Mark sample as added. + samples[besti*4+3] = 1; + // Add the new sample point. + rcVcopy(&verts[nverts*3],bestpt); + nverts++; + + // Create new triangulation. + // TODO: Incremental add instead of full rebuild. + edges.resize(0); + tris.resize(0); + delaunayHull(ctx, nverts, verts, nhull, hull, tris, edges); + } + } + + const int ntris = tris.size()/4; + if (ntris > MAX_TRIS) + { + tris.resize(MAX_TRIS*4); + ctx->log(RC_LOG_ERROR, "rcBuildPolyMeshDetail: Shrinking triangle count from %d to max %d.", ntris, MAX_TRIS); + } + + return true; +} + +static void getHeightData(const rcCompactHeightfield& chf, + const unsigned short* poly, const int npoly, + const unsigned short* verts, + rcHeightPatch& hp, rcIntArray& stack) +{ + // Floodfill the heightfield to get 2D height data, + // starting at vertex locations as seeds. + + memset(hp.data, 0, sizeof(unsigned short)*hp.width*hp.height); + + stack.resize(0); + + static const int offset[9*2] = + { + 0,0, -1,-1, 0,-1, 1,-1, 1,0, 1,1, 0,1, -1,1, -1,0, + }; + + // Use poly vertices as seed points for the flood fill. + for (int j = 0; j < npoly; ++j) + { + int cx = 0, cz = 0, ci =-1; + int dmin = RC_UNSET_HEIGHT; + for (int k = 0; k < 9; ++k) + { + const int ax = (int)verts[poly[j]*3+0] + offset[k*2+0]; + const int ay = (int)verts[poly[j]*3+1]; + const int az = (int)verts[poly[j]*3+2] + offset[k*2+1]; + if (ax < hp.xmin || ax >= hp.xmin+hp.width || + az < hp.ymin || az >= hp.ymin+hp.height) + continue; + + const rcCompactCell& c = chf.cells[ax+az*chf.width]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + const rcCompactSpan& s = chf.spans[i]; + int d = rcAbs(ay - (int)s.y); + if (d < dmin) + { + cx = ax; + cz = az; + ci = i; + dmin = d; + } + } + } + if (ci != -1) + { + stack.push(cx); + stack.push(cz); + stack.push(ci); + } + } + + // Find center of the polygon using flood fill. + int pcx = 0, pcz = 0; + for (int j = 0; j < npoly; ++j) + { + pcx += (int)verts[poly[j]*3+0]; + pcz += (int)verts[poly[j]*3+2]; + } + pcx /= npoly; + pcz /= npoly; + + for (int i = 0; i < stack.size(); i += 3) + { + int cx = stack[i+0]; + int cy = stack[i+1]; + int idx = cx-hp.xmin+(cy-hp.ymin)*hp.width; + hp.data[idx] = 1; + } + + while (stack.size() > 0) + { + int ci = stack.pop(); + int cy = stack.pop(); + int cx = stack.pop(); + + // Check if close to center of the polygon. + if (rcAbs(cx-pcx) <= 1 && rcAbs(cy-pcz) <= 1) + { + stack.resize(0); + stack.push(cx); + stack.push(cy); + stack.push(ci); + break; + } + + const rcCompactSpan& cs = chf.spans[ci]; + + for (int dir = 0; dir < 4; ++dir) + { + if (rcGetCon(cs, dir) == RC_NOT_CONNECTED) continue; + + const int ax = cx + rcGetDirOffsetX(dir); + const int ay = cy + rcGetDirOffsetY(dir); + + if (ax < hp.xmin || ax >= (hp.xmin+hp.width) || + ay < hp.ymin || ay >= (hp.ymin+hp.height)) + continue; + + if (hp.data[ax-hp.xmin+(ay-hp.ymin)*hp.width] != 0) + continue; + + const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(cs, dir); + + int idx = ax-hp.xmin+(ay-hp.ymin)*hp.width; + hp.data[idx] = 1; + + stack.push(ax); + stack.push(ay); + stack.push(ai); + } + } + + memset(hp.data, 0xff, sizeof(unsigned short)*hp.width*hp.height); + + // Mark start locations. + for (int i = 0; i < stack.size(); i += 3) + { + int cx = stack[i+0]; + int cy = stack[i+1]; + int ci = stack[i+2]; + int idx = cx-hp.xmin+(cy-hp.ymin)*hp.width; + const rcCompactSpan& cs = chf.spans[ci]; + hp.data[idx] = cs.y; + } + + static const int RETRACT_SIZE = 256; + int head = 0; + + while (head*3 < stack.size()) + { + int cx = stack[head*3+0]; + int cy = stack[head*3+1]; + int ci = stack[head*3+2]; + head++; + if (head >= RETRACT_SIZE) + { + head = 0; + if (stack.size() > RETRACT_SIZE*3) + memmove(&stack[0], &stack[RETRACT_SIZE*3], sizeof(int)*(stack.size()-RETRACT_SIZE*3)); + stack.resize(stack.size()-RETRACT_SIZE*3); + } + + const rcCompactSpan& cs = chf.spans[ci]; + for (int dir = 0; dir < 4; ++dir) + { + if (rcGetCon(cs, dir) == RC_NOT_CONNECTED) continue; + + const int ax = cx + rcGetDirOffsetX(dir); + const int ay = cy + rcGetDirOffsetY(dir); + + if (ax < hp.xmin || ax >= (hp.xmin+hp.width) || + ay < hp.ymin || ay >= (hp.ymin+hp.height)) + continue; + + if (hp.data[ax-hp.xmin+(ay-hp.ymin)*hp.width] != RC_UNSET_HEIGHT) + continue; + + const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(cs, dir); + + const rcCompactSpan& as = chf.spans[ai]; + int idx = ax-hp.xmin+(ay-hp.ymin)*hp.width; + hp.data[idx] = as.y; + + stack.push(ax); + stack.push(ay); + stack.push(ai); + } + } + +} + +static unsigned char getEdgeFlags(const float* va, const float* vb, + const float* vpoly, const int npoly) +{ + // Return true if edge (va,vb) is part of the polygon. + static const float thrSqr = rcSqr(0.001f); + for (int i = 0, j = npoly-1; i < npoly; j=i++) + { + if (distancePtSeg2d(va, &vpoly[j*3], &vpoly[i*3]) < thrSqr && + distancePtSeg2d(vb, &vpoly[j*3], &vpoly[i*3]) < thrSqr) + return 1; + } + return 0; +} + +static unsigned char getTriFlags(const float* va, const float* vb, const float* vc, + const float* vpoly, const int npoly) +{ + unsigned char flags = 0; + flags |= getEdgeFlags(va,vb,vpoly,npoly) << 0; + flags |= getEdgeFlags(vb,vc,vpoly,npoly) << 2; + flags |= getEdgeFlags(vc,va,vpoly,npoly) << 4; + return flags; +} + + + +bool rcBuildPolyMeshDetail(rcContext* ctx, const rcPolyMesh& mesh, const rcCompactHeightfield& chf, + const float sampleDist, const float sampleMaxError, + rcPolyMeshDetail& dmesh) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_BUILD_POLYMESHDETAIL); + + if (mesh.nverts == 0 || mesh.npolys == 0) + return true; + + const int nvp = mesh.nvp; + const float cs = mesh.cs; + const float ch = mesh.ch; + const float* orig = mesh.bmin; + + rcIntArray edges(64); + rcIntArray tris(512); + rcIntArray stack(512); + rcIntArray samples(512); + float verts[256*3]; + rcHeightPatch hp; + int nPolyVerts = 0; + int maxhw = 0, maxhh = 0; + + rcScopedDelete bounds = (int*)rcAlloc(sizeof(int)*mesh.npolys*4, RC_ALLOC_TEMP); + if (!bounds) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMeshDetail: Out of memory 'bounds' (%d).", mesh.npolys*4); + return false; + } + rcScopedDelete poly = (float*)rcAlloc(sizeof(float)*nvp*3, RC_ALLOC_TEMP); + if (!poly) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMeshDetail: Out of memory 'poly' (%d).", nvp*3); + return false; + } + + // Find max size for a polygon area. + for (int i = 0; i < mesh.npolys; ++i) + { + const unsigned short* p = &mesh.polys[i*nvp*2]; + int& xmin = bounds[i*4+0]; + int& xmax = bounds[i*4+1]; + int& ymin = bounds[i*4+2]; + int& ymax = bounds[i*4+3]; + xmin = chf.width; + xmax = 0; + ymin = chf.height; + ymax = 0; + for (int j = 0; j < nvp; ++j) + { + if(p[j] == RC_MESH_NULL_IDX) break; + const unsigned short* v = &mesh.verts[p[j]*3]; + xmin = rcMin(xmin, (int)v[0]); + xmax = rcMax(xmax, (int)v[0]); + ymin = rcMin(ymin, (int)v[2]); + ymax = rcMax(ymax, (int)v[2]); + nPolyVerts++; + } + xmin = rcMax(0,xmin-1); + xmax = rcMin(chf.width,xmax+1); + ymin = rcMax(0,ymin-1); + ymax = rcMin(chf.height,ymax+1); + if (xmin >= xmax || ymin >= ymax) continue; + maxhw = rcMax(maxhw, xmax-xmin); + maxhh = rcMax(maxhh, ymax-ymin); + } + + hp.data = (unsigned short*)rcAlloc(sizeof(unsigned short)*maxhw*maxhh, RC_ALLOC_TEMP); + if (!hp.data) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMeshDetail: Out of memory 'hp.data' (%d).", maxhw*maxhh); + return false; + } + + dmesh.nmeshes = mesh.npolys; + dmesh.nverts = 0; + dmesh.ntris = 0; + dmesh.meshes = (unsigned int*)rcAlloc(sizeof(unsigned int)*dmesh.nmeshes*4, RC_ALLOC_PERM); + if (!dmesh.meshes) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMeshDetail: Out of memory 'dmesh.meshes' (%d).", dmesh.nmeshes*4); + return false; + } + + int vcap = nPolyVerts+nPolyVerts/2; + int tcap = vcap*2; + + dmesh.nverts = 0; + dmesh.verts = (float*)rcAlloc(sizeof(float)*vcap*3, RC_ALLOC_PERM); + if (!dmesh.verts) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMeshDetail: Out of memory 'dmesh.verts' (%d).", vcap*3); + return false; + } + dmesh.ntris = 0; + dmesh.tris = (unsigned char*)rcAlloc(sizeof(unsigned char*)*tcap*4, RC_ALLOC_PERM); + if (!dmesh.tris) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMeshDetail: Out of memory 'dmesh.tris' (%d).", tcap*4); + return false; + } + + for (int i = 0; i < mesh.npolys; ++i) + { + const unsigned short* p = &mesh.polys[i*nvp*2]; + + // Store polygon vertices for processing. + int npoly = 0; + for (int j = 0; j < nvp; ++j) + { + if(p[j] == RC_MESH_NULL_IDX) break; + const unsigned short* v = &mesh.verts[p[j]*3]; + poly[j*3+0] = v[0]*cs; + poly[j*3+1] = v[1]*ch; + poly[j*3+2] = v[2]*cs; + npoly++; + } + + // Get the height data from the area of the polygon. + hp.xmin = bounds[i*4+0]; + hp.ymin = bounds[i*4+2]; + hp.width = bounds[i*4+1]-bounds[i*4+0]; + hp.height = bounds[i*4+3]-bounds[i*4+2]; + getHeightData(chf, p, npoly, mesh.verts, hp, stack); + + // Build detail mesh. + int nverts = 0; + if (!buildPolyDetail(ctx, poly, npoly, + sampleDist, sampleMaxError, + chf, hp, verts, nverts, tris, + edges, samples)) + { + return false; + } + + // Move detail verts to world space. + for (int j = 0; j < nverts; ++j) + { + verts[j*3+0] += orig[0]; + verts[j*3+1] += orig[1] + chf.ch; // Is this offset necessary? + verts[j*3+2] += orig[2]; + } + // Offset poly too, will be used to flag checking. + for (int j = 0; j < npoly; ++j) + { + poly[j*3+0] += orig[0]; + poly[j*3+1] += orig[1]; + poly[j*3+2] += orig[2]; + } + + // Store detail submesh. + const int ntris = tris.size()/4; + + dmesh.meshes[i*4+0] = (unsigned int)dmesh.nverts; + dmesh.meshes[i*4+1] = (unsigned int)nverts; + dmesh.meshes[i*4+2] = (unsigned int)dmesh.ntris; + dmesh.meshes[i*4+3] = (unsigned int)ntris; + + // Store vertices, allocate more memory if necessary. + if (dmesh.nverts+nverts > vcap) + { + while (dmesh.nverts+nverts > vcap) + vcap += 256; + + float* newv = (float*)rcAlloc(sizeof(float)*vcap*3, RC_ALLOC_PERM); + if (!newv) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMeshDetail: Out of memory 'newv' (%d).", vcap*3); + return false; + } + if (dmesh.nverts) + memcpy(newv, dmesh.verts, sizeof(float)*3*dmesh.nverts); + rcFree(dmesh.verts); + dmesh.verts = newv; + } + for (int j = 0; j < nverts; ++j) + { + dmesh.verts[dmesh.nverts*3+0] = verts[j*3+0]; + dmesh.verts[dmesh.nverts*3+1] = verts[j*3+1]; + dmesh.verts[dmesh.nverts*3+2] = verts[j*3+2]; + dmesh.nverts++; + } + + // Store triangles, allocate more memory if necessary. + if (dmesh.ntris+ntris > tcap) + { + while (dmesh.ntris+ntris > tcap) + tcap += 256; + unsigned char* newt = (unsigned char*)rcAlloc(sizeof(unsigned char)*tcap*4, RC_ALLOC_PERM); + if (!newt) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMeshDetail: Out of memory 'newt' (%d).", tcap*4); + return false; + } + if (dmesh.ntris) + memcpy(newt, dmesh.tris, sizeof(unsigned char)*4*dmesh.ntris); + rcFree(dmesh.tris); + dmesh.tris = newt; + } + for (int j = 0; j < ntris; ++j) + { + const int* t = &tris[j*4]; + dmesh.tris[dmesh.ntris*4+0] = (unsigned char)t[0]; + dmesh.tris[dmesh.ntris*4+1] = (unsigned char)t[1]; + dmesh.tris[dmesh.ntris*4+2] = (unsigned char)t[2]; + dmesh.tris[dmesh.ntris*4+3] = getTriFlags(&verts[t[0]*3], &verts[t[1]*3], &verts[t[2]*3], poly, npoly); + dmesh.ntris++; + } + } + + ctx->stopTimer(RC_TIMER_BUILD_POLYMESHDETAIL); + + return true; +} + +bool rcMergePolyMeshDetails(rcContext* ctx, rcPolyMeshDetail** meshes, const int nmeshes, rcPolyMeshDetail& mesh) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_MERGE_POLYMESHDETAIL); + + int maxVerts = 0; + int maxTris = 0; + int maxMeshes = 0; + + for (int i = 0; i < nmeshes; ++i) + { + if (!meshes[i]) continue; + maxVerts += meshes[i]->nverts; + maxTris += meshes[i]->ntris; + maxMeshes += meshes[i]->nmeshes; + } + + mesh.nmeshes = 0; + mesh.meshes = (unsigned int*)rcAlloc(sizeof(unsigned int)*maxMeshes*4, RC_ALLOC_PERM); + if (!mesh.meshes) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMeshDetail: Out of memory 'pmdtl.meshes' (%d).", maxMeshes*4); + return false; + } + + mesh.ntris = 0; + mesh.tris = (unsigned char*)rcAlloc(sizeof(unsigned char)*maxTris*4, RC_ALLOC_PERM); + if (!mesh.tris) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMeshDetail: Out of memory 'dmesh.tris' (%d).", maxTris*4); + return false; + } + + mesh.nverts = 0; + mesh.verts = (float*)rcAlloc(sizeof(float)*maxVerts*3, RC_ALLOC_PERM); + if (!mesh.verts) + { + ctx->log(RC_LOG_ERROR, "rcBuildPolyMeshDetail: Out of memory 'dmesh.verts' (%d).", maxVerts*3); + return false; + } + + // Merge datas. + for (int i = 0; i < nmeshes; ++i) + { + rcPolyMeshDetail* dm = meshes[i]; + if (!dm) continue; + for (int j = 0; j < dm->nmeshes; ++j) + { + unsigned int* dst = &mesh.meshes[mesh.nmeshes*4]; + unsigned int* src = &dm->meshes[j*4]; + dst[0] = (unsigned int)mesh.nverts+src[0]; + dst[1] = src[1]; + dst[2] = (unsigned int)mesh.ntris+src[2]; + dst[3] = src[3]; + mesh.nmeshes++; + } + + for (int k = 0; k < dm->nverts; ++k) + { + rcVcopy(&mesh.verts[mesh.nverts*3], &dm->verts[k*3]); + mesh.nverts++; + } + for (int k = 0; k < dm->ntris; ++k) + { + mesh.tris[mesh.ntris*4+0] = dm->tris[k*4+0]; + mesh.tris[mesh.ntris*4+1] = dm->tris[k*4+1]; + mesh.tris[mesh.ntris*4+2] = dm->tris[k*4+2]; + mesh.tris[mesh.ntris*4+3] = dm->tris[k*4+3]; + mesh.ntris++; + } + } + + ctx->stopTimer(RC_TIMER_MERGE_POLYMESHDETAIL); + + return true; +} + diff --git a/dep/recastnavigation/Recast/RecastRasterization.cpp b/dep/recastnavigation/Recast/RecastRasterization.cpp new file mode 100644 index 00000000000..71adfb67322 --- /dev/null +++ b/dep/recastnavigation/Recast/RecastRasterization.cpp @@ -0,0 +1,360 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#define _USE_MATH_DEFINES +#include +#include +#include "Recast.h" +#include "RecastAlloc.h" +#include "RecastAssert.h" + +inline bool overlapBounds(const float* amin, const float* amax, const float* bmin, const float* bmax) +{ + bool overlap = true; + overlap = (amin[0] > bmax[0] || amax[0] < bmin[0]) ? false : overlap; + overlap = (amin[1] > bmax[1] || amax[1] < bmin[1]) ? false : overlap; + overlap = (amin[2] > bmax[2] || amax[2] < bmin[2]) ? false : overlap; + return overlap; +} + +inline bool overlapInterval(unsigned short amin, unsigned short amax, + unsigned short bmin, unsigned short bmax) +{ + if (amax < bmin) return false; + if (amin > bmax) return false; + return true; +} + + +static rcSpan* allocSpan(rcHeightfield& hf) +{ + // If running out of memory, allocate new page and update the freelist. + if (!hf.freelist || !hf.freelist->next) + { + // Create new page. + // Allocate memory for the new pool. + rcSpanPool* pool = (rcSpanPool*)rcAlloc(sizeof(rcSpanPool), RC_ALLOC_PERM); + if (!pool) return 0; + pool->next = 0; + // Add the pool into the list of pools. + pool->next = hf.pools; + hf.pools = pool; + // Add new items to the free list. + rcSpan* freelist = hf.freelist; + rcSpan* head = &pool->items[0]; + rcSpan* it = &pool->items[RC_SPANS_PER_POOL]; + do + { + --it; + it->next = freelist; + freelist = it; + } + while (it != head); + hf.freelist = it; + } + + // Pop item from in front of the free list. + rcSpan* it = hf.freelist; + hf.freelist = hf.freelist->next; + return it; +} + +static void freeSpan(rcHeightfield& hf, rcSpan* ptr) +{ + if (!ptr) return; + // Add the node in front of the free list. + ptr->next = hf.freelist; + hf.freelist = ptr; +} + +static void addSpan(rcHeightfield& hf, const int x, const int y, + const unsigned short smin, const unsigned short smax, + const unsigned char area, const int flagMergeThr) +{ + + int idx = x + y*hf.width; + + rcSpan* s = allocSpan(hf); + s->smin = smin; + s->smax = smax; + s->area = area; + s->next = 0; + + // Empty cell, add he first span. + if (!hf.spans[idx]) + { + hf.spans[idx] = s; + return; + } + rcSpan* prev = 0; + rcSpan* cur = hf.spans[idx]; + + // Insert and merge spans. + while (cur) + { + if (cur->smin > s->smax) + { + // Current span is further than the new span, break. + break; + } + else if (cur->smax < s->smin) + { + // Current span is before the new span advance. + prev = cur; + cur = cur->next; + } + else + { + // Merge spans. + if (cur->smin < s->smin) + s->smin = cur->smin; + if (cur->smax > s->smax) + s->smax = cur->smax; + + // Merge flags. + if (rcAbs((int)s->smax - (int)cur->smax) <= flagMergeThr) + s->area = rcMax(s->area, cur->area); + + // Remove current span. + rcSpan* next = cur->next; + freeSpan(hf, cur); + if (prev) + prev->next = next; + else + hf.spans[idx] = next; + cur = next; + } + } + + // Insert new span. + if (prev) + { + s->next = prev->next; + prev->next = s; + } + else + { + s->next = hf.spans[idx]; + hf.spans[idx] = s; + } +} + +void rcAddSpan(rcContext* /*ctx*/, rcHeightfield& hf, const int x, const int y, + const unsigned short smin, const unsigned short smax, + const unsigned char area, const int flagMergeThr) +{ +// rcAssert(ctx); + addSpan(hf, x,y, smin, smax, area, flagMergeThr); +} + +static int clipPoly(const float* in, int n, float* out, float pnx, float pnz, float pd) +{ + float d[12]; + for (int i = 0; i < n; ++i) + d[i] = pnx*in[i*3+0] + pnz*in[i*3+2] + pd; + + int m = 0; + for (int i = 0, j = n-1; i < n; j=i, ++i) + { + bool ina = d[j] >= 0; + bool inb = d[i] >= 0; + if (ina != inb) + { + float s = d[j] / (d[j] - d[i]); + out[m*3+0] = in[j*3+0] + (in[i*3+0] - in[j*3+0])*s; + out[m*3+1] = in[j*3+1] + (in[i*3+1] - in[j*3+1])*s; + out[m*3+2] = in[j*3+2] + (in[i*3+2] - in[j*3+2])*s; + m++; + } + if (inb) + { + out[m*3+0] = in[i*3+0]; + out[m*3+1] = in[i*3+1]; + out[m*3+2] = in[i*3+2]; + m++; + } + } + return m; +} + +static void rasterizeTri(const float* v0, const float* v1, const float* v2, + const unsigned char area, rcHeightfield& hf, + const float* bmin, const float* bmax, + const float cs, const float ics, const float ich, + const int flagMergeThr) +{ + const int w = hf.width; + const int h = hf.height; + float tmin[3], tmax[3]; + const float by = bmax[1] - bmin[1]; + + // Calculate the bounding box of the triangle. + rcVcopy(tmin, v0); + rcVcopy(tmax, v0); + rcVmin(tmin, v1); + rcVmin(tmin, v2); + rcVmax(tmax, v1); + rcVmax(tmax, v2); + + // If the triangle does not touch the bbox of the heightfield, skip the triagle. + if (!overlapBounds(bmin, bmax, tmin, tmax)) + return; + + // Calculate the footpring of the triangle on the grid. + int x0 = (int)((tmin[0] - bmin[0])*ics); + int y0 = (int)((tmin[2] - bmin[2])*ics); + int x1 = (int)((tmax[0] - bmin[0])*ics); + int y1 = (int)((tmax[2] - bmin[2])*ics); + x0 = rcClamp(x0, 0, w-1); + y0 = rcClamp(y0, 0, h-1); + x1 = rcClamp(x1, 0, w-1); + y1 = rcClamp(y1, 0, h-1); + + // Clip the triangle into all grid cells it touches. + float in[7*3], out[7*3], inrow[7*3]; + + for (int y = y0; y <= y1; ++y) + { + // Clip polygon to row. + rcVcopy(&in[0], v0); + rcVcopy(&in[1*3], v1); + rcVcopy(&in[2*3], v2); + int nvrow = 3; + const float cz = bmin[2] + y*cs; + nvrow = clipPoly(in, nvrow, out, 0, 1, -cz); + if (nvrow < 3) continue; + nvrow = clipPoly(out, nvrow, inrow, 0, -1, cz+cs); + if (nvrow < 3) continue; + + for (int x = x0; x <= x1; ++x) + { + // Clip polygon to column. + int nv = nvrow; + const float cx = bmin[0] + x*cs; + nv = clipPoly(inrow, nv, out, 1, 0, -cx); + if (nv < 3) continue; + nv = clipPoly(out, nv, in, -1, 0, cx+cs); + if (nv < 3) continue; + + // Calculate min and max of the span. + float smin = in[1], smax = in[1]; + for (int i = 1; i < nv; ++i) + { + smin = rcMin(smin, in[i*3+1]); + smax = rcMax(smax, in[i*3+1]); + } + smin -= bmin[1]; + smax -= bmin[1]; + // Skip the span if it is outside the heightfield bbox + if (smax < 0.0f) continue; + if (smin > by) continue; + // Clamp the span to the heightfield bbox. + if (smin < 0.0f) smin = 0; + if (smax > by) smax = by; + + // Snap the span to the heightfield height grid. + unsigned short ismin = (unsigned short)rcClamp((int)floorf(smin * ich), 0, RC_SPAN_MAX_HEIGHT); + unsigned short ismax = (unsigned short)rcClamp((int)ceilf(smax * ich), (int)ismin+1, RC_SPAN_MAX_HEIGHT); + + addSpan(hf, x, y, ismin, ismax, area, flagMergeThr); + } + } +} + +void rcRasterizeTriangle(rcContext* ctx, const float* v0, const float* v1, const float* v2, + const unsigned char area, rcHeightfield& solid, + const int flagMergeThr) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_RASTERIZE_TRIANGLES); + + const float ics = 1.0f/solid.cs; + const float ich = 1.0f/solid.ch; + rasterizeTri(v0, v1, v2, area, solid, solid.bmin, solid.bmax, solid.cs, ics, ich, flagMergeThr); + + ctx->stopTimer(RC_TIMER_RASTERIZE_TRIANGLES); +} + +void rcRasterizeTriangles(rcContext* ctx, const float* verts, const int /*nv*/, + const int* tris, const unsigned char* areas, const int nt, + rcHeightfield& solid, const int flagMergeThr) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_RASTERIZE_TRIANGLES); + + const float ics = 1.0f/solid.cs; + const float ich = 1.0f/solid.ch; + // Rasterize triangles. + for (int i = 0; i < nt; ++i) + { + const float* v0 = &verts[tris[i*3+0]*3]; + const float* v1 = &verts[tris[i*3+1]*3]; + const float* v2 = &verts[tris[i*3+2]*3]; + // Rasterize. + rasterizeTri(v0, v1, v2, areas[i], solid, solid.bmin, solid.bmax, solid.cs, ics, ich, flagMergeThr); + } + + ctx->stopTimer(RC_TIMER_RASTERIZE_TRIANGLES); +} + +void rcRasterizeTriangles(rcContext* ctx, const float* verts, const int /*nv*/, + const unsigned short* tris, const unsigned char* areas, const int nt, + rcHeightfield& solid, const int flagMergeThr) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_RASTERIZE_TRIANGLES); + + const float ics = 1.0f/solid.cs; + const float ich = 1.0f/solid.ch; + // Rasterize triangles. + for (int i = 0; i < nt; ++i) + { + const float* v0 = &verts[tris[i*3+0]*3]; + const float* v1 = &verts[tris[i*3+1]*3]; + const float* v2 = &verts[tris[i*3+2]*3]; + // Rasterize. + rasterizeTri(v0, v1, v2, areas[i], solid, solid.bmin, solid.bmax, solid.cs, ics, ich, flagMergeThr); + } + + ctx->stopTimer(RC_TIMER_RASTERIZE_TRIANGLES); +} + +void rcRasterizeTriangles(rcContext* ctx, const float* verts, const unsigned char* areas, const int nt, + rcHeightfield& solid, const int flagMergeThr) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_RASTERIZE_TRIANGLES); + + const float ics = 1.0f/solid.cs; + const float ich = 1.0f/solid.ch; + // Rasterize triangles. + for (int i = 0; i < nt; ++i) + { + const float* v0 = &verts[(i*3+0)*3]; + const float* v1 = &verts[(i*3+1)*3]; + const float* v2 = &verts[(i*3+2)*3]; + // Rasterize. + rasterizeTri(v0, v1, v2, areas[i], solid, solid.bmin, solid.bmax, solid.cs, ics, ich, flagMergeThr); + } + + ctx->stopTimer(RC_TIMER_RASTERIZE_TRIANGLES); +} diff --git a/dep/recastnavigation/Recast/RecastRegion.cpp b/dep/recastnavigation/Recast/RecastRegion.cpp new file mode 100644 index 00000000000..6ad9fa53186 --- /dev/null +++ b/dep/recastnavigation/Recast/RecastRegion.cpp @@ -0,0 +1,1283 @@ +// +// Copyright (c) 2009-2010 Mikko Mononen memon@inside.org +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would be +// appreciated but is not required. +// 2. Altered source versions must be plainly marked as such, and must not be +// misrepresented as being the original software. +// 3. This notice may not be removed or altered from any source distribution. +// + +#include +#define _USE_MATH_DEFINES +#include +#include +#include +#include +#include "Recast.h" +#include "RecastAlloc.h" +#include "RecastAssert.h" +#include + + +static void calculateDistanceField(rcCompactHeightfield& chf, unsigned short* src, unsigned short& maxDist) +{ + const int w = chf.width; + const int h = chf.height; + + // Init distance and points. + for (int i = 0; i < chf.spanCount; ++i) + src[i] = 0xffff; + + // Mark boundary cells. + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + const rcCompactSpan& s = chf.spans[i]; + const unsigned char area = chf.areas[i]; + + int nc = 0; + for (int dir = 0; dir < 4; ++dir) + { + if (rcGetCon(s, dir) != RC_NOT_CONNECTED) + { + const int ax = x + rcGetDirOffsetX(dir); + const int ay = y + rcGetDirOffsetY(dir); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, dir); + if (area == chf.areas[ai]) + nc++; + } + } + if (nc != 4) + src[i] = 0; + } + } + } + + + // Pass 1 + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + const rcCompactSpan& s = chf.spans[i]; + + if (rcGetCon(s, 0) != RC_NOT_CONNECTED) + { + // (-1,0) + const int ax = x + rcGetDirOffsetX(0); + const int ay = y + rcGetDirOffsetY(0); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, 0); + const rcCompactSpan& as = chf.spans[ai]; + if (src[ai]+2 < src[i]) + src[i] = src[ai]+2; + + // (-1,-1) + if (rcGetCon(as, 3) != RC_NOT_CONNECTED) + { + const int aax = ax + rcGetDirOffsetX(3); + const int aay = ay + rcGetDirOffsetY(3); + const int aai = (int)chf.cells[aax+aay*w].index + rcGetCon(as, 3); + if (src[aai]+3 < src[i]) + src[i] = src[aai]+3; + } + } + if (rcGetCon(s, 3) != RC_NOT_CONNECTED) + { + // (0,-1) + const int ax = x + rcGetDirOffsetX(3); + const int ay = y + rcGetDirOffsetY(3); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, 3); + const rcCompactSpan& as = chf.spans[ai]; + if (src[ai]+2 < src[i]) + src[i] = src[ai]+2; + + // (1,-1) + if (rcGetCon(as, 2) != RC_NOT_CONNECTED) + { + const int aax = ax + rcGetDirOffsetX(2); + const int aay = ay + rcGetDirOffsetY(2); + const int aai = (int)chf.cells[aax+aay*w].index + rcGetCon(as, 2); + if (src[aai]+3 < src[i]) + src[i] = src[aai]+3; + } + } + } + } + } + + // Pass 2 + for (int y = h-1; y >= 0; --y) + { + for (int x = w-1; x >= 0; --x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + const rcCompactSpan& s = chf.spans[i]; + + if (rcGetCon(s, 2) != RC_NOT_CONNECTED) + { + // (1,0) + const int ax = x + rcGetDirOffsetX(2); + const int ay = y + rcGetDirOffsetY(2); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, 2); + const rcCompactSpan& as = chf.spans[ai]; + if (src[ai]+2 < src[i]) + src[i] = src[ai]+2; + + // (1,1) + if (rcGetCon(as, 1) != RC_NOT_CONNECTED) + { + const int aax = ax + rcGetDirOffsetX(1); + const int aay = ay + rcGetDirOffsetY(1); + const int aai = (int)chf.cells[aax+aay*w].index + rcGetCon(as, 1); + if (src[aai]+3 < src[i]) + src[i] = src[aai]+3; + } + } + if (rcGetCon(s, 1) != RC_NOT_CONNECTED) + { + // (0,1) + const int ax = x + rcGetDirOffsetX(1); + const int ay = y + rcGetDirOffsetY(1); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, 1); + const rcCompactSpan& as = chf.spans[ai]; + if (src[ai]+2 < src[i]) + src[i] = src[ai]+2; + + // (-1,1) + if (rcGetCon(as, 0) != RC_NOT_CONNECTED) + { + const int aax = ax + rcGetDirOffsetX(0); + const int aay = ay + rcGetDirOffsetY(0); + const int aai = (int)chf.cells[aax+aay*w].index + rcGetCon(as, 0); + if (src[aai]+3 < src[i]) + src[i] = src[aai]+3; + } + } + } + } + } + + maxDist = 0; + for (int i = 0; i < chf.spanCount; ++i) + maxDist = rcMax(src[i], maxDist); + +} + +static unsigned short* boxBlur(rcCompactHeightfield& chf, int thr, + unsigned short* src, unsigned short* dst) +{ + const int w = chf.width; + const int h = chf.height; + + thr *= 2; + + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + const rcCompactSpan& s = chf.spans[i]; + const unsigned short cd = src[i]; + if (cd <= thr) + { + dst[i] = cd; + continue; + } + + int d = (int)cd; + for (int dir = 0; dir < 4; ++dir) + { + if (rcGetCon(s, dir) != RC_NOT_CONNECTED) + { + const int ax = x + rcGetDirOffsetX(dir); + const int ay = y + rcGetDirOffsetY(dir); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, dir); + d += (int)src[ai]; + + const rcCompactSpan& as = chf.spans[ai]; + const int dir2 = (dir+1) & 0x3; + if (rcGetCon(as, dir2) != RC_NOT_CONNECTED) + { + const int ax2 = ax + rcGetDirOffsetX(dir2); + const int ay2 = ay + rcGetDirOffsetY(dir2); + const int ai2 = (int)chf.cells[ax2+ay2*w].index + rcGetCon(as, dir2); + d += (int)src[ai2]; + } + else + { + d += cd; + } + } + else + { + d += cd*2; + } + } + dst[i] = (unsigned short)((d+5)/9); + } + } + } + return dst; +} + + +static bool floodRegion(int x, int y, int i, + unsigned short level, unsigned short r, + rcCompactHeightfield& chf, + unsigned short* srcReg, unsigned short* srcDist, + rcIntArray& stack) +{ + const int w = chf.width; + + const unsigned char area = chf.areas[i]; + + // Flood fill mark region. + stack.resize(0); + stack.push((int)x); + stack.push((int)y); + stack.push((int)i); + srcReg[i] = r; + srcDist[i] = 0; + + unsigned short lev = level >= 2 ? level-2 : 0; + int count = 0; + + while (stack.size() > 0) + { + int ci = stack.pop(); + int cy = stack.pop(); + int cx = stack.pop(); + + const rcCompactSpan& cs = chf.spans[ci]; + + // Check if any of the neighbours already have a valid region set. + unsigned short ar = 0; + for (int dir = 0; dir < 4; ++dir) + { + // 8 connected + if (rcGetCon(cs, dir) != RC_NOT_CONNECTED) + { + const int ax = cx + rcGetDirOffsetX(dir); + const int ay = cy + rcGetDirOffsetY(dir); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(cs, dir); + if (chf.areas[ai] != area) + continue; + unsigned short nr = srcReg[ai]; + if (nr != 0 && nr != r) + ar = nr; + + const rcCompactSpan& as = chf.spans[ai]; + + const int dir2 = (dir+1) & 0x3; + if (rcGetCon(as, dir2) != RC_NOT_CONNECTED) + { + const int ax2 = ax + rcGetDirOffsetX(dir2); + const int ay2 = ay + rcGetDirOffsetY(dir2); + const int ai2 = (int)chf.cells[ax2+ay2*w].index + rcGetCon(as, dir2); + if (chf.areas[ai2] != area) + continue; + unsigned short nr = srcReg[ai2]; + if (nr != 0 && nr != r) + ar = nr; + } + } + } + if (ar != 0) + { + srcReg[ci] = 0; + continue; + } + count++; + + // Expand neighbours. + for (int dir = 0; dir < 4; ++dir) + { + if (rcGetCon(cs, dir) != RC_NOT_CONNECTED) + { + const int ax = cx + rcGetDirOffsetX(dir); + const int ay = cy + rcGetDirOffsetY(dir); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(cs, dir); + if (chf.areas[ai] != area) + continue; + if (chf.dist[ai] >= lev) + { + if (srcReg[ai] == 0) + { + srcReg[ai] = r; + srcDist[ai] = 0; + stack.push(ax); + stack.push(ay); + stack.push(ai); + } + } + } + } + } + + return count > 0; +} + +static unsigned short* expandRegions(int maxIter, unsigned short level, + rcCompactHeightfield& chf, + unsigned short* srcReg, unsigned short* srcDist, + unsigned short* dstReg, unsigned short* dstDist, + rcIntArray& stack) +{ + const int w = chf.width; + const int h = chf.height; + + // Find cells revealed by the raised level. + stack.resize(0); + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + if (chf.dist[i] >= level && srcReg[i] == 0 && chf.areas[i] != RC_NULL_AREA) + { + stack.push(x); + stack.push(y); + stack.push(i); + } + } + } + } + + int iter = 0; + while (stack.size() > 0) + { + int failed = 0; + + memcpy(dstReg, srcReg, sizeof(unsigned short)*chf.spanCount); + memcpy(dstDist, srcDist, sizeof(unsigned short)*chf.spanCount); + + for (int j = 0; j < stack.size(); j += 3) + { + int x = stack[j+0]; + int y = stack[j+1]; + int i = stack[j+2]; + if (i < 0) + { + failed++; + continue; + } + + unsigned short r = srcReg[i]; + unsigned short d2 = 0xffff; + const unsigned char area = chf.areas[i]; + const rcCompactSpan& s = chf.spans[i]; + for (int dir = 0; dir < 4; ++dir) + { + if (rcGetCon(s, dir) == RC_NOT_CONNECTED) continue; + const int ax = x + rcGetDirOffsetX(dir); + const int ay = y + rcGetDirOffsetY(dir); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, dir); + if (chf.areas[ai] != area) continue; + if (srcReg[ai] > 0 && (srcReg[ai] & RC_BORDER_REG) == 0) + { + if ((int)srcDist[ai]+2 < (int)d2) + { + r = srcReg[ai]; + d2 = srcDist[ai]+2; + } + } + } + if (r) + { + stack[j+2] = -1; // mark as used + dstReg[i] = r; + dstDist[i] = d2; + } + else + { + failed++; + } + } + + // rcSwap source and dest. + rcSwap(srcReg, dstReg); + rcSwap(srcDist, dstDist); + + if (failed*3 == stack.size()) + break; + + if (level > 0) + { + ++iter; + if (iter >= maxIter) + break; + } + } + + return srcReg; +} + + +struct rcRegion +{ + inline rcRegion(unsigned short i) : + spanCount(0), + id(i), + areaType(0), + remap(false), + visited(false) + {} + + int spanCount; // Number of spans belonging to this region + unsigned short id; // ID of the region + unsigned char areaType; // Are type. + bool remap; + bool visited; + rcIntArray connections; + rcIntArray floors; +}; + +static void removeAdjacentNeighbours(rcRegion& reg) +{ + // Remove adjacent duplicates. + for (int i = 0; i < reg.connections.size() && reg.connections.size() > 1; ) + { + int ni = (i+1) % reg.connections.size(); + if (reg.connections[i] == reg.connections[ni]) + { + // Remove duplicate + for (int j = i; j < reg.connections.size()-1; ++j) + reg.connections[j] = reg.connections[j+1]; + reg.connections.pop(); + } + else + ++i; + } +} + +static void replaceNeighbour(rcRegion& reg, unsigned short oldId, unsigned short newId) +{ + bool neiChanged = false; + for (int i = 0; i < reg.connections.size(); ++i) + { + if (reg.connections[i] == oldId) + { + reg.connections[i] = newId; + neiChanged = true; + } + } + for (int i = 0; i < reg.floors.size(); ++i) + { + if (reg.floors[i] == oldId) + reg.floors[i] = newId; + } + if (neiChanged) + removeAdjacentNeighbours(reg); +} + +static bool canMergeWithRegion(const rcRegion& rega, const rcRegion& regb) +{ + if (rega.areaType != regb.areaType) + return false; + int n = 0; + for (int i = 0; i < rega.connections.size(); ++i) + { + if (rega.connections[i] == regb.id) + n++; + } + if (n > 1) + return false; + for (int i = 0; i < rega.floors.size(); ++i) + { + if (rega.floors[i] == regb.id) + return false; + } + return true; +} + +static void addUniqueFloorRegion(rcRegion& reg, int n) +{ + for (int i = 0; i < reg.floors.size(); ++i) + if (reg.floors[i] == n) + return; + reg.floors.push(n); +} + +static bool mergeRegions(rcRegion& rega, rcRegion& regb) +{ + unsigned short aid = rega.id; + unsigned short bid = regb.id; + + // Duplicate current neighbourhood. + rcIntArray acon; + acon.resize(rega.connections.size()); + for (int i = 0; i < rega.connections.size(); ++i) + acon[i] = rega.connections[i]; + rcIntArray& bcon = regb.connections; + + // Find insertion point on A. + int insa = -1; + for (int i = 0; i < acon.size(); ++i) + { + if (acon[i] == bid) + { + insa = i; + break; + } + } + if (insa == -1) + return false; + + // Find insertion point on B. + int insb = -1; + for (int i = 0; i < bcon.size(); ++i) + { + if (bcon[i] == aid) + { + insb = i; + break; + } + } + if (insb == -1) + return false; + + // Merge neighbours. + rega.connections.resize(0); + for (int i = 0, ni = acon.size(); i < ni-1; ++i) + rega.connections.push(acon[(insa+1+i) % ni]); + + for (int i = 0, ni = bcon.size(); i < ni-1; ++i) + rega.connections.push(bcon[(insb+1+i) % ni]); + + removeAdjacentNeighbours(rega); + + for (int j = 0; j < regb.floors.size(); ++j) + addUniqueFloorRegion(rega, regb.floors[j]); + rega.spanCount += regb.spanCount; + regb.spanCount = 0; + regb.connections.resize(0); + + return true; +} + +static bool isRegionConnectedToBorder(const rcRegion& reg) +{ + // Region is connected to border if + // one of the neighbours is null id. + for (int i = 0; i < reg.connections.size(); ++i) + { + if (reg.connections[i] == 0) + return true; + } + return false; +} + +static bool isSolidEdge(rcCompactHeightfield& chf, unsigned short* srcReg, + int x, int y, int i, int dir) +{ + const rcCompactSpan& s = chf.spans[i]; + unsigned short r = 0; + if (rcGetCon(s, dir) != RC_NOT_CONNECTED) + { + const int ax = x + rcGetDirOffsetX(dir); + const int ay = y + rcGetDirOffsetY(dir); + const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(s, dir); + r = srcReg[ai]; + } + if (r == srcReg[i]) + return false; + return true; +} + +static void walkContour(int x, int y, int i, int dir, + rcCompactHeightfield& chf, + unsigned short* srcReg, + rcIntArray& cont) +{ + int startDir = dir; + int starti = i; + + const rcCompactSpan& ss = chf.spans[i]; + unsigned short curReg = 0; + if (rcGetCon(ss, dir) != RC_NOT_CONNECTED) + { + const int ax = x + rcGetDirOffsetX(dir); + const int ay = y + rcGetDirOffsetY(dir); + const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(ss, dir); + curReg = srcReg[ai]; + } + cont.push(curReg); + + int iter = 0; + while (++iter < 40000) + { + const rcCompactSpan& s = chf.spans[i]; + + if (isSolidEdge(chf, srcReg, x, y, i, dir)) + { + // Choose the edge corner + unsigned short r = 0; + if (rcGetCon(s, dir) != RC_NOT_CONNECTED) + { + const int ax = x + rcGetDirOffsetX(dir); + const int ay = y + rcGetDirOffsetY(dir); + const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(s, dir); + r = srcReg[ai]; + } + if (r != curReg) + { + curReg = r; + cont.push(curReg); + } + + dir = (dir+1) & 0x3; // Rotate CW + } + else + { + int ni = -1; + const int nx = x + rcGetDirOffsetX(dir); + const int ny = y + rcGetDirOffsetY(dir); + if (rcGetCon(s, dir) != RC_NOT_CONNECTED) + { + const rcCompactCell& nc = chf.cells[nx+ny*chf.width]; + ni = (int)nc.index + rcGetCon(s, dir); + } + if (ni == -1) + { + // Should not happen. + return; + } + x = nx; + y = ny; + i = ni; + dir = (dir+3) & 0x3; // Rotate CCW + } + + if (starti == i && startDir == dir) + { + break; + } + } + + // Remove adjacent duplicates. + if (cont.size() > 1) + { + for (int i = 0; i < cont.size(); ) + { + int ni = (i+1) % cont.size(); + if (cont[i] == cont[ni]) + { + for (int j = i; j < cont.size()-1; ++j) + cont[j] = cont[j+1]; + cont.pop(); + } + else + ++i; + } + } +} + +static bool filterSmallRegions(rcContext* ctx, int minRegionArea, int mergeRegionSize, + unsigned short& maxRegionId, + rcCompactHeightfield& chf, + unsigned short* srcReg) +{ + const int w = chf.width; + const int h = chf.height; + + const int nreg = maxRegionId+1; + rcRegion* regions = (rcRegion*)rcAlloc(sizeof(rcRegion)*nreg, RC_ALLOC_TEMP); + if (!regions) + { + ctx->log(RC_LOG_ERROR, "filterSmallRegions: Out of memory 'regions' (%d).", nreg); + return false; + } + + // Construct regions + for (int i = 0; i < nreg; ++i) + new(®ions[i]) rcRegion((unsigned short)i); + + // Find edge of a region and find connections around the contour. + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + unsigned short r = srcReg[i]; + if (r == 0 || r >= nreg) + continue; + + rcRegion& reg = regions[r]; + reg.spanCount++; + + + // Update floors. + for (int j = (int)c.index; j < ni; ++j) + { + if (i == j) continue; + unsigned short floorId = srcReg[j]; + if (floorId == 0 || floorId >= nreg) + continue; + addUniqueFloorRegion(reg, floorId); + } + + // Have found contour + if (reg.connections.size() > 0) + continue; + + reg.areaType = chf.areas[i]; + + // Check if this cell is next to a border. + int ndir = -1; + for (int dir = 0; dir < 4; ++dir) + { + if (isSolidEdge(chf, srcReg, x, y, i, dir)) + { + ndir = dir; + break; + } + } + + if (ndir != -1) + { + // The cell is at border. + // Walk around the contour to find all the neighbours. + walkContour(x, y, i, ndir, chf, srcReg, reg.connections); + } + } + } + } + + // Remove too small regions. + rcIntArray stack(32); + rcIntArray trace(32); + for (int i = 0; i < nreg; ++i) + { + rcRegion& reg = regions[i]; + if (reg.id == 0 || (reg.id & RC_BORDER_REG)) + continue; + if (reg.spanCount == 0) + continue; + if (reg.visited) + continue; + + // Count the total size of all the connected regions. + // Also keep track of the regions connects to a tile border. + bool connectsToBorder = false; + int spanCount = 0; + stack.resize(0); + trace.resize(0); + + reg.visited = true; + stack.push(i); + + while (stack.size()) + { + // Pop + int ri = stack.pop(); + + rcRegion& creg = regions[ri]; + + spanCount += creg.spanCount; + trace.push(ri); + + for (int j = 0; j < creg.connections.size(); ++j) + { + if (creg.connections[j] & RC_BORDER_REG) + { + connectsToBorder = true; + continue; + } + rcRegion& nreg = regions[creg.connections[j]]; + if (nreg.visited) + continue; + if (nreg.id == 0 || (nreg.id & RC_BORDER_REG)) + continue; + // Visit + stack.push(nreg.id); + nreg.visited = true; + } + } + + // If the accumulated regions size is too small, remove it. + // Do not remove areas which connect to tile borders + // as their size cannot be estimated correctly and removing them + // can potentially remove necessary areas. + if (spanCount < minRegionArea && !connectsToBorder) + { + // Kill all visited regions. + for (int j = 0; j < trace.size(); ++j) + { + regions[trace[j]].spanCount = 0; + regions[trace[j]].id = 0; + } + } + } + + // Merge too small regions to neighbour regions. + int mergeCount = 0 ; + do + { + mergeCount = 0; + for (int i = 0; i < nreg; ++i) + { + rcRegion& reg = regions[i]; + if (reg.id == 0 || (reg.id & RC_BORDER_REG)) + continue; + if (reg.spanCount == 0) + continue; + + // Check to see if the region should be merged. + if (reg.spanCount > mergeRegionSize && isRegionConnectedToBorder(reg)) + continue; + + // Small region with more than 1 connection. + // Or region which is not connected to a border at all. + // Find smallest neighbour region that connects to this one. + int smallest = 0xfffffff; + unsigned short mergeId = reg.id; + for (int j = 0; j < reg.connections.size(); ++j) + { + if (reg.connections[j] & RC_BORDER_REG) continue; + rcRegion& mreg = regions[reg.connections[j]]; + if (mreg.id == 0 || (mreg.id & RC_BORDER_REG)) continue; + if (mreg.spanCount < smallest && + canMergeWithRegion(reg, mreg) && + canMergeWithRegion(mreg, reg)) + { + smallest = mreg.spanCount; + mergeId = mreg.id; + } + } + // Found new id. + if (mergeId != reg.id) + { + unsigned short oldId = reg.id; + rcRegion& target = regions[mergeId]; + + // Merge neighbours. + if (mergeRegions(target, reg)) + { + // Fixup regions pointing to current region. + for (int j = 0; j < nreg; ++j) + { + if (regions[j].id == 0 || (regions[j].id & RC_BORDER_REG)) continue; + // If another region was already merged into current region + // change the nid of the previous region too. + if (regions[j].id == oldId) + regions[j].id = mergeId; + // Replace the current region with the new one if the + // current regions is neighbour. + replaceNeighbour(regions[j], oldId, mergeId); + } + mergeCount++; + } + } + } + } + while (mergeCount > 0); + + // Compress region Ids. + for (int i = 0; i < nreg; ++i) + { + regions[i].remap = false; + if (regions[i].id == 0) continue; // Skip nil regions. + if (regions[i].id & RC_BORDER_REG) continue; // Skip external regions. + regions[i].remap = true; + } + + unsigned short regIdGen = 0; + for (int i = 0; i < nreg; ++i) + { + if (!regions[i].remap) + continue; + unsigned short oldId = regions[i].id; + unsigned short newId = ++regIdGen; + for (int j = i; j < nreg; ++j) + { + if (regions[j].id == oldId) + { + regions[j].id = newId; + regions[j].remap = false; + } + } + } + maxRegionId = regIdGen; + + // Remap regions. + for (int i = 0; i < chf.spanCount; ++i) + { + if ((srcReg[i] & RC_BORDER_REG) == 0) + srcReg[i] = regions[srcReg[i]].id; + } + + for (int i = 0; i < nreg; ++i) + regions[i].~rcRegion(); + rcFree(regions); + + return true; +} + + +bool rcBuildDistanceField(rcContext* ctx, rcCompactHeightfield& chf) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_BUILD_DISTANCEFIELD); + + if (chf.dist) + { + rcFree(chf.dist); + chf.dist = 0; + } + + unsigned short* src = (unsigned short*)rcAlloc(sizeof(unsigned short)*chf.spanCount, RC_ALLOC_TEMP); + if (!src) + { + ctx->log(RC_LOG_ERROR, "rcBuildDistanceField: Out of memory 'src' (%d).", chf.spanCount); + return false; + } + unsigned short* dst = (unsigned short*)rcAlloc(sizeof(unsigned short)*chf.spanCount, RC_ALLOC_TEMP); + if (!dst) + { + ctx->log(RC_LOG_ERROR, "rcBuildDistanceField: Out of memory 'dst' (%d).", chf.spanCount); + rcFree(src); + return false; + } + + unsigned short maxDist = 0; + + ctx->startTimer(RC_TIMER_BUILD_DISTANCEFIELD_DIST); + + calculateDistanceField(chf, src, maxDist); + chf.maxDistance = maxDist; + + ctx->stopTimer(RC_TIMER_BUILD_DISTANCEFIELD_DIST); + + ctx->startTimer(RC_TIMER_BUILD_DISTANCEFIELD_BLUR); + + // Blur + if (boxBlur(chf, 1, src, dst) != src) + rcSwap(src, dst); + + // Store distance. + chf.dist = src; + + ctx->stopTimer(RC_TIMER_BUILD_DISTANCEFIELD_BLUR); + + ctx->stopTimer(RC_TIMER_BUILD_DISTANCEFIELD); + + rcFree(dst); + + return true; +} + +static void paintRectRegion(int minx, int maxx, int miny, int maxy, unsigned short regId, + rcCompactHeightfield& chf, unsigned short* srcReg) +{ + const int w = chf.width; + for (int y = miny; y < maxy; ++y) + { + for (int x = minx; x < maxx; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + if (chf.areas[i] != RC_NULL_AREA) + srcReg[i] = regId; + } + } + } +} + + +static const unsigned short RC_NULL_NEI = 0xffff; + +struct rcSweepSpan +{ + unsigned short rid; // row id + unsigned short id; // region id + unsigned short ns; // number samples + unsigned short nei; // neighbour id +}; + +bool rcBuildRegionsMonotone(rcContext* ctx, rcCompactHeightfield& chf, + const int borderSize, const int minRegionArea, const int mergeRegionArea) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_BUILD_REGIONS); + + const int w = chf.width; + const int h = chf.height; + unsigned short id = 1; + + rcScopedDelete srcReg = (unsigned short*)rcAlloc(sizeof(unsigned short)*chf.spanCount, RC_ALLOC_TEMP); + if (!srcReg) + { + ctx->log(RC_LOG_ERROR, "rcBuildRegionsMonotone: Out of memory 'src' (%d).", chf.spanCount); + return false; + } + memset(srcReg,0,sizeof(unsigned short)*chf.spanCount); + + const int nsweeps = rcMax(chf.width,chf.height); + rcScopedDelete sweeps = (rcSweepSpan*)rcAlloc(sizeof(rcSweepSpan)*nsweeps, RC_ALLOC_TEMP); + if (!sweeps) + { + ctx->log(RC_LOG_ERROR, "rcBuildRegionsMonotone: Out of memory 'sweeps' (%d).", nsweeps); + return false; + } + + + // Mark border regions. + if (borderSize > 0) + { + // Make sure border will not overflow. + const int bw = rcMin(w, borderSize); + const int bh = rcMin(h, borderSize); + // Paint regions + paintRectRegion(0, bw, 0, h, id|RC_BORDER_REG, chf, srcReg); id++; + paintRectRegion(w-bw, w, 0, h, id|RC_BORDER_REG, chf, srcReg); id++; + paintRectRegion(0, w, 0, bh, id|RC_BORDER_REG, chf, srcReg); id++; + paintRectRegion(0, w, h-bh, h, id|RC_BORDER_REG, chf, srcReg); id++; + } + + rcIntArray prev(256); + + // Sweep one line at a time. + for (int y = borderSize; y < h-borderSize; ++y) + { + // Collect spans from this row. + prev.resize(id+1); + memset(&prev[0],0,sizeof(int)*id); + unsigned short rid = 1; + + for (int x = borderSize; x < w-borderSize; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + const rcCompactSpan& s = chf.spans[i]; + if (chf.areas[i] == RC_NULL_AREA) continue; + + // -x + unsigned short previd = 0; + if (rcGetCon(s, 0) != RC_NOT_CONNECTED) + { + const int ax = x + rcGetDirOffsetX(0); + const int ay = y + rcGetDirOffsetY(0); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, 0); + if ((srcReg[ai] & RC_BORDER_REG) == 0 && chf.areas[i] == chf.areas[ai]) + previd = srcReg[ai]; + } + + if (!previd) + { + previd = rid++; + sweeps[previd].rid = previd; + sweeps[previd].ns = 0; + sweeps[previd].nei = 0; + } + + // -y + if (rcGetCon(s,3) != RC_NOT_CONNECTED) + { + const int ax = x + rcGetDirOffsetX(3); + const int ay = y + rcGetDirOffsetY(3); + const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, 3); + if (srcReg[ai] && (srcReg[ai] & RC_BORDER_REG) == 0 && chf.areas[i] == chf.areas[ai]) + { + unsigned short nr = srcReg[ai]; + if (!sweeps[previd].nei || sweeps[previd].nei == nr) + { + sweeps[previd].nei = nr; + sweeps[previd].ns++; + prev[nr]++; + } + else + { + sweeps[previd].nei = RC_NULL_NEI; + } + } + } + + srcReg[i] = previd; + } + } + + // Create unique ID. + for (int i = 1; i < rid; ++i) + { + if (sweeps[i].nei != RC_NULL_NEI && sweeps[i].nei != 0 && + prev[sweeps[i].nei] == (int)sweeps[i].ns) + { + sweeps[i].id = sweeps[i].nei; + } + else + { + sweeps[i].id = id++; + } + } + + // Remap IDs + for (int x = borderSize; x < w-borderSize; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + if (srcReg[i] > 0 && srcReg[i] < rid) + srcReg[i] = sweeps[srcReg[i]].id; + } + } + } + + ctx->startTimer(RC_TIMER_BUILD_REGIONS_FILTER); + + // Filter out small regions. + chf.maxRegions = id; + if (!filterSmallRegions(ctx, minRegionArea, mergeRegionArea, chf.maxRegions, chf, srcReg)) + return false; + + ctx->stopTimer(RC_TIMER_BUILD_REGIONS_FILTER); + + // Store the result out. + for (int i = 0; i < chf.spanCount; ++i) + chf.spans[i].reg = srcReg[i]; + + ctx->stopTimer(RC_TIMER_BUILD_REGIONS); + + return true; +} + +bool rcBuildRegions(rcContext* ctx, rcCompactHeightfield& chf, + const int borderSize, const int minRegionArea, const int mergeRegionArea) +{ + rcAssert(ctx); + + ctx->startTimer(RC_TIMER_BUILD_REGIONS); + + const int w = chf.width; + const int h = chf.height; + + rcScopedDelete buf = (unsigned short*)rcAlloc(sizeof(unsigned short)*chf.spanCount*4, RC_ALLOC_TEMP); + if (!buf) + { + ctx->log(RC_LOG_ERROR, "rcBuildRegions: Out of memory 'tmp' (%d).", chf.spanCount*4); + return false; + } + + ctx->startTimer(RC_TIMER_BUILD_REGIONS_WATERSHED); + + rcIntArray stack(1024); + rcIntArray visited(1024); + + unsigned short* srcReg = buf; + unsigned short* srcDist = buf+chf.spanCount; + unsigned short* dstReg = buf+chf.spanCount*2; + unsigned short* dstDist = buf+chf.spanCount*3; + + memset(srcReg, 0, sizeof(unsigned short)*chf.spanCount); + memset(srcDist, 0, sizeof(unsigned short)*chf.spanCount); + + unsigned short regionId = 1; + unsigned short level = (chf.maxDistance+1) & ~1; + + // TODO: Figure better formula, expandIters defines how much the + // watershed "overflows" and simplifies the regions. Tying it to + // agent radius was usually good indication how greedy it could be. +// const int expandIters = 4 + walkableRadius * 2; + const int expandIters = 8; + + // Mark border regions. + paintRectRegion(0, borderSize, 0, h, regionId|RC_BORDER_REG, chf, srcReg); regionId++; + paintRectRegion(w-borderSize, w, 0, h, regionId|RC_BORDER_REG, chf, srcReg); regionId++; + paintRectRegion(0, w, 0, borderSize, regionId|RC_BORDER_REG, chf, srcReg); regionId++; + paintRectRegion(0, w, h-borderSize, h, regionId|RC_BORDER_REG, chf, srcReg); regionId++; + + while (level > 0) + { + level = level >= 2 ? level-2 : 0; + + ctx->startTimer(RC_TIMER_BUILD_REGIONS_EXPAND); + + // Expand current regions until no empty connected cells found. + if (expandRegions(expandIters, level, chf, srcReg, srcDist, dstReg, dstDist, stack) != srcReg) + { + rcSwap(srcReg, dstReg); + rcSwap(srcDist, dstDist); + } + + ctx->stopTimer(RC_TIMER_BUILD_REGIONS_EXPAND); + + ctx->startTimer(RC_TIMER_BUILD_REGIONS_FLOOD); + + // Mark new regions with IDs. + for (int y = 0; y < h; ++y) + { + for (int x = 0; x < w; ++x) + { + const rcCompactCell& c = chf.cells[x+y*w]; + for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i) + { + if (chf.dist[i] < level || srcReg[i] != 0 || chf.areas[i] == RC_NULL_AREA) + continue; + + if (floodRegion(x, y, i, level, regionId, chf, srcReg, srcDist, stack)) + regionId++; + } + } + } + + ctx->stopTimer(RC_TIMER_BUILD_REGIONS_FLOOD); + + } + + // Expand current regions until no empty connected cells found. + if (expandRegions(expandIters*8, 0, chf, srcReg, srcDist, dstReg, dstDist, stack) != srcReg) + { + rcSwap(srcReg, dstReg); + rcSwap(srcDist, dstDist); + } + + ctx->stopTimer(RC_TIMER_BUILD_REGIONS_WATERSHED); + + ctx->startTimer(RC_TIMER_BUILD_REGIONS_FILTER); + + // Filter out small regions. + chf.maxRegions = regionId; + if (!filterSmallRegions(ctx, minRegionArea, mergeRegionArea, chf.maxRegions, chf, srcReg)) + return false; + + ctx->stopTimer(RC_TIMER_BUILD_REGIONS_FILTER); + + // Write the result out. + for (int i = 0; i < chf.spanCount; ++i) + chf.spans[i].reg = srcReg[i]; + + ctx->stopTimer(RC_TIMER_BUILD_REGIONS); + + return true; +} + + diff --git a/dep/recastnavigation/TODO.txt b/dep/recastnavigation/TODO.txt new file mode 100644 index 00000000000..b911c0e4720 --- /dev/null +++ b/dep/recastnavigation/TODO.txt @@ -0,0 +1,20 @@ +TODO/Roadmap + +Summer/Autumn 2009 + +- Off mesh links (jump links) +- Area annotations +- Embed extra data per polygon +- Height conforming navmesh + + +Autumn/Winter 2009/2010 + +- Detour path following +- More dynamic example with tile navmesh +- Faster small tile process + + +More info at http://digestingduck.blogspot.com/2009/07/recast-and-detour-roadmap.html + +- From 204b846fe695768ad56f8f8c832d6deaa6dc2e1c Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 14:45:05 +0200 Subject: [PATCH 002/204] Core/Tools: Implemented mmaps_generator. --- src/tools/CMakeLists.txt | 1 + src/tools/mmap_extractor/CMakeLists.txt | 68 ++ src/tools/mmap_extractor/Info/readme.txt | 66 ++ .../mmap_extractor/IntermediateValues.cpp | 277 ++++++ src/tools/mmap_extractor/IntermediateValues.h | 53 ++ src/tools/mmap_extractor/MapBuilder.cpp | 894 ++++++++++++++++++ src/tools/mmap_extractor/MapBuilder.h | 129 +++ src/tools/mmap_extractor/PathCommon.h | 128 +++ src/tools/mmap_extractor/PathGenerator.cpp | 273 ++++++ src/tools/mmap_extractor/TerrainBuilder.cpp | 854 +++++++++++++++++ src/tools/mmap_extractor/TerrainBuilder.h | 138 +++ src/tools/mmap_extractor/VMapExtensions.cpp | 72 ++ 12 files changed, 2953 insertions(+) create mode 100644 src/tools/mmap_extractor/CMakeLists.txt create mode 100644 src/tools/mmap_extractor/Info/readme.txt create mode 100644 src/tools/mmap_extractor/IntermediateValues.cpp create mode 100644 src/tools/mmap_extractor/IntermediateValues.h create mode 100644 src/tools/mmap_extractor/MapBuilder.cpp create mode 100644 src/tools/mmap_extractor/MapBuilder.h create mode 100644 src/tools/mmap_extractor/PathCommon.h create mode 100644 src/tools/mmap_extractor/PathGenerator.cpp create mode 100644 src/tools/mmap_extractor/TerrainBuilder.cpp create mode 100644 src/tools/mmap_extractor/TerrainBuilder.h create mode 100644 src/tools/mmap_extractor/VMapExtensions.cpp diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt index a956655ffaa..f4c5f695b26 100644 --- a/src/tools/CMakeLists.txt +++ b/src/tools/CMakeLists.txt @@ -11,3 +11,4 @@ add_subdirectory(map_extractor) add_subdirectory(vmap4_assembler) add_subdirectory(vmap4_extractor) +add_subdirectory(mmaps_extractor) diff --git a/src/tools/mmap_extractor/CMakeLists.txt b/src/tools/mmap_extractor/CMakeLists.txt new file mode 100644 index 00000000000..c7c1a954371 --- /dev/null +++ b/src/tools/mmap_extractor/CMakeLists.txt @@ -0,0 +1,68 @@ +# Copyright (C) 2008-2011 Trinity +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +file(GLOB_RECURSE sources *.cpp *.h) + +# definitions +add_definitions(-DNO_CORE_FUNCS) +add_definitions(-DDEBUG) +add_definitions(-DNO_vsnprintf) + +include_directories( + ${CMAKE_BINARY_DIR} + ${ACE_INCLUDE_DIR} + ${MYSQL_INCLUDE_DIR} + ${CMAKE_SOURCE_DIR}/dep/libmpq + ${CMAKE_SOURCE_DIR}/dep/zlib + ${CMAKE_SOURCE_DIR}/dep/bzip2 + ${CMAKE_SOURCE_DIR}/dep/acelite + ${CMAKE_SOURCE_DIR}/dep/g3dlite/include + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour + ${CMAKE_SOURCE_DIR}/src/server/shared + ${CMAKE_SOURCE_DIR}/src/server/shared/Database + ${CMAKE_SOURCE_DIR}/src/server/shared/Database/Implementation + ${CMAKE_SOURCE_DIR}/src/server/shared/Threading + ${CMAKE_SOURCE_DIR}/src/server/shared/Logging + ${CMAKE_SOURCE_DIR}/src/server/shared/Utilities + ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic + ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic/LinkedReference + ${CMAKE_SOURCE_DIR}/src/server/game/Maps + ${CMAKE_SOURCE_DIR}/src/server/game/DataStores + ${CMAKE_SOURCE_DIR}/src/server/game/Movement/Waypoints + ${CMAKE_SOURCE_DIR}/src/server/game/Grids + ${CMAKE_SOURCE_DIR}/src/server/game/Grids/Cells + ${CMAKE_SOURCE_DIR}/src/server/game/Miscellaneous + ${CMAKE_SOURCE_DIR}/src/server/game/Conditions + ${CMAKE_SOURCE_DIR}/src/server/collision + ${CMAKE_SOURCE_DIR}/src/server/collision/Management + ${CMAKE_SOURCE_DIR}/src/server/collision/Maps + ${CMAKE_SOURCE_DIR}/src/server/collision/Models +) + +add_executable(movements_extractor ${sources}) + +target_link_libraries(movements_extractor + ${MYSQL_LIBRARY} + ${ACE_LIBRARY} + ${BZIP2_LIBRARIES} + ${ZLIB_LIBRARIES} + Recast + Detour + collision + g3dlib + shared +) + +if( UNIX ) + install(TARGETS movements_extractor DESTINATION bin) +elseif( WIN32 ) + install(TARGETS movements_extractor DESTINATION "${CMAKE_INSTALL_PREFIX}") +endif() diff --git a/src/tools/mmap_extractor/Info/readme.txt b/src/tools/mmap_extractor/Info/readme.txt new file mode 100644 index 00000000000..8d7c4f9d2e0 --- /dev/null +++ b/src/tools/mmap_extractor/Info/readme.txt @@ -0,0 +1,66 @@ +Generator command line args + +--offMeshInput [file.*] Path to file containing off mesh connections data. + Format must be: (see offmesh_example.txt) + "map_id tile_x,tile_y (start_x start_y start_z) (end_x end_y end_z) size //optional comments" + Single mesh connection per line. + +--silent Make us script friendly. Do not wait for user input + on error or completion. + +--bigBaseUnit [true|false] Generate tile/map using bigger basic unit. + Use this option only if you have unexpected gaps. + + false: use normal metrics (default) + +--maxAngle [#] Max walkable inclination angle + + float between 45 and 90 degrees (default 60) + +--skipLiquid liquid data for maps + + false: include liquid data (default) + +--skipContinents [true|false] continents are maps 0 (Eastern Kingdoms), + 1 (Kalimdor), 530 (Outlands), 571 (Northrend) + + false: build continents (default) + +--skipJunkMaps [true|false] junk maps include some unused + maps, transport maps, and some other + + true: skip junk maps (default) + +--skipBattlegrounds [true|false] does not include PVP arenas + + false: skip battlegrounds (default) + +--debugOutput [true|false] create debugging files for use with RecastDemo + if you are only creating mmaps for use with MaNGOS, + you don't want debugging files + + false: don't create debugging files (default) + +--tile [#,#] Build the specified tile + seperate number with a comma ',' + must specify a map number (see below) + if this option is not used, all tiles are built + + [#] Build only the map specified by # + this command will build the map regardless of --skip* option settings + if you do not specify a map number, builds all maps that pass the filters specified by --skip* options + + +examples: + +movement_extractor +builds maps using the default settings (see above for defaults) + +movement_extractor --skipContinents true +builds the default maps, except continents + +movement_extractor 0 +builds all tiles of map 0 + +movement_extractor 0 --tile 34,46 +builds only tile 34,46 of map 0 (this is the southern face of blackrock mountain) \ No newline at end of file diff --git a/src/tools/mmap_extractor/IntermediateValues.cpp b/src/tools/mmap_extractor/IntermediateValues.cpp new file mode 100644 index 00000000000..9eefb1e65f0 --- /dev/null +++ b/src/tools/mmap_extractor/IntermediateValues.cpp @@ -0,0 +1,277 @@ +/* + * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2005-2011 MaNGOS + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "IntermediateValues.h" + +namespace MMAP +{ + IntermediateValues::~IntermediateValues() + { + rcFreeCompactHeightfield(compactHeightfield); + rcFreeHeightField(heightfield); + rcFreeContourSet(contours); + rcFreePolyMesh(polyMesh); + rcFreePolyMeshDetail(polyMeshDetail); + } + + void IntermediateValues::writeIV(uint32 mapID, uint32 tileX, uint32 tileY) + { + char fileName[255]; + char tileString[25]; + sprintf(tileString, "[%02u,%02u]: ", tileX, tileY); + + printf("%sWriting debug output... \r", tileString); + + string name("meshes/%03u%02i%02i."); + +#define DEBUG_WRITE(fileExtension,data) \ + do { \ + sprintf(fileName, (name + fileExtension).c_str(), mapID, tileY, tileX); \ + FILE* file = fopen(fileName, "wb"); \ + if (!file) \ + { \ + char message[1024]; \ + sprintf(message, "%sFailed to open %s for writing!\n", tileString, fileName); \ + perror(message); \ + } \ + else \ + debugWrite(file, data); \ + if (file) fclose(file); \ + printf("%sWriting debug output... \r", tileString); \ + } while (false) + + if (heightfield) + DEBUG_WRITE("hf", heightfield); + if (compactHeightfield) + DEBUG_WRITE("chf", compactHeightfield); + if (contours) + DEBUG_WRITE("cs", contours); + if (polyMesh) + DEBUG_WRITE("pmesh", polyMesh); + if (polyMeshDetail) + DEBUG_WRITE("dmesh", polyMeshDetail); + +#undef DEBUG_WRITE + } + + void IntermediateValues::debugWrite(FILE* file, const rcHeightfield* mesh) + { + if (!file || !mesh) + return; + + fwrite(&(mesh->cs), sizeof(float), 1, file); + fwrite(&(mesh->ch), sizeof(float), 1, file); + fwrite(&(mesh->width), sizeof(int), 1, file); + fwrite(&(mesh->height), sizeof(int), 1, file); + fwrite(mesh->bmin, sizeof(float), 3, file); + fwrite(mesh->bmax, sizeof(float), 3, file); + + for (int y = 0; y < mesh->height; ++y) + for (int x = 0; x < mesh->width; ++x) + { + rcSpan* span = mesh->spans[x+y*mesh->width]; + + // first, count the number of spans + int spanCount = 0; + while (span) + { + spanCount++; + span = span->next; + } + + // write the span count + fwrite(&spanCount, sizeof(int), 1, file); + + // write the spans + span = mesh->spans[x+y*mesh->width]; + while (span) + { + fwrite(span, sizeof(rcSpan), 1, file); + span = span->next; + } + } + } + + void IntermediateValues::debugWrite(FILE* file, const rcCompactHeightfield* chf) + { + if (!file | !chf) + return; + + fwrite(&(chf->width), sizeof(chf->width), 1, file); + fwrite(&(chf->height), sizeof(chf->height), 1, file); + fwrite(&(chf->spanCount), sizeof(chf->spanCount), 1, file); + + fwrite(&(chf->walkableHeight), sizeof(chf->walkableHeight), 1, file); + fwrite(&(chf->walkableClimb), sizeof(chf->walkableClimb), 1, file); + + fwrite(&(chf->maxDistance), sizeof(chf->maxDistance), 1, file); + fwrite(&(chf->maxRegions), sizeof(chf->maxRegions), 1, file); + + fwrite(chf->bmin, sizeof(chf->bmin), 1, file); + fwrite(chf->bmax, sizeof(chf->bmax), 1, file); + + fwrite(&(chf->cs), sizeof(chf->cs), 1, file); + fwrite(&(chf->ch), sizeof(chf->ch), 1, file); + + int tmp = 0; + if (chf->cells) tmp |= 1; + if (chf->spans) tmp |= 2; + if (chf->dist) tmp |= 4; + if (chf->areas) tmp |= 8; + + fwrite(&tmp, sizeof(tmp), 1, file); + + if (chf->cells) + fwrite(chf->cells, sizeof(rcCompactCell), chf->width*chf->height, file); + if (chf->spans) + fwrite(chf->spans, sizeof(rcCompactSpan), chf->spanCount, file); + if (chf->dist) + fwrite(chf->dist, sizeof(unsigned short), chf->spanCount, file); + if (chf->areas) + fwrite(chf->areas, sizeof(unsigned char), chf->spanCount, file); + } + + void IntermediateValues::debugWrite(FILE* file, const rcContourSet* cs) + { + if (!file || !cs) + return; + + fwrite(&(cs->cs), sizeof(float), 1, file); + fwrite(&(cs->ch), sizeof(float), 1, file); + fwrite(cs->bmin, sizeof(float), 3, file); + fwrite(cs->bmax, sizeof(float), 3, file); + fwrite(&(cs->nconts), sizeof(int), 1, file); + for (int i = 0; i < cs->nconts; ++i) + { + fwrite(&cs->conts[i].area, sizeof(unsigned char), 1, file); + fwrite(&cs->conts[i].reg, sizeof(unsigned short), 1, file); + fwrite(&cs->conts[i].nverts, sizeof(int), 1, file); + fwrite(cs->conts[i].verts, sizeof(int), cs->conts[i].nverts*4, file); + fwrite(&cs->conts[i].nrverts, sizeof(int), 1, file); + fwrite(cs->conts[i].rverts, sizeof(int), cs->conts[i].nrverts*4, file); + } + } + + void IntermediateValues::debugWrite(FILE* file, const rcPolyMesh* mesh) + { + if (!file || !mesh) + return; + + fwrite(&(mesh->cs), sizeof(float), 1, file); + fwrite(&(mesh->ch), sizeof(float), 1, file); + fwrite(&(mesh->nvp), sizeof(int), 1, file); + fwrite(mesh->bmin, sizeof(float), 3, file); + fwrite(mesh->bmax, sizeof(float), 3, file); + fwrite(&(mesh->nverts), sizeof(int), 1, file); + fwrite(mesh->verts, sizeof(unsigned short), mesh->nverts*3, file); + fwrite(&(mesh->npolys), sizeof(int), 1, file); + fwrite(mesh->polys, sizeof(unsigned short), mesh->npolys*mesh->nvp*2, file); + fwrite(mesh->flags, sizeof(unsigned short), mesh->npolys, file); + fwrite(mesh->areas, sizeof(unsigned char), mesh->npolys, file); + fwrite(mesh->regs, sizeof(unsigned short), mesh->npolys, file); + } + + void IntermediateValues::debugWrite(FILE* file, const rcPolyMeshDetail* mesh) + { + if (!file || !mesh) + return; + + fwrite(&(mesh->nverts), sizeof(int), 1, file); + fwrite(mesh->verts, sizeof(float), mesh->nverts*3, file); + fwrite(&(mesh->ntris), sizeof(int), 1, file); + fwrite(mesh->tris, sizeof(char), mesh->ntris*4, file); + fwrite(&(mesh->nmeshes), sizeof(int), 1, file); + fwrite(mesh->meshes, sizeof(int), mesh->nmeshes*4, file); + } + + void IntermediateValues::generateObjFile(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData) + { + char objFileName[255]; + sprintf(objFileName, "meshes/map%03u.obj", mapID); + + FILE* objFile = fopen(objFileName, "wb"); + if (!objFile) + { + char message[1024]; + sprintf(message, "Failed to open %s for writing!\n", objFileName); + perror(message); + return; + } + + G3D::Array allVerts; + G3D::Array allTris; + + allTris.append(meshData.liquidTris); + allVerts.append(meshData.liquidVerts); + TerrainBuilder::copyIndices(meshData.solidTris, allTris, allVerts.size() / 3); + allVerts.append(meshData.solidVerts); + + float* verts = allVerts.getCArray(); + int vertCount = allVerts.size() / 3; + int* tris = allTris.getCArray(); + int triCount = allTris.size() / 3; + + for (int i = 0; i < allVerts.size() / 3; i++) + fprintf(objFile, "v %f %f %f\n", verts[i*3], verts[i*3 + 1], verts[i*3 + 2]); + + for (int i = 0; i < allTris.size() / 3; i++) + fprintf(objFile, "f %i %i %i\n", tris[i*3] + 1, tris[i*3 + 1] + 1, tris[i*3 + 2] + 1); + + fclose(objFile); + + + char tileString[25]; + sprintf(tileString, "[%02u,%02u]: ", tileY, tileX); + printf("%sWriting debug output... \r", tileString); + + sprintf(objFileName, "meshes/%03u.map", mapID); + + objFile = fopen(objFileName, "wb"); + if (!objFile) + { + char message[1024]; + sprintf(message, "Failed to open %s for writing!\n", objFileName); + perror(message); + return; + } + + char b = '\0'; + fwrite(&b, sizeof(char), 1, objFile); + fclose(objFile); + + sprintf(objFileName, "meshes/%03u%02u%02u.mesh", mapID, tileY, tileX); + objFile = fopen(objFileName, "wb"); + if (!objFile) + { + char message[1024]; + sprintf(message, "Failed to open %s for writing!\n", objFileName); + perror(message); + return; + } + + fwrite(&vertCount, sizeof(int), 1, objFile); + fwrite(verts, sizeof(float), vertCount*3, objFile); + fflush(objFile); + + fwrite(&triCount, sizeof(int), 1, objFile); + fwrite(tris, sizeof(int), triCount*3, objFile); + fflush(objFile); + + fclose(objFile); + } +} diff --git a/src/tools/mmap_extractor/IntermediateValues.h b/src/tools/mmap_extractor/IntermediateValues.h new file mode 100644 index 00000000000..a267a0f6412 --- /dev/null +++ b/src/tools/mmap_extractor/IntermediateValues.h @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2005-2011 MaNGOS + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef _INTERMEDIATE_VALUES_H +#define _INTERMEDIATE_VALUES_H + +#include "PathCommon.h" +#include "TerrainBuilder.h" +#include "Recast.h" +#include "DetourNavMesh.h" + +namespace MMAP +{ + // this class gathers all debug info holding and output + struct IntermediateValues + { + rcHeightfield* heightfield; + rcCompactHeightfield* compactHeightfield; + rcContourSet* contours; + rcPolyMesh* polyMesh; + rcPolyMeshDetail* polyMeshDetail; + + IntermediateValues() : compactHeightfield(NULL), heightfield(NULL), + contours(NULL), polyMesh(NULL), polyMeshDetail(NULL) {} + ~IntermediateValues(); + + void writeIV(uint32 mapID, uint32 tileX, uint32 tileY); + + void debugWrite(FILE* file, const rcHeightfield* mesh); + void debugWrite(FILE* file, const rcCompactHeightfield* chf); + void debugWrite(FILE* file, const rcContourSet* cs); + void debugWrite(FILE* file, const rcPolyMesh* mesh); + void debugWrite(FILE* file, const rcPolyMeshDetail* mesh); + + void generateObjFile(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData); + }; +} +#endif diff --git a/src/tools/mmap_extractor/MapBuilder.cpp b/src/tools/mmap_extractor/MapBuilder.cpp new file mode 100644 index 00000000000..3ca158f0127 --- /dev/null +++ b/src/tools/mmap_extractor/MapBuilder.cpp @@ -0,0 +1,894 @@ +/* + * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2005-2011 MaNGOS + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "PathCommon.h" +#include "MapBuilder.h" + +#include "MapTree.h" +#include "ModelInstance.h" +#include "LoginDatabase.h" + +#include "DetourNavMeshBuilder.h" +#include "DetourCommon.h" + +// These make the linker happy. +LoginDatabaseWorkerPool LoginDatabase; +#include "DisableMgr.h" +namespace DisableMgr +{ + bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags) + { + return 0; + } +} + +using namespace VMAP; + +namespace MMAP +{ + MapBuilder::MapBuilder(float maxWalkableAngle, bool skipLiquid, + bool skipContinents, bool skipJunkMaps, bool skipBattlegrounds, + bool debugOutput, bool bigBaseUnit, const char* offMeshFilePath) : + m_terrainBuilder(NULL), + m_debugOutput (debugOutput), + m_skipContinents (skipContinents), + m_skipJunkMaps (skipJunkMaps), + m_skipBattlegrounds (skipBattlegrounds), + m_maxWalkableAngle (maxWalkableAngle), + m_bigBaseUnit (bigBaseUnit), + m_rcContext (NULL), + m_offMeshFilePath (offMeshFilePath) + { + m_terrainBuilder = new TerrainBuilder(skipLiquid); + + m_rcContext = new rcContext(false); + + discoverTiles(); + } + + /**************************************************************************/ + MapBuilder::~MapBuilder() + { + for (TileList::iterator it = m_tiles.begin(); it != m_tiles.end(); ++it) + { + (*it).second->clear(); + delete (*it).second; + } + + delete m_terrainBuilder; + delete m_rcContext; + } + + /**************************************************************************/ + void MapBuilder::discoverTiles() + { + vector files; + uint32 mapID, tileX, tileY, tileID, count = 0; + char filter[12]; + + printf("Discovering maps... "); + getDirContents(files, "maps"); + for (uint32 i = 0; i < files.size(); ++i) + { + mapID = uint32(atoi(files[i].substr(0,3).c_str())); + if (m_tiles.find(mapID) == m_tiles.end()) + { + m_tiles.insert(pair*>(mapID, new set)); + count++; + } + } + + files.clear(); + getDirContents(files, "vmaps", "*.vmtree"); + for (uint32 i = 0; i < files.size(); ++i) + { + mapID = uint32(atoi(files[i].substr(0,3).c_str())); + m_tiles.insert(pair*>(mapID, new set)); + count++; + } + printf("found %u.\n", count); + + count = 0; + printf("Discovering tiles... "); + for (TileList::iterator itr = m_tiles.begin(); itr != m_tiles.end(); ++itr) + { + set* tiles = (*itr).second; + mapID = (*itr).first; + + sprintf(filter, "%03u*.vmtile", mapID); + files.clear(); + getDirContents(files, "vmaps", filter); + for (uint32 i = 0; i < files.size(); ++i) + { + tileX = uint32(atoi(files[i].substr(7,2).c_str())); + tileY = uint32(atoi(files[i].substr(4,2).c_str())); + tileID = StaticMapTree::packTileID(tileY, tileX); + + tiles->insert(tileID); + count++; + } + + sprintf(filter, "%03u*", mapID); + files.clear(); + getDirContents(files, "maps", filter); + for (uint32 i = 0; i < files.size(); ++i) + { + tileY = uint32(atoi(files[i].substr(3,2).c_str())); + tileX = uint32(atoi(files[i].substr(5,2).c_str())); + tileID = StaticMapTree::packTileID(tileX, tileY); + + if (tiles->insert(tileID).second) + count++; + } + } + printf("found %u.\n\n", count); + } + + /**************************************************************************/ + set* MapBuilder::getTileList(uint32 mapID) + { + TileList::iterator itr = m_tiles.find(mapID); + if (itr != m_tiles.end()) + return (*itr).second; + + set* tiles = new set(); + m_tiles.insert(pair*>(mapID, tiles)); + return tiles; + } + + /**************************************************************************/ + void MapBuilder::buildAllMaps() + { + for (TileList::iterator it = m_tiles.begin(); it != m_tiles.end(); ++it) + { + uint32 mapID = (*it).first; + if (!shouldSkipMap(mapID)) + buildMap(mapID); + } + } + + /**************************************************************************/ + void MapBuilder::getGridBounds(uint32 mapID, uint32 &minX, uint32 &minY, uint32 &maxX, uint32 &maxY) + { + maxX = INT_MAX; + maxY = INT_MAX; + minX = INT_MIN; + minY = INT_MIN; + + float bmin[3], bmax[3], lmin[3], lmax[3]; + MeshData meshData; + + // make sure we process maps which don't have tiles + // initialize the static tree, which loads WDT models + if (!m_terrainBuilder->loadVMap(mapID, 64, 64, meshData)) + return; + + // get the coord bounds of the model data + if (meshData.solidVerts.size() + meshData.liquidVerts.size() == 0) + return; + + // get the coord bounds of the model data + if (meshData.solidVerts.size() && meshData.liquidVerts.size()) + { + rcCalcBounds(meshData.solidVerts.getCArray(), meshData.solidVerts.size() / 3, bmin, bmax); + rcCalcBounds(meshData.liquidVerts.getCArray(), meshData.liquidVerts.size() / 3, lmin, lmax); + rcVmin(bmin, lmin); + rcVmax(bmax, lmax); + } + else if (meshData.solidVerts.size()) + rcCalcBounds(meshData.solidVerts.getCArray(), meshData.solidVerts.size() / 3, bmin, bmax); + else + rcCalcBounds(meshData.liquidVerts.getCArray(), meshData.liquidVerts.size() / 3, lmin, lmax); + + // convert coord bounds to grid bounds + maxX = 32 - bmin[0] / GRID_SIZE; + maxY = 32 - bmin[2] / GRID_SIZE; + minX = 32 - bmax[0] / GRID_SIZE; + minY = 32 - bmax[2] / GRID_SIZE; + } + + /**************************************************************************/ + void MapBuilder::buildSingleTile(uint32 mapID, uint32 tileX, uint32 tileY) + { + dtNavMesh* navMesh = NULL; + buildNavMesh(mapID, navMesh); + if (!navMesh) + { + printf("Failed creating navmesh! \n"); + return; + } + + buildTile(mapID, tileX, tileY, navMesh); + dtFreeNavMesh(navMesh); + } + + /**************************************************************************/ + void MapBuilder::buildMap(uint32 mapID) + { + printf("Building map %03u:\n", mapID); + + set* tiles = getTileList(mapID); + + // make sure we process maps which don't have tiles + if (!tiles->size()) + { + // convert coord bounds to grid bounds + uint32 minX, minY, maxX, maxY; + getGridBounds(mapID, minX, minY, maxX, maxY); + + // add all tiles within bounds to tile list. + for (uint32 i = minX; i <= maxX; ++i) + for (uint32 j = minY; j <= maxY; ++j) + tiles->insert(StaticMapTree::packTileID(i, j)); + } + + if (!tiles->size()) + return; + + // build navMesh + dtNavMesh* navMesh = NULL; + buildNavMesh(mapID, navMesh); + if (!navMesh) + { + printf("Failed creating navmesh! \n"); + return; + } + + // now start building mmtiles for each tile + printf("We have %u tiles. \n", (unsigned int)tiles->size()); + for (set::iterator it = tiles->begin(); it != tiles->end(); ++it) + { + uint32 tileX, tileY; + + // unpack tile coords + StaticMapTree::unpackTileID((*it), tileX, tileY); + + if (shouldSkipTile(mapID, tileX, tileY)) + continue; + + buildTile(mapID, tileX, tileY, navMesh); + } + + dtFreeNavMesh(navMesh); + + printf("Complete! \n\n"); + } + + /**************************************************************************/ + void MapBuilder::buildTile(uint32 mapID, uint32 tileX, uint32 tileY, dtNavMesh* navMesh) + { + printf("Building map %03u, tile [%02u,%02u]\n", mapID, tileX, tileY); + + MeshData meshData; + + // get heightmap data + m_terrainBuilder->loadMap(mapID, tileX, tileY, meshData); + + // get model data + m_terrainBuilder->loadVMap(mapID, tileY, tileX, meshData); + + // if there is no data, give up now + if (!meshData.solidVerts.size() && !meshData.liquidVerts.size()) + return; + + // remove unused vertices + TerrainBuilder::cleanVertices(meshData.solidVerts, meshData.solidTris); + TerrainBuilder::cleanVertices(meshData.liquidVerts, meshData.liquidTris); + + // gather all mesh data for final data check, and bounds calculation + G3D::Array allVerts; + allVerts.append(meshData.liquidVerts); + allVerts.append(meshData.solidVerts); + + if (!allVerts.size()) + return; + + // get bounds of current tile + float bmin[3], bmax[3]; + getTileBounds(tileX, tileY, allVerts.getCArray(), allVerts.size() / 3, bmin, bmax); + + m_terrainBuilder->loadOffMeshConnections(mapID, tileX, tileY, meshData, m_offMeshFilePath); + + // build navmesh tile + buildMoveMapTile(mapID, tileX, tileY, meshData, bmin, bmax, navMesh); + } + + /**************************************************************************/ + void MapBuilder::buildNavMesh(uint32 mapID, dtNavMesh* &navMesh) + { + set* tiles = getTileList(mapID); + + // old code for non-statically assigned bitmask sizes: + ///*** calculate number of bits needed to store tiles & polys ***/ + //int tileBits = dtIlog2(dtNextPow2(tiles->size())); + //if (tileBits < 1) tileBits = 1; // need at least one bit! + //int polyBits = sizeof(dtPolyRef)*8 - SALT_MIN_BITS - tileBits; + + int tileBits = STATIC_TILE_BITS; + int polyBits = STATIC_POLY_BITS; + + int maxTiles = tiles->size(); + int maxPolysPerTile = 1 << polyBits; + + /*** calculate bounds of map ***/ + + uint32 tileXMin = 64, tileYMin = 64, tileXMax = 0, tileYMax = 0, tileX, tileY; + for (set::iterator it = tiles->begin(); it != tiles->end(); ++it) + { + StaticMapTree::unpackTileID((*it), tileX, tileY); + + if (tileX > tileXMax) + tileXMax = tileX; + else if (tileX < tileXMin) + tileXMin = tileX; + + if (tileY > tileYMax) + tileYMax = tileY; + else if (tileY < tileYMin) + tileYMin = tileY; + } + + // use Max because '32 - tileX' is negative for values over 32 + float bmin[3], bmax[3]; + getTileBounds(tileXMax, tileYMax, NULL, 0, bmin, bmax); + + /*** now create the navmesh ***/ + + // navmesh creation params + dtNavMeshParams navMeshParams; + memset(&navMeshParams, 0, sizeof(dtNavMeshParams)); + navMeshParams.tileWidth = GRID_SIZE; + navMeshParams.tileHeight = GRID_SIZE; + rcVcopy(navMeshParams.orig, bmin); + navMeshParams.maxTiles = maxTiles; + navMeshParams.maxPolys = maxPolysPerTile; + + navMesh = dtAllocNavMesh(); + printf("Creating navMesh... \r"); + if (!navMesh->init(&navMeshParams)) + { + printf("Failed creating navmesh! \n"); + return; + } + + char fileName[25]; + sprintf(fileName, "mmaps/%03u.mmap", mapID); + + FILE* file = fopen(fileName, "wb"); + if (!file) + { + dtFreeNavMesh(navMesh); + char message[1024]; + sprintf(message, "Failed to open %s for writing!\n", fileName); + perror(message); + return; + } + + // now that we know navMesh params are valid, we can write them to file + fwrite(&navMeshParams, sizeof(dtNavMeshParams), 1, file); + fclose(file); + } + + /**************************************************************************/ + void MapBuilder::buildMoveMapTile(uint32 mapID, uint32 tileX, uint32 tileY, + MeshData &meshData, float bmin[3], float bmax[3], + dtNavMesh* navMesh) + { + // console output + char tileString[10]; + sprintf(tileString, "[%02i,%02i]: ", tileX, tileY); + printf("%s Building movemap tiles... \r", tileString); + + IntermediateValues iv; + + float* tVerts = meshData.solidVerts.getCArray(); + int tVertCount = meshData.solidVerts.size() / 3; + int* tTris = meshData.solidTris.getCArray(); + int tTriCount = meshData.solidTris.size() / 3; + + float* lVerts = meshData.liquidVerts.getCArray(); + int lVertCount = meshData.liquidVerts.size() / 3; + int* lTris = meshData.liquidTris.getCArray(); + int lTriCount = meshData.liquidTris.size() / 3; + uint8* lTriFlags = meshData.liquidType.getCArray(); + + // these are WORLD UNIT based metrics + // this are basic unit dimentions + // value have to divide GRID_SIZE(533.33333f) ( aka: 0.5333, 0.2666, 0.3333, 0.1333, etc ) + const static float BASE_UNIT_DIM = m_bigBaseUnit ? 0.533333f : 0.266666f; + + // All are in UNIT metrics! + const static int VERTEX_PER_MAP = int(GRID_SIZE/BASE_UNIT_DIM + 0.5f); + const static int VERTEX_PER_TILE = m_bigBaseUnit ? 40 : 80; // must divide VERTEX_PER_MAP + const static int TILES_PER_MAP = VERTEX_PER_MAP/VERTEX_PER_TILE; + + rcConfig config; + memset(&config, 0, sizeof(rcConfig)); + + rcVcopy(config.bmin, bmin); + rcVcopy(config.bmax, bmax); + + config.maxVertsPerPoly = DT_VERTS_PER_POLYGON; + config.cs = BASE_UNIT_DIM; + config.ch = BASE_UNIT_DIM; + config.walkableSlopeAngle = m_maxWalkableAngle; + config.tileSize = VERTEX_PER_TILE; + config.walkableRadius = m_bigBaseUnit ? 1 : 2; + config.borderSize = config.walkableRadius + 3; + config.maxEdgeLen = VERTEX_PER_TILE + 1; //anything bigger than tileSize + config.walkableHeight = m_bigBaseUnit ? 3 : 6; + config.walkableClimb = m_bigBaseUnit ? 2 : 4; // keep less than walkableHeight + config.minRegionArea = rcSqr(60); + config.mergeRegionArea = rcSqr(50); + config.maxSimplificationError = 2.0f; // eliminates most jagged edges (tinny polygons) + config.detailSampleDist = config.cs * 64; + config.detailSampleMaxError = config.ch * 2; + + // this sets the dimensions of the heightfield - should maybe happen before border padding + rcCalcGridSize(config.bmin, config.bmax, config.cs, &config.width, &config.height); + + // allocate subregions : tiles + Tile* tiles = new Tile[TILES_PER_MAP * TILES_PER_MAP]; + + // Initialize per tile config. + rcConfig tileCfg; + memcpy(&tileCfg, &config, sizeof(rcConfig)); + tileCfg.width = config.tileSize + config.borderSize*2; + tileCfg.height = config.tileSize + config.borderSize*2; + + // build all tiles + for (int y = 0; y < TILES_PER_MAP; ++y) + { + for (int x = 0; x < TILES_PER_MAP; ++x) + { + Tile& tile = tiles[x + y*TILES_PER_MAP]; + + // Calculate the per tile bounding box. + tileCfg.bmin[0] = config.bmin[0] + (x*config.tileSize - config.borderSize)*config.cs; + tileCfg.bmin[2] = config.bmin[2] + (y*config.tileSize - config.borderSize)*config.cs; + tileCfg.bmax[0] = config.bmin[0] + ((x+1)*config.tileSize + config.borderSize)*config.cs; + tileCfg.bmax[2] = config.bmin[2] + ((y+1)*config.tileSize + config.borderSize)*config.cs; + + float tbmin[2], tbmax[2]; + tbmin[0] = tileCfg.bmin[0]; + tbmin[1] = tileCfg.bmin[2]; + tbmax[0] = tileCfg.bmax[0]; + tbmax[1] = tileCfg.bmax[2]; + + // build heightfield + tile.solid = rcAllocHeightfield(); + if (!tile.solid || !rcCreateHeightfield(m_rcContext, *tile.solid, tileCfg.width, tileCfg.height, tileCfg.bmin, tileCfg.bmax, tileCfg.cs, tileCfg.ch)) + { + printf("%sFailed building heightfield! \n", tileString); + continue; + } + + // mark all walkable tiles, both liquids and solids + unsigned char* triFlags = new unsigned char[tTriCount]; + memset(triFlags, NAV_GROUND, tTriCount*sizeof(unsigned char)); + rcClearUnwalkableTriangles(m_rcContext, tileCfg.walkableSlopeAngle, tVerts, tVertCount, tTris, tTriCount, triFlags); + rcRasterizeTriangles(m_rcContext, tVerts, tVertCount, tTris, triFlags, tTriCount, *tile.solid, config.walkableClimb); + delete [] triFlags; + + rcFilterLowHangingWalkableObstacles(m_rcContext, config.walkableClimb, *tile.solid); + rcFilterLedgeSpans(m_rcContext, tileCfg.walkableHeight, tileCfg.walkableClimb, *tile.solid); + rcFilterWalkableLowHeightSpans(m_rcContext, tileCfg.walkableHeight, *tile.solid); + + rcRasterizeTriangles(m_rcContext, lVerts, lVertCount, lTris, lTriFlags, lTriCount, *tile.solid, config.walkableClimb); + + // compact heightfield spans + tile.chf = rcAllocCompactHeightfield(); + if (!tile.chf || !rcBuildCompactHeightfield(m_rcContext, tileCfg.walkableHeight, tileCfg.walkableClimb, *tile.solid, *tile.chf)) + { + printf("%sFailed compacting heightfield! \n", tileString); + continue; + } + + // build polymesh intermediates + if (!rcErodeWalkableArea(m_rcContext, config.walkableRadius, *tile.chf)) + { + printf("%sFailed eroding area! \n", tileString); + continue; + } + + if (!rcBuildDistanceField(m_rcContext, *tile.chf)) + { + printf("%sFailed building distance field! \n", tileString); + continue; + } + + if (!rcBuildRegions(m_rcContext, *tile.chf, tileCfg.borderSize, tileCfg.minRegionArea, tileCfg.mergeRegionArea)) + { + printf("%sFailed building regions! \n", tileString); + continue; + } + + tile.cset = rcAllocContourSet(); + if (!tile.cset || !rcBuildContours(m_rcContext, *tile.chf, tileCfg.maxSimplificationError, tileCfg.maxEdgeLen, *tile.cset)) + { + printf("%sFailed building contours! \n", tileString); + continue; + } + + // build polymesh + tile.pmesh = rcAllocPolyMesh(); + if (!tile.pmesh || !rcBuildPolyMesh(m_rcContext, *tile.cset, tileCfg.maxVertsPerPoly, *tile.pmesh)) + { + printf("%sFailed building polymesh! \n", tileString); + continue; + } + + tile.dmesh = rcAllocPolyMeshDetail(); + if (!tile.dmesh || !rcBuildPolyMeshDetail(m_rcContext, *tile.pmesh, *tile.chf, tileCfg.detailSampleDist, tileCfg .detailSampleMaxError, *tile.dmesh)) + { + printf("%sFailed building polymesh detail! \n", tileString); + continue; + } + + // free those up + // we may want to keep them in the future for debug + // but right now, we don't have the code to merge them + rcFreeHeightField(tile.solid); + tile.solid = NULL; + rcFreeCompactHeightfield(tile.chf); + tile.chf = NULL; + rcFreeContourSet(tile.cset); + tile.cset = NULL; + } + } + + // merge per tile poly and detail meshes + rcPolyMesh** pmmerge = new rcPolyMesh*[TILES_PER_MAP * TILES_PER_MAP]; + if (!pmmerge) + { + printf("%s alloc pmmerge FIALED! \r", tileString); + return; + } + + rcPolyMeshDetail** dmmerge = new rcPolyMeshDetail*[TILES_PER_MAP * TILES_PER_MAP]; + if (!dmmerge) + { + printf("%s alloc dmmerge FIALED! \r", tileString); + return; + } + + int nmerge = 0; + for (int y = 0; y < TILES_PER_MAP; ++y) + { + for (int x = 0; x < TILES_PER_MAP; ++x) + { + Tile& tile = tiles[x + y*TILES_PER_MAP]; + if (tile.pmesh) + { + pmmerge[nmerge] = tile.pmesh; + dmmerge[nmerge] = tile.dmesh; + nmerge++; + } + } + } + + iv.polyMesh = rcAllocPolyMesh(); + if (!iv.polyMesh) + { + printf("%s alloc iv.polyMesh FIALED! \r", tileString); + return; + } + rcMergePolyMeshes(m_rcContext, pmmerge, nmerge, *iv.polyMesh); + + iv.polyMeshDetail = rcAllocPolyMeshDetail(); + if (!iv.polyMeshDetail) + { + printf("%s alloc m_dmesh FIALED! \r", tileString); + return; + } + rcMergePolyMeshDetails(m_rcContext, dmmerge, nmerge, *iv.polyMeshDetail); + + // free things up + delete [] pmmerge; + delete [] dmmerge; + + delete [] tiles; + + // remove padding for extraction + for (int i = 0; i < iv.polyMesh->nverts; ++i) + { + unsigned short* v = &iv.polyMesh->verts[i*3]; + v[0] -= (unsigned short)config.borderSize; + v[2] -= (unsigned short)config.borderSize; + } + + // set polygons as walkable + // TODO: special flags for DYNAMIC polygons, ie surfaces that can be turned on and off + for (int i = 0; i < iv.polyMesh->npolys; ++i) + if (iv.polyMesh->areas[i] & RC_WALKABLE_AREA) + iv.polyMesh->flags[i] = iv.polyMesh->areas[i]; + + // setup mesh parameters + dtNavMeshCreateParams params; + memset(¶ms, 0, sizeof(params)); + params.verts = iv.polyMesh->verts; + params.vertCount = iv.polyMesh->nverts; + params.polys = iv.polyMesh->polys; + params.polyAreas = iv.polyMesh->areas; + params.polyFlags = iv.polyMesh->flags; + params.polyCount = iv.polyMesh->npolys; + params.nvp = iv.polyMesh->nvp; + params.detailMeshes = iv.polyMeshDetail->meshes; + params.detailVerts = iv.polyMeshDetail->verts; + params.detailVertsCount = iv.polyMeshDetail->nverts; + params.detailTris = iv.polyMeshDetail->tris; + params.detailTriCount = iv.polyMeshDetail->ntris; + + params.offMeshConVerts = meshData.offMeshConnections.getCArray(); + params.offMeshConCount = meshData.offMeshConnections.size()/6; + params.offMeshConRad = meshData.offMeshConnectionRads.getCArray(); + params.offMeshConDir = meshData.offMeshConnectionDirs.getCArray(); + params.offMeshConAreas = meshData.offMeshConnectionsAreas.getCArray(); + params.offMeshConFlags = meshData.offMeshConnectionsFlags.getCArray(); + + params.walkableHeight = BASE_UNIT_DIM*config.walkableHeight; // agent height + params.walkableRadius = BASE_UNIT_DIM*config.walkableRadius; // agent radius + params.walkableClimb = BASE_UNIT_DIM*config.walkableClimb; // keep less that walkableHeight (aka agent height)! + params.tileX = (((bmin[0] + bmax[0]) / 2) - navMesh->getParams()->orig[0]) / GRID_SIZE; + params.tileY = (((bmin[2] + bmax[2]) / 2) - navMesh->getParams()->orig[2]) / GRID_SIZE; + rcVcopy(params.bmin, bmin); + rcVcopy(params.bmax, bmax); + params.cs = config.cs; + params.ch = config.ch; + params.tileSize = VERTEX_PER_MAP; + + // will hold final navmesh + unsigned char* navData = NULL; + int navDataSize = 0; + + do + { + // these values are checked within dtCreateNavMeshData - handle them here + // so we have a clear error message + if (params.nvp > DT_VERTS_PER_POLYGON) + { + printf("%s Invalid verts-per-polygon value! \n", tileString); + continue; + } + if (params.vertCount >= 0xffff) + { + printf("%s Too many vertices! \n", tileString); + continue; + } + if (!params.vertCount || !params.verts) + { + // occurs mostly when adjacent tiles have models + // loaded but those models don't span into this tile + + // message is an annoyance + //printf("%sNo vertices to build tile! \n", tileString); + continue; + } + if (!params.polyCount || !params.polys || + TILES_PER_MAP*TILES_PER_MAP == params.polyCount) + { + // we have flat tiles with no actual geometry - don't build those, its useless + // keep in mind that we do output those into debug info + // drop tiles with only exact count - some tiles may have geometry while having less tiles + printf("%s No polygons to build on tile! \n", tileString); + continue; + } + if (!params.detailMeshes || !params.detailVerts || !params.detailTris) + { + printf("%s No detail mesh to build tile! \n", tileString); + continue; + } + + printf("%s Building navmesh tile... \r", tileString); + if (!dtCreateNavMeshData(¶ms, &navData, &navDataSize)) + { + printf("%s Failed building navmesh tile! \n", tileString); + continue; + } + + dtTileRef tileRef = 0; + printf("%s Adding tile to navmesh... \r", tileString); + // DT_TILE_FREE_DATA tells detour to unallocate memory when the tile + // is removed via removeTile() + dtStatus dtResult = navMesh->addTile(navData, navDataSize, DT_TILE_FREE_DATA, 0, &tileRef); + if (!tileRef || dtResult != DT_SUCCESS) + { + printf("%s Failed adding tile to navmesh! \n", tileString); + continue; + } + + // file output + char fileName[255]; + sprintf(fileName, "mmaps/%03u%02i%02i.mmtile", mapID, tileY, tileX); + FILE* file = fopen(fileName, "wb"); + if (!file) + { + char message[1024]; + sprintf(message, "Failed to open %s for writing!\n", fileName); + perror(message); + navMesh->removeTile(tileRef, NULL, NULL); + continue; + } + + printf("%s Writing to file... \r", tileString); + + // write header + MmapTileHeader header; + header.usesLiquids = m_terrainBuilder->usesLiquids(); + header.size = uint32(navDataSize); + fwrite(&header, sizeof(MmapTileHeader), 1, file); + + // write data + fwrite(navData, sizeof(unsigned char), navDataSize, file); + fclose(file); + + // now that tile is written to disk, we can unload it + navMesh->removeTile(tileRef, NULL, NULL); + } + while (0); + + if (m_debugOutput) + { + // restore padding so that the debug visualization is correct + for (int i = 0; i < iv.polyMesh->nverts; ++i) + { + unsigned short* v = &iv.polyMesh->verts[i*3]; + v[0] += (unsigned short)config.borderSize; + v[2] += (unsigned short)config.borderSize; + } + + iv.generateObjFile(mapID, tileX, tileY, meshData); + iv.writeIV(mapID, tileX, tileY); + } + } + + /**************************************************************************/ + void MapBuilder::getTileBounds(uint32 tileX, uint32 tileY, float* verts, int vertCount, float* bmin, float* bmax) + { + // this is for elevation + if (verts && vertCount) + rcCalcBounds(verts, vertCount, bmin, bmax); + else + { + bmin[1] = FLT_MIN; + bmax[1] = FLT_MAX; + } + + // this is for width and depth + bmax[0] = (32 - int(tileX)) * GRID_SIZE; + bmax[2] = (32 - int(tileY)) * GRID_SIZE; + bmin[0] = bmax[0] - GRID_SIZE; + bmin[2] = bmax[2] - GRID_SIZE; + } + + /**************************************************************************/ + bool MapBuilder::shouldSkipMap(uint32 mapID) + { + if (m_skipContinents) + switch (mapID) + { + case 0: + case 1: + case 530: + case 571: + return true; + default: + break; + } + + if (m_skipJunkMaps) + switch (mapID) + { + case 13: // test.wdt + case 25: // ScottTest.wdt + case 29: // Test.wdt + case 42: // Colin.wdt + case 169: // EmeraldDream.wdt (unused, and very large) + case 451: // development.wdt + case 573: // ExteriorTest.wdt + case 597: // CraigTest.wdt + case 605: // development_nonweighted.wdt + case 606: // QA_DVD.wdt + return true; + default: + if (isTransportMap(mapID)) + return true; + break; + } + + if (m_skipBattlegrounds) + switch (mapID) + { + case 30: // AV + case 37: // ? + case 489: // WSG + case 529: // AB + case 566: // EotS + case 607: // SotA + case 628: // IoC + return true; + default: + break; + } + + return false; + } + + /**************************************************************************/ + bool MapBuilder::isTransportMap(uint32 mapID) + { + switch (mapID) + { + // transport maps + case 582: + case 584: + case 586: + case 587: + case 588: + case 589: + case 590: + case 591: + case 592: + case 593: + case 594: + case 596: + case 610: + case 612: + case 613: + case 614: + case 620: + case 621: + case 622: + case 623: + case 641: + case 642: + case 647: + case 672: + case 673: + case 712: + case 713: + case 718: + return true; + default: + return false; + } + } + + /**************************************************************************/ + bool MapBuilder::shouldSkipTile(uint32 mapID, uint32 tileX, uint32 tileY) + { + char fileName[255]; + sprintf(fileName, "mmaps/%03u%02i%02i.mmtile", mapID, tileY, tileX); + FILE* file = fopen(fileName, "rb"); + if (!file) + return false; + + MmapTileHeader header; + fread(&header, sizeof(MmapTileHeader), 1, file); + fclose(file); + + if (header.mmapMagic != MMAP_MAGIC || header.dtVersion != DT_NAVMESH_VERSION) + return false; + + if (header.mmapVersion != MMAP_VERSION) + return false; + + return true; + } + +} diff --git a/src/tools/mmap_extractor/MapBuilder.h b/src/tools/mmap_extractor/MapBuilder.h new file mode 100644 index 00000000000..d0f33ce9a79 --- /dev/null +++ b/src/tools/mmap_extractor/MapBuilder.h @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2005-2011 MaNGOS + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef _MAP_BUILDER_H +#define _MAP_BUILDER_H + +#include +#include +#include + +#include "TerrainBuilder.h" +#include "IntermediateValues.h" + +#include "IVMapManager.h" +#include "WorldModel.h" + +#include "Recast.h" +#include "DetourNavMesh.h" + +using namespace std; +using namespace VMAP; + +// G3D namespace typedefs conflicts with ACE typedefs + +namespace MMAP +{ + typedef map*> TileList; + struct Tile + { + Tile() : chf(NULL), solid(NULL), cset(NULL), pmesh(NULL), dmesh(NULL) {} + ~Tile() + { + rcFreeCompactHeightfield(chf); + rcFreeContourSet(cset); + rcFreeHeightField(solid); + rcFreePolyMesh(pmesh); + rcFreePolyMeshDetail(dmesh); + } + rcCompactHeightfield* chf; + rcHeightfield* solid; + rcContourSet* cset; + rcPolyMesh* pmesh; + rcPolyMeshDetail* dmesh; + }; + + class MapBuilder + { + public: + MapBuilder(float maxWalkableAngle = 60.f, + bool skipLiquid = false, + bool skipContinents = false, + bool skipJunkMaps = true, + bool skipBattlegrounds = false, + bool debugOutput = false, + bool bigBaseUnit = false, + const char* offMeshFilePath = NULL); + + ~MapBuilder(); + + // builds all mmap tiles for the specified map id (ignores skip settings) + void buildMap(uint32 mapID); + + // builds an mmap tile for the specified map and its mesh + void buildSingleTile(uint32 mapID, uint32 tileX, uint32 tileY); + + // builds list of maps, then builds all of mmap tiles (based on the skip settings) + void buildAllMaps(); + + private: + // detect maps and tiles + void discoverTiles(); + set* getTileList(uint32 mapID); + + void buildNavMesh(uint32 mapID, dtNavMesh* &navMesh); + + void buildTile(uint32 mapID, uint32 tileX, uint32 tileY, dtNavMesh* navMesh); + + // move map building + void buildMoveMapTile(uint32 mapID, + uint32 tileX, + uint32 tileY, + MeshData &meshData, + float bmin[3], + float bmax[3], + dtNavMesh* navMesh); + + void getTileBounds(uint32 tileX, uint32 tileY, + float* verts, int vertCount, + float* bmin, float* bmax); + void getGridBounds(uint32 mapID, uint32 &minX, uint32 &minY, uint32 &maxX, uint32 &maxY); + + bool shouldSkipMap(uint32 mapID); + bool isTransportMap(uint32 mapID); + bool shouldSkipTile(uint32 mapID, uint32 tileX, uint32 tileY); + + TerrainBuilder* m_terrainBuilder; + TileList m_tiles; + + bool m_debugOutput; + + const char* m_offMeshFilePath; + bool m_skipContinents; + bool m_skipJunkMaps; + bool m_skipBattlegrounds; + + float m_maxWalkableAngle; + bool m_bigBaseUnit; + + // build performance - not really used for now + rcContext* m_rcContext; + }; +} + +#endif diff --git a/src/tools/mmap_extractor/PathCommon.h b/src/tools/mmap_extractor/PathCommon.h new file mode 100644 index 00000000000..fd02ec02d50 --- /dev/null +++ b/src/tools/mmap_extractor/PathCommon.h @@ -0,0 +1,128 @@ +/* + * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2005-2011 MaNGOS + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef _MMAP_COMMON_H +#define _MMAP_COMMON_H + +#include +#include + +#include "Define.h" + +#ifndef _WIN32 + #include + #include +#endif + +#ifdef __linux__ + #include +#endif + +using namespace std; + +namespace MMAP +{ + inline bool matchWildcardFilter(const char* filter, const char* str) + { + if (!filter || !str) + return false; + + // end on null character + while (*filter && *str) + { + if (*filter == '*') + { + if (*++filter == '\0') // wildcard at end of filter means all remaing chars match + return true; + + while (true) + { + if (*filter == *str) + break; + if (*str == '\0') + return false; // reached end of string without matching next filter character + str++; + } + } + else if (*filter != *str) + return false; // mismatch + + filter++; + str++; + } + + return ((*filter == '\0' || (*filter == '*' && *++filter == '\0')) && *str == '\0'); + } + + enum ListFilesResult + { + LISTFILE_DIRECTORY_NOT_FOUND = 0, + LISTFILE_OK = 1 + }; + + inline ListFilesResult getDirContents(vector &fileList, string dirpath = ".", string filter = "*", bool includeSubDirs = false) + { + #ifdef WIN32 + HANDLE hFind; + WIN32_FIND_DATA findFileInfo; + string directory; + + directory = dirpath + "/" + filter; + + hFind = FindFirstFile(directory.c_str(), &findFileInfo); + + if (hFind == INVALID_HANDLE_VALUE) + return LISTFILE_DIRECTORY_NOT_FOUND; + do + { + if (includeSubDirs || (findFileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) + fileList.push_back(string(findFileInfo.cFileName)); + } + while (FindNextFile(hFind, &findFileInfo)); + + FindClose(hFind); + + #else + const char *p = dirpath.c_str(); + DIR * dirp = opendir(p); + struct dirent * dp; + dirp = opendir(p); + + while (dirp) + { + errno = 0; + if ((dp = readdir(dirp)) != NULL) + { + if (matchWildcardFilter(filter.c_str(), dp->d_name)) + fileList.push_back(string(dp->d_name)); + } + else + break; + } + + if (dirp) + closedir(dirp); + else + return LISTFILE_DIRECTORY_NOT_FOUND; + #endif + + return LISTFILE_OK; + } +} + +#endif diff --git a/src/tools/mmap_extractor/PathGenerator.cpp b/src/tools/mmap_extractor/PathGenerator.cpp new file mode 100644 index 00000000000..2eb2c6545c4 --- /dev/null +++ b/src/tools/mmap_extractor/PathGenerator.cpp @@ -0,0 +1,273 @@ +/* + * Copyright (C) 2005-2011 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "PathCommon.h" +#include "MapBuilder.h" + +using namespace MMAP; + +bool checkDirectories(bool debugOutput) +{ + vector dirFiles; + + if (getDirContents(dirFiles, "maps") == LISTFILE_DIRECTORY_NOT_FOUND || !dirFiles.size()) + { + printf("'maps' directory is empty or does not exist\n"); + return false; + } + + dirFiles.clear(); + if (getDirContents(dirFiles, "vmaps", "*.vmtree") == LISTFILE_DIRECTORY_NOT_FOUND || !dirFiles.size()) + { + printf("'vmaps' directory is empty or does not exist\n"); + return false; + } + + dirFiles.clear(); + if (getDirContents(dirFiles, "mmaps") == LISTFILE_DIRECTORY_NOT_FOUND) + { + printf("'mmaps' directory does not exist\n"); + return false; + } + + dirFiles.clear(); + if (debugOutput) + { + if (getDirContents(dirFiles, "meshes") == LISTFILE_DIRECTORY_NOT_FOUND) + { + printf("'meshes' directory does not exist (no place to put debugOutput files)\n"); + return false; + } + } + + return true; +} + +bool handleArgs(int argc, char** argv, + int &mapnum, + int &tileX, + int &tileY, + float &maxAngle, + bool &skipLiquid, + bool &skipContinents, + bool &skipJunkMaps, + bool &skipBattlegrounds, + bool &debugOutput, + bool &silent, + bool &bigBaseUnit, + char* &offMeshInputPath) +{ + char* param = NULL; + for (int i = 1; i < argc; ++i) + { + if (strcmp(argv[i], "--maxAngle") == 0) + { + param = argv[++i]; + if (!param) + return false; + + float maxangle = atof(param); + if (maxangle <= 90.f && maxangle >= 45.f) + maxAngle = maxangle; + else + printf("invalid option for '--maxAngle', using default\n"); + } + else if (strcmp(argv[i], "--tile") == 0) + { + param = argv[++i]; + if (!param) + return false; + + char* stileX = strtok(param, ","); + char* stileY = strtok(NULL, ","); + int tilex = atoi(stileX); + int tiley = atoi(stileY); + + if ((tilex > 0 && tilex < 64) || (tilex == 0 && strcmp(stileX, "0") == 0)) + tileX = tilex; + if ((tiley > 0 && tiley < 64) || (tiley == 0 && strcmp(stileY, "0") == 0)) + tileY = tiley; + + if (tileX < 0 || tileY < 0) + { + printf("invalid tile coords.\n"); + return false; + } + } + else if (strcmp(argv[i], "--skipLiquid") == 0) + { + param = argv[++i]; + if (!param) + return false; + + if (strcmp(param, "true") == 0) + skipLiquid = true; + else if (strcmp(param, "false") == 0) + skipLiquid = false; + else + printf("invalid option for '--skipLiquid', using default\n"); + } + else if (strcmp(argv[i], "--skipContinents") == 0) + { + param = argv[++i]; + if (!param) + return false; + + if (strcmp(param, "true") == 0) + skipContinents = true; + else if (strcmp(param, "false") == 0) + skipContinents = false; + else + printf("invalid option for '--skipContinents', using default\n"); + } + else if (strcmp(argv[i], "--skipJunkMaps") == 0) + { + param = argv[++i]; + if (!param) + return false; + + if (strcmp(param, "true") == 0) + skipJunkMaps = true; + else if (strcmp(param, "false") == 0) + skipJunkMaps = false; + else + printf("invalid option for '--skipJunkMaps', using default\n"); + } + else if (strcmp(argv[i], "--skipBattlegrounds") == 0) + { + param = argv[++i]; + if (!param) + return false; + + if (strcmp(param, "true") == 0) + skipBattlegrounds = true; + else if (strcmp(param, "false") == 0) + skipBattlegrounds = false; + else + printf("invalid option for '--skipBattlegrounds', using default\n"); + } + else if (strcmp(argv[i], "--debugOutput") == 0) + { + param = argv[++i]; + if (!param) + return false; + + if (strcmp(param, "true") == 0) + debugOutput = true; + else if (strcmp(param, "false") == 0) + debugOutput = false; + else + printf("invalid option for '--debugOutput', using default true\n"); + } + else if (strcmp(argv[i], "--silent") == 0) + { + silent = true; + } + else if (strcmp(argv[i], "--bigBaseUnit") == 0) + { + param = argv[++i]; + if (!param) + return false; + + if (strcmp(param, "true") == 0) + bigBaseUnit = true; + else if (strcmp(param, "false") == 0) + bigBaseUnit = false; + else + printf("invalid option for '--bigBaseUnit', using default false\n"); + } + else if (strcmp(argv[i], "--offMeshInput") == 0) + { + param = argv[++i]; + if (!param) + return false; + + offMeshInputPath = param; + } + else + { + int map = atoi(argv[i]); + if (map > 0 || (map == 0 && (strcmp(argv[i], "0") == 0))) + mapnum = map; + else + { + printf("invalid map id\n"); + return false; + } + } + } + + return true; +} + +int finish(const char* message, int returnValue) +{ + printf("%s", message); + getchar(); + return returnValue; +} + +int main(int argc, char** argv) +{ + int mapnum = -1; + float maxAngle = 60.0f; + int tileX = -1, tileY = -1; + bool skipLiquid = false, + skipContinents = false, + skipJunkMaps = true, + skipBattlegrounds = false, + debugOutput = false, + silent = false, + bigBaseUnit = false; + char* offMeshInputPath = NULL; + + bool validParam = handleArgs(argc, argv, mapnum, + tileX, tileY, maxAngle, + skipLiquid, skipContinents, skipJunkMaps, skipBattlegrounds, + debugOutput, silent, bigBaseUnit, offMeshInputPath); + + if (!validParam) + return silent ? -1 : finish("You have specified invalid parameters", -1); + + if (mapnum == -1 && debugOutput) + { + if (silent) + return -2; + + printf("You have specifed debug output, but didn't specify a map to generate.\n"); + printf("This will generate debug output for ALL maps.\n"); + printf("Are you sure you want to continue? (y/n) "); + if (getchar() != 'y') + return 0; + } + + if (!checkDirectories(debugOutput)) + return silent ? -3 : finish("Press any key to close...", -3); + + MapBuilder builder(maxAngle, skipLiquid, skipContinents, skipJunkMaps, + skipBattlegrounds, debugOutput, bigBaseUnit, offMeshInputPath); + + if (tileX > -1 && tileY > -1 && mapnum >= 0) + builder.buildSingleTile(mapnum, tileX, tileY); + else if (mapnum >= 0) + builder.buildMap(uint32(mapnum)); + else + builder.buildAllMaps(); + + return silent ? 1 : finish("Movemap build is complete!", 1); +} diff --git a/src/tools/mmap_extractor/TerrainBuilder.cpp b/src/tools/mmap_extractor/TerrainBuilder.cpp new file mode 100644 index 00000000000..c696f6017a5 --- /dev/null +++ b/src/tools/mmap_extractor/TerrainBuilder.cpp @@ -0,0 +1,854 @@ +/* + * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2005-2011 MaNGOS + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "TerrainBuilder.h" + +#include "PathCommon.h" +#include "MapBuilder.h" + +#include "VMapManager2.h" +#include "MapTree.h" +#include "ModelInstance.h" + +namespace MMAP +{ + TerrainBuilder::TerrainBuilder(bool skipLiquid) : m_skipLiquid (skipLiquid){ } + TerrainBuilder::~TerrainBuilder() { } + + /**************************************************************************/ + void TerrainBuilder::getLoopVars(Spot portion, int &loopStart, int &loopEnd, int &loopInc) + { + switch (portion) + { + case ENTIRE: + loopStart = 0; + loopEnd = V8_SIZE_SQ; + loopInc = 1; + break; + case TOP: + loopStart = 0; + loopEnd = V8_SIZE; + loopInc = 1; + break; + case LEFT: + loopStart = 0; + loopEnd = V8_SIZE_SQ - V8_SIZE + 1; + loopInc = V8_SIZE; + break; + case RIGHT: + loopStart = V8_SIZE - 1; + loopEnd = V8_SIZE_SQ; + loopInc = V8_SIZE; + break; + case BOTTOM: + loopStart = V8_SIZE_SQ - V8_SIZE; + loopEnd = V8_SIZE_SQ; + loopInc = 1; + break; + } + } + + /**************************************************************************/ + void TerrainBuilder::loadMap(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData) + { + if (loadMap(mapID, tileX, tileY, meshData, ENTIRE)) + { + loadMap(mapID, tileX+1, tileY, meshData, LEFT); + loadMap(mapID, tileX-1, tileY, meshData, RIGHT); + loadMap(mapID, tileX, tileY+1, meshData, TOP); + loadMap(mapID, tileX, tileY-1, meshData, BOTTOM); + } + } + + /**************************************************************************/ + bool TerrainBuilder::loadMap(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData, Spot portion) + { + char mapFileName[255]; + sprintf(mapFileName, "maps/%03u%02u%02u.map", mapID, tileY, tileX); + + FILE* mapFile = fopen(mapFileName, "rb"); + if (!mapFile) + return false; + + map_fileheader fheader; + fread(&fheader, sizeof(map_fileheader), 1, mapFile); + + if (fheader.versionMagic != *((uint32 const*)(MAP_VERSION_MAGIC))) + { + fclose(mapFile); + printf("%s is the wrong version, please extract new .map files\n", mapFileName); + return false; + } + + map_heightHeader hheader; + fseek(mapFile, fheader.heightMapOffset, SEEK_SET); + fread(&hheader, sizeof(map_heightHeader), 1, mapFile); + + bool haveTerrain = !(hheader.flags & MAP_HEIGHT_NO_HEIGHT); + bool haveLiquid = fheader.liquidMapOffset && !m_skipLiquid; + + // no data in this map file + if (!haveTerrain && !haveLiquid) + { + fclose(mapFile); + return false; + } + + // data used later + uint16 holes[16][16]; + memset(holes, 0, sizeof(holes)); + uint8 liquid_type[16][16]; + memset(liquid_type, 0, sizeof(liquid_type)); + G3D::Array ltriangles; + G3D::Array ttriangles; + + // terrain data + if (haveTerrain) + { + int i; + float heightMultiplier; + float V9[V9_SIZE_SQ], V8[V8_SIZE_SQ]; + + if (hheader.flags & MAP_HEIGHT_AS_INT8) + { + uint8 v9[V9_SIZE_SQ]; + uint8 v8[V8_SIZE_SQ]; + fread(v9, sizeof(uint8), V9_SIZE_SQ, mapFile); + fread(v8, sizeof(uint8), V8_SIZE_SQ, mapFile); + heightMultiplier = (hheader.gridMaxHeight - hheader.gridHeight) / 255; + + for (i = 0; i < V9_SIZE_SQ; ++i) + V9[i] = (float)v9[i]*heightMultiplier + hheader.gridHeight; + + for (i = 0; i < V8_SIZE_SQ; ++i) + V8[i] = (float)v8[i]*heightMultiplier + hheader.gridHeight; + } + else if (hheader.flags & MAP_HEIGHT_AS_INT16) + { + uint16 v9[V9_SIZE_SQ]; + uint16 v8[V8_SIZE_SQ]; + fread(v9, sizeof(uint16), V9_SIZE_SQ, mapFile); + fread(v8, sizeof(uint16), V8_SIZE_SQ, mapFile); + heightMultiplier = (hheader.gridMaxHeight - hheader.gridHeight) / 65535; + + for (i = 0; i < V9_SIZE_SQ; ++i) + V9[i] = (float)v9[i]*heightMultiplier + hheader.gridHeight; + + for (i = 0; i < V8_SIZE_SQ; ++i) + V8[i] = (float)v8[i]*heightMultiplier + hheader.gridHeight; + } + else + { + fread (V9, sizeof(float), V9_SIZE_SQ, mapFile); + fread(V8, sizeof(float), V8_SIZE_SQ, mapFile); + } + + // hole data + memset(holes, 0, fheader.holesSize); + fseek(mapFile, fheader.holesOffset, SEEK_SET); + fread(holes, fheader.holesSize, 1, mapFile); + + int count = meshData.solidVerts.size() / 3; + float xoffset = (float(tileX)-32)*GRID_SIZE; + float yoffset = (float(tileY)-32)*GRID_SIZE; + + float coord[3]; + + for (i = 0; i < V9_SIZE_SQ; ++i) + { + getHeightCoord(i, GRID_V9, xoffset, yoffset, coord, V9); + meshData.solidVerts.append(coord[0]); + meshData.solidVerts.append(coord[2]); + meshData.solidVerts.append(coord[1]); + } + + for (i = 0; i < V8_SIZE_SQ; ++i) + { + getHeightCoord(i, GRID_V8, xoffset, yoffset, coord, V8); + meshData.solidVerts.append(coord[0]); + meshData.solidVerts.append(coord[2]); + meshData.solidVerts.append(coord[1]); + } + + int j, indices[3], loopStart, loopEnd, loopInc; + getLoopVars(portion, loopStart, loopEnd, loopInc); + for (i = loopStart; i < loopEnd; i+=loopInc) + for (j = TOP; j <= BOTTOM; j+=1) + { + getHeightTriangle(i, Spot(j), indices); + ttriangles.append(indices[2] + count); + ttriangles.append(indices[1] + count); + ttriangles.append(indices[0] + count); + } + } + + // liquid data + if (haveLiquid) + { + map_liquidHeader lheader; + fseek(mapFile, fheader.liquidMapOffset, SEEK_SET); + fread(&lheader, sizeof(map_liquidHeader), 1, mapFile); + + float* liquid_map = NULL; + + if (!(lheader.flags & MAP_LIQUID_NO_TYPE)) + fread(liquid_type, sizeof(liquid_type), 1, mapFile); + + if (!(lheader.flags & MAP_LIQUID_NO_HEIGHT)) + { + liquid_map = new float [lheader.width*lheader.height]; + fread(liquid_map, sizeof(float), lheader.width*lheader.height, mapFile); + } + + if (liquid_type && liquid_map) + { + int count = meshData.liquidVerts.size() / 3; + float xoffset = (float(tileX)-32)*GRID_SIZE; + float yoffset = (float(tileY)-32)*GRID_SIZE; + + float coord[3]; + int row, col; + + // generate coordinates + if (!(lheader.flags & MAP_LIQUID_NO_HEIGHT)) + { + int j = 0; + for (int i = 0; i < V9_SIZE_SQ; ++i) + { + row = i / V9_SIZE; + col = i % V9_SIZE; + + if (row < lheader.offsetY || row >= lheader.offsetY + lheader.height || + col < lheader.offsetX || col >= lheader.offsetX + lheader.width) + { + // dummy vert using invalid height + meshData.liquidVerts.append((xoffset+col*GRID_PART_SIZE)*-1, INVALID_MAP_LIQ_HEIGHT, (yoffset+row*GRID_PART_SIZE)*-1); + continue; + } + + getLiquidCoord(i, j, xoffset, yoffset, coord, liquid_map); + meshData.liquidVerts.append(coord[0]); + meshData.liquidVerts.append(coord[2]); + meshData.liquidVerts.append(coord[1]); + j++; + } + } + else + { + for (int i = 0; i < V9_SIZE_SQ; ++i) + { + row = i / V9_SIZE; + col = i % V9_SIZE; + meshData.liquidVerts.append((xoffset+col*GRID_PART_SIZE)*-1, lheader.liquidLevel, (yoffset+row*GRID_PART_SIZE)*-1); + } + } + + delete [] liquid_map; + + int indices[3], loopStart, loopEnd, loopInc, triInc; + getLoopVars(portion, loopStart, loopEnd, loopInc); + triInc = BOTTOM-TOP; + + // generate triangles + for (int i = loopStart; i < loopEnd; i+=loopInc) + for (int j = TOP; j <= BOTTOM; j+= triInc) + { + getHeightTriangle(i, Spot(j), indices, true); + ltriangles.append(indices[2] + count); + ltriangles.append(indices[1] + count); + ltriangles.append(indices[0] + count); + } + } + } + + fclose(mapFile); + + // now that we have gathered the data, we can figure out which parts to keep: + // liquid above ground, ground above liquid + int loopStart, loopEnd, loopInc, tTriCount = 4; + bool useTerrain, useLiquid; + + float* lverts = meshData.liquidVerts.getCArray(); + int* ltris = ltriangles.getCArray(); + + float* tverts = meshData.solidVerts.getCArray(); + int* ttris = ttriangles.getCArray(); + + if (ltriangles.size() + ttriangles.size() == 0) + return false; + + // make a copy of liquid vertices + // used to pad right-bottom frame due to lost vertex data at extraction + float* lverts_copy = NULL; + if (meshData.liquidVerts.size()) + { + lverts_copy = new float[meshData.liquidVerts.size()]; + memcpy(lverts_copy, lverts, sizeof(float)*meshData.liquidVerts.size()); + } + + getLoopVars(portion, loopStart, loopEnd, loopInc); + for (int i = loopStart; i < loopEnd; i+=loopInc) + { + for (int j = 0; j < 2; ++j) + { + // default is true, will change to false if needed + useTerrain = true; + useLiquid = true; + uint8 liquidType = MAP_LIQUID_TYPE_NO_WATER; + + // if there is no liquid, don't use liquid + if (!liquid_type || !meshData.liquidVerts.size() || !ltriangles.size()) + useLiquid = false; + else + { + liquidType = getLiquidType(i, liquid_type); + switch (liquidType) + { + default: + useLiquid = false; + break; + case MAP_LIQUID_TYPE_WATER: + case MAP_LIQUID_TYPE_OCEAN: + // merge different types of water + liquidType = NAV_WATER; + break; + case MAP_LIQUID_TYPE_MAGMA: + liquidType = NAV_MAGMA; + break; + case MAP_LIQUID_TYPE_SLIME: + liquidType = NAV_SLIME; + break; + case MAP_LIQUID_TYPE_DARK_WATER: + // players should not be here, so logically neither should creatures + useTerrain = false; + useLiquid = false; + break; + } + } + + // if there is no terrain, don't use terrain + if (!ttriangles.size()) + useTerrain = false; + + // while extracting ADT data we are losing right-bottom vertices + // this code adds fair approximation of lost data + if (useLiquid) + { + float quadHeight = 0; + uint32 validCount = 0; + for(uint32 idx = 0; idx < 3; idx++) + { + float h = lverts_copy[ltris[idx]*3 + 1]; + if (h != INVALID_MAP_LIQ_HEIGHT && h < INVALID_MAP_LIQ_HEIGHT_MAX) + { + quadHeight += h; + validCount++; + } + } + + // update vertex height data + if (validCount > 0 && validCount < 3) + { + quadHeight /= validCount; + for(uint32 idx = 0; idx < 3; idx++) + { + float h = lverts[ltris[idx]*3 + 1]; + if (h == INVALID_MAP_LIQ_HEIGHT || h > INVALID_MAP_LIQ_HEIGHT_MAX) + lverts[ltris[idx]*3 + 1] = quadHeight; + } + } + + // no valid vertexes - don't use this poly at all + if (validCount == 0) + useLiquid = false; + } + + // if there is a hole here, don't use the terrain + if (useTerrain) + useTerrain = !isHole(i, holes); + + // we use only one terrain kind per quad - pick higher one + if (useTerrain && useLiquid) + { + float minLLevel = INVALID_MAP_LIQ_HEIGHT_MAX; + float maxLLevel = INVALID_MAP_LIQ_HEIGHT; + for(uint32 x = 0; x < 3; x++) + { + float h = lverts[ltris[x]*3 + 1]; + if (minLLevel > h) + minLLevel = h; + + if (maxLLevel < h) + maxLLevel = h; + } + + float maxTLevel = INVALID_MAP_LIQ_HEIGHT; + float minTLevel = INVALID_MAP_LIQ_HEIGHT_MAX; + for(uint32 x = 0; x < 6; x++) + { + float h = tverts[ttris[x]*3 + 1]; + if (maxTLevel < h) + maxTLevel = h; + + if (minTLevel > h) + minTLevel = h; + } + + // terrain under the liquid? + if (minLLevel > maxTLevel) + useTerrain = false; + + //liquid under the terrain? + if (minTLevel > maxLLevel) + useLiquid = false; + } + + // store the result + if (useLiquid) + { + meshData.liquidType.append(liquidType); + for (int k = 0; k < 3; ++k) + meshData.liquidTris.append(ltris[k]); + } + + if (useTerrain) + for (int k = 0; k < 3*tTriCount/2; ++k) + meshData.solidTris.append(ttris[k]); + + // advance to next set of triangles + ltris += 3; + ttris += 3*tTriCount/2; + } + } + + if (lverts_copy) + delete [] lverts_copy; + + return meshData.solidTris.size() || meshData.liquidTris.size(); + } + + /**************************************************************************/ + void TerrainBuilder::getHeightCoord(int index, Grid grid, float xOffset, float yOffset, float* coord, float* v) + { + // wow coords: x, y, height + // coord is mirroed about the horizontal axes + switch (grid) + { + case GRID_V9: + coord[0] = (xOffset + index%(V9_SIZE)*GRID_PART_SIZE) * -1.f; + coord[1] = (yOffset + (int)(index/(V9_SIZE))*GRID_PART_SIZE) * -1.f; + coord[2] = v[index]; + break; + case GRID_V8: + coord[0] = (xOffset + index%(V8_SIZE)*GRID_PART_SIZE + GRID_PART_SIZE/2.f) * -1.f; + coord[1] = (yOffset + (int)(index/(V8_SIZE))*GRID_PART_SIZE + GRID_PART_SIZE/2.f) * -1.f; + coord[2] = v[index]; + break; + } + } + + /**************************************************************************/ + void TerrainBuilder::getHeightTriangle(int square, Spot triangle, int* indices, bool liquid/* = false*/) + { + int rowOffset = square/V8_SIZE; + if (!liquid) + switch (triangle) + { + case TOP: + indices[0] = square+rowOffset; // 0-----1 .... 128 + indices[1] = square+1+rowOffset; // |\ T /| + indices[2] = (V9_SIZE_SQ)+square; // | \ / | + break; // |L 0 R| .. 127 + case LEFT: // | / \ | + indices[0] = square+rowOffset; // |/ B \| + indices[1] = (V9_SIZE_SQ)+square; // 129---130 ... 386 + indices[2] = square+V9_SIZE+rowOffset; // |\ /| + break; // | \ / | + case RIGHT: // | 128 | .. 255 + indices[0] = square+1+rowOffset; // | / \ | + indices[1] = square+V9_SIZE+1+rowOffset; // |/ \| + indices[2] = (V9_SIZE_SQ)+square; // 258---259 ... 515 + break; + case BOTTOM: + indices[0] = (V9_SIZE_SQ)+square; + indices[1] = square+V9_SIZE+1+rowOffset; + indices[2] = square+V9_SIZE+rowOffset; + break; + default: break; + } + else + switch (triangle) + { // 0-----1 .... 128 + case TOP: // |\ | + indices[0] = square+rowOffset; // | \ T | + indices[1] = square+1+rowOffset; // | \ | + indices[2] = square+V9_SIZE+1+rowOffset; // | B \ | + break; // | \| + case BOTTOM: // 129---130 ... 386 + indices[0] = square+rowOffset; // |\ | + indices[1] = square+V9_SIZE+1+rowOffset; // | \ | + indices[2] = square+V9_SIZE+rowOffset; // | \ | + break; // | \ | + default: break; // | \| + } // 258---259 ... 515 + + } + + /**************************************************************************/ + void TerrainBuilder::getLiquidCoord(int index, int index2, float xOffset, float yOffset, float* coord, float* v) + { + // wow coords: x, y, height + // coord is mirroed about the horizontal axes + coord[0] = (xOffset + index%(V9_SIZE)*GRID_PART_SIZE) * -1.f; + coord[1] = (yOffset + (int)(index/(V9_SIZE))*GRID_PART_SIZE) * -1.f; + coord[2] = v[index2]; + } + + static uint16 holetab_h[4] = {0x1111, 0x2222, 0x4444, 0x8888}; + static uint16 holetab_v[4] = {0x000F, 0x00F0, 0x0F00, 0xF000}; + + /**************************************************************************/ + bool TerrainBuilder::isHole(int square, const uint16 holes[16][16]) + { + int row = square / 128; + int col = square % 128; + int cellRow = row / 8; // 8 squares per cell + int cellCol = col / 8; + int holeRow = row % 8 / 2; + int holeCol = (square - (row * 128 + cellCol * 8)) / 2; + + uint16 hole = holes[cellRow][cellCol]; + + return (hole & holetab_h[holeCol] & holetab_v[holeRow]) != 0; + } + + /**************************************************************************/ + uint8 TerrainBuilder::getLiquidType(int square, const uint8 liquid_type[16][16]) + { + int row = square / 128; + int col = square % 128; + int cellRow = row / 8; // 8 squares per cell + int cellCol = col / 8; + + return liquid_type[cellRow][cellCol]; + } + + /**************************************************************************/ + bool TerrainBuilder::loadVMap(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData) + { + IVMapManager* vmapManager = new VMapManager2(); + int result = vmapManager->loadMap("vmaps", mapID, tileX, tileY); + bool retval = false; + + do + { + if (result == VMAP_LOAD_RESULT_ERROR) + break; + + InstanceTreeMap instanceTrees; + ((VMapManager2*)vmapManager)->getInstanceMapTree(instanceTrees); + + if (!instanceTrees[mapID]) + break; + + ModelInstance* models = NULL; + uint32 count = 0; + instanceTrees[mapID]->getModelInstances(models, count); + + if (!models) + break; + + for (uint32 i = 0; i < count; ++i) + { + ModelInstance instance = models[i]; + + // model instances exist in tree even though there are instances of that model in this tile + WorldModel* worldModel = instance.getWorldModel(); + if (!worldModel) + continue; + + // now we have a model to add to the meshdata + retval = true; + + vector groupModels; + worldModel->getGroupModels(groupModels); + + // all M2s need to have triangle indices reversed + bool isM2 = instance.name.find(".m2") != instance.name.npos || instance.name.find(".M2") != instance.name.npos; + + // transform data + float scale = instance.iScale; + G3D::Matrix3 rotation = G3D::Matrix3::fromEulerAnglesXYZ(G3D::pi()*instance.iRot.z/-180.f, G3D::pi()*instance.iRot.x/-180.f, G3D::pi()*instance.iRot.y/-180.f); + Vector3 position = instance.iPos; + position.x -= 32*GRID_SIZE; + position.y -= 32*GRID_SIZE; + + for (vector::iterator it = groupModels.begin(); it != groupModels.end(); ++it) + { + vector tempVertices; + vector transformedVertices; + vector tempTriangles; + WmoLiquid* liquid = NULL; + + (*it).getMeshData(tempVertices, tempTriangles, liquid); + + // first handle collision mesh + transform(tempVertices, transformedVertices, scale, rotation, position); + + int offset = meshData.solidVerts.size() / 3; + + copyVertices(transformedVertices, meshData.solidVerts); + copyIndices(tempTriangles, meshData.solidTris, offset, isM2); + + // now handle liquid data + if (liquid) + { + vector liqVerts; + vector liqTris; + uint32 tilesX, tilesY, vertsX, vertsY; + Vector3 corner; + liquid->getPosInfo(tilesX, tilesY, corner); + vertsX = tilesX + 1; + vertsY = tilesY + 1; + uint8* flags = liquid->GetFlagsStorage(); + float* data = liquid->GetHeightStorage(); + uint8 type = NAV_EMPTY; + + // convert liquid type to NavTerrain + switch (liquid->GetType()) + { + case 0: + case 1: + type = NAV_WATER; + break; + case 2: + type = NAV_MAGMA; + break; + case 3: + type = NAV_SLIME; + break; + } + + // indexing is weird... + // after a lot of trial and error, this is what works: + // vertex = y*vertsX+x + // tile = x*tilesY+y + // flag = y*tilesY+x + + Vector3 vert; + for (uint32 x = 0; x < vertsX; ++x) + for (uint32 y = 0; y < vertsY; ++y) + { + vert = Vector3(corner.x + x * GRID_PART_SIZE, corner.y + y * GRID_PART_SIZE, data[y*vertsX + x]); + vert = vert * rotation * scale + position; + vert.x *= -1.f; + vert.y *= -1.f; + liqVerts.push_back(vert); + } + + int idx1, idx2, idx3, idx4; + uint32 square; + for (uint32 x = 0; x < tilesX; ++x) + for (uint32 y = 0; y < tilesY; ++y) + if ((flags[x+y*tilesX] & 0x0f) != 0x0f) + { + square = x * tilesY + y; + idx1 = square+x; + idx2 = square+1+x; + idx3 = square+tilesY+1+1+x; + idx4 = square+tilesY+1+x; + + // top triangle + liqTris.push_back(idx3); + liqTris.push_back(idx2); + liqTris.push_back(idx1); + // bottom triangle + liqTris.push_back(idx4); + liqTris.push_back(idx3); + liqTris.push_back(idx1); + } + + uint32 liqOffset = meshData.liquidVerts.size() / 3; + for (uint32 i = 0; i < liqVerts.size(); ++i) + meshData.liquidVerts.append(liqVerts[i].y, liqVerts[i].z, liqVerts[i].x); + + for (uint32 i = 0; i < liqTris.size() / 3; ++i) + { + meshData.liquidTris.append(liqTris[i*3+1] + liqOffset, liqTris[i*3+2] + liqOffset, liqTris[i*3] + liqOffset); + meshData.liquidType.append(type); + } + } + } + } + } + while (false); + + vmapManager->unloadMap(mapID, tileX, tileY); + delete vmapManager; + + return retval; + } + + /**************************************************************************/ + void TerrainBuilder::transform(vector &source, vector &transformedVertices, float scale, G3D::Matrix3 &rotation, Vector3 &position) + { + for (vector::iterator it = source.begin(); it != source.end(); ++it) + { + // apply tranform, then mirror along the horizontal axes + Vector3 v((*it) * rotation * scale + position); + v.x *= -1.f; + v.y *= -1.f; + transformedVertices.push_back(v); + } + } + + /**************************************************************************/ + void TerrainBuilder::copyVertices(vector &source, G3D::Array &dest) + { + for (vector::iterator it = source.begin(); it != source.end(); ++it) + { + dest.push_back((*it).y); + dest.push_back((*it).z); + dest.push_back((*it).x); + } + } + + /**************************************************************************/ + void TerrainBuilder::copyIndices(vector &source, G3D::Array &dest, int offset, bool flip) + { + if (flip) + { + for (vector::iterator it = source.begin(); it != source.end(); ++it) + { + dest.push_back((*it).idx2+offset); + dest.push_back((*it).idx1+offset); + dest.push_back((*it).idx0+offset); + } + } + else + { + for (vector::iterator it = source.begin(); it != source.end(); ++it) + { + dest.push_back((*it).idx0+offset); + dest.push_back((*it).idx1+offset); + dest.push_back((*it).idx2+offset); + } + } + } + + /**************************************************************************/ + void TerrainBuilder::copyIndices(G3D::Array &source, G3D::Array &dest, int offset) + { + int* src = source.getCArray(); + for (int32 i = 0; i < source.size(); ++i) + dest.append(src[i] + offset); + } + + /**************************************************************************/ + void TerrainBuilder::cleanVertices(G3D::Array &verts, G3D::Array &tris) + { + map vertMap; + + int* t = tris.getCArray(); + float* v = verts.getCArray(); + + // collect all the vertex indices from triangle + for (int i = 0; i < tris.size(); ++i) + { + if (vertMap.find(t[i]) != vertMap.end()) + continue; + + vertMap.insert(std::pair(t[i], 0)); + } + + // collect the vertices + G3D::Array cleanVerts; + int index, count = 0; + for (map::iterator it = vertMap.begin(); it != vertMap.end(); ++it) + { + index = (*it).first; + (*it).second = count; + cleanVerts.append(v[index*3], v[index*3+1], v[index*3+2]); + count++; + } + verts.fastClear(); + verts.append(cleanVerts); + cleanVerts.clear(); + + // update triangles to use new indices + for (int i = 0; i < tris.size(); ++i) + { + map::iterator it; + if ((it = vertMap.find(t[i])) == vertMap.end()) + continue; + + t[i] = (*it).second; + } + + vertMap.clear(); + } + + /**************************************************************************/ + void TerrainBuilder::loadOffMeshConnections(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData, const char* offMeshFilePath) + { + // no meshfile input given? + if (offMeshFilePath == NULL) + return; + + FILE* fp = fopen(offMeshFilePath, "rb"); + if (!fp) + { + printf(" loadOffMeshConnections:: input file %s not found!\n", offMeshFilePath); + return; + } + + // pretty silly thing, as we parse entire file and load only the tile we need + // but we don't expect this file to be too large + char* buf = new char[512]; + while(fgets(buf, 512, fp)) + { + float p0[3], p1[3]; + int mid, tx, ty; + float size; + if (10 != sscanf(buf, "%d %d,%d (%f %f %f) (%f %f %f) %f", &mid, &tx, &ty, + &p0[0], &p0[1], &p0[2], &p1[0], &p1[1], &p1[2], &size)) + continue; + + if (mapID == mid, tileX == tx, tileY == ty) + { + meshData.offMeshConnections.append(p0[1]); + meshData.offMeshConnections.append(p0[2]); + meshData.offMeshConnections.append(p0[0]); + + meshData.offMeshConnections.append(p1[1]); + meshData.offMeshConnections.append(p1[2]); + meshData.offMeshConnections.append(p1[0]); + + meshData.offMeshConnectionDirs.append(1); // 1 - both direction, 0 - one sided + meshData.offMeshConnectionRads.append(size); // agent size equivalent + // can be used same way as polygon flags + meshData.offMeshConnectionsAreas.append((unsigned char)0xFF); + meshData.offMeshConnectionsFlags.append((unsigned short)0xFF); // all movement masks can make this path + } + + } + + delete [] buf; + fclose(fp); + } +} diff --git a/src/tools/mmap_extractor/TerrainBuilder.h b/src/tools/mmap_extractor/TerrainBuilder.h new file mode 100644 index 00000000000..a7f21883af2 --- /dev/null +++ b/src/tools/mmap_extractor/TerrainBuilder.h @@ -0,0 +1,138 @@ +/* + * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2005-2011 MaNGOS + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef _MMAP_TERRAIN_BUILDER_H +#define _MMAP_TERRAIN_BUILDER_H + +#include "PathCommon.h" +#include "Map.h" +#include "SharedDefines.h" + +#include "WorldModel.h" + +#include "G3D/Array.h" +#include "G3D/Vector3.h" +#include "G3D/Matrix3.h" + +using namespace Trinity; + +namespace MMAP +{ + enum Spot + { + TOP = 1, + RIGHT = 2, + LEFT = 3, + BOTTOM = 4, + ENTIRE = 5 + }; + + enum Grid + { + GRID_V8, + GRID_V9 + }; + + static const int V9_SIZE = 129; + static const int V9_SIZE_SQ = V9_SIZE*V9_SIZE; + static const int V8_SIZE = 128; + static const int V8_SIZE_SQ = V8_SIZE*V8_SIZE; + static const float GRID_SIZE = 533.33333f; + static const float GRID_PART_SIZE = GRID_SIZE/V8_SIZE; + + // see contrib/extractor/system.cpp, CONF_use_minHeight + static const float INVALID_MAP_LIQ_HEIGHT = -500.f; + static const float INVALID_MAP_LIQ_HEIGHT_MAX = 5000.0f; + + // see following files: + // contrib/extractor/system.cpp + // src/game/Map.cpp + static char const* MAP_VERSION_MAGIC = "v1.2"; + + struct MeshData + { + G3D::Array solidVerts; + G3D::Array solidTris; + + G3D::Array liquidVerts; + G3D::Array liquidTris; + G3D::Array liquidType; + + // offmesh connection data + G3D::Array offMeshConnections; // [p0y,p0z,p0x,p1y,p1z,p1x] - per connection + G3D::Array offMeshConnectionRads; + G3D::Array offMeshConnectionDirs; + G3D::Array offMeshConnectionsAreas; + G3D::Array offMeshConnectionsFlags; + }; + + class TerrainBuilder + { + public: + TerrainBuilder(bool skipLiquid); + ~TerrainBuilder(); + + void loadMap(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData); + bool loadVMap(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData); + void loadOffMeshConnections(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData, const char* offMeshFilePath); + + bool usesLiquids() { return !m_skipLiquid; } + + // vert and triangle methods + static void transform(vector &original, vector &transformed, + float scale, G3D::Matrix3 &rotation, G3D::Vector3 &position); + static void copyVertices(vector &source, G3D::Array &dest); + static void copyIndices(vector &source, G3D::Array &dest, int offest, bool flip); + static void copyIndices(G3D::Array &src, G3D::Array &dest, int offset); + static void cleanVertices(G3D::Array &verts, G3D::Array &tris); + private: + /// Loads a portion of a map's terrain + bool loadMap(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData, Spot portion); + + /// Sets loop variables for selecting only certain parts of a map's terrain + void getLoopVars(Spot portion, int &loopStart, int &loopEnd, int &loopInc); + + /// Controls whether liquids are loaded + bool m_skipLiquid; + + /// Load the map terrain from file + bool loadHeightMap(uint32 mapID, uint32 tileX, uint32 tileY, G3D::Array &vertices, G3D::Array &triangles, Spot portion); + + /// Get the vector coordinate for a specific position + void getHeightCoord(int index, Grid grid, float xOffset, float yOffset, float* coord, float* v); + + /// Get the triangle's vector indices for a specific position + void getHeightTriangle(int square, Spot triangle, int* indices, bool liquid = false); + + /// Determines if the specific position's triangles should be rendered + bool isHole(int square, const uint16 holes[16][16]); + + /// Get the liquid vector coordinate for a specific position + void getLiquidCoord(int index, int index2, float xOffset, float yOffset, float* coord, float* v); + + /// Get the liquid type for a specific position + uint8 getLiquidType(int square, const uint8 liquid_type[16][16]); + + // hide parameterless and copy constructor + TerrainBuilder(); + TerrainBuilder(const TerrainBuilder &tb); + }; +} + +#endif + diff --git a/src/tools/mmap_extractor/VMapExtensions.cpp b/src/tools/mmap_extractor/VMapExtensions.cpp new file mode 100644 index 00000000000..4f203e11c21 --- /dev/null +++ b/src/tools/mmap_extractor/VMapExtensions.cpp @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2005-2011 MaNGOS + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include +#include "MapTree.h" +#include "VMapManager2.h" +#include "WorldModel.h" +#include "ModelInstance.h" + +using namespace std; + +namespace VMAP +{ + // Need direct access to encapsulated VMAP data, so we add functions for MMAP generator + // maybe add MapBuilder as friend to all of the below classes would be better? + + // declared in src/shared/vmap/MapTree.h + void StaticMapTree::getModelInstances(ModelInstance* &models, uint32 &count) + { + models = iTreeValues; + count = iNTreeValues; + } + + // declared in src/shared/vmap/VMapManager2.h + void VMapManager2::getInstanceMapTree(InstanceTreeMap &instanceMapTree) + { + instanceMapTree = iInstanceMapTrees; + } + + // declared in src/shared/vmap/WorldModel.h + void WorldModel::getGroupModels(vector &groupModels) + { + groupModels = this->groupModels; + } + + // declared in src/shared/vmap/WorldModel.h + void GroupModel::getMeshData(vector &vertices, vector &triangles, WmoLiquid* &liquid) + { + vertices = this->vertices; + triangles = this->triangles; + liquid = iLiquid; + } + + // declared in src/shared/vmap/ModelInstance.h + WorldModel* const ModelInstance::getWorldModel() + { + return iModel; + } + + // declared in src/shared/vmap/WorldModel.h + void WmoLiquid::getPosInfo(uint32 &tilesX, uint32 &tilesY, Vector3 &corner) const + { + tilesX = iTilesX; + tilesY = iTilesY; + corner = iCorner; + } +} From b6f9dbf6739ac9f44f651318f0ffb635d36e63a4 Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 14:45:38 +0200 Subject: [PATCH 003/204] Core/Contrib: Implemented sh files for extract all needed datas. The sh files based from mangos. --- contrib/extract/extract_data.sh | 162 ++++++++++++++++++++++++ contrib/extract/only_extract_offmesh.sh | 158 +++++++++++++++++++++++ 2 files changed, 320 insertions(+) create mode 100644 contrib/extract/extract_data.sh create mode 100644 contrib/extract/only_extract_offmesh.sh diff --git a/contrib/extract/extract_data.sh b/contrib/extract/extract_data.sh new file mode 100644 index 00000000000..d44dd7d12fd --- /dev/null +++ b/contrib/extract/extract_data.sh @@ -0,0 +1,162 @@ +#!/bin/sh + +# Copyright (C) 2005-2012 MaNGOS project +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +## Expected param 1 to be 'a' for all, else ask some questions + +## Normal log file (if not overwritten by second param +LOG_FILE="TrinityCoreExtractor.log" +## Detailed log file +DETAIL_LOG_FILE="TrinityCoreExtractor_detailed.log" + +## Change this to a value fitting for your sys! +NUM_CPU="2" + +## ! Use below only for finetuning or if you know what you are doing ! + +USE_AD="0" +USE_VMAPS="0" +USE_MMAPS="0" +USE_MMAPS_OFFMESH="0" + +if [ "$1" = "a" ] +then + ## extract all + USE_AD="1" + USE_VMAPS="1" + USE_MMAPS="1" +else + ## do some questioning! + echo + echo "Welcome to helper script to extract required dataz for TrinityCore!" + echo "Should all dataz (dbc, maps, vmaps and mmaps be extracted? (y/n)" + read line + if [ "$line" = "y" ] + then + ## extract all + USE_AD="1" + USE_VMAPS="1" + USE_MMAPS="1" + else + echo + echo "Should dbc and maps be extracted? (y/n)" + read line + if [ "$line" = "y" ]; then USE_AD="1"; fi + + echo + echo "Should vmaps be extracted? (y/n)" + read line + if [ "$line" = "y" ]; then USE_VMAPS="1"; fi + + echo + echo "Should mmaps be extracted? (y/n)" + echo "WARNING! This will take several hours!" + read line + if [ "$line" = "y" ] + then + USE_MMAPS="1"; + else + echo "Only reextract offmesh tiles for mmaps?" + read line + if [ "$line" = "y" ] + then + USE_MMAPS_OFFMESH="1"; + fi + fi + fi +fi + +## Special case: Only reextract offmesh tiles +if [ "$USE_MMAPS_OFFMESH" = "1" ] +then + echo "Only extracting offmesh meshes" + only_extract_offmesh.sh offmesh $LOG_FILE $DETAIL_LOG_FILE + exit 0 +fi + +## Obtain numbe ob processes +if [ "$USE_MMAPS" = "1" ] +then + echo "How many CPUs should be used for extracting mmaps? (1-4)" + read line + if [ "$line" -ge "1" -a "$line" -le "4" ] + then + NUM_CPU=$line + else + echo "Only number between 1 and 4 supported!" + exit 1 + fi +fi + +## Give some status +echo "Current Settings: Extract DBCs/maps: $USE_AD, Extract vmaps: $USE_VMAPS, Extract mmaps: $USE_MMAPS on $NUM_CPU processes" +if [ "$1" != "a" ] +then + echo "If you don't like this settings, interrupt with CTRL+C" + read line +fi + +echo "`date`: Start extracting dataz for TrinityCore" | tee $LOG_FILE + +## Handle log messages +if [ "$USE_AD" = "1" ]; +then + echo "DBC and map files will be extracted" | tee -a $LOG_FILE +else + echo "DBC and map files won't be extracted!" | tee -a $LOG_FILE +fi +if [ "$USE_VMAPS" = "1" ] +then + echo "Vmaps will be extracted" | tee -a $LOG_FILE +else + echo "Vmaps won't be extracted!" | tee -a $LOG_FILE +fi +if [ "$USE_MMAPS" = "1" ] +then + echo "Mmaps will be extracted with $NUM_CPU processes" | tee -a $LOG_FILE +else + echo "Mmaps files won't be extracted!" | tee -a $LOG_FILE +fi +echo | tee -a $LOG_FILE + +echo "`date`: Start extracting dataz for TrinityCore, DBCs/maps $USE_AD, vmaps $USE_VMAPS, mmaps $USE_MMAPS on $NUM_CPU processes" | tee $DETAIL_LOG_FILE +echo | tee -a $DETAIL_LOG_FILE + +## Extract dbcs and maps +if [ "$USE_AD" = "1" ] +then + echo "`date`: Start extraction of DBCs and map files..." | tee -a $LOG_FILE + ad | tee -a $DETAIL_LOG_FILE + echo "`date`: Extracting of DBCs and map files finished" | tee -a $LOG_FILE + echo | tee -a $LOG_FILE + echo | tee -a $DETAIL_LOG_FILE +fi + +## Extract vmaps +if [ "$USE_VMAPS" = "1" ] +then + echo "`date`: Start extraction of vmaps..." | tee -a $LOG_FILE + vmap4extractor | tee -a $DETAIL_LOG_FILE + echo "`date`: Extracting of vmaps finished" | tee -a $LOG_FILE + mkdir vmaps + echo "`date`: Start assembling of vmaps..." | tee -a $LOG_FILE + vmap4assembler.exe buildings vmaps | tee -a $DETAIL_LOG_FILE + echo "`date`: Assembling of vmaps finished" | tee -a $LOG_FILE + + echo | tee -a $LOG_FILE + echo | tee -a $DETAIL_LOG_FILE +fi + +## Extract mmaps +if [ "$USE_MMAPS" = "1" ] +then + only_extract_offmesh.sh $NUM_CPU $LOG_FILE $DETAIL_LOG_FILE +fi diff --git a/contrib/extract/only_extract_offmesh.sh b/contrib/extract/only_extract_offmesh.sh new file mode 100644 index 00000000000..29beb3fdf18 --- /dev/null +++ b/contrib/extract/only_extract_offmesh.sh @@ -0,0 +1,158 @@ +#!/bin/sh + +# Copyright (C) 2005-2012 MaNGOS project +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +## Syntax of this helper +## First param must be number of to be used CPUs (only 1, 2, 3, 4 supported) or "offmesh" to recreate the special tiles from the OFFMESH_FILE +## Second param can be an additional filename for storing log +## Third param can be an addition filename for storing detailed log + +## Additional Parameters to be forwarded to MoveMapGen, see mmaps/readme for instructions +PARAMS="--silent" + +## Already a few map extracted, and don't care anymore +EXCLUDE_MAPS="" +#EXCLUDE_MAPS="0 1 530 571" # example to exclude the continents + +## Offmesh file +OFFMESH_FILE="offmesh.txt" + +## Normal log file (if not overwritten by second param +LOG_FILE="MoveMapGen.log" +## Detailed log file +DETAIL_LOG_FILE="MoveMapGen_detailed.log" + +## ! Use below only for finetuning or if you know what you are doing ! + +## All maps +MAP_LIST_A="1 37 543 595 289 572 529 562 531 269 47 649 650 599 548 559 429 230 573 349 13 25 409 229 43 48 546 553 547 604 545 90 576" +MAP_LIST_B="571 628 560 509 723 532 607 600 668 33 585 566 389 601 369 129 550 189 542 70 109 554 632 552 555 540 598 450 558 249 35 624 557" +MAP_LIST_C="0 631 609 534 533 619 469 602 329 580 615 578 36 556 44 565 544 34 617 608 618 449 616 42 451 582 584 586 587 588 589 590 591 592" +MAP_LIST_D="530 169 575 603 309 574 30 564 568 209 724 658 489 593 594 596 597 605 606 610 612 613 614 620 621 622 623 641 642 647 672 673 712 713 718" +MAP_LIST_D1="209 724 658 489 606 610 612 613 614 620 621" +MAP_LIST_D2="169 575 603 309 574 30 564 568 622 623 641 642 647 672 673 712 713 718" +MAP_LIST_D3="530 593 594 596 597 605" + +badParam() +{ + echo "ERROR! Bad arguments!" + echo "You can (re)extract mmaps with this helper script," + echo "or recreate only the tiles from the offmash file" + echo + echo "Call with number of processes (1 - 4) to create mmaps" + echo "Call with 'offmesh' to reextract the tiles from offmash file" + echo + echo "For further fine-tuning edit this helper script" + echo +} + +if [ "$#" = "3" ] +then + LOG_FILE=$2 + DETAIL_LOG_FILE=$3 +elif [ "$#" = "2" ] +then + LOG_FILE=$2 +fi + +# Offmesh file provided? +OFFMESH="" +if [ "$OFFMESH_FILE" != "" ] +then + if [ ! -f "$OFFMESH_FILE" ] + then + echo "ERROR! Offmesh file $OFFMESH_FILE could not be found." + echo "Provide valid file or none. You need to edit the script" + exit 1 + else + OFFMESH="--offMeshInput $OFFMESH_FILE" + fi +fi + +# Function to process a list +createMMaps() +{ + for i in $@ + do + for j in $EXCLUDE_MAPS + do + if [ "$i" = "$j" ] + then + continue 2 + fi + done + ./MoveMapGen $PARAMS $OFFMESH $i | tee -a $DETAIL_LOG_FILE + echo "`date`: (Re)created map $i" | tee -a $LOG_FILE + done +} + +createHeader() +{ + echo "`date`: Start creating MoveMaps" | tee -a $LOG_FILE + echo "Used params: $PARAMS $OFFMESH" | tee -a $LOG_FILE + echo "Detailed log can be found in $DETAIL_LOG_FILE" | tee -a $LOG_FILE + echo "Start creating MoveMaps" | tee -a $DETAIL_LOG_FILE + echo + echo "Be PATIENT - This will take a long time and might also have gaps between visible changes on the console." + echo "WAIT until you are informed that 'creating MoveMaps' is 'finished'!" +} + +# Create mmaps directory if not exist +if [ ! -d mmaps ] +then + mkdir mmaps +fi + +# Param control +case "$1" in + "1" ) + createHeader $1 + createMMaps $MAP_LIST_A $MAP_LIST_B $MAP_LIST_C $MAP_LIST_D & + ;; + "2" ) + createHeader $1 + createMMaps $MAP_LIST_A $MAP_LIST_D & + createMMaps $MAP_LIST_B $MAP_LIST_C & + ;; + "3" ) + createHeader $1 + createMMaps $MAP_LIST_A $MAP_LIST_D1& + createMMaps $MAP_LIST_B $MAP_LIST_D2& + createMMaps $MAP_LIST_C $MAP_LIST_D3& + ;; + "4" ) + createHeader $1 + createMMaps $MAP_LIST_A & + createMMaps $MAP_LIST_B & + createMMaps $MAP_LIST_C & + createMMaps $MAP_LIST_D & + ;; + "offmesh" ) + echo "`date`: Recreate offmeshs from file $OFFMESH_FILE" | tee -a $LOG_FILE + echo "Recreate offmeshs from file $OFFMESH_FILE" | tee -a $DETAIL_LOG_FILE + while read map tile line + do + ./movement_extractor $PARAMS $OFFMESH $map --tile $tile | tee -a $DETAIL_LOG_FILE + echo "`date`: Recreated $map $tile from $OFFMESH_FILE" | tee -a $LOG_FILE + done < $OFFMESH_FILE & + ;; + * ) + badParam + exit 1 + ;; +esac + +wait + +echo | tee -a $LOG_FILE +echo | tee -a $DETAIL_LOG_FILE +echo "`date`: Finished creating MoveMaps" | tee -a $LOG_FILE +echo "`date`: Finished creating MoveMaps" >> $DETAIL_LOG_FILE From 23969328d7588e65f6078b7b289b6ca3ce9e731d Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 14:49:08 +0200 Subject: [PATCH 004/204] missed one file. --- contrib/extract/offmesh.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 contrib/extract/offmesh.txt diff --git a/contrib/extract/offmesh.txt b/contrib/extract/offmesh.txt new file mode 100644 index 00000000000..10299a2c696 --- /dev/null +++ b/contrib/extract/offmesh.txt @@ -0,0 +1,3 @@ +0 31,59 (-14429.889648 450.344452 15.430828) (-14424.218750 444.332855 12.773965) 2.5 // booty bay dock +562 31,20 (6234.545898 256.902100 11.075373) (6230.961914 252.127274 11.180979) 2.5 // Blade's Edge Arena +562 31,20 (6243.081543 266.918854 11.059557) (6246.507324 271.623505 11.230524) 2.5 // Blade's Edge Arena \ No newline at end of file From eae627f75287493ee12744af51112d43a8aaa10b Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 14:51:03 +0200 Subject: [PATCH 005/204] Core: + add mmaps files. + add the generator for movement. --- .../collision/Management/MMapFactory.cpp | 80 ++ src/server/collision/Management/MMapFactory.h | 51 ++ .../collision/Management/MMapManager.cpp | 301 +++++++ src/server/collision/Management/MMapManager.h | 84 ++ .../PathFinderMovementGenerator.cpp | 780 ++++++++++++++++++ .../PathFinderMovementGenerator.h | 135 +++ 6 files changed, 1431 insertions(+) create mode 100644 src/server/collision/Management/MMapFactory.cpp create mode 100644 src/server/collision/Management/MMapFactory.h create mode 100644 src/server/collision/Management/MMapManager.cpp create mode 100644 src/server/collision/Management/MMapManager.h create mode 100644 src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp create mode 100644 src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h diff --git a/src/server/collision/Management/MMapFactory.cpp b/src/server/collision/Management/MMapFactory.cpp new file mode 100644 index 00000000000..f4b2f3d47e4 --- /dev/null +++ b/src/server/collision/Management/MMapFactory.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2005-2010 MaNGOS + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "MMapFactory.h" +#include "World.h" +#include "Config.h" +#include + +namespace MMAP +{ + // ######################## MMapFactory ######################## + // our global singleton copy + MMapManager *g_MMapManager = NULL; + + // stores list of mapids which do not use pathfinding + std::set* g_mmapDisabledIds = NULL; + + MMapManager* MMapFactory::createOrGetMMapManager() + { + if (g_MMapManager == NULL) + g_MMapManager = new MMapManager(); + + return g_MMapManager; + } + + void MMapFactory::preventPathfindingOnMaps(const char* ignoreMapIds) + { + if (!g_mmapDisabledIds) + g_mmapDisabledIds = new std::set(); + + uint32 strLenght = strlen(ignoreMapIds)+1; + char* mapList = new char[strLenght]; + memcpy(mapList, ignoreMapIds, sizeof(char)*strLenght); + + char* idstr = strtok(mapList, ","); + while (idstr) + { + g_mmapDisabledIds->insert(uint32(atoi(idstr))); + idstr = strtok(NULL, ","); + } + + delete[] mapList; + } + + bool MMapFactory::IsPathfindingEnabled(uint32 mapId) + { + return sWorld->getBoolConfig(CONFIG_ENABLE_MMAPS) + && g_mmapDisabledIds->find(mapId) == g_mmapDisabledIds->end(); + } + + void MMapFactory::clear() + { + if (g_mmapDisabledIds) + { + delete g_mmapDisabledIds; + g_mmapDisabledIds = NULL; + } + + if (g_MMapManager) + { + delete g_MMapManager; + g_MMapManager = NULL; + } + } +} \ No newline at end of file diff --git a/src/server/collision/Management/MMapFactory.h b/src/server/collision/Management/MMapFactory.h new file mode 100644 index 00000000000..ab047333a19 --- /dev/null +++ b/src/server/collision/Management/MMapFactory.h @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2005-2010 MaNGOS + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef _MMAP_FACTORY_H +#define _MMAP_FACTORY_H + +#include "MMapManager.h" +#include "UnorderedMap.h" +#include "DetourAlloc.h" +#include "DetourNavMesh.h" +#include "DetourNavMeshQuery.h" + +namespace MMAP +{ + enum MMAP_LOAD_RESULT + { + MMAP_LOAD_RESULT_ERROR, + MMAP_LOAD_RESULT_OK, + MMAP_LOAD_RESULT_IGNORED, + }; + + // static class + // holds all mmap global data + // access point to MMapManager singleton + class MMapFactory + { + public: + static MMapManager* createOrGetMMapManager(); + static void clear(); + static void preventPathfindingOnMaps(const char* ignoreMapIds); + static bool IsPathfindingEnabled(uint32 mapId); + }; +} + +#endif + diff --git a/src/server/collision/Management/MMapManager.cpp b/src/server/collision/Management/MMapManager.cpp new file mode 100644 index 00000000000..aac5647a6de --- /dev/null +++ b/src/server/collision/Management/MMapManager.cpp @@ -0,0 +1,301 @@ +/* + * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2005-2010 MaNGOS + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "MMapManager.h" +#include "Log.h" +#include "World.h" + +namespace MMAP +{ + // ######################## MMapManager ######################## + MMapManager::~MMapManager() + { + for (MMapDataSet::iterator i = loadedMMaps.begin(); i != loadedMMaps.end(); ++i) + delete i->second; + + // by now we should not have maps loaded + // if we had, tiles in MMapData->mmapLoadedTiles, their actual data is lost! + } + + bool MMapManager::loadMapData(uint32 mapId) + { + // we already have this map loaded? + if (loadedMMaps.find(mapId) != loadedMMaps.end()) + return true; + + // load and init dtNavMesh - read parameters from file + uint32 pathLen = sWorld->GetDataPath().length() + strlen("mmaps/%03i.mmap")+1; + char *fileName = new char[pathLen]; + snprintf(fileName, pathLen, (sWorld->GetDataPath()+"mmaps/%03i.mmap").c_str(), mapId); + + FILE* file = fopen(fileName, "rb"); + if (!file) + { + sLog->outDebug(LOG_FILTER_MAPS, "MMAP:loadMapData: Error: Could not open mmap file '%s'", fileName); + delete [] fileName; + return false; + } + + dtNavMeshParams params; + fread(¶ms, sizeof(dtNavMeshParams), 1, file); + fclose(file); + + dtNavMesh* mesh = dtAllocNavMesh(); + ASSERT(mesh); + if (DT_SUCCESS != mesh->init(¶ms)) + { + dtFreeNavMesh(mesh); + sLog->outError("MMAP:loadMapData: Failed to initialize dtNavMesh for mmap %03u from file %s", mapId, fileName); + delete [] fileName; + return false; + } + + delete [] fileName; + + sLog->outDetail("MMAP:loadMapData: Loaded %03i.mmap", mapId); + + // store inside our map list + MMapData* mmap_data = new MMapData(mesh); + mmap_data->mmapLoadedTiles.clear(); + + loadedMMaps.insert(std::pair(mapId, mmap_data)); + return true; + } + + uint32 MMapManager::packTileID(int32 x, int32 y) + { + return uint32(x << 16 | y); + } + + bool MMapManager::loadMap(uint32 mapId, int32 x, int32 y) + { + // make sure the mmap is loaded and ready to load tiles + if(!loadMapData(mapId)) + return false; + + // get this mmap data + MMapData* mmap = loadedMMaps[mapId]; + ASSERT(mmap->navMesh); + + // check if we already have this tile loaded + uint32 packedGridPos = packTileID(x, y); + if (mmap->mmapLoadedTiles.find(packedGridPos) != mmap->mmapLoadedTiles.end()) + { + //sLog->outError("MMAP:loadMap: Asked to load already loaded navmesh tile. %03u%02i%02i.mmtile", mapId, y, x); + return false; + } + + // load this tile :: mmaps/MMMXXYY.mmtile + uint32 pathLen = sWorld->GetDataPath().length() + strlen("mmaps/%03i%02i%02i.mmtile")+1; + char *fileName = new char[pathLen]; + // this change of y and x is needed because of mapbuilder.cpp (x and y are swapped there) so change it here so we dont need to re-extract. All swappes are done in other files. DONT CHANGE THIS! + snprintf(fileName, pathLen, (sWorld->GetDataPath()+"mmaps/%03i%02i%02i.mmtile").c_str(), mapId, y, x); + + FILE *file = fopen(fileName, "rb"); + if (!file) + { + sLog->outDebug(LOG_FILTER_MAPS, "MMAP:loadMap: Could not open mmtile file '%s'", fileName); + delete [] fileName; + return false; + } + delete [] fileName; + + // read header + MmapTileHeader fileHeader; + fread(&fileHeader, sizeof(MmapTileHeader), 1, file); + + if (fileHeader.mmapMagic != MMAP_MAGIC) + { + sLog->outError("MMAP:loadMap: Bad header in mmap %03u%02i%02i.mmtile", mapId, y, x); + return false; + } + + if (fileHeader.mmapVersion != MMAP_VERSION) + { + sLog->outError("MMAP:loadMap: %03u%02i%02i.mmtile was built with generator v%i, expected v%i", + mapId, x, y, fileHeader.mmapVersion, MMAP_VERSION); + return false; + } + + unsigned char* data = (unsigned char*)dtAlloc(fileHeader.size, DT_ALLOC_PERM); + ASSERT(data); + + size_t result = fread(data, fileHeader.size, 1, file); + if(!result) + { + sLog->outError("MMAP:loadMap: Bad header or data in mmap %03u%02i%02i.mmtile", mapId, y, x); + fclose(file); + return false; + } + + fclose(file); + + dtMeshHeader* header = (dtMeshHeader*)data; + dtTileRef tileRef = 0; + + // memory allocated for data is now managed by detour, and will be deallocated when the tile is removed + if (DT_SUCCESS == mmap->navMesh->addTile(data, fileHeader.size, DT_TILE_FREE_DATA, 0, &tileRef)) + { + mmap->mmapLoadedTiles.insert(std::pair(packedGridPos, tileRef)); + ++loadedTiles; + sLog->outDetail("MMAP:loadMap: Loaded mmtile %03i[%02i,%02i] into %03i[%02i,%02i]", mapId, y, x, mapId, header->x, header->y); + return true; + } + else + { + sLog->outError("MMAP:loadMap: Could not load %03u%02i%02i.mmtile into navmesh", mapId, y, x); + dtFree(data); + return false; + } + + return false; + } + + bool MMapManager::unloadMap(uint32 mapId, int32 x, int32 y) + { + // check if we have this map loaded + if (loadedMMaps.find(mapId) == loadedMMaps.end()) + { + // file may not exist, therefore not loaded + sLog->outDebug(LOG_FILTER_MAPS, "MMAP:unloadMap: Asked to unload not loaded navmesh map. %03u%02i%02i.mmtile", mapId, y, x); + return false; + } + + MMapData* mmap = loadedMMaps[mapId]; + + // check if we have this tile loaded + uint32 packedGridPos = packTileID(x, y); + if (mmap->mmapLoadedTiles.find(packedGridPos) == mmap->mmapLoadedTiles.end()) + { + // file may not exist, therefore not loaded + sLog->outDebug(LOG_FILTER_MAPS, "MMAP:unloadMap: Asked to unload not loaded navmesh tile. %03u%02i%02i.mmtile", mapId, y, x); + return false; + } + + dtTileRef tileRef = mmap->mmapLoadedTiles[packedGridPos]; + + // unload, and mark as non loaded + if (DT_SUCCESS != mmap->navMesh->removeTile(tileRef, NULL, NULL)) + { + // this is technically a memory leak + // if the grid is later reloaded, dtNavMesh::addTile will return error but no extra memory is used + // we cannot recover from this error - assert out + sLog->outError("MMAP:unloadMap: Could not unload %03u%02i%02i.mmtile from navmesh", mapId, y, x); + ASSERT(false); + } + else + { + mmap->mmapLoadedTiles.erase(packedGridPos); + --loadedTiles; + sLog->outDetail("MMAP:unloadMap: Unloaded mmtile %03i[%02i,%02i] from %03i", mapId, y, x, mapId); + return true; + } + + return false; + } + + bool MMapManager::unloadMap(uint32 mapId) + { + if (loadedMMaps.find(mapId) == loadedMMaps.end()) + { + // file may not exist, therefore not loaded + sLog->outDebug(LOG_FILTER_MAPS, "MMAP:unloadMap: Asked to unload not loaded navmesh map %03u", mapId); + return false; + } + + // unload all tiles from given map + MMapData* mmap = loadedMMaps[mapId]; + for (MMapTileSet::iterator i = mmap->mmapLoadedTiles.begin(); i != mmap->mmapLoadedTiles.end(); ++i) + { + uint32 x = (i->first >> 16); + uint32 y = (i->first & 0x0000FFFF); + if (DT_SUCCESS != mmap->navMesh->removeTile(i->second, NULL, NULL)) + sLog->outError("MMAP:unloadMap: Could not unload %03u%02i%02i.mmtile from navmesh", mapId, y, x); + else + { + --loadedTiles; + sLog->outDetail("MMAP:unloadMap: Unloaded mmtile %03i[%02i,%02i] from %03i", mapId, y, x, mapId); + } + } + + delete mmap; + loadedMMaps.erase(mapId); + sLog->outDetail("MMAP:unloadMap: Unloaded %03i.mmap", mapId); + + return true; + } + + bool MMapManager::unloadMapInstance(uint32 mapId, uint32 instanceId) + { + // check if we have this map loaded + if (loadedMMaps.find(mapId) == loadedMMaps.end()) + { + // file may not exist, therefore not loaded + sLog->outDebug(LOG_FILTER_MAPS, "MMAP:unloadMapInstance: Asked to unload not loaded navmesh map %03u", mapId); + return false; + } + + MMapData* mmap = loadedMMaps[mapId]; + if (mmap->navMeshQueries.find(instanceId) == mmap->navMeshQueries.end()) + { + sLog->outDebug(LOG_FILTER_MAPS, "MMAP:unloadMapInstance: Asked to unload not loaded dtNavMeshQuery mapId %03u instanceId %u", mapId, instanceId); + return false; + } + + dtNavMeshQuery* query = mmap->navMeshQueries[instanceId]; + + dtFreeNavMeshQuery(query); + mmap->navMeshQueries.erase(instanceId); + sLog->outDetail("MMAP:unloadMapInstance: Unloaded mapId %03u instanceId %u", mapId, instanceId); + + return true; + } + + dtNavMesh const* MMapManager::GetNavMesh(uint32 mapId) + { + if (loadedMMaps.find(mapId) == loadedMMaps.end()) + return NULL; + + return loadedMMaps[mapId]->navMesh; + } + + dtNavMeshQuery const* MMapManager::GetNavMeshQuery(uint32 mapId, uint32 instanceId) + { + if (loadedMMaps.find(mapId) == loadedMMaps.end()) + return NULL; + + MMapData* mmap = loadedMMaps[mapId]; + if (mmap->navMeshQueries.find(instanceId) == mmap->navMeshQueries.end()) + { + // allocate mesh query + dtNavMeshQuery* query = dtAllocNavMeshQuery(); + ASSERT(query); + if (DT_SUCCESS != query->init(mmap->navMesh, 1024)) + { + dtFreeNavMeshQuery(query); + sLog->outError("MMAP:GetNavMeshQuery: Failed to initialize dtNavMeshQuery for mapId %03u instanceId %u", mapId, instanceId); + return NULL; + } + + sLog->outDetail("MMAP:GetNavMeshQuery: created dtNavMeshQuery for mapId %03u instanceId %u", mapId, instanceId); + mmap->navMeshQueries.insert(std::pair(instanceId, query)); + } + + return mmap->navMeshQueries[instanceId]; + } +} \ No newline at end of file diff --git a/src/server/collision/Management/MMapManager.h b/src/server/collision/Management/MMapManager.h new file mode 100644 index 00000000000..8af452032d1 --- /dev/null +++ b/src/server/collision/Management/MMapManager.h @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2005-2010 MaNGOS + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef _MMAP_MANAGER_H +#define _MMAP_MANAGER_H + +#include "UnorderedMap.h" +#include "DetourAlloc.h" +#include "DetourNavMesh.h" +#include "DetourNavMeshQuery.h" + +// move map related classes +namespace MMAP +{ + typedef UNORDERED_MAP MMapTileSet; + typedef UNORDERED_MAP NavMeshQuerySet; + + // dummy struct to hold map's mmap data + struct MMapData + { + MMapData(dtNavMesh* mesh) : navMesh(mesh) {} + ~MMapData() + { + for (NavMeshQuerySet::iterator i = navMeshQueries.begin(); i != navMeshQueries.end(); ++i) + dtFreeNavMeshQuery(i->second); + + if (navMesh) + dtFreeNavMesh(navMesh); + } + + dtNavMesh* navMesh; + + // we have to use single dtNavMeshQuery for every instance, since those are not thread safe + NavMeshQuerySet navMeshQueries; // instanceId to query + MMapTileSet mmapLoadedTiles; // maps [map grid coords] to [dtTile] + }; + + + typedef UNORDERED_MAP MMapDataSet; + + // singleton class + // holds all all access to mmap loading unloading and meshes + class MMapManager + { + public: + MMapManager() : loadedTiles(0) {} + ~MMapManager(); + + bool loadMap(uint32 mapId, int32 x, int32 y); + bool unloadMap(uint32 mapId, int32 x, int32 y); + bool unloadMap(uint32 mapId); + bool unloadMapInstance(uint32 mapId, uint32 instanceId); + + // the returned [dtNavMeshQuery const*] is NOT threadsafe + dtNavMeshQuery const* GetNavMeshQuery(uint32 mapId, uint32 instanceId); + dtNavMesh const* GetNavMesh(uint32 mapId); + + uint32 getLoadedTilesCount() const { return loadedTiles; } + uint32 getLoadedMapsCount() const { return loadedMMaps.size(); } + private: + bool loadMapData(uint32 mapId); + uint32 packTileID(int32 x, int32 y); + + MMapDataSet loadedMMaps; + uint32 loadedTiles; + }; +} + +#endif \ No newline at end of file diff --git a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp new file mode 100644 index 00000000000..686c57cb634 --- /dev/null +++ b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp @@ -0,0 +1,780 @@ +/* + * Copyright (C) 2005-2011 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "PathFinderMovementGenerator.h" +#include "Map.h" +#include "Creature.h" +#include "MMapFactory.h" +#include "MMapManager.h" +#include "Log.h" + +#include "DetourCommon.h" +#include "DetourNavMeshQuery.h" + +////////////////// PathFinderMovementGenerator ////////////////// +PathFinderMovementGenerator::PathFinderMovementGenerator(const Unit* owner) : + m_polyLength(0), m_type(PATHFIND_BLANK), + m_useStraightPath(false), m_forceDestination(false), m_pointPathLimit(MAX_POINT_PATH_LENGTH), + m_sourceUnit(owner), m_navMesh(NULL), m_navMeshQuery(NULL) +{ + sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::PathFinderMovementGenerator for %u \n", m_sourceUnit->GetGUIDLow()); + + uint32 mapId = m_sourceUnit->GetMapId(); + if (MMAP::MMapFactory::IsPathfindingEnabled(mapId)) + { + MMAP::MMapManager* mmap = MMAP::MMapFactory::createOrGetMMapManager(); + m_navMesh = mmap->GetNavMesh(mapId); + m_navMeshQuery = mmap->GetNavMeshQuery(mapId, m_sourceUnit->GetInstanceId()); + } + + createFilter(); +} + +PathFinderMovementGenerator::~PathFinderMovementGenerator() +{ + sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::~PathFinderMovementGenerator() for %u \n", m_sourceUnit->GetGUIDLow()); +} + +bool PathFinderMovementGenerator::calculate(float destX, float destY, float destZ, bool forceDest) +{ + if (!Trinity::IsValidMapCoord(destX, destY, destZ) || + !Trinity::IsValidMapCoord(m_sourceUnit->GetPositionX(), m_sourceUnit->GetPositionY(), m_sourceUnit->GetPositionZ())) + return false; + + Vector3 oldDest = getEndPosition(); + Vector3 dest(destX, destY, destZ); + setEndPosition(dest); + + float x, y, z; + m_sourceUnit->GetPosition(x, y, z); + Vector3 start(x, y, z); + setStartPosition(start); + + m_forceDestination = forceDest; + + sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::calculate() for %u \n", m_sourceUnit->GetGUIDLow()); + + // make sure navMesh works - we can run on map w/o mmap + // check if the start and end point have a .mmtile loaded (can we pass via not loaded tile on the way?) + if (!m_navMesh || !m_navMeshQuery || m_sourceUnit->HasUnitState(UNIT_STAT_IGNORE_PATHFINDING) || + !HaveTile(start) || !HaveTile(dest)) + { + BuildShortcut(); + m_type = PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH); + return true; + } + + updateFilter(); + + // check if destination moved - if not we can optimize something here + // we are following old, precalculated path? + float dist = m_sourceUnit->GetObjectSize(); + if (inRange(oldDest, dest, dist, dist) && m_pathPoints.size() > 2) + { + // our target is not moving - we just coming closer + // we are moving on precalculated path - enjoy the ride + sLog->outStaticDebug("++ PathFinderMovementGenerator::calculate:: precalculated path\n"); + + m_pathPoints.erase(m_pathPoints.begin()); + return false; + } + else + { + // target moved, so we need to update the poly path + BuildPolyPath(start, dest); + return true; + } +} + +dtPolyRef PathFinderMovementGenerator::getPathPolyByPosition(const dtPolyRef *polyPath, uint32 polyPathSize, const float* point, float *distance) const +{ + if (!polyPath || !polyPathSize) + return INVALID_POLYREF; + + dtPolyRef nearestPoly = INVALID_POLYREF; + float minDist2d = FLT_MAX; + float minDist3d = 0.0f; + + for (uint32 i = 0; i < polyPathSize; ++i) + { + float closestPoint[VERTEX_SIZE]; + if (DT_SUCCESS != m_navMeshQuery->closestPointOnPoly(polyPath[i], point, closestPoint)) + continue; + + float d = dtVdist2DSqr(point, closestPoint); + if (d < minDist2d) + { + minDist2d = d; + nearestPoly = polyPath[i]; + minDist3d = dtVdistSqr(point, closestPoint); + } + + if(minDist2d < 1.0f) // shortcut out - close enough for us + break; + } + + if (distance) + *distance = dtSqrt(minDist3d); + + return (minDist2d < 3.0f) ? nearestPoly : INVALID_POLYREF; +} + +dtPolyRef PathFinderMovementGenerator::getPolyByLocation(const float* point, float *distance) const +{ + // first we check the current path + // if the current path doesn't contain the current poly, + // we need to use the expensive navMesh.findNearestPoly + dtPolyRef polyRef = getPathPolyByPosition(m_pathPolyRefs, m_polyLength, point, distance); + if (polyRef != INVALID_POLYREF) + return polyRef; + + // we don't have it in our old path + // try to get it by findNearestPoly() + // first try with low search box + float extents[VERTEX_SIZE] = {3.0f, 5.0f, 3.0f}; // bounds of poly search area + float closestPoint[VERTEX_SIZE] = {0.0f, 0.0f, 0.0f}; + dtStatus result = m_navMeshQuery->findNearestPoly(point, extents, &m_filter, &polyRef, closestPoint); + if (DT_SUCCESS == result && polyRef != INVALID_POLYREF) + { + *distance = dtVdist(closestPoint, point); + return polyRef; + } + + // still nothing .. + // try with bigger search box + extents[1] = 200.0f; + result = m_navMeshQuery->findNearestPoly(point, extents, &m_filter, &polyRef, closestPoint); + if (DT_SUCCESS == result && polyRef != INVALID_POLYREF) + { + *distance = dtVdist(closestPoint, point); + return polyRef; + } + + return INVALID_POLYREF; +} + +void PathFinderMovementGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos) +{ + // *** getting start/end poly logic *** + + float distToStartPoly, distToEndPoly; + float startPoint[VERTEX_SIZE] = {startPos.y, startPos.z, startPos.x}; + float endPoint[VERTEX_SIZE] = {endPos.y, endPos.z, endPos.x}; + + dtPolyRef startPoly = getPolyByLocation(startPoint, &distToStartPoly); + dtPolyRef endPoly = getPolyByLocation(endPoint, &distToEndPoly); + + // we have a hole in our mesh + // make shortcut path and mark it as NOPATH ( with flying exception ) + // its up to caller how he will use this info + if (startPoly == INVALID_POLYREF || endPoly == INVALID_POLYREF) + { + sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: (startPoly == 0 || endPoly == 0)\n"); + BuildShortcut(); + m_type = (m_sourceUnit->GetTypeId() == TYPEID_UNIT && ((Creature*)m_sourceUnit)->canFly()) + ? PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH) : PATHFIND_NOPATH; + return; + } + + // we may need a better number here + bool farFromPoly = (distToStartPoly > 7.0f || distToEndPoly > 7.0f); + if (farFromPoly) + { + sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: farFromPoly distToStartPoly=%.3f distToEndPoly=%.3f\n", distToStartPoly, distToEndPoly); + + bool buildShotrcut = false; + if (m_sourceUnit->GetTypeId() == TYPEID_UNIT) + { + Creature* owner = (Creature*)m_sourceUnit; + + Vector3 p = (distToStartPoly > 7.0f) ? startPos : endPos; + if (m_sourceUnit->GetBaseMap()->IsUnderWater(p.x, p.y, p.z)) + { + sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: underWater case\n"); + if (owner->canSwim()) + buildShotrcut = true; + } + else + { + sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: flying case\n"); + if (owner->canFly()) + buildShotrcut = true; + } + } + + if (buildShotrcut) + { + BuildShortcut(); + m_type = PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH); + return; + } + else + { + float closestPoint[VERTEX_SIZE]; + // we may want to use closestPointOnPolyBoundary instead + if (DT_SUCCESS == m_navMeshQuery->closestPointOnPoly(endPoly, endPoint, closestPoint)) + { + dtVcopy(endPoint, closestPoint); + setActualEndPosition(Vector3(endPoint[2],endPoint[0],endPoint[1])); + } + + m_type = PATHFIND_INCOMPLETE; + } + } + + // *** poly path generating logic *** + + // start and end are on same polygon + // just need to move in straight line + if (startPoly == endPoly) + { + sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: (startPoly == endPoly)\n"); + + BuildShortcut(); + + m_pathPolyRefs[0] = startPoly; + m_polyLength = 1; + + m_type = farFromPoly ? PATHFIND_INCOMPLETE : PATHFIND_NORMAL; + sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: path type %d\n", m_type); + return; + } + + // look for startPoly/endPoly in current path + // TODO: we can merge it with getPathPolyByPosition() loop + bool startPolyFound = false; + bool endPolyFound = false; + uint32 pathStartIndex, pathEndIndex; + + if (m_polyLength) + { + for (pathStartIndex = 0; pathStartIndex < m_polyLength; ++pathStartIndex) + { + // here to carch few bugs + ASSERT(m_pathPolyRefs[pathStartIndex] != INVALID_POLYREF); + + if (m_pathPolyRefs[pathStartIndex] == startPoly) + { + startPolyFound = true; + break; + } + } + + for (pathEndIndex = m_polyLength-1; pathEndIndex > pathStartIndex; --pathEndIndex) + if (m_pathPolyRefs[pathEndIndex] == endPoly) + { + endPolyFound = true; + break; + } + } + + if (startPolyFound && endPolyFound) + { + sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: (startPolyFound && endPolyFound)\n"); + + // we moved along the path and the target did not move out of our old poly-path + // our path is a simple subpath case, we have all the data we need + // just "cut" it out + + m_polyLength = pathEndIndex - pathStartIndex + 1; + memmove(m_pathPolyRefs, m_pathPolyRefs+pathStartIndex, m_polyLength*sizeof(dtPolyRef)); + } + else if (startPolyFound && !endPolyFound) + { + sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: (startPolyFound && !endPolyFound)\n"); + + // we are moving on the old path but target moved out + // so we have atleast part of poly-path ready + + m_polyLength -= pathStartIndex; + + // try to adjust the suffix of the path instead of recalculating entire length + // at given interval the target cannot get too far from its last location + // thus we have less poly to cover + // sub-path of optimal path is optimal + + // take ~80% of the original length + // TODO : play with the values here + uint32 prefixPolyLength = uint32(m_polyLength*0.8f + 0.5f); + memmove(m_pathPolyRefs, m_pathPolyRefs+pathStartIndex, prefixPolyLength*sizeof(dtPolyRef)); + + dtPolyRef suffixStartPoly = m_pathPolyRefs[prefixPolyLength-1]; + + // we need any point on our suffix start poly to generate poly-path, so we need last poly in prefix data + float suffixEndPoint[VERTEX_SIZE]; + if (DT_SUCCESS != m_navMeshQuery->closestPointOnPoly(suffixStartPoly, endPoint, suffixEndPoint)) + { + // we can hit offmesh connection as last poly - closestPointOnPoly() don't like that + // try to recover by using prev polyref + --prefixPolyLength; + suffixStartPoly = m_pathPolyRefs[prefixPolyLength-1]; + if (DT_SUCCESS != m_navMeshQuery->closestPointOnPoly(suffixStartPoly, endPoint, suffixEndPoint)) + { + // suffixStartPoly is still invalid, error state + BuildShortcut(); + m_type = PATHFIND_NOPATH; + return; + } + } + + // generate suffix + uint32 suffixPolyLength = 0; + dtStatus dtResult = m_navMeshQuery->findPath( + suffixStartPoly, // start polygon + endPoly, // end polygon + suffixEndPoint, // start position + endPoint, // end position + &m_filter, // polygon search filter + m_pathPolyRefs + prefixPolyLength - 1, // [out] path + (int*)&suffixPolyLength, + MAX_PATH_LENGTH-prefixPolyLength); // max number of polygons in output path + + if (!suffixPolyLength || dtResult != DT_SUCCESS) + { + // this is probably an error state, but we'll leave it + // and hopefully recover on the next Update + // we still need to copy our preffix + sLog->outError("%u's Path Build failed: 0 length path", m_sourceUnit->GetGUIDLow()); + } + + sLog->outDebug(LOG_FILTER_MAPS, "++ m_polyLength=%u prefixPolyLength=%u suffixPolyLength=%u \n",m_polyLength, prefixPolyLength, suffixPolyLength); + + // new path = prefix + suffix - overlap + m_polyLength = prefixPolyLength + suffixPolyLength - 1; + } + else + { + sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: (!startPolyFound && !endPolyFound)\n"); + + // either we have no path at all -> first run + // or something went really wrong -> we aren't moving along the path to the target + // just generate new path + + // free and invalidate old path data + clear(); + + dtStatus dtResult = m_navMeshQuery->findPath( + startPoly, // start polygon + endPoly, // end polygon + startPoint, // start position + endPoint, // end position + &m_filter, // polygon search filter + m_pathPolyRefs, // [out] path + (int*)&m_polyLength, + MAX_PATH_LENGTH); // max number of polygons in output path + + if (!m_polyLength || dtResult != DT_SUCCESS) + { + // only happens if we passed bad data to findPath(), or navmesh is messed up + sLog->outError("%u's Path Build failed: 0 length path", m_sourceUnit->GetGUIDLow()); + BuildShortcut(); + m_type = PATHFIND_NOPATH; + return; + } + } + + // by now we know what type of path we can get + if (m_pathPolyRefs[m_polyLength - 1] == endPoly && !(m_type & PATHFIND_INCOMPLETE)) + m_type = PATHFIND_NORMAL; + else + m_type = PATHFIND_INCOMPLETE; + + // generate the point-path out of our up-to-date poly-path + BuildPointPath(startPoint, endPoint); +} + +void PathFinderMovementGenerator::BuildPointPath(const float *startPoint, const float *endPoint) +{ + float pathPoints[MAX_POINT_PATH_LENGTH*VERTEX_SIZE]; + uint32 pointCount = 0; + dtStatus dtResult = DT_FAILURE; + if (m_useStraightPath) + { + dtResult = m_navMeshQuery->findStraightPath( + startPoint, // start position + endPoint, // end position + m_pathPolyRefs, // current path + m_polyLength, // lenth of current path + pathPoints, // [out] path corner points + NULL, // [out] flags + NULL, // [out] shortened path + (int*)&pointCount, + m_pointPathLimit); // maximum number of points/polygons to use + } + else + { + dtResult = findSmoothPath( + startPoint, // start position + endPoint, // end position + m_pathPolyRefs, // current path + m_polyLength, // length of current path + pathPoints, // [out] path corner points + (int*)&pointCount, + m_pointPathLimit); // maximum number of points + } + + if (pointCount < 2 || dtResult != DT_SUCCESS) + { + // only happens if pass bad data to findStraightPath or navmesh is broken + // single point paths can be generated here + // TODO : check the exact cases + sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::BuildPointPath FAILED! path sized %d returned\n", pointCount); + BuildShortcut(); + m_type = PATHFIND_NOPATH; + return; + } + + m_pathPoints.resize(pointCount); + for (uint32 i = 0; i < pointCount; ++i) + m_pathPoints[i] = Vector3(pathPoints[i*VERTEX_SIZE+2], pathPoints[i*VERTEX_SIZE], pathPoints[i*VERTEX_SIZE+1]); + + // first point is always our current location - we need the next one + setActualEndPosition(m_pathPoints[pointCount-1]); + + // force the given destination, if needed + if(m_forceDestination && + (!(m_type & PATHFIND_NORMAL) || !inRange(getEndPosition(), getActualEndPosition(), 1.0f, 1.0f))) + { + // we may want to keep partial subpath + if(dist3DSqr(getActualEndPosition(), getEndPosition()) < + 0.3f * dist3DSqr(getStartPosition(), getEndPosition())) + { + setActualEndPosition(getEndPosition()); + m_pathPoints[m_pathPoints.size()-1] = getEndPosition(); + } + else + { + setActualEndPosition(getEndPosition()); + BuildShortcut(); + } + + m_type = PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH); + } + + sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::BuildPointPath path type %d size %d poly-size %d\n", m_type, pointCount, m_polyLength); +} + +void PathFinderMovementGenerator::BuildShortcut() +{ + sLog->outDebug(LOG_FILTER_MAPS, "++ BuildShortcut :: making shortcut\n"); + + clear(); + + // make two point path, our curr pos is the start, and dest is the end + m_pathPoints.resize(2); + + // set start and a default next position + m_pathPoints[0] = getStartPosition(); + m_pathPoints[1] = getActualEndPosition(); + + m_type = PATHFIND_SHORTCUT; +} + +void PathFinderMovementGenerator::createFilter() +{ + uint16 includeFlags = 0; + uint16 excludeFlags = 0; + + if (m_sourceUnit->GetTypeId() == TYPEID_UNIT) + { + Creature* creature = (Creature*)m_sourceUnit; + if (creature->canWalk()) + includeFlags |= NAV_GROUND; // walk + + // creatures don't take environmental damage + if (creature->canSwim()) + includeFlags |= (NAV_WATER | NAV_MAGMA | NAV_SLIME); // swim + } + else if (m_sourceUnit->GetTypeId() == TYPEID_PLAYER) + { + // perfect support not possible, just stay 'safe' + includeFlags |= (NAV_GROUND | NAV_WATER); + } + + m_filter.setIncludeFlags(includeFlags); + m_filter.setExcludeFlags(excludeFlags); + + updateFilter(); +} + +void PathFinderMovementGenerator::updateFilter() +{ + // allow creatures to cheat and use different movement types if they are moved + // forcefully into terrain they can't normally move in + if (m_sourceUnit->IsInWater() || m_sourceUnit->IsUnderWater()) + { + uint16 includedFlags = m_filter.getIncludeFlags(); + includedFlags |= getNavTerrain(m_sourceUnit->GetPositionX(), + m_sourceUnit->GetPositionY(), + m_sourceUnit->GetPositionZ()); + + m_filter.setIncludeFlags(includedFlags); + } +} + +NavTerrain PathFinderMovementGenerator::getNavTerrain(float x, float y, float z) +{ + LiquidData data; + m_sourceUnit->GetBaseMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &data); + + switch (data.type) + { + case MAP_LIQUID_TYPE_WATER: + case MAP_LIQUID_TYPE_OCEAN: + return NAV_WATER; + case MAP_LIQUID_TYPE_MAGMA: + return NAV_MAGMA; + case MAP_LIQUID_TYPE_SLIME: + return NAV_SLIME; + default: + return NAV_GROUND; + } +} + +bool PathFinderMovementGenerator::HaveTile(const Vector3 &p) const +{ + int tx, ty; + float point[VERTEX_SIZE] = {p.y, p.z, p.x}; + + m_navMesh->calcTileLoc(point, &tx, &ty); + return (m_navMesh->getTileAt(tx, ty) != NULL); +} + +uint32 PathFinderMovementGenerator::fixupCorridor(dtPolyRef* path, uint32 npath, uint32 maxPath, + const dtPolyRef* visited, uint32 nvisited) +{ + int32 furthestPath = -1; + int32 furthestVisited = -1; + + // Find furthest common polygon. + for (int32 i = npath-1; i >= 0; --i) + { + bool found = false; + for (int32 j = nvisited-1; j >= 0; --j) + { + if (path[i] == visited[j]) + { + furthestPath = i; + furthestVisited = j; + found = true; + } + } + if (found) + break; + } + + // If no intersection found just return current path. + if (furthestPath == -1 || furthestVisited == -1) + return npath; + + // Concatenate paths. + + // Adjust beginning of the buffer to include the visited. + uint32 req = nvisited - furthestVisited; + uint32 orig = uint32(furthestPath+1) < npath ? furthestPath+1 : npath; + uint32 size = npath-orig > 0 ? npath-orig : 0; + if (req+size > maxPath) + size = maxPath-req; + + if (size) + memmove(path+req, path+orig, size*sizeof(dtPolyRef)); + + // Store visited + for (uint32 i = 0; i < req; ++i) + path[i] = visited[(nvisited-1)-i]; + + return req+size; +} + +bool PathFinderMovementGenerator::getSteerTarget(const float* startPos, const float* endPos, + float minTargetDist, const dtPolyRef* path, uint32 pathSize, + float* steerPos, unsigned char& steerPosFlag, dtPolyRef& steerPosRef) +{ + // Find steer target. + static const uint32 MAX_STEER_POINTS = 3; + float steerPath[MAX_STEER_POINTS*VERTEX_SIZE]; + unsigned char steerPathFlags[MAX_STEER_POINTS]; + dtPolyRef steerPathPolys[MAX_STEER_POINTS]; + uint32 nsteerPath = 0; + dtStatus dtResult = m_navMeshQuery->findStraightPath(startPos, endPos, path, pathSize, + steerPath, steerPathFlags, steerPathPolys, (int*)&nsteerPath, MAX_STEER_POINTS); + if (!nsteerPath || DT_SUCCESS != dtResult) + return false; + + // Find vertex far enough to steer to. + uint32 ns = 0; + while (ns < nsteerPath) + { + // Stop at Off-Mesh link or when point is further than slop away. + if ((steerPathFlags[ns] & DT_STRAIGHTPATH_OFFMESH_CONNECTION) || + !inRangeYZX(&steerPath[ns*VERTEX_SIZE], startPos, minTargetDist, 1000.0f)) + break; + ns++; + } + // Failed to find good point to steer to. + if (ns >= nsteerPath) + return false; + + dtVcopy(steerPos, &steerPath[ns*VERTEX_SIZE]); + steerPos[1] = startPos[1]; // keep Z value + steerPosFlag = steerPathFlags[ns]; + steerPosRef = steerPathPolys[ns]; + + return true; +} + +dtStatus PathFinderMovementGenerator::findSmoothPath(const float* startPos, const float* endPos, + const dtPolyRef* polyPath, uint32 polyPathSize, + float* smoothPath, int* smoothPathSize, uint32 maxSmoothPathSize) +{ + *smoothPathSize = 0; + uint32 nsmoothPath = 0; + + dtPolyRef polys[MAX_PATH_LENGTH]; + memcpy(polys, polyPath, sizeof(dtPolyRef)*polyPathSize); + uint32 npolys = polyPathSize; + + float iterPos[VERTEX_SIZE], targetPos[VERTEX_SIZE]; + if (DT_SUCCESS != m_navMeshQuery->closestPointOnPolyBoundary(polys[0], startPos, iterPos)) + return DT_FAILURE; + + if (DT_SUCCESS != m_navMeshQuery->closestPointOnPolyBoundary(polys[npolys-1], endPos, targetPos)) + return DT_FAILURE; + + dtVcopy(&smoothPath[nsmoothPath*VERTEX_SIZE], iterPos); + nsmoothPath++; + + // Move towards target a small advancement at a time until target reached or + // when ran out of memory to store the path. + while (npolys && nsmoothPath < maxSmoothPathSize) + { + // Find location to steer towards. + float steerPos[VERTEX_SIZE]; + unsigned char steerPosFlag; + dtPolyRef steerPosRef = INVALID_POLYREF; + + if (!getSteerTarget(iterPos, targetPos, SMOOTH_PATH_SLOP, polys, npolys, steerPos, steerPosFlag, steerPosRef)) + break; + + bool endOfPath = (steerPosFlag & DT_STRAIGHTPATH_END); + bool offMeshConnection = (steerPosFlag & DT_STRAIGHTPATH_OFFMESH_CONNECTION); + + // Find movement delta. + float delta[VERTEX_SIZE]; + dtVsub(delta, steerPos, iterPos); + float len = dtSqrt(dtVdot(delta,delta)); + // If the steer target is end of path or off-mesh link, do not move past the location. + if ((endOfPath || offMeshConnection) && len < SMOOTH_PATH_STEP_SIZE) + len = 1.0f; + else + len = SMOOTH_PATH_STEP_SIZE / len; + + float moveTgt[VERTEX_SIZE]; + dtVmad(moveTgt, iterPos, delta, len); + + // Move + float result[VERTEX_SIZE]; + const static uint32 MAX_VISIT_POLY = 16; + dtPolyRef visited[MAX_VISIT_POLY]; + + uint32 nvisited = 0; + m_navMeshQuery->moveAlongSurface(polys[0], iterPos, moveTgt, &m_filter, result, visited, (int*)&nvisited, MAX_VISIT_POLY); + npolys = fixupCorridor(polys, npolys, MAX_PATH_LENGTH, visited, nvisited); + + m_navMeshQuery->getPolyHeight(polys[0], result, &result[1]); + result[1] += 0.5f; + dtVcopy(iterPos, result); + + // Handle end of path and off-mesh links when close enough. + if (endOfPath && inRangeYZX(iterPos, steerPos, SMOOTH_PATH_SLOP, 1.0f)) + { + // Reached end of path. + dtVcopy(iterPos, targetPos); + if (nsmoothPath < maxSmoothPathSize) + { + dtVcopy(&smoothPath[nsmoothPath*VERTEX_SIZE], iterPos); + nsmoothPath++; + } + break; + } + else if (offMeshConnection && inRangeYZX(iterPos, steerPos, SMOOTH_PATH_SLOP, 1.0f)) + { + // Advance the path up to and over the off-mesh connection. + dtPolyRef prevRef = INVALID_POLYREF; + dtPolyRef polyRef = polys[0]; + uint32 npos = 0; + while (npos < npolys && polyRef != steerPosRef) + { + prevRef = polyRef; + polyRef = polys[npos]; + npos++; + } + + for (uint32 i = npos; i < npolys; ++i) + polys[i-npos] = polys[i]; + + npolys -= npos; + + // Handle the connection. + float startPos[VERTEX_SIZE], endPos[VERTEX_SIZE]; + if (DT_SUCCESS == m_navMesh->getOffMeshConnectionPolyEndPoints(prevRef, polyRef, startPos, endPos)) + { + if (nsmoothPath < maxSmoothPathSize) + { + dtVcopy(&smoothPath[nsmoothPath*VERTEX_SIZE], startPos); + nsmoothPath++; + } + // Move position at the other side of the off-mesh link. + dtVcopy(iterPos, endPos); + m_navMeshQuery->getPolyHeight(polys[0], iterPos, &iterPos[1]); + iterPos[1] += 0.5f; + } + } + + // Store results. + if (nsmoothPath < maxSmoothPathSize) + { + dtVcopy(&smoothPath[nsmoothPath*VERTEX_SIZE], iterPos); + nsmoothPath++; + } + } + + *smoothPathSize = nsmoothPath; + + // this is most likely a loop + return nsmoothPath < MAX_POINT_PATH_LENGTH ? DT_SUCCESS : DT_FAILURE; +} + +bool PathFinderMovementGenerator::inRangeYZX(const float* v1, const float* v2, float r, float h) const +{ + const float dx = v2[0] - v1[0]; + const float dy = v2[1] - v1[1]; // elevation + const float dz = v2[2] - v1[2]; + return (dx*dx + dz*dz) < r*r && fabsf(dy) < h; +} + +bool PathFinderMovementGenerator::inRange(const Vector3 &p1, const Vector3 &p2, float r, float h) const +{ + Vector3 d = p1-p2; + return (d.x*d.x + d.y*d.y) < r*r && fabsf(d.z) < h; +} + +float PathFinderMovementGenerator::dist3DSqr(const Vector3 &p1, const Vector3 &p2) const +{ + return (p1-p2).squaredLength(); +} diff --git a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h new file mode 100644 index 00000000000..f4edd1a1789 --- /dev/null +++ b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h @@ -0,0 +1,135 @@ +/* + * Copyright (C) 2005-2011 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _PATH_INFO_H +#define _PATH_INFO_H + +#include "SharedDefines.h" +#include "DetourNavMesh.h" +#include "DetourNavMeshQuery.h" +#include "MoveSplineInitArgs.h" + +using Movement::Vector3; +using Movement::PointsArray; + +class Unit; + +// 74*4.0f=296y number_of_points*interval = max_path_len +// this is way more than actual evade range +// I think we can safely cut those down even more +#define MAX_PATH_LENGTH 74 +#define MAX_POINT_PATH_LENGTH 74 + +#define SMOOTH_PATH_STEP_SIZE 4.0f +#define SMOOTH_PATH_SLOP 0.3f + +#define VERTEX_SIZE 3 +#define INVALID_POLYREF 0 + +enum PathType +{ + PATHFIND_BLANK = 0x0000, // path not built yet + PATHFIND_NORMAL = 0x0001, // normal path + PATHFIND_SHORTCUT = 0x0002, // travel through obstacles, terrain, air, etc (old behavior) + PATHFIND_INCOMPLETE = 0x0004, // we have partial path to follow - getting closer to target + PATHFIND_NOPATH = 0x0008, // no valid path at all or error in generating one + PATHFIND_NOT_USING_PATH = 0x0010 // used when we are either flying/swiming or on map w/o mmaps +}; + +class PathFinderMovementGenerator +{ + public: + PathFinderMovementGenerator(Unit const* owner); + ~PathFinderMovementGenerator(); + + // Calculate the path from owner to given destination + // return: true if new path was calculated, false otherwise (no change needed) + bool calculate(float destX, float destY, float destZ, bool forceDest = false); + + // option setters - use optional + void setUseStrightPath(bool useStraightPath) { m_useStraightPath = useStraightPath; }; + void setPathLengthLimit(float distance) { m_pointPathLimit = std::min(uint32(distance/SMOOTH_PATH_STEP_SIZE), MAX_POINT_PATH_LENGTH); }; + + // result getters + Vector3 getStartPosition() const { return m_startPosition; } + Vector3 getEndPosition() const { return m_endPosition; } + Vector3 getActualEndPosition() const { return m_actualEndPosition; } + + PointsArray& getPath() { return m_pathPoints; } + PathType getPathType() const { return m_type; } + + private: + + dtPolyRef m_pathPolyRefs[MAX_PATH_LENGTH]; // array of detour polygon references + uint32 m_polyLength; // number of polygons in the path + + PointsArray m_pathPoints; // our actual (x,y,z) path to the target + PathType m_type; // tells what kind of path this is + + bool m_useStraightPath; // type of path will be generated + bool m_forceDestination; // when set, we will always arrive at given point + uint32 m_pointPathLimit; // limit point path size; min(this, MAX_POINT_PATH_LENGTH) + + Vector3 m_startPosition; // {x, y, z} of current location + Vector3 m_endPosition; // {x, y, z} of the destination + Vector3 m_actualEndPosition;// {x, y, z} of the closest possible point to given destination + + const Unit* const m_sourceUnit; // the unit that is moving + const dtNavMesh* m_navMesh; // the nav mesh + const dtNavMeshQuery* m_navMeshQuery; // the nav mesh query used to find the path + + dtQueryFilter m_filter; // use single filter for all movements, update it when needed + + void setStartPosition(Vector3 point) { m_startPosition = point; } + void setEndPosition(Vector3 point) { m_actualEndPosition = point; m_endPosition = point; } + void setActualEndPosition(Vector3 point) { m_actualEndPosition = point; } + + void clear() + { + m_polyLength = 0; + m_pathPoints.clear(); + } + + bool inRange(const Vector3 &p1, const Vector3 &p2, float r, float h) const; + float dist3DSqr(const Vector3 &p1, const Vector3 &p2) const; + bool inRangeYZX(const float* v1, const float* v2, float r, float h) const; + + dtPolyRef getPathPolyByPosition(const dtPolyRef *polyPath, uint32 polyPathSize, const float* point, float *distance = NULL) const; + dtPolyRef getPolyByLocation(const float* point, float *distance) const; + bool HaveTile(const Vector3 &p) const; + + void BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos); + void BuildPointPath(const float *startPoint, const float *endPoint); + void BuildShortcut(); + + NavTerrain getNavTerrain(float x, float y, float z); + void createFilter(); + void updateFilter(); + + // smooth path aux functions + uint32 fixupCorridor(dtPolyRef* path, uint32 npath, uint32 maxPath, + const dtPolyRef* visited, uint32 nvisited); + bool getSteerTarget(const float* startPos, const float* endPos, float minTargetDist, + const dtPolyRef* path, uint32 pathSize, float* steerPos, + unsigned char& steerPosFlag, dtPolyRef& steerPosRef); + dtStatus findSmoothPath(const float* startPos, const float* endPos, + const dtPolyRef* polyPath, uint32 polyPathSize, + float* smoothPath, int* smoothPathSize, uint32 smoothPathMaxSize); +}; + +#endif From d6bddc1c94427b325d9b4fd842562c5d8ae2f0c9 Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 15:11:39 +0200 Subject: [PATCH 006/204] Core/Mmaps: * implemented loading part. --- src/server/collision/CMakeLists.txt | 2 ++ .../collision/Management/VMapManager2.h | 2 ++ src/server/collision/Maps/MapTree.h | 1 + src/server/collision/Models/ModelInstance.h | 2 ++ src/server/collision/Models/WorldModel.h | 6 +++++ src/server/game/CMakeLists.txt | 2 ++ src/server/game/Entities/Unit/Unit.h | 3 ++- src/server/game/Maps/Map.cpp | 24 +++++++++++++++++++ src/server/game/Maps/Map.h | 3 +++ src/server/game/Maps/MapInstanced.cpp | 2 ++ src/server/game/Movement/MovementGenerator.h | 3 +++ 11 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/server/collision/CMakeLists.txt b/src/server/collision/CMakeLists.txt index 9fc696ab19a..d54d5f91046 100644 --- a/src/server/collision/CMakeLists.txt +++ b/src/server/collision/CMakeLists.txt @@ -34,7 +34,9 @@ set(collision_STAT_SRCS include_directories( ${CMAKE_SOURCE_DIR}/dep/g3dlite/include + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour ${CMAKE_SOURCE_DIR}/src/server/shared + ${CMAKE_SOURCE_DIR}/src/server/shared/Configuration ${CMAKE_SOURCE_DIR}/src/server/shared/Debugging ${CMAKE_SOURCE_DIR}/src/server/shared/Database ${CMAKE_SOURCE_DIR}/src/server/shared/Debugging diff --git a/src/server/collision/Management/VMapManager2.h b/src/server/collision/Management/VMapManager2.h index 1fba108388a..c87c42fd832 100755 --- a/src/server/collision/Management/VMapManager2.h +++ b/src/server/collision/Management/VMapManager2.h @@ -112,6 +112,8 @@ namespace VMAP return getMapFileName(mapId); } virtual bool existsMap(const char* basePath, unsigned int mapId, int x, int y); + public: + void getInstanceMapTree(InstanceTreeMap &instanceMapTree); }; } diff --git a/src/server/collision/Maps/MapTree.h b/src/server/collision/Maps/MapTree.h index 1732209c6bc..f0df713bf57 100755 --- a/src/server/collision/Maps/MapTree.h +++ b/src/server/collision/Maps/MapTree.h @@ -80,6 +80,7 @@ namespace VMAP void UnloadMapTile(uint32 tileX, uint32 tileY, VMapManager2* vm); bool isTiled() const { return iIsTiled; } uint32 numLoadedTiles() const { return iLoadedTiles.size(); } + void getModelInstances(ModelInstance* &models, uint32 &count); }; struct AreaInfo diff --git a/src/server/collision/Models/ModelInstance.h b/src/server/collision/Models/ModelInstance.h index 1118b654578..3c46967980f 100755 --- a/src/server/collision/Models/ModelInstance.h +++ b/src/server/collision/Models/ModelInstance.h @@ -74,6 +74,8 @@ namespace VMAP G3D::Matrix3 iInvRot; float iInvScale; WorldModel* iModel; + public: + WorldModel* const getWorldModel(); }; } // namespace VMAP diff --git a/src/server/collision/Models/WorldModel.h b/src/server/collision/Models/WorldModel.h index ebf828e4935..98be3494927 100755 --- a/src/server/collision/Models/WorldModel.h +++ b/src/server/collision/Models/WorldModel.h @@ -66,6 +66,8 @@ namespace VMAP uint32 iType; //!< liquid type float *iHeight; //!< (tilesX + 1)*(tilesY + 1) height values uint8 *iFlags; //!< info if liquid tile is used + public: + void getPosInfo(uint32 &tilesX, uint32 &tilesY, Vector3 &corner) const; }; /*! holding additional info for WMO group files */ @@ -98,6 +100,8 @@ namespace VMAP std::vector triangles; BIH meshTree; WmoLiquid* iLiquid; + public: + void getMeshData(std::vector &vertices, std::vector &triangles, WmoLiquid* &liquid); }; /*! Holds a model (converted M2 or WMO) in its original coordinate space */ class WorldModel @@ -117,6 +121,8 @@ namespace VMAP uint32 RootWMOID; std::vector groupModels; BIH groupTree; + public: + void getGroupModels(std::vector &groupModels); }; } // namespace VMAP diff --git a/src/server/game/CMakeLists.txt b/src/server/game/CMakeLists.txt index 1f680f6e9b0..ec5833b0368 100644 --- a/src/server/game/CMakeLists.txt +++ b/src/server/game/CMakeLists.txt @@ -106,6 +106,8 @@ set(game_STAT_SRCS include_directories( ${CMAKE_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast ${CMAKE_SOURCE_DIR}/dep/g3dlite/include ${CMAKE_SOURCE_DIR}/dep/mersennetwister ${CMAKE_SOURCE_DIR}/dep/SFMT diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index bb826c14dfc..b47c5a78dd5 100755 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -498,6 +498,7 @@ enum UnitState UNIT_STATE_FLEEING_MOVE = 0x02000000, UNIT_STATE_CHASE_MOVE = 0x04000000, UNIT_STATE_FOLLOW_MOVE = 0x08000000, + UNIT_STATE_IGNORE_PATHFINDING = 0x10000000, // do not use pathfinding in any MovementGenerator UNIT_STATE_UNATTACKABLE = (UNIT_STATE_IN_FLIGHT | UNIT_STATE_ONVEHICLE), // for real move using movegen check and stop (except unstoppable flight) UNIT_STATE_MOVING = UNIT_STATE_ROAMING_MOVE | UNIT_STATE_CONFUSED_MOVE | UNIT_STATE_FLEEING_MOVE | UNIT_STATE_CHASE_MOVE | UNIT_STATE_FOLLOW_MOVE , @@ -1626,7 +1627,7 @@ class Unit : public WorldObject void JumpTo(float speedXY, float speedZ, bool forward = true); void JumpTo(WorldObject* obj, float speedZ); - void MonsterMoveWithSpeed(float x, float y, float z, float speed); + void MonsterMoveWithSpeed(float x, float y, float z, float speed, bool generatePath = false, bool forceDestination = false); //void SetFacing(float ori, WorldObject* obj = NULL); void SendMonsterMoveExitVehicle(Position const* newPos); //void SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint8 type, uint32 MovementFlags, uint32 Time, Player* player = NULL); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index a1b3d913c99..c3732769d04 100755 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -20,6 +20,7 @@ #include "GridStates.h" #include "ScriptMgr.h" #include "VMapFactory.h" +#include "MMapFactory.h" #include "MapInstanced.h" #include "CellImpl.h" #include "GridNotifiers.h" @@ -69,6 +70,9 @@ Map::~Map() if (!m_scriptSchedule.empty()) sScriptMgr->DecreaseScheduledScriptCount(m_scriptSchedule.size()); + + MMAP::MMapFactory::createOrGetMMapManager()->unloadMap(GetId()); + MMAP::MMapFactory::createOrGetMMapManager()->unloadMapInstance(GetId(), i_InstanceId); } bool Map::ExistMap(uint32 mapid, int gx, int gy) @@ -117,6 +121,24 @@ bool Map::ExistVMap(uint32 mapid, int gx, int gy) return true; } +void Map::LoadMMap(int gx, int gy) +{ + // DONT CHANGE "gy" and "gx" - Its necessary ! + int mmapLoadResult = MMAP::MMapFactory::createOrGetMMapManager()->loadMap(GetId(), gy, gx); + switch (mmapLoadResult) + { + case MMAP::MMAP_LOAD_RESULT_OK: + sLog->outDetail("MMAP loaded name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); + break; + case MMAP::MMAP_LOAD_RESULT_ERROR: + sLog->outDetail("Could not load MMAP name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); + break; + case MMAP::MMAP_LOAD_RESULT_IGNORED: + sLog->outStaticDebug("Ignored MMAP name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); + break; + } +} + void Map::LoadVMap(int gx, int gy) { // x and y are swapped !! @@ -184,6 +206,7 @@ void Map::LoadMap(int gx, int gy, bool reload) void Map::LoadMapAndVMap(int gx, int gy) { LoadMap(gx, gy); + LoadMMap(gx, gy); if (i_InstanceId == 0) LoadVMap(gx, gy); // Only load the data for the base map } @@ -996,6 +1019,7 @@ bool Map::UnloadGrid(NGridType& ngrid, bool unloadAll) } // x and y are swapped VMAP::VMapFactory::createOrGetVMapManager()->unloadMap(GetId(), gx, gy); + MMAP::MMapFactory::createOrGetMMapManager()->unloadMap(GetId(), gx, gy); } else ((MapInstanced*)m_parentMap)->RemoveGridMapReference(GridCoord(gx, gy)); diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 766e3d23f93..925adfbc15a 100755 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -76,6 +76,8 @@ struct map_fileheader uint32 heightMapSize; uint32 liquidMapOffset; uint32 liquidMapSize; + uint32 holesOffset; + uint32 holesSize; }; #define MAP_AREA_NO_AREA 0x0001 @@ -447,6 +449,7 @@ class Map : public GridRefManager void LoadMapAndVMap(int gx, int gy); void LoadVMap(int gx, int gy); void LoadMap(int gx, int gy, bool reload = false); + void LoadMMap(int gx, int gy); GridMap* GetGrid(float x, float y); void SetTimer(uint32 t) { i_gridExpiry = t < MIN_GRID_DELAY ? MIN_GRID_DELAY : t; } diff --git a/src/server/game/Maps/MapInstanced.cpp b/src/server/game/Maps/MapInstanced.cpp index 5543251e115..5924b9246f6 100755 --- a/src/server/game/Maps/MapInstanced.cpp +++ b/src/server/game/Maps/MapInstanced.cpp @@ -21,6 +21,7 @@ #include "MapManager.h" #include "Battleground.h" #include "VMapFactory.h" +#include "MMapFactory.h" #include "InstanceSaveMgr.h" #include "World.h" #include "Group.h" @@ -258,6 +259,7 @@ bool MapInstanced::DestroyInstance(InstancedMaps::iterator &itr) if (m_InstancedMaps.size() <= 1 && sWorld->getBoolConfig(CONFIG_GRID_UNLOAD)) { VMAP::VMapFactory::createOrGetVMapManager()->unloadMap(itr->second->GetId()); + MMAP::MMapFactory::createOrGetMMapManager()->unloadMap(itr->second->GetId()); // in that case, unload grids of the base map, too // so in the next map creation, (EnsureGridCreated actually) VMaps will be reloaded Map::UnloadAll(); diff --git a/src/server/game/Movement/MovementGenerator.h b/src/server/game/Movement/MovementGenerator.h index 0a2ebcfaeee..85e1fec0c2d 100755 --- a/src/server/game/Movement/MovementGenerator.h +++ b/src/server/game/Movement/MovementGenerator.h @@ -43,6 +43,9 @@ class MovementGenerator virtual MovementGeneratorType GetMovementGeneratorType() = 0; virtual void unitSpeedChanged() { } + + // used by Evade code for select point to evade with expected restart default movement + virtual bool GetResetPosition(Unit &, float& /*x*/, float& /*y*/, float& /*z*/) { return false; } }; template From b1b831a1d77e9c594de176805591a339beb7ef5e Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 15:20:45 +0200 Subject: [PATCH 007/204] Core/Movement: Implemented mmaps in ConfusedMovementGenerator. --- .../ConfusedMovementGenerator.cpp | 36 +++++++++---------- .../ConfusedMovementGenerator.h | 6 +--- 2 files changed, 17 insertions(+), 25 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index 54a68f92c66..6357f3950ea 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -79,29 +79,15 @@ void ConfusedMovementGenerator::Initialize(T &unit) i_waypoints[idx][2] = z; } + unit.GetPosition(i_x, i_y, i_z); unit.StopMoving(); unit.SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); unit.AddUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); } -template<> -void ConfusedMovementGenerator::_InitSpecific(Creature &creature, bool &is_water_ok, bool &is_land_ok) -{ - is_water_ok = creature.canSwim(); - is_land_ok = creature.canWalk(); -} - -template<> -void ConfusedMovementGenerator::_InitSpecific(Player &, bool &is_water_ok, bool &is_land_ok) -{ - is_water_ok = true; - is_land_ok = true; -} - template void ConfusedMovementGenerator::Reset(T &unit) { - i_nextMove = 1; i_nextMoveTime.Reset(0); unit.StopMoving(); unit.AddUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); @@ -119,10 +105,7 @@ bool ConfusedMovementGenerator::Update(T &unit, const uint32 &diff) unit.AddUnitState(UNIT_STATE_CONFUSED_MOVE); if (unit.movespline->Finalized()) - { - i_nextMove = urand(1, MAX_CONF_WAYPOINTS); - i_nextMoveTime.Reset(urand(500, 1200)); // Guessed - } + i_nextMoveTime.Reset(urand(800, 1500)); } else { @@ -137,8 +120,20 @@ bool ConfusedMovementGenerator::Update(T &unit, const uint32 &diff) float x = i_waypoints[i_nextMove][0]; float y = i_waypoints[i_nextMove][1]; float z = i_waypoints[i_nextMove][2]; + + unit.UpdateAllowedPositionZ(x, y, z); + + PathFinderMovementGenerator path(&unit); + path.setPathLengthLimit(30.0f); + path.calculate(x, y, z); + if (path.getPathType() & PATHFIND_NOPATH) + { + i_nextMoveTime.Reset(urand(800, 1000)); + return true; + } + Movement::MoveSplineInit init(unit); - init.MoveTo(x, y, z); + init.MovebyPath(path.getPath()); init.SetWalk(true); init.Launch(); } @@ -152,6 +147,7 @@ void ConfusedMovementGenerator::Finalize(Player &unit) { unit.RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); unit.ClearUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); + unit.StopMoving(); } template<> diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h index 7f2226ea069..c390892d0d0 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h @@ -22,8 +22,6 @@ #include "MovementGenerator.h" #include "Timer.h" -#define MAX_CONF_WAYPOINTS 24 //! Allows a twelve second confusion if i_nextMove always is the absolute minimum timer. - template class ConfusedMovementGenerator : public MovementGeneratorMedium< T, ConfusedMovementGenerator > { @@ -37,10 +35,8 @@ class ConfusedMovementGenerator : public MovementGeneratorMedium< T, ConfusedMov MovementGeneratorType GetMovementGeneratorType() { return CONFUSED_MOTION_TYPE; } private: - void _InitSpecific(T &, bool &, bool &); TimeTracker i_nextMoveTime; - float i_waypoints[MAX_CONF_WAYPOINTS+1][3]; - uint32 i_nextMove; + float i_waypoints[24+1][3]; }; #endif From 973adf112bff7d8ec0aeb09f9fd2545d82943868 Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 15:48:19 +0200 Subject: [PATCH 008/204] More changes for mmaps. --- .../ConfusedMovementGenerator.cpp | 3 +-- src/server/game/Movement/Waypoints/Path.h | 24 +++++++++++++++---- src/server/game/World/World.cpp | 6 +++++ src/server/game/World/World.h | 1 + src/server/scripts/CMakeLists.txt | 3 +++ src/server/shared/CMakeLists.txt | 1 + src/server/worldserver/CMakeLists.txt | 2 ++ 7 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index 6357f3950ea..caf81a0a141 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -19,6 +19,7 @@ #include "Creature.h" #include "MapManager.h" #include "ConfusedMovementGenerator.h" +#include "PathFinderMovementGenerator.h" #include "VMapFactory.h" #include "MoveSplineInit.h" #include "MoveSpline.h" @@ -42,8 +43,6 @@ void ConfusedMovementGenerator::Initialize(T &unit) i_nextMove = 1; bool is_water_ok, is_land_ok; - _InitSpecific(unit, is_water_ok, is_land_ok); - for (uint8 idx = 0; idx < MAX_CONF_WAYPOINTS + 1; ++idx) { float wanderX = x + (wander_distance * (float)rand_norm() - wander_distance/2); diff --git a/src/server/game/Movement/Waypoints/Path.h b/src/server/game/Movement/Waypoints/Path.h index b6ddaa9d726..038958593fb 100755 --- a/src/server/game/Movement/Waypoints/Path.h +++ b/src/server/game/Movement/Waypoints/Path.h @@ -20,10 +20,12 @@ #define TRINITYCORE_PATH_H #include "Common.h" -#include +#include -struct SimplePathNode +struct PathNode { + PathNode(): x(0.0f), y(0.0f), z(0.0f) { } + PathNode(float _x, float _y, float _z): x(_x), y(_y), z(_z) { } float x, y, z; }; template @@ -36,6 +38,20 @@ class Path void resize(unsigned int sz) { i_nodes.resize(sz); } void clear() { i_nodes.clear(); } void erase(uint32 idx) { i_nodes.erase(i_nodes.begin()+idx); } + void crop(unsigned int start, unsigned int end) + { + while(start && !i_nodes.empty()) + { + i_nodes.pop_front(); + --start; + } + + while(end && !i_nodes.empty()) + { + i_nodes.pop_back(); + --end; + } + } float GetTotalLength(uint32 start, uint32 end) const { @@ -76,10 +92,10 @@ class Path void set(size_t idx, PathElem elem) { i_nodes[idx] = elem; } protected: - std::vector i_nodes; + std::deque i_nodes; }; -typedef Path SimplePath; +typedef Path SimplePath; #endif diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 6e32d33a7bb..3870a108d57 100755 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -21,6 +21,7 @@ */ #include "Common.h" +#include "Memory.h" #include "DatabaseEnv.h" #include "Config.h" #include "SystemConfig.h" @@ -54,6 +55,7 @@ #include "TemporarySummon.h" #include "WaypointMovementGenerator.h" #include "VMapFactory.h" +#include "MMapFactory.h" #include "GameEventMgr.h" #include "PoolMgr.h" #include "GridNotifiersImpl.h" @@ -1121,6 +1123,7 @@ void World::LoadConfigSettings(bool reload) } m_bool_configs[CONFIG_VMAP_INDOOR_CHECK] = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", 0); + m_bool_configs[CONFIG_ENABLE_MMAPS] = ConfigMgr::GetBoolDefault("mmap.enablePathFinding", true); bool enableIndoor = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", true); bool enableLOS = ConfigMgr::GetBoolDefault("vmap.enableLOS", true); bool enableHeight = ConfigMgr::GetBoolDefault("vmap.enableHeight", true); @@ -1216,6 +1219,9 @@ void World::SetInitialWorldSettings() ///- Initialize the random number generator srand((unsigned int)time(NULL)); + ///- Initialize detour memory management + dtAllocSetCustom(dtCustomAlloc, dtCustomFree); + ///- Initialize config settings LoadConfigSettings(); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 95e9fbda8ca..ec3d09006bd 100755 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -164,6 +164,7 @@ enum WorldBoolConfigs CONFIG_QUEST_IGNORE_AUTO_ACCEPT, CONFIG_QUEST_IGNORE_AUTO_COMPLETE, CONFIG_WARDEN_ENABLED, + CONFIG_ENABLE_MMAPS, BOOL_CONFIG_VALUE_COUNT }; diff --git a/src/server/scripts/CMakeLists.txt b/src/server/scripts/CMakeLists.txt index 728d95a0851..e249943eb7c 100644 --- a/src/server/scripts/CMakeLists.txt +++ b/src/server/scripts/CMakeLists.txt @@ -51,6 +51,8 @@ message("") include_directories( ${CMAKE_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast ${CMAKE_SOURCE_DIR}/dep/g3dlite/include ${CMAKE_SOURCE_DIR}/dep/SFMT ${CMAKE_SOURCE_DIR}/dep/mersennetwister @@ -120,6 +122,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/server/game/Maps ${CMAKE_SOURCE_DIR}/src/server/game/Movement ${CMAKE_SOURCE_DIR}/src/server/game/Movement/MovementGenerators + ${CMAKE_SOURCE_DIR}/src/server/game/Movement/Spline ${CMAKE_SOURCE_DIR}/src/server/game/Movement/Waypoints ${CMAKE_SOURCE_DIR}/src/server/game/Opcodes ${CMAKE_SOURCE_DIR}/src/server/game/OutdoorPvP diff --git a/src/server/shared/CMakeLists.txt b/src/server/shared/CMakeLists.txt index 3ec35b5394a..d42049b1cdf 100644 --- a/src/server/shared/CMakeLists.txt +++ b/src/server/shared/CMakeLists.txt @@ -52,6 +52,7 @@ set(shared_STAT_SRCS include_directories( ${CMAKE_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour ${CMAKE_SOURCE_DIR}/dep/SFMT ${CMAKE_SOURCE_DIR}/dep/mersennetwister ${CMAKE_SOURCE_DIR}/dep/sockets/include diff --git a/src/server/worldserver/CMakeLists.txt b/src/server/worldserver/CMakeLists.txt index d1419cb0fcb..080e71846a6 100644 --- a/src/server/worldserver/CMakeLists.txt +++ b/src/server/worldserver/CMakeLists.txt @@ -45,6 +45,7 @@ endif() include_directories( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/dep/g3dlite/include + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour ${CMAKE_SOURCE_DIR}/dep/gsoap ${CMAKE_SOURCE_DIR}/dep/sockets/include ${CMAKE_SOURCE_DIR}/dep/SFMT @@ -168,6 +169,7 @@ target_link_libraries(worldserver collision g3dlib gsoap + Detour ${JEMALLOC_LIBRARY} ${READLINE_LIBRARY} ${TERMCAP_LIBRARY} From 710a617a3cf7b0f59c268fd0a6396d1e6e7393ba Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 15:52:00 +0200 Subject: [PATCH 009/204] Core/Tools: Store hole data. --- src/tools/map_extractor/System.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index bbde9f4675e..29836506861 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -292,6 +292,8 @@ struct map_fileheader uint32 heightMapSize; uint32 liquidMapOffset; uint32 liquidMapSize; + uint32 holesOffset; + uint32 holesSize; }; #define MAP_AREA_NO_AREA 0x0001 @@ -826,6 +828,28 @@ bool ConvertADT(char *filename, char *filename2, int cell_y, int cell_x, uint32 map.liquidMapSize += sizeof(float)*liquidHeader.width*liquidHeader.height; } + // map hole info + uint16 holes[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID]; + + if (map.liquidMapOffset) + map.holesOffset = map.liquidMapOffset + map.liquidMapSize; + else + map.holesOffset = map.heightMapOffset + map.heightMapSize; + + map.holesSize = sizeof(holes); + memset(holes, 0, map.holesSize); + + for (int i = 0; i < ADT_CELLS_PER_GRID; ++i) + { + for (int j = 0; j < ADT_CELLS_PER_GRID; ++j) + { + adt_MCNK * cell = cells->getMCNK(i,j); + if (!cell) + continue; + holes[i][j] = cell->holes; + } + } + // Ok all data prepared - store it FILE *output=fopen(filename2, "wb"); if(!output) @@ -875,6 +899,9 @@ bool ConvertADT(char *filename, char *filename2, int cell_y, int cell_x, uint32 fwrite(&liquid_height[y+liquidHeader.offsetY][liquidHeader.offsetX], sizeof(float), liquidHeader.width, output); } } + // store hole data + fwrite(holes, map.holesSize, 1, output); + fclose(output); return true; From ccb7a5a809a45bcf0ba6f5fbb59a71d475891564 Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 15:53:21 +0200 Subject: [PATCH 010/204] Add config options. --- src/server/worldserver/worldserver.conf.dist | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 5d837100b0e..7366d248950 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -266,6 +266,21 @@ PlayerSave.Stats.MinLevel = 0 PlayerSave.Stats.SaveOnlyOnLogout = 1 +# +# mmap.enablePathFinding +# Description: Enable/Disable pathfinding using mmaps +# Default: 1 - (Enabled) +# 0 - (Disabled) + +mmap.enablePathFinding = 1 + +# +# mmap.ignoreMapIds +# Disable mmap pathfinding on the listed maps. +# List of map ids with delimiter ',' + +mmap.ignoreMapIds = "" + # # vmap.enableLOS # vmap.enableHeight From 2181b123ba1b45ae8725d4e06799bf3d3bee282d Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 15:55:27 +0200 Subject: [PATCH 011/204] Give mmap generator the correct name. --- src/tools/CMakeLists.txt | 2 +- .../{mmap_extractor => mmaps_generator}/CMakeLists.txt | 8 ++++---- .../{mmap_extractor => mmaps_generator}/Info/readme.txt | 0 .../IntermediateValues.cpp | 0 .../IntermediateValues.h | 0 .../{mmap_extractor => mmaps_generator}/MapBuilder.cpp | 0 .../{mmap_extractor => mmaps_generator}/MapBuilder.h | 0 .../{mmap_extractor => mmaps_generator}/PathCommon.h | 0 .../{mmap_extractor => mmaps_generator}/PathGenerator.cpp | 0 .../TerrainBuilder.cpp | 0 .../{mmap_extractor => mmaps_generator}/TerrainBuilder.h | 0 .../VMapExtensions.cpp | 0 12 files changed, 5 insertions(+), 5 deletions(-) rename src/tools/{mmap_extractor => mmaps_generator}/CMakeLists.txt (90%) rename src/tools/{mmap_extractor => mmaps_generator}/Info/readme.txt (100%) rename src/tools/{mmap_extractor => mmaps_generator}/IntermediateValues.cpp (100%) rename src/tools/{mmap_extractor => mmaps_generator}/IntermediateValues.h (100%) rename src/tools/{mmap_extractor => mmaps_generator}/MapBuilder.cpp (100%) rename src/tools/{mmap_extractor => mmaps_generator}/MapBuilder.h (100%) rename src/tools/{mmap_extractor => mmaps_generator}/PathCommon.h (100%) rename src/tools/{mmap_extractor => mmaps_generator}/PathGenerator.cpp (100%) rename src/tools/{mmap_extractor => mmaps_generator}/TerrainBuilder.cpp (100%) rename src/tools/{mmap_extractor => mmaps_generator}/TerrainBuilder.h (100%) rename src/tools/{mmap_extractor => mmaps_generator}/VMapExtensions.cpp (100%) diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt index f4c5f695b26..2d378966aff 100644 --- a/src/tools/CMakeLists.txt +++ b/src/tools/CMakeLists.txt @@ -11,4 +11,4 @@ add_subdirectory(map_extractor) add_subdirectory(vmap4_assembler) add_subdirectory(vmap4_extractor) -add_subdirectory(mmaps_extractor) +add_subdirectory(mmaps_generator) diff --git a/src/tools/mmap_extractor/CMakeLists.txt b/src/tools/mmaps_generator/CMakeLists.txt similarity index 90% rename from src/tools/mmap_extractor/CMakeLists.txt rename to src/tools/mmaps_generator/CMakeLists.txt index c7c1a954371..46bf9d00d43 100644 --- a/src/tools/mmap_extractor/CMakeLists.txt +++ b/src/tools/mmaps_generator/CMakeLists.txt @@ -47,9 +47,9 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/server/collision/Models ) -add_executable(movements_extractor ${sources}) +add_executable(mmaps_generator ${sources}) -target_link_libraries(movements_extractor +target_link_libraries(mmaps_generator ${MYSQL_LIBRARY} ${ACE_LIBRARY} ${BZIP2_LIBRARIES} @@ -62,7 +62,7 @@ target_link_libraries(movements_extractor ) if( UNIX ) - install(TARGETS movements_extractor DESTINATION bin) + install(TARGETS mmaps_generator DESTINATION bin) elseif( WIN32 ) - install(TARGETS movements_extractor DESTINATION "${CMAKE_INSTALL_PREFIX}") + install(TARGETS mmaps_generator DESTINATION "${CMAKE_INSTALL_PREFIX}") endif() diff --git a/src/tools/mmap_extractor/Info/readme.txt b/src/tools/mmaps_generator/Info/readme.txt similarity index 100% rename from src/tools/mmap_extractor/Info/readme.txt rename to src/tools/mmaps_generator/Info/readme.txt diff --git a/src/tools/mmap_extractor/IntermediateValues.cpp b/src/tools/mmaps_generator/IntermediateValues.cpp similarity index 100% rename from src/tools/mmap_extractor/IntermediateValues.cpp rename to src/tools/mmaps_generator/IntermediateValues.cpp diff --git a/src/tools/mmap_extractor/IntermediateValues.h b/src/tools/mmaps_generator/IntermediateValues.h similarity index 100% rename from src/tools/mmap_extractor/IntermediateValues.h rename to src/tools/mmaps_generator/IntermediateValues.h diff --git a/src/tools/mmap_extractor/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp similarity index 100% rename from src/tools/mmap_extractor/MapBuilder.cpp rename to src/tools/mmaps_generator/MapBuilder.cpp diff --git a/src/tools/mmap_extractor/MapBuilder.h b/src/tools/mmaps_generator/MapBuilder.h similarity index 100% rename from src/tools/mmap_extractor/MapBuilder.h rename to src/tools/mmaps_generator/MapBuilder.h diff --git a/src/tools/mmap_extractor/PathCommon.h b/src/tools/mmaps_generator/PathCommon.h similarity index 100% rename from src/tools/mmap_extractor/PathCommon.h rename to src/tools/mmaps_generator/PathCommon.h diff --git a/src/tools/mmap_extractor/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp similarity index 100% rename from src/tools/mmap_extractor/PathGenerator.cpp rename to src/tools/mmaps_generator/PathGenerator.cpp diff --git a/src/tools/mmap_extractor/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp similarity index 100% rename from src/tools/mmap_extractor/TerrainBuilder.cpp rename to src/tools/mmaps_generator/TerrainBuilder.cpp diff --git a/src/tools/mmap_extractor/TerrainBuilder.h b/src/tools/mmaps_generator/TerrainBuilder.h similarity index 100% rename from src/tools/mmap_extractor/TerrainBuilder.h rename to src/tools/mmaps_generator/TerrainBuilder.h diff --git a/src/tools/mmap_extractor/VMapExtensions.cpp b/src/tools/mmaps_generator/VMapExtensions.cpp similarity index 100% rename from src/tools/mmap_extractor/VMapExtensions.cpp rename to src/tools/mmaps_generator/VMapExtensions.cpp From 119a3ff5fc33eafdc8ab13c6dfaedda52b66ee77 Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 16:11:17 +0200 Subject: [PATCH 012/204] movementgenerator mmaps usage. Signed-off-by: Venugh --- .../FleeingMovementGenerator.cpp | 280 +++--------------- .../FleeingMovementGenerator.h | 12 - .../HomeMovementGenerator.cpp | 22 +- .../PointMovementGenerator.cpp | 19 +- .../PointMovementGenerator.h | 7 +- 5 files changed, 70 insertions(+), 270 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index 08e27abf050..1b32bb16b2c 100755 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -20,6 +20,7 @@ #include "CreatureAI.h" #include "MapManager.h" #include "FleeingMovementGenerator.h" +#include "PathFinderMovementGenerator.h" #include "ObjectAccessor.h" #include "MoveSplineInit.h" #include "MoveSpline.h" @@ -36,19 +37,26 @@ void FleeingMovementGenerator::_setTargetLocation(T &owner) if (owner.HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED)) return; - if (!_setMoveData(owner)) - return; - float x, y, z; if (!_getPoint(owner, x, y, z)) return; owner.AddUnitState(UNIT_STATE_FLEEING_MOVE); + PathFinderMovementGenerator path(&owner); + path.setPathLengthLimit(30.0f); + path.calculate(x, y, z); + if (path.getPathType() & PATHFIND_NOPATH) + { + i_nextCheckTime.Reset(urand(1000, 1500)); + return; + } + Movement::MoveSplineInit init(owner); - init.MoveTo(x,y,z); + init.MovebyPath(path.getPath()); init.SetWalk(false); - init.Launch(); + int32 traveltime = init.Launch(); + i_nextCheckTime.Reset(traveltime + urand(800, 1500)); } template @@ -57,221 +65,46 @@ bool FleeingMovementGenerator::_getPoint(T &owner, float &x, float &y, float if (!&owner) return false; - x = owner.GetPositionX(); - y = owner.GetPositionY(); - z = owner.GetPositionZ(); - - float temp_x, temp_y, angle; - const Map* _map = owner.GetBaseMap(); - // primitive path-finding - for (uint8 i = 0; i < 18; ++i) - { - if (i_only_forward && i > 2) - break; - - float distance = 5.0f; - - switch (i) - { - case 0: - angle = i_cur_angle; - break; - case 1: - angle = i_cur_angle; - distance /= 2; - break; - case 2: - angle = i_cur_angle; - distance /= 4; - break; - case 3: - angle = i_cur_angle + static_cast(M_PI/4); - break; - case 4: - angle = i_cur_angle - static_cast(M_PI/4); - break; - case 5: - angle = i_cur_angle + static_cast(M_PI/4); - distance /= 2; - break; - case 6: - angle = i_cur_angle - static_cast(M_PI/4); - distance /= 2; - break; - case 7: - angle = i_cur_angle + static_cast(M_PI/2); - break; - case 8: - angle = i_cur_angle - static_cast(M_PI/2); - break; - case 9: - angle = i_cur_angle + static_cast(M_PI/2); - distance /= 2; - break; - case 10: - angle = i_cur_angle - static_cast(M_PI/2); - distance /= 2; - break; - case 11: - angle = i_cur_angle + static_cast(M_PI/4); - distance /= 4; - break; - case 12: - angle = i_cur_angle - static_cast(M_PI/4); - distance /= 4; - break; - case 13: - angle = i_cur_angle + static_cast(M_PI/2); - distance /= 4; - break; - case 14: - angle = i_cur_angle - static_cast(M_PI/2); - distance /= 4; - break; - case 15: - angle = i_cur_angle + static_cast(3*M_PI/4); - distance /= 2; - break; - case 16: - angle = i_cur_angle - static_cast(3*M_PI/4); - distance /= 2; - break; - case 17: - angle = i_cur_angle + static_cast(M_PI); - distance /= 2; - break; - } - temp_x = x + distance * cos(angle); - temp_y = y + distance * sin(angle); - Trinity::NormalizeMapCoord(temp_x); - Trinity::NormalizeMapCoord(temp_y); - if (owner.IsWithinLOS(temp_x, temp_y, z)) - { - bool is_water_now = _map->IsInWater(x,y,z); - - if (is_water_now && _map->IsInWater(temp_x,temp_y,z)) - { - x = temp_x; - y = temp_y; - return true; - } - float new_z = _map->GetHeight(owner.GetPhaseMask(), temp_x, temp_y, z, true); - - if (new_z <= INVALID_HEIGHT) - continue; - - bool is_water_next = _map->IsInWater(temp_x, temp_y, new_z); - - if ((is_water_now && !is_water_next && !is_land_ok) || (!is_water_now && is_water_next && !is_water_ok)) - continue; - - if (!(new_z - z) || distance / fabs(new_z - z) > 1.0f) - { - float new_z_left = _map->GetHeight(owner.GetPhaseMask(), temp_x + 1.0f*cos(angle+static_cast(M_PI/2)),temp_y + 1.0f*sin(angle+static_cast(M_PI/2)),z,true); - float new_z_right = _map->GetHeight(owner.GetPhaseMask(), temp_x + 1.0f*cos(angle-static_cast(M_PI/2)),temp_y + 1.0f*sin(angle-static_cast(M_PI/2)),z,true); - if (fabs(new_z_left - new_z) < 1.2f && fabs(new_z_right - new_z) < 1.2f) - { - x = temp_x; - y = temp_y; - z = new_z; - return true; - } - } - } - } - i_to_distance_from_caster = 0.0f; - i_nextCheckTime.Reset(urand(500,1000)); - return false; -} - -template -bool FleeingMovementGenerator::_setMoveData(T &owner) -{ - float cur_dist_xyz = owner.GetDistance(i_caster_x, i_caster_y, i_caster_z); - - if (i_to_distance_from_caster > 0.0f) - { - if ((i_last_distance_from_caster > i_to_distance_from_caster && cur_dist_xyz < i_to_distance_from_caster) || - // if we reach lower distance - (i_last_distance_from_caster > i_to_distance_from_caster && cur_dist_xyz > i_last_distance_from_caster) || - // if we can't be close - (i_last_distance_from_caster < i_to_distance_from_caster && cur_dist_xyz > i_to_distance_from_caster) || - // if we reach bigger distance - (cur_dist_xyz > MAX_QUIET_DISTANCE) || // if we are too far - (i_last_distance_from_caster > MIN_QUIET_DISTANCE && cur_dist_xyz < MIN_QUIET_DISTANCE)) - // if we leave 'quiet zone' - { - // we are very far or too close, stopping - i_to_distance_from_caster = 0.0f; - i_nextCheckTime.Reset(urand(500,1000)); - return false; - } - else - { - // now we are running, continue - i_last_distance_from_caster = cur_dist_xyz; - return true; - } - } - - float cur_dist; - float angle_to_caster; - + float dist_from_caster, angle_to_caster; if (Unit* fright = ObjectAccessor::GetUnit(owner, i_frightGUID)) { - cur_dist = fright->GetDistance(&owner); - if (cur_dist < cur_dist_xyz) - { - i_caster_x = fright->GetPositionX(); - i_caster_y = fright->GetPositionY(); - i_caster_z = fright->GetPositionZ(); + dist_from_caster = fright->GetDistance(&owner); + if (dist_from_caster > 0.2f) angle_to_caster = fright->GetAngle(&owner); - } else - { - cur_dist = cur_dist_xyz; - angle_to_caster = owner.GetAngle(i_caster_x, i_caster_y) + static_cast(M_PI); - } + angle_to_caster = frand(0, 2*M_PI_F); } else { - cur_dist = cur_dist_xyz; - angle_to_caster = owner.GetAngle(i_caster_x, i_caster_y) + static_cast(M_PI); + dist_from_caster = 0.0f; + angle_to_caster = frand(0, 2*M_PI_F); } - // if we too close may use 'path-finding' else just stop - i_only_forward = cur_dist >= MIN_QUIET_DISTANCE/3; - - //get angle and 'distance from caster' to run - float angle; - - if (i_cur_angle == 0.0f && i_last_distance_from_caster == 0.0f) //just started, first time + float dist, angle; + if (dist_from_caster < MIN_QUIET_DISTANCE) { - angle = (float)rand_norm()*(1.0f - cur_dist/MIN_QUIET_DISTANCE) * static_cast(M_PI/3) + (float)rand_norm()*static_cast(M_PI*2/3); - i_to_distance_from_caster = MIN_QUIET_DISTANCE; - i_only_forward = true; + dist = frand(0.4f, 1.3f)*(MIN_QUIET_DISTANCE - dist_from_caster); + angle = angle_to_caster + frand(-M_PI_F/8, M_PI_F/8); } - else if (cur_dist < MIN_QUIET_DISTANCE) + else if(dist_from_caster > MAX_QUIET_DISTANCE) { - angle = static_cast(M_PI/6) + (float)rand_norm()*static_cast(M_PI*2/3); - i_to_distance_from_caster = cur_dist*2/3 + (float)rand_norm()*(MIN_QUIET_DISTANCE - cur_dist*2/3); + dist = frand(0.4f, 1.0f)*(MAX_QUIET_DISTANCE - MIN_QUIET_DISTANCE); + angle = -angle_to_caster + frand(-M_PI_F/4, M_PI_F/4); } - else if (cur_dist > MAX_QUIET_DISTANCE) + else // we are inside quiet range { - angle = (float)rand_norm()*static_cast(M_PI/3) + static_cast(M_PI*2/3); - i_to_distance_from_caster = MIN_QUIET_DISTANCE + 2.5f + (float)rand_norm()*(MAX_QUIET_DISTANCE - MIN_QUIET_DISTANCE - 2.5f); - } - else - { - angle = (float)rand_norm()*static_cast(M_PI); - i_to_distance_from_caster = MIN_QUIET_DISTANCE + 2.5f + (float)rand_norm()*(MAX_QUIET_DISTANCE - MIN_QUIET_DISTANCE - 2.5f); + dist = frand(0.6f, 1.2f)*(MAX_QUIET_DISTANCE - MIN_QUIET_DISTANCE); + angle = frand(0, 2*M_PI_F); } - int8 sign = (float)rand_norm() > 0.5f ? 1 : -1; - i_cur_angle = sign*angle + angle_to_caster; + float curr_x, curr_y, curr_z; + owner.GetPosition(curr_x, curr_y, curr_z); - // current distance - i_last_distance_from_caster = cur_dist; + x = curr_x + dist*cos(angle); + y = curr_y + dist*sin(angle); + z = curr_z; + + owner.UpdateAllowedPositionZ(x, y, z); return true; } @@ -285,44 +118,10 @@ void FleeingMovementGenerator::Initialize(T &owner) owner.SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); owner.AddUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE); - _Init(owner); - - if (Unit *fright = ObjectAccessor::GetUnit(owner, i_frightGUID)) - { - i_caster_x = fright->GetPositionX(); - i_caster_y = fright->GetPositionY(); - i_caster_z = fright->GetPositionZ(); - } - else - { - i_caster_x = owner.GetPositionX(); - i_caster_y = owner.GetPositionY(); - i_caster_z = owner.GetPositionZ(); - } - - i_only_forward = true; - i_cur_angle = 0.0f; - i_last_distance_from_caster = 0.0f; - i_to_distance_from_caster = 0.0f; - _setTargetLocation(owner); -} - -template<> -void FleeingMovementGenerator::_Init(Creature &owner) -{ - if (!&owner) + if (owner.GetTypeId() == TYPEID_UNIT) return; - //owner.SetTargetGuid(ObjectGuid()); - is_water_ok = owner.canSwim(); - is_land_ok = owner.canWalk(); -} - -template<> -void FleeingMovementGenerator::_Init(Player &) -{ - is_water_ok = true; - is_land_ok = true; + _setTargetLocation(owner); } template<> @@ -330,6 +129,7 @@ void FleeingMovementGenerator::Finalize(Player &owner) { owner.RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); owner.ClearUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE); + owner.StopMoving(); } template<> @@ -367,8 +167,6 @@ bool FleeingMovementGenerator::Update(T &owner, const uint32 &time_diff) template void FleeingMovementGenerator::Initialize(Player &); template void FleeingMovementGenerator::Initialize(Creature &); -template bool FleeingMovementGenerator::_setMoveData(Player &); -template bool FleeingMovementGenerator::_setMoveData(Creature &); template bool FleeingMovementGenerator::_getPoint(Player &, float &, float &, float &); template bool FleeingMovementGenerator::_getPoint(Creature &, float &, float &, float &); template void FleeingMovementGenerator::_setTargetLocation(Player &); diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h index aec93ad3375..cb3bd1cb69a 100755 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h @@ -37,19 +37,7 @@ class FleeingMovementGenerator : public MovementGeneratorMedium< T, FleeingMovem private: void _setTargetLocation(T &owner); bool _getPoint(T &owner, float &x, float &y, float &z); - bool _setMoveData(T &owner); - void _Init(T &); - bool is_water_ok :1; - bool is_land_ok :1; - bool i_only_forward:1; - - float i_caster_x; - float i_caster_y; - float i_caster_z; - float i_last_distance_from_caster; - float i_to_distance_from_caster; - float i_cur_angle; uint64 i_frightGUID; TimeTracker i_nextCheckTime; }; diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp index 311b69c06b7..eaf48150a13 100755 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp @@ -25,10 +25,22 @@ void HomeMovementGenerator::Initialize(Creature & owner) { + owner.SetWalk(false); owner.AddUnitState(UNIT_STATE_EVADE); _setTargetLocation(owner); } +void HomeMovementGenerator::Finalize(Creature& owner) +{ + if (arrived) + { + owner.ClearUnitState(UNIT_STAT_EVADE); + owner.SetWalk(true); + owner.LoadCreaturesAddon(true); + owner.AI()->JustReachedHome(); + } +} + void HomeMovementGenerator::Reset(Creature &) { } @@ -41,11 +53,11 @@ void HomeMovementGenerator::_setTargetLocation(Creature & owner) Movement::MoveSplineInit init(owner); float x, y, z, o; // at apply we can select more nice return points base at current movegen - //if (owner.GetMotionMaster()->empty() || !owner.GetMotionMaster()->top()->GetResetPosition(owner,x,y,z)) - //{ - owner.GetHomePosition(x, y, z, o); - init.SetFacing(o); - //} + if (owner.GetMotionMaster()->empty() || !owner.GetMotionMaster()->top()->GetResetPosition(owner,x,y,z)) + { + owner.GetHomePosition(x, y, z, o); + init.SetFacing(o); + } init.MoveTo(x,y,z); init.SetWalk(false); init.Launch(); diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp index a922c937b5f..f6f8b1fbafd 100755 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp @@ -34,7 +34,7 @@ void PointMovementGenerator::Initialize(T &unit) unit.AddUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); Movement::MoveSplineInit init(unit); - init.MoveTo(i_x, i_y, i_z); + init.MoveTo(i_x, i_y, i_z, m_generatePath); if (speed > 0.0f) init.SetVelocity(speed); init.Launch(); @@ -59,7 +59,8 @@ bool PointMovementGenerator::Update(T &unit, const uint32 & /*diff*/) template void PointMovementGenerator::Finalize(T &unit) { - unit.ClearUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); + if (unit.HasUnitState(UNIT_STAT_CHARGING)) + unit.ClearUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); if (unit.movespline->Finalized()) MovementInform(unit); @@ -120,11 +121,11 @@ void EffectMovementGenerator::Finalize(Unit &unit) if (((Creature&)unit).AI()) ((Creature&)unit).AI()->MovementInform(EFFECT_MOTION_TYPE, m_Id); // Need restore previous movement since we have no proper states system - //if (unit.isAlive() && !unit.HasUnitState(UNIT_STATE_CONFUSED|UNIT_STATE_FLEEING)) - //{ - // if (Unit * victim = unit.getVictim()) - // unit.GetMotionMaster()->MoveChase(victim); - // else - // unit.GetMotionMaster()->Initialize(); - //} + if (unit.isAlive() && !unit.HasUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_FLEEING)) + { + if (Unit* victim = unit.getVictim()) + unit.GetMotionMaster()->MoveChase(victim); + else + unit.GetMotionMaster()->Initialize(); + } } diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h index 13be9fee77b..404d3362bab 100755 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h @@ -26,8 +26,8 @@ template class PointMovementGenerator : public MovementGeneratorMedium< T, PointMovementGenerator > { public: - PointMovementGenerator(uint32 _id, float _x, float _y, float _z, float _speed = 0.0f) : id(_id), - i_x(_x), i_y(_y), i_z(_z), speed(_speed) {} + PointMovementGenerator(uint32 _id, float _x, float _y, float _z, bool _generatePath, float _speed = 0.0f) : id(_id), + i_x(_x), i_y(_y), i_z(_z), m_generatePath(_generatePath), speed(_speed) {} void Initialize(T &); void Finalize(T &); @@ -43,13 +43,14 @@ class PointMovementGenerator : public MovementGeneratorMedium< T, PointMovementG uint32 id; float i_x, i_y, i_z; float speed; + bool m_generatePath; }; class AssistanceMovementGenerator : public PointMovementGenerator { public: AssistanceMovementGenerator(float _x, float _y, float _z) : - PointMovementGenerator(0, _x, _y, _z) {} + PointMovementGenerator(0, _x, _y, _z, true) {} MovementGeneratorType GetMovementGeneratorType() { return ASSISTANCE_MOTION_TYPE; } void Finalize(Unit &); From c8f708f9ad0bcc91bf35fab67f4ce7d7eda39b0c Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 16:20:22 +0200 Subject: [PATCH 013/204] remove useless pathfinding code. --- .../TargetedMovementGenerator.cpp | 50 +-- .../TargetedMovementGenerator.h | 8 +- .../WaypointMovementGenerator.cpp | 328 ------------------ 3 files changed, 31 insertions(+), 355 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index eb61db8b4ba..5c0e24be440 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -26,8 +26,6 @@ #include "MoveSpline.h" #include "Player.h" -#include - template void TargetedMovementGeneratorMedium::_setTargetLocation(T &owner) { @@ -65,30 +63,27 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T &owner) i_target->GetClosePoint(x, y, z, owner.GetObjectSize(), i_offset, i_angle); } - /* - We MUST not check the distance difference and avoid setting the new location for smaller distances. - By that we risk having far too many GetContactPoint() calls freezing the whole system. - In TargetedMovementGenerator::Update() we check the distance to the target and at - some range we calculate a new position. The calculation takes some processor cycles due to vmaps. - If the distance to the target it too large to ignore, - but the distance to the new contact point is short enough to be ignored, - we will calculate a new contact point each update loop, but will never move to it. - The system will freeze. - ralf - - //We don't update Mob Movement, if the difference between New destination and last destination is < BothObjectSize - float bothObjectSize = i_target->GetObjectBoundingRadius() + owner.GetObjectBoundingRadius() + CONTACT_DISTANCE; - if ( i_destinationHolder.HasDestination() && i_destinationHolder.GetDestinationDiff(x,y,z) < bothObjectSize ) - return; - */ + if (!i_path) + i_path = new PathFinderMovementGenerator(&owner); + // allow pets following their master to cheat while generating paths + bool forceDest = (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->isPet() + && owner.HasUnitState(UNIT_STAT_FOLLOW)); + i_path->calculate(x, y, z, forceDest); + if (i_path->getPathType() & PATHFIND_NOPATH) + return; D::_addUnitStateMove(owner); i_targetReached = false; i_recalculateTravel = false; + owner.AddUnitState(UNIT_STATE_CHASE); Movement::MoveSplineInit init(owner); - init.MoveTo(x,y,z); + if (!i_target->IsInWater()) + init.MovebyPath(i_path->getPath()); + else + init.MoveTo(i_target->GetPositionX(), i_target->GetPositionY(), i_target->GetPositionZ(), false, false); + init.SetWalk(((D*)this)->EnableWalking()); init.Launch(); } @@ -125,7 +120,7 @@ bool TargetedMovementGeneratorMedium::Update(T &owner, const uint32 & time_ if (!i_target.isValid() || !i_target->IsInWorld()) return false; - if (!owner.isAlive()) + if (!&owner || !owner.isAlive()) return true; if (owner.HasUnitState(UNIT_STATE_NOT_MOVE)) @@ -152,11 +147,18 @@ bool TargetedMovementGeneratorMedium::Update(T &owner, const uint32 & time_ i_recheckDistance.Update(time_diff); if (i_recheckDistance.Passed()) { - i_recheckDistance.Reset(50); + i_recheckDistance.Reset(100); //More distance let have better performance, less distance let have more sensitive reaction at target move. - float allowed_dist = i_target->GetObjectSize() + owner.GetObjectSize() + MELEE_RANGE - 0.5f; - float dist = (owner.movespline->FinalDestination() - G3D::Vector3(i_target->GetPositionX(),i_target->GetPositionY(),i_target->GetPositionZ())).squaredLength(); - if (dist >= allowed_dist * allowed_dist) + float allowed_dist = owner.GetCombatReach() + sWorld->getRate(RATE_TARGET_POS_RECALCULATION_RANGE); + G3D::Vector3 dest = owner.movespline->FinalDestination(); + + bool targetMoved = false; + if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->canFly()) + targetMoved = !i_target->IsWithinDist3d(dest.x, dest.y, dest.z, allowed_dist); + else + targetMoved = !i_target->IsWithinDist2d(dest.x, dest.y, allowed_dist); + + if (targetMoved) _setTargetLocation(owner); } diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h index 29fd73624e1..28893c44cfb 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h @@ -23,6 +23,7 @@ #include "FollowerReference.h" #include "Timer.h" #include "Unit.h" +#include "PathFinderMovementGenerator.h" class TargetedMovementGeneratorBase { @@ -38,12 +39,12 @@ class TargetedMovementGeneratorMedium : public MovementGeneratorMedium< T, D >, { protected: TargetedMovementGeneratorMedium(Unit &target, float offset, float angle) : - TargetedMovementGeneratorBase(target), i_recheckDistance(0), + TargetedMovementGeneratorBase(target), i_recheckDistance(0),, i_path(NULL), i_offset(offset), i_angle(angle), i_recalculateTravel(false), i_targetReached(false) { } - ~TargetedMovementGeneratorMedium() {} + ~TargetedMovementGeneratorMedium() { delete i_path; } public: bool Update(T &, const uint32 &); @@ -51,7 +52,7 @@ class TargetedMovementGeneratorMedium : public MovementGeneratorMedium< T, D >, void unitSpeedChanged() { i_recalculateTravel=true; } void UpdateFinalDistance(float fDistance); - + bool IsReachable() const { return (i_path) ? (i_path->getPathType() & PATHFIND_NORMAL) : true; } protected: void _setTargetLocation(T &); @@ -60,6 +61,7 @@ class TargetedMovementGeneratorMedium : public MovementGeneratorMedium< T, D >, float i_angle; bool i_recalculateTravel : 1; bool i_targetReached : 1; + PathFinderMovementGenerator* i_path; }; template diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index 81fe1606ede..6d060668e4c 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -319,331 +319,3 @@ void FlightPathMovementGenerator::PreloadEndGrid() else sLog->outDetail("Unable to determine map to preload flightmaster grid"); } - - -// -// Unique1's ASTAR Pathfinding Code... For future use & reference... -// - -#ifdef __PATHFINDING__ - -int GetFCost(int to, int num, int parentNum, float *gcost); // Below... - -int ShortenASTARRoute(short int *pathlist, int number) -{ // Wrote this to make the routes a little smarter (shorter)... No point looping back to the same places... Unique1 - short int temppathlist[MAX_PATHLIST_NODES]; - int count = 0; - // int count2 = 0; - int temp, temp2; - int link; - int upto = 0; - - for (temp = number; temp >= 0; temp--) - { - qboolean shortened = qfalse; - - for (temp2 = 0; temp2 < temp; temp2++) - { - for (link = 0; link < nodes[pathlist[temp]].enodenum; link++) - { - if (nodes[pathlist[temp]].links[link].flags & PATH_BLOCKED) - continue; - - //if ((bot->client->ps.eFlags & EF_TANK) && nodes[bot->current_node].links[link].flags & PATH_NOTANKS) //if this path is blocked, skip it - // continue; - - //if (nodes[nodes[pathlist[temp]].links[link].targetNode].origin[2] > nodes[pathlist[temp]].origin[2] + 32) - // continue; - - if (nodes[pathlist[temp]].links[link].targetNode == pathlist[temp2]) - { // Found a shorter route... - //if (OrgVisible(nodes[pathlist[temp2]].origin, nodes[pathlist[temp]].origin, -1)) - { - temppathlist[count] = pathlist[temp2]; - temp = temp2; - ++count; - shortened = qtrue; - } - } - } - } - - if (!shortened) - { - temppathlist[count] = pathlist[temp]; - ++count; - } - } - - upto = count; - - for (temp = 0; temp < count; temp++) - { - pathlist[temp] = temppathlist[upto]; - --upto; - } - - G_Printf("ShortenASTARRoute: Path size reduced from %i to %i nodes...n", number, count); - return count; -} - -/* -=========================================================================== -CreatePathAStar -This function uses the A* pathfinding algorithm to determine the -shortest path between any two nodes. -It's fairly complex, so I'm not really going to explain it much. -Look up A* and binary heaps for more info. -pathlist stores the ideal path between the nodes, in reverse order, -and the return value is the number of nodes in that path -=========================================================================== -*/ -int CreatePathAStar(gentity_t *bot, int from, int to, short int *pathlist) -{ - //all the data we have to hold...since we can't do dynamic allocation, has to be MAX_NODES - //we can probably lower this later - eg, the open list should never have more than at most a few dozen items on it - short int openlist[MAX_NODES+1]; //add 1 because it's a binary heap, and they don't use 0 - 1 is the first used index - float gcost[MAX_NODES]; - int fcost[MAX_NODES]; - char list[MAX_NODES]; //0 is neither, 1 is open, 2 is closed - char because it's the smallest data type - short int parent[MAX_NODES]; - - short int numOpen = 0; - short int atNode, temp, newnode=-1; - qboolean found = qfalse; - int count = -1; - float gc; - int i, u, v, m; - vec3_t vec; - - //clear out all the arrays - memset(openlist, 0, sizeof(short int)*(MAX_NODES+1)); - memset(fcost, 0, sizeof(int)*MAX_NODES); - memset(list, 0, sizeof(char)*MAX_NODES); - memset(parent, 0, sizeof(short int)*MAX_NODES); - memset(gcost, -1, sizeof(float)*MAX_NODES); - - //make sure we have valid data before calculating everything - if ((from == NODE_INVALID) || (to == NODE_INVALID) || (from >= MAX_NODES) || (to >= MAX_NODES) || (from == to)) - return -1; - - openlist[1] = from; //add the starting node to the open list - ++numOpen; - gcost[from] = 0; //its f and g costs are obviously 0 - fcost[from] = 0; - - while (1) - { - if (numOpen != 0) //if there are still items in the open list - { - //pop the top item off of the list - atNode = openlist[1]; - list[atNode] = 2; //put the node on the closed list so we don't check it again - --numOpen; - - openlist[1] = openlist[numOpen+1]; //move the last item in the list to the top position - v = 1; - - //this while loop reorders the list so that the new lowest fcost is at the top again - while (1) - { - u = v; - if ((2*u+1) < numOpen) //if both children exist - { - if (fcost[openlist[u]] >= fcost[openlist[2*u]]) - v = 2*u; - if (fcost[openlist[v]] >= fcost[openlist[2*u+1]]) - v = 2*u+1; - } - else - { - if ((2*u) < numOpen) //if only one child exists - { - if (fcost[openlist[u]] >= fcost[openlist[2*u]]) - v = 2*u; - } - } - - if (u != v) //if they're out of order, swap this item with its parent - { - temp = openlist[u]; - openlist[u] = openlist[v]; - openlist[v] = temp; - } - else - break; - } - - for (i = 0; i < nodes[atNode].enodenum; ++i) //loop through all the links for this node - { - newnode = nodes[atNode].links[i].targetNode; - - //if this path is blocked, skip it - if (nodes[atNode].links[i].flags & PATH_BLOCKED) - continue; - //if this path is blocked, skip it - if (bot->client && (bot->client->ps.eFlags & EF_TANK) && nodes[atNode].links[i].flags & PATH_NOTANKS) - continue; - //skip any unreachable nodes - if (bot->client && (nodes[newnode].type & NODE_ALLY_UNREACHABLE) && (bot->client->sess.sessionTeam == TEAM_ALLIES)) - continue; - if (bot->client && (nodes[newnode].type & NODE_AXIS_UNREACHABLE) && (bot->client->sess.sessionTeam == TEAM_AXIS)) - continue; - - if (list[newnode] == 2) //if this node is on the closed list, skip it - continue; - - if (list[newnode] != 1) //if this node is not already on the open list - { - openlist[++numOpen] = newnode; //add the new node to the open list - list[newnode] = 1; - parent[newnode] = atNode; //record the node's parent - - if (newnode == to) //if we've found the goal, don't keep computing paths! - break; //this will break the 'for' and go all the way to 'if (list[to] == 1)' - - //store it's f cost value - fcost[newnode] = GetFCost(to, newnode, parent[newnode], gcost); - - //this loop re-orders the heap so that the lowest fcost is at the top - m = numOpen; - while (m != 1) //while this item isn't at the top of the heap already - { - //if it has a lower fcost than its parent - if (fcost[openlist[m]] <= fcost[openlist[m/2]]) - { - temp = openlist[m/2]; - openlist[m/2] = openlist[m]; - openlist[m] = temp; //swap them - m /= 2; - } - else - break; - } - } - else //if this node is already on the open list - { - gc = gcost[atNode]; - VectorSubtract(nodes[newnode].origin, nodes[atNode].origin, vec); - gc += VectorLength(vec); //calculate what the gcost would be if we reached this node along the current path - - if (gc < gcost[newnode]) //if the new gcost is less (ie, this path is shorter than what we had before) - { - parent[newnode] = atNode; //set the new parent for this node - gcost[newnode] = gc; //and the new g cost - - for (i = 1; i < numOpen; ++i) //loop through all the items on the open list - { - if (openlist[i] == newnode) //find this node in the list - { - //calculate the new fcost and store it - fcost[newnode] = GetFCost(to, newnode, parent[newnode], gcost); - - //reorder the list again, with the lowest fcost item on top - m = i; - while (m != 1) - { - //if the item has a lower fcost than it's parent - if (fcost[openlist[m]] < fcost[openlist[m/2]]) - { - temp = openlist[m/2]; - openlist[m/2] = openlist[m]; - openlist[m] = temp; //swap them - m /= 2; - } - else - break; - } - break; //exit the 'for' loop because we already changed this node - } //if - } //for - } //if (gc < gcost[newnode]) - } //if (list[newnode] != 1) --> else - } //for (loop through links) - } //if (numOpen != 0) - else - { - found = qfalse; //there is no path between these nodes - break; - } - - if (list[to] == 1) //if the destination node is on the open list, we're done - { - found = qtrue; - break; - } - } //while (1) - - if (found == qtrue) //if we found a path - { - //G_Printf("%s - path found!n", bot->client->pers.netname); - count = 0; - - temp = to; //start at the end point - while (temp != from) //travel along the path (backwards) until we reach the starting point - { - pathlist[count++] = temp; //add the node to the pathlist and increment the count - temp = parent[temp]; //move to the parent of this node to continue the path - } - - pathlist[count++] = from; //add the beginning node to the end of the pathlist - - #ifdef __BOT_SHORTEN_ROUTING__ - count = ShortenASTARRoute(pathlist, count); // This isn't working... Dunno why.. Unique1 - #endif //__BOT_SHORTEN_ROUTING__ - } - else - { - //G_Printf("^1*** ^4BOT DEBUG^5: (CreatePathAStar) There is no route between node ^7%i^5 and node ^7%i^5.n", from, to); - count = CreateDumbRoute(from, to, pathlist); - - if (count > 0) - { - #ifdef __BOT_SHORTEN_ROUTING__ - count = ShortenASTARRoute(pathlist, count); // This isn't working... Dunno why.. Unique1 - #endif //__BOT_SHORTEN_ROUTING__ - return count; - } - } - - return count; //return the number of nodes in the path, -1 if not found -} - -/* -=========================================================================== -GetFCost -Utility function used by A* pathfinding to calculate the -cost to move between nodes towards a goal. Using the A* -algorithm F = G + H, G here is the distance along the node -paths the bot must travel, and H is the straight-line distance -to the goal node. -Returned as an int because more precision is unnecessary and it -will slightly speed up heap access -=========================================================================== -*/ -int GetFCost(int to, int num, int parentNum, float *gcost) -{ - float gc = 0; - float hc = 0; - vec3_t v; - - if (gcost[num] == -1) - { - if (parentNum != -1) - { - gc = gcost[parentNum]; - VectorSubtract(nodes[num].origin, nodes[parentNum].origin, v); - gc += VectorLength(v); - } - gcost[num] = gc; - } - else - gc = gcost[num]; - - VectorSubtract(nodes[to].origin, nodes[num].origin, v); - hc = VectorLength(v); - - return (int)(gc + hc); -} -#endif //__PATHFINDING__ - From f478e6be2b5dd67cc1d26948d324045d75d6fdb1 Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 16:38:05 +0200 Subject: [PATCH 014/204] spline changes for mmaps. --- .../game/Movement/Spline/MoveSplineInit.cpp | 6 ++-- .../game/Movement/Spline/MoveSplineInit.h | 28 +++++++++++++------ src/server/game/World/World.cpp | 1 + 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index e586cb4f4f9..924db9ad726 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -54,7 +54,7 @@ namespace Movement return MOVE_RUN; } - void MoveSplineInit::Launch() + int32 MoveSplineInit::Launch() { MoveSpline& move_spline = *unit.movespline; @@ -86,7 +86,7 @@ namespace Movement args.velocity = unit.GetSpeed(SelectSpeedType(moveFlags)); if (!args.Validate()) - return; + return 0; if (moveFlags & MOVEMENTFLAG_ROOT) moveFlags &= ~MOVEMENTFLAG_MASK_MOVING; @@ -98,6 +98,8 @@ namespace Movement data.append(unit.GetPackGUID()); PacketBuilder::WriteMonsterMove(move_spline, data); unit.SendMessageToSet(&data,true); + + return move_spline.Duration(); } MoveSplineInit::MoveSplineInit(Unit& m) : unit(m) diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h index 7ef6cd7a120..24563f28c4f 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.h +++ b/src/server/game/Movement/Spline/MoveSplineInit.h @@ -20,6 +20,7 @@ #define TRINITYSERVER_MOVESPLINEINIT_H #include "MoveSplineInitArgs.h" +#include "PathFinderMovementGenerator.h" class Unit; @@ -43,7 +44,7 @@ namespace Movement /* Final pass of initialization that launches spline movement. */ - void Launch(); + int32 Launch(); /* Adds movement by parabolic trajectory * @param amplitude - the maximum height of parabola, value could be negative and positive @@ -72,8 +73,8 @@ namespace Movement /* Initializes simple A to B mition, A is current unit's position, B is destination */ - void MoveTo(const Vector3& destination); - void MoveTo(float x, float y, float z); + void MoveTo(const Vector3& destination, bool generatePath = false, bool forceDestination = false); + void MoveTo(float x, float y, float z, bool generatePath = false, bool forceDestination = false); /* Sets Id of fisrt point of the path. When N-th path point will be done ILisener will notify that pointId + N done * Needed for waypoint movement where path splitten into parts @@ -133,17 +134,26 @@ namespace Movement args.path.assign(controls.begin(),controls.end()); } - inline void MoveSplineInit::MoveTo(float x, float y, float z) + inline void MoveSplineInit::MoveTo(float x, float y, float z, bool generatePath, bool forceDestination) { Vector3 v(x,y,z); - MoveTo(v); + MoveTo(v, generatePath, forceDestination); } - inline void MoveSplineInit::MoveTo(const Vector3& dest) + inline void MoveSplineInit::MoveTo(const Vector3& dest, bool generatePath, bool forceDestination) { - args.path_Idx_offset = 0; - args.path.resize(2); - args.path[1] = dest; + if (generatePath) + { + PathFinderMovementGenerator path(&unit); + path.calculate(dest.x, dest.y, dest.z, forceDestination); + MovebyPath(path.getPath()); + } + else + { + args.path_Idx_offset = 0; + args.path.resize(2); + args.path[1] = dest; + } } inline void MoveSplineInit::SetParabolic(float amplitude, float time_shift) diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 3870a108d57..90d4ce3604a 100755 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -136,6 +136,7 @@ World::~World() delete command; VMAP::VMapFactory::clear(); + MMAP::MMapFactory::clear(); //TODO free addSessQueue } From 8452fd0dbd293a807da563f3203d2cad4985932a Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 17:05:32 +0200 Subject: [PATCH 015/204] fixed errors. --- src/server/game/Entities/Unit/Unit.cpp | 2 +- src/server/game/Miscellaneous/SharedDefines.h | 30 +++++++++++ src/server/game/Movement/MotionMaster.cpp | 4 +- .../ConfusedMovementGenerator.cpp | 52 ++----------------- .../ConfusedMovementGenerator.h | 2 +- .../FleeingMovementGenerator.cpp | 10 ++-- .../HomeMovementGenerator.cpp | 13 +---- .../PathFinderMovementGenerator.cpp | 8 +-- .../PointMovementGenerator.cpp | 4 +- .../TargetedMovementGenerator.cpp | 4 +- .../TargetedMovementGenerator.h | 2 +- src/server/game/Movement/Spline/MoveSpline.h | 3 +- 12 files changed, 53 insertions(+), 81 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 52269199146..69c2961691a 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -366,7 +366,7 @@ bool Unit::haveOffhandWeapon() const return m_canDualWield; } -void Unit::MonsterMoveWithSpeed(float x, float y, float z, float speed) +void Unit::MonsterMoveWithSpeed(float x, float y, float z, float speed, bool generatePath, bool forceDestination) { Movement::MoveSplineInit init(*this); init.MoveTo(x,y,z); diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 1ddf80484e2..16821834669 100755 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -19,6 +19,7 @@ #ifndef TRINITY_SHAREDDEFINES_H #define TRINITY_SHAREDDEFINES_H +#include "DetourNavMesh.h" #include "Define.h" #include @@ -3524,4 +3525,33 @@ enum CalendarError // Calendar - end +#define MMAP_MAGIC 0x4d4d4150 // 'MMAP' +#define MMAP_VERSION 3 + +struct MmapTileHeader +{ + uint32 mmapMagic; + uint32 dtVersion; + uint32 mmapVersion; + uint32 size; + bool usesLiquids : 1; + + MmapTileHeader() : mmapMagic(MMAP_MAGIC), dtVersion(DT_NAVMESH_VERSION), + mmapVersion(MMAP_VERSION), size(0), usesLiquids(true) {} +}; + +enum NavTerrain +{ + NAV_EMPTY = 0x00, + NAV_GROUND = 0x01, + NAV_MAGMA = 0x02, + NAV_SLIME = 0x04, + NAV_WATER = 0x08, + NAV_UNUSED1 = 0x10, + NAV_UNUSED2 = 0x20, + NAV_UNUSED3 = 0x40, + NAV_UNUSED4 = 0x80 + // we only have 8 bits +}; + #endif diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index b0ac0b710c1..fca0260eb87 100755 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -285,13 +285,13 @@ void MotionMaster::MovePoint(uint32 id, float x, float y, float z) if (_owner->GetTypeId() == TYPEID_PLAYER) { sLog->outStaticDebug("Player (GUID: %u) targeted point (Id: %u X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), id, x, y, z); - Mutate(new PointMovementGenerator(id, x, y, z), MOTION_SLOT_ACTIVE); + Mutate(new PointMovementGenerator(id, x, y, z, true), MOTION_SLOT_ACTIVE); } else { sLog->outStaticDebug("Creature (Entry: %u GUID: %u) targeted point (ID: %u X: %f Y: %f Z: %f)", _owner->GetEntry(), _owner->GetGUIDLow(), id, x, y, z); - Mutate(new PointMovementGenerator(id, x, y, z), MOTION_SLOT_ACTIVE); + Mutate(new PointMovementGenerator(id, x, y, z, true), MOTION_SLOT_ACTIVE); } } diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index caf81a0a141..bad45f65178 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -33,51 +33,6 @@ template void ConfusedMovementGenerator::Initialize(T &unit) { - float const wander_distance = 4; - float x = unit.GetPositionX(); - float y = unit.GetPositionY(); - float z = unit.GetPositionZ(); - - Map const* map = unit.GetBaseMap(); - - i_nextMove = 1; - - bool is_water_ok, is_land_ok; - for (uint8 idx = 0; idx < MAX_CONF_WAYPOINTS + 1; ++idx) - { - float wanderX = x + (wander_distance * (float)rand_norm() - wander_distance/2); - float wanderY = y + (wander_distance * (float)rand_norm() - wander_distance/2); - - // prevent invalid coordinates generation - Trinity::NormalizeMapCoord(wanderX); - Trinity::NormalizeMapCoord(wanderY); - - if (unit.IsWithinLOS(wanderX, wanderY, z)) - { - bool is_water = map->IsInWater(wanderX, wanderY, z); - - if ((is_water && !is_water_ok) || (!is_water && !is_land_ok)) - { - //! Cannot use coordinates outside our InhabitType. Use the current or previous position. - wanderX = idx > 0 ? i_waypoints[idx-1][0] : x; - wanderY = idx > 0 ? i_waypoints[idx-1][1] : y; - } - } - else - { - //! Trying to access path outside line of sight. Skip this by using the current or previous position. - wanderX = idx > 0 ? i_waypoints[idx-1][0] : x; - wanderY = idx > 0 ? i_waypoints[idx-1][1] : y; - } - - unit.UpdateAllowedPositionZ(wanderX, wanderY, z); - - //! Positions are fine - apply them to this waypoint - i_waypoints[idx][0] = wanderX; - i_waypoints[idx][1] = wanderY; - i_waypoints[idx][2] = z; - } - unit.GetPosition(i_x, i_y, i_z); unit.StopMoving(); unit.SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); @@ -115,10 +70,9 @@ bool ConfusedMovementGenerator::Update(T &unit, const uint32 &diff) // start moving unit.AddUnitState(UNIT_STATE_CONFUSED_MOVE); - ASSERT(i_nextMove <= MAX_CONF_WAYPOINTS); - float x = i_waypoints[i_nextMove][0]; - float y = i_waypoints[i_nextMove][1]; - float z = i_waypoints[i_nextMove][2]; + float x = i_x + 10.0f*((float)rand_norm() - 0.5f); + float y = i_y + 10.0f*((float)rand_norm() - 0.5f); + float z = i_z; unit.UpdateAllowedPositionZ(x, y, z); diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h index c390892d0d0..72ffd7b734b 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h @@ -36,7 +36,7 @@ class ConfusedMovementGenerator : public MovementGeneratorMedium< T, ConfusedMov MovementGeneratorType GetMovementGeneratorType() { return CONFUSED_MOTION_TYPE; } private: TimeTracker i_nextMoveTime; - float i_waypoints[24+1][3]; + float i_x, i_y, i_z; }; #endif diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index 1b32bb16b2c..9d99e0ef000 100755 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -72,29 +72,29 @@ bool FleeingMovementGenerator::_getPoint(T &owner, float &x, float &y, float if (dist_from_caster > 0.2f) angle_to_caster = fright->GetAngle(&owner); else - angle_to_caster = frand(0, 2*M_PI_F); + angle_to_caster = frand(0, 2 * static_cast(M_PI)); } else { dist_from_caster = 0.0f; - angle_to_caster = frand(0, 2*M_PI_F); + angle_to_caster = frand(0, 2 * static_cast(M_PI)); } float dist, angle; if (dist_from_caster < MIN_QUIET_DISTANCE) { dist = frand(0.4f, 1.3f)*(MIN_QUIET_DISTANCE - dist_from_caster); - angle = angle_to_caster + frand(-M_PI_F/8, M_PI_F/8); + angle = angle_to_caster + frand(-static_cast(M_PI)/8, static_cast(M_PI)/8); } else if(dist_from_caster > MAX_QUIET_DISTANCE) { dist = frand(0.4f, 1.0f)*(MAX_QUIET_DISTANCE - MIN_QUIET_DISTANCE); - angle = -angle_to_caster + frand(-M_PI_F/4, M_PI_F/4); + angle = -angle_to_caster + frand(-static_cast(M_PI)/4, static_cast(M_PI)/4); } else // we are inside quiet range { dist = frand(0.6f, 1.2f)*(MAX_QUIET_DISTANCE - MIN_QUIET_DISTANCE); - angle = frand(0, 2*M_PI_F); + angle = frand(0, 2*static_cast(M_PI)); } float curr_x, curr_y, curr_z; diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp index eaf48150a13..216721360c6 100755 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp @@ -34,7 +34,7 @@ void HomeMovementGenerator::Finalize(Creature& owner) { if (arrived) { - owner.ClearUnitState(UNIT_STAT_EVADE); + owner.ClearUnitState(UNIT_STATE_EVADE); owner.SetWalk(true); owner.LoadCreaturesAddon(true); owner.AI()->JustReachedHome(); @@ -71,14 +71,3 @@ bool HomeMovementGenerator::Update(Creature &owner, const uint32 /*tim arrived = owner.movespline->Finalized(); return !arrived; } - -void HomeMovementGenerator::Finalize(Creature& owner) -{ - if (arrived) - { - owner.ClearUnitState(UNIT_STATE_EVADE); - owner.SetWalk(true); - owner.LoadCreaturesAddon(true); - owner.AI()->JustReachedHome(); - } -} diff --git a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp index 686c57cb634..4894b5eb841 100644 --- a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp @@ -71,7 +71,7 @@ bool PathFinderMovementGenerator::calculate(float destX, float destY, float dest // make sure navMesh works - we can run on map w/o mmap // check if the start and end point have a .mmtile loaded (can we pass via not loaded tile on the way?) - if (!m_navMesh || !m_navMeshQuery || m_sourceUnit->HasUnitState(UNIT_STAT_IGNORE_PATHFINDING) || + if (!m_navMesh || !m_navMeshQuery || m_sourceUnit->HasUnitState(UNIT_STATE_IGNORE_PATHFINDING) || !HaveTile(start) || !HaveTile(dest)) { BuildShortcut(); @@ -186,7 +186,7 @@ void PathFinderMovementGenerator::BuildPolyPath(const Vector3 &startPos, const V { sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: (startPoly == 0 || endPoly == 0)\n"); BuildShortcut(); - m_type = (m_sourceUnit->GetTypeId() == TYPEID_UNIT && ((Creature*)m_sourceUnit)->canFly()) + m_type = (m_sourceUnit->GetTypeId() == TYPEID_UNIT && ((Creature*)m_sourceUnit)->CanFly()) ? PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH) : PATHFIND_NOPATH; return; } @@ -212,7 +212,7 @@ void PathFinderMovementGenerator::BuildPolyPath(const Vector3 &startPos, const V else { sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: flying case\n"); - if (owner->canFly()) + if (owner->CanFly()) buildShotrcut = true; } } @@ -532,7 +532,7 @@ NavTerrain PathFinderMovementGenerator::getNavTerrain(float x, float y, float z) LiquidData data; m_sourceUnit->GetBaseMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &data); - switch (data.type) + switch (data.type_flags) { case MAP_LIQUID_TYPE_WATER: case MAP_LIQUID_TYPE_OCEAN: diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp index f6f8b1fbafd..7a8ad4584b0 100755 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp @@ -59,8 +59,8 @@ bool PointMovementGenerator::Update(T &unit, const uint32 & /*diff*/) template void PointMovementGenerator::Finalize(T &unit) { - if (unit.HasUnitState(UNIT_STAT_CHARGING)) - unit.ClearUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); + if (unit.HasUnitState(UNIT_STATE_CHARGING)) + unit.ClearUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE); if (unit.movespline->Finalized()) MovementInform(unit); diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 5c0e24be440..63e3ebfd378 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -68,7 +68,7 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T &owner) // allow pets following their master to cheat while generating paths bool forceDest = (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->isPet() - && owner.HasUnitState(UNIT_STAT_FOLLOW)); + && owner.HasUnitState(UNIT_STATE_FOLLOW)); i_path->calculate(x, y, z, forceDest); if (i_path->getPathType() & PATHFIND_NOPATH) return; @@ -153,7 +153,7 @@ bool TargetedMovementGeneratorMedium::Update(T &owner, const uint32 & time_ G3D::Vector3 dest = owner.movespline->FinalDestination(); bool targetMoved = false; - if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->canFly()) + if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->CanFly()) targetMoved = !i_target->IsWithinDist3d(dest.x, dest.y, dest.z, allowed_dist); else targetMoved = !i_target->IsWithinDist2d(dest.x, dest.y, allowed_dist); diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h index 28893c44cfb..d855dfa1875 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h @@ -39,7 +39,7 @@ class TargetedMovementGeneratorMedium : public MovementGeneratorMedium< T, D >, { protected: TargetedMovementGeneratorMedium(Unit &target, float offset, float angle) : - TargetedMovementGeneratorBase(target), i_recheckDistance(0),, i_path(NULL), + TargetedMovementGeneratorBase(target), i_recheckDistance(0), i_path(NULL), i_offset(offset), i_angle(angle), i_recalculateTravel(false), i_targetReached(false) { diff --git a/src/server/game/Movement/Spline/MoveSpline.h b/src/server/game/Movement/Spline/MoveSpline.h index d4b19b21634..4ec8d2c78ac 100644 --- a/src/server/game/Movement/Spline/MoveSpline.h +++ b/src/server/game/Movement/Spline/MoveSpline.h @@ -77,7 +77,6 @@ namespace Movement UpdateResult _updateState(int32& ms_time_diff); int32 next_timestamp() const { return spline.length(point_Idx+1);} int32 segment_time_elapsed() const { return next_timestamp()-time_passed;} - int32 Duration() const { return spline.length();} int32 timeElapsed() const { return Duration() - time_passed;} int32 timePassed() const { return time_passed;} @@ -88,7 +87,7 @@ namespace Movement void _Interrupt() { splineflags.done = true;} public: - + int32 Duration() const { return spline.length();} void Initialize(const MoveSplineInitArgs&); bool Initialized() const { return !spline.empty();} From 9ac2255fbcee4049ed4067fc18c8cabccef1047e Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 17:10:54 +0200 Subject: [PATCH 016/204] fix all build errors, only 1 linking error. --- src/server/shared/Memory.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/server/shared/Memory.h diff --git a/src/server/shared/Memory.h b/src/server/shared/Memory.h new file mode 100644 index 00000000000..ac697f7a1af --- /dev/null +++ b/src/server/shared/Memory.h @@ -0,0 +1,17 @@ + + +#ifndef _MEMORY_H +#define _MEMORY_H + +// memory management +inline void* dtCustomAlloc(int size, dtAllocHint /*hint*/) +{ + return (void*)new unsigned char[size]; +} + +inline void dtCustomFree(void* ptr) +{ + delete [] (unsigned char*)ptr; +} + +#endif \ No newline at end of file From d06c09271295f8199fa45ae9b7d8e2eb600bbe26 Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 17:17:31 +0200 Subject: [PATCH 017/204] fix linker error. --- src/tools/mmaps_generator/MapBuilder.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 3ca158f0127..2987e6596dd 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -28,6 +28,11 @@ // These make the linker happy. LoginDatabaseWorkerPool LoginDatabase; +uint32 GetLiquidFlags(uint32 liquidType) +{ + return 0; +} + #include "DisableMgr.h" namespace DisableMgr { From b970d31e078d57def97a22e71499f779d6d080f6 Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 17:34:48 +0200 Subject: [PATCH 018/204] add extraction tools. --- contrib/extract/extract_data.sh | 8 ++++---- contrib/extract/libmysql.dll | Bin 0 -> 2316288 bytes contrib/extract/mapextractor.exe | Bin 0 -> 314368 bytes contrib/extract/mmaps_generator.exe | Bin 0 -> 2224128 bytes contrib/extract/only_extract_offmesh.sh | 14 +++++++------- contrib/extract/vmap4assembler.exe | Bin 0 -> 1427456 bytes contrib/extract/vmap4extractor.exe | Bin 0 -> 321536 bytes 7 files changed, 11 insertions(+), 11 deletions(-) create mode 100644 contrib/extract/libmysql.dll create mode 100644 contrib/extract/mapextractor.exe create mode 100644 contrib/extract/mmaps_generator.exe create mode 100644 contrib/extract/vmap4assembler.exe create mode 100644 contrib/extract/vmap4extractor.exe diff --git a/contrib/extract/extract_data.sh b/contrib/extract/extract_data.sh index d44dd7d12fd..d28c7b7d7f5 100644 --- a/contrib/extract/extract_data.sh +++ b/contrib/extract/extract_data.sh @@ -22,7 +22,7 @@ NUM_CPU="2" ## ! Use below only for finetuning or if you know what you are doing ! -USE_AD="0" +USE_MAPS="0" USE_VMAPS="0" USE_MMAPS="0" USE_MMAPS_OFFMESH="0" @@ -30,7 +30,7 @@ USE_MMAPS_OFFMESH="0" if [ "$1" = "a" ] then ## extract all - USE_AD="1" + USE_MAPS="1" USE_VMAPS="1" USE_MMAPS="1" else @@ -42,14 +42,14 @@ else if [ "$line" = "y" ] then ## extract all - USE_AD="1" + USE_MAPS="1" USE_VMAPS="1" USE_MMAPS="1" else echo echo "Should dbc and maps be extracted? (y/n)" read line - if [ "$line" = "y" ]; then USE_AD="1"; fi + if [ "$line" = "y" ]; then USE_MAPS="1"; fi echo echo "Should vmaps be extracted? (y/n)" diff --git a/contrib/extract/libmysql.dll b/contrib/extract/libmysql.dll new file mode 100644 index 0000000000000000000000000000000000000000..36de6064f98924b280ae09e804505473d22148de GIT binary patch literal 2316288 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

eHX*jY_x|s_ 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%0DU%;h&~cP2k>6tNAhd|L;ycL9{*6lmjm8B9)Bv} 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℘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�!M4F;=WVhY>V`3tdac2$J;G>qwB+s0SI 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%0DnKdAfL>MH>)UND7 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�F<|G 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%0Ar<~QD4k2LGHN^m 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

j%*wt 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� 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

!m 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

  • ){D$V zjNd^Txt%t;0`Tf+DJx(=SDD+wz`hkKim#&hkSo?CYza)kYMGY=$~;fel(8d17CGdW zh8^k4=zIkAC%qhArx~1)BT%vc^jG+9E&Q3aeuaO8Gzuz%ShEUuqIP{o8f#Pg%$kfG z!NLj9U*UVT@Hn#9CKmuOCBG=#al1_`E7P#4G(n&}12o&Q$d+ir9W6I7XFY$BlN~Mo z#CHdC3J7xA2C@4~%vn&ItYXeIf04y?9eaa0>-FQ%fvT`ylbk4Xmgez}H`d}X_;Ftx zr)+$R>_Qs1L4VlRpuMcj-WPep{9wMCPj?xiM63jbS~b=EXae zgoz}n@fSw!bG%51?Ls2dsu)Q;;TGm3GTAVjZAKsrb7BKD>OSLyiHWWKGcf{2z18U z?5i9JBP}+10GVnh7UJMRX zN&W&l67sC;`z6aL z==-4q{TliH7c@S$#eKlvfNvn4Q4Fz>qS)pP0~BoL#L$Sd51&k84e?JgP^RsPny=KT zl?mFOsNt@3APm`_sF@djtF|X`%H(`Z*)NIylG-X3$ z8+oBA-`;26!XyoiZ6NoySnh3=?5H~i*F9tRf?lmTjA?T-C z`4pSO(l(i$3NA*dsUL8bwke}D>{MWV(t*-e+U(9bR%7G&`05SzT7A*TmKqXL-%Vu- zf7HM_KX&nBm(7X466U}=*Pw@#Bb&i*Mv_b3I z8U0b4urC{kgoJ_i5@=tjDpzgy3LGydBS^RHyc?~q53^^+2J>D8+Y{TMdo>nfh@$sY z#Tq(~Vj9H^jWwtiy?>R+(i!3g;eyX18_akkAyC?EF#%EJxp?XqY6GQriEowo>%|dS ze>(zM2SKuXHZQ!^K4TY=08p5=%kthat5r+TS@Xa317xFUpHk8ytdku-d@@LFGjZ*- zI9dWiZne}ld(>XFU3fwbUT2O15@={_oh1qdXgm;q<3T*YEw%RXO!e{9nIGS#cNr0$3Nnc~`1|Z8=V=L^B0$n3sWtLcEh1uTiF={37$Om9*mWx{j|8 zo3Gr6Eti6s?*J8z^fK|PIMD{QSf#_-Ln4`huHiZvA-$Kr)5 z`ndohYe@TUwK5+Hyn3rj{S&hOZCC2_3e^Rxx6b4V*{pOGD_v!QEXy1aI4kitYzx=+ zfDC#}(Amg9zR$E=0xLx31?B`rrR}>#xidKU?y#jTKK)dZx&2lxl@A$h;Lt@a=*o$1 zp+(1s40LKQT$7RjmAMGu5W76MhUGZrTDx34ZQf-OGeYDLi=$Lv-n@nF3od9GzNKu0 zCwD88%cQ|rG_-9I{NoJVHfdvA9ESW0p+fJDvFcQLXs+;5d}u!SS;;vESf3@GIrE=lF?z zhi(g#*eu-z2M(j>xEi8)`y1IvCCzmXzP+VO#Y!{EVFp?#+sZs=hs}%tp=MUX9IeZh zO?>d!q;2YZ_~dcOwzCK9JK@k_$=fpr!&&S!TPz>EVh=~$9=al;JIbQtgF^=rsXexx z(Yb?ElTm{I?(^Et_>k4k2uX(K6Y^0&QY-o35X<1Bzq@6|ZEtTdkN^~KpP;XYR zABPU~JG5An%xDKYH0im@fHmBqfu16B5?{aN4$XBx9C4Z#KBraU1FQ6wIy4eRCUNHl(r z;dtcTdJ{U*oU8IuIGi~hZ!yDnz=*_)<17 zpYWM@a)dK2gp12r6T1f|^?eoBE36uKLNx&mahs)i+~oex^T)Gz6O+ zCm}kj=u}W_3N2dZ$g?@fWaJEW{{&Wpq`A}O%>CSAsfm>RQ>0m5uG|D>^h2nmIUCR1 zU((!Cy*mz&o4|i946U@-)*jo2!eZN$)HwcH+c|X*BN>lJ0my;upKco!vcz z!HV`78;M|}MS#B^0xoQE2+Tyysw4SL!7Q7+EMym=oc=;Io;r^OXR;8@1_kY+v-=m> z=EfXbcvmegb*+6XHcUdQKu#INx7b3MZbTY?D-qxG7W(1rC9XQAJV&#p9|xukKUhcM z$ee|cH3%c*<{McZM}(&n;a?UiLOz6Tn5x{*@tq-fD$tLS20kxt?wE>qmq9JSU<}i! zEK~vUIO}W<^nFdfml+cEdgP9+x76crZZUoRhZ>=hfJ=jB3CC14+~dd6Hux*lD|=+r zB0H09cmPeX$o%y)sGB|GMC8SOwaEOAuVv?6zJv!vU_hV6-wj#(Mc9Ry$=woiw+^T% zEmB#Id64Vw!sMm`8eT|)1|0~FJ{Nx!u}eYdFnA;+A~ zIZioI$=sLu!vd?hAd8|Zk^-jr0xe+iPb!qd<=GHX5E2<7)ZG@!Dy0WSyab@4kRq}` zgF0>=j0&XVzO=Zb9|!$ppmRqdCaNH&9F%z!0Wo-W5ts8_8Ff+DGf)@$U*>P~rN$1I zN2OO6ams#Xp)B`2DAq+CHC?zx1#xvDda;Kz=WGn(XDzDMx&-{JNXI~QA07K);W3AD z59d(YXziuzo{W+yN6PdPr6Ox>p*FUpI9~5pc(K;UDSTG%K&sU-gS94RQb&i#`~gmg zE3F-Aa5-mg0!u@8xy2RwhUS*Czj}b&>MDf{0BwEyUJCW#)_w~qz555&+Vkn~to_xR z_3*4cPr}0i2G-g?2QR?c^+#_MK7m&>_G+rldVQ&(gTpiSzHM$~MJE9hm7fpRHiwiy z*m>l%_1gWgS#Bi0ffgShoUM034=UNqH;4*|5Pyv{Wa7>025o)5G&+XltO7L<`v%Ps zvG#-SGJ5qxGxd*u@82->!9ys5k>Dd)wUDWo9-w<3h1r9Oz71No3kr9FG@s#3*VmumU0Dts5J%1i>4 z_CuuCHB2Sco7d;AFsniUnr-qnXwHdV-CJ9ga$?$mBRME=KDer=pL7q(pw9$oa|@u_ zFNQDQ`R-2aJk$G1(%36y_Ps1axQ;Q{AnE%mVFiAi#wOk)!PHT}pawA$}{SMnMvGWaD!#$z*UFSH)5e#{8U*{^Hh_EaA1Ss+&TkTkiCf%ngK#w6UF&O)Qx*Nn`J_vUL}FAPN;zmP&Pvb_CPzx zfj!U;a$%=06p*AtP4(?2zeRN_pgMm0(mE-mcW9o74a=!KbgFYsn>>7yIk2adr(Qr0 z-3C}6pESBL#U4H_)hU{XPcjEK^D^Q=e0JxrkB|9z)|q6GkVbB9f`v{8b8r(ZbUK*H zO{;@9emaK^f?3(xqc!A#>!5cm3d;sj9V}K#$DqV)5L+)C(h1{R_FzWvS@$!p>@qI? zJRE)aR!p_@8-E5Z5tO6ny7(4%Ki*GJO=GegNna!MbamAX8I$^xuYm`VJbabwWD|>@LF#ENN(stbuEw$~;Sxr{x~w)|x>!-&#~jS3?$<*VM0Z zE51BjLDGF(7@P=u>daP~uTF81Z|3X$;0jjE$K_bP#@uN0VXYA9f=mm{G`!OYR)LA@ z_pDfio8pbFGAAoI=`-)?2b}zuO?EPO#;6A;Ak3@ukL(KL-y;oH?h|0XWqT*e9o|c8!j| z*HPE#d?}DewV))BXC~+fa1B8Bl6p z=A*1ol(+!=Gc9O6iz-7E#DC>(y}}Vy!Y0`%H9w2Eo5+%->;dSreu}C%^2o$ z3M5UPMewC7f*VFcMaW)&@qr@F4;PWm9a-#utU|e3=$e16g>ESDR|qF}lc+yj?$@Fn zY3e)N{3iU(s>Lp5*sMSv|M}9@f*29}^BJ|1Ic^ISu~c(A5oZuiO#aXWz&7NqB!>qIzFmH6mX| zrfh#*33kNy0cjxeC7+#L4 zAHIYLmHU~%Zkf}R_R&BL+X8S(X~4%#6C_0GI_9Yf#u3)C$O%_Hd_H1eiBbg8)7rriIriYLTT$gxx z2DK^0=WDHzHC8f{e|gbt-ZEAPAUEEMY>#mNV0B!A#lI5+=mh@yryr)bb&N+A}RakZ9Xh zHfPI-V{i~Kn_9wzs2$BryDF3yf<2pB!e}O|2B$OA{m4W$;6s2~nuJyOq=TBMsk+8r z7PQUG)h|$nsJV<^+_Io;=9Bsf9aPkuC7&>rKv_jiDIRTmMTxo2QQ6E1x^3niz~O|7 zzq0vEnl;eK{MATO{;R8XI)e|Ea+!zTW}Yqg84=14f_13_^Vi$_CBgh`BDl@M^(;{{ zA5g#%?jNrXtZ^W!2^Q7x04j|%uloxk&0oDM7-^2N$`@gnfhgVk0JVWFrTAmmPAn$SkCIx_IR5$_NfC-*o5T$nGICv5HBTr$Kmw_ym#2 zS~SaiS!b4(@uQG1yD)+bQ^gx8lHmwueP4H>ztfJr{M!J@*z+vW-I`k=8M)+Gli=ApXcoQa>{Z$wk)m|{8(lqpeQ!v-_lR*`unPmwGd3(Qx$ ztQ*YkO~_igK@Kh51i@cu8NvBaVf`*M^6lm({o>z1~EOa*PY3X06?gn)d_n+29RmAIKV z9$d%*ma%|V`~+`2`0*D8LlejfLB0qwC{NdqVr5y_MXs>bD9j96Yl~if;NmV~afZc} z;dZZJag(LEA}uaz@})S?e~Q#4Ds?&Wz{tlF`BdPoYRo|X_w?Y1+Mp4CgAFZKZBHWDuC>Q7afNt@F46;+k(6sLY4G(DP3P7P zsS=~(d(d9!A9-Z1iqp#rk8O|jw(kYfw(-~?+SVRx>$n6JW%+h z9!TZR?ZI+xg2*w0=rzNigkT-1_}g7``tyaiKL8eJaU4{7%Q*kh$BX1aAm(hng1oQo z_N(DFrUrD#^+=99RCD`M*-eU1a=;uh$hgMC@Rh^E;PV4~my4RLRgdl45!;I@$Y!d& zvMh0LqIz#pVfs~8%om*_E{j=;T1P|~e3Y6qUdT+YK#z}JU7meYc@^6)=P(Xxk9Bw6 zOr|iTOnRvpEPtQ4lDZzke#7hxnPUf?q4@M}qUZt&X5B4WuMWuB3$zH2J3vDp3dVtp zBhhBot@h_BWPN-yxFPG~8Ryx02A*=RkEdzhG+DYUH#r__@(%!x1@1T~O#cH|avx(` znEo}nZ%?rO-6d2pZZ&W?^K1P53&AaL)z{!GVd5{gZWz2_Q57Rd=y`L**TFp$Pf#VXYH~xByEd>$-CG0J} zAOL=b1*eNna5o5qOBG*Z7bP*mK;tI`6U8d?ub7lBCH{qJUMh&vUq%{ej_jv!*~nm? z&T4r1mz&<&Q-BnIF#X;i@%={6} zAoRa4cLtI}Sj!Ocy)8LH07o%%3a=Ql0?pn|>r;I;s;GW8&ZllW(qNDa+ISS%>WDXL z)(0}wX@<-|5-Fk|L5iGQ>> zX2MFzWE!O~k(vK+k*^f(NTZ&PY)=hIH-X79r;_P$%>9i(Zk*FExpQcx0JH1>pEoI= zXDbE~@k%oR0Lh zb1s@c8@HFtD_2LS|Mfl~&sku)HN7~<)?Y0ZSg=4fjh8Lw(i$ z&L`V}QciqD`GNEF;m{e}i>YIc*UlA2fETD@PeQ9G^p;3>gsVq!`#Y|Q&pv23M7zKK zE4T=)Fujt!PP_**{`BMXSEJeC+}0~0SQLqhfEa#oH-qh&Va$d4ad*scrJCLoHm+{C z*Sfb2CNa3F_N@lOXUe*A5|_hHu; zzCH4N3H8;$+CM((BrSrbp2})uyO2wkQyA z@Br`0o`!7l$l+-FK(c$pZ+rXp#EfnOEWG^-)LC65gqXFXQ6sa;c^PpG9cY1Q^=(Bo z8Xp82i&o9rmWdE`VUqTuA*ccw)_bug4wnCz#vr_{<9t$@i(zyH3vc6P3A%nrO(Dw~ zPX_AeEv$=_%K9td1Z6jG^YNg;S+HA=3GFT zaXW`Wd_oRnaE~Q0h>fz;IKwR<9BW|8y<@XSx2$Rs{c6zawqy+zhbe1_Nlxi4;32&J|Dbdx_~Yu5+R$ui%LZGGgL7$4)=|!L{ybQ zpH=t_!uyp-8#!32vYc4HmB&?_>k24h%S)8X6Nn(E;`x0B}7q0uyriOPq3Hu z-Na~)92YUM&x&&oYlVR3{$*^Ti=p{%B1Jzr)i)5z-VMku^!bRQMvf{N7imJe6zKw_ zZ;V{K?D|FaKAr;Hze_K`zo^P~e6EF4v(YJG`^quCjpRr6%Dii!@b>$FSWW#{+8Ean zSwzKlKMGH1ai2_sIP68V^5~t|pNWz8zL&^%=Lqn7Fp6k%pkotg z>zp1i?XC!mBO0XYD9tNT)b`;fbq;1QX6%RGjW_WqDTQh9Y|ubl5L(`OnXP6~0Ff;& zg!|h-hPA#hTkXf2Gw@)YoFK*lXEwpyLYQaVtY$14^w7kf^(!yemH6^{onp~GjURn^ z)%o%YQLWtsohQd6vwyTw9gvgbI!qR=)e%xJxJ%-)^&=_ji-&WA#c3t<7$pQl%&g)y zI6x~QIA?y|Dwh|ttETg8RxqbrW_Dg}%%0@6W;x|lyCfi| z1Iwov)u0cPQ$GCY%jZsCJ|XH=J|SLC1)y>g0gg;F-y#o_|cco-JX2tQaci@zU5S|M?r8vOziE)Vsyjy^OSr#n0%a2 zLq_yUi#3<23n`8o*igehQS&-e*Dxx;(cDeSH+3Q0+N46be*$Elsk;~t2QqaRFLW|G zaQk5i{mO?Qefiwu$!Ba1`{wLdh?PZ_WZRBJKqFK@ACONW0fiW#%*`qG$Ir5@LHnYI z*^s97+mJ#H`&P~B>7;#bn~IiHi=_|Kn^uL=RgH~#UO^h>4pNFjpv)7ULtVX`4GvN z5=E(@y0KP>O#%piLM5?{lEB=y^f^K1c%Fsdu1ybSwV=*U6ie{fk5#McoMWv(L5?ow zK<2GZ%TVv&7(95wK0xpDj`^N!=)$4>tnAv1n&CPu2EVs{80oB04|!y-JToVsChS95 z!MBUu+a7s~Fb-HPNgbdt>BeFCr9{_bYl|-q)X(LEhBM}Pvh&njw6oI;S+1)l+`y~) zBOzkZA5#N%xVM?a`o-p^(El!kctvNE#W6-Wo{Vtfu3x!Bs3>!x$EnQ)v2t;&vAVWXSK@HGE;)pHVtNa0?*Jvtiaf5 z;&|{z9Jasc+yK~}cD%73=?0trGSV!O&CdBJDH`uxZ#A!4mQ z|HHi%VtovUSMtB7BG807EO-$Gvzi-mWQFv3f_t0ES)VJpmC^q$_4;=jpX&48n{(;& z>J&!dimKEHl_K%c*j2Tz|L#e=8M=L6R1^9@KleV&7~)90B;TTNE2ep~c; z?nxmPvHHB(z5Oq89r}FZ(y%^1F)~D~)#oGoBlbVp_!>;plCVA(g^9IVKHa_jFE&2a z=OWOXZJ!^n4(RhEc<}T&|9I&0Dc1$``Gq+FeSQfKo<2tb>-712q@6y03~8s&rz36c zvuLvFHoXl0-{Jck_k1vho&%Hj}ge!N#ZhTn2ix_4yTeA)ddn2M?Y;?-~JpzH(MTpO40aXP<}S!PDp6fOYyD zJ;B%KBan9b96@@XYI4Bq@O7D~!`J6$-XBsCtIx%7aK!ifFIo}U=bvGjxpd)Hb595p zYu{ey-u@R=1pY>eBi3r}g7<|uYu`TZ-ewZ(`xE~me`CS?T>5-Gye3bdhv31}=M5)9 zpHtTc^!Y+Oc=|jB51u}60<6>L-AFt8{A;A0KDQzr^qkdJ|GWD9uaXegtv-)?@Bb_G z`HdUH`Wz1vYxVgn?(Kh3MWD~+j##U?4JU>;Yu~=&-ewZ}AGgm9H{{ai3GhNZeZBw> zo<1+e5v6w( zXo3B-+PJ+fJ%X_}7K>?A2kRBE!o~=XZg)B?n31ln= zruSJAyM)B6p20hJ8T)gXr2VlgrHzPODQy7+$jI4Tw|G*f>W7YnL~?_(yueyZ;XhWB zDDUOwC|SedxEU--$@Z3MVr>w3;}-8Y@61LaJt<=C0LAT|$095kd@kd{Hqr_%4jogZ zz+56TbSw@A3_)U%l0fp~m=Ti4hQcHljxFl=F`^w-qq+c9W|w}%_Av_|GTG4 zyT+Co^_LP|6WJa&Z#@RJw4p|}M@%Z?g>2^DFU!&QC#v`3BASmK!Ik|zCHR(efhbPI z&j$!LG}Tsi@hHG9$=#Kx?iz4wbt>K^s)PlYP;IXXZuprrK>+I-k#Q?I-RVB>nX%2> zrVzVve(emj^)BVKtnznY=4yp$!-6tdQ`WJk?f$IzBx} z2vnJlt7BQ%9HxXtK^RpTYn@<+D9-3gZ5Knz{>aF+f1xns@87$oEr9JeV=dR^Gi3!% z`wTG$0FxNIJ5q9KrBsGiNw+Ly(Sa{sbA~a2#kuMkkG5jahBsG-8uh+T9IXfr9Tw85 z2SW-voHB{!@*ZeIoEpY2>r3rNEE7_|a8Z3DE^T zqJ*HqRoIEZA@EE0R|jENSu^B8%NTE#<1A#OPGR~7c!>=tt1c{uOvK+x2-)*0uz^W-H}#ThU@9rCLEmQ!AvTh%g+*@*U?cy+ z*kI8d6@smj*z)h}_!ul>M@26^Lm0e}K!P%ZLDybAzfNqWbab$QL-SXQ+2*se0{JUD zI{t|b5Y^o!OY*VA=E#m8;IVN4x}b@eYB+X^>w;vyc!8WRTelT%lh*@Njv7jZAN}ns5IPp5;!o0@-l=5fri`#`z4{^0!%bS8YyIZ_cZ}NjHAnFccz^ zqpvoLJaGTViQE{xxjp|2dT~gr8Lu$daPMF~NSI2%d|7W0X*Hz^gQEf*%)kJi&IHU> z;>W`=I~h%Ek77f!xo8qdt=xbYrVS^$w$E5k*{z4{IN|C#gTmXnEVUmD3r-O54W~w}Gk5C8*g8DQeUAKOKA(|==N#B9Yt7X*%Ua38a}Jngd`1@go~6{8 zQ*4$xX3^~_n?8bZLt@h4z@FTX;wjO*0HQq)DU2H6UC2DrX280=DIG{}gRVtU#TSv@ zVAE|#&%0>h{6&kfU1jo;PmR0&+Up|oFqgFO`enhjQyfW%zCc8A27d|aZr*hQgxgK+hHRpEfMD!qAj~TJ#=No@;w&Op zddvq3p+<5{g^u!SIv?z;y&87}fdl7M=(vdlD!m!&RnUsCauv9!+2Y0O`f)ZOSEBlY zm%?`9#7lmd6b)Gg+7a0)1)`Cx7#{elje9>RwaerqVmk;Y2-!Vpxf2AxxU9L(d?hiq z^bwi(WoSi5n3Qlukpg;Wf~d19n*=S1#Q_wycqu@OFA02ATgM8}xh_cjI9f}4T9jyt z*1EBwU!*(YC%eQD%Y@NFo_ZbSSuCSG-ATi~M7({D*&-VW8mUOKSjMw+ym3uH zCZ5cd#DGjfEE7)4_HrweES9NExaI=Qnj`AUA{e1s+HFe7FH+Zz=hA`@%d$$$VwoFY zXD9)yAX+Bn29+ShvMiBgu}nnbP6`gl#ABI~7-%LTmTB<;nPjm{Wm3R6hik8T;LAnt zU<)s3AK*@aIg>B2+-7VPOaB$-L<=)!c>B}>?jVBwa8SH!O5Xen=Litdm?GwrSAXIw zq8h<`a@@==2gMU- zkZ8dWXG5xI?tr=1R7EjF1V}|y1c|<3%$aB|#z{2q1G$CYZ^g}JgLlLluq-jsc_b3} z8(AG|sEK_G2+<+J7uk?_X~5!WV)lkNS=LP`3s;_f3mFS}u+939$-y?yPZ%6AFMztU znhKMjKt2$iSGY!q{u8H+GKk(}E>fadGRt^+U~OE9o~cCR0{f~SIf%n2`bLye`2D72 z6Nz5$h+Z#5$Jf`yA9h4nZb-a5P>6mb9p7ZOwv*`C!^jvU`aLB2Boh6!5)EOBdy7$j z&#c-Z#5;}Wd~{=3{7aY8r zYG)tP+cu$q$5C({xYyR%W`HlaA2rqsMe8+}qo#WP4G6;dH+**&l9&+!Ia8G!F&KgT zGEc*y1XeUb00h>nZ+da4hvs}wAg8w2Kz>;0Sg@U#_mtb=nvY=5_<(PblYVRG@h9$# zq;{t;(XMlogF&(&*u*8YMPu$AFA_q+W{M3-wo#+6kWpI*gjQiFVpni*RAO3B_j_RZ z75MVQ2`B;i6^Q(Rw4H&yg0@Se0ci&JKnnic_ZdKj7eXx9*W4b%g&RLBPYY0q5-hJ7 z{rNYr^&YO``c&n5oDh;_spIP^s@7zf=R_=Ep4U1{w-yD%Jg@EFJpW=>PV+np=*-7K zG0pRd;05EJ6*KcH3&8wiVo>6)yo$18#*9OvwsK8vtgbd*ld7yq#p=!*JF##L$FR2+ zruc5nc@^UeZx_RUbcxS`imJt^0*&olkbpXpX6cOvy58tk;SWG6s>WwjckQ@9byvCS zt^x{FcU4WyGwke*0)~C>^HSZ1GkT*K(3x^j$LbEvS>0N>gtRucqE-$*OUW^Aso0A1 z#!gv&_N_zpeD0J0omWx56zhqju*C%!>m!iam6|X!Z+uy5(yU|3$4$bfsxI@sFAqS| z$m%t|brGkqYETa}=WpYIW=KNaVuDm({~6TRGVu>KZ!JQegZc+s03^z`tTa-%>LEOs z&%VbO$`sE<_|-3c7a_hyT$e3W+Nv|b?5bXhu5#z3Dw83X-m!rWce9g=L^M{%H`m0U z^g7%viI>Go*dkuScoc^Y_sNV7_Yt5oTRN8F3?QZ zW~Zro&S!SWADh;{KX%ucKnpkwf9!?UoDKdWpfi_&x*Y!46$or)61~ZM7l>T54f$i! z`}fE8lm*n|F#NHTgy<}P>!!pthVRhPz zZc81%RW@tC`txZ8IFSCV5o}gss&yYmE>Ct;qKy1>q1})dybSyQW0gA90L8cG{QmJ- z`9Jes@jrJ&)`QECwPxI4GX~0+VG{<}=Oj45&R4kQ3g@}hIpD8P2H+W;Xl~CHe;`_l(e&N{OKwaJkt6~Fl0b_=Lyydjn)}Y9MDuY( z&{Ob;Fy$OsJcPX*&r8SYK^$`LBWS8}Uu|VKV8Ej8@~s6xY{~|qXD+#RQpEfkegm)o zEflM-ieKT1m>1E*rQ$|9a|7iL^pc6@5m3MjQF^$>8T>>0oB&E7mK~ACpnURe&M^F3 z%=tq?$E_mA(Uxd9e|xTLOBwp)@CWt*q4taDIX?$`Mi0~ zTar%^LoSCvsd9}{21lMlaAK2PQyL_YVS^n=OgVVMYne42yunPqcQKA3%w4ulMc zH7zLb8#ePChI#T4<~a|5m|pAYx9BI*Ko>jFFoIxl;2WuB|Q1@E9G}901nu`UO4;U z@;jNW8y(MHc*p3;DohfYK(c2F?^Yzr)^K}c|2duRyvT1sR%w~-hwxeD4a+F+qyv|S z71P!wioCV*zW%Xr{kG!SQ=9Di9p#l*r+~h56YihHo}e9wxr`U2hH|f^x$;}=*KMzI zS+FRocd&oU$d5r=uQ?%@yC^I7f%4n(JFzU!EC1&o4OI0|%6}x7yDlqtR{0?Lc+_9@ zVWz@o@{952V0){Q@#LDV%y`i85xdX4@BfsT~qH zE=n=NK`b6^OxPD0Y_WW4zVN~o%Pl%ax_imDrs2u7vXj0%i`a)dp; zfu_$s5GSYFsPsCFH(N~GPh=GIjf^f$^9; z^(!z@NZV*O03!+m3t$7*NqAZ-@T6CP%8iq%iZd$k>{)>kk%aBo$JddqtK)Sw@rPUm zD%aTv^*ThTH=5(50*7Kp3Ihafy7EvTe&_JTaTz! zqPiincm$b^_*H5se+KroqAxfN$ZBJ2NYEM*1V>~C>xV?v@cM6OvK8|Xn13SWby8@* zjIRat>nhQ&bz6@EqJ!#JgA^yL>dq@DT=iYmFoRQ)IAH*tdw_4SoWe|6V>J!YeyeHs zV|e2W%1wT}zTMX}#OpXI(;%AmGRjg-V`QWBv9PAS57j!*RD!2z2>NMcqe16CP#hu~ z-^dWu^JhR%FMvP_>O2Zc7QEGBqD&f43r@|Y=6&KJ(Y&;1-p{f0z^_mQ6jBvV)(VN{ zL7FXypJ{~{%C${rV?|X$D(gw`OMcW;w4orf}- z&OlaZ2rC5ktL8}sj)&&u(3hW_PJO9@zC4Xo(B4B|MpSzJ|H`h@LE7cmPR?`hw@w6^ zR%vq0fmMw+oi9G1BgPrlw)Zg#@}!=CZQLcXZFiUrDHzvbqWNAqJ8N904EW(mIUkmLVB zGj4a_0#0&SZ+rkA5>-*PoCv6JE0{=^GwW1jtxfKur!Bv=$-PK}_JOH1Q@91-bihqA zZ(OgTV!4$mCBL=FHigYgrI`Y3k-)xpu7%}TB9)X8MY2_4^HXW20Naf}lg!s0US6D( zO7gch*@9otFesH~s>1AT$%~{~O#8EW5xmY%r@+0ALUOLTU&3t_vn3kK&%uIb8 zU@KaIM@$Y5pENhG>QqcMlCQ_(9pz(&GGSi%5r+fCwaG4Er@y)${^}YP&lf%d)k*V1 ztz7q%lFJdeYDyELGkG^JO(m&3eWl47925LhvJ(#jK(Z9~^Cv`8@EJ?9cA6*gxLP1O zuj{2amRISeJhLg?z*Q2yFJp z-Sg&F+Uw>52W1rMn}A}IT&soOBafIlnlyJn->`N1GHGGf>*G>|!E9*XuziZ<(|Dzf zZkPf_ufpTh=@{s6*6b33D?iylHv+)T6>Ua(L45X&jzQX=rGoZpJY+!ov z$Ue1+E!t_8{?M~eSdFDoModaHRaE7R)v23gK5+?~ zS5a+pH^_$t!7nTbexdUNU_p?=(!`zS`4w;S6`Dbv`Re1ZqxVH2$3Rq-TPF1l+pnd+ zc``*+l@BhalQmFnP}w)EM?b!Vk8`g|r}@6ZJdcGYkacYmcyR>@eBrt0O94R{wy z?u;s$+9aP+Y5rEE(o+Ux zpj476FnqXKd#kVyMw0o=w5`ravPd&QA7LbC^6@-X2&Sy(`%EBcub}FTbriBf?r3Z>Y2jmXoUImEmq2D z<};50k@Y`Gz=L?yHq?6s+ECd^{TQo1jij-ff_8z%^$H%?xb%LL{HeaJx&Y}duvO@F zBWEE^#h~hpMEb`0vzFX2yZqY4RgpRK7v6a7;`pNLA~0Oq{@#Ciz(43h7Ph|vWZ(Mv zgS5W}G6hxn`wzVKSM^(IlN-#-ct@@8*FWfcokQK>{9e_lh$^Z!OJarDfZVmoaUdd9 z&)?d5idOZJsd5Mxm8~$Be#-X4=L;-B|WhFb(hZBG?g{?^uyR9L7YQ|0E=?b2s|pxO1=%xj+czNe0S{GmQl9r?IPA92|H z3e$jez(fuC5KL5Z1fbY+&&0=avy}^{)kXRwUsUZPhtj<$zrvh~7^S#Kd^D5r9gB)5 zRqZ86a*L4oO^}HEwaHRErqcYam4=|Y$|iw%N5M(|#+(8qpn<^hTbmq?G=PsxrI~_L zvkreIneGDHu8RehzqQFC`~tQhm1YXC%kXEC>6vMn8O38N$=})}H4LzWQ*tR4V5bP| zGKIyLqtZ#fs!i@!$amltDWuHY?+Jh58Ilrnr9KWxi-Tq+>f_OAxw+9?fXBk`$A?#7 zvUN0kqEwpLOdejBS1ss3_~|#_BZuG;O=L02PvDpC44f*KZhALMY2vYTBOPeLFX3^u zWYBipd?niPvJdprj!(pgmCgInzR-@}hX=nM??guDbMztYe2yNZNkj?SVK>rTbJC9w z;>9~$JP|#|`G}of&DlSjs{fX0{-?@pZWm*!o%QhhF)17 zO=qL88hukB>nvpLe1V#~OmR)diw8@P6{SXQ<(l=rVT<+CXek%2!vcLCDbH1m zYALx7Z?)o)>eKD;hP#w{WtS4C&(0e{cHF|sgEq^z>yWLp-BLH5n7t`M&<79hL9UpS z87(|N;5{h){5~@H-FxuAk3ykde(yoQV>~z6x7UfT(JNv0vDf=9;KQQhxl;9SkJ1uBN)a6k-1a_Ha*n&f^&P308AM=A$`HC2(C5U=qF9xp zGZkrBKM*yaL(tu_G97O=>od@v0<>NOYBmk{-1(qg+hOiIfn(ck5<}PqK53&Wz6Ooz z{m7TolYi#D^p(eBi};3wctGu%I9&b^Sv15>aPsv>_0huE4#QD{-axdIN?5-#)UO*USHE6lX|eSyn2GvXhZ_2Z`9rjj{ZJO{hmeU0yWzpy z`nYsfQ}IVO97N5V-w~l#?SuJ;+C%!|W#%D@A=gS2XO_clL8Rq4jv=BI=0-gBwW2q{ z_iITGH)EqcP4wm~KEb!TRLA_{-4v(4P8ThP%aljjdXPfU3w?g^ZIs8uIHkXTdF<{- z9>d89Cy!OvLLQHum|Gsx@m}RI6DcQ;HOS)Ru@32gJS;a5uQqI>%7aqmWdj#`p$nVL zedzr4>k;;=e7_t_wrijIhLsDW3&8%D-va{)ZvGa3?d19YL)-VjSv{ry-|9|X8D?T4 zgo)UpmbO9^rrGZ9NMmP4L;gfjTnW)k@+Zp7Wp1}?Lqm4kHOPu>ZC26{CPs~9H?&mp z6=Khri@{)M==Xj<=X^e&bMM@lrug-Gb?1COpL3q`oacGYbDr~@bDpE=*};AQa}`P~ zxC8cWtGZ^*k2HX3^rpiA=3du;UcV@4mOjYUEYK3Ql%f{2^`(U1#V-H)oa@?;kUsPQ ze1Y&a@sDvUd5gD^f~KPA`p9G`%B({5?ms~If+qDM{u;Hx85v*QBcB}XXp%RnW1euw zUo6yGelTvTj;q%X)o5l~^Gj!chk;I75`Ly?0yhfP`R~v&@k`tP+Dw6MmA2!6iCJNt zsey{0AN(ph=Ulg6$ucux#h0QPz$aa80o16R9omF<16qcEHzS)lUgCS?$W*m_FL_rW zHN0v1amH(=UU(J^QT1OyM=z&b~Sb#A$%X&K*}3I={73j=a?4uU8&5MRWVG59qJ*y#x7U{`{=r z1%d0Z2%oN=`8%2)%$$ye^Hy~PDTtR3;pG6TS)7Gx8D5e#y?Zp+5()Bjd-=MZ1B$Zn z?s_RvgPi5FvJkBNRnk^qcPq%knEW zy_V^1I^B&j`5n>_dq5l>OfNefy<&Jl=JdUBe5PATR-~l45hwvcsKhK;#ab+7n+487 z15^D=18M9pZc#Ms2KkaHxvq0^{fcd1RW0)V4!lRTy3hFzNfKsFf9T8e?EW@X{Qn6f z*m1inXM*zJ;F_OFxU#E8bgH%HwNC!lVb4O5*VUm)idShw)lHzOdAWaB!;43|q2LiE}&=TD%nhA}Z=a(g&3kj&8CBl28TJTcNqcuatMN68B z)xlDszwvqWLORBdbE2pDcb~a$OsK|MP2`-@||x z`Mvj&cKAIw*s1}27iNRmNTq3pT9lZybVNrP7S6t1-8;k*4gK=y$;~unD z>`CKxOa{5nxZ_&%F4@6}j(EcWr|a)A^F5sWJyU+r=520EX~9V zto%dI1XefTY%@IQfjJ-gcH-pRejMX!^{Hokgp$=CX_1+a(4?4u zgs!J4ng@Uhq9HPE>5De|J68yA6ZVV#xL*AAx_>c!_r?bg=XYUd2q~j{&S2@6wLNoynp5-UaGxC4( zIBPzz2j?kpDh7KrYyV7Z9QFw!AEm2*$y2&I1(PUk(S;ud7gW#B>_IBCQ4dm=J!lP5 z)^Up|y+aCgkU=U3dF?@JelKf~N^#c0GfEQAT5PROIY^BJI5h^?agfTRQ3AVN{T-`I zv659-=Y0c99n!o$(G6vkPtSEjn2*0*o_>) zVkOMz9rEXsxg*vK8AihN!eJ`Oo0r34LR{e{?Bd;{ekVX5!G#a3nL(3*&3^`irsNQ)lK8 z>W266W93f(I@Gj{(t26OaRNvpaGBcnV{JWAdhN*mTzYTddT)DWjxr6_SS0`x0DBSG zSW`MhCTSmcN#Pzk={Z83B($WBjC=;PqyWqqUqcO$v&z_Q%(#6!a#*$6A7?mSj7&9x;GK9-NuaD??Vn#Ya4(L&M7278cn~ei*uXO=~^^sMz}bqfFw9)F_V#{?npOq z?X$gho@ek)0Zga_-R#wvf|OEYPpd}6|M_{+%bB+;y(!R=8hdNBwDhJxOGt|Ch_3YZ zK-#ieowM{+J!wWV^wOV^;+)4EiL~q!PJua}xm)|hR;R1Oon#-C#iVhajAI>iTF`NH zrh#W>T1oIsiF?rtVcgMqg3(>wfk$0>pTyE_{Y~0ga{zd4mG8mFl2*ipF<#78Rq7r* zdv-6~K#h>tPx*{*xUz=I$LuX(d_$Sl^nqqI7o%iJlCHTJ{rwu%^@nr#ju*>}Yy=Dl zok>2zKcvzFm>wZQfcgmC27hBETj}x(-rGt~D_a{Y*`VHju@&pIbua=3@B(7fl@XdrX`Y1GF-1!%m*X4u6Dxh1G<1n`IkRAb~ zhZv;OeX=Qcm4$P?g|py0jQG~uD_Rl{7PY+&9T~-RVOzA&A1T=$&4mfBVwiizO18nJ zm#$VV#S(|1^EP!$cbX?#RW}&K zgkQVBN5xuqh8E^v1}m4d@(8!vSJjyx5f^M6B`$H|a^GZz zyW`*~CVt4J+pr8+sWRYAdh!t1$;oY4i5w0+>yp|a_@|DCOuYYsP1%N&A8EBjS2icp zTtmX)maSh1Ya#Tii{QS=#eH9F4E+e3j9r8`83DK%2-o?IpymMMJMcgW@cZV|C<`Hj zgYO+ke*`(DT+BxLimRtzF=?_V5`uqnJeCrWoiY2+59OFC2#BPFu5!X`qHnQVG5k`d zgd>5>B5CY(9oW+3kuYmI+!wRxnLuKWR#g{eSHzga1;=N)Iqji*IQ|NVf}ZD^d(3sW zR*%CL#tT80}gUd)6p(75ay*Z+j(nSN;3kR)9ANr z?7I1LGjUGDM>y#R>D^lJ9sZ<{J)aioSYJcq!_nsLxcfu7W;Q(TZg(~u3$B+j=A#v| zOb=FKtI>MZ2RWwrr=(G~mpq5<8{L>X>jfESRrl!_pj-T9zvHq~KwUo*uj^IezxXx2 z`5+#22&jqr?J0a)65o8j1gQ$B(faj~d<~!CxIkk;C?9yS$iGJmpdJpO&=~XKY5n2z zCmmR!Li6R%`pZUs5pejm4II5_{&W}GH$%bu=aAB}?C4L>^F5EAbK+T$WehmaZ-e8u zCb(;=u9eN>$ma`<75dIoE%SxG>=d!!yuvBi&%R7u3r8N7`@6*o=BXNFFvdIPcJ2{h zY%l`-)#Z~Ur{5T>b|kD=jGMt!Q0GX~R;w=o#CG7V`s)ncHN>J=6^j+eWVbsM#WMBO z%~D5NEGGF&r|2pT{K@(eo6H5FbMS~lqUnyk6qK$aamv?W8z~cd6T>ofJhHiVO6_c@ zky$>fk+%Fe3h(FCWrILqNe&(~OSJt`kCMxP?l6#VBhnMEc1D-B_8)zMjKPK>1T}BY z^+V2}_%Hx(&XddKUC+GRKdt_bBJc|OGA^h^8E71Y;N}Y`9K3Pk9q|?79pRN1-^dZ6 zV+WZSpo+P=cAU#vchIftG<~Rz z($QdAII?u%L_pE{W&iVBe_dPudC2&ye-+(FlJr+IVf?){7b30vx3@a`;#Ts7B?8)0 zKIEqWneHk!(*Rxnh>q%?Y3eVE?juRo&xEO8Eb;h!V~Kb4R5O*BJ|6Zk<%>3$Mt-y~ z)%Z>B2){}XKS>flCT#o?FGFkRspe+l*VDp}FWTVO(AoySJ3GQ}p@*L&i60X-ejU-z z#kOW1@tacN(T^|M;CDt_{GRCuza<`ik|cgiw2z;QQ6jf%77@R7ES0y;>U!IUpp8j;kT6d9c$so7j5v{t1W(eo!>$KtT*`OMfZ^;@ngc^r@sH# zOi7!Z#Q#j9W)%^-|2B_ce9;D>nLl_0)BRy^NBC^=@R20(VZy=ZF$axmCvl&H&wAps zmxT{sw82MxpN!819pR%4KF}YMBtA^o{96K@Ef%P7tevNttwe9i9FJUl(FVOUEcDEJ zNJU5ZwRreRlK3%U2&=Y!5%aXoKHlEgt#wd@0+^m$o4yM#?FZ*+3{m zq=b!i7s6Vvlqmb}jc<|>RY!?&zy6=|RmotOnP(e6s@D0s4MuXX3HEbP%{a_WZ<~P_ zlP$EfxHqJQGm*x={HmB!f2GCce#H!1jp(}JD%nnh8^#NIy20>xP zNd6gi{*yb*pYft&KUwzDi>@VPOfa#JUc_urTT$k%W6WsRp0pqdAIvd+_y_l6w8CV> z!)JUz4AApnG$MWrpAaAPe6!K-kKYI#b;|^t;rACFzvsj&(KyZ*rh-8=M|f;+Z_`!i zLYXD3S8rCdnT0+7hcxzc&Fl5*ZsZ_h-;PW}zs1ZdG(pNPRrl($GQ&V%R%V)GmtCsP zF=d}+SNYrtmBl=Hx993bAmEjg+szk}DyxFyDa5 z0oBCzXji2md{fU5RzV4v6Uks4I-qO9vkk~z>?T7*Mg_nFoq!8u;HPvEH*rX z2b&FA*fl>A`m=b&_0UL^UVlRR4@b$7yvTx{(13b|Z_VB8aLJgr58|!X7$mBISZGv+v9sBJH(xZ7fvf-}rOJL6JB2Dnz!mGz%;4P6NdTzBl zYv3O-5B&zYOE6+vxy2;bars~k8LIc4sy`y+)J%_`wKc0T7 zU<-r@e4sSpu7n= z+(|04xIuXnvY1J0<37mYjBY^&I@S}h$8l`SW4*L@6#eb1YPf{uc$AEv^w%@7P!ZgO z{+_PxLVz{sPH<%t$Alvgx{oUzVlgdq?2}kYeXL-UD#3{%z02WDr05>6S4F?G76>-Z z2bcZ;RAhmGr#JR9cm?DP_Evm%e2(8Dy~*&b8R@g!XtR#~m}BdYWoQP^FOEWynt@)M zQVq*%!}-XCJU&qdI?|v7hGUC&j*$0s1y)=lu0XT#WHkz?yVgOz&2HH7p(WDeH{isl ztAwI40_TQUNpMeW=na$%-ORit8*oey33~_1zF!~&hlJNoUmGU=V&C-CX<|7y#=K6WCK_B)NMQ&r z6BS^tpjXF^BIU3cQBonRX2DhZb9fT!E>wFvpAm#tO4sYpRnzdfSjB%UrDIj&h-tlA zwAc}+yP0x2{fK)YPClTT=zKDf!yo;Os&5tO2RVBj57Y+Hom|)+g@W|}jddkoCDN-* z`gWx0lj8ddq!%Jh6Yn;pD@=Me(&zcc`EK;x;Bzh}(c@YD{~vk0<`h>Ro3Yvk*R(B< zUC<6s9tWXEQV_=9+@U;vj5dY*%u9Kkii9nXx5R%bd0cr@d-8ZN>QF}k_tf$zGQnF` zxH^zU(aee#W{YTUYqUl4w&_|lZ`6NX(fss;c181#BRdq$Y0l@=qFJOryQ10UAxAX7 zd(aZiO;r%h$v`!wXr|+XE1DT>5JVGeU6jpjDCx*%|9d^zJOXJ)HnWj-Wb-hj9og)Q zbh2!6fD?V+-g=$0BCO77;m{qx+95AmDZws`Ry7!*H8y|F3)5!oXVyD2q}K-;4{1CI zgBnNWw#%t{P_6|!YQm=^f?j0okF+x;*W;t3>o+2eGp;8%>z;z|F4psc+c`dIYXOKJ zgY(kR6dyj0KQi!yPND?B#^-9>-y5W2Yrn&s_pK7WFB0Zz|{>W%q7iWb3K;!j|Wl|f8qBE-f zmH-wuI7r-XVm`5qy8=KM$)%Bql`JY&Ij1?@Y(6nR1CNEQ9#&D>AZ!jtegKRGD+<+* zr%G1Mw`^o|HGJTHNYG(Q42C&%?-Ak30q}(|;KP+TCWF7+q`E=9 zFa-BRB*Wqkmq$EsoQLw&haVFn4mqI;nVY^LFLV_!FRAb(XRKtSN<%GraCIu*#>zjZ zt}CgJ)~kxY7&N$<^rX~i^ihWi8W)$>aXZ3;pXe?qcCYiZtNw<41zF+RvOdYJ#Q8RC zWdOx^BUZxfN^L%mJcY&1FJjd?6E7Y&cus$PFBqq4xvmsC2-)lvF164A5YS@tdH}Yo z8yx`K1;7xu9xYrDAkb1z88SC_<;-7JmL1DDH_$j3q$Jaf6P$}ez+!W5K-QLs4q_i0 zXeES}7f5b?K)sC9C}=($Ah8l049irPV4W?xfm)#DYM!j2@;UC~WReTLlh@1LyH@p7 zLDtNjCPNo#gsl0i8-Cfz6q=8LoVch}KJEv|wol>eHSveH>#k$@PR#gV&HtpC?%Dvb z;R~me7(DDgEPk0xtYTUHIwg!;l92)~5S^){v;#iE4vItQU;R?lf}UD#{V1^+peNd$ zv4VTc($(j`5jF7)GI{Im{O}5T2y7=XKGFqzx!28r@>ctkTgS}uXW8&pe~_ZVso^;glG?iy;^Q*-x>VrW_&)_gYUu`ppRfV; zO9ikK_*w0}$cFdEw$8TK?ZK8jYxhl8mz3opv0=4v&u~Gf#IJpLydT`~X0Q$LC>NkJ z@N~Mr7;$XlZhG@_3*lGZPeBV-v1|Mt@k}PjbvFFTzZ86nK)vh={Owe*yZGlhq8(6A zUS<(!@&BbJP$%FUh{^ORw!sJ60pA(=C&0Jp^W|g<|LyPnGWc8cxyy!Mu{-cn>dR#M z47R}^)eiX7^yvV;MV~h&S@fyfx*PQA2)-vj*V^zW?K%ARI#@3ozW7v1gOx4|Jyx>pU?q3jr`>$7W&(_q(r|n^5cvjMuU19dcIvjdFl!} zL!SivE&2?y;UBp>@Eswv$LHk!_2xv2Jg;m{O`dk>(>{Dle6F=CnAA=Msp-=JeCJa@ z^|Imn_Z)tre0uWp8p! zVzL0;WrMFs4Zbt-({BG7WLI!x>I!xnf2)6OxX7Z<%Wrp{KJD9YMtTw_egSpBuPnp( zJiDfp_;(V%t7Zf0>7%U*TK?-bq( zjV^(9lRk;~yYm+KyKMN^?>T%!@?`q_7hYC(X4S_7pSpjwFF%g-Yxov@O6>}sd25g9 zlYqZPpDY{xxw`{DQGK@4!Ja%okV7KX$2;Za6Q`r`MzWtBWfKI?SFcOCMWc^cOLtp4Z@05R_ zefSo6nsH9llYg&*pM}4re-_yA-}$#gp3dlp1pE`_-;%@D*BtVsroUTm7x-J`8EV77e$U}2 z%BR=AHXdRT=)hkJzT41%nr>IHVx2>vl=ANuYfGO*{4E0QZ^J)l&*3M?zek_txGl>S z|LC!>w-j>6ZZCZFxYwd4ScP z-fjiIY6aY>?SXtH@FTH3mV9-!>kIyJ^_kj} zEv$R?x9ImawzKIy-Mh{Ib_dA8b_Hc_1wWg93GK1y_tJh=gVJ`dK1XcZ+Ar<+S4!;4 z7Or-v*PeaaN%)rZHTSYwbCOpYjj zTZrl9^?$d5pNGFCPSb7pD_(R6wA=6v$&5;{UBTPW?*@H3g6}X29apM92EJe&ZqtYq)S45`(UMx6w2P~E zhe`ke_XP2JH6FR63@MO&@Os$_1_;Q-{^k`(wKG4!7U*5XQ^KBSi5--Sn7s+HgD5&} z_{k08I98&!se8elxmjF-JL@g&g*Y|+CPJ*QV^npWSHi*R4dlf*3GIIU3ed1m6}w2) z`#5`!4XJuh>W5EDo00+w0Uyx+mYB;?mdNEOV^Lj-%Ta2U z7emE1OkDGS|U7hm+>I7+0;Jvh!z(vk@^;8c&gPRwF)r|pl(n?81gVmHu z#4UyXJ@PbcHeuMyxa#wiJ_#&gOylajk@$jx4*~U0V9dYIpbb1K%=DT19ZqX4W!VuZ zt4~S1c`AxoGHlLnHaBYc=tqP|UF%;qE zsbM^pmp5u|NuV;Ti@X_y3oh|8GJ2G5QcOejB7guM^vMmjKEZv9a$KIFyPboA?dp?S zWWrt1=+J+B7%6q(JWo*+g%&@g6~)S2Pf-NTO@VTS(&SLN3^3UQQMnhb`bu+3#z~5HfxmA+R z)2K2AxmrJ^yy0RqpJx44SD+ze{RCnCxVhf8q&WSQfOH@7dX)`i*HoqKolGC6(Tq%%vhSVKnoeS&$5AwIg zlfT`MkFqvg3U*R17}OK-jV@z+l*KsJ8dtxb0Ba)5W1&$w92$`bB9I))Q?v@>E$^|$ zeKFa%Xil!Xyx=PGK3xa4T&%X8inyV;$+*5q^^z|*dqtTX%FLqg!|1dzVjzJKn9$)P z>(yeE1(O@zLR}3n;fK*h5ieKjs=AqVs}cY0YO3?c!hD4hDOymiDsJQfuKMt+rFkrq z#xkt#LR=6Qt&-{(t&}jpG`JV_=iQhqG`ST%E$-jPMFKAPv+T z4-qjnWYY7=5IT`d4Zcw#kP+^b@?mOzlFYK z{YcighZ~@MAsE8pvV`DV6qmV-Fv4)V`CfIVzNGs|(UYd6P4N@S5tC^mAYL!`Q`D=g zQ4gHYFm^&IHYsL#*5yB!DXk@Iw9h&FsW@Wt4gdvg#{Zzj5X2bBWO8tXt8~dR= zdUqrU-O(af7`HSog|Pxi<{~G=zapl8{kuz;w)!XI1wd&Td2{cK7jO>u`}1#2&v=1{ zb+e&`8hh|7B5KV|R7b)O=YC?VnI)6ZJVbuc;j!M~-ivxQ=M)fiXYaUsyG{ns@epJ* z{U0AsLQw02-!-8map-qMoo3l%_^RJz<&{%&lUovg$4TI!H+yc*)v+<&UtQp9~s*02&!9V$2Hp zu}8QkAHxW@3g{1cGb8*fU?KzCpz_sYig2wsoA5yJM;gb`yg||YsgZ(eCp|4vuo&rL zUfg>V@`RSKH3du5zGWbosL#S!Y$K{v=~u$CSChtqDtsWjB&^3^%&KE6RThhC8qUVhlEG!wu6(!=nZRywe8MB^z0 zneS&H_vmQ9x*Yi%k4}8|@Gaoseu?jPMj&#I0e6IHk?D9||HF8<)RS+Szr|)HOy7*P zGOn;UAil&sReNQq`{I+9o=u$pwyRWntC=POOSL4C^NN^cL7A^zAz<3z~E^s2Z_JG zogvD$NAm&_qAVX68QdAu?7VGYq=z?#9)1Hzlc)jaANnJ$`CJ5dlED3R1 zz$oyAT1E4%FAB{|QsQSXcBUgx;v-PlQQ}Oaq;Iagt(3WigI7#y!R!Q~tC*AtN^A%< zcopX$NpqAh9)<@0;Z{9I5e*K}=oP6NhOFh!^S4{+;X2{ZsQ3<*>Id|g{{WqadJqFb zR6Y}TH-v=>uis)*VX9DJsX7K2pilav8oyV&MkFCrSVt<1Vn&2v3{@auPs$2_p&P(! zC=ha}z_d^y##Ci&G=3c_R0$P6?CMbA$5_Eqb;n>*A0u`EpIQ==l#&?J< z1}*5}7q9(sXTyta8mVU4ja(&-oTo;i0yHwsX{6t3Q@ zfYV5(bt9RojGcksq(=IkM($u({D*!cjby&0M*7*vj8u)Bi|I?l7F6kSaxLmq-K<7V z2&I1k2I**s7orZdv%AyIfYr{8Z0B~iQ%`k5{ZY>5=d1^$T?Cmg%(q3uBnAIG(MKF>8`x)(6$7BhdmHX3~1zb;S{a z_b0%GgW+h5x@3|(YGszAE(bVN325|G(2gm=8%xhRS6w~+0L`dP00yo54?NI}vh{68 z_myL2GPfB$4EJKRs%rQ>U}DfpiWUuGhx_Yo9JllZ(TL&GqGA^rW17>WW+4~Gv}U1I zuvrISJVxV?I(}|z`OHDSQp~wpqi4W0%~#LuPo;fphWIQ76{2mXt4&>Dc4kW`}3o@xog|ILc5nOYSo-Iu?b-2Vs zLXTHlz3~dsQ<|8e%@E5wu`wDxhe$@?8!?9|wKg|fQZ&wT)EAdfuA5B59PS2D&K>pj zJ=&lA#bKkae`n|GAKpRz*Cf=hZMG)$>M8C`DZsc5F6V1pjLT5tbHv5&_`NH7{2d{j z+M~z&6K#5M9{%H(5O=X9o7BV}9pd%UBB7Dz$`rO~{DPgwZ|`LMFua%rl3>6@$`s~Z zl7MUn%sa*)CVqU4PpI?w+=TdO3G^a9?_U+rYcpcy=cu>@)rCiO%D9=I-G4*NZzzx5C0syJ)9;PW zRhn82V=``hin1TYZE&lW=?N9A9LEWBw` zkH515m~8w5#n2$kG#*Aum0joAV@085w6U-r{KnB@jA7}ij#DeFr7|S&a7a|BQfDa& zZA-GjcHB!F%q;WNQusJauEk$CTx%S?D40g@zHHsliK*LSeV+}Yf@Jnm0;^>t6)Qw)aV&^S|8c*++f&z zI@XwIrTc`U(&kq6JB(f0j+&PQ1M-wm9`W57Av4%IJQyg$bzH5uvK2t9w6&yu4K!(D zVPQNkJ2Day6Nnb&L`M$9%Scg91PS=wZiI<a-2*mnB)BwM zuryMz#6h!UiL6Xr0KCuy3)B05B&N$OL(O1XeGf4m2TcEllwNAl_+?LY_3!S`6PqnG zf`1bPQRT8oflEiZrXjAL1v(aXJ3!GSN0z2zSHX^S47k`i<7vU3;pforz7EhkBoVy} z+e7bC?6=Zvz5*#tJa@dm@&6xwHvu7we5-b}L%x^qa`1ZOjd$!HaSBUL{9V*1=Q8fFT4*DFkr`KpU4GYz#kmFgdvdyXEt>Nf|<#=$VNK~(*e-p-oRyAciC9*Y|o2^HX(Yl}+g|vR@ zeTl1IIvVe2{~Q8v5B5E(#D^A^4UO(2NnQ!Xgb|#YR$laU?PS~qJ9}cWPn`r42$eeo z!tw@3n0+`~%^g%;8))p&n6{E-ES;!_%)i_zt@MV>)q}fFHmt+ua@t@1`a6-ZVqsz~A>YtEY zSl5sBtJ6Bq?*Rb+V6Mk+Ns`}8IQ-5=TFpUtxllFv{d*WG9q>Cx_{}nH`2CN0NhE9A z-amby`CW{a1`Z$&zjM^=9EabRX)v1Kuqu-F%Rxdwt|9<(mibE@(qjdV?lOOAA6ZQ7 z+L*1~PgqSqwu55m^ z4&5@*=06+NrLg%|&V~AW83@wm&qq0Ky@;zf@-SP3V4HniSo8L)0?f56p>ceumjQyd z>Zc-Qt3}YWUH-ps@&C7`>$&_72>-Jhvw;G4`Whw#<(;U&<*Zf;% z^KbX}ztO{|DgD~@%Nj5V#8fNZ)kjG5ysY4$vsFh(Z11_l0Qsyeb zZr*qjGfx5L?rz?seR>6}Dht-SYP;6#=GFW3Ztp{82G=Gn6*N|Ynco6IE)@hR1ZKm6 zKT=SyU4!-NZR6l+!Y#Yv|_98Y3{QC}l-?3N5hO)oZo$>4g z+u>h7@~_3=-!NpiZIm1D*fajEIUptf1^}Eo5#IHV`1i@=l>B@Dc87l-Bh?=Npx*{w z>e?H7s^9K;*P-uY;*qiY$9)rR`c5_U{kpeB-#Y0Z+QD%w={t(K*gqfMR4@moye^9+5)6NQ0}(|{ighU z`klSSq2Cqot|ZFmxf5*qtu*v|Dytp(4JQ5OJM`O-M87Q+dq%&bQC$l9MFCFT3j{s- zVe1OF0E+{0>%^3j8AK^f$TN|$Bop*Zvd2!@3>Bg63Uw!pd-|NHE^b3wkJkYMf_{Xy z<$u`Zl|RcWpT~4bCZO>dTs&b7^y4fSu7T)6)yr1YgF!+4Mw1M{t)4?oJaa)kq zcup{|oxQq7e?oqi{CxS@A82veF|Llmg>#AWbKpg`{P@4p`fd7t?Z{6t&R3ZT|b}lm^!~OXr zXAbjHorRLfdFC94oY)6LjDfvOX_+QYb7M?Z#$Lm(GxS$UE&2*KCdGpr&Ln}u%$H;X z{BJgB{1tE~jgM`|2Ivaw87}7XS#>aL{)mcWvPnT5oGb2hqGhD2bO`7Ko4fp_F~zZ1 zA>gU1zT6WioxW&lM6UR89;ZcQYqs_+RjVtJQ$vO;f*Uc_UU{I8Y=M-WpvCGe@Yb}{ z;4ot(E3ebLAX|JvpBjZGrQ8MCcq=F6xj+|&#OHX>%7y6rx&(bRXJ;arjx_f{qJOu4 z-!E0ea~ridw5m5w;)a6nu-EH5bZlC|jv0C%tl&s6j#ZxT;7J&ut*W@14PO~0YS__~ ztX5SB|9_z-3pXe{IZ7z18?_wxsB3^OFTCOm8sY8SL=}vc*j(No%EmcJn&08Z_Dej7c4OQ~q*rkhhH^=iuma-+@A{uEZ1 zw5?l%6op3I(we^GJ^B`5`^VYmoVzx-o$7mSQ0YH${&`TJ67=?&MkY65lO|=L^i56P zsrc*Y3K`UJenG6_?a|=&#-lKp=#7J5_0E;6y9IqOuUyGr(;phUMT05<`wR5;K);PN zaWVfi{y%v5&xsF$Jc)j!=BOD1;o7Bs+=`sYC;IX6H`tPZdWe6y!!m&T^@bN^m-ZN3 z+wftU$V@apI}+Q3Lgml%H!b51<;RCAKJ4sYwWMdzx2#LU(>im;iu@dOnT!>AIYZtY zUZ1hxrMWLP+;0FCV9!8iZq8*H$BoQ+;M=-UH$qEtqcr;j9e+#{v$>LLxP-;9gB1R( zjPPo_SBISI$?W)$GBSJp-k!{c**e*}$b_iuM=80rI&V?P_jTe3xbP-QE|=JV%mxb? zrZqB5RfZ2lYaNvxlUnrFMJ7dMzuA+rT*Z7z>uy6)hdLd&a}F*ln=3Z|!iQHL$)bJ+Z$yxfN-jgph>2Z!tlc8uHcMx6*WPmLx8?6#- z*L96ZLTK^?X_C&o!KH=mIY^uV2G+-TBZapjfukMYxG;$EB9OXq4tmHvNRY2<;tpR| zA!YbFgC8CJEPnUn$9jCdG&GyMlKWp(Wk6Vq0=}pg#8lOz|`zJw2-)1_x8r)5J;vyy|E@B@6q$BZKhCcLjV;`&9VUT&RhuA61nq;S(j%w6sG=g?Y zKVYI+rB51YizBC4opF~4y`BS-TvtKX+)iOOAUnM!A}a}N!`$pkF>K6;#+c?QA4!nB zmpAU*d9q}gH6kjzgNvhjjUaXohiv&&s5gYF8}SMpn~q978T*u=9|6ZcK;l`-e)vtZ z81koLn_wriNlfW=y`_ez%ULaTBGX7h zCo)wT{t&+oQ;Zsty{4=RdrbwId>{i&#H>l0={5J~Q#S%Q!I-%W584i+2v(wCB>?q7dNI=MT})RaeMRYD{Qr$F;t%@f8C&#Bj=hga zgE$bP3`tDrB{;E_KLb=eLSN5U*CLGuYi6XUgBi!8iHXe6OU3V$TD;hT2agw7C^sMU z9|!s$k2GuHV&p)iORw=wpIlmc#nqQjcTWsydi~L+R~C3odTk@Uf+)KSbApYY{3@wb zp9cT!FVp=1T%O+xxiq>0Hwr1Oz3y`n8`j68uS zYkc&RuNm2ecSEkp!?9+(%k8dT?nQR5!Db+NImEeXP)ntz??*O$D-3<7k-igAf5-G) zAH_mKT0O`RgV%SbnsUEKVsnQ!%nG_BbcUi>)oeg6R{cOSyp4o!#$!}|BjK4yQ~shc zri3Xm*|A-y=KO~F(<9+h=8y3=5+jnx-!)pr6oh&){-_iGE$l;$xkTyRF8U}zEXJDE zdOXI$%!rY5y^3TwjFqxIz3sH7MKduk*Sz&-fVU@KmzuX9Tua_^_5=;I9S=5d(@~P- zA#Z<$G^-+S`y*}hR`cVq%PjrC^OL)Ce3J5Bwnl4(eK3cFDn>>4GoOE`93U&sWO&40 zq9D4&^jw%_??)~inbwo#^#{v$^b64k?`e2wh$x+l@Te)%HxraO9F0yT^=qe*GUlY< zIy`v#pg+nv`rve=9epqY>Gt(Ougfj^Yyf>^e$gK^t>HPljs-T3^FPQ*Vz9ZRU!fis z_i^b7cp*EOV`Y_PbJjt#FQBg3`2)^}ZpXk#5~|}f(}5y7!vGZrdhm-0 z$XDF~KE{Wg{bTukFzPgMY=yjC2_S|i^w4lDxoqDw*8_nZ1CXQPNdn*`KOg2M@)Ylr z=4)8QmzZzFIZesSG5ebX>JfgtRhQ5UMXS*~b?0c$78oDOZYBat)u%rR0w5bOBq_vy z#DrL9zk`JkY9X>bK{O17YY(`$u4{JYM2230`6`6M?#4uklBX2+swQk#4#ObRb_l=sx)?<`te6;EcI(t z_+DP$6-F8=mByaQ#*Wf?i$WDijXeyAxHGRoDC0DiX=!Yjsmd^&yG~;@Nk5QT2J68r zW1boZG+^&AUy{A^>{V#&E5O~Gc{#foPlqa!>dQ`dWH6^lq4m_88m}zx1BE0ONaGT< zEV*ejHlX%`4G@~oCh7x6jjciv+JX9w5cQ+IJrUIT9zj0BdzOkr^BK~#z4>X!>8Bqw=DIT*&0<~evt7+9}iHR5D>kr8_f z`J!@q8|q46ypFF_Uur1O4K0vH4I~N&09lL!X|XCkN~h|DEO>=MKytjj1I?kmmH_Z( z0jRN^U5M)H)&1~~nCec$*K*ZG<1=e;XrWY?&I%s^I6&_ntKy?nSl!d9P;yLWg+TQR z^iBSq$UfQwnfb7|JMdp5;Np-8b&dwtBNpbPG_lA9Cpiv44kKa)yJaAI!(2!~<^)s(zZ!mN2 zfq>}r2Byi=xm8S6R*l53(;IZ3+a|Lz_6E$#1exCh8BDvGHEG)Y*c5b#xgDm*xL62)mKin6C?BAtu$m6LCn z?nAthp1p#;)A0Xn{GW#ZlY0k! zkXio2#iczki{6Ub&=~ysc;>!Uf^%S#P(Z~e?bvy8ur(w048FmsE`yU$N2)34WUlaWPVw~R>03sxZGH0N&;QP5H-&dCWfS?>Z%3FS2wiiNn{80Y=X{Gxi zWXF#3A5JMd5TAZ1Z#kumyGtY_NNdA%&;i?Jb`+}<;mH@3UyHl#2f**YqevAy?>2n5 z<&ZbaU+O~O*u~azTt?OEBi|_XFYD6Sqv3eK7+kBjITT(lwDvaBx%1JBZF{N?Ej>5( z{2-L90qGoT>cJEt>EJ$AKO7I-TDoV1KS$nBE98c6{lE@>=?#VI;0I_V!P77X0JZXs zILA>@0;(t^BEs_IE@ zflpWaNMi$~e`)AKkipDCy&zSjhWynub0|Ml@i$UM8UiYZ+Gv;$5QNB9C$q@$0-rp;1WKBgnre zS@zU+lwp^r@yIkm&XrVU_zOH6c0^+Y&a)#pgwG_5#|g(7E=OooY)gk zN4lB}P6(V4I)QkyFZ>q{?fM_u>ChdFiqK^;ipK6s!M${OJ|lv@g**`QS% zX?krie|7d#Fal9|OHSz_IzG__qU-|YKitHCa9Y>mq>%Xky(mR`{@d)yb9uaw=P?%7 zWTBQ_Ozb#>-t-Ktx8M>GFQ9In=eZ&ZmWVTfS!N1vb(Zze4=z!bsH+Az6WaJ;Aj(;n zBojsV%x@=h@$Nzpq!lT9{AxzAC7?+z>hK-TIqa2_uXepzj{k3S$eO>dhuzHieGcr- znjxTbCt5lAB}gAnp=YxmG-}Pr91*ao$5OxoWkF8fNQ0ZAl-6;89hKimcr4O}0nr#A zMB*MsL6;Cq)g(MNKEdUN$4`<2bHGa~*jp;-UX~?G8FKgvo#$ydKsghJ(0zIgG1#kY zVyIF?d=e${`X&+auCXdU0RmLX z;c6B|^qi6O{7JQo@frwK=1I}pW#-OwRRC!C%I8A$ z#sr720&oxjhPF!ugP8v`T|rtb#z$%4F*U|FE3ec~pJBkS3gD~A`;I5%Yxh`~uOi`r z_+>vhTO+X*yQ7NKx9eoE1_^q^s`v`WQJ7D1!`$XWQLJh?z7(tb|14e}WDdYB7Us)B zRoB<>fF$_?_6W<=r#Kd#FQ1PJn;8f~-oohNFAN#Yh`nIQAXOZT5tN$p)Q@COAQod$ zbv&D+E1^(b_$kqkt4UB2WYHKhgoz_{0_XjnhY;4Qjd9L`lu&LO02Qf;HxP#`SU<#} zioXa&qjBhoH72A0$r14*7l=s(G+0_K0l1L=TaHnMd|rWPV7Yg!ijP9+2cHp2qlDy` zp>y;w&AMDac8|qKUo}oYVmu^U)ERhekWJ5w4kdlpxI_fioO$_|--4W?qK&Q*BL4wEfM=!P*#aJ^3-AWy%Z!EjD8hZ2 zMlW5R>fpHm%T|T4STzgG1W`2k^HZA=e?O1r)h2XrSQAg+f!0L8mxgg77v(B}TQ-4$`DC(>Ei1^~9?t`$`dt^91}K>bvxstFD@Sb*XQDG&|@!@aUi~*e~e& zk4g7L+N>uz_L~=$rK~q5rO~47V)f%Pkv}}*954hCIR7wCa5fVYZNK%p!m@8R0v$|8 zveA+noY8X3n^e;giu~jKq>Gge(mmigJW{=Z=h6dS0~g&MfZYL{RpFJ)BA7-Jeki6Y zOTN$`W@-?3IUwpah|1vSm`Q(uQ-tB);SFZmpJNd{d zNa#H20+$|PG{`AB5m0wQ-=Yg}W~s_h-gE&z7pb|B92fpP)$oa6L7~`Q1@2Hqw{B-BfFWK@s zwVSrbE1?5x-UZ&fu*cT~8)s=-oSjyST-xD6^~1nBx_>@}o99!`d=AqY(c9sED)_X# zA?Lfz2fsS|gQ2rmA5&S-NHujMsMRNuC|YY?5MRhdJ)$gBp!x3 zp=z=95UX<8X&K=MA#=q1kGiJPtN3sm9x%R746V{b3C)U3fJRBU{9EuSL^uSTkPh_~ z@IoS>&RDL85*GM1UYe1(8qdWl4+6@%H3aqGM|viG0xCn_>q~48YJxi;JOSAS+?FzO zV->j(<8LIk62E|v7Oi4Rx_=PmHCUEY-SNmayg(~b4DR)41mCR3n?m)ssd#TJ{L)K9 z8>EG~EO{Id0w9=Ge3TZRtQ(fDGMyG){*<&((Wp5SRhbs@xmZmoaat$;CM9pp7;Tm5{)o_BjF_)jX*TU6!L~7@2B%j z-o=uazmagY&bwDM#uW1AOWr%@8oP3lI?89x$F#Fy3V#s>5%$Yu~ z5wk9!JLIbeONaarj1!HGV}07@gSiDGB^E$+fEiHLH<44Y+hN`FH&QiUH)Zc=m?^L` zUA+cqno}&N=IKXl2N|9jIRx^qI%3P0Z%F&AeDmVsFc5v zD)5TRhwB5;Fdw8|-e2r=dMT}X;f*$k#tec%^i^SMgXm9qKc{Xc^aI9=zu-X|L|6mB zE8kcYtpMgwhrU~oCfdW0z8UGh=KV~hv2Ng-=$bsPy0`sPv~RFWe)J<~3jQ7emkO2= zc!A3Ghe-F+_RYZ>1<$@|v)*6;buoZ8uim+H^Z1s{K@)C#^B=4+&l>Mcv2}}e{STp- zu5pP~pl$v?nfzb5`DZ5PPlX>2K!ZroFseYdUe!(tjsWe;n5(3IZ(nSVRhnQ(F-^kD#rpzg~me~4+{Mt@pl4h z<$LVhEsP#f;*rRwD@`B~>c{zr5mPMtm-}Am-&+NRU2_(=unT*F+TrPkxbzbYARKNu zjPl%nH)kK|QJRmk;9GhuXIpvLhdc&u-i7Mc2Ch=*1;?p~H0`9PF_aUa?tBrVRGI_Risxs2Tbt1=tVf~fpPWQiDh1sk>2b0A{q z@#=>}UqZ)EMNd?dx9YL;2B{9yu#9k&G6hm29-+CzKG00l1PPok|@p`F(zp!xd ziz>S6Lr%y`GrU-Rf4j+BD|z{g@mJ^VhA|i^L8q5S2da+c)Z6chssnbcQmw^ftYm(% ziHlykuQN=_#{NQeGMMY=FA#q*)SFgbffJy-P8gF~dA)ZgmDeb63|(j&9<=g`iq)Kn zlJimbI8dQ4($loR9P)CrEibe2netMKtTowq=!Cq4tHBvaa;UEmc3zSC?PSfgU}dzV zGE!1ux?D6^!A{TXjf&N+H|yarI6E4gjeU5iP_vXN5r)^FhcIxLk~-Vu4bQ~4sQh9l zo-P3nF;%24nkfJ=-or|Wt1mDZ5FmFwox8=5A4?BsBJI+4o*IEit4Cj~=M8s{CMoBk z{UBu(9!Sb|;tlS7rPbg3roS~o5Nby5ntp2~SPk+)t;E&v2hcqHeQOn49;_===iMZY zG6anA(lbRLZ!B0{s7C0Ik#HZ9MfNsFVp*Cja0>QCN@C71p(De9{HjO|z22b|+!GhD zPs9pl7pc!~)Eto@KGCX7l#0j(6VwhrF9ukF$Sq6)QG)gqMN3q%`f!GUNUzLZ#_`hF z!*h}sg@!^nhA$eS&B|KQ|pmc0Cp$O;zn!a62{im?NX{ufXsu3kjIAA*U+SYGwt zBq9R~i&d-M`Vswk0w25M5h#M$zNi>8<$B8%>4Gg+v(?A%cq^5f5qbj}Ghhv|TGiMs5x9$fo`s5GN!9ROw{?K?RL$ID69>W{Pj z^IK0|%j4s?zO|?Z*S~kBr~i2o$PQZVzY+&Cf`QU2+3nH6aK84e6LT3A}723}&+LUpvHI#RNT-7^|oR7le^u1*TzN>p<#*2PD0H(B9PIhy1g>ag;_8KHupTyz!^(m> zLy}wIsdw6k=6>{6s>Yo>iZVL_Ejt}4w`F>cpyl=JJ#XKRgMrfOUP~>mg5nUp zNcti=Z0*H*kqFJf{ShT@b1>*=4*wGoudU`}rEJcW-#X2ihE#GF)b07rRCj!ocpFLg zeLk3CYtPzXJs8R^r4MOiMfC+f7t~=nwes{JBFgBVqyGFRs9aJn#xWQZXqbYo7+P+= z&f?c#z05A;>ll7rWxig_uLbpDb<5Y|__fY_9hnT7S~s-bd_6K5@>jqww9$M`ONLB0 zw0lzOZ+KAC4nmY*c*6$q?n-fE9MoL6_d;6%9=VD_eURPW+Vb^C zXKM>~Hzb7#VI0)|7)G+S7^raFT|Gvr4eE4M2iNm|l6J8y1~~OkAjn-T45Jg;Vdf$O zQNSjd-FwXryK_-khbrrK}h_*v@M#h_s zC+rt-=Hr;=B%h_a*Da~#IpoQ6NAph@l5(G?i)qtZUw`lo@5@(@QyUHt-zJC)32n0I zsOOaZ+)6Ekb^U+tWc>&r?;Ge;7*H4M3L$$$VeLq&_?>Gw;I*LD*>hd{c%rT=zE3Be$s{)9Je=+nin*C7$=cjUwHa|#;*5x`Yg z*dNkbq#ikq(#b0cwOG{P*;QK_|CY|-Z=*d z85$}JsDQ3a#HyqTw2tQIL`LUCa|cH91|ko7CY%He+-uT9BO`~x=7DT!5X00f*bUGD zz6aR&Ch>PP>1^}&l@W>j-HhiX{@&Z^_5#gFK-%e7)wO+`Hk{qM34(!b3Q+4!V7J_Z%_woJUR0+1aTdi=f1r`!HG8*~)et2U4v+09! z%*)JF!>RP$r(AW#|5Xsp)tv5Ws*A<#EZ$oPS4c;l&dtSxpy_wdCL7E(Rg>-?&(6FW_hw`hl3wo}Cr4prHIYbR-EWL#ML*4wn6Y}>+$e*b1qPfGgrqeyn!k_klqXwPs znB2e7w~t%n=(Fk*lc~{GUub=B`o9Ou0ZhQ&i8MMH@Z zV>b+o6b^IJBO-+(TrF~lM#AwtqCMyz?{-ceFxWWupF3Dzfa|^-PEws{8!%7XfV4u> zBZy?jVLUUEhfzAq8KRHS1=}+zrk^0hddUv<1}e9ue{TPd`IDQ|;rF?@*&Texs^q5& zu=or@t1mZ@De3A4pp54T*^;iJeBy=H{k8S?+)$0T85e*r)^9M#n9F+JsKb`QO zXcvCiz<=c>8~!z^;X~ZmcHRFN=Q>Nrxh5am$j4gWY#Fj}2+6OoC_+;NsAp-=CjR8! z*K}%p5c#hJI7i@NI}h;Ig=Lh;RGY6#aaYFT!9pri->}ZrXH~Nxp&B(AV$??4=9)T0 zFw76=f&P7^S0BP}f&X^YtqvAE4FYR}aS%?9lEvjHSsYEpQr++(|E#W!pGv#a)t8OD zOIpd5t+@XdPW)(BtPMm913TY@2tD*0P=E@A|4?Kt3=pQo24M=7i89cG**#Mes0fMc z1GbGP5HUOx+PBJXUoH>N&sttXvt$YJ|5rRIb54g(mJtWA8kw~nV3KL$M5jFig*Enhoq z`v0=>l_jpj)gR#Qm!@t3HRh+*osFA}#NFE9NF2nm7Y->X-V3XodtnC=Q3x6-rR7ZX znEr?W-#HD|64!4^Dv4`6&T4JS@yG8H12U=UQ9RAnC*|=8B99Adup+%{d0b4q80Y-v z3`ix0^5OaZjCu4_s=M~`1Zk>x@ZN^CD&iu`=8S9>C<<+-_;7{uH=~VrxjGue^}dT7 z=_pt%_7!f}UQ`@fpCn_gzov|FXAWd+p(A4piPhYKg_Q+=cW73!*hB|jERopqpQnrk z|Biz89pL`}IJFXpGxEVvGE~OPPw|tV2<`{hvj04mv-kWaacZ{RCJGLk%B}R11oVn0%N67}H< zoKtLHALe7Hm!l8Yqhz8!T-V)Wx~C71es1^mVc~#1(}#BkF2KQ62}5M6bb<8?LrvuvcrUA+1#h#UN# zKsj1uz54G;*J%+gs1}V^En4Ips0Ka8GMsSo7~7g->Ayve7NIi$`fpKX!K02ADXBL4 zuUhLrREO3-nymi-POSuj)PG#|;Oz_WUP=^7^#{N=>ryzTkA)Nj)hoc_SsV*Y!}I*J z4#zu8mjdc&z3I1}Y%hs->#6>GH@08Co=AslyS1gm67~8so;D>Nx<(2#9nSaYu%s;= zntx@{A;mcGH=7Q!{8J5WxDbzYGf;~3qfc~k@B>t zQEqyCO`e~p7=PD!@--*UEjJQRDFpi09Eqo0Ntx^hBFpuKBhMkF_V4OZcf4!HU9-ZI zGASje$7gc5;1b(?E{(CFA(Zod;u72Zqe){E2elMsMBH!`foWDhS5lS1dmLiN2-zGR zXHrD(^`~V3yC-P?8w}{`RA9{kYzQ(#4M&Uo!%J|FUc&(FCLjw;bYBQuAfoTSF7jjL zmO&%x#L~w;ySm{8^|Qnbt8?Wqh}H4Nch?3Q??X?8rxB-SN_*GBXiT1ZnZJ1fxqSPYqo}ar+JI}g9vVgZ z2Jc=Uo*&4#^Dz(%Z^{`vHT*xq7n3QHkIPQ#aaFf4?tEWc##O5o%e`(P;kL^etkq@Q z(=Ow%DJs-AiE;1rC*!!`5C?Xqq8Se3m}WcY%1*<|k~Q@=(t^O)w;D&B5Awy(jKvyXbBLnx>K=ORweUJPn=lO3v9=akOy5d*-O5v=%rLQT5$71ylWQHh7^PdD5e2WAZ zP+2YzWx0U$1{Y9SUVwLwd=^a^roQ_ZeIVE{b2I1-K0tbKVH_WPrTa%?OsFR+u!Bp& z*75`p^#d|tQyNo|;B3Ra#=BA&d@motEhRLJp{>^7f!Zoy$Ja!k8Xio)85BfJ>ej~Y zQ2Y^?afvQNZ7=k{&KeKLa{5|b(;J|7p{RuU@o1rccu`>1#kxP+Bxrt8lOX8qohqNT z*jL&Mh=HJsRV`Z|tmY)L8kM1|RqOj6(R%o_AU%HQ0O7B{@mj8jBdxY%$$B=JHi+{L zhAg=rfIutuf>_Bi$<-eq4EdO&3~sW<<1m#IodeckSc|JaV1Jx|)o&ZRILNDSkYDdz zTYNG0uHD-&_1?A9@V>lm0yr=VDLr23y{Su4Y#DGE2AozRU3wLFr#kbq+iZIOQuDJf zcfcq%+b=pZKf7zh9?Z`!%%yKg&XPJwH1bDbKRd{qJR4 z9x|oZMS|Pm%)+e%xYYH*HgV|-;LnCDYbZ3SxU$UXhDD%ERdb#@JhJSy0({ot8u3$p9k65@{|EeA51=PwVn31v*MHt?ePboF7f$~`wa zoYbal;%+v{{5=s$oAM|XP&4cjH`pbT@&m^ybbWIDTGOZi>(`n_C9PP@B;EA%c(4Yu z3x7H8kxaH96X<1PSfJiZV1t*}X5+lUxI17`h!^?aeKm=^MPT4t9(N?DDH3eP85Hap z(!T2Qnd!bV|B%|oD@b@XP2_L*QQ5GU=o3x7&e-tS=i~`R6eW8he)2_ zbpE*E1ugI&P!k863e`3J{vUPM0~b}X{Z}E~i~W}?4N?EF;~a+`0Ge z-3u&#-sksueLmsry>n;IoH=v8XU@!=VRV$H2;jCJ^wl0oi!JHbLTqc_rMvtRpdI^b zbn<(lt^YKqAHch} z;5pNdw%N+{U+v_&A888Qbxv!ni1e3$5!R3?{DW9GKp8-z)PAOaxGDBNBE9xe`GnQ~ zreqorN`2x*gmRUQ`1%;x2sOCzFSp13KGJO{l}(lW9yI2^#n0LwNYiD)4yH><9n(BC zb_Ji)qvw#ZM*oO;j=Xbe*OT@j7&niI^si48k3iqCa*V~vwoqa*v>+PX+aoR+%8jjk zhBD5Gb>tl@btowtnn&>Wy~RTMo?53tse%qn6KMQLwociLr%W~3=Lut?G7yxEkXBB_ z#JCpmSWtZfgyvB1tyo#biq5@#z);u{J#qM^)+07N!S*_D`J!j|=3zWyu|uEfawf~z zDa#mzGNh?oF$t#f&G;D>vl=UBebKs8sVc0T;oK?N>6?+a7WOfvtB@X_Hu?4`w@sfB zzMDz4|7vslhq1q|d>!_+wl+c8@SI?jr~Y*aU?sgOkK=`S6K7_W&1^V>k42*u z`*7td-TcWn8&0~}aNJp)DHr!P8OE0V$}L@MxNrp<#vfQ5Rtp0kL`rOEo%g zBJ#+s0(cL7^|{d>o#o#eN-lkE_G0+A7CvtDM4SCvt9vPnA8wNN`?vNy#uEUme=7^6 zi*ca36a8DfCPV(!@4vw^Bl)*zd|3Tk(+gYiZ~d@2I{((fqiOhe(7!cvPh`g}7oR<9 zOw!uy-`d-gIX8+cA@h1P)Zv2osO6s3sc_us@LH??> z>*6s|+TpJSIAo#>9493Gya7rA`$+oIaYs_B3^v@Oq1rX%ANuc-hGq>gvSHr zhkhvT#dCi}1~mF&q@)oo{Z-fEvr6<+GTP-sI^171!_4mv;qTefS%Xy5I!1;%^>`!}@|3g$6MD4)K#rH6js7dBTZFv49yI~|y{;dAwK8lr z>FZJCK6TP@ZD~x+*+|2ikX5?hiK+&yrSKE1rSQM$vAmXYY8+!t0PBx(2gVzySX}Uf z(f{Lo%izwU@v-z_qyKGC{~>%S4KXZF`WE9O^TDy#k1(M=t?Dpu;9jRRzQn2)rHWla zHF9lMwJOElhZyyPmQ}55QM$MhR1@l-O)V!@(D{Fy)_UZ0Hkc?ngsVb111WBVR|LFe z8uQlDeG+T^8-@qGYlE&bKdq0HL6xMq%j5lYHx1rqVg2AW5J2k(ybM5X@Xwm-$U`vn zGHC0$!hZ`b9ngXgsaCb{6Xa8<0e7Klo3}9FT@!SzNpY>!!cf2ey_w}6X8B^#AGP5d zTBN{LK`510YB|9Ri7WA3vwaui4igK@FYTem9tHy2>oxfkFh zPQbk&=v|QFT{Jb0c5p2aN7sW@-)WNj?mHy8GyrJ3pn%MB8ZyiOs`WqAiOKAQ08KR< zSF2mZGw`^eg4X1rNdHQC)M!)lm8^UdKIQOyC8`7In_MfXCNk&4_FwVw%AN@7tt@2a z4c{zoSz?S8?1`d?Dss2dF7&1BGTO^$-DkDfsZ1=WkLBE7Y8j@)yS&(|@3Vr3UGC+R z`>d+}!8X;imNi2ciW43XNH*04#8$)_8;(^`ru-`06=j&+~a=iQaCfpVK268b(X+9Ad}1LQud{!F>+8H-#6QJi=X1d?27`>bf_Vw(eY zk4E(UXk?cM^s|sMb-d=2koxvZqyG!)3eiB;x1@H~os3_t>RVnVB)(9@HZ-^JQ)UvD zD4}JZMs!U0!`QVEU&Lzk_iqda8a)QV7(_3lDs)!bt%KE-@^6YC|x9DVS>2c2bqm+ zC^-4N0YY3!>e5}Ak`Wj0Z$RA=Veo{V((;J)Szi@LRm_XSL~gqc*2Xne!1>Wm0;a{g;=(j z$Iv{>80v!3MI3sP#!z2m=BvC5=@hn1>8*Y0x`@^`d>z@^Lg7J8AceKM)>_<9qqp{X zqqT*Rt-T}G)LN2VB>|Mim)K=MsbX(|rM0n20uE5Xy5}F@))rV=+Y63w~e-n%vde{?~!iO!~JS_i5A0c^$T?Tt$Kh zfS*BQkX6}&uM9pLN?6=)jI^)~)x;+`##jkka5EnC%XuzTSsAkzO1O-9>n)QTs=*5= z)9?+|*PuF^4b|mc!O{;vAhDD-d+`v$VVu~22d+)p%^S>&3wYuvoe{VGo33zd)`^+~ z9$kTSxKS&qZn9h}c}b%Z?-7cCmNYJfPo9@FD*YqwqljNnP3-GMnY7aaZc=d)_6*P$ zc;K!K#Fo@1=%aR1Y%v%81l9O&n#V-y*7`1_TSuZ}e@9B{R_N0f{MGlOpmzGJueJEA zdtqAv%&n;W)yFW$TK88Emd%Ki&zm|dpFCs#xhLIQFZ{EFLfSoFn8j1DaaSoWTV#l5 z*bVQ`5z9 zApCHsyCw*GkO~7?mWSaq_XUDmEk10SEe5Eci{Vle99dR zwANZP0$<`^R+`9P$FNyPtF`&1xZa-jIr(SR#l+926B@Ga_#!goxe>89e~caeP3L)l zuMgm%dFxg+aum#nOHGe=ObgqwRb5L98wE4tme23vm=?BatD0LL8*p#k0e4_g4&ut||FLikMtOZ(iSoTzgTU+^;YV;3U^PR{7y>xf4a? zjFoFtDOz!{4!+Z64c;TJ5MyUK(l_0B>upnRFjhHGU)Xv-P4lsv4h-9vp2*T<%q_^o zY(76lmPwBzo_P}jnF;<`7z9w{O&e1ayVMTEb9D{{JNadm9r-C#U{44jz7Fsp!4h+ql=QeMN66y4)F$B`FFfR`GdWA* zyg+7bZCN;gGyj`if5&LR{hf)pBH{=X7XNB`BF58SP(}Q!nV1>#%am>T$6&;hoQ%Th z6((d!1+^(e4lqq-I#vCO#eo;ZXP57Kr10ltf3ka}frPij)nKS3rq^cuk+--Z zI7gg>6*+8AL4DA85F;!nCX3|R6qJ(O+;${lJU}|@_J=D#)Mu>E^kS8OTpN+gygswX zz?aUSe+CpUR2xx%rv(7(CQMy-mifouwny@0g?Ou&c|rmeZ1eo%>qg>Xh3VN^N$Bmy7(8UR;}gv z$AH%6AEWV^KL5A^Kf=|QwjTi}TpLMSV`4=Aka0poK0&x&q$Pw#ayrqXOJlGn{n6Y_ z4itygavJvk`8|BtQz`skg#M@V#|dHQk6|yX9RlGSz@XvZgwRNnu0PI0AAn8a8?Ybe ztsB|&GtOJ*qyCzuB%~lc6B7o2ZbB%#2T%{C+({dl_z~&J^tjOIE{6hWhqsY-k1;@} zxEt<_V=dY+C>_9#Edx!s4~p^pEfU+kzpwwcThP@IlUN|PM%QpWfybG-SL2QR2WWm^!sJ2Yz$4+T`ej>luoPTm;{%HL3 z>fl_I{`uSP)aR?6>7W1l`EdU{QPrG(-roR5Vk>>PfBv6a%)?sw=lA&y#olKB{BfvA zKXqa|tfTVJUj-Tv=gsP$FZ&I{dK0L&^Uoh*D-qI2{(0^qY}RegKcB4p^T~Gpd8~he z0Jd4@Vw96ahx_N>`DuUq{PSmgWM;YY&(EJ{Xwo+O=b!r3gryzw&wo=uT(|SjUyM4$ z<)Gc_pI`s&VK)BxYGi`$hX04x@x0FU-*)8%Xn4SBEsKxR@I&pe1ojE9J%i(F(iC$h zJOa|E@BhFM(`;WQK!jHAzQz(YhJ&nRHODJl&5qSC@JM14Iq$|06D_6ePFaU zRKe$VD#$VAs=y3o>h*X=u_9tipb7l5${l&BL3epD6AmIQ*_8)VbFeQuA6o|3YOXDc z1HU$ySQ7ADD;bFeJ7f&R-WPP2VM9Re>p?FRjMx-QZc0aO5Fr8B(N;|^O{y1X-7ryu z|MCZ0KbZK504p2l_7hSj;Z^e0>i+JDG*K0ca7PAEFB+Fe-Z|_^;QifLV%GL|FZ_+C z<`bxN*aErHTFM{6c0B)^R zfdt_Z)s+VZb}~4AH>xq4bYxGccs1k>ata(*!@syM=P9DKNttq(|B|hunR0(dF({Fa zAD*8Ot5MgAN=PtuqBI%hX@?wGk2Hy-Us>WoIC~JI zL)wn(>P$itN&ifZ{tZvIKz}~U(CD8ei_@H#R37+83Q1bEViJ{S-ml#oAE4_R=U-%>AM%?tUAMYJ63}e+Fr9 zag+t%S|pz#Z1ehafCiex|3#|=t~1$R1?K*WS|28f6CZC@AATat`mkiWojyDv=uLz^ zq#gO%U7c|AQ zmnoJ*j;;AuHJe{xMT27&%KH5>V>rKk+1+8bQA9TCO0g%OqztADjEj_Mtft`FCu0Hb zfkciO-z3gQv!wnSf+BUrEy>l!!^tyr{fc<^W3IBqySKAmH4~0vSNY2LfFqfS#4E9y z$%+j^juOO`_z_b-hVl*R%K`JS<#My=cQ(?n4k%rW=M>-y?GVdQ78!-S$6p?U+$;{{ z(V+*l>qAed_lk$1PD;PGs1vmpXaru!;P>fB(J0Z*|Kh97=#OL&xfbd1X}8jK?$myT zpGu<81hOm=1Z~6dh}Zwc{A214zCqMk<55=a3LB5U^RUL{a~z;flEXt>!uCJ{^wS_% z`1=oIqe#r zklVR_-(j#%;<7|HRWnJ^KK?k?BW~yXU1?4h^E1j|q43)9bzuhjgij~?sS~tXJPW)ul zCLt;KMzS_+!OO(o5b6rKaVrzurN?@fCL4*UKY^v3JFAS}!4fCaf3PgkY>={iIgL?< z-~PHpUd09qV}hd}*~MTUgpgm2I9|}?pVgEce{Ug)4>&b@w!-reox-Jv7Svu>!qPz- zw&AodtU8%wRwe+h;^?92a)h;&x}%q6Uu`tG#pA z2i$Qr6X_SInSBZkY;N*R-IyJUCh?y9UE2rwy37VKno>F$SOT_5t-5PDwCY9Ga@{l$ zyoy1Z)TeentPbz%Q5PAVjYyAo-!wtfpJQlyBu*j2(=06;-`XI#6AbV5YhPpbf-+yg zzXq#m_>z8zn%|2xe#hTSa|R9_tF<|VS*R%BcIwQI+B27?PZN zNDhFM;`u|D;y`e~>#W6vwq}U}|6yhDd&&PXivPH(j%+)Px8B30449v7lh108<9@*E zt0}*$2j`c4ar-Myl6QsCRnV#zYaFHk!kT6ggVnP*M6jJo5~Udv+UW2faj43 z(pK{c=@;+L6mMKU!ZC^zS9M+jdku*LH_4Ll9D4^Sz^%JF;NEWH9hCM~qJerJG;Bv7 zZ1o5P<0W-ln~(hHzI>Od?bPWkG9ax1RdILj^oWB}MWbpomqkhIP}sIy*Z{PKU+qNw z0qWT{@ZK8azN{W%T8@&1Zo7zM}Rho)a>X}Ag*8Zahd zw>b7vW-VQh^mxzY>!;@7pNTh3!M`*|Ou%xhjli}Im2Ae396iIt<%U3b*dZ$ zwFmf9Sih%8sYFdqu8HA^+Q$SnFt`xi+D$-1IXju@JE}}N1o^casG?IK3@%cZn;1UC zOojr88-j#DdK%0-&diMthzrNBf~KYvQAv|zX1;@zLA^^w?GQaG%&xDjw|M{%rS zs==UucPr6A>IhE1?I>bvmRK)8gTi5L4uxar3a#&%G*UP$OFOefNUI9EjWiN;8E&sK4KVQ%YHzbi?d=4$n={2InX|^JE1cA4p+mm=lobw~*raiuz%RA|NZ(}Oz0x-~ zQeI8p%9>^*2P%Ry0yh48SSqp}FRIrmA{+NX4Rz zX))HE%dK+l($&vc6E*sLTa45u^~TfzTJ>lCh?MDR>LbwKy8XWQ6KO5|jDN$dr7-^q z8%Z=l@;45MzxPRkP%@kNNqLv0{%^a-Y*^nILw1w9Y1=nAD;q;IM{g6aNINmeL1Gg) zMm%yi@q1FXG_7gk-2pVQ6`yN4*yxkb6Yw16Z2J}^QJot+VvV^R7>I+mp%gOCWx25P z@0U4f8>F#FC8Yk*A}SyHSW2mc0{%<oa{r%EN8ZrKn|f7qUhdA{EJBy}G$fF-?sp>KQ>#n12FZj~Seepb8{T)_*jK+mYtk zHO+-jm2IqX*xj@p>I6mVJu3+l#y$^r(#ps zNR`F67%oNgv^sZdcSr42&|zEy&9ew+Vrws}P4``@z9K0A5m_Q#6-;(A-M*2bvP2Zz z9R=5y@7AT>c2BZcrF(1M56|7 z7&Ob+CNJ}?(d+V-0rPP%4(@HEd$BLNEK3a3ixc7kDsCO;JlgcQKOUO|yLR0ELp5|W zwUq5OFG05bAKAD(&w)dcbnDcGzpjbH%1CF z&yh(JLI+{F3M61wlSm>iXV0u7@eOP2IMUb~v|RdxzFFPA#GF%>Ksukat}Kyg5L0BX z+N5v~4m3rMd?S5=$A75HwlF8lLQ!rTApnx zkJR=_c$*lh?Vm+1sqG&{$}}=0$bkPCA8XCyqr>_YJ8Ce0wCLBD**ulQ<8&-*YQqCv zECZ`EAUuQk5%^*n6UZt`{6#fVbuQ}h)vkUQ?IHMYme_PPEeZmZv zi@9s!YCnO_y%gnWrAT=aW_fCpzCF5meY-bY-~LUrI7#1rwp!h^hvSA(<@>XPtSlym=ilmdEBz-);B%Mo}ykI$$@pQJ#mub{j z#-hyi^)uIp$d6^2;zcx#00NbZcTYr-uW(ItNK8F`9*<4JJ~an=7gzsidiTt=koP0r zvzPamE0x||hmbFfSQ;;Xk9u+;IA@JgJ z`9hOfejmP`5@w%5{qBIkgTXMxY5NG3CN`QMQP@8f{}N?`btWU#ru>NYGZe{_jJQzt z;aw40uom0Y8$+WVxaxrR#KY@1>u=b+8f zQc`esmnJh}cHcj+s*PRuakUHZ1$?OaXF=mY`KnS!M0_)fze(`_h(q>q>;p;C^GLrk z^|$zq2SWnE5$yksN>NCDctkc+OTvta<>?4_!-NqI9;f{f*Rw_^kJah;+|UoIe@H@D z%MUn=Mu4-}MSD3R>)O1SC(GCJJCH$hh_ByOWat_T^!O$iBTxz|A-{Nxy>8lwHze$M zp3ype6OE4~uJT8>SUw_zhxXY0D>cyR^BEtRY8r0&NR#CkFn-=}~<0 zttt${xKaDT{wtVv;OQstDE$EYC23~(ei9rHu2@I$nbq-NI};!Kq1lwD`zT(N5bs~# z7gXaUZQm^M(oU0~e=O`T(oycZL%o~i2DdB_fEM~UAiO7?g@;RbAxk{XxDYK=76i6j zEybHLos2ZZ3rflq7t5zu(16KLdztTl%h+VZ3b#%ix(*vvv@2MCLt2Lh#DLD)uc5-o zw}1-&fi)Yp-A(OJS%w#Kf68M>k#39S_?x5g740icM#FQE9-l1()T2L)@rhYi7j5R; zREw(~%)c>8F$KrOIh zqf&t}m(tRtbae*|rEJUU#)iS}ta0YtNH9wBz|_&Xf-Gkha#3 zGpM0WaE$%*CN+-21vel?jYBz(M#=_Vg{T{j*mn$FMMgjin9uL?;1hc{*(oH4}s$~%Oxh7eY(;-KKg0WvlWX#0auip%&B2yS2@K)7dspicRB7Et8KueXGK>GJmG`h-UYFL(Gw2&O+9;7&6N}$W-(U6e zUVOdP_A2`NV5_let)y>7rdD21FYo%+%QNU3nPrqn^d;gq)0d)`*R%EV6n*^>&^nyH zHCJin-KCeeeqF2WHR#LEF-j!*`r$XzH%Kqo(aaP13jc z7LC3)^zzbLFVCQF*sVs1L|-g^bAQ~dm-ox7t+rRu*Jp}Rnxt>VRIR)(^zt5Uy*z`y zk$FamL|-C)Gkrn5yv)|iQ}p$pZj>hJTQfr|?|@!jm)6TO=*z}2HYL$SUqAe2`V4t_ z@s+6gckXPXG)Z3t_G)u^N3ipr^!@d%muJv7VXjdk(KiggxjaK&dNxyDbM`&(X)T#U zaG3Sco6a-ECgDv6MR=FRn@s5Iv=be4hLeofCtp$wl>PZ% zqIaPUz0ZKZ(BMf24>5b;0oK^tL`DfN zN(6V;F?aDw?iGsiFq4zctMiK{u-qFp|dv+MTLk)VDtXACB z>Ak9T0UjF-gNN!2CXbK!2wjR}S^GgUwhL%1UP^Wlvp8^f*Vx*Znay~uv3Vw58*IM& zc!y)WCKc5$7<4NKuqMy{CHgNs+lKxfWY;uL|Lb^d&|h|(L4R_y^taCatZ2ADNay~^ z#Qpk-2M>h_%Sn>*9eumjzF`sW*f6TQfoiEaCO;p}^Oo_zPz;MFDnJ#TTu|YjJC_5fo#buK}6KPxSr>!?RmTMNyP)PHM&8~FUZzDb?6M#a#QyNJ`;iXh@=`rv|Xp`U| z6HIZt5sH~Acnix_F;z;yV4+m-9dp>iE@>#fbHR=!(Ks#}3fX1y15Bd9p z={X*8EW!msE{IoYIkcKEGslsC{HCG=WSt9oeYsPz9U=aSUEn0I6l50;v{abOfwYlW z!mmI!Jf*v;M}rQ}q24RcBY~i;A)h}(2fvs5XDxSVd~7T-^Rbb5g9`$(@gd{^env+y z#8UTOY=9HY$A^iJm6X>zH_MmsN4V7GqY}AR4ymg%@sZNZ#}K88L-A;ok~-O2-*Wh8 zsu1Cy=ZY83BR&>UJ{YcMsq2Y4MBn)`V$fN{#|GHm#KcsXI?FQ;^&Y~Fjzgore;SRJ z!L;QS%JGHogADOUq0#ie`!djqQ0Q6|CB~py(1pb(U5cD0Df%b1K8dmyQFf0n*TR52 zR4CohV1O_&fYQu>Qc4w<9)-^p12jQ$<{d4E-Cm8DXNR*aQC5pA9f@j068ev1>14cD zBQIkR#36O`@o6Iir7(#RO3I19p%A6z%91Bbyp4eep$HV^(3jXDwA>R6Q92V75h;y_ zdaq$7CV+{{S1KmT>!(vVug1xj{bo)sV@?i7Q6dh+qk&lC&^ei4;^cDT;J->q^uTBzVj3~`4JkS$Ma); z9O}KA+aF8qN0v=4B3KT&3gWS=5ob>xlQW>=n#2bF6_mmP8!;{9NYPVN{Q%!IDiJqqRm~1#^tDL**X~AAF5ZnmD!- zWRNZ-l}~9Tq4FtJT-r5~W66qRUxz|W%wP}$txs7k9J>$Ih-GL5af~=>@|ddS!*R${ zP|*(rU>1>!ALKwahg5()pwJy-(;)aJ&b8r`&DA@3knC@p}YlUiT;bY8Agd$ccOojIK?N z35Q*Yu@9bW8g|g1xx4s1LS&`E3PDbU2}&QvDY|ZNxc)YkQk&97@&n4`;Ros2{DAW2 z@`Ka~^iTY&?!GtzhZQYvQqjlx&?TcaQm8*E%{b?(D+$q$;tU_Hq=PW=IC>a?OOuMq z;|u=`C5~qZa(gEH;j~`BD~`^g?~%NwX9Px#Heu^qs8{ToV+iM1Up87xmPqQb{dCuJ zmtZMzgv}62Fdztg=Icip$qbonk;w@wOfs3F(M@fjG_|y(lv2f|SK%*4F+B57+0Sb@X>R7R%gy+>jyH5UO_=po(7=*5B>P0;*R zi2XvV?yN9XSFKf*T?5=a=3PBn>$_WK%=A@QcsJm2;vMb%L;sINyVQ85 zG%>1#pB5L<;aa;PQ)lq#F{ukk#T%mi4&YR)0c$r%=YZ@AXH~YDvDFgpfo-PGbmMDX6UrB@R=GpGf5O8SP@gdbrd)!FW3 zJZseIKNIQO^79-LKUSIXV;RU}{2;cjI~~7T#g9DXL_PyQKp1TXA_M*NhYa{2Jdp4~ zKp^3RAVtCly-lTJHl>fGf57ogsTuqr70Y)#0ym{eJV}#yLZ9UDD=V^~_Kj&in0Z)B z2VCT#;V6$Lrt6XidL82N)3`iPm?`c#SwmsWNHPMMqcOvn3sKb?@Z(vQ8OHQ~(F}vn z%H$=pMRYsbALOvC!4RiC8K-8BMgY|OAzC3%P$9lT8Vs&VkN7io2|%=bYiO#29ZceU zNJ`DcFvo#}2|&X0K&-sJOkP>$pE25TcfUFD!P3d7t6*lv-1_}pr}bhMc__Upl{rG5 zZL1PPCN-}l+dzov#$X=n+e|dMSBjCKP+}kTCSxBZcqF?qFn!CI_>~^tE+ot<%lA*y zF!tdaHH;}uol{ausbcRv`WWUaB=AuZz_(I7aV8C5_dS-;+XJPG-ZSLrr5ok6(d)?+ zC+!X!y|@c1#}QvN4>h8k1eDWzlWT4RsFhPnOytDJ=sS`FM3j#yCpGOrTpZ)p<#221HlFnx3i`=sI*RH4Q>y@MfsoSBhQN_pewt;b{0kY@f(a zlMvT}7`5=cQ4%A+LOeTwWspo-iwqu#Iz&>wltEnK#b!!oPQY7kVED1$+Gzo9^}(s; zR*&vN!*014i|RlRksFls&|Qv14YztawYo3m^)AoyO+dmt^6pwft)^Z1FjnL6jcPTe zxz!;`6^G8iU)AbTZneD2k&+mB%f&0FQ>%+8pT+ZY4C)Z4pvNdyG`$ac%d^C`UpQhG zSFU-sP7G_`a&F&TF%t!&X6f1Dn#r@Jw{Hfu?{;nom?R)qiruI2ew`w1yW&0>q z92$tfmiDn{i|S#|)~EfseU#7AzQ3Rjkq+9aeN2~h#)zNlwI*VJV|)>N5mKfYUHEsO zvn#qKl#3$8Vib@1r3Z@&@xKq_lS^xu)WtWGT3JP{WKD?c+wiHmBVT%u8cG`}(UGzE zUNw}`+)#Eb6_*acZ`DvaNUGWRq^e+iGBGu$QCmZl)dF9CMKxj!8bQV<4MoAPk8hcU)t8o0rQP$FNbV z4fiLJO$@$G@4>um-%jc%I4y#w8cJM6YUHjhp{`v;x#$AR21}>B^ne=Zh;3WWJ%S*% zlaVrRgYB3^4hpWJapucd5jQED71<`-CiG|_<#Wal*UC?-w zQ6Z07_&^~^iY5>Kx+FFbTG~vElTW;o=WZ0A{}mnXYLwd`;tRJCU6|{o=laXL2S-it zZ{we%a!L}N#bh-#f}{TR-GZJ8*t$YLJvk+@J&Rp?a5yEHnd{$h7G(KVS=OX49THnh}Gk}0=QNX=8 z;9U@OEeN_7r(}$dU+@~f#AJe=ErK~4KcC0&%{QCJ@Q4^WhBuvLm?Z8c9Bp+8kKvbS z498I}8pGL0m@(|9g{CoFtj2IL(Olv#E_Oen1l_wt8^cR@44;qcFoqwo;PN9VPCNqw zX$;dkD9vu-cq>iZ0`4ys6b8j>1e-U2zE2cxP9z;rN8scdVzFGlpBqKcmX_6}% z>+~P{Z&F#J%GV_zgPI$_+Ye2I2m0o2%!??}O3;%VLu*$PdZmqw@iz3r2*$%ZGWNxM*Ba9uc8X!iCxIy`47rK5sgrHBUBRN8u8&xUeOqp8Z zO~Ko_{?yU1Yy!CK)Vn#5UrraxxHqS`E9Q)%ofwrV-twublsO|8A3_Ca-+EAQY!3+M zsj9WFTtcn2ZrQ83i*Uw$>nBUlwpL59C85Ey1d1ifc*y!mmIW_4u+B z_u_brX6kXN#&&U!a~ZP7v&0jSdkj3y_#phmRTI2nQt*b!U2--XUE>yzcFZpfxQm0{ zMJe9mIb%qi7o@lfr;er)GGPepVncu#lZM`pLsWp16%AM!$k!yHPCPpjTyX7TNfa!J zyKqdR<~EW94n4CAnxveZkHUeoYfykRgz4uupC3F_?0Q4Cn!eY-wJxYy{Q`2TR?~Se zB8{}4hNpGFQz9+?E$cN%V!k`t`c>HOx= zIJ5|^d&J>5?9N=~6(2dm>qIX+CD$l1@^swbjyq!$+m12I9iIGW-U}SQ@%1G&g zuPi1$(g^Jw(%at2gWP=`*Bd$R~PBTe8Nd4rjnEOQB`|w zJi3mmr6Z76=+!E5lXz(#pH^eYSc8TuBn@1#Z6j~}x7J8v`#1AdBlX&%;D7CfdXuX; z$xZ&0lg$73IoW3ZzZ?g-QT)F|C#_}vUuO_=r9n)FBql2UFHqGI|F;xHa0K-O-%gxk zvWIgR-;igT(d=+5GyU(|0J4br7L)ZtYC}wLinY8)vy)W zq8)(jW{b8jNS5w3XfF!*&-cnMr&>$g%ZuI5LX}|%L)Wj+EZP-p(fUvwEZS!+7VU?H zuxP75AX&70OMD^Ea01tvSy#oZ+bq66+9VHUEDvQY4;jR|m6VHSIQ16R#erB| z9@Z+>k-Z9eSX=CVN3jm^W~7&*jO8H*)j=NKvB<-l^T4`F5UAuqpISJvgOdWM&;C1% zHvjY?-Dl&H9euY882s4B#Ne%X8}NX^unmTxM%;}t$nE^(+atWNaVyE*%NVw;1~x`u z)G+=vM4sjhj2c4PK;Sw>C(d5dR#E-M%8VU1wom^n*pEh`r)+TWO zd|>IH6HuHOFwW>7aMC|>h$BCVnVE}t9powa9ICZW^Av=yA8P|Tg12ktDx2VSq;&B& z+fN$)U~9J{{w=;zW^Wbj6m-Wu#wV=5Bk!|T^OPgcCqSYJ4Ns?}1LT05TA57FrT|Y| z5s`rQtk#MCdIcz7*>fg(BpD7pmjQ4s<=;BT+*0{XWd3JL+2;-_mfPpYeYu)H%eZ_2 zw4up#S-CjwJk@0X`mV~2)1*3wZXQ1q4z>#=S4{nfiLi8B5#W-c{UiICs>s?>j;sGn z#5}I{cyb`oz(>o#RC$;cWxdBm~*f z59x^cdt`r7!@A&;i8y-%8X9Fc&CyCV*e~rF`|p1_S6Phm>$J$PHT$GRd+3>3INdSb zrfD^TFM|{^b{b~M2C_W1XkYT@^*BcLrAu?DrN)3;-=P5F7MX`nX@zNL_cQRm9*rkI zS~k-Ct~|%=?-0ZP*~Jk|&B2Ga;zQ%CJh3HGzQ+CtfP(77YCmS5xbnR>K7v3)Af#9i zl(l2BBfm#xkC<>ytRq+{F3650Uwk*c9x7kOpQ8anRyXDhO^13X%6rbfxEqY&t!|JR z1fL0Z2|%u51L?8BG~6rc3|qPg zK!bLRRTx7p{Df*jqr?0O&R#f@PZWy;^p_;{v%4gzPHlhB4l{m?Wc*mYt|zj$YVRrh zpj&`(>!&v^CDU+i(lgwCr(Bzh#+ZR+x&|zDJq%z0#F7)Hf`O$G_50TBrX4ZZQ0cP( zOD{A*x0%Wm_t@Mh@s<^P_2mgy1&fwio*0knU^9JSv6(7n0$8?yK(d)=9f|P7?HmNh zl{fBq&qy<#1aN(+cddWs1jpTfo`XnZYyH!69aFFmi+nEu_nLrrbYmKn&!8Nm}h-_c}IBz?pOeX2x`KGBaZ;Owc;TPTJOp8)WO6#Y0yUO*@^KRgzk! zbR5!Yu^2P-BLP1!q-3r{{78)>nn1nU105m1(UnI?MZ*dHJw( zDy~2fg^i9bC9b{F-8;YuMYn&t0Sj*-O+`z;$`HK91fEwTM<9LE)XQ(UQ`dBIkfVOg zmj=w$=Su~3i@`IvNZ!oFr|Ynb%sPm|mz>=7V)&I@@StHgHP zoe+z9(GR4D^|OLp#O&d+xPrRD=gr#TCNT2$xW`!D3j*&U_>04vK36JW~LnD0nKF6 zS7Ot(#$QYf#BEFIIkaXuwpXJW;AWZVfrmlYX1@D*GajNnTSbwJ+X+j&TFgM2z{#W} z{1qe77>BhnvOO)FKZn3MVPT&{=&->{#IU339u61Mcm$n)4|JuAVX&USugMk@KD^$$ z74@Hr3=M!!LTWNP=H#p4BL|19U*VsokW9w4&hM`beizggf{O$}Z_-Z5btmIjYbeAr zNzA7ST72jYq{OKn18m0mRy;28un+7$8+NWO1LBj?TZ4cHgH zk8yb(L5{W$opzbgIH5iKl&0!SI92R=KodQAOo(pW#%?C6gr}Zg#t;H|AFym?N=NC! z4XSB7-B6;4=8&@D~jEeN~Rn}2ye)(ISZGjY8wry z21Im{zi@;nkLc3wXufYMdKmIZo2#O$ZlFLs=9JFQOUtlVjQ_rIKkb-Yl_@WII-pHYw4zah$O9V+#wlK-9%}k zwWO3%a=R%K*p|Xoz_X%t6K}sd7c{_7ux>Yf7^RCRK{Xi)+)eD1t`qa1vujop#ah3W z&jReD#pQtvXH5_<0BwgQfmq<6YZ>t>-5GE#DVVin?s455v*YP?qIzB12hSb*9gf*Y z((~1I>N6CMFVkWN0ax916XS19bH-m&{#*Q5{GZ@n7C-jAU*oS{|7-l2TVpmL1K&qa zHKn-9XB|$YLD?YGm`3!6(5AJB7ljg?OX(s!$6o9nuRAY2cFtfzBPfT{=`G1&`Ru;h zXZVSovX|4|A5wO8Vm^w&yMSvkB+QbDe1AZlBkHDG2X>lle&nLy3l+Q zEuUMv-K@j3{qckDpglH=KnWDepYVh5*tq6V>gOQ^I^O#0CXjw!v<^p@t%@Q{KNEPo z1trGlSBcC@J73M34fffZfO|DYE?xos;xuSooh2$$Ni(hry08kjk~Fdey$Xz{t*qZS zVQY23wIb+VfmJoB$CryKumb|r&&#mLhKDg)nLC57B_5H-WiAf6*AlWFM#QBt9gFZt z^v7E~j-}0y$H_F**H&>9(mJeFi$fQo_x?uTeh&)Bgz(ajD*V7iWzbf(9DXEa?yC2f zCvar5da;gPvvENdAe}P%p(`z;C(yUc)JwdJL9{tssF-1an%mJarME?Bda3f!KVkDP zz{O>fw)lGr9H_X#w*q43n|nWYU5~^c^92bPq13g>cnGnJ9r|AWAmpyRFALVP?+NwM zq^^g0FW@}{bh`UUe1U6X^1Ez?Vld_MEy8rc*SLtw*K>b;E2xJ3nHr0GFSS|Q2lR|h zK5hWf4-Qkh1-!b~kiX8ttErboD#FcT%OCq_$qbBhXj-ZbcvXK(r{L9Dpuq;O?nmk3 zpP>4`j92e}#c^bt$E)+`((@?r>YK^v>5k&nW^AkQUqImn9C^yDSdJShxSQICSC@gV zPQa`A2dJAO@T&G^bkpyk+KN|M|BHC_&-UZhDH#S{jcEg3-L`*UOL%qHBokiE#t%EZ zsy6gRoAByhJG{c_Bmhebc(wNYR`BW{(8v*Z_1L{F;nf5#GYqeK8hF(QZxvqkkZH!N zgXe|e)zA1T@#+TeSUg|8odM74X+K^~Ni*=Oe;e@XZA4mcVSe?&-%WV+5q{X=)gnV* zv(5Efp)yiS5;MI*>f@Oa7adAs{mCa>_;ng=>3eT^);jO}}{X>;&ZL9bR zY191bYy7Oefu==8_?G5ZIrL*Xei(RFV#TYg>2(-hUHZF@S0mI*Irj?1WgtOey~DhD zG{rjSZ+4JngI6^e7@#c*y!!h3w&K-u_`(*iD(&!U4ssJ-Wx)UM48>+@Q!F1n)}~m| z;nh!u{B;&y^%@bW2sew{>N|i}i*h>!uRi?Q7O&1h>EZ%VZHHG??ehoH3ZT^=IB8oe zc(vo$=f!nJ8zdeE}?MJNg^9{smz&cP19zohW6~tXq zi$ihgnUlJT9(#1q+GbXTnp3dPI1^|ciyt~@L7!m#E!D5vw{60!3+?b~2UK*6c(nvE zlUno#Udkm{@T#l7CA=ERWrpF^dM<_W>i4q@y!uh5d4Ba3(k8sxf}awvZos!XUghA2 zfmf5Pcy%7V4#TUxxSCU&U-eZlTg9t+*BDy9#rf5HQRCHM6xp`<)gNPPoB7oi zhO9cZ3I4!oKiJ~c7gwR1c7tjwUVZ$(iC4$B zAFmRI8F;n5ZFn_ycZ+y6af}JCZo&^UUPZCKa8#j=XPu=_dYv69sIY&(?|?p8}8(YyQJC2G@pA=-9^~ql%?BA!OvVR9hcGGfE z`CSL}NzIj=qEGsR20Qx~rHcnab%Z{_h^l$HIr|sRW;^?LeRbFWZv*%^(A~}@@wW#X z3gr{*`H9W|o|ic(Rvi9qiwdQ8mPw%`;fGQv(*Dgg^hKNO-xFcoMXZOfgMHSb{X4v0 zEB5c{T!O{^{dRgw_V2D!>1~+(`y!XZ_V0sutNb-3GR^kyY@|*0?``-g?OzwZ)$L!} zUuW3AV`1}$t%n~=ufy!$tG?ImUj%rTFO~g^GphFfnt2}CE9TR}w(AQ|qsZv|HG@%P z8|~jKnz4U{t^JGKCj0k3&0n*Y9=FNvIBT^9_Z=}`*)`;UVSl| z>|aoA#j6efqj=S${dg6R*js7~*E?;)tE<0g5wC9es|l}s_z{j*2}Qbn+a|m^$_}rd zW}IkYJ$%54t>D!$T!IC!j-J{QUTsHYZVO&L%B3(~&Bt4XS2Jar@#=w1htB)@;w0w*Hnx#?W)f^PrHoS7< z3)}UDT&In{<|HE7SYOzt;g!?WlIYeKZZ+huv+(NWQzI4OW)WZ20lXTL(J6R!%fD^$ z>f=kH2)_i?orqVlHuI|<>srC98C{~otCK-+hw&=zl*n#cE_|PL0IvdV$RT6#}cy+!Nudt=vf>*Cq>3FqMy;Sq7X7TEji=)J= zK-74(CB3b9^-p|Zi&svda>Rb)+mPD^uX5;do90(1&e!dw&cdsh6CxGiW-)$S2k>fc zTBqREn_F%1>J*eN&H~l{WxN{uQY(1%-v0ej?Ki$772Vv?`PH?@M|RV4v35%b@M_0J zoq|_=K!c4x@Gg`t=7VZ0UOo0didR3jAFp0G-oUHJ+lE*BK5P-M4!h8VS5Ev0$E({7 zebFYo`U#pm0Wy!8yu#GNgjZ)+@v25a65_DS^D#Gmtm74(pXJGy!mDQefm22pTE4~k z)eICFoj>p-6xp`<)t;1Q@M@7AUcHUnCcIMqz?Jm4O?dT@A%C5PS6B9lRD_$w3-5OT zueP4wDR^}xXt41IPC@Bn7O3t-ys}%rdgj?y@aoux=H>UWJHJZkVKcvqCz2!mfsMnAmPF?doNdToXW`Z3 z@sWyfvpDol2k+3Pt!KsP06(vhxS-U(pI)-LxkUBPul!Nt z75f91mbZvkPYf~P)k^#@;gxy+7LK=%g3nt<)tW2w@jVYpgIe_u#Y<=syAOj#SMkj* z(~4K|%`D}gznU6J0mhPBFCS%()#<4p%ydUV&yz$C;zfC#6q6#2A~wk?pOZz%*lW}# zOM6h?L-OU!!j~6tQjpet4D?ZGF>9WdDASZ)N{3mzi6Vr!e|%Z#}<8AKk}m zOW#?o)Ax{0pQH8q!sy$2W~=g`h`aZ|En*M9OzA*mPpAl{UKG__7&&eWM>feWS`sPMm z--FirG~F8)NQ={T@7dP6ZS=3k-}x7DAWF%meFIH>ZZn>dS7zKQGq%*E$OxUH(LK`8x)*$e-7dSMq1I%oqiKx|z$L(Q^4?_3}MY zm;dAiCjK1Ta{2p_SJGd9dbIL?iMjlB@-r#(k@EA9UjCw}%ilf1ME}(-mw&!q{*b84 zpKmUIU;h^S_jBacitqJR6F%U{|;`5eEI<4uZluvf`no-C`nLHouCWThF1;IF?f zGCuGoS0l_gvJuH%3}zyZG45=ba}Pagu!b z75+t#O{W-#Nl4JUoujyJhsT3nh)M)k2DLKg=E`djb94S_mYX^J6=$L)7vZsVG;>_$ z)yTRNbtiz9GNi|6-*USp{HE0&rC=FJC_?X3@E80D73=<`f;x((#PJ22yRS7YY?!=p zp4b5vU{AjajJYg?z7{8-X#u`)U2>paJdAD+6paAcXg*?oafr?(A#dL-QU4od9*$Qb zR|RwSR?duLD3lq|zKX%bdLjOxd_(XwSW15br4*1BISvcTdl!kR-xZNNilRo+cVYs{ zMzpX@dew+m>?epX+<;D_ZlpkBC(qZeFvuSh@*;Q{hfHEJHgSb?Ic1Qqs0@Vq$qKs# zOGhHbmpxM=$S=gdxdPmAnvbh7>Fz~h4+TP`G>J(G-zHk@rVE{6ULc4c7lQ!&xPYFL z2SXf6P(1f5ZlHbDbq@l5(Pd#zAFe`!ErP$t92%_Osc;N2GoPT~eH0c|)L%}l?u(y6 z{u|(XZo!f6T26{G${gL@L>z^86C9<#fzky0MNX%dlOm2%r-)@-W*q%=ucXjyv0~sl zGC+m}ik$MB!$aB)oam|xxZqg42=X1F@+M4t)2t}^r!0d-IYY=1er$6(KvC3Ok)W56*nNQ z58>O#V+g-{@aoo?b2!@VhI`Z#Ctu&5TB3+@SA47VjmR^SR_{(pY zp63`p`ueH(d&x~x@Q)Ucb*nLc{dGAM@6Yx+lJJ46g-vrMd9+a|LUeEDql_@WMsu#!er^a5L7<9Op#-A>u4iPigl6du_QgJbrc=%`T8E}2OSctUl z9(Iaq{4^hqme+OkNS4e_V%11^ZH|8qgLvI}`{{z+H>(5TjxI? z;ZHf%>7spqm|`0&!@elG_p0u>7G1&*fnF^nZDpo!F+MV1uW=+Q(p|!NAdI*}nwZi^ zA|x%Pid{iXj_g9xR*F%e0WRU7B_!<&C&1VEI;bX>@Y&RC;sXVI#yI-*Ja)cO$XVi2 zjJpB>WpTwCLK$mpTU&cH#Yx|Qi0&9;WgMRt<8Ez=yFA|C3zXt5MFc$(wZoJ_1Zw}R zLPuWjAcdkXE9qIBfK;G}^gT6+{-q|#K+=e_j^UW%U8@C>9olGSu7{bsSS(y+IC5o_ z*UGM@c)u%AoW|V6nZDr`=C1B*VlH8cVlJhLk`j(%UF`B(m}?FsyIAabmYM6fFgFXO zi*cY@F}G$5X>+%TL5y7YBIe`*3hcXp8Mh$lUXbEmG!=n;HEB%yjHHo-nxs)6N-w7q zf+7A_i_%+rJc(jNJoySdE~r?7M!@dcM0w-_f0Xtpu1kischPM0Mua^&!zhjYh0)u$ zKhLr&Z=j{TaD70UBh@(wA?I0RNPBOoG5-B^qxn9AmFs$;v6hi<0SstjlbOd6V9VLe z+lV_Vp#Kqlo8dslcOW28L0!v2-lQz?2xnVG_Z1MlB$IW=5o2MZZH6gOEoPyGnrXHi zbx{af3QPSYKgM0-`KMB@?!)#UN^#Za_aPer_j;zsPT>Ikna&jN_Ninjt%g-4W2ja= z8XiOSz_I8{mmmUo+Thym5tqJ95EIAIp|z)+K~Ve)J)<;92Z3mMPFUDPARG z!o8MnWm-$kCZY>!7^z@4REvC>X1igBOhdUPi4T$1?S>UM!fptHKFj6W{tCJ)B%KI{ z5cYMDmAwjit0CHPNWYKtW-VQTbhw3JQvOIbBfkWA>&eQM0nYnid3BHrF_9am_Mlh4 z<9F>@5M{)L)v{a++u%G`gPePXlJt=y>5%ew(2&1^ zy3WI&D?W}Ae||p(WJTal!f$33sqkm=Qysvc5Gv{f{CWRLTl^V}(#83pTB%4g{!Bse zZAOg_<4*{+cNl+O{>98(g+K8q8sNY-OPld$NFNh(+mAoDJYkDJANK}xzXa8axoyRt z^;@FBpPNyQ4gQS8V;z4kr9ADxpBJXv;l;j0y|iZafxUlaylr_;Tgr<9e{L$#?axlZ zpWVB{@rUOvk@)jAXEX4Jvr)uy9e?)RX^TI7&~V;jCGqE;v)Ye8cl84IE%tx(BS4=m{%kl}ijBmdGm%%} z&nTo7{)|Mr6YvLavM~I?Z!7))W32dtToQlaq>%V?q(-!P{SNb=j|}ZeNGt&sES(xR5?#{`2)$ zlugHvM#U1km|7;>U;H4U=4&&hDZxfXjO+;9UACk{h7 zQo1;P7Xln)d&bkF(}Oa>LR6Y9f@F z7VzTEJ%Ky-=whP<%*F+{Z!g7b_Qbum!GuJld!z>rPGPer?t0W@gGA@!v5rI+P#%dy z`gn@QeP*``LT{icP6(Vk8bV;?pyHaDfs?u{c)E=!&>nOL`UG!tLN~z4fn@w z`?rBd@5(ge(LiuP;n4|5>v%NmF5uCD!CqY=of@MtX33Xigp?gTt?Tkr^t zw&D>m$BIYzO5zdr;L7>XAF(D`rx7IWp<504>r6a)`>m+)XaW%yfk(5yHfu|TN1s2? z0X#Yo(i2jMv#Y#|Zhey>Xbs`=$-rp&B)b}ehhZP=8N8#Ae%Mt zdNK9ZCDyZcn!8&KsKBBQ45()uoid<)SZF(-Mx%6b6{xlwPz$lQg>5qF;${QyzUB-( z+zg6qsbS#ZLQvhn<5gBN@M6VNAi!kc^_B)6mbcqt-hKGFnZIf{4MfrH9!{eUb?XfC z?w)&Xhg03bZVs^*RO`cuS6MaluE1*Efr*jkUDeuXhSNOMWHX$u!DD?mT}OG$!>PIT zDyuyv?Yo5&?CiV4&4sqfzPre_ymfz=h(vkK*mvt2yP_%jMmuS)YIu8DsB`VTja$O( zz3!LU+k202Hr@YFoe{DA`sUy5?LB_1+k5x)X}`U9R};8rvG=`n{wmXQ{S|55-s@LH{%_D{>wnmAKz6(4|3+SA?~OuQ*?S|A zZl}HXqOtz^*`?w3-m7S|#oqhvk_dY*0lC=Ty9&$E(%w5#BiiEse%_G3&b0Totcf0< zrtSwjBMiRKr)K@B@Tn%y0etF#iaNmoaVco9G5A*PgZ_LCRNLXx&%HYlpSpv94&&2V z+s*t{_!KDa06sm_*eUq*!#%e6G#aIgt3Y)J@M-u<(csg!dr2T8%)K}8SjVTgC{O$G z>Few4@aZOVp>4vag|_7#Ybmc;e2QrnpN_q^lkw@jaD0M#v-3wh!r2Ubf{L^34>}Sp zw(*aj%a3(@`XRpk`1Hkp(8U&fdTmj2_=JX7@d-pn;M4q5?C`15gikUp@kyp7J|V5+ zQ$-N?bTjC)#ivt97+KNvjBk>8jBtBt# zuf(TY8Y}}!`Xgo=^4FR8H28TdKE*UUfBNJ%P!@qtdp*yGa`@saqnt-1LVHeJg3lhZVRI#xNzo#I9iV8W;4P4lPJ*g$%0&|Me^ zMeJ2&w|T(3Cg@s|;!;lXdprQg%hyONwuWA}-zvmP_p^MzEdjGQ~lxlXn>Il?igHpZmSVyTO%A=uFlz1ZN zPlK9M^jpCx6kIC~`U+37BH^Wk1JMgK-&<~xme`w=7;rImgW{Xdp&A=z9I14_F zLyK+jX+A&J@#)gT+mBBvKchD+_;h1QbNIyjQnf9ua{aazL`UFLpT2hZw84Z=GA;2* zrX@Zht>e>#`+-j%{L~CS&BF@=pC%)(!lx3X6+RUr-3j;vfC5=$^ToRws z6h3{p$0YlPzx?urx_#7{__Xk;=<#VNQ5Jzu?n<-fRQUAt-5tQE_v<8037=$I;*(5Ed_r2sr`V;yr$M04cK-D353<|k{3#B36+WGTw8E!; zNOuB00bs)L35~YmQ)(nWA(zA_Z1F4EEd}@CE>4Du~X9PYy zheIa*3;HGETut6MpTeiZr*#0I&Ok+-Fn_u+-xi-Xe-F+1Z%}QAPw`zN@u}VGPp5+b z)BH(Wf7;>Laa|2X?X8%%A#$5vKDO-JABc|NP%K=wb^# zZNl+F+xf#?W)Iyc@9pI-ex;;siy%4z*iyIW1!nvJ4}7GY_TTPTGsjY7lD z)+9tlWlAcwTXFlhreUV(P0=V6A%u0sP3=QVGl5*t%U#c4)CzgU$ZF&pGcq z@0oYr*_qw?++RLs&wJkIJm-0y^PJ~A=Q)2~X?zlCF+Pd37@v@ij8E&I!T1yaeWv5n zU?Myc-zx&FHa>lbv^GAKBYhmkCk!xA;}e)Rj!##`j!%FRPi=gfJpCBPrzNQ9IE+sf(@e*wY+z@XgKD$! zY5E_yyps-&OZy|57vGEQkFc_bK|t*Iw9m4yIpfo7C9-_A@u?k9w|M4s!Pm!Se7gHy z)A4ENJ{tc)wdwejTx73!RWjq#ov6uVd>Vl4$js>~f>CEq$&XJ~HmWn(r!e0Ssb7p# zS8c?m?FSsRBH}+D!~ID3iYQKRS2MSjpBisvAtKUo&byj*f%Sl?u(IKJ7jq%fmRBXK zSiBxqu>hn-Sw(Rn(nTr5W&zR%`qr6dB9k1u}ngUj%=}UzzfEAF`wPTLfT@zokgW z=dTqmpP%q7H3ROhIkxt@4Llh5+o17xwHbfkzalB;=$F7>)t9FHtw44Zf8zkG@i!Ie z`1}nze*C@KI)=YujlW0mE=E6Jk@@Sl0sMulO!<2Q*-`xE09fO1IMVU?D?EPu{gD>K zU!}(1H+UDr-xQg@t}lbXuIBvh{=&dtCV(~mvXPF@U)k~F?}k|Zsx4u4VeVJn}IJpMfC zjCyDHZ=VXhJZ5H$?+W-|W%wP5;U}$^@IR3l{&N|Aa$@*vUy$(kPYl0VhHsY`{@fQO z{9o=#D4)k=_?HvIw|Pmze}7{5*)sff26#`XAKh?QS<(^Xzjk4fAJ-h&)3>8PIT}3o zr&|izPvJM$WMe9db@)8?@3&|!g!oYy5D3!r*>mK+biWHXLp1~j<1kx&ptH~Ks`JdR zvlQGwx>A~vOBcc6Y8xuvcRWpLGpMYSp#5n}c*!(eK7~v_?pJc9Z%=83l7V5?0Pv=* zIP@gErV4wAe5dX9+ExgE)nem7XC6KX4{-J@XjfscqPMkek-%Te5_^@;UaJH2KyUyW zT<2tWea`1{VkU`w1$Bo8q9pzXhGqF3xQ{5rFA@uJ27(p#gRq?z&-_rT?V(LbiMnlG z+9ko6NV{i`4aD}(O}BX-L*_5GjMiOo!PhUgPWBo=6yBenGuVckOzA~u?L}=ja9#L7 z`nrc&S!Q>jR~zv~Wl@HIXvFW>rQVME&Aq#-;2+-rFDRFb3im5jR@ir_IpshCc zQgKTu?mgU!sZlz^z+~amrk{HATP|^bR3&@iX>q3~O_{pkYRiDVoZoU=4%`STRkOta z5HpN)R)usVs1$w!7WOjm7&StI_aWf@$BzZ?o%#I2@}@q2N=G`5eZ~AKYh`5oFANod zYkq&=FwDJ5df`dyl;&ch`(<&nS1IW=>%IYE5LX8B8v_0O-c#Z#5Tu*=@)U5qiton= z3I0mi>a}zksTD#h;@6F3aU8U@C?K{I@$;^LP6_Z$J!~i>>9fBp$``TGD3AW|F8U(f z6?P{`6X?XjK39jJiB zd;g%WhyG2HbM55{^cUDjaFohTK-W}9R{;C3*DmMWz@^&}FzOX}{HU#8nE)xFRGNAh z=X%1%D#8Rdjs(bm{oXMGthEZZ4(5ff>|D;Vx?%nO-q8fE(63(^DZtwVc#3VoMVx+b zE;1F@qC8aBmThtqqqrn?IORGPu}_~8&MwY<&w|q1R4hSHQij#lV2>@XbeB zci{IcX8?XLa8W#=JJMrsnmS?PvDvpGk8 zZ|rXm**u>BC#)xF5#>KqO9I&#aBcLviqt0Xg!ny&EMPCnWj8)V02>014SvUZ=r!G6 znn$LL?k`l4Trn7*Yqz7vtn<6*23wf^HLQSVt`68&<0I3^)b2$@%dE^}N4$h~xnkd> z8UjGHW@lbQh?XjjP3%PgAP?76m9i&A8g%bu%aD#Jd^KB$M^FKW#qaD2*8A)!$pnW- ze)7Alp7~bG>}+xqzHdeLgZO>@zf`ZUm>LHo%cnIS24}{1HrVp{LASn*!&5#N&G~Mn zXwJxLGjA{1-$t*Sa^SbdTvQ$ymQJn{oGUQZ!20x~)=*vW*%3s1JuJP#UQdHBPIZYt z4fKaxIutw=_;6{t>bSYAT%*yz4a`DsxI@+}*D7>A6|B?RA-}p1-c>!>g4&K?uFswU zj<7BG9=Uw>daU+FQTpF9f-h-Cn)_JYxI~d)zETk6-IBA1sh@CMJ zrto}G2=D2(*$j3I3Qoa)?6Mu)a1hJIdrPjhysvd#lst&29Imye_J1JFl7A^(K|2f= z@lzEv{DfE@=)zyh8I;~jWUBR2Ex%lb*RVpN#xA>r4R~Waq-STi5)!$7e3-+gy5lxad3T6?E)~@G|H%3S9}*3klWw@Lv{f+TZ}8h5xb!RRb>@xW zsDslD;cC7Zg=zzi&XAXt6=i`92;oCqx~n=A>1^oZ7$}I12(6y-&LH%Y4+NnZx{)%> z7ctp@Y%Ygv#CHtViW2&%KLfm&S5Oq3&nlMPMFrDE+3{*^QQtsF+&|vNPGj{>&ar5D zxWu~;^(v#QJ4ydZ47Dc&T;bi{r@F#I`8jlWfWtbg4VelTRs_PLLwsGXw+zWv^l$mT z?0R=OzfiSO=)h|z09#LA-+E4z)mhidqd)ycZokgj_*j$ZI}65<@oH3|^^d3l@m##X zcN;wOYb^OU29W4y$-g#$VY3rD5W3+^bVGW;@Hf~>!(R=Czc*Tu^{b)buLi^4gLp*I zfR(ML6hLVBdsFK}QN!Qn_anpKHjHUs;L$kzWkMv6AYTlB+@BanuxKJa{vjQI{L9tl z^*^&eKle#&e=ZttVt@Q7$nDQ&(LCU=v3TS^4EE=>W3)eKqn2pxJ=jb znEq*Me^%)2ag6q-`#C1|=k7<%?axgrp^5Cz-MH>Vbi&g`3B41>@JDfti2Zq*Pn%Wy zv%gf+R^D^P&;Qo`+@X@7I~YWN6ZYpq6j1HYS)#1Yx@3ReliRQ5_UGMq`Xl8$G$d~L-4Z*7RCxmo-`%|OKtA+OG zpzv~p|5HK!&+izC;1;k`#T%RF5M}88&smtHC-Q%;y4}S7lw7R&KhOZxTo>$=gNjG3=EwNcl0PKhUwG!@$IBm@cczIwnzPK@9=*F&5S+*!J$#X7j}%ct z@01Db(QT4HfAohwe#h8C3GC5Y6j1HaqoS?xwpf{RN&Ff9xX(^WRGSLtZI+uAsycy&CuobKeI=J zvy-q#I4~D8ANvv^Q0@=CD4K`+LlY_t_UMgcwnz7&o@jg2qXhD8xjm{WHfnpa_UH}0 zeU8yTsy^Ms9zDFo+#X%55}e2$y>x+QkB)BPEb5&yfjzoevPWg2EcWC4zxhX3sU#%r zA9X+h)gGl7S(oh50lEEJZjYYX9LF9#gcr@WN1f`U?9qW=G7rn5$-oKI7rJ;QM5r?wn;Zgh0zYu zk|Z3Yo2YoSgA~(WBlESU?pqq9x7RV+r|eVB?9)T$_UVzo3;Gk;r!D7d_UU#}B3b*i zY=mT=&Qxn_rhR(lIL42je$&`s3H+sdQ9!j%cZ#w)>ymw%DYswC?Nj3$aqQE#c+qV8 zbl>49`!pDj!e1IqsV42yY}6<0)9O!Pb5`Ne%s$BA)K)9X|`dHWRqJkD;ty^hg7%{$r5K0Rn|pAP>`(4WXYRh*^Sr){Ey-brKZaa4S1 z!A+8VDpYIxf3#13zGiH&1or8lD4^P>_e5Epb;&-Ztd95to>0r}(^yntI-k21FPd$i zc7GpbpPs{`uusL5YSKP^UZmNletThaj^NSEKD~~7$v))}tZJWzBOTv9W$Nr*}8Ru}?4JMYHYGCErHbrxZM@@o!2sX`e1beQNx> z3O46vJet`j8}cRlR70?;eF`BR-#%^B<@G=VBl;@IYQrPzWKJ-_?gix9ACpIR`#n@+`(w@>l!+xSUuuVb`N-EC&}=>c>5 z^!f{e{zUfaJ4_nI`rLd`Lhqza+owB*O7>}xTHF7l|MZXb#s*8^KPf1n+NTFaS)Fys zKArW%aq*vepbAs}sSRE<+di$>A7!8J#G|lJb1BuNeR}+P%|6ZD2b;46k7o91I`Sp^ zw1{9;`?M74`1UDBm)HNyK0Vhpv3>e;h>3mbkAmDjJuaGu`%n2_8|>4&$L>GvI>l(8 zIz9&hx7>gFy`YA!+~Vhi4-8=>U@Gj5_O*eR@-Fzn1$?3sHrs zeVT+9&9+ZJRY%#U_wXp}Qx&C}v`@c2t=Xrp2ViqfLG@<#=@WoS_9>HKRr{2UbR7E> zwVy8?F&Jz!#BR+4bOv4909p{iEcx1$H0qn!Jo>F%w!d1IH?leWB-|Gz6gpi7j*I^x zz~gq%BUPuB;yj8dxo2%m=NIL94>oR8<@*>K*lR#U5ozo}9c0B`vzh0}PX*YBD&Aoq zTKY`v&kG~Q&rkn^5nadWAMC@kV&mATNZm&Mba}o>RcZ1(M=cQL8^o9AuX5Q#Ya~XE z^$GcJhJi53=S{g7RmK0sFR!sqVmS?>7E+#Sz+x<~^E;TVyTB^^Vj8<~^p(n+^E=OgB|g7<2#3b6T`iU*zbAK-%C?iMG}fo~FTfl5-Sea* zrUd+cOZ7==uea|~0~TZbdi&0#l@*O&ms%`IemBcyyUA4=>l6Gwgqe(y-vdu1&o7lX z=XZ?(i?M#4-xD!yi|{*9EtVv|qvW#Z%T*fd6a1cwRdpl3Kd(-nUn+0TZ;=6uv3{N3 zHwlNDYSF56$O(paD1cRKjM=20|H*`K=Bn%kQIvL!k=OK|M<6Q0K_3r@aN*f&y2Y##7C82q5J z11bFI%JW#`)|S+G<`fmo$%;Sbvj{qt@qpE0^S%fa%rjlTDQcv<^7lL(c&cRIoUPx) zW#7n;z;5KXzyAwm+;gAfP)_$IfH!ubYbNO+M?Gr;F2%`d_*_NgYSD>nI=Bj-tH@{H zqK3@^j*XuEt@6`76F2@z)#af&Tw1)vyC>?p_brdLv9R|*AYHm;heuptFDG1dO0nEi z*2?cF=NmuE;pNR5k34J%4Wuo>abM5;QcHeLz)>1-X7OwEO9MGQaTL7($1sW^9y(l( zL&3Odzw;7*Zk7;a0IzUNIBf-v2>TtSwQu7?XV_I*k+z&y8o>TjIt#>Vp86Aa&SS%= z)jt>;QA6ye)yU8fwT!(3=f3*@jOcZvr^CubU zBha?$`I8F)uEoC%B}JD2eUOKzv_~0hO>;XuL%;hy8HqO)h897J(C}^fAg&}64~b40 z_IsDE$Ftr9 z1h9rmpZ~@m`XRm=_O|2qMt;zj-u)9_(Clxw+B|zemtx<=s|(ZjZ0xH8j@5q0N+2hF zR*_fp^Mo$}1U8w5m$_|-8^$qz_m!6 zq@@FgD%zdm7;P?d5N3W{TXAe~0-_C}o6{cXyd*#5vfqaD!-}ox;NlM=jU(!%Y(LU! zKT{mL*d9E}%2`;x6nsD_Z&@yslG{?zUT(d;FuROdC^e#L$`Fa&ezH9K1P`=+?LIa+v4^z|< z$;HTb}L~jTW3F+M;)BCnsB6)hRJ~sKDBhx!D8G0X<>22R^dV3rjy#)bDzDx0t zP`)?I^xmqLNM63jNbd(rBzmjykdWToK5MABN{1i1 z#;rp*blu>oZ0t2S9sZ4y?oFeCf!}D9tQ0-*owWmaQKjuN)%f` zt{4la`Q)}B5%BTQ8ha6diWvKIbi@cG7M!A0LlITFPl*Ro$*&9pRF9~p#nhyafAaZ4 z5dZSCzv1$g{F8~1wMf&=FIM&#QUmJvg)t|$#av_2qj?s07WYM$<193tpRQ+5KOAvK zA44)CCADz{fABw7C-2X^gV3ewKuZ2hI`=XUuWize$xum@9!SnkD-@=GF5J;VYKMCFTKo}`$b5%pT)HGyKGeoioCz60 zl4*T*6!Zdg<%&Ek1iGKr3Qb9A?6S1KHb=V?B|PC)1+8{sLMK7FXF$mA@N$kn0^JwT zLRV8Aq~reUNt4y7z$x@nXsEezw|~*$Id?>4gWJ-UR*Ns zkrw(f3#kEhw#BMse$<$BFWnj~nFoNrxOi2RWJco=JRjByMN4KFN=TB4K)J_tfMjxl z(ULh8(5f74GA9vzhyGP2uYdPosUV*IO@FFM{ae0R2r_~G^?%w#|9T=bqJO90p_%&E z8Fe>L{|lG4B5 zA8fAvRicEc{`Iz*=--ooR`u@@Bn>tY{So>XPG0{`J1M^Y9bVm}{$;4uC(yqVXffn@ znP^T7PfB0DVEHWaNd-?Q6Sxu&LIp7xD4nlQ&I&FoY_1lLK?zCLx)x?+m}ucefY!-Q zBeH48j~K#^^j;gPxdCW_J>0QKLSiz0-2bGmkM|-i?BQKVC8dv3fWCS5updfDGScm# zrIU$1wgK~-8@l!0)2b} zT5Yh8E65}kB0r*!`FN1@aY=IaaT+LS-Y7i~B_vtv`nc#M6MgJR9P$|rnRN=FN886A z|7vW27TCv^Wh5s0cuP>%M+eeEAFn|wDSf;i=$mIByP||7BV8YdbvDt*?;nWh<2Oi} z>Z31tef$F()Z*#m)hn9R$8l=)3G}hu${2mzP5Sr~v^}Da2k{{3cOzi9YUlRM*FCNDF=ZJ5ovMJ#YW{m^QIedPK$ z9{CY{9EpeK>*I}}pn3MOJ4#5h*7dQDWNjR;f1KU4K7LH^k5wQ2G7=Mg?7v*s#|x1b z`gk@{N$KMSK;Jz37%qsCk*<%GrJ#YWA!xNhA8FuYyOAH!$8tPK`k3T+{g3?S>f=(BFxAJ^T}|}y4nRxxk;sm+k5|$A zW7WssW=Tj)^zmgy*T=O;3w?YHsigGrNuY0@KDtptl98^D?rtXfcm<$UeY{xaM4r!d zU6b^D=3fXI$J570{7vfP#+gEp3H0$6XthBfxqTdj{D?mG#e<}eNsiYSfr94Q$AwS9R7Jz=?kY{1h4f-o)@% z$naMthHo#!cSsEX)!7pL`=&*+YeN4kGW=_a;UAFU=O>20UWRuhhCfw?KRq%0_h(7` z{%~(Bzu4c86%ykHe{s|A59g6WhH(m#FGz)Pr>rBaspL8!gWAvr{-D77o>*iQrkVd5 z^g&(LimXSZ`<*?>;5ah;!?Ge;HB`lBx*r8LiEVbnEND8|O|BdDX&r#gz$prl7uXd@ z3FOh0y@#i^u^0}#Nc0I7txmQ%7{|!%0z0pcPEAz1HFC(ziKe0}+ch6<5f^>wkGT^Ah{!_7ekG~Bmu5^6=XeGTZ zrOke94yQ58{f34|v1jM9L7;#xBNsTC;>ylruklh_75jI&><#|Dvu(5ETO2y&sB1Wo zj{{+kYO&wG2^H|KhSd8fR;y4|imQ7byOTq09K{at+B^I0Mfj$I`2KSnf<%eEYKdK( z^7ufd8CnkENr$L)^PvbMrDA-hCM`kS=L7UX-{Y%wO4V8t;zP{n=;)`wvTBj zeDr1XW7HH?0Y{bJv6tvoxkf|bOH)_yx4V$vihazjAO?ageCLu&h^ep#6<60h){(>R z9L0jXyF#Xw0edCB_e;`IOVp?(syX&*Tr~|f7{%_=N^A|-xBBhHyuLHIJbNMySy|b| zm(kW{^?NE^StcG0avKJ@y*x>hTh#bLH%(*wa3e&GaYwhm(hbz}c#RoixEL#A5`(50 zzT#x@*^-%`0fKADgdzr(O37EgX_ zWPA&g!?(H#d_^+8i<860n!vYJ#`n!#X8fZ6PnP?C^X+vxVvw=++WAOR_PP&$E9`Xz zXCTY{frf|M>lK}1?e$UI+>GyuaeLkBM0#&xud6svB76NNhl0KC&+AFTUN7P$V6WS1 zC5-m^Z`_cZ+Uxf((e3pXk>>XLRiw@B^(A-4v{saV$v+9mzvBmY8cr(qOp)h$z1-qI zjORGsgJ*5hpT)$HZGhP0>Gv2J+cN^2(C{reI<7swcHPllf2Cg>R`W3#n{ zp7t_^e~wE+K9x<-(_O~4P+)7Ge7@&8qmB?)CPPnE6ZAC5*ba}4(I9EOiK9Os${1b~ z7@F1})&xD(GPbcTq30DD!|BP;6K;Z@tunSx?r4F0mdF?sfuU*nSm7nb>tAbRY*)90 zo+&bhqqira&t03KXP%7hb%CvU`h2~N;ofBE$!db0F*3Furu4x7<0qOBEyMW{L@)gI z26%OFU-5lVt7Q&0&0-#a(`$Y3*f^&Px00L3AO=XEOKtGXZ?F_}odRQA$9$o1qkDOW zk@VnX+o?Gy>Of~^o=1V`sXjNT=ua)G|1#71tx@$~E7yPavDe?P5d1ebE}U};M6kOC zGoIVbgy5-_g-}K^*M#si3PcN`IsC`ee~D@RsZsS0lIuU?nCkB@_`iBiSMXm}lak9e z-fAX*2fvpEP)dT=1h5tbq6E+!{?+<>sP(7jvfifkr$p7CBiDcW@vVR3EvEb*isGMS z9^oGaj+K8&{=H4>Pl>8ON3Q?$<50gO|Ba(f`Dao5lgK0dqd+YGhW-5Ri?z4|nHu^S z5o?WIp0Fd4uN&iA!Qon*EyTAk!}xfaABPyI3JR@W5mg2Bt52yEVC4E{ejas+{SR?x zV13q53p*QVaOVwzllRPlCcbT`eZ8%Y zJJ{+`hUafKa31j|n@!(J)XzM?C(*YCc^Z8ilB92uOke8pqp$A;pzq(KqUallJdM6# zNSny7Pw6DT9mlHw)P3=eGKJ%TF-mtxf-Py^y+q$N(ezbI^s%Jrds>}h@ekaUxsDTk z`Mp5j^S~yx?>yvb^7A2WB0qJ^R_qPB3SKA^m}x>_OXSx%8}y|{)7Kq&8hu$vOZ3Iu zhcwA{bLk}8N%pW}r*9~!-#UDgPh!zqs1p~ARAt!``Zf`LcL9SWzpWB|l`Wz#Pp0p) z5ywE^$O}Q=`@kU4HwJl{{M<-O^3&`KeN8=tV=nYH^@gZcKEeYws-d|;BaIuFmdLN3 z=sP=_z6Oat>qSxY#kB9wAavcAd6u6+XmlGd&s@`ceR%V<0 zA|yHhnP>6o?_ZoON5rvgn`x0Z8=97-#ibERMRc@oJ_SSYMbd-7jF_etXGLfman?Qj zZ8eX3j^dcIwYcZyXGX<6v+yXzJw4?;!QJ1TCfsp*C5=Y>8T|gF^NZFtKfjKA^1>rb z^56r@29;Rj_Uyo=5_N*Ubhawf7!wgbc#l|`pdXrkQB?ePQBs6k>vCgR06ge*J}t$& zvk~sDEWx(UCYC2^RMKgAf`U_u1MRb}1E1GX`_N4ZisNS|TdL=&ap@2bW(}D~ZB>o0 zPWv5I;8XiRIob+q2j}v)djs~pemh0RweON63XY`>D}TF_oC&;3Wutj~cpzU3so|32 ztrcBD~WYUQz>@_uOMoi|0xNXW-0%cr^eTWh7*`rqLLDfk3DrSHba zplq8fy*qFS#g%2-oPykgPI`0tOcF~C-={#TijOi^vteKUNneA;(#AoS{>h(>wXfp| zY*^WXGoloCIvypKgyQ~wqs$TMhjtzi3&p)~cLJ1H8U9oae`*~3r%3oeRPm=C zNBmoc>k`rMKTmm4Oa0pTWYDi9UEbpCdQK(*JMDGo_#Gx7^>8TK}t- z45Di2uu6+n*4yS#kJcCexS_++CxuC9Ems)4OF7i8QEV&Dj3bEex5K>cghfM7*Opfg zswJ=p3nQ4yOO%gdOSBTDbZL-%D=opHR4RLehmrbXtuNrJ=8L7=qL5j<_Eg<0ULn%l zEMA1P!7M_ZXwh%e^+H^vpBS>Jt;tsK^}e}36V1|kAENFfd7jCBi(VL5BKtY+P_b&- zZ#tgF)VIN;zQytC8z9&B<8{VH2S3K~JEp!WllnHrtM3N6z6C9+&-zQOJP*dJ@11l> zo*i3MUq6%jI`ce}_B(+O=<0rur-!vfo^F%+hQzDyG`YTuT2$X^llt=G)z?d|?;k^3 z!e6CHee2`ZH$blM#un8VHmPrKy!vjC>-+lJX7H!(f5g?BBK|`=%GMeYNcO=D{$4Y9 z&3{lAVCJUxnAMpEbZ5Hfy;g_=;R1_8#Z)VHzBP>Hn`2L$(u$t`25;G0YFnlr!oN0h zQA195x-?9`p5VXsHkJ~8J;4rKPq0V6o?xg}DEbio`zRr8(vCp6D```#@nA&|&>*N{ z5PBnRGsPVoxP&YXS=c|Uj>z{BjB&()ykOQx#RTlR6-HF7fd|A84GRaZPa7~SZC>Yv zbO#7Mw;y1g+2${$wKvq_l8|&1@VgN0uY&_f_g@W48!$L+;f3>XF&uwxH6UeH4|4Rx z{ylf^(&%dnJ{{7=vauCNrQrT{JP1-jU+sx-6g{k!-ws?>e%+nbGe6xjo38f2Ah5*h zYhPQfTG8VGpW;U?gukP}KPh0H=f zNyA5;Yd?<~J7^R$q3>AB8|nSh^5v;X(W~;e&$2HHKHmLf(4ZxbKYVCXtB9LsUxm0q z?ck`mMqlJ&b+Tn5kLL4=qbnQBi$|k5(Tu5D){m1{CGm6X+PMS5-h|uF+nDKMRR*GL8i%Ycb4;fVfG(+JM7NAmz>5;qu6VQNeFNUHwNq*v4c)?2jMtk&m3mT4O0nnL%_ZP z*ALw$4)ymvD{Z*vfJ;=mNhQCwev81W4RF$=yWS z87#+M_`emj&lpY^cU=7{v}V9u!ujD-$QbX7k_w> zzl|4v@bR~L{Gp21gIzAzi)n~I?CYpI+Pg)XOYH-sxrvXQKNu_G55uq4bx*Y?k@=K+ z2PEfSv^x*uuewzQ>$$X!;{Gu5279yF7M_bCA>sUf-&Jia`sDr-JZXxrc4+8-Q}rvR z^;aZa|Lsxr-_-2-Z-@HC^1q7bs{ALM?|*qExOOxsX~Wckx{@-~ftvVN=Q|<}+2~|* zIeM#zLw3d-NZQ@AmA~sO0&WW>M7lgj(JFiaSu8$*N_V=81JM?1D9YV|4s$jB8b%n< zleGN~U4!1(3pk{>bUpGk`)wIwYQIN8F$dVw^Ka681w7}nYtUKA983HE*~MC3`T&QO zdl#!AQ z<7E(O)A6!WBg}1u<*BxG8I=k-)&C#8txc0(+1Ku{*jSX1cVc^d9?FqD z?t#B1_SiUHyPKe=NT%nLOJi6}ik?*{NAx^`ze&)up$U3IGCfzD(i1Ch?rxd;BUAZ1 zRo;jDwv4|mD96V?{7r&CcN6p!$@GkEAwB1*^z=xMo()aV6O!rqq)*G_vkK*S`{QpC z@?lNTlg;<)s_k`k3+ZXA($n~tr0B^K`-9EV-DD&e`@_fjW<$xzIlv_9lgXrF~Q66MpW`81pyE? zYhcfu*w}b>8~Q5Pkt)^G*=j%#TVGT>R55@@trte(o0fbnzWKc|zS;c-HNJ_sL<9TS z9Tnfa7{)6$GQY)v9)I{}|(Er)MSqq`Bi~Z3Yd4vkpd?4gw=-*z~$I$1HuJvkT=*rtn#?Zz;wT1ca>=%*dW9WBCn~tH= zE;fn?`jqs1ZmSc1%WXg*`7Pzh)BKiQNNawJ)&Rh7KA(FGUm7sZ=N4*t3FmV!TqJt* zTKtW&c+KHwX&(3q0E5KOO5|z$tV23!enx1t>*v$i)mmOcem=WU@bgdnZ81M%Mu4Ap zfI;GC0`fF|W+0t3KX?5U+demGc?tPxt@3j;`xyAi9tnPGfkEP@FY+{ga*$4%pT~~G z^0QFOOUTcqpn^t_3y+1L2IA+mXnxXMIzJgmC(X|Yjdoezw7i7;Ozb82xgCF7tZzF( zFS`L4r1se>@l(?reooS8m-uP?Rc*6``~)u${3!U_Vt&?)0zZER28o~b$kX&~BhpE? z&!-yg5X|zlHEY$K6^7G#; z!Osu)8_SPjzdrmF^*Vig;L0Ax7gFg86i0Y~BYpm<*qx8N=&kIR{<@nsr!P(ueI|DL z22caM0PU;527gJ!t=a4=EEewIosP+^aPUS%my^aX*}p@1d}9aIkJK>S5W&#N41;<7 zpKGN%L`r{pUKHJl>ffYc7!bj*!VH6X{g(|;`9F#Yyvn~>X%Syk=d;{>)cEhLVdxd9 zzmpjT^ZFmxO8*e4|I>4u#ecqrL9c&>83yzEf7MFs^^Y(s9iRX8kN-g@Ga8s)el>e=`i`^^Y2;>YpzEPkT0t|GpXqz5W$u7|iS6 ztd-X5A7NHHKL0B<40`>Y%rKbOfAW>F{GZ({{_A7wUtxy9y#Cp-^^Y(s&H0bnj}Jpo zOlzoE_dZcOZb4mP(Zw*s7sWN*ow0o()fJ}g#svM|MS%X7FxsD=r7;hBlddnLS@k_P z<7lH+-=r4Rw~i=In!mFo{(e0(0e=V>*ftOAjUCyS=<;)gvH!^L3S$h!df5CfboH0Z zYTJ@_Js043eAKh{E9{POr0?D@b|yote_Tiwoz6oPMk>_?6a0-M-28lnW{=Y`* zZ`Gpud&lJ;F$>}!AGYM|rx5%9syzwpW9PHZe|CibOik#`;Xmp65AgPlssFE$`dhWA z{!8QX-%aIz$cNY#nf@U{>kVuh3E^`P;Yu$%kczcW@jawpduc+L*CSd83ERJU^`A~U z5L^H3Nc|0GG_(H8jz0!;!B zL{X5C|Ne37$9FkM|6rbQASvxboJJB9Tt|wqN2MS&Lcz=k1>w_m8K8c|qYlaODD3aX z_im#uc)I1;(LG$2J|Dz>?{+KfF2akUNw#S@1Ano7Tl%x@mezC68-c@7*_EEM3HS(Z zh5aA_xkn>LhtIR-v8u}`ii!9tRH<2mhgQx z`!@=l@B=V}IN;jKmx#9V5A6Dpv^f#X2fG= zg|`?GRe0$hHxsuZ1nDu4y#>WObPgiqyk)EdhUF{(=q9|&JR<^1k9lkff&PxbKY)78=0K^h6 z0YU7CDSn>dB3X}ocMXZezAo3Dg+j7OKIx`uHR!{)lp`XcG#5#bQoi7u_|-(hmB&+) zqKV`vk?OPMQXui(AZ@oXFCmS z4*^Jpy_D)CTj(5~icf0WL;l?1{Bd9}^>HA79HKoAp+^XD(7*wMb8Jhww9fxUmR32J z))2UP<6V0?%_-8>F@F6sZR-2b-F-C{2_vQ7Gk8HsV*4 zmfC}?nzW863Mb}^7kMWlP(vr`k80QuFhQNDJ4uT=(Ljq$;p|=iv&>$0CMm-}V()oi zM6H>XB#3BN$>1qsyfarIkK4Vwri=;P`*c?;Vg^4vc}WAC1yWcGZVJrV*d z2S%`m@JFPlXG*&McVcfefpeMVy4M-lJJ3bab)Uo@r8#>+O8J6+!>`tQYG=>X*!xCN zI5FKgdkTRXbp5ZWhCKu(NY^=gG>V4;xkCmx2ilhLCVaR~=CPXd*Z@?lW5)l=69B!>`7p+Jre8kMAl9C+1QRgC-_|@3u9kTGiBD~J; zQuqROl!ahHr78zhVQixUhHm-XNnrXla6{el1Y(*G<*?*1SN&kFFdM*7-_OaqI>@=h zPIlp&^}kp4&Gw*P_Rx>AP}XyyY(-W*D&eIPx$dn7 zq5OWLr04Shq6vl4C~R30q?9lCDtWWpyzA@<*KN1+t@X6HMEPj@5W3(FUy8qAlScp$ef>JDw;-{tH69iqYJ=jm}? z9!S|!jDN#`7{m8dD{_YO6wcBQ>J1OKu43>I%5YahN(8=i9|$A3ekxqWAVhXhmOyiO zir)6*DZ-K^USXEWE7+csi<3ym&!p{M;Fz#UoQm@_vpaFtaB-O6XI1k2eDqy3Kb(Bj zSTRU&M%NsIk0EJ94$VI6Sl8EZ<2gYHo`@5{6LFHm38%M$Cs*C}!QhEr37!Nq;D7tz z+*TB9uVZxh2@uD(Q3ojEdgk`^oLqazGq&GXP&z^z-5zBZKK{nCIb_h zb-Zg}BD0RrEOD&!IbPLT)wSLOw>RB0aXozAoh%F0**4o>H5dg2=-6ryNJha9ZEz1k zh3NUXepDN$r_*I6`7M1&Iw%AB6bI=11GN-IC;M#IQbX^5+|3DUgN_FqVvG6Mfz1J(qHga zXp}v)JqH@)z$>9quF&?unaGIg{x_ixaWuq*6yG}{^yPx}k@=h_)R)iCqjp@z*OzkQ z7o5@`(CL}m4{EcG9=KV~WAEH84@uAC4YMB7o5AT$J6kB!gtcLQ>jI`CT${?dHXTI) z_g>xx(5CKym9=SE2T7YswKgb48E8|f&+(B)nX6pYrgE-LU#;P7@R6Ynt_C`GJ*cBL zxJa}CpWa_KibfP{zk!U^P7d*_og9smLp5scjcL>az;7b|Ptr;Lw7K&$q%`?Qt+(Ok z1*?BpU)J}LKVj7S+pV_Xdk9wga(jzqt2Lrv#Au`aqRTJI$>oSuiy+$9Ew}Gf-oCz) z(?D~gnYx|pGjCYTBD+-B*N;XMh)KC)y_20ydc?HTkYB^v3j=1R1I^>|9MN^7_tt>Jof29(2HL{P2`dG6r`J-YS;Nsm@*dbFBab%|rO z&+)w0wyrg*9<6~MZD5Z+$@S=YgB~4e4?RlxPUz7vp+~mOgL?x^%%A!N?A1$#rTW@) z+4aMvBTJkqK8$SKgTeIyO9r>{4Z>w4bl%RMXTXv1`#Doj(9O%y- z!dvuP(dgn3+mJa}wy$r;m+fP1)>C-lDW8iz^DI)N+RJIWJsgD&Lb7Q{PeppKnx264 zw25;@OnzXZWjGGF3H|@}g@}DC3{6FO9@V|F_KCT+Un(+Xk$tmZ%D-%pu@Im2&2;B<6+@ti34Lz1qOs*KH-{s!&E_j?#iT zO8J7{;@7|&5BN|$d=%{}m?Jm?a}S^n<^}D<+y!7xaroGO_i?X|G)Ga!A(Q#Yefl@2mbkIM+vx%!h@x`0)7EzR?JkH0^Hi|+uvtNSYMqDh*L7nW(4~~kkI6@2sHpNQ_V1M}q z($s}L_lrPbIq(;u;V4i@>5WJSf|T+HDO?ip(l4>hrlW#frhdP}&u49(Z8UeY6lBr+ zo9I2oof!g6h%$ZM8eQ1xbZ-Jm*69gu9Ml5&r@*4XNan&wBK}c|>NMq`G${u#E(y|u z&zUQFVlMT>j<5kL5}WrG6k;#cL^Rj7_z0D(pVG=bf>g5#HM_0n2p`d%j)bC6e1-jI zWw_Dr-3sgh{_FP^BaIen7f?v+JUi0-JP`=ei#)|Um88J_diC$3u{Kdrg?|0YM*Kp3 z+f&tQC$XxX#7pnce8W-N$rP=05tR>BY0c=U{55IrNd z*%Jar1WGuGH9Q_kNyHIU0xVinc#c-|P&6~*kH|{R zrP0!lbUj1^uslR;X@nez)lWXRmjkyC0;%6S3}BvZ^xMj|_)SuVC%=}I;df$+l;KuV zhAfEDJ(`pO-Pb*aD+6W?jjZZXQigS)JP@Q`e{cP}Qm`|E4ALH(^YK*wGLfi%3+A!!h=`Yr)|?m#QHECX96`Ih^biSV^RA|_(PkrK@%CQR@b&GzF= zfiI5pDvqN#3xON_usaj`SDd|}p4ph4A?nDlpc#VAnoIIp`8v}nlfW=M;$9lO3NJa) zH?mc$+RifUB+xj?uYr2X;IcRPuOA}zvb^zAsnUkc~7lJ!G%X#EO9>#qemwgCiE>r=c(s4i_J8m&!v zFnSEZ^4^l`Qhn(eJQI(6azvRazTp{S-A~SKgKkJ8%eHtUL?!DD*Ri%HI+oXll+37kd99I~ z5|f*T+|-!dRODjT7p=Q_DadUdliLcpZH&33=WT1d@$5*Su#%R$()|(Ko-#}yb!D&o zLx_mJb1UX+&mWt9Q(%_OhN>WD!go^}H2mSuWeuO8YWTmG#L@5~((t|nWrv2(GiZ2w zP#>{x&Cu{ssLn*g-}xOHz8wVW8qT<{eb#jp(r04hml`JsrCvY8$+EB=oa`KB4oT&E z9AHRHwDKn47Fy{-O47=Rd5OPY4ifFjm0C!Y_NViWM}c7=i}t9Ctynx>(U6)uB#*7= zqncmbEH(riA)ypB|96B7_d}qI?r(jaXUCs|JioOnXis79239wePf*ZlHvguP2YrZ& zZ-I=p5V&Yq$fbdO|2wRJx(n(ba4STdEI)!l=Z#V^_-K0-T?sArHm!ZDfg?laptMNt z!<6f?66j!SB=8AC!HLd@rOoq07zYS$b zSke5w6v1?*j!6)m0N=f)_->}$7}1}Dbn6lo;r@ZF%W{IE^^zKcbt(Fltc$u{ zV(^}{2sihh3=!_Im#mB37~#Gh=$IP>YU?E!+{AhmqS)$s6k^;xX`nVSARSR$_)VRW zf&qCyT0iI-xdoHa$QaAfHv`vYe_8`eZ~MpfStnE?;k!PI4-MJ4)sBw<@Sd!@nV)Wk zPWK$b9o$&8ZSXvh-FCs507R@UiyN8GuOTDTASi86DXm>0TGRhup*Q?9>7qS*ymYMo zFxnFnNbV2avP*8yo(O02^{>To+Or+z0q%OOJ#zpq`$N_BEo;v#RA9lOtx*(B}ZJXy{%@QA4XXEV{ixkyRYu=BBs@kcl?=?=L2O znNUQR7q?0dBl09KdWp*#ac?w5fnQAL%hww5iuS%!-d~FQ;+nnQN!NRY*t>&32>HUa z8-}<2?H|i+zy7&A-u5LA>TQp8NEV#TmE_2mXcxA{zHs-f*`ewI81!`i27ozE3n z`?RlDePOZonT_h;DZFa%g;xL_TLS`hPk~}1I5nmczwV#0#22xKLQXvI;Y56jMtmEc zc!X|88i+qzCf=~z>00A+MV32>cxkzFI;sQluNa8m`xA)&1_bKUIB~^V#M@3CG$fZf z_{M6nm19UMU5JU51~blw1E(oDdFU$IL ztm8qqow3cZlNBt|btq~)I4{x+G#)T0lWafM)V0ihFq}0vu^$egW1~T!Za>6U=ao46 zY+@HW0AARIlaMm;Afx-Yc5fc}X({4{Ty)~9!+Hw=-V^G~r>%ahHc6jQ!>JqWJGW!= zc_-}fu-Bu9*73oh1Z^k6GVT=!%e)P2qi;pr9hetHFq3-E!0S2;j*czhf&RXBfD* zvbO;2vmeGIH+bJ}`%@2$RkJVfxWs-~)(WcfS% zeRKKSh7zXyx!anw-y?uF;cqTwH-kSI1F}W@ymJ!$b8;wY{tq>qf0QugpPBLxXo>$7 zYWvQm>}K$9us`SjoGgE~X7jg?#o=$9)uer22eicBZk4~)l-+Xv4joCBzl%{(^X%)< z@8a-hZD+#YCxABLub8r1&fm*NljZLwRMb5FPLIdmax?x8e;dW0rk_=m-E#gWr#2=z zK2AqP&ExM%lrZgo8SPEl&lb&}rk~;eG>bp8^%nI|B9wzBmH{U@rB>E>8wLEso=Sc} z2BHl7+^=7%j{JT2OFr3O%2d6}z4$B)uGCEQ6*TTT)xmYDW(%>mKJqP@h|9E>o%eUF zo!SqpOBV$Bp9w~f$WxvT7x9OKTol^uS&MJ)J~sL)?0dQQW*203#kLX9LM|`DD7fvs znstGsAUP{*z$r1>%tdq5y~3TVW~ZP4+(Y3+7q5X6T>v_x);0zC7YXt)mm=h)fUJf; zO>2`oksdqp-Whae(a3o`GoqW_bv6r(;u0WiDHS+7R7V z8LY5}@JuUGmTr{99!kL|Et?&{Q zV6a;>lrz|dKkQjN(UgI{?vw7sWG^z?c>Ms#!)-8p*HPg%S}!JG+cKPHv{ZO|tEj{q z!Zv@Hdl3GxbI<327(WLAZd_7MvmQ6W1QaTVda`&ubmna+>InoXd;5a~VyVpzh@DQX zI!nf+-n^}Fyt(XRXay}i2#kti1qQa}K7C@#aptij7jPtsmjJk0{-+r2rjRW75lTvE zy-8r{2P|mA+AC_Yj3lU6lpKILSvOIu5~N3N7tSYOE?F`SJP~RC_0LfI?>Dx;dLZIT zyeKRu?M7$K!2{_4rVf@O6eIj3?^>iuIJDQW25I6V6X{(@PntgS-tqbQ6DN$wpE-Hj z-4^%6@iPV&Oqw)tre#+C_`B{=(~&NM{-L!re9{2E0evbkL5Qfow8l6)Y8&(z6r6AWMl+Mb zetfFekJ)4V^CvhXK{gMEE2wS2DGpIs;Zoq}L_5mgKB&FOJV9ipi_8upv!lpFmmtUt zi`$2o7t)@x&g}DPx)#%cj=oS4@va}+@D|@Xh^5xLik#8(!o6B6Ifku4Nm!y3_XaI* z9`lL3RClq+D=ec`U3QJro9}o$AzJtnDF!cuUWXxs$>?z)d_YD@KCZ90lc<{HlT0dyU~axr-1!X zYhojpt)d-xBJ?SvW|C#wA3k?406rcg#x!nM;M9D~Gm?>PKg6#g21*zvIXV9?B0Y5Cw1WJU+RNOPylqf?4EuHi?oR3JuF`Y% zQqEa!rsupzIT`M-p0g1-0oOr)a5xC^Y@^?_ndd7wZ7kw2RbcL5?vyn4-4MZ)<6zmL zQ+b3tSy+5fvVfRfIyIu8?kt|ot?wDghW7ETyk%+F zm`1?ZVMZ@=+22O-ov1$V4S3|krLeXi-oue0vr$D~jGREdqSRn762=OvxHsU8>ed){ z5WnCh95B5e~72dx1g`h0oyhhJ(DED>m z$xeauLOm%5Ayj^O#lE$q@vM;#`qt`g^i<7Xv(|vk4S1=(T=!B`uPD2)uIyxMCiA9J zg7k>NhO0-#i$|$atO%e{us# z4*r0dfg-aXWx6-;`iFozC!5Oa@2&*tQPe+=4MqJ>yANh`XN{UTbJpbP)2^E~ zX*!-~-9IaT;=Ss_#0hg}PQ2SP@h?^qo z^B#883K54vKkM@)iFhn#EAT77t)ek+24osSO7kl%8-`j|sxnGP`mR~|Goy$F;bQzd z@`_}yNp$32*8c%>O|FV+t|Lrf7NEs_E4*W{nGTFvp3Tk@!}KMA4m?T2G$k-@(2!Nq z6=}8>x0ASY?!++tJiGzea54&XF9N=J`P1X-esNlTzJPpF^0;69G-7uGL8^?V7CZr$ z>rfsxEt97yu)ljVg_c8}`5{aGO|;gBP4Z7^SZTL1mVZNBm@Wyc!m-lL8k8Wcw2`_N zUnfh?6L{y~IF`y^NFNi&+?#D3} zD2_$!iAmfDw^m$>@JWI7tZjw52^H_g;vLmH>-nQtkb!6m(rGe7U^Uwz@cE?{oLi@X z(mNHpVmW^VQZtas;HiA1dh*mwAJ(yo~;~&6=Ej{K=}9M;JuJ*wuzXxJ9h5q$OZz37-Py-(xuCY>sNkcPgT z$P+k~fmdbwTNjqON#fyWsOte$!OQ?JRaVowHN8=3gNoAuhCKFq23K*kbXSGnz2WCa zUtr1j6(dge@d}-;{7&k@7(vrXpa}&}Q4d47?+iB{ngFdu9@LJDU?k~zz0VPgizOB*%~_;`sPh@vl>QvZrfh+b$YKWgbFKh* z8USE&3`#iJZkxtkH{7^_EPrqje!-oW{^qheoIv3BXi<+E72t1q96?y&H*%?Q36u{E zkNy*#D0)QT#PiyidpvJ$n8!*s25B}jiCWot;_*~LHS3DUL%)N5_g-QU zgR{GuNDMAUwRz0-y-H#~s@6-tes5nI0 zWmcmM&aqG~yrT@a^@0fY`+?ov9nYAnIx)fkggp#!zqc!rfgt_*gPrk z@yE&LwNr(WfyY3Qe*M98`~vpefR|E$<-#az&4qD}D9YLhEWDbnWj3 zx^ngB-FODea6VX@2){6j8Sbe%P!SbcM9+xDD$07)&o=BJW~@jC6#DfmY4`sK1!#sW4g5TumWvYXO4Gv`4A0mb@*dH{i$_4IfF9x=(H z4(wjciJO3IC!2=Dt-L3OfhrKBUw@GNWRyK0(>bIxX^jvS03#J;Rb#@9B^aG7Fl{5) z><#)Bog99u;Um0ruc4|$FL75QEpNm*>7Uw09QhE_(Vf^IVttwR(-f=&5$LYGttO*7 zJmTCD@9MYW(ftyS99Y>sc!)Ke+*1C9UTKl+8JjT8*og{EXL7UfqOd$2CKI!c*?6E? zM}Y5rnTvvzu&bG1H}$Qdmi0(yApI-y$>XDR9nv%?5zLQBFICguBTZui<$sGbkx%Jr zq=_?1S0R1xth+5!r{6U`9}~D)e5Xy%5q&HZ_^G8?{K(Rf$uq@4rpePL=T9C#bsOt=# zHMvc)!tMj9mS_8_)1qF14m?TIB1*vd-^H6)cm8{$%IA9%{FU@;$v-F1g%X&CTiIK; zQq%bOT9l7QGYWSw#0>}fx@D?a-pYV?l4900>vw@2XW zp6#wdSwcU`h<+Ea9Qp`9ZpP7XWPJpBQer~C(aEmX&@YRi-^hNvg`-~v^rySSD*7YH zl&P=Hubt_(_9D8Mv#;&yJ=RLwve_paV}* z3sVB5gCmQ(A4o0fhYa@9XmrDIU zTKpl!K!9QwWv2$)J=j|W8ST3~H5s;G8Q*@5?+ffY2N6Y!meF2hSW>i% z6V!|}Eh8QGPe7d7V+X9s78ci_PLQ-{ri=8NwwNh)hT7|$Zpvn@)yiGF3J+K;IjF7_ zkrCe@oX6rhmPJ|)ru8BxN6WF*cHw)yGZ0B=*q(zZy`y3KAe$P`8dCx*xV?f0TkvUR zD2g8sB;e(+eU=G$T@RZ^=~oFU_LZDqwG){+w_jM>7%T+>33wn?5bmHhp%MZTf=V zw&~aQvwdf?eRs3f_TAVF+jn<&wS6}|)Arq*EZcVrd)vMn+Rw8+$5WAWT|tR$4x#(4 zP1$}#+#7oB_G4@O{07T{OtCDU(aX`0N>LeCMlV-GDxG-rRgxN~(+8kwxAgSwFuhs8^TU<}xKuZs%VSC4$Q9;PAH--yREy>Ow?B}H zmiiYu7H*Bf1vw36`>m1k{x(r{SY``Q1L&zn9H6e-#Dpugb z{($Fo`{4jz+<1AipTLJ5conYf^SwLd!v zlS|t_GCaReuz5$*`+7G8Iu&n-oVLa;EBnEUV}D0Id-?s=7WlZxW*0pfxtvW=)=*A& zidOOIzDZh*INy9g_s@qU#1dma~Tni8Zk@Ky;E{6s2(SrOHQOajei zq0^|vItwJc^wTI!47`HB#0*`q(V0q8=7n%q0gKb;y#9_9{tCCUEu))Yl^}ruGsVMm zS>AtBh(W)1F-b|GU%#>lzbM}(5adFnyL7n_z4SsQk%j4N28vRLEGIibLo*MLfgt_* zgLCl=D#jDUvssymlf(l8^{&FMls_2>ce$v}WN2?fW6AL(%WpET`z8hy|)eSES%hy4*VNbi` zf$S-DhFvH|c7^QLW$z8Okm1Nges82n7b)Ef>3lVP9@3;JG;E%QG^riIbVYiWd-}}$ z8^_-}(Qwbhgqf3PPqgGmHd@zUA@AeQK z2*J;2I+-!1_3Df1GXS0J2PqprW9VHcd$qKE!oK%epBT6cE(&zuNgA{%fv!UGVYi-( z*=z^*cX^h5r!Nxuq?LrTdXnwp*6Y5^v)CTm4p72N5cCOx<-G0;2Z2=1?n|$HDmgoO zQ36_xqC`eA~g`s*)~E!by0!6wH@ej7>MGJ1iDuvX6Bjv zkt$fktIVzp)MJf4T`WF7uoWSQ7tju>yd=RKIuDG=-U9r@foQ*>D55$EXdmn!a_3-< z)YxShAA@Nf>>NPQMx)d5SDL->_5?g`W&tSRj=rOq-+~6(F92a3*G?TauEsvQHc^mG-0zfR?<>MOI!4CEN!W!6_xqdmJbORc3HJ2;|3B}GAG6nW*37I~vu4e@JjA+{ z&Xh0p<$p~HmHcH`lJ=`RhS&|h=8bwkDG-Uw3zS_Lp%{_<*N~aqi=|NL>AnvTC`o-a zq-x75%Y-QfK64tG?9=m!@BK%OPg8X@sc+5No&Q4o-5HxlaW?e#@ttqB<-bs}=Yy8x zUaoq(fG0KTN}7KkZ+?^IQ|GQnb!Nq@j6J_(NPL0%nIZA_pULPN0yQ5Hij0R&%I=2q z8uvLbp${SskC5I}WjAucl^aiK^q&HtyXn8J^G>fd;>tUZt6vR3zG+Zb-tpEfw`+2% zyO<(xtr2H-R<`b%-0aRIVOP9)=i&_JtH8k308p5Fe81Ek-!+ub8j9f?TTl4**>|Kd z2H(hfmjW@gL}~J{IXd)p;weN+x@>*lMY=b=+cu`9%liMo^{*b>TmApcs{d`ZwRQ21 zN5xMnSle5xTEqBJmVe*QARZKN4x&Bf(TzBx8xK$<>|A%adyGLNCtqW{BJa~}y<3}=n$MK0d=6~7dt}C`l+N$e8TCPR=>!lAd z2PMX;l&%KW+ZfG!Bcy6W=#l*Qp4R>Kmo(q^cv^QD;M_&a{nfx?DGt4=+c6;eoaVS3B4VWxv6fAPEFv~N8zEw)nL4}|vr@cRTJj06>gIYP zvR~Dm1vs}51a-f0q!B@Xur0=m6Z-7P_IoBQAre?C+GGM#w8jwxw){**mfG4?cHu zTMOqpl6;ND4bP9tt#PKRKFXOD#+fy4*Vv5Q+PP*u2yFr543oOzTs+>_ugkrrp5 zkH=PZi#wjjf)uv`1MZZPRTYOOx!-L$?SIAJaC*FnYm6h~+w$-C^gk4(KX#@hW3k)y zMWY{ki#3V$nI1k&O9p;Y-eWfU7mrI6Q7I}JAOAQ)|6p(n=~vj(uTX930{&*vpA*u* zPiTw)4d_?7Z2D=#Jqhlj|5Wlt&SmL{m+Pgh!FjsCSP)?Gv0JD7Q+OyZge>Os}$66C8K(IDoS;; zQ9X*v?yr{^)j5&=W(}IA`uC!Gtx>Jw;}Uzas6Lcd`~xM3{6LC?R4eSMR;V_0K7X^Q zw&kgsVtFd)ZVbpkwTfm@z4}K`{X>Wl)rXJ|wY{k9Srn^k+)cY^<2ghEvsTVb`{(uT zz#l~BbG}EG^*OTM=kraXMqdWQAMXgF*Zp0U>b4yFvXo2qUW(}9&5 zn1LDv9vIi_V~Ih&R9Rvwf#^VMSSPOQ2wl(b zfyFn}#?#*eE7?^2cI10tZ+}4yF8>7;qdMhMz_~II)Hh*lniLVEKQw*X3!4w3y#F>> z9-%0YJ%7uh{2ed;{!0g|w0oi!GFhzSEM3ES%Rh;SxO@X=DZ*oH!e1);$MyM(<(ta^ zjd>8H>0y@NU(7;Qw)3R4oqy{OIkp_W>$uJBq=dKPH~$7(_)c$LEjwn9C>mSy-=)v=fn#Pnam zPV2@SY2p*6f4=-gDR+Lw|KLqpNHA%C>uOXvdXzkG^_c2YNi^L zGtO1f7SpH9m7wsquIroTo3H*?%6ryzy$S=@j=U&6 zv=XOTaze>nqs&d!C-E6eD^{BGX?+vZEp3R>cKEb@iB%eerV-s{pO%wYZD|G4S!;b- z|5S}yg>`BLH?jcZ>=i5$rR7Le4ck86afS5*N5KrpWkF*>I~V#Wy`<{ybRWgzDWGnk zkAhS}(Zh&_((NhVH&T8t?n{>Nzy-etf2nUQvBpr|E+P1kd}JYJg) z4e`nis=s?-lsy8tlN7OK=%uh_hV^)^82JZZQeKC|TuXL3q5dn9Y3lAdK^3gnKR`jC_Jjx!ZYxmJZc*|G0JBg+R#wdS<6mjHLq*A{x z@te5Y$VjM0ldqu#cj7)vE>`l7Jlp|^YD*iUw8wqg5s4=)EmvuEKJCcF2IE4pxG>+R z6(%-W+7PAPhr*f>+@libH6jP@fLEQ0wrA3Y+K zQgzqrqXRrp_ZuHAps;dZB%0<-LMiJ=5l7Zv?m4sRi*RPMp`0u5Kkzk+r9tfwKRL~`T^cY{=E%MPKgi*P(e3X;0O^RMmG|dsGlq*S5 zBc+JAevA1{oNQziEB|s|<9KoA6iXhW^)U@gyMjtD({jN52>l+FKC97s9vjI!4MIW?-X%_(NG|)&2BAjj>hv-~wLcw&{73P^zgX%dhX9>`|}WO^EivOJIlSwO5(TtJEp$Ql8;#sk6G#P=H0K$PWy zoRbB_D#Zk3umPzRki$KY(*k402yjP5(4rvad?7{i}MEz zLzJA-$C;A*TozZY#+}rV!2bGT1a_p2#U_o#dp)Exfs~kT$!nCHAeljQR$_*w)hcbg zPdhs?-_jCF8|~AECKgy)vC_`)Y3C$H8N$UvxX7msV-!+^QM-m8q_UQuQk0fYEcS`2 zA!fMIV{9m&g8~qcpA0jkh7zTqd&)=8_SM}teDo}Io^oq_^i0%%qIVKa59KDM+)9cX znK9N62KJD{~ z(Z+=#BH#$0c79^4rR6H^<8zFt5vUx%!x^;#X9O6|2o{N|PNHfUXHG-!&_Cxh&;;Z$ z59IRzQFNJ)p69E(N*^7L&J$+0`{=pU6+t%;O>; rytnKC9s{Z1SOXNnDFC$sDd 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 z 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

    vCJ5M+U=c=jG%jxe7a)vn>-X^b?-``L5 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

    7VmJGF&7 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

  • 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⩔pFYU$-;q7+mfn#CAJUB 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 PjE2By2#kgR^+Nyvtvb4W literal 0 HcmV?d00001 From 8368112f453cc20672943dac533da1ee8ff933a3 Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 18:05:35 +0200 Subject: [PATCH 019/204] Try to check existance of mmaps folder. --- src/server/collision/Management/MMapManager.cpp | 9 +++------ src/server/collision/Management/MMapManager.h | 2 +- src/server/game/Maps/Map.cpp | 2 +- src/server/game/World/World.cpp | 4 +++- 4 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/server/collision/Management/MMapManager.cpp b/src/server/collision/Management/MMapManager.cpp index aac5647a6de..449abcb967d 100644 --- a/src/server/collision/Management/MMapManager.cpp +++ b/src/server/collision/Management/MMapManager.cpp @@ -82,10 +82,10 @@ namespace MMAP return uint32(x << 16 | y); } - bool MMapManager::loadMap(uint32 mapId, int32 x, int32 y) + bool MMapManager::loadMap(const std::string& basePath, uint32 mapId, int32 x, int32 y) { // make sure the mmap is loaded and ready to load tiles - if(!loadMapData(mapId)) + if (!loadMapData(mapId)) return false; // get this mmap data @@ -95,10 +95,7 @@ namespace MMAP // check if we already have this tile loaded uint32 packedGridPos = packTileID(x, y); if (mmap->mmapLoadedTiles.find(packedGridPos) != mmap->mmapLoadedTiles.end()) - { - //sLog->outError("MMAP:loadMap: Asked to load already loaded navmesh tile. %03u%02i%02i.mmtile", mapId, y, x); return false; - } // load this tile :: mmaps/MMMXXYY.mmtile uint32 pathLen = sWorld->GetDataPath().length() + strlen("mmaps/%03i%02i%02i.mmtile")+1; @@ -136,7 +133,7 @@ namespace MMAP ASSERT(data); size_t result = fread(data, fileHeader.size, 1, file); - if(!result) + if (!result) { sLog->outError("MMAP:loadMap: Bad header or data in mmap %03u%02i%02i.mmtile", mapId, y, x); fclose(file); diff --git a/src/server/collision/Management/MMapManager.h b/src/server/collision/Management/MMapManager.h index 8af452032d1..23b7d5fc6f8 100644 --- a/src/server/collision/Management/MMapManager.h +++ b/src/server/collision/Management/MMapManager.h @@ -61,7 +61,7 @@ namespace MMAP MMapManager() : loadedTiles(0) {} ~MMapManager(); - bool loadMap(uint32 mapId, int32 x, int32 y); + bool loadMap(const std::string& basePath, uint32 mapId, int32 x, int32 y); bool unloadMap(uint32 mapId, int32 x, int32 y); bool unloadMap(uint32 mapId); bool unloadMapInstance(uint32 mapId, uint32 instanceId); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index c3732769d04..a9fc3f3350f 100755 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -124,7 +124,7 @@ bool Map::ExistVMap(uint32 mapid, int gx, int gy) void Map::LoadMMap(int gx, int gy) { // DONT CHANGE "gy" and "gx" - Its necessary ! - int mmapLoadResult = MMAP::MMapFactory::createOrGetMMapManager()->loadMap(GetId(), gy, gx); + int mmapLoadResult = MMAP::MMapFactory::createOrGetMMapManager()->loadMap((sWorld->GetDataPath() + "mmaps").c_str(), GetId(), gy, gx); switch (mmapLoadResult) { case MMAP::MMAP_LOAD_RESULT_OK: diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 90d4ce3604a..a5ec6be10d4 100755 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1123,8 +1123,10 @@ void World::LoadConfigSettings(bool reload) sLog->outString("Using DataDir %s", m_dataPath.c_str()); } - m_bool_configs[CONFIG_VMAP_INDOOR_CHECK] = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", 0); m_bool_configs[CONFIG_ENABLE_MMAPS] = ConfigMgr::GetBoolDefault("mmap.enablePathFinding", true); + sLog->outString("WORLD: MMap data directory is: %smmaps", m_dataPath.c_str()); + + m_bool_configs[CONFIG_VMAP_INDOOR_CHECK] = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", 0); bool enableIndoor = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", true); bool enableLOS = ConfigMgr::GetBoolDefault("vmap.enableLOS", true); bool enableHeight = ConfigMgr::GetBoolDefault("vmap.enableHeight", true); From abc33c7b5d830c96b17ff2a0473702f8a5b31b87 Mon Sep 17 00:00:00 2001 From: Venugh Date: Mon, 9 Apr 2012 18:36:45 +0200 Subject: [PATCH 020/204] Core/Movement: Correct MotionMaster and fix a crash. --- src/server/game/Movement/MotionMaster.cpp | 12 ++++++------ src/server/game/Movement/MotionMaster.h | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index fca0260eb87..7e8020b7863 100755 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -280,18 +280,18 @@ void MotionMaster::MoveFollow(Unit* target, float dist, float angle, MovementSlo } } -void MotionMaster::MovePoint(uint32 id, float x, float y, float z) +void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generatePath) { if (_owner->GetTypeId() == TYPEID_PLAYER) { sLog->outStaticDebug("Player (GUID: %u) targeted point (Id: %u X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), id, x, y, z); - Mutate(new PointMovementGenerator(id, x, y, z, true), MOTION_SLOT_ACTIVE); + Mutate(new PointMovementGenerator(id, x, y, z, generatePath), MOTION_SLOT_ACTIVE); } else { sLog->outStaticDebug("Creature (Entry: %u GUID: %u) targeted point (ID: %u X: %f Y: %f Z: %f)", _owner->GetEntry(), _owner->GetGUIDLow(), id, x, y, z); - Mutate(new PointMovementGenerator(id, x, y, z, true), MOTION_SLOT_ACTIVE); + Mutate(new PointMovementGenerator(id, x, y, z, generatePath), MOTION_SLOT_ACTIVE); } } @@ -396,7 +396,7 @@ void MotionMaster::MoveFall(uint32 id/*=0*/) Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED); } -void MotionMaster::MoveCharge(float x, float y, float z, float speed, uint32 id) +void MotionMaster::MoveCharge(float x, float y, float z, float speed, uint32 id, bool generatePath) { if (Impl[MOTION_SLOT_CONTROLLED] && Impl[MOTION_SLOT_CONTROLLED]->GetMovementGeneratorType() != DISTRACT_MOTION_TYPE) return; @@ -404,13 +404,13 @@ void MotionMaster::MoveCharge(float x, float y, float z, float speed, uint32 id) if (_owner->GetTypeId() == TYPEID_PLAYER) { sLog->outStaticDebug("Player (GUID: %u) charge point (X: %f Y: %f Z: %f)", _owner->GetGUIDLow(), x, y, z); - Mutate(new PointMovementGenerator(id, x, y, z, speed), MOTION_SLOT_CONTROLLED); + Mutate(new PointMovementGenerator(id, x, y, z, generatePath, speed), MOTION_SLOT_CONTROLLED); } else { sLog->outStaticDebug("Creature (Entry: %u GUID: %u) charge point (X: %f Y: %f Z: %f)", _owner->GetEntry(), _owner->GetGUIDLow(), x, y, z); - Mutate(new PointMovementGenerator(id, x, y, z, speed), MOTION_SLOT_CONTROLLED); + Mutate(new PointMovementGenerator(id, x, y, z, generatePath, speed), MOTION_SLOT_CONTROLLED); } } diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index d6144bfcc3a..a96a3e6391a 100755 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -154,13 +154,13 @@ class MotionMaster //: private std::stack void MoveFleeing(Unit* enemy, uint32 time = 0); void MovePoint(uint32 id, const Position &pos) { MovePoint(id, pos.m_positionX, pos.m_positionY, pos.m_positionZ); } - void MovePoint(uint32 id, float x, float y, float z); + void MovePoint(uint32 id, float x, float y, float z, bool generatePath = false); // These two movement types should only be used with creatures having landing/takeoff animations void MoveLand(uint32 id, Position const& pos, float speed); void MoveTakeoff(uint32 id, Position const& pos, float speed); - void MoveCharge(float x, float y, float z, float speed = SPEED_CHARGE, uint32 id = EVENT_CHARGE); + void MoveCharge(float x, float y, float z, float speed = SPEED_CHARGE, uint32 id = EVENT_CHARGE, bool generatePath = false); void MoveKnockbackFrom(float srcX, float srcY, float speedXY, float speedZ); void MoveJumpTo(float angle, float speedXY, float speedZ); void MoveJump(float x, float y, float z, float speedXY, float speedZ, uint32 id = 0); From 5061fa626a72fa7c2632a4b2cef318633c56d85b Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 22 Aug 2012 17:39:25 -0500 Subject: [PATCH 021/204] Core/Mmaps: * Unload instanced mmaps before unloading the base map * Load only mmaps for base map on map creation * Extractor: Somewhat speed improvement --- src/server/game/Maps/Map.cpp | 9 +- src/server/game/Movement/MotionMaster.h | 4 +- .../mmaps_generator/IntermediateValues.cpp | 2 +- src/tools/mmaps_generator/MapBuilder.cpp | 105 ++++++++++++------ src/tools/mmaps_generator/MapBuilder.h | 1 + src/tools/mmaps_generator/PathGenerator.cpp | 17 ++- src/tools/mmaps_generator/TerrainBuilder.cpp | 21 ++-- 7 files changed, 105 insertions(+), 54 deletions(-) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index b38f89eab8f..5e3699146f2 100755 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -71,8 +71,8 @@ Map::~Map() if (!m_scriptSchedule.empty()) sScriptMgr->DecreaseScheduledScriptCount(m_scriptSchedule.size()); - MMAP::MMapFactory::createOrGetMMapManager()->unloadMap(GetId()); MMAP::MMapFactory::createOrGetMMapManager()->unloadMapInstance(GetId(), i_InstanceId); + MMAP::MMapFactory::createOrGetMMapManager()->unloadMap(GetId()); } bool Map::ExistMap(uint32 mapid, int gx, int gy) @@ -206,9 +206,12 @@ void Map::LoadMap(int gx, int gy, bool reload) void Map::LoadMapAndVMap(int gx, int gy) { LoadMap(gx, gy); - LoadMMap(gx, gy); + // Only load the data for the base map if (i_InstanceId == 0) - LoadVMap(gx, gy); // Only load the data for the base map + { + LoadVMap(gx, gy); + LoadMMap(gx, gy); + } } void Map::InitStateMachine() diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index f10c6569cad..918896a5a81 100755 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -154,13 +154,13 @@ class MotionMaster //: private std::stack void MoveFleeing(Unit* enemy, uint32 time = 0); void MovePoint(uint32 id, const Position &pos) { MovePoint(id, pos.m_positionX, pos.m_positionY, pos.m_positionZ); } - void MovePoint(uint32 id, float x, float y, float z, bool generatePath = false); + void MovePoint(uint32 id, float x, float y, float z, bool generatePath = true); // These two movement types should only be used with creatures having landing/takeoff animations void MoveLand(uint32 id, Position const& pos); void MoveTakeoff(uint32 id, Position const& pos); - void MoveCharge(float x, float y, float z, float speed = SPEED_CHARGE, uint32 id = EVENT_CHARGE, bool generatePath = false); + void MoveCharge(float x, float y, float z, float speed = SPEED_CHARGE, uint32 id = EVENT_CHARGE, bool generatePath = true); void MoveKnockbackFrom(float srcX, float srcY, float speedXY, float speedZ); void MoveJumpTo(float angle, float speedXY, float speedZ); void MoveJump(float x, float y, float z, float speedXY, float speedZ, uint32 id = 0); diff --git a/src/tools/mmaps_generator/IntermediateValues.cpp b/src/tools/mmaps_generator/IntermediateValues.cpp index 9eefb1e65f0..b473d6472a0 100644 --- a/src/tools/mmaps_generator/IntermediateValues.cpp +++ b/src/tools/mmaps_generator/IntermediateValues.cpp @@ -202,7 +202,7 @@ namespace MMAP void IntermediateValues::generateObjFile(uint32 mapID, uint32 tileX, uint32 tileY, MeshData &meshData) { char objFileName[255]; - sprintf(objFileName, "meshes/map%03u.obj", mapID); + sprintf(objFileName, "meshes/map%03u%02u%02u.obj", mapID, tileY, tileX); FILE* objFile = fopen(objFileName, "wb"); if (!objFile) diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 2987e6596dd..e47b2e5b44f 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -24,6 +24,7 @@ #include "LoginDatabase.h" #include "DetourNavMeshBuilder.h" +#include "DetourNavMesh.h" #include "DetourCommon.h" // These make the linker happy. @@ -206,6 +207,56 @@ namespace MMAP minX = 32 - bmax[0] / GRID_SIZE; minY = 32 - bmax[2] / GRID_SIZE; } + + void MapBuilder::buildMeshFromFile(char* name) + { + FILE* file = fopen(name, "rb"); + if (!file) + return; + + printf("Building mesh from file\n"); + int tileX, tileY, mapId; + fread(&mapId, sizeof(int), 1, file); + fread(&tileX, sizeof(int), 1, file); + fread(&tileY, sizeof(int), 1, file); + + dtNavMesh* navMesh = NULL; + buildNavMesh(mapId, navMesh); + if (!navMesh) + { + printf("Failed creating navmesh! \n"); + fclose(file); + return; + } + + + int verticesCount, indicesCount; + fread(&verticesCount, sizeof(int), 1, file); + fread(&indicesCount, sizeof(int), 1, file); + + float* verts = new float[verticesCount]; + int* inds = new int[indicesCount]; + + fread(verts, sizeof(float), verticesCount, file); + fread(inds, sizeof(int), indicesCount, file); + + MeshData data; + + for (int i = 0; i < verticesCount; ++i) + data.solidVerts.append(verts[i]); + + for (int i = 0; i < indicesCount; ++i) + data.solidTris.append(inds[i]); + + TerrainBuilder::cleanVertices(data.solidVerts, data.solidTris); + // get bounds of current tile + float bmin[3], bmax[3]; + getTileBounds(tileX, tileY, data.solidVerts.getCArray(), data.solidVerts.size() / 3, bmin, bmax); + + // build navmesh tile + buildMoveMapTile(mapId, tileX, tileY, data, bmin, bmax, navMesh); + fclose(file); + } /**************************************************************************/ void MapBuilder::buildSingleTile(uint32 mapID, uint32 tileX, uint32 tileY) @@ -451,17 +502,32 @@ namespace MMAP Tile* tiles = new Tile[TILES_PER_MAP * TILES_PER_MAP]; // Initialize per tile config. - rcConfig tileCfg; - memcpy(&tileCfg, &config, sizeof(rcConfig)); + rcConfig tileCfg = config; tileCfg.width = config.tileSize + config.borderSize*2; tileCfg.height = config.tileSize + config.borderSize*2; + // merge per tile poly and detail meshes + rcPolyMesh** pmmerge = new rcPolyMesh*[TILES_PER_MAP * TILES_PER_MAP]; + if (!pmmerge) + { + printf("%s alloc pmmerge FIALED! \r", tileString); + return; + } + + rcPolyMeshDetail** dmmerge = new rcPolyMeshDetail*[TILES_PER_MAP * TILES_PER_MAP]; + if (!dmmerge) + { + printf("%s alloc dmmerge FIALED! \r", tileString); + return; + } + + int nmerge = 0; // build all tiles for (int y = 0; y < TILES_PER_MAP; ++y) { for (int x = 0; x < TILES_PER_MAP; ++x) { - Tile& tile = tiles[x + y*TILES_PER_MAP]; + Tile& tile = tiles[x + y * TILES_PER_MAP]; // Calculate the per tile bounding box. tileCfg.bmin[0] = config.bmin[0] + (x*config.tileSize - config.borderSize)*config.cs; @@ -469,12 +535,6 @@ namespace MMAP tileCfg.bmax[0] = config.bmin[0] + ((x+1)*config.tileSize + config.borderSize)*config.cs; tileCfg.bmax[2] = config.bmin[2] + ((y+1)*config.tileSize + config.borderSize)*config.cs; - float tbmin[2], tbmax[2]; - tbmin[0] = tileCfg.bmin[0]; - tbmin[1] = tileCfg.bmin[2]; - tbmax[0] = tileCfg.bmax[0]; - tbmax[1] = tileCfg.bmax[2]; - // build heightfield tile.solid = rcAllocHeightfield(); if (!tile.solid || !rcCreateHeightfield(m_rcContext, *tile.solid, tileCfg.width, tileCfg.height, tileCfg.bmin, tileCfg.bmax, tileCfg.cs, tileCfg.ch)) @@ -488,7 +548,7 @@ namespace MMAP memset(triFlags, NAV_GROUND, tTriCount*sizeof(unsigned char)); rcClearUnwalkableTriangles(m_rcContext, tileCfg.walkableSlopeAngle, tVerts, tVertCount, tTris, tTriCount, triFlags); rcRasterizeTriangles(m_rcContext, tVerts, tVertCount, tTris, triFlags, tTriCount, *tile.solid, config.walkableClimb); - delete [] triFlags; + delete[] triFlags; rcFilterLowHangingWalkableObstacles(m_rcContext, config.walkableClimb, *tile.solid); rcFilterLedgeSpans(m_rcContext, tileCfg.walkableHeight, tileCfg.walkableClimb, *tile.solid); @@ -554,30 +614,7 @@ namespace MMAP tile.chf = NULL; rcFreeContourSet(tile.cset); tile.cset = NULL; - } - } - - // merge per tile poly and detail meshes - rcPolyMesh** pmmerge = new rcPolyMesh*[TILES_PER_MAP * TILES_PER_MAP]; - if (!pmmerge) - { - printf("%s alloc pmmerge FIALED! \r", tileString); - return; - } - - rcPolyMeshDetail** dmmerge = new rcPolyMeshDetail*[TILES_PER_MAP * TILES_PER_MAP]; - if (!dmmerge) - { - printf("%s alloc dmmerge FIALED! \r", tileString); - return; - } - - int nmerge = 0; - for (int y = 0; y < TILES_PER_MAP; ++y) - { - for (int x = 0; x < TILES_PER_MAP; ++x) - { - Tile& tile = tiles[x + y*TILES_PER_MAP]; + if (tile.pmesh) { pmmerge[nmerge] = tile.pmesh; diff --git a/src/tools/mmaps_generator/MapBuilder.h b/src/tools/mmaps_generator/MapBuilder.h index d0f33ce9a79..20789bf9bff 100644 --- a/src/tools/mmaps_generator/MapBuilder.h +++ b/src/tools/mmaps_generator/MapBuilder.h @@ -74,6 +74,7 @@ namespace MMAP // builds all mmap tiles for the specified map id (ignores skip settings) void buildMap(uint32 mapID); + void buildMeshFromFile(char* name); // builds an mmap tile for the specified map and its mesh void buildSingleTile(uint32 mapID, uint32 tileX, uint32 tileY); diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp index 2eb2c6545c4..7d9f59ed138 100644 --- a/src/tools/mmaps_generator/PathGenerator.cpp +++ b/src/tools/mmaps_generator/PathGenerator.cpp @@ -70,7 +70,8 @@ bool handleArgs(int argc, char** argv, bool &debugOutput, bool &silent, bool &bigBaseUnit, - char* &offMeshInputPath) + char* &offMeshInputPath, + char* &file) { char* param = NULL; for (int i = 1; i < argc; ++i) @@ -87,6 +88,13 @@ bool handleArgs(int argc, char** argv, else printf("invalid option for '--maxAngle', using default\n"); } + else if (strcmp(argv[i], "--file") == 0) + { + param = argv[++i]; + if (!param) + return false; + file = param; + } else if (strcmp(argv[i], "--tile") == 0) { param = argv[++i]; @@ -235,11 +243,12 @@ int main(int argc, char** argv) silent = false, bigBaseUnit = false; char* offMeshInputPath = NULL; + char* file = NULL; bool validParam = handleArgs(argc, argv, mapnum, tileX, tileY, maxAngle, skipLiquid, skipContinents, skipJunkMaps, skipBattlegrounds, - debugOutput, silent, bigBaseUnit, offMeshInputPath); + debugOutput, silent, bigBaseUnit, offMeshInputPath, file); if (!validParam) return silent ? -1 : finish("You have specified invalid parameters", -1); @@ -262,7 +271,9 @@ int main(int argc, char** argv) MapBuilder builder(maxAngle, skipLiquid, skipContinents, skipJunkMaps, skipBattlegrounds, debugOutput, bigBaseUnit, offMeshInputPath); - if (tileX > -1 && tileY > -1 && mapnum >= 0) + if (file) + builder.buildMeshFromFile(file); + else if (tileX > -1 && tileY > -1 && mapnum >= 0) builder.buildSingleTile(mapnum, tileX, tileY); else if (mapnum >= 0) builder.buildMap(uint32(mapnum)); diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index c696f6017a5..e16dd16707b 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -767,25 +767,24 @@ namespace MMAP int* t = tris.getCArray(); float* v = verts.getCArray(); + G3D::Array cleanVerts; + int index, count = 0; // collect all the vertex indices from triangle for (int i = 0; i < tris.size(); ++i) { if (vertMap.find(t[i]) != vertMap.end()) continue; + std::pair val; + val.first = t[i]; + + index = val.first; + val.second = count; - vertMap.insert(std::pair(t[i], 0)); - } - - // collect the vertices - G3D::Array cleanVerts; - int index, count = 0; - for (map::iterator it = vertMap.begin(); it != vertMap.end(); ++it) - { - index = (*it).first; - (*it).second = count; - cleanVerts.append(v[index*3], v[index*3+1], v[index*3+2]); + vertMap.insert(val); + cleanVerts.append(v[index * 3], v[index * 3 + 1], v[index * 3 + 2]); count++; } + verts.fastClear(); verts.append(cleanVerts); cleanVerts.clear(); From 4273690478ccdc74528fa6ea6698cfa2062fa2fc Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 22 Aug 2012 17:42:05 -0500 Subject: [PATCH 022/204] Core/Mmaps: Allow disabling pathfinding for specific maps in the config --- src/server/game/World/World.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 928a8184d5d..0d55d7a52e8 100755 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1126,6 +1126,7 @@ void World::LoadConfigSettings(bool reload) m_bool_configs[CONFIG_ENABLE_MMAPS] = ConfigMgr::GetBoolDefault("mmap.enablePathFinding", true); sLog->outString("WORLD: MMap data directory is: %smmaps", m_dataPath.c_str()); + MMap::MMapFactory::preventPathfindingOnMaps(ConfigMgr::GetStringDefault("mmap.ignoreMapIds", "").c_str()); m_bool_configs[CONFIG_VMAP_INDOOR_CHECK] = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", 0); bool enableIndoor = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", true); From c3f75cdf1d8c686a3061ef6c8b63a92bae5954c8 Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 22 Aug 2012 17:47:58 -0500 Subject: [PATCH 023/204] Core/MMaps: Do not allow creatures that cant fly to take off the land, even when building shorcut paths. --- src/server/game/Entities/Unit/Unit.cpp | 2 +- .../MovementGenerators/PathFinderMovementGenerator.cpp | 10 ++++++++++ .../MovementGenerators/PathFinderMovementGenerator.h | 2 ++ .../MovementGenerators/TargetedMovementGenerator.cpp | 9 ++++----- src/server/game/Movement/Spline/MoveSplineInit.h | 6 +++--- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 2ba3b4e8c06..183eddfcae4 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -373,7 +373,7 @@ bool Unit::haveOffhandWeapon() const void Unit::MonsterMoveWithSpeed(float x, float y, float z, float speed, bool generatePath, bool forceDestination) { Movement::MoveSplineInit init(*this); - init.MoveTo(x,y,z); + init.MoveTo(x, y, z, generatePath, forceDestination); init.SetVelocity(speed); init.Launch(); } diff --git a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp index 4894b5eb841..3172deb210e 100644 --- a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp @@ -443,6 +443,8 @@ void PathFinderMovementGenerator::BuildPointPath(const float *startPoint, const for (uint32 i = 0; i < pointCount; ++i) m_pathPoints[i] = Vector3(pathPoints[i*VERTEX_SIZE+2], pathPoints[i*VERTEX_SIZE], pathPoints[i*VERTEX_SIZE+1]); + NormalizePath(); + // first point is always our current location - we need the next one setActualEndPosition(m_pathPoints[pointCount-1]); @@ -469,6 +471,12 @@ void PathFinderMovementGenerator::BuildPointPath(const float *startPoint, const sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::BuildPointPath path type %d size %d poly-size %d\n", m_type, pointCount, m_polyLength); } +void PathFinderMovementGenerator::NormalizePath() +{ + for (uint32 i = 0; i < m_pathPoints.size(); ++i) + m_sourceUnit->UpdateAllowedPositionZ(m_pathPoints[i].x, m_pathPoints[i].y, m_pathPoints[i].z); +} + void PathFinderMovementGenerator::BuildShortcut() { sLog->outDebug(LOG_FILTER_MAPS, "++ BuildShortcut :: making shortcut\n"); @@ -482,6 +490,8 @@ void PathFinderMovementGenerator::BuildShortcut() m_pathPoints[0] = getStartPosition(); m_pathPoints[1] = getActualEndPosition(); + NormalizePath(); + m_type = PATHFIND_SHORTCUT; } diff --git a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h index f4edd1a1789..5dd2ad82a0a 100644 --- a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h @@ -98,6 +98,8 @@ class PathFinderMovementGenerator void setStartPosition(Vector3 point) { m_startPosition = point; } void setEndPosition(Vector3 point) { m_actualEndPosition = point; m_endPosition = point; } void setActualEndPosition(Vector3 point) { m_actualEndPosition = point; } + + void NormalizePath(); void clear() { diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 1680bfeb1d4..766fe0b8032 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -79,11 +79,7 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T &owner) owner.AddUnitState(UNIT_STATE_CHASE); Movement::MoveSplineInit init(owner); - if (!i_target->IsInWater()) - init.MovebyPath(i_path->getPath()); - else - init.MoveTo(i_target->GetPositionX(), i_target->GetPositionY(), i_target->GetPositionZ(), false, false); - + init.MovebyPath(i_path->getPath()); init.SetWalk(((D*)this)->EnableWalking()); init.Launch(); } @@ -128,6 +124,9 @@ bool TargetedMovementGeneratorMedium::Update(T &owner, const uint32 & time_ D::_clearUnitStateMove(owner); return true; } + + if (owner.GetTypeId() == TYPEID_UNIT && !i_target->isInAccessiblePlaceFor((const Creature*)&owner)) + return false; // prevent movement while casting spells with cast time or channel time if (owner.HasUnitState(UNIT_STATE_CASTING)) diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h index 4efde66fcd5..740914c59db 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.h +++ b/src/server/game/Movement/Spline/MoveSplineInit.h @@ -84,10 +84,10 @@ namespace Movement */ void MovebyPath(const PointsArray& path, int32 pointId = 0); - /* Initializes simple A to B mition, A is current unit's position, B is destination + /* Initializes simple A to B motion, A is current unit's position, B is destination */ - void MoveTo(const Vector3& destination, bool generatePath = false, bool forceDestination = false); - void MoveTo(float x, float y, float z, bool generatePath = false, bool forceDestination = false); + void MoveTo(const Vector3& destination, bool generatePath = true, bool forceDestination = false); + void MoveTo(float x, float y, float z, bool generatePath = true, bool forceDestination = false); /* Sets Id of fisrt point of the path. When N-th path point will be done ILisener will notify that pointId + N done * Needed for waypoint movement where path splitten into parts From 4c765aad3ddb0e8a890ee163cf3162d14c396d7e Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 22 Aug 2012 18:00:58 -0500 Subject: [PATCH 024/204] Core/Maps: Reduce the output map file size in the maps extractor for maps that do not have any hole information Core/Mmaps: Fixed swimming creatures stuck in water. (Thanks Vlad and @Chevron ) Note: Re-extract maps --- src/server/game/Maps/Map.cpp | 33 +++++++------------ .../TargetedMovementGenerator.cpp | 3 -- src/tools/map_extractor/System.cpp | 19 ++++++++--- src/tools/mmaps_generator/TerrainBuilder.cpp | 11 ++++--- 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 5e3699146f2..80668d23ed8 100755 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -42,7 +42,7 @@ union u_map_magic }; u_map_magic MapMagic = { {'M','A','P','S'} }; -u_map_magic MapVersionMagic = { {'v','1','.','2'} }; +u_map_magic MapVersionMagic = { {'v','1','.','3'} }; u_map_magic MapAreaMagic = { {'A','R','E','A'} }; u_map_magic MapHeightMagic = { {'M','H','G','T'} }; u_map_magic MapLiquidMagic = { {'M','L','I','Q'} }; @@ -124,19 +124,12 @@ bool Map::ExistVMap(uint32 mapid, int gx, int gy) void Map::LoadMMap(int gx, int gy) { // DONT CHANGE "gy" and "gx" - Its necessary ! - int mmapLoadResult = MMAP::MMapFactory::createOrGetMMapManager()->loadMap((sWorld->GetDataPath() + "mmaps").c_str(), GetId(), gy, gx); - switch (mmapLoadResult) - { - case MMAP::MMAP_LOAD_RESULT_OK: - sLog->outDetail("MMAP loaded name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); - break; - case MMAP::MMAP_LOAD_RESULT_ERROR: - sLog->outDetail("Could not load MMAP name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); - break; - case MMAP::MMAP_LOAD_RESULT_IGNORED: - sLog->outStaticDebug("Ignored MMAP name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); - break; - } + bool mmapLoadResult = MMAP::MMapFactory::createOrGetMMapManager()->loadMap((sWorld->GetDataPath() + "mmaps").c_str(), GetId(), gy, gx); + + if (result) + sLog->outDetail("MMAP loaded name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); + else + sLog->outDetail("Could not load MMAP name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); } void Map::LoadVMap(int gx, int gy) @@ -187,18 +180,16 @@ void Map::LoadMap(int gx, int gy, bool reload) } // map file name - char *tmp=NULL; - int len = sWorld->GetDataPath().length()+strlen("maps/%03u%02u%02u.map")+1; + char* tmp = NULL; + int len = sWorld->GetDataPath().length() + strlen("maps/%03u%02u%02u.map") + 1; tmp = new char[len]; - snprintf(tmp, len, (char *)(sWorld->GetDataPath()+"maps/%03u%02u%02u.map").c_str(), GetId(), gx, gy); + snprintf(tmp, len, (char *)(sWorld->GetDataPath() + "maps/%03u%02u%02u.map").c_str(), GetId(), gx, gy); sLog->outInfo(LOG_FILTER_MAPS, "Loading map %s", tmp); // loading data GridMaps[gx][gy] = new GridMap(); if (!GridMaps[gx][gy]->loadData(tmp)) - { sLog->outError(LOG_FILTER_MAPS, "Error loading map file: \n %s\n", tmp); - } - delete [] tmp; + delete[] tmp; sScriptMgr->OnLoadGridMap(this, GridMaps[gx][gy], gx, gy); } @@ -1094,7 +1085,7 @@ GridMap::~GridMap() unloadData(); } -bool GridMap::loadData(char *filename) +bool GridMap::loadData(char* filename) { // Unload old data if exist unloadData(); diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 766fe0b8032..1fc2ab5a6cb 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -125,9 +125,6 @@ bool TargetedMovementGeneratorMedium::Update(T &owner, const uint32 & time_ return true; } - if (owner.GetTypeId() == TYPEID_UNIT && !i_target->isInAccessiblePlaceFor((const Creature*)&owner)) - return false; - // prevent movement while casting spells with cast time or channel time if (owner.HasUnitState(UNIT_STATE_CASTING)) { diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index e34bc4221e7..ad9a663ac27 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -276,7 +276,7 @@ void ReadLiquidTypeTableDBC() // Map file format data static char const* MAP_MAGIC = "MAPS"; -static char const* MAP_VERSION_MAGIC = "v1.2"; +static char const* MAP_VERSION_MAGIC = "v1.3"; static char const* MAP_AREA_MAGIC = "AREA"; static char const* MAP_HEIGHT_MAGIC = "MHGT"; static char const* MAP_LIQUID_MAGIC = "MLIQ"; @@ -836,8 +836,8 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, else map.holesOffset = map.heightMapOffset + map.heightMapSize; - map.holesSize = sizeof(holes); memset(holes, 0, map.holesSize); + bool hasHoles = false; for (int i = 0; i < ADT_CELLS_PER_GRID; ++i) { @@ -847,12 +847,19 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, if (!cell) continue; holes[i][j] = cell->holes; + if (!hasHoles && cell->holes != 0) + hasHoles = true; } } + + if (hasHoles) + map.holesSize = sizeof(holes); + else + map.holesSize = 0; // Ok all data prepared - store it - FILE *output=fopen(filename2, "wb"); - if(!output) + FILE* output = fopen(filename2, "wb"); + if (!output) { printf("Can't create the output file '%s'\n", filename2); return false; @@ -899,8 +906,10 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, fwrite(&liquid_height[y+liquidHeader.offsetY][liquidHeader.offsetX], sizeof(float), liquidHeader.width, output); } } + // store hole data - fwrite(holes, map.holesSize, 1, output); + if (hasHoles) + fwrite(holes, map.holesSize, 1, output); fclose(output); diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index e16dd16707b..7ee4dc7f46c 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -159,9 +159,12 @@ namespace MMAP } // hole data - memset(holes, 0, fheader.holesSize); - fseek(mapFile, fheader.holesOffset, SEEK_SET); - fread(holes, fheader.holesSize, 1, mapFile); + if (fheader.holesSize != 0) + { + memset(holes, 0, fheader.holesSize); + fseek(mapFile, fheader.holesOffset, SEEK_SET); + fread(holes, fheader.holesSize, 1, mapFile); + } int count = meshData.solidVerts.size() / 3; float xoffset = (float(tileX)-32)*GRID_SIZE; @@ -379,7 +382,7 @@ namespace MMAP } // if there is a hole here, don't use the terrain - if (useTerrain) + if (useTerrain && fheader.holesSize != 0) useTerrain = !isHole(i, holes); // we use only one terrain kind per quad - pick higher one From 45fc80736dbb733628537612b478d9a5415aeb9e Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 22 Aug 2012 18:03:01 -0500 Subject: [PATCH 025/204] Core/Mmaps: Allow swimming creatures to move underwater when there is a hole in the mesh --- .../PathFinderMovementGenerator.cpp | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp index 3172deb210e..82dcbc07648 100644 --- a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp @@ -180,14 +180,32 @@ void PathFinderMovementGenerator::BuildPolyPath(const Vector3 &startPos, const V dtPolyRef endPoly = getPolyByLocation(endPoint, &distToEndPoly); // we have a hole in our mesh - // make shortcut path and mark it as NOPATH ( with flying exception ) + // make shortcut path and mark it as NOPATH ( with flying and swimming exception ) // its up to caller how he will use this info if (startPoly == INVALID_POLYREF || endPoly == INVALID_POLYREF) { sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: (startPoly == 0 || endPoly == 0)\n"); BuildShortcut(); - m_type = (m_sourceUnit->GetTypeId() == TYPEID_UNIT && ((Creature*)m_sourceUnit)->CanFly()) - ? PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH) : PATHFIND_NOPATH; + bool path = m_sourceUnit->GetTypeId() == TYPEID_UNIT && m_sourceUnit->ToCreature()->CanFly(); + + bool waterPath = m_sourceUnit->GetTypeId() == TYPEID_UNIT && m_sourceUnit->ToCreature()->canSwim(); + if (waterPath) + { + // Check both start and end points, if they're both in water, then we can *safely* let the creature move + for (int i = 0; i < m_pathPoints.size(); ++i) + { + LiquidData data; + m_sourceUnit->GetBaseMap()->getLiquidStatus(m_pathPoints[i].x, m_pathPoints[i].y, m_pathPoints[i].z, MAP_ALL_LIQUIDS, &data); + // One of the points is not in the water, cancel movement. + if (data.type_flags == MAP_LIQUID_TYPE_NO_WATER) + { + waterPath = false; + break; + } + } + } + + m_type = (path || waterPath) ? PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH) : PATHFIND_NOPATH; return; } From 937518181f2513e4ef43700d5b856349ebb7c7e6 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 24 Aug 2012 11:38:39 -0500 Subject: [PATCH 026/204] Core/Mmaps: Fixed build after last merge --- .../collision/Management/MMapManager.cpp | 30 +++++++++---------- src/server/game/Maps/Map.cpp | 6 ++-- .../PathFinderMovementGenerator.cpp | 6 ++-- .../game/Movement/Spline/MoveSplineInit.cpp | 21 +++++++++---- .../game/Movement/Spline/MoveSplineInit.h | 18 +---------- src/server/game/World/World.cpp | 4 +-- src/tools/mmaps_generator/TerrainBuilder.h | 2 +- 7 files changed, 40 insertions(+), 47 deletions(-) diff --git a/src/server/collision/Management/MMapManager.cpp b/src/server/collision/Management/MMapManager.cpp index 449abcb967d..0222f1a5995 100644 --- a/src/server/collision/Management/MMapManager.cpp +++ b/src/server/collision/Management/MMapManager.cpp @@ -60,14 +60,14 @@ namespace MMAP if (DT_SUCCESS != mesh->init(¶ms)) { dtFreeNavMesh(mesh); - sLog->outError("MMAP:loadMapData: Failed to initialize dtNavMesh for mmap %03u from file %s", mapId, fileName); + sLog->outError(LOG_FILTER_MAPS, "MMAP:loadMapData: Failed to initialize dtNavMesh for mmap %03u from file %s", mapId, fileName); delete [] fileName; return false; } delete [] fileName; - sLog->outDetail("MMAP:loadMapData: Loaded %03i.mmap", mapId); + sLog->outInfo(LOG_FILTER_MAPS, "MMAP:loadMapData: Loaded %03i.mmap", mapId); // store inside our map list MMapData* mmap_data = new MMapData(mesh); @@ -118,13 +118,13 @@ namespace MMAP if (fileHeader.mmapMagic != MMAP_MAGIC) { - sLog->outError("MMAP:loadMap: Bad header in mmap %03u%02i%02i.mmtile", mapId, y, x); + sLog->outError(LOG_FILTER_MAPS, "MMAP:loadMap: Bad header in mmap %03u%02i%02i.mmtile", mapId, y, x); return false; } if (fileHeader.mmapVersion != MMAP_VERSION) { - sLog->outError("MMAP:loadMap: %03u%02i%02i.mmtile was built with generator v%i, expected v%i", + sLog->outError(LOG_FILTER_MAPS, "MMAP:loadMap: %03u%02i%02i.mmtile was built with generator v%i, expected v%i", mapId, x, y, fileHeader.mmapVersion, MMAP_VERSION); return false; } @@ -135,7 +135,7 @@ namespace MMAP size_t result = fread(data, fileHeader.size, 1, file); if (!result) { - sLog->outError("MMAP:loadMap: Bad header or data in mmap %03u%02i%02i.mmtile", mapId, y, x); + sLog->outError(LOG_FILTER_MAPS, "MMAP:loadMap: Bad header or data in mmap %03u%02i%02i.mmtile", mapId, y, x); fclose(file); return false; } @@ -150,12 +150,12 @@ namespace MMAP { mmap->mmapLoadedTiles.insert(std::pair(packedGridPos, tileRef)); ++loadedTiles; - sLog->outDetail("MMAP:loadMap: Loaded mmtile %03i[%02i,%02i] into %03i[%02i,%02i]", mapId, y, x, mapId, header->x, header->y); + sLog->outInfo(LOG_FILTER_MAPS, "MMAP:loadMap: Loaded mmtile %03i[%02i,%02i] into %03i[%02i,%02i]", mapId, y, x, mapId, header->x, header->y); return true; } else { - sLog->outError("MMAP:loadMap: Could not load %03u%02i%02i.mmtile into navmesh", mapId, y, x); + sLog->outError(LOG_FILTER_MAPS, "MMAP:loadMap: Could not load %03u%02i%02i.mmtile into navmesh", mapId, y, x); dtFree(data); return false; } @@ -192,14 +192,14 @@ namespace MMAP // this is technically a memory leak // if the grid is later reloaded, dtNavMesh::addTile will return error but no extra memory is used // we cannot recover from this error - assert out - sLog->outError("MMAP:unloadMap: Could not unload %03u%02i%02i.mmtile from navmesh", mapId, y, x); + sLog->outError(LOG_FILTER_MAPS, "MMAP:unloadMap: Could not unload %03u%02i%02i.mmtile from navmesh", mapId, y, x); ASSERT(false); } else { mmap->mmapLoadedTiles.erase(packedGridPos); --loadedTiles; - sLog->outDetail("MMAP:unloadMap: Unloaded mmtile %03i[%02i,%02i] from %03i", mapId, y, x, mapId); + sLog->outInfo(LOG_FILTER_MAPS, "MMAP:unloadMap: Unloaded mmtile %03i[%02i,%02i] from %03i", mapId, y, x, mapId); return true; } @@ -222,17 +222,17 @@ namespace MMAP uint32 x = (i->first >> 16); uint32 y = (i->first & 0x0000FFFF); if (DT_SUCCESS != mmap->navMesh->removeTile(i->second, NULL, NULL)) - sLog->outError("MMAP:unloadMap: Could not unload %03u%02i%02i.mmtile from navmesh", mapId, y, x); + sLog->outError(LOG_FILTER_MAPS, "MMAP:unloadMap: Could not unload %03u%02i%02i.mmtile from navmesh", mapId, y, x); else { --loadedTiles; - sLog->outDetail("MMAP:unloadMap: Unloaded mmtile %03i[%02i,%02i] from %03i", mapId, y, x, mapId); + sLog->outInfo(LOG_FILTER_MAPS, "MMAP:unloadMap: Unloaded mmtile %03i[%02i,%02i] from %03i", mapId, y, x, mapId); } } delete mmap; loadedMMaps.erase(mapId); - sLog->outDetail("MMAP:unloadMap: Unloaded %03i.mmap", mapId); + sLog->outInfo(LOG_FILTER_MAPS, "MMAP:unloadMap: Unloaded %03i.mmap", mapId); return true; } @@ -258,7 +258,7 @@ namespace MMAP dtFreeNavMeshQuery(query); mmap->navMeshQueries.erase(instanceId); - sLog->outDetail("MMAP:unloadMapInstance: Unloaded mapId %03u instanceId %u", mapId, instanceId); + sLog->outInfo(LOG_FILTER_MAPS, "MMAP:unloadMapInstance: Unloaded mapId %03u instanceId %u", mapId, instanceId); return true; } @@ -285,11 +285,11 @@ namespace MMAP if (DT_SUCCESS != query->init(mmap->navMesh, 1024)) { dtFreeNavMeshQuery(query); - sLog->outError("MMAP:GetNavMeshQuery: Failed to initialize dtNavMeshQuery for mapId %03u instanceId %u", mapId, instanceId); + sLog->outError(LOG_FILTER_MAPS, "MMAP:GetNavMeshQuery: Failed to initialize dtNavMeshQuery for mapId %03u instanceId %u", mapId, instanceId); return NULL; } - sLog->outDetail("MMAP:GetNavMeshQuery: created dtNavMeshQuery for mapId %03u instanceId %u", mapId, instanceId); + sLog->outInfo(LOG_FILTER_MAPS, "MMAP:GetNavMeshQuery: created dtNavMeshQuery for mapId %03u instanceId %u", mapId, instanceId); mmap->navMeshQueries.insert(std::pair(instanceId, query)); } diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 80668d23ed8..c960d8123fe 100755 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -126,10 +126,10 @@ void Map::LoadMMap(int gx, int gy) // DONT CHANGE "gy" and "gx" - Its necessary ! bool mmapLoadResult = MMAP::MMapFactory::createOrGetMMapManager()->loadMap((sWorld->GetDataPath() + "mmaps").c_str(), GetId(), gy, gx); - if (result) - sLog->outDetail("MMAP loaded name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); + if (mmapLoadResult) + sLog->outInfo(LOG_FILTER_MAPS, "MMAP loaded name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); else - sLog->outDetail("Could not load MMAP name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); + sLog->outInfo(LOG_FILTER_MAPS, "Could not load MMAP name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); } void Map::LoadVMap(int gx, int gy) diff --git a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp index 82dcbc07648..8988aa599da 100644 --- a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp @@ -88,7 +88,7 @@ bool PathFinderMovementGenerator::calculate(float destX, float destY, float dest { // our target is not moving - we just coming closer // we are moving on precalculated path - enjoy the ride - sLog->outStaticDebug("++ PathFinderMovementGenerator::calculate:: precalculated path\n"); + sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::calculate:: precalculated path\n"); m_pathPoints.erase(m_pathPoints.begin()); return false; @@ -367,7 +367,7 @@ void PathFinderMovementGenerator::BuildPolyPath(const Vector3 &startPos, const V // this is probably an error state, but we'll leave it // and hopefully recover on the next Update // we still need to copy our preffix - sLog->outError("%u's Path Build failed: 0 length path", m_sourceUnit->GetGUIDLow()); + sLog->outError(LOG_FILTER_MAPS, "%u's Path Build failed: 0 length path", m_sourceUnit->GetGUIDLow()); } sLog->outDebug(LOG_FILTER_MAPS, "++ m_polyLength=%u prefixPolyLength=%u suffixPolyLength=%u \n",m_polyLength, prefixPolyLength, suffixPolyLength); @@ -399,7 +399,7 @@ void PathFinderMovementGenerator::BuildPolyPath(const Vector3 &startPos, const V if (!m_polyLength || dtResult != DT_SUCCESS) { // only happens if we passed bad data to findPath(), or navmesh is messed up - sLog->outError("%u's Path Build failed: 0 length path", m_sourceUnit->GetGUIDLow()); + sLog->outError(LOG_FILTER_MAPS, "%u's Path Build failed: 0 length path", m_sourceUnit->GetGUIDLow()); BuildShortcut(); m_type = PATHFIND_NOPATH; return; diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index 5fca373503e..7452efc94ca 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -79,7 +79,7 @@ namespace Movement // should i do the things that user should do? - no. if (args.path.empty()) - return; + return 0; // corrent first vertex args.path[0] = real_position; @@ -148,12 +148,21 @@ namespace Movement args.flags.EnableFacingAngle(); } - void MoveSplineInit::MoveTo(Vector3 const& dest) + void MoveSplineInit::MoveTo(const Vector3& dest, bool generatePath, bool forceDestination) { - args.path_Idx_offset = 0; - args.path.resize(2); - TransportPathTransform transform(unit, args.TransformForTransport); - args.path[1] = transform(dest); + if (generatePath) + { + PathFinderMovementGenerator path(&unit); + path.calculate(dest.x, dest.y, dest.z, forceDestination); + MovebyPath(path.getPath()); + } + else + { + args.path_Idx_offset = 0; + args.path.resize(2); + TransportPathTransform transform(unit, args.TransformForTransport); + args.path[1] = transform(dest); + } } Vector3 TransportPathTransform::operator()(Vector3 input) diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h index 740914c59db..9130d2827e6 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.h +++ b/src/server/game/Movement/Spline/MoveSplineInit.h @@ -161,26 +161,10 @@ namespace Movement inline void MoveSplineInit::MoveTo(float x, float y, float z, bool generatePath, bool forceDestination) { - Vector3 v(x,y,z); + Vector3 v(x, y, z); MoveTo(v, generatePath, forceDestination); } - inline void MoveSplineInit::MoveTo(const Vector3& dest, bool generatePath, bool forceDestination) - { - if (generatePath) - { - PathFinderMovementGenerator path(&unit); - path.calculate(dest.x, dest.y, dest.z, forceDestination); - MovebyPath(path.getPath()); - } - else - { - args.path_Idx_offset = 0; - args.path.resize(2); - args.path[1] = dest; - } - } - inline void MoveSplineInit::SetParabolic(float amplitude, float time_shift) { args.time_perc = time_shift; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 0d55d7a52e8..dee1b6dcdb8 100755 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1125,8 +1125,8 @@ void World::LoadConfigSettings(bool reload) } m_bool_configs[CONFIG_ENABLE_MMAPS] = ConfigMgr::GetBoolDefault("mmap.enablePathFinding", true); - sLog->outString("WORLD: MMap data directory is: %smmaps", m_dataPath.c_str()); - MMap::MMapFactory::preventPathfindingOnMaps(ConfigMgr::GetStringDefault("mmap.ignoreMapIds", "").c_str()); + sLog->outInfo(LOG_FILTER_SERVER_LOADING, "WORLD: MMap data directory is: %smmaps", m_dataPath.c_str()); + MMAP::MMapFactory::preventPathfindingOnMaps(ConfigMgr::GetStringDefault("mmap.ignoreMapIds", "").c_str()); m_bool_configs[CONFIG_VMAP_INDOOR_CHECK] = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", 0); bool enableIndoor = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", true); diff --git a/src/tools/mmaps_generator/TerrainBuilder.h b/src/tools/mmaps_generator/TerrainBuilder.h index a7f21883af2..6d478753279 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.h +++ b/src/tools/mmaps_generator/TerrainBuilder.h @@ -62,7 +62,7 @@ namespace MMAP // see following files: // contrib/extractor/system.cpp // src/game/Map.cpp - static char const* MAP_VERSION_MAGIC = "v1.2"; + static char const* MAP_VERSION_MAGIC = "v1.3"; struct MeshData { From 4351548c750f94425d8b7c24180a813acb6ac443 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 24 Aug 2012 15:33:38 -0500 Subject: [PATCH 027/204] Tools/MapExtractor: Fixed a crash caused by using a variable before it was initialized --- src/tools/map_extractor/System.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index ad9a663ac27..44e852b12b9 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -836,7 +836,7 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, else map.holesOffset = map.heightMapOffset + map.heightMapSize; - memset(holes, 0, map.holesSize); + memset(holes, 0, sizeof(holes)); bool hasHoles = false; for (int i = 0; i < ADT_CELLS_PER_GRID; ++i) From 9698d295b234bcbda3a52c9a47e57f66a98e5335 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 24 Aug 2012 20:03:57 -0500 Subject: [PATCH 028/204] Core/Mmaps: Refactored some code --- src/server/game/Movement/MotionMaster.h | 2 +- .../MovementGenerators/ConfusedMovementGenerator.cpp | 2 +- .../MovementGenerators/FleeingMovementGenerator.cpp | 2 +- .../MovementGenerators/PathFinderMovementGenerator.cpp | 6 +++--- .../MovementGenerators/PathFinderMovementGenerator.h | 4 ++-- .../MovementGenerators/TargetedMovementGenerator.cpp | 2 +- src/server/game/Movement/Spline/MoveSplineInit.cpp | 4 ++-- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 918896a5a81..16accff2ab4 100755 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -160,7 +160,7 @@ class MotionMaster //: private std::stack void MoveLand(uint32 id, Position const& pos); void MoveTakeoff(uint32 id, Position const& pos); - void MoveCharge(float x, float y, float z, float speed = SPEED_CHARGE, uint32 id = EVENT_CHARGE, bool generatePath = true); + void MoveCharge(float x, float y, float z, float speed = SPEED_CHARGE, uint32 id = EVENT_CHARGE, bool generatePath = false); void MoveKnockbackFrom(float srcX, float srcY, float speedXY, float speedZ); void MoveJumpTo(float angle, float speedXY, float speedZ); void MoveJump(float x, float y, float z, float speedXY, float speedZ, uint32 id = 0); diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index bad45f65178..a4f57a43701 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -78,7 +78,7 @@ bool ConfusedMovementGenerator::Update(T &unit, const uint32 &diff) PathFinderMovementGenerator path(&unit); path.setPathLengthLimit(30.0f); - path.calculate(x, y, z); + path.CalculatePath(x, y, z); if (path.getPathType() & PATHFIND_NOPATH) { i_nextMoveTime.Reset(urand(800, 1000)); diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index 9d99e0ef000..4e96c641be7 100755 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -45,7 +45,7 @@ void FleeingMovementGenerator::_setTargetLocation(T &owner) PathFinderMovementGenerator path(&owner); path.setPathLengthLimit(30.0f); - path.calculate(x, y, z); + path.CalculatePath(x, y, z); if (path.getPathType() & PATHFIND_NOPATH) { i_nextCheckTime.Reset(urand(1000, 1500)); diff --git a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp index 8988aa599da..adfd32c50b3 100644 --- a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp @@ -50,7 +50,7 @@ PathFinderMovementGenerator::~PathFinderMovementGenerator() sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::~PathFinderMovementGenerator() for %u \n", m_sourceUnit->GetGUIDLow()); } -bool PathFinderMovementGenerator::calculate(float destX, float destY, float destZ, bool forceDest) +bool PathFinderMovementGenerator::CalculatePath(float destX, float destY, float destZ, bool forceDest) { if (!Trinity::IsValidMapCoord(destX, destY, destZ) || !Trinity::IsValidMapCoord(m_sourceUnit->GetPositionX(), m_sourceUnit->GetPositionY(), m_sourceUnit->GetPositionZ())) @@ -67,7 +67,7 @@ bool PathFinderMovementGenerator::calculate(float destX, float destY, float dest m_forceDestination = forceDest; - sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::calculate() for %u \n", m_sourceUnit->GetGUIDLow()); + sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::CalculatePath() for %u \n", m_sourceUnit->GetGUIDLow()); // make sure navMesh works - we can run on map w/o mmap // check if the start and end point have a .mmtile loaded (can we pass via not loaded tile on the way?) @@ -88,7 +88,7 @@ bool PathFinderMovementGenerator::calculate(float destX, float destY, float dest { // our target is not moving - we just coming closer // we are moving on precalculated path - enjoy the ride - sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::calculate:: precalculated path\n"); + sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::CalculatePath:: precalculated path\n"); m_pathPoints.erase(m_pathPoints.begin()); return false; diff --git a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h index 5dd2ad82a0a..9029fc1804e 100644 --- a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h @@ -59,10 +59,10 @@ class PathFinderMovementGenerator // Calculate the path from owner to given destination // return: true if new path was calculated, false otherwise (no change needed) - bool calculate(float destX, float destY, float destZ, bool forceDest = false); + bool CalculatePath(float destX, float destY, float destZ, bool forceDest = false); // option setters - use optional - void setUseStrightPath(bool useStraightPath) { m_useStraightPath = useStraightPath; }; + void SetUseStraightPath(bool useStraightPath) { m_useStraightPath = useStraightPath; }; void setPathLengthLimit(float distance) { m_pointPathLimit = std::min(uint32(distance/SMOOTH_PATH_STEP_SIZE), MAX_POINT_PATH_LENGTH); }; // result getters diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 1fc2ab5a6cb..1b14cd385e8 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -69,7 +69,7 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T &owner) // allow pets following their master to cheat while generating paths bool forceDest = (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->isPet() && owner.HasUnitState(UNIT_STATE_FOLLOW)); - i_path->calculate(x, y, z, forceDest); + i_path->CalculatePath(x, y, z, forceDest); if (i_path->getPathType() & PATHFIND_NOPATH) return; diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index 7452efc94ca..fa2197f815e 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -73,7 +73,7 @@ namespace Movement } // there is a big chance that current position is unknown if current state is not finalized, need compute it - // this also allows calculate spline position and update map position in much greater intervals + // this also allows CalculatePath spline position and update map position in much greater intervals if (!move_spline.Finalized()) real_position = move_spline.ComputePosition(); @@ -153,7 +153,7 @@ namespace Movement if (generatePath) { PathFinderMovementGenerator path(&unit); - path.calculate(dest.x, dest.y, dest.z, forceDestination); + path.CalculatePath(dest.x, dest.y, dest.z, forceDestination); MovebyPath(path.getPath()); } else From f8cc38d65a3b8bca5f93f57e7f4cf7f93df2b38b Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 25 Aug 2012 11:38:33 -0500 Subject: [PATCH 029/204] Core/Mmaps: Make the mmaps_generator multithreaded, you can specify the max number of threads that are spawned at the same time (default 3) by using "--threads x" in the command line, where x is the number of threads you want. Core/Mmaps: Removed now useless sh script --- contrib/extract/extract_data.sh | 162 -------------------- contrib/extract/libmysql.dll | Bin 2316288 -> 0 bytes contrib/extract/mapextractor.exe | Bin 314368 -> 0 bytes contrib/extract/mmaps_generator.exe | Bin 2224128 -> 0 bytes contrib/extract/offmesh.txt | 3 - contrib/extract/only_extract_offmesh.sh | 158 ------------------- contrib/extract/vmap4assembler.exe | Bin 1427456 -> 0 bytes contrib/extract/vmap4extractor.exe | Bin 321536 -> 0 bytes src/tools/mmaps_generator/MapBuilder.cpp | 74 +++++---- src/tools/mmaps_generator/MapBuilder.h | 20 ++- src/tools/mmaps_generator/PathGenerator.cpp | 17 +- 11 files changed, 78 insertions(+), 356 deletions(-) delete mode 100644 contrib/extract/extract_data.sh delete mode 100644 contrib/extract/libmysql.dll delete mode 100644 contrib/extract/mapextractor.exe delete mode 100644 contrib/extract/mmaps_generator.exe delete mode 100644 contrib/extract/offmesh.txt delete mode 100644 contrib/extract/only_extract_offmesh.sh delete mode 100644 contrib/extract/vmap4assembler.exe delete mode 100644 contrib/extract/vmap4extractor.exe diff --git a/contrib/extract/extract_data.sh b/contrib/extract/extract_data.sh deleted file mode 100644 index d28c7b7d7f5..00000000000 --- a/contrib/extract/extract_data.sh +++ /dev/null @@ -1,162 +0,0 @@ -#!/bin/sh - -# Copyright (C) 2005-2012 MaNGOS project -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -## Expected param 1 to be 'a' for all, else ask some questions - -## Normal log file (if not overwritten by second param -LOG_FILE="TrinityCoreExtractor.log" -## Detailed log file -DETAIL_LOG_FILE="TrinityCoreExtractor_detailed.log" - -## Change this to a value fitting for your sys! -NUM_CPU="2" - -## ! Use below only for finetuning or if you know what you are doing ! - -USE_MAPS="0" -USE_VMAPS="0" -USE_MMAPS="0" -USE_MMAPS_OFFMESH="0" - -if [ "$1" = "a" ] -then - ## extract all - USE_MAPS="1" - USE_VMAPS="1" - USE_MMAPS="1" -else - ## do some questioning! - echo - echo "Welcome to helper script to extract required dataz for TrinityCore!" - echo "Should all dataz (dbc, maps, vmaps and mmaps be extracted? (y/n)" - read line - if [ "$line" = "y" ] - then - ## extract all - USE_MAPS="1" - USE_VMAPS="1" - USE_MMAPS="1" - else - echo - echo "Should dbc and maps be extracted? (y/n)" - read line - if [ "$line" = "y" ]; then USE_MAPS="1"; fi - - echo - echo "Should vmaps be extracted? (y/n)" - read line - if [ "$line" = "y" ]; then USE_VMAPS="1"; fi - - echo - echo "Should mmaps be extracted? (y/n)" - echo "WARNING! This will take several hours!" - read line - if [ "$line" = "y" ] - then - USE_MMAPS="1"; - else - echo "Only reextract offmesh tiles for mmaps?" - read line - if [ "$line" = "y" ] - then - USE_MMAPS_OFFMESH="1"; - fi - fi - fi -fi - -## Special case: Only reextract offmesh tiles -if [ "$USE_MMAPS_OFFMESH" = "1" ] -then - echo "Only extracting offmesh meshes" - only_extract_offmesh.sh offmesh $LOG_FILE $DETAIL_LOG_FILE - exit 0 -fi - -## Obtain numbe ob processes -if [ "$USE_MMAPS" = "1" ] -then - echo "How many CPUs should be used for extracting mmaps? (1-4)" - read line - if [ "$line" -ge "1" -a "$line" -le "4" ] - then - NUM_CPU=$line - else - echo "Only number between 1 and 4 supported!" - exit 1 - fi -fi - -## Give some status -echo "Current Settings: Extract DBCs/maps: $USE_AD, Extract vmaps: $USE_VMAPS, Extract mmaps: $USE_MMAPS on $NUM_CPU processes" -if [ "$1" != "a" ] -then - echo "If you don't like this settings, interrupt with CTRL+C" - read line -fi - -echo "`date`: Start extracting dataz for TrinityCore" | tee $LOG_FILE - -## Handle log messages -if [ "$USE_AD" = "1" ]; -then - echo "DBC and map files will be extracted" | tee -a $LOG_FILE -else - echo "DBC and map files won't be extracted!" | tee -a $LOG_FILE -fi -if [ "$USE_VMAPS" = "1" ] -then - echo "Vmaps will be extracted" | tee -a $LOG_FILE -else - echo "Vmaps won't be extracted!" | tee -a $LOG_FILE -fi -if [ "$USE_MMAPS" = "1" ] -then - echo "Mmaps will be extracted with $NUM_CPU processes" | tee -a $LOG_FILE -else - echo "Mmaps files won't be extracted!" | tee -a $LOG_FILE -fi -echo | tee -a $LOG_FILE - -echo "`date`: Start extracting dataz for TrinityCore, DBCs/maps $USE_AD, vmaps $USE_VMAPS, mmaps $USE_MMAPS on $NUM_CPU processes" | tee $DETAIL_LOG_FILE -echo | tee -a $DETAIL_LOG_FILE - -## Extract dbcs and maps -if [ "$USE_AD" = "1" ] -then - echo "`date`: Start extraction of DBCs and map files..." | tee -a $LOG_FILE - ad | tee -a $DETAIL_LOG_FILE - echo "`date`: Extracting of DBCs and map files finished" | tee -a $LOG_FILE - echo | tee -a $LOG_FILE - echo | tee -a $DETAIL_LOG_FILE -fi - -## Extract vmaps -if [ "$USE_VMAPS" = "1" ] -then - echo "`date`: Start extraction of vmaps..." | tee -a $LOG_FILE - vmap4extractor | tee -a $DETAIL_LOG_FILE - echo "`date`: Extracting of vmaps finished" | tee -a $LOG_FILE - mkdir vmaps - echo "`date`: Start assembling of vmaps..." | tee -a $LOG_FILE - vmap4assembler.exe buildings vmaps | tee -a $DETAIL_LOG_FILE - echo "`date`: Assembling of vmaps finished" | tee -a $LOG_FILE - - echo | tee -a $LOG_FILE - echo | tee -a $DETAIL_LOG_FILE -fi - -## Extract mmaps -if [ "$USE_MMAPS" = "1" ] -then - only_extract_offmesh.sh $NUM_CPU $LOG_FILE $DETAIL_LOG_FILE -fi diff --git a/contrib/extract/libmysql.dll b/contrib/extract/libmysql.dll deleted file mode 100644 index 36de6064f98924b280ae09e804505473d22148de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2316288 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

    eHX*jY_x|s_ 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%0DU%;h&~cP2k>6tNAhd|L;ycL9{*6lmjm8B9)Bv} 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℘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�!M4F;=WVhY>V`3tdac2$J;G>qwB+s0SI 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%0DnKdAfL>MH>)UND7 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�F<|G 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%0Ar<~QD4k2LGHN^m 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

    j%*wt z7BFzU=>%4AA_`+&HG&L33I`&o$T|sS=SER6&X$UYQ&D(C6cv4Kskj2xa_BcvR3zC^ z@iCSCmQ2MWi}%k&PIhu`Ad7OS?Hp^3l5VJRk+nv5s!^H}sANg6!F;V1=A8_xaCbV* z&EQi|ob`djowH7(XB?mNZihLuZ~sAdebBW5lTAWT%mmJcnJ3dpY{JGc&^L#m2t~Fl_Mu7b}_kz_5WofMQYj=Lq}>3je4!<4?55e_aIr zE+{q?lk`*l772tQCP*MrQLyh`I|;PFKOorg-!p=L6a#uI_BjH3lEOa97Q2`)jiG;g z{MSX`?;`PIE2e*Va_Tldqs&dE0iuEoXd1)_SKhiu$Uw~@x4=JY+wp&T1pg=&t$%^J zlfpd8z}$NKOSH#-T?GCvC}yXBhzY!7jzRLiZ($qt4+wVrBVMuCKZ-@`Utq^fi^M+4 z7JG~Ox5s~71pY1(zm5JOD#(D`fYkqjHs~LH^7{dk2v+rX~d zKy3RM;(T+5uP7~@NlA}vKo&Oqy@<%>PU9s~>O_$0X zRyxm^s;uRhYW>4|i-J3AJM-%!aCK_$Ty_Yijb)B=6_HWd)1pMU5)gu)2B}xpMR&e)86dAAiuYD`L%96 zQVI$S9@tu>O7%=InGqy2F`K_isU5s4kY8~EDN|<4!aZvO00N7 zJ3qr@2{BQTOsxoRPGto~b;Vb%>jJL2Z1%NL!yVfBX=g5--W5Z++o6R~NG|BXY>Hrc z!G<3(V5`^FM09n)T`lH}1kwB1^j$wSFLixm zC>4`{Y~kO3MEm!A0}DFS@Bef1#2njtk_M1t+dS;%4-Ym=OeBV5fndjt(PAEImxl zguchciJ#XnNQmaA`YC&UR)9~9pOuf;@{`EEj17a|AyrWgYha+`m1KHK1sI zDj&D!rvQ9v{1g`3@)Oa124XlCrJqaxV%5(@apLFWMmv5QAG7CYGx*f_d2y93KN0Qc z4h(Xm_?bGx+J16%ezJ`Ix%JC;MiBXIA3qq)5+A(a`)c?ATBnS| zV;yrkm%H9cs87Z(#uKi0_}6|@a&UgqgGC4QQ1cNXS~#YavHa;$gGR@#`fv2Vv*XA= zmc61)v=`zficliE;E#~6^Z!6J|9tQin|WstgB^Sa+F%}GY&7$8?~>}K^%U^CTIV)|u%Gl4yH#w|kO)H~0q&=8yBuo-v zEoRbqpc|?f-2WHA0ACpSAZ`h`_vf%Iv_l^IvRt<74xZ-0D&qet|8Tkw8PUFfNG3Xu z^1%ZgdC4qOfJHFNw{o0}O_jd?Vb|wge;W31_}!(nE>p^hrOKs#1O^P7f-vJq_l#no zR0_-Cn@-J85P|L>nADkf+L#pN+roZ04EAVq8-^zQ*b$u(#^oN&Er_I(60APYV2hty zbcZ=x&Wa(KoJNJ3nQWn(X*$C42M8?~~b-PT82K8qMi3VOtShj*>x+iHj=Lz)$?9aMle z>h0j0kam!APN0d?Js7N9?%I*+dzoAl_CR^JV7`~GP0UzD8!So@bS4FZX&7Cw6Q>@g z%?yd+kuFdS7Sjvt<@6WVfr|PQD)<%Wge>n|~>ML-)E41TW{t_k&;NJmo>NeUeR=l%d zXW!IqZ`1KNl+0!q3OWw;<1R@f=6giZQ&A}pPJN{^Cm75Gek>8yPoNF)l`w%rbkjk= zvxA$Vlf<@*0&f(@oy^wak5KWqsom?vALPZc?jcKOiY>BtP-(tMqL-e+>3Pjb2;R<> zRYHQE0aOJh3T5qpj}HZoCweY6=t+w#emoT)99cX`(4$H-0sO<;QTpV_((h7K9yZoM zBsq1W#6E(yth^$d7YRsh?FHjAgfxqw?Y8^yYIv^?yK_%Q}rAz55UPE6A zk#(v?os+1}wYJ7uZI}@KIto%0_$q~#PAh~2DR1xRc|_6PSH zfaos)g4GvOI+vB+z^y(gK2u<{pz9_d##W>%6bJB1 zk7#Uk?=;KYz&8>l7=X?ibGZ4?g$VfhRomEg`onrG^cRyW@V!B6i2^Kd$Y0Pax!b5W zS{2LkM$9VF0uJpq>H=#iEb9*gfJ=SrHtAAf{f@qcZ@=p{$CLMtbo_*W7Zi+ijK#mx3P(DY;qR;X7s9{m@q7>dZN|Sk z{G$*+_`}TC&G;0f`PkdD5ncTEDm95mn{+3n^L^;Fq@R<5>6r3CX>bpimPlu%XY!)d zv}vA3AC%F?>`$i(X64pl9+3!ou4^4VW;ffw`hzU!4!X3bDS^TSgDwVvnq6`VyB1{H z(KpzjPoJ(Z*V^+1CSkw~Ws{6>W>d`1VFJ&$FyzQj<0^p? z0ALq_Yl~caLazQPT&`k*PRMh;PH$hj-`BEVR4(CL;vEp2x@~wGT}1mF(Mz+6bVX!C z;97jI@c@x1sO|xm$if3DW53^19q{b$;;Ei}C2cyaW79A^vYAhls`%x%nkwqp*Fb~` zE^H(Y;dJK#b|J5=f+`_6++8aS>_2+#18g&DZ%(N1W+nB!N{fsTywLv4$&-bUARlf1 ziqBV}9i#2iVF0nI=5^Qs1zmDG#qUH_v128={-Ym9)Gvyte`u0s_tEul22(%>8cRjN z7WRMOb0{!f+WZgW7E2o}4>A+=3k*bRHI27-yYIi{1orx;G_sGegMehP4GRLCU-}Bv z$~lP@%x>~}>8=B6V9 zHLLvs%`GsP%W=1Y4>sTkx@yUM+3o0T{H`t79qxB;Hb_LwN)iYKJezab7{p~_Grixn zkvkPkWd=QE*sxy3A-s<{89(;9yVv{OYpKV;26lE9R@wcoH382Wzh^ZvlMI*#0|~sGX8#arw4N&VIMRmHg6>-OH$2u)p}Ixj z2m7#QjiHBmc!2i%RPo{82TsymgReAAtbwqb=(XF~rxGSY%P86G2-YMqze{zmlrQht z(-*IkMmSNIVs7QF(PCymI~PyX%+}D3Sf2ug^h{fx==?+zqRc*nlOHMR3)n|~RCD1} zi0oZkPbOn4LH__=QtvAyTEgD-5S4er%CQb_I)1Rn8-W`I@?rMEgapTSwqh(|P3!>L zGrJE;7vK?}9oZl&E8SfH3#&q0$C#UB>M=~#PG{6R$G?iD}xPe7_E)Q z{?y^Q20rxM5&VGfo1sNPmc!(NG%x;(C@)qb*=TNsv@ehbyMtkakQ=$cSJ8r{=sAFh z`oK5B#J55eZoywdxe#9y`}h46pBXrA(s4w?pRtS|v;;AI?cu8kpn*Qz;cCPsuSQ$o zXFq427;vYtJO3VnmGjeGO>FiG;HSH?)BCub16?VzsHX|!r1wD-=yzxM-e~UQ!58A`TxlP7%D}h9$XmgWVr!_`J$M zcf+ic_!=vGMH8zj;&K@1N~0^h!su6<*qGJ)aB32_v?g|~e9XvZe_A5WpL#M-JB?-W zSLs}$XNh9jY~bH`nL{`$2lLMWb8`VYgMZ%K0=hhGYUJOiXoT2=uRGoV#^d@{!lP5BPBz{a zUdhdx4*)#O-#w!In=f=dP2McrSb|-3Ed~S?uI(s6ehu9y_Ve)`zm!%d*i@{0AS6H^ z3n@0RQxN|6U7NK|d`A#A&#vOdHqj>(saOLXu!s=Qaqq|z6lB+u*ufVgF6plAQAGtsMU#!yuBffN32?E{~? z3DUrlz9^6Bk^R~1KJ0f!6QWN$a45*-1=vYE%p${k1SlEoPNboDv3(->0St5pfG}&`syKCT6ruST9E6>lSl^xIAgNR)N^7Q? z;QjU=45H03D)kR~{DKxlSB>G4K~%(%DKW{^nW|AcA-VH!B@oyGngXI@zDx?vH?v_CgqgA~YcKm@pwEVe|FuCY*=DDj!mR4p1-D;D^Z^V4p3; zRssZ*GzI6W&t-E847Y|HDui?O+Bb|V%r6vI4B;HA@Ix5agjF!Ek4Hxs7i=pFw)GJ5 zMVNrD!Qn+wxi=>t>G6Z7&6qiT-h8qpA)mwwZ9HL~cBpIdf&fDfMrcj!PJqWTth%fiyemg?SPbw0D(_YsAuV-Iv{n4@o$UHZgJW5!kW%9_hzlFMd zQ{Yb+DFi#B#Glv`aF*7&cBIxi>EPuz>?_{UxKobQoW2J)X#_prz!Dkx_#F1>;GbZP zxG{t#Pmin2rx2rwc z20=)i+H27Dxg_cW5Cul+*|7O&CxTm}ZM~FhX{yMaR)ELIrj`kw2M}g76QZ>Y1!X&{LOQaYwXS_7RBHaGr?KALnuDTz z-&{2*35-HewJdprl&pCqG{B!5%lc<*=28k1bi>eiQwB; z)*EaOMmDM1=`eguDGJLzdoR-CN7?RowD=b%2x(%SIZk7|btqfFmGL3sxlARG90X<~ z>H7+GqAlnxBYKnRlm@!tgytWi9GVcpSPSUc-34{&(aw_Q7G9W3pLB;ZEh#UHKWkD=$M(H5n-#-upaP+Vrt2h1UYz9b3rUZ!0#1G6 zDCqhI7KwpCGCKog!pk3Fm(2`e&k3cD+)Kh}^5X&bXDy@{8)Jt=DwV^!K~j7!1vym6 z7?`bi0*pQdO2*tQe85ye)oyW4el=cW?9@y$S&y{dr-5Fy_wBm9IFBBu@Z|(-CrQg@ zuPz{Z8`!LW^Q(D)0?rFJPCQsmOT2J%;)W^q4zNqzS^^Kz^tX%3Ssd@TA@)2ZFiY48aVs^BszSlT|}r1l3gDaqq!(Z7w>>mF|+i&_30 zICXr!k+w=>!;heG-?fo#osih$qx#SxIfR^Ywa zQUm2%@Nbv~@_0O*dLb1+GZna(inAEM3|ki%#j5$?wDH?_)s(7!u*|K6I8op-z; zcKSVZYK6WZO0wrBWW@65@5E$Oh~4@w7W&Zx(qRaO6^!~bsF&@JSufsMcY(SR&=)3~Gy}^uO)L@l17{@9{0%*PPu`OU z32+Zs)wz5)R>2BMO=0h2_#-Bl2E1&YT)F`i#8_Z?TvoC!u=GR?ZGpus>>Of5+JC=2XaT9Kb}ri~4BD>)v60^g zi@5wwBQd>&bbz$P%8(k^kh<8A5v@cE8LfWCDx>oNe!Jsg%Occ@hxj7YH?opdMvX3u zjLcHr89gAQ%?}WKwFvbFN*m(%50X}KM9Kp!JpNa5bVh6)6g5;UjFumpkH8m_0{eb! zmoO@hibiGHA550g@OSJN8Yo&So^Hh$iLWV}-6Ze{<%EWEmP`Vp%R?E6#G4QS(8o?i zt!<(fmfWr7*>Cv7B{4$tYED1SJxPuhnRPfL#t-VZuwH{vavwkhQe1D-hhPrDB}52q z!nkRVyq?&i(a5%>vh)&`I6x+zhA$3wu)yeB*yNa75@YQ~occD}uF&on50*1NY1^wX&)gSsoWBB^Z zni9HnC1U5SbwdWMm97R6TeL9;m4VrcI+lmYZi9V#JRP&Y;?AVR`ZKU(gSb@one=)A zO^v&@8*6|9U{8b}-f3@7aO64J4(gA}Fv(A=H@LoTGu<}J7tA*^2gHgU8q_}4kbwDC zjV*klhDd`H=rU+ubp^0$UrbC6-B}FusLWiF9*zL5R4ILU+)x zpZ4|apkRInHiI_r13~||3VSSH;V}CXonypZKo26@?^qWY-|*mf8GeQIej{CnG~FLh7F&z- zl)EN7ZpTG-6Z5CfbYO$x_&cZHr4OlKf1}CTFd&3}5sX}kV~2T@ykkzL8(hYM7aIA7 zS=k?fo^Er82S$j@lia&I1N^4v^>}aGw+wrnr`uzuT<>V@-q8L81W-ucDj!4GMtrWU<^N%2Zj`m(n0W{eq zpW5>+tajvIOjuq+bx4bPhywx70l!BKsrf#^S~h|2j@wW5_M<-015LmJ8S|i`(DLek zLd#G8AwtVgG9Bl<1^MKl#5iy*6*Y9Z3F(=U%9H(>Ji)AbGM3C|(}Y{sYK)>cV$VxT1~tnmey&Cr1n7B=2jHUL^_x*JTju&%5HK0A*lr+#BZD#Xxt(dq!)kpq;hl%{ z_^T)KwPc~MYNaoXM+ad%8eF)!1ZyV|DuXn&E^G=G>me{XWsHrc?i79rGd8a{eY^Vl z@w+g^G3PQ`jk=l#V_O2QEk<7yaBqe$rv>5kY(_mi9G#f(+|GufaQ%z*1L?R3^X=@5 zr5ha7`G3~V20qH-+W!j#T{W7ZL1RTljf#R66|D+Zpv2-!>;{SNt@r|65i3HX_;v*Y zl@Oy;#oFqvSiQa0VoSYL!72u&fR>?T3H_wPqG z^UR!iJ9FmDnKNh3jI2r4?&^>7%c|X2%aY8zY1`RRkYgCQ<&%Ed+jf>6Fec^?F*fz9 zQ;f!UFrCR4NWcgEs4T5-9^Oz{3Vm4ZPzk08#kG6T;goY;^h6dcb?ZTB<^?iP+F(kH z4V6te%8TT+ocxDIlsTG{mngH$;-uv+kS`mpvLIisJhrFy;xT}ULwniwCP!8kgCxT% z+NQm|XqI`C=FK5VpCB*22L{xDtbOo*L3wd`X@{-n zKOU}~mw$3W{^!18o$jT6IntPNWo*m$Lk}Kg@EHDmdj)@Ht<-|jYh9iP%!n1hYpp@h z02d9(2LAdzwztU>ZODcm&1A8w{&uVhd*oV7dGNzspU>(`*lk7YaVvAj?|^#ah+c}D zdkj^e%> zuH(L+uYO?#(UE!zu>9F!_@O_Ozi5B#oX&f$MYLr3)_i8u7B}<15L%7*L;`D0th>aE zbx$50JYMV2wp@Lh#tZ&XBBO!+aA~RnZZ)g$;!o+Dc*i!(~l;^_wU&e zSvAOVf>9T`wg0H+R3KN+7OWBs>GjzcDtg>(L*9&zPF`sIo7PqMNV|mp4v~CxG`j9F zR+Y=CT1s<0aBzfgM(#Xx0}z~4ne4lX@Qlf|SH)#rA;7mMngN9k3I{?>!PKvW)`SHd zIZ}3DgJhRW!1?sBU2RDjhjM!fL1JMDwpxg)iU^XG~+4KR(ho%VIF;T1A|2 zO(T?dkF>^#rV8MtkTUpXarnpc;p6lqZp5veS1%;A()M7chF7^D|s0xv))FhD7tVjh? zF(T&qGt&!76NUWLA96;1%53m569@XpOx)gR8(C8-nW@bL3%84bMKV*8IT6WBcRmr5 znI!n+p8{wKjTxSgYW28)Ucul?u|lt_xF#}B`prFttWDi8c_ z%;C4bZE(;Qeu3?)?IPGNelxav3{@fQ$@S3-Gti^4_Co#pJz%bA@{Rq;mMt zX;tqBWRZ0i3vRG(Wr>hzlXN%HZ2BuUpu0LDzI@BT>0TgsbXa%>MK2j433;{Jh%E!B z`SjaKkMNauxW;mz-O3EofyC4c0OFtnuF*>mA|$(UGxeMk1G z+YV{AOuNvo#sT%uNOEZ?U9L4bwjg)UZ}s$%p9k6TTQ84l9=T)5qGn-7@cHYjJBQ7w zm>4R%!!;_r1mtR{1{A3wkgp7#RS+kgyEcw3HMigWhROwV-5OxlQb5*ZIdf>O=QzP`r@$!JibrDrwKE$ZfiI33Bl~9>lxOup_CHSOBFqv(@T{Sj`UKo@}(b_#Pf}u zZUnAgk1IIZm5bxr$`w&uv5dz=kZ}Ab&-Hl#6JAki5 zTa51XeQ4qQ7zlmF>H8XANp?NY@2~atdf(e`02x{~F0_pLkk9IK>)W>JGfV&oR{puQ zj^ic9Ru&H|dDp;125RRr+gJY5f#8CB5u|oZg@|x$39HtHT~EONJ+CE#Vz-JUW=B-d4}A zfHA(6O`qx0@Ad6i)GhrCpME{*n|AKJ=bLKn6%ka9Kq-&;{ZM>0m&q1PkR=$4u`ilBjNK1 zB@})=g?j+D5SoS6Wt;+H7hAG2S+cUGc;xeSd;1$6?QX*%z*e=GyD7(RY)#)pX0Qk4 z<{_62IZa87#mTBTQ>WBs~pziwN$3Q$==w5D)z!k-;(5-cPo z9g`zG{fe1aOuHnykN#pDzuRbUe18S(fL&VMag94$kk?EtKr^W%kzU4VLGsM3$HX134dree}n z7|memp^x9EWZsy5(pKlB`@`2^^)yv`3-=&k7x(q$t!-fcj7o>z(y~%s?1=1#+!dqPfymsC&Al88?`Ak!Iy|C7#kgjjm;L4B7w7wvA8ktEl{}{CoFVnd1CWAk< zO*>V!)Uk7@DaS)vtmq*WvN05`@Fpu-AuGCtqBj*5{r27}dZ;fN$HV2g+L^Z!Y(h{w z)wp=^6%^z`@d~$D@d{b-j^bMji@(W=U%!25dD~7^?RDkBInQ}CXQ#@RIjyWf^7qg3yOPw zFTIG#qnnj&mo@LmL=xyb%w;$}xNjP_;|3x(-y910txsvFTEua+^7I#IAd<2=M8U4AD%x_l&RX+4Kcd|Cf#DBDx% zWI3inWteO5;{AFXz6yqKCwkOW!-R)8&Z?HuY@_){*q9~tAuocFGQe`L_-qGp`%8E0 z_w)$Sa0~~q1$=P7Ix&jyMRil8@ALWxIfCDtW;5Hi4BYsEF{|6i%z0R+KMs=y;s#<0 z_j}#-T^uwGp)+do#2O@$Ed!s#_)Y39?B6IMvNtS3;dF|&EO)5d^^3eB|GV6T5JnTeLr|6(oeNJ`v{Q%mK_Lcn=(hGSBT|N!1SFu zA?r4KpG?mPCF3Zp!Q5bhAI1Ek4tYUi0lw zV!iv>8S2ti*IU8YEO?88_gHX#W96NcbPE^3n~F{$ zG{4$?&zH$Q%|3nh~d_NJ&uU zm9H?1%RQKMtI~VQ$Bi%Ur&e6?Q7;)GldWt_W_Yh9@r+7#HoX0+X2VAPMzf*+g33&$ zZ{Euh7eqHt+sk4TJr6&>$-~bOn-A-H;NQ6wJAbPG2r)R!@BU~zxJ4*Jm~XL6>ehZH zc5kY7mmd~ThnvEUkv&GWKQAnH_dz+Ls$zFEA#=K%bYrcQ4Jz=b@N;iP=Z0DAI(cQr zRIXpmdQiG9<-Td<7iTKc!;KpjyPYtLj^k|LAB3}F{eB+KWIy-hZuvO#^yKpJHO}z0 zWCbtRZ5#iPv(x>#Q4Ig^B1`eA7Tq9R=WbxFkqukzX`27*+*6lmy24tP(M`^3lTF1b zLdgm4jYnpyGBe4}j( zX!^Cy%u?(}J8|Cdbe6P6Z4{c0(r*k+Pm8qtWWAmw_xoLYo2<*AwffZ)!Qi#PXr}so z>Rhs|3v+cL;kw!>$1+`y%%87&|1P^9V*NSW@OyXMz&$KI2x2{vq>!pUt~@ouF&f1&k3@%?$(!=D4x%JKozT)U|b2OIr zahdW@fAaz6=M|Z}=+jKi(?)MFAp*^QFA zHT_3qW7201**uXs1DNf3=9dy%(`0Eu{=2lb?XfcCEwHjLCH07v?MfmVSznx+@59Lx;bauy2q!^wus4ehjfVs70ap){A_?R;1d)mMmw{8V1=Zl%}R9u~VB`4l-#7WKIS z>^ETy#x9tg>)mYVip`jcSd%T{)chhwSrKb8`>(0|O`oWmgY#j^4dyo@caj zB-5pBW+_KnYE3#Zn>jnL^G047z-09ONi?gJon_OG>{jPF%2+$Eh2JeV0@kEZbjuvH1D7L9d@a$&8yg!nndANF!@=ZvOka%Z%@7!j$ z6bL^^rEi0iBlyg1@ehEo=d4y&LD64#@T1eX1*4ZlInXLqeM%8ly@^Dh#7TtJEa7ex z;j1-p7fhS{oe+{fz@iiglfuu3qko^3U%WoIcXckh=9~!QHL2qD?g4~@FiF}a4Sq@eJ*2Ohcd8&WB?}fQF#DN4^DV&p$NH}C?0dru7*9XTRr1(? z5Whle?$C9s-tPPIC-r|WnZHPHzVo)VJ^lXijyLSe3)&WbX88O?CzF;bC8xzSe`WqW z#Q?28jIvrk!7ck6r!cFNn`iR1`Rn{N&675kakt(bt#xyr6sV0&`fac$CBy|97fI`B z;%e(xgSgtHtgf^&dwV~Wav!Gre!z?W!hnxvOP$Z&{Hz=TA!PNKneF}12V1u?GO9(= zV-6-9=`kZ7=g0Hr_;@Y@l<^!*t`#iw1tNcLFxSo#2mpBJlY;zgbz(hSo?#Wj*Ur=V zg3>jt3fr(M&}fI1Bdbbh9>;9!w@7g%kM&KZkA>`;n#S{4?ZzBv%%EwJKAANtKjqH* z&=8+_gmJD8m9Aw0ZCs?*NM^8ru{z(RbD(dgl1JqDRuK8G?Ftb&XLU2}Waca(Nqh~1 zltcNSekanJ%{R6oh18jpDs|cE{LNFB<-t$N!XFgi z_vr~9g;mg26`FgqisJm{Mod{{uu-?YM60i6wqH)0XJ?KE(?fNSh;yP&tPospFS}T?4`~8xJ38)vtY9)`{Jckd?m2Q}otVMVP?tN#ipJPQ zb~2|e92_p7_k{pRMsFYoL^5tW!55r65AN;!eIX^vPvCUMU_}KV;n3(DyJgeG(ev!t z%oZK5H&X@Qa~6j0#bG&-Fx=_8&sF=f8?K;n^>}A$s#=T($!28W&idwYt6Fp`rDF`-WLP)bGk-HD-&p z*0>9^^>;HE*ydJjz6ShdP3FRsc$X>B+RqjfNMFbEja!WVNoWS1DV?~C@Zu0o6J|#{ z;|LZ7qlc~22YL6THbEN_#mc6JrQFUl3M{W?m$y%XV!jkYxALN&aoF{sdBN^ z5vR(I#)%6nf{7&N$9=(!%#TqhcmA>%`O50%pz%+aw{6;aDZI%~hnxF)CIJ(r|9SR4 zx-XD&KPlGKQc&9LA#JA3t|nKo{y8aI0QpNEuS}j$3S+sxwB+%slb$`J8m}Ot5H&KK5>W(TG_a27NU^&Pf$RNbG zZeEByu}>C{vGqtDt?wLj{Xk)({^N6REVh{D!JD6f5Isto30=R3q2x7!IgtAdL|EJ? z5Xuk+-xACYp_t5nSUv=x#Px@Ij2}+;#(fO-&je>*)BlwE=RX^ZcpftK$((GNeuUXj z-S*4>M0uI7_`Dh&qBJs@3SXTKW|?L9GSRu3i>APm^A-Tn4=7XjgFPmyY!IglCWC3B z)}jbE`nxswb{5;uhffTPF6%XaF1(bLU9MBdo1IvZOL0jq#PoI4wFMAa4^G$BEQvoGhULijX;lGu&hJ+MNq6qqgVV2%KatOoIxab29G(p0+DfE&VIjTH!YKNm4%K~b&b5zcWj#PnAo{uFiDB^1d#uhrdF|Ay5QE2ms?A&7DfIq%S9R*D zOXO})u6gxd4|~a&Yu;Tttqa)oHI>bw$c7Y#oK)hPiWUI(d9Hb1_!rq@%#JbWg6?GA zfY@&{SOV2mqt2$H?`6~chRkhmh0`_V;P?XAhEy_hmLe!jE-AA${8krvL(wV{98*Jo z)nHB=d{j+W{WIJNeQTh4#5tp4aezu`4W|Sl7=ZDPbA8GT^VXf`<8*78QVV$@W9BY zAWx4R=yp~6+M?3oR&=udxxVzB8j9Rw1I-y~ci{o%p{u8B{^9#-`+55JYOa4;U3;DI zs(1X-Q1Q6ZrK&mG{`UIKr@31`{4lbBP+K;S*9NG=cOa!&b5{*%i|)-G@7ofj++OH0 zD^JR3ihWg)n@JbDOCs-g6bz#HKP}X71%DNrQ|{~DMY*nM;v2ZDesikYoygpP*ddL2 zm-6!W;=;lxq@X+q2^S&b%dRe+Dn~esSC{+YfgEq{5uVbL57nX7WtOmES{DigN%kj& zk|X?g=J0RQZ=2e?m2rst-(uB$>Ip(>yW4GKmXsp7a`^E|ilhZ$uH7v;Hp{a#n7PsL zgz?Bn9)DR6*xS(GbG{0b)Lu;X9`XJrXqxZunW5OAKkDw^iLo)e^xe}n%x7CRjRhTs zw9JH6S{-TxN-rK+UB;VKmBpKXX%m3~C}sdk>hII1SWVf`O3VgOag~m&>MXhWW{WSi zSE)OPK4U3e?!n`Po8qRj@oeuigV^&At!#f01rThjbLcu#SasAt)7NaO%~B8E-9Evs zr!*Rbi$%K_h7cjEWHI)R3GT~2k&BpWs~c@~bPQeh;>V4vGW|0@#3_ZR`IG+c(OfKj zT4dO4d=-|j@}ZIafid|7ht)`R&9GQ>YsF|O8mcgSQimG&1v6I-1)$_{3~$&e_Z_*e zc28PV@;J&jzOmIA`C`d`HaCq+Y{?X5mgRXrGJ5v1D!K<911D2%&ukO!`%p~~EoT3t zz4GUiZBMB=DDur1NDpWL+v4JptLpj#MTIZtSJ(qR@t&Xj!Lx`+V9VCz13km*{l9I3 z7q2Kae+ixtf7fn^&(+ecd}#zhGXshd%3C^Ni~O~J&*$}er>L3a?`glP6-JC9Ia8uB zR{@bgF{h`-XYX18}cK}`R{*V-; znxgJzUYPf?-%}rWLX56&8-I)M4)CGYDey=C>EE(h{!Xwv0fA4} zw<9-XWek?@86(NEaJEXg8&^m8iM zdYC`@<4C}8bSwVox1&CNv<`-a{ONr|2^8z?p9Kr$ppr@qBixHW zdhm5o9AE#3_np2)0|LTg?>o&hDnL;2?>jxm!29=|uG^1}NAElJ-B&sz2|E6Lr@MBS z77E!-qR$t9-)Zz`bpErp?ue2t?PJ7y*-!IxJfP7VEE5TL_g8;=96#IQe+puX2**F2 zsyAph$PuTfqwogJ;c5qT7v6U&J6K&##@}~(1K|P`tkql*YE8uRWrRm(-pfR^F=7i{ z-l>N!>q6zTfN8pfbHY);MtvSnINs-o*9HC*m#3KO`8>OjpR%630};S|Jp(??SDR&` z`S4!f;{IUDIOKB4N?!^&Jd4VQ_e+--`S%AQlHM%SJ8bqepgsB5hrXBR#&2u;TM10~ zwu?yE*VgW?fig8pdXk*2wjYB6VM>ziq#hbU`+Kv82>RbQFlPvC{>#`JA&&g--}iWH zvqwXgz4su$=5Kkn-aZyE2=2r$=AS=KFRT)$3wzNxo!}dow;nS-`@IH={Qg+nac<()C3tpc9O$4GmT6Il(9jCm3xqu5+!dLk*Sd zi0|jh+2F%K)8|FyG*wol+@CGBIDLK;+gLTc+HLZ&dcILsZkI#3=BKq}?n^W!IwWbT zshHsASQV?AD&I}Hnq5={Rt8mnWr-XTZlcmf%I0H8`oaq5HX{RX!M_e6DMm()<@7kM; zSeKT&3w;<9wF*~5Sn}K`HIRbbGHvXuUa>7}Huslfxetit-oxjP?KUp(Z#I7QU8B$3 z@E6i2^m3@RR-B-;8+6`&EHGGIa^zf>OO7UjRTa;~eIwTdB-;KQLjf3S=FKbtKKa-D z7R2}q{gs=9OC=39NgAB)b5rn~8<_No#8s$ux>mUz`#1kV*zgwdrM7D*CFMX_-}Fyx z>Xw$-4Vixmg3uJRmiHMlw-M>N*TK0)*?g3R>FT(Jsc%}zT#UD=H#wzoz?6oXHN^UD z0uuO|YIh+vD3n+7IG$D|l%?DSAx5U9C3AJ84iA$b&dbO;r7=0Bp=vcT)*d8zUi5T> zqC)(ZsB?llH!7qVB`P;YyH>ruqtrNa2P7&McY&PDUew=-g_?7>YC2AzFbNB7H^Di^ zPl+@|*SN0CCRS~%cE45P;fRD2TqkD%YWQQSL4|dhIq{e*Jm%i+9ub3WzPhU2cGf0t z*pzO5TS91MDFikOl6kWgsQ3yM8{fch4;32Zf?~9(QM#spfhi5uQWE*m_<=8DYyKTJ zzHb_uD+H;cPE%1?|1oFB8qr(*F@K-GV)UswTmPP)U;p)gv-&^yOI8|gC8&<)*SCD4 z8n!L?h_&ayg7!4{qI39Q;z=|J_&k>t!Xs`{XhVVg;4P-VI6Z$4I|PwMj-GD|F<*e5 zPm2o4(({6-kZqvnl~@qu=(+rzJbJ!An<#qzH=`Elc}Tp596eu|g%>^l)@Vn2Pv}|i z`NF5V)AP=M?oQ7^2yz$pOC-XJKT!T(-nPBF#y{H6nZc#Z9H~MqaVj*X+kFe69_b}I z+|S7r&KDjam`5po6e*8Pxovt6-|_WcoLGIzDWTjO*0;dvPVlwly@$}feEA5Z#vy?=$>$=lJ^!H;F{VyCj0X`KN*w z7Pe2StuFVN=Yf9O{?zB`aehNDfzQh$N1tY_EcbCn-|54$+7^|AJL;2 zhE6P1V!Y42|qvHh!3{n1> z9w}P}Zemr@kaW1+ft3B=F8s~SJ!Q#nPt^aD`j{A+|NhsT1zooq3-gCNd%rQEE9}7T z4mq`%0={>9t9q_?)$X3YIENHw;?yq(r0BRGm*X?dLa>%)*P~^q`PiO`O4I9Z;d)>Y z1I98SYl^W<%-~4A%s-O@-{Nv1SZqB&WRgUGJHah~Pb-dezV?I;qs_x%?U@5ZDX87r zv`xe>>KzZ(csGk$|??XLEDE2-SN2S4(VN@#Llwn7T@8x|cj)Z-t{Im3pe`EwY`_%PW zud}6e7Al=a8tC>u)WblBHQ+viLP>7>sPSiic6NM!w$1)*U~WlVs|7rQcJl;?U43Hns7jx~) z&F+@1sz-6@z*tH(;>Wbik7-x2X1n=5lnaEWs=rse@x!uljg^C=t*Rg6X{b1CjALu8 zqx%e!ZrN5kyX)rs$d*_^Y-ja&D%!C|Ow#h2z+|_&0E&^02_}Y^cJF zltZB}sgBhG<0ikHdg^dT53xk;&GP$}_a_B@e-OzcsD1dGPf&imI^*M25$Ut>+p zeFNWXE@FUM-Mjr`Zhd(IX+X}cFE1p)ZnBz2L1)UeHg4KHk7)F;C6A3A%z@X1SiOuc zn+Q)vuUo;bmbo9QGxG3o4x3{(a(frPGt%l7TTvS`CuH`gq%~s)bLs7sg6gg}m{&4; zuC3fqkaVFXZSacl!Bp<{p{hbf_;B#}8V4jox4)x11khF{7Fv?T2*UAagktlD#nf~N z$m3_Ssbmbb7`M5GP*}t-wn}f2eA8H6fs2Z}vq%|7At2>S9gp8hEOyu0D?orCTZ%E!}-$BJ&NA@g3W-RxUjQ)dX%jT$L$s@Pw#aD0(Yv zA~QL?SjpVLcZVyvrqg^)Or@pig_aThNSRV9JAGg8rgZm1DERDi(Lao)uixZDglFe3 zi%FLLRDE4S_~Pk_g$MF?WbEI$gpIJmPmCVJ{`%Sv!~#(=jNeje^2{MZ4BIKG~o2a%(&{lq>YIl()yv) z5T2gfQ*ImtOM7S2x|zC1q|uNefhkmrH*?8Q$$IIIt6NpcRhze)^IS8)h}QGDIT7GU zsek*#InSw>{FKel6QvTcZJ&vIFiI$%^IS_eIA3-zh4fy0<~x>g*E!F%_grLg??uv= z-V=LEp~tq-uH9fn6xX+T?Ic@4{JMbmm_C8AC<6nG1yV!7`$RigLiGM+C^g3spfAQU zClm0Ee0ju6vGbD1y5@7vwxNirMQ+Te8K|3uE;58P|M7cC&Egiqt29yYWtfmZZ`V*2 zdlzS`4&*1l;OA6N=Wm7WXZ`F^T+6<{)w&mK^=p*K(jM{BHsYf9w>k+&evZLM4mp1P z06!OgLHyX#kF?!h4T|>Z>KR2kHaaYzi1&ARJsxotSvL1{P~Ni~aZ@WDz>fXBr zDiq@%f!{CK9Qfm0@w$i!7lqvU@XK%ce17-@<#~SA{JZWg$S+T9Lp=Q?@n|V!^4c)l z=Z|j>3)>&^Zx`h^9&h@h1>=k7pORCukLaPS9`F&$d+hzt9$N#gJk(Ed?NjS|Pk^zl ztBNaZAANhn4h&-Y?xUeJk$r^fAH<6)#1FQ zCN84u4TK}Qw#NJRL(dCy^n7Lyr=hVeS<<}$uDs>$xs4n{Y6r%SvfAy6-*zdhvT?it z_gTBeX@A{RRpxYlW-bCsHwVuJzg`7=IdgbK< z6i4it+*!Wc{&d)@nAp3z>DWub-Bk>$idzLVUY+c~bfeS`5+g@FZwID`iDhm$VFuaD zf=dT8xVN&};P7F*tEOu6l>j?3B4CN>KqY}-xu)rxyBvm$J*zoE6?)zeV4 zY^j)c+Wr&iO^2NjX#TsCtuWMUE^~5Tg2#^~49`nA7}?rHahKU6FX5|b27Q8-nK~Sw zbyT~b(k$kif0TEO_mxHTqqY#DNsyO}{meQP&0Z;4bZAO9%~q3lDcM=?EuQNnS6hGv z8zwLt$6<~012Tesxlh+=K)g%wRfMza$tY5zeaLvilFd)rkFnt2EdG6ue+B$QVjXv5 zug1O`ES+J^4Z_u4q{+uZt;v20^d$RvE_{4whM(cghdhHx@ta70n0`*1lDwyn_O@C} z)6Zv9^z_kL77KGN9$J|+<9v?7Ij2R7!LUjnUCOb~-G7^;!C>e1_*yW*rRSpgLGkw! zMHp98{md&hPU}(NzXxF|LJ_LZGMY=%O|E$)YFVzY951w_!frrWF> z!mRuy(R3P{p)fB~0JnsBc|PF_Cg%K__|fXNo&@~tZVe9mrE@~Lz3GD=?rZvBeCGQ5 zNYZcHgD1(R5n~Cv1^^n@xjwsbgw;OdC`Dc6qyDxlO-4@Xa+4J?zO1S2bc*3}10&T` zJO<0(`Z;P#NBY0{V|LZ)!QaSND6jZU{spF?*$YhRhoVgR3gw&05mP82LfdJQq6Wli76gh8>nOgA$pqWyWB*zhzZt z|N74D>UJ=`nK?XzYwoHot3EEO|9BT7Sxyp}J!Rrwvt`vM{pvs2he%^SMbfYMiEy!+ z6%z~s!O$Ms(P+<#9$-vuPh)1*vOiG>xnX&9q@fhX*58^%m&!ty$luN0IGPTj+>*KT zX<)9@hHR<+c5J~zTYBL1j2!f3S!nz1y&(Z{r zz-zE{>1^mr8>rOSZ{8G4G|4xpyh8u5;C2i|71R`*s@;yv0m#--_Uxt=A=qM8EciI<6AX zbvf_R3rO}MT0A+I@0e^pbb3Pqrux>moY+rCQ5;Jdszk+|4Fh^bmFWd2$zw4fk4d6S zdS%ae>}?yqtEga8}^)wX5*8Zwz0DM{wY)7#&Ezt>CL< z?k|OR5vk$2Z#M6|=90O$D9tDg1)O`08m-0n?AdP4+gmgc(x`LCEVl65hfK6i&gEQ^ z&50|zAsz=SrHt_T!$^D{(RLq+?lGQ$X>4XS)Algc86VdE+4N>6w^oY#)XG`Iu*?vt zJXn=2vadz%k=ad=(u3>>WIv1S8{9esZjraX2s*1z`U3i(X#LKsV+J{rmj$uy2!3eE0(X=C(#w0{Kf;N?%4jO49dZlAr$Kchc-sR(;IF zWAz{RExEIqGWN+d7gtn?VE;%^>C=nwm!@p1VGlj1hvs<(qeJG_y90e=fD<;EL#Zg-_DY=OB% zSHKQ~n>X$}cb{)1WPKpfud3ZW#LNSZ4zXQ9dWc=q)#bpSK4qisML6HSS-JK>O+BAq zny6-r0F`r#s@*MxmqqpPIfv%uRi?v$QNFVH{yC!8p#S*9^HyL>3t)vL+82jM_8DCk z&Bc%oejm!U{|nr&b1ztn+uh^7Bap0J{8isx**Xpq;B+2y`N12flnd~@H7 zHo;%(XO$;s?k|>DUB;q?v=6aJ)2Mrs)%G3}Vtfc2}>RV=q&grmROT}XeZMmp_jwaI966M!*$MCMoN zi!JztjDX@>kzqiIbyOI%jc+%3#|R_o`Y`+8{@$LX0!~W1T^rhLcKh?MdB%_iHYwX4V6c-sSGm7|R%r>|L%&2(8pL1b?9WCOcWLJQ=R@AJs5btD)T- zv>~|6#_2%c%_!SJWXlRZ=RCm&@~ydI=p8>t0%rIz^kk9a7DGxNgQW%`s?PnFPygv3 zL#esjlOOD4S!s2(d*F|z_Ve~g^z@_bv|0fT`oW{vUg%Xknp57sneiec(cpuygX4>=_SIoL5?=aDiFZkH?mDqm#e{p|l5LeN;-RsA9_nRh~HSMuzT(a;z@-GUuWqGLgUSl?KDQ1H# zK(DH_xmAYyJ*ZiX$+M~y{M~EG@H6Ed%rNC-H3zrApP$zH0Qz4d$!O=b@mIc0!G15+ zfAdeUd;0b~uCYSR@K%f}cB-*JlyJ2?Ol4QR-PKxXs**#w*sKN^A3Os`y_pllIX%n+ zw7_%D1I1ohKCF?W$eMEh1lX#OF>jaqm$-mhE1~nySZjObM;aKzoag=rsX>N`p>}Bl zYeMmbvZ0)f*GLXeTvhF}45iuPRMh%Q;mCXe#n}11HkZ9!;c#q|Y=){Xa@jJXMWD-7 zMlCk^e;Eat;;09CM1G*am3x4N2_*PFo)mHv_2y6UsOBjRm7k~+I^8d8s{F*T_nE2< zR*(A=X7%+8@IU^?H=*#jL;RCk>7d;aDb15TMWLkkNT2j^4ycez6{F2%A}%4lTu*^= z(>suzzk7EV_|KezKBQPm186uobC{sbH-gMK83xax!DK+AcMx(5IL>f=oX0A6^h@x2 zEbCZlRtBY_5WGj|-T$BUAgfQ69MO^Pn4_mmi`vWv=aEMdKl~W|n4lPppU2T}_xbPo zL$GA=xu*GC*^7ty@Lu{*KRw>|F;CE<`Vk>t;Q-qB^n5<*Gaf`kGPx;@_0*XtE7mL+H3M<@m!SWo-G2DzM*} zaviK7$FRQvD0dL=9}9HL7rleU;yQMYi57H zIcReSaOYpULU$3AhNvMLS$_P;iT22XKBBnOL!7pU#yRmOA%@xJX0v5Per%oKj`@di z#;EMIe9FNQ=iPGY1IAp#*zzdbp6s_{`#yWFMIy|YUwEFCXCn|BZ|GZmq4ogLVi9#8 zSDBoFO$zIUl_&;}BR6?g*pByS(7i70N9P1zH50)rfj`3)+;u8-jbH5ktY1+P;ic81T25qh*L=Dj$)7az z_w)5LYssWd*3$)(+2_G9|F&KK^Hu48C?c-^Aug-`A>4!h zXK9}p7otA+$JIIhQIG$K=(VuVJ-b2{X3s5)&Q0yMzEmwy@3_8y3)|4(>B(TSPtOkp zB4Cr;YsL&lMrpslh3uU3o>CzUm&~05dP#MEdzpENy>VJqoc}kg;=P}d)`5WD%0p=% zTGSti(t$Or-Dnw*a@%IZ`=oTar%0)99?fasgMdnw=x{&v&=g{2EcRvGL2L$V0k1;p z|7!M}pYC{Z{lODK_q~ASiR*faPZru|kl<;_Y$2Bb9NFM5Cp>w^j4Sl0mB;s^`S=dU z-=B-_@R(Y9+KZDg-efE9nh;Fr6`U|jp{$d?5WJ`bY=hNEJNK(=xxjqkyiJD@@4YURX z33x~@yO+;;_peOPI#9@&zF)#(M?>{surRq{`)TkRv2`y8=sGmV7@Z@l+Gkb(w(7lo zj;iUn^d$lI%f5H-OPDxkaOSsSv!!JBcVq72jNT7k&;Gf2x}&Et%33MFNgC zt)LJ;xSs#R@7{^eza;Bt8%bMNNC%#lV_hYWRS#x2fQ@In`^k%vY}zFFw!7yxn6!{` z3kj$pQXzO_@>gJU#K43q)F=>(zd79|*qBY&iG=JVjkv4x-1UQ>kSV9mW;RNn{kmc! zLEiJ1-Cxb>KO`OWs?au8U2zyJ)0nh7eTY>KMtw}V+jK}^t>V?g#H-hgJq&!euN^%+ zfUO-f!a_CeYsVgIA$o=MIDQn+YsX4!8(#{>WtW1%G(766vc%bpR>y?zSk~4;W90ky z?Ogw2*8HvTH%5V*Mcr)1{DqLUiCAARI=HZ}?eyN3k;1-OZ%~ltb+9)iK#B!(R`uhhM;HWPrMpPIIY>JhzR zOA4cx9yBt@?#zU(2w%U?;cNLNa1{3rs6A8f4J^c(eZ`)zY~ybq{p_5c-ioqKLYv1P zO|St)Y`=#0w&pcvJKxmQN?}_DwtHe7tM+t6k!?QmFd|dw<*>PQGe1*Drdt&ryzjSo z{^NHj5ZyiR^N!5wK~Ib)is>bfvlvAHm?9#*j-M?9Cm{)F$JgQBd_Y$}kPcqrV*?*+ z=WU`9qC!2&p|C8wEnqv1BKM_(5{ct1VrHtbNe~kL<#KU2DVVt~Y9_96o_-tVtyT$7 z={He3kS%?af^NIP4As2F1oalS{#uQ zp;S}Tdj7Z}ltyfSpWAKTm&WfD(yphBrlto0i%R{Hm3k*Jjf?c#ut;M_{_Ps)DHN5u zKa6qyy#MiOl&vyc6J_(%i()xHJ|a}|6+odxkWlW13JD#JrQGHzGwv;Jb=8kCubax? ziW)1Cykgsf#_^--SB-YNzsVFxw`w*V`MhRB6WSsu{mACcFT-Whg9bBa zwx>0`(?$vD3cgKMHLAXOQp!Dj#J_-M1Er_+4#Hwk+jhAonJQ&T%3V#KU`QF7j|T?? zkCR8uSv4C_ch@Gg*Bva}vuuWG=&xI>mP!Z%0I?1(h)zIE4)CO=Fut)MLi!PD1p9<}dxlgnYL5Z6e@gWjt)DxXbW%3mfE;?;u z;)>}xg7)j-F0Wv(!ZGh7t zc$B+Tg@*n~|28{(pX%wpo@Z}ywdl2s8B}d>#}d}d?k(>3J2qZ zf#%lSQp^3_1K~}TFZcqQ-M_d)iUryWQ0-wV=D$g9Ovy&O#oeRuXkFxNaknWf&0@Q| zb2sX|C9H=^+l@v*n_SmCENBlrYR|3$d4K)SZfvD~bqX~9CkaBc?b#*)8refmBP`xw z{GwNV2SZ&y>sX%0V1oV?>;wVa)vaM3t#cP#9-R^JZZ_@H9z`2W5eOvo$*OQiQp#p1 zx|MI^K*{R#p#314!zm`^uGySN_csB>?CYpbR|sZDgQ+nXHU`{EgeYHQzvT_vcR_Xm zVO{Ph2q;sD9%)SG1o!H1tbI>U6PS)ZxZ#^jxfd7*iiW%V7p;Ypq|zf)$4>xHxeq<@ zN(m)(=0*1!>hh$sNZvRlM~};w!j)Yelx6b9IC%4lVNmkt%NtqDUI`nc8+Hz=+wwHA z&3#lNWNoUyVG}~g_e7c8{pan#rdOyTD}+3Cj}oHDAcQxqIci`We72?m307wjwi#6^(_lzP;2tbH#slPXnjjnuTdSi}Lr zCT`DgO7i|dmTlgPnGB{I=4qkQ*VXp5j<2;QaL^u}zoQw@&|a5CL%Eat@}A1ITDh78 zUER1yMNDwdJPpuFY$!_Rt`#ceW*ruI2hj~C$TV7ADT_hsk!*v{uU4;9EqBMTE;nME z(Iim@a@pj{4wv+EHlK})^xLp#BEJz6XwrvEzb3Ak-XEOJeO5So;jhA3_Ay&4&F%RI z`eBW*aU03R^$XMhuWV^^>(IS#z6DOFiZg?^Y+*LtpwH0gjVm=z^1HU2xFA~vD84ows-B+Vx6M4aae*sbOA<&&EaiZCG>~zjTc%6FkVrhiiIOU7N42{qz}it;5J6 z*EN;qz6t^wO~A9RP1?0v*WO3l;vG3tajEYbB2L1cL8*-H373Y^^*S$q6~jcO2L{oY z(g{uT&Zj1d-{j^DQ@h9W+1RAth9*rW+ASHV(LUU(uc)!x?;%ty5}{0RZ}4GL`62b@ zkE;Z5ko5-5geilXnpB6IPM=lJrTcE#61@`r-~_nmLw9%Mo?a-s?S~S|o@9c<4<-Nw zD}^7ZJxj zFrUjWn!Zmb3i-t>B2(!nL0@{cex%1qZ&IlI08l!=St$KWi{}@kiHh+HgB?#?x|yFi zzu2Erv;1P9>g|DFJT-vPW=xL8;y%YOzHVOy{Gt!dfTA)}0!7vC2=NGMqh&Z>-FOGc)M5Q+gXA_?m&hGnj5By>?P%(b7 z6MWwDi@h6hni4m@(lYR*c*pMp@A$gLvYNA-*9W|z8o`AT(jIX?U1Y|(f}U+d<*Obg>36}xP;o3DzGylX?X$*tSV zy19{0w-Yrm>i@VTjCwada$Y%o$m1i&Ss%8}N18UM;ZMWRvV7!r7`O3}K^64uj;93h zmJxjc9~nabMYH?S%!q{_C5tC440s;YuULaDqO_q;1Ft-UxV{!w*3c*7J{4!deGa{| z7w$6vJNGR2dF2i&fcumt{M&xR$QtpVuM>{=&p5)}`Olgh|3QAV><6Uz`(JXOGGS`D`{g1b zxd^AHVX3XZVOgSfKOPn*6M{KUM|1E=*s+u?bNgHjC08!hZgiP_sO+bwqV9 z0-t|2X#C6Vg=q8=@IAzPw!Kii`VzqgzWocrn?m>@!s`hqfw_-xbBMo_@RUm@PrKx6 zSJZu{HZkLht9`)YW+rA#o>@07w_7oO-_!Y;Ka0ysd^!z|Wa&eGZ4|!SMbQLFx`SCr z3S{Y@W0xcu;by~vm#6O}E|RB*i)i0^LPUGWTbhpE9~V;hkwAe^pt*;h~$bMu@Fqs)hD;N7KgH1^AE7f+-g zHl@a^=FwJjKXj|`vjY6QEd0N3v&O{AM}NO1H(!^} z8Vnm82o;;WaQ&ayU+e>we%}6~D(O;R6@6f(;M~yzqA}7|Zf_GH+T0cl7UaqG>wAbC zyBO63dNgWa@;P?|qt`I+7Csvn>9=9ge16%}_Gz4_5L14mYlE*774o@9_|#T;qw5D> zZfd#{I4f+N6*ia8#zp#VSTvhoZIB!1DP)B`O`iGl9`Fevw>#HXjwZ#*>+K0hUn>9E z-PO4b3a--4J6q#IewMOH5MC@X@$Pt<&bsoln4a z`gLQ4h$@Hy*+Z3m_$wh|)azM9T!;*@X5Q@uh}a8F=>m(*9J2XhaHUeG80hx^#bXs= zKMmRup%=_ktY24Fe~Y!Ek@obcv7G@$%vn8`*$J08TCKLt0Xkb|S7JSR@pWc;+J6!j zF=>DB5n-WJ;da8T)mpC6#Mp6$_6y4gk>(Ddc$@L9oxiwa6U^UNEmI zxhbwGXeVcOJn!HjL*wZq!+8D&k?24UW>8Mkk8WS3YZY3`kGpl5P`vpS8_(q%iQ*PR z(NWKtrodp^1)Cm{Kb}J<^{8ev1=6|grFu;su!b&yE_DXsXj}bL`c2ev<+ZbM{OJ0( zIpJJ8PyKz65_R&R@G`=UixfgM0M2x>zmrx-#ipA{cJKU;8amvjUs>Zk73+ua`biAo zx&<1-3%&(oN7McULp5i$aLl;fKvH(x=zL->8H6H@&qBfsjvtut>-Td<{voE1{Nnx& zymHcOf@_ZnHW?bmTOn3_wQ#^*)q=AYuJtEsOQfW2bu+gUzk5ZZ&?~f)$&6Za^Z}Kn zcmnd`mI|n%0BJ~=@q62h2M8Hp<m);=+XHPA-09Q=k(?44J*87Bq|ypm z7%CCmdsf3-B@VH~nW2Wtwv?MmA`APPF^BcZoHKQpyUy3b1IJ;Ns=r}lq89y%-ZtLo zX6?*+Qn^8>*`Th&=h+E|iH)R=onH*chwh}p9Zm>x2eRI+!}R&2Fp1-DZu;>)J3ijW zN`8KF1v9R25zbRT2a!3Fm1+8VHLeK`&!UB_?4ai)m}_@`fZ#m0mz+GyhL%w)0}UlB zb=D!o+d%$%31<|e-Bifd#OUTMLYfo0xVoNE*hIM-DHjo%+m<`J*P$Ffn_c@kqJk%d zCkb-k=}Deq{_3iO!c=I4{l~ddH8Lq zi04=r_ZjDx-29PE1uiPyGx4{o*_j z<#WF+14p+{64^=rJ5Sx!@qU*(87XqJx`$->WB&*3u-$~Hos}MPC@Vyfes)6yOW&)| zMt6`g>^1PIHY7)t(G{KN%_$AQ+N?E1e=k|V~4_(cBK zD{9s0JArk-c|=_;wXSm57|gt8E1NCaja#0dj3q7qPGiUuef#$96aMk%|LcG9P4T@; zLOp%#zl8s@wch~JZNDP)fASVGP24`{Xo!wcf&?^HZSDv4Q8)ekitS&N{|%3!ivJaB?ZKmf$Or9K1Kb}YT;8G zyP9e?Vo4FfU@r#@%V0BS?CUL~tXTF?!#f(+VYW&f5!)#uxBN;plM%$e5QO);`Oa*^ ziM<~OadS=ds-1CvIfDf9;y=a-dTM?I%U)=TbOwP2O{-AjAId)=Rz ztjT%x4r&PeSht~e@b&v)AV2eWU2gtTTd(Gf(bPm_)O+^PT;y{R$c#-WZ?v=c2E*P~ z$6Jo2aDlhg_c-JCFCgF*h;>}rD7l$Q%(PBF*pGF6()Z3!q|5k;zZt(T4T!%PAM;G~ zUs0xf&qVKE4^iY?-DjcF!!hFQ=9%bepf%-nX(h=!)U4}T@E%gMt?NM_+x`ANSN7ci zI3%pf-^{BO0;3W7wl6@4^W(GU#@K#un&kiaEB2!I1xmOA`F}AG6e@4|$Y_kx1ymBo zut}P3qK5UAe06VQ<-HA+cbjglYOzg%#f>$0n}Nszwsc+ta)j(aE@R)3at9JgXEk+H zvbKJ2p?vYmc4S1(6i~z=Bi`AEz=Fy<=U4tQOFfHir(HjJ@nYKt z;Q&YWETafta8`QqjLALi*T?6^ZyV>=IA&~YejVM@{2J}sQ#ijqpFg?Bn7wA`lXSmk zBxS$;Jg))g7~ebBL|ygEPWHDKepAR_b;~2^E>PLs`Cq(j%FDZ7#r%E)#Tr}q12i3A zb+zah;MiRCTMSMhx{{Ub@WUOJjx_#nPyyb~>`&g4Kl}Hio)vE4`H>7CoBh&8TBiKj z|G})h*`I||X`67T;_9)D4sWXNt`U0O}v(DE!$Oj9;&hp(nX(Se|Rl@ENW!(6TA&Vki~Z{%+dq?&qeD7{s%|+$29{NmWlM^FfvtCGB2>+ z7nt1X4KIWI(Qo7<|G}$!WxdjoSf+gB&mc#P^=6^c(}(wf{Bb}V>*avuYme?GlI-kw4?)OD+_a6c02+Z_~$ zeEj~;XX{ZO?Fs(U&xb!q<@dB-IxL=72q~Bkp}ybUACoUXuC;Du+sE3IC%;P?Y>uJ| z=}A1Q`}@{EQIVc&*&zD&t=ky|4I&alFYj9)Zft%V-nXvwZMOXh^4m?h^`*Y;|KOkG zZ!>cOf}x6)z0}Q8yS2#s_mz?ji1!i}QzNk)(8zbkYQk~fC5#vN zc{Gln|AoJjQbeeXo3uZ*cF_2&zmkvbG7(Om+$xTn&)&u4^hR)Bwc9_9JX zAwFk(f8*lgpOXCi;EFO)jPe~gk5Az z7Tv*^RQ58N-|H>A!dFjy#xM5_EYyFawPv&#o|GH8Z?v4uAxn;5-PgB* z{ounW7+B9GCb}OH_V1zHNhtOn+L%bZk_=k(Yp zQ~pZ6jvTR-JPVbceIzUSQe@FB1Ji$-M1RZBHT@81v3#tQQ%M|?R3~vv7#8sVP+Hh2 zdIWUuzv%lUuOs#JeX`G#rSG2RudO;{yd2#)xk^@+vc2lR`A%p)O8PUW2_#{==Dr?5 zfrGmJ!@}iO1pu~tI;Ie;Zj>Z5rtcq{Ou5@aG)4^=-eYj{8Ry$poeJ8|EZwgQFghYg zj!f3=WGi4Na!h8qYU1*6wL}`vQ!c;UlTnt6yW^vqzx+IU@$V0c6n?BdP9%d2^yTLB zDpgWYKKUN@xMoVVOe<(icX*vaUNgv$6ZXQKM`*c>D!$j3k*&CUeN*G$mlsx90B_Eb zG%>r}Me%$`7gUpnzk>O4Evt4kU%sOiyj^>>O9;j0%RVA~lkDds-p7?H&tKN-eAze3 zls{kYCP!?(WTDb6BYK!GQ-KzZ_B3BkSK8L*3wV)!ll*H(djTUFh~0eFyv=eC{w0x4@Og8k&zmI` z8^dn-^Sj@zd}igZpoMJX2Ne`bdB{WeSIgH7rJ_%gv4`oCmhd;RplZqdst?GB5)aX#x&F_6Ym4hAH-D;^w|2zGaA+iE zopx=VBvef;?t^#Kl&TLn)H_k@?Ur4XUAl^P_pF{60e&6op=Q5|7rT8Z%df(;hcHXq z=G)bhS+o#meZ_82yNc8mpD$~5U)?Zy!&J0-r2M#4i@B}uD*xi#+McEvnU#pX9F)uT zTGAb34rxF@5eSGXzaOxu@B_9V9lzmJpldTj-eFn z7yMY#aGAd+wVN#l-(eUj1Opu0dEwOs=hn#6+=n_kp1?!)!Qs@mzU}*v^J?YkcU_!* z(XO`nZuF|S_MUF_prjiK^@4KKhdzyH3#o{tavKqo-nH%dr4UiouIGPc{lLt+4L~&? z=^n&*YZVsR`5_vpQ<8dI!b8vL8TxoCrI0lVtVuoKI?rv0p)n}88EIH@Ou&*Cf-|Og zROER(GX4Tx{@jh|ig8dcKZ8gK} zcU7J9*i}_hP*1z6PcJd7`umBA@8Q_(_BUd=ZWfwmEBI|ixlMBa}>4Ep9 z+BQ4JK9LLoYa@K#FdwhXwKrzXwC#_(=3Z^px~tW!@<)h=mF;!q`uH|4-K5+AZ$obC zcPDZD9h19KVLsMSuU&}f|>OoN|wn~{QJTGydG(^F`W4AZf`l>k$g}uq=-XPWgz(;CI zOQX(|{t!}G^&I7otZFNnw--G(i^7LIdfGrPUcB3=}1Ivp;M7!a?CVcG@QYUA@{g$w$ zp{8~7Y@2?J)>lF*qt%KV!wK#ubltkDedPcfh1~)S-G&)}uD^Tv!|-e^=o27(3qA_T zQ49VOzG?fqD5u&^PtzP7#zyZPeX3uXv#s18LCVniPiC4v+$rC+6;Tt(z3n4ex9dOYQ!?+ie#ohw zJl};U0WRu?gxlTCK!Vqir6qIE1Uz70Lm4~A%_ zjGwR+XkKXS&dfE?&&Xe);{w+67MxqQGH*8z zw91*U+eekBTpR5)KsCGWIGfJNT=MVol6kX~+;X-V+F{n6o1YThiLJcgB_A=JJEM%Y zrk!NT3vV2U!#Pt^I=RR#=Sj2MB+|}-~TuK<0a~PIP|IIfc%G=C3IR~L>dacjP z`Uyj&4z8-T*FVFxG5@X818mS~to9&}&^HCI!2@-P?H7vi$xBSb7};cJH<15eV6Zed z%Z*Kb(^%{#{Xs2&rDeAg2n)jyG`2@aB0WN>_ivh$hvc8sETmj3oj}xZ=W7tW!l@bp zRMg2fE>h=-U3R%kwUV29&wn2x97o?ZUEzF(o>FrYCg3^Y4k4_&d?$V9F)Yqx@OjRO z=Kq*;?l*E`IzPH_JmW|=lMO#y|=SRx&Q2fJ&Hf; zI+th-R#KJ@i3fp<&V7~=F5IK!<5T0A#NRBn54jWM414v0iB&{?arDXkzScljm)y@yMMU`j&f^z*0Es5H*kap^iP1Jq^VXP7PTuQ@{^ba&5}DyOA!2bUs2AiS=g`6*1y))c%h)1p#e@!nMIS!?14 zu-32gS*QjZ42k`-I^tyF+ev{^7V>(cjPM1gU2*YcL5mE(vbp>qi;!j!i}enF4zwf5 z-|Gw6mH5<{zVLSH@b>a?eU;Z|bY)DRafOcAADfz&aBEi~r$eA1_Po$ovb6`3^ME^VDih6hWL8B2)|Cs6lV zTB+wWAAG|alv|y8lFz!eC#uieH`?P(Q?h8I`jfLCUGB|d8)0AFY+qemecE&XtRL=5 z@ah>~J-nW0RNh?uxq!5~QsK z4(A`cKJIXSf+t#U2Jy)01sJ4$=yBwxtUNNOO_q&zv$}#gwqgWd*1TTKP}a`71TcUk zrD%3adG$B~CfYdDx{YI+daYaYb@>nT4pw7C#oPZs_TE1*&Z^4)pZsVU%9Ny#N`wGW zQmv$DHC0>FY8o01wZTd0lqwY}7IwB)t!+{YOQB(!HPaz(QL5GLx@D;=?p9^BO2C2% z)F!Y6+fuP;T|qAG9aWJkR}c?z!ild+xdC zp37*qW?*?c;XPgCLJJ&v3DBE>UDeS@*XnFjKps8jr`91QER$0!U{8ARlfB1!agHYvgbAG*d z;4-er4wEySOiUc8_%$Q z?|rNndaGFO#jnnw#M1Rvzj`(1GGP+0;w+VTr23<&x5Y(k9y|>&8(wTZ6)5Y*>5J>!3E6^*(f;Sbwkgncdk<% zMXOs~Ahkh0j?ar9?d6qxP|xav(ufktFbu$fxW{57M%JvOq|92ViMb z3GY*Mchs91U~1t&>GZ~}K5}$=BOw%OsYjwpAr$n?V`$qBJ+;K{LyR#`2JG0K+fb1B zn$TnO{vNOHpbh!^G~@}5X2R}8dNt}*aKS61UADQMPurt24la?{5xB3BRu&tyZuq?W)MX9-C{xw|&njz^%E~tx@dBi5t=nlG z^|2?^QHyA5YKLHQM->o62rR89lT9VGt)=GcyhQ}=^cGMgBJk^?$3H-i_}>M6qbC27 zj);0+KJGJ)B*Y14`^-p)`8Q=Ggu)^?5%@Lb%!t6{NbFOLiSx1=Sl~DCOCZr(qNdff zn85k96rtw%YFevcvURR&+G(jBdNT315IkFIzT}$L;$3^d#NU_F;;$)anz7y4K|>H< zKV_#$9slj021CS`@54=5jZ2Hadz3t!bz$uda+R8x7v_USzzef^R{!aK@ZJRyf6W0( zqV{L#ny6PE;2>Mxr<{3KCOjwpp4gNb2?bkC{IvvS*rYYz&mo(VMpVBWevJ|&UEY~i zMb}e)GlRiDJ!q!H-_}6}9NG#NVf^thD&M@YH4XJe(=(IL|6;6=n7QO5#tU(46;(!fniS23+I+h&AdUGlZu0 zwD>!Fi%(ahz&(--t(#yh8(47^k!156ex`N^CU?vR(yQU1)AIufs1IogxbDZ~=<;qP zJAeL#Is*y#g#bTw(T(&t@+XZF{l0O~$1mvjr#5E#T|s1KQBNQN^$fyDKs~j@K08JN z<~N+>B;a3Mo4nc%8}y&mp#Q#_3iA!pw^8q{%$2?n`~u>e$1y_iaV5(L!CPd-otW`2 zrILX0-_5f+=!aC+M|>6uRN|ppS!p5oj#HQQLVKpHKAtJ7ZzE#sr|j+)FKum(({7U! zvd<@*XYw=EDwu371A@lssU3PkSqXddNHiYl+}2hV#;EM7JU)Q z^M4B3U+oGCmK+nLztN?~7KPsv3w|6IHfFyf&RpO=_$j}%jFZop@~~$u23uEml}nwy zT$=!2*}&fPLv@OO9_RFIl*gC<*h9uxw5@xgwe4lgXZ;<4km)p($9m_k?Dfu_AdJiX zgR3C#{WJLSvdf*Ct)yVt0+pgpox@>3I_%Nk&;~4v9>O+7l!Tg|gEh}0ioAO7vq$`~ zfCZwUSzOG<3khJsLN=-{jqjH**C9cZ!EFPUoH^2qdRMu;8Buc&Mir-N`Ekx$YM$+T zcf37agle1-nX@*qPPF_DB6!*bTO%>b7W? z^J2(UakSwR2W$Q_r?uukK}<{ao~0}mo<&6NH<9a zmJ`o)8^}z2%2B)&GFEXfb=e8>kRU`~XUP>R`>k)2x3_ zH;e6)nq8v4cf^FlT9w=?n6v>;8LXi+^i4Rd)l^=y)sEDwL6pDCJBRXlMo=F1&hQ&I zlhPCk@UV9}S>jJ-x)1sNeP>^_27iUFjC#wM3m8?Inf$IBvm`oL|6@*T>>r_$Y!N;6 z>Q{WyZa2h>4e`~6xL~qXtPVnx+*;QV|E}iB(TLyfUHyX$;!Am!;9TFgT3zlfWhN9x zUayZVy=41@?zim|3K`ocY({Z7Sd)SRDWR^uC_wPw|5bc0p*i!L z2+flBjuo0s2X-@{5C=yVP#!Wf63EQiWT2x>X3ppN6z8AuH^t&NvBRlrbSr5lGV6z4ilD>^BCL^LjCJmU?}jX?IG-tP7o`?wS+G#JpW7IYWiJQ z)V@tNv_RiVXIf>M3fXwzg1BL?UO!b}-zC(u)ccH6&(g_rR4fSi$)A^ev-+vm?kr=z z_p_kf<+=5bDR%|UPiWL??<3-;7_beYmz1jBwjUN&j`Mn$FjTV`pRF4vV8oVQbcMSO zyiZ%s%QHDI3aV!NAKog;{8SY)G6~PkRPo>4ew!Q~p-iGbVs1ltm>;*Jq)Pdv|CUA{ z@E@}%*^!k;*r}nd0VVeYA35(5)XIRO&~2GQZ_OlH79?`0U6)Dpk#r(euot%OE&Ly` z{;>DozvM4WcutTR<&)dNeJA;8hm>m2<}!TJwWp?gGTt+fZa^&I%)o!+^_d6MO@Zz+ z)g?}=D@s4{ej4c1H<}~uROMF8mEhF-xs>QEuG_yc+RyP@b59v^K>mc5X|&hu&E&}P znoXyQSIwQkYxZ(dLnw30x8QFUWKoA@hS)+%BlyOkuJ~94r&7QJ=GN=3{>qApa8ZzH zG=e{W_b3F@sU}A7o1}(Z{&w3x>sOX?I8py3I;MHQp=zhnesXM%@%{M~n1d?Dp6{s` zo73&6xc;4ByV|)P*I}8XX18Q6p;&WB?qpWe=waf}f&1RQ5=BP#rC!SahDa$4GD|eR z(WaR&7EnI{eEj2{pd1}{``e)S6@Chxf-oW8i4n@MP(g1n$yMg3v09lT&QNA{QEPQ< zP7@k6ZO_WqkjurFyyr-TMF?>F%@@3DYzK^|=bwj-o{s*%edm}AW7114FIp+hNQ-lt z7(uUcKZd<^B2zHZ?sg@Oa%Oh@|1#%K=%-jLHvQGzZ_Ik5E3@8UH|mtfKoA;H?;}i| z4&wpu2`oh@yWma#qI1o=%9@6zwJp?A%`q8hBkC}_rhTZ~M$ZBEZ6tLvE44JgQOnr% z&_EV`Y%pJuz5)0I`-Lo2@H=LeGk%Ntx&d7cNWkFlF+xZb;Hq|f9?WP5xor(}5!OZf z*=0oz5-ORhcP!H`4weTF=s|^2T zi0SxeEPcoRezoaG?O(#*)BiS`zny4;Ox$P7bDF;&dB=nd0KQ}KnaICKrdLy1m#_eo z<|18gHWM6O=nHt%FW$|X;N8p#-u1ZE!a|@Qd$lmYx)6*tyGoR^X#CXHFe;) z@}l0OYa9`oIs$vsQ@;!_w}Ubta8oEXg4>_p7U1TWHH3T zyRD2JWA9gVkL__Eribr89dqg!qYu519c_U@gPbdrdsk61ib0HD#mQQHTs54M)rE*D zUDHs{+KnqQBT2hhl#8Y|n(2dbzc&6)MyH!pVF z$W0Jx&f#S3ESHe^Jot3TT5>2^KQ~>r{V7 zH(st3KMOS`b=i{SlH55Q0>$8o6WecBiOvMkh?T2@`)P;BwRBc;(G-G4^jLd?x7D*! zOTx&{FT=!Yd91(VByn0nWEM%2i>8%YJ@cuvHF8_#bJeV5gi8cPwmgZO0He!hC70!} z2*?!Exo8@`GS-MxbycF90)xtz&T3gSg>w%5x(?Y4)~WhAOTA}5WbN<$%S%p;teu4( zCVq-~5A(@ISO44KRg72B_*y6%-!1Zf?h29j>5WESN2FxzK&s|I)O)~*HHUUG)~*|j zysu@woS%&CC%`(Z1oyHxhNf=G>BpBYx98+S#tR;YAmkiJzA7Un!|r-)aemzJNy?@a zGl_8nL)NstoV0!X&3@17I?|lP=6gff%IfY-#o9)RSG;DBt#$XBV11FX%AtQr)!1Ie zjNI!uXs-*Wj_p;W9m_}@4kftrtu4Xw@OD(q#b+T)l!LeE}oU5*9#uXm8Z#FU}CA{ z!A@X%uT`lWx8@hx9y3L7Mn#uKdFwJC7v;`@H~AK1T$cT9JAwRoi9feY>fJWB zW#7$Y9N)4pW15vWb6Z@q*L*{SpSB1@=grrEt(9Tm?}AMsY6|+^%ktjLneD4rj3j$i}+7p zh5F>egW`fQZopFrj;v-o$5y*v*x7x+|5WQi=dYRAROl|$`joAEFirkovFdYocSp4D zQvAbrwD;Bdn+0mfpov*I4|64NWqoABTY2}1_GMN^QEE}{5?aM9GL*{Srl(IlIu+|k z-r}&=_Xb+JvB%2;-J_7(@Ge`4Sks1=O7;(PUx$Q4U09)$ITkRScn-J7@3EUMJrrVi z`F$6v{Yx%T`zeLHjQCyeeH{+>)7WzF3|D{PBW?XXK0dV{Kl~w^Z->1vN_xt&r$a1{ zGJ?`AaPleqU$1EWA87K(jeW?QEHM((M3<4CjxSebSCrug)|=5xeTn|nT25@g|Mhgw zm__Ee<;2y*ThcXEi7pZcA&i`S+b6xEPSJ?e&&aIQq2zU}Iq&8CDH1wavzMrSs1wp_ zWch539bg0aFv4ZP>$C)WQgwThb-PJ`Ho4p4k14WtY*#Y2lb3mZnHc1Da{kmt%AEwf zR`kC~D&-A`Qbo2V2KGk2@;YCU0N1!@+r7P-XP;_{XY?U{_FbpE&9t7F=o?n($0mN@ zx>&Al-~sP3v~q+;qP@_~h~9_wxh`CeW47kIaMXJNm=qCKIB%b!Tz`r=QL$iz~< zc^LeV)w$&1==%-6fzc`;r@y~OcC{AP)gLCevE|9nHtcmraZ>~H?qh760;}V zbN|^8?&SnPXH6R^G=3Pa!3b}+piu8(dB$qP9aP1C9&txxvaCV7zZFL|ufUS+)fHMA zD_bm?Bmx7K+h-Y(=hFfU2Uf6kH{>omw}yvpkQ^~5+p z>kn7Pj%`pVm3tYq?oNYMW1^aWutYTXgaGMTcpQs*oo9+=B3!1GerpLle?8|C9x$X+ z66NHL9l$E(L}1u^N;0CZ&9+u8ikpzu`3l;GhfTNlEBB1oUBtT#O_}!yq+)M@wC3RS z?&=?7Li#!P5{xk+B@V2B+dj_+u|9UwB)xG2rdwVY+iQQcH3nq*-FZ=b6ink;^BtL{>wRF*RT;P9IHfbj6AjummzmW2! zr}5?#@t@yo(_lIjk<=sJkW2fWW_m!2kSMBgcm?sFPiBvY|CRX9NPm9@Y&B74&P6Sb zW!NTy$NRi*fQUQveul(OaOnN>9~^z?{Y{rj&P1fQV$~gx=OYU!7)_*k1@WJcz)YV5 zpHa+2^UG-d`!!3M#AXHzwUM+B{?YRRp0m%yJN@LWU#9gFwEN(E=gV&h_;m26PBr{q zi6{CwEB-T6n+B5~pKK5I8u&(=JL&k(OC_1d#3yrQ_(7a*q6}w(-E)*C|06%gHre7o zt18x1LHuXZ25oNRIlIj^P<${({=<6X_T#l*l1-ogwe$ZeIswwDFSKbQ;c=Xy#<)Vh z>t*b?#fLoZL`b){Z755G-18(P*m=$v5+n{N06;yj)#>5D|Lk582Qp+o&p`};mur96 z2Kf7}PTwE)#n-uVO_6c@vMxi9dek=dYddRtR4hkC-JgE_8NZK|-mo2n08+@Xa`k&Z zWy0w->nA_tJ)-Mt63>YmHp*-V_FAZv*>=*Nt~NhV&nQ6`7O9}i(Z~DV;xh5wZQW{j z1sf3ejKU(2o{=!pcI;Tz)-5?#7pQbr_x*{RkXLhA_gjQ#RiUl?es4W^sVd$qjFeaB zcMRobRjobZ-H1i;e}7ueJv7~#0J5z`O%$1ovgn`^uQh)g=`3_27F91PZ@cskx@{hd zr*BnuU-1$>`ENYGB1WqsFLyr>{QDo7{xa>QUq!u)BY?mArKfA)=2jqV_`wElUznRivbKW&@29w>9-trDjjl@+Qga<=?MDiIr@?0J! z4A~j9s3%orU3df5b{6{Dodyfge*ztAbcYH5Y<(Zq#bUqt{+Itm27k)>yvv(udO$Dw z?__rWz4r6>Z=;GpY&#k2pTB<{A24Cr`Fn2rwe$Ci>BRZ_YP5v#dWNYT#*b81hc^&5 zLZ|DWuMCde+bR4vTqa4b1Ncw#K}iae)B3*S4>)%2vX0&VD+?+o(>EPQpmp+dtV}Nz z|MT8SH1mPjqO^38=E&Q5&OUc<#2U|ECeO2%U}O1-)!oI?mqs4)?CgYqPVZYn`}0 z<(Iz2dTU{rEd#t7uxl)2LFT;z`b~dD-|hrG87Y1%}$6JzfzIYnGUsJ#UuD)g#e)8;L8j3Q z`nBZ9TF|Fc#qXJDLH}M-XVA_U+M09HAtWx)_fZqf=>B&zDd%IH zXS6eXGVvu4I{WOMGz;ccyx-HoDE?v}iXCZh8C!hz{3$^d@o6$n>4RTLm%f{#O;G;a!Mc>W_uI z2@3bi2QdwfH2)2uL5=E9xZ;?-n}ENsvKILK{naUB$SeG_sB7(E3%f>9{gO2(&tbO2 z37Vr=KpWYtMwYS7oSf2k!q1i6{`jLXQ+($)Io4*!k{BudOw9gtn`|VqiXuqlvbFuM zQ8Q*8wTPCFZc!F}sWw%+1gX`udH5yBs54Q7*1v7;vv!Ak5q~P$`|8{1YK~~jT`AOe zX`7VCzWHr38}+@jtxSL33R|TXYG1qWqP8l%DG_H?FNwx)uENda&2N{R$@*n-Gl}3m zXBywLGWyV0*c-Z`%Xj#9KmXeK*U7(c@$U)#{e*wN;a?~xH!m-L(&YTS$&)ANhQs;c z|3CZ}3Wra#{~WV8ehJ1$dJp%n+;7YJr#ed?M7o_?A;fXe>`(g#R_Pw=_hM1>#i$vX zimJ``qH|&K@Iszq@@h?1FOfM)&XZB+cqn6m{m(qU*W~zRw!1Q)!wx~2u(AwSS!-To zfu@Yd_zq+Ep6~E$A`>yKpUq$GSnFbkVb}h|rX``qFn4G7ehtp^?f&m)LP}=Q z#Y;w}*E$^Je?%eDs~dCsJ}J?F6*Y=*A0jv!!3Cp{k)vwAaACDtD6_;6mW+|Zyq&4H z3YCFmV&ZO1-GkhH*txO)I z=N~nYdNKPha%g{>9KOWd<7dtq&q|JdbuksuEtwtKNw&zhU0fS^iVY(Ir`Jote3z;3 zfUEC)nfm7V^(A_Xds}Elz>s6=mmQguqK|gwVIPrR`(jw`xT&Hl>A_kr>B0z=E;J=>yj7isM9&O4#aqQ4$W& zT<-3TI#?CSVRELw-tN%Jw#NAL!+3ov;LQM~9kkz2`k-l?;=cf;A-v0$dNP#Q8)HSe ze6WXz%SFEVduTg&V5#>uOQiLO*pHW*$|!X;Ju))m_k=@ z*=j~+XhkwILvaH~W+(0IHaN%NT!ZrsRvBDmu-4!bgHeOa46ZP^(%@=?af53Ot~0pG;3A_! zt-&P*qXw55Tw!pf!Bqz12G<%~XRyKGCWAK{++uL6!4`wJ8{BU2PJ=rQ?lQRB;5`QS z8obxwK7(xr_Zw_Cc)(zn!9xZQ8$4$4xWN+!yAAdj^bGbJ956U&a0qzlP-Bj}LOv8- zij_N6lh5r%-U|il>M(ZNkE|Foz+Hcmv|=RneCp}s=HYqoy``3e_It`;{?PW+`}0$g zxlK2}-c)EJur8aMpLe8b{<-3bhH0rKa~T%-^-H}=&$c??*{Vb*TbIL?lW%^Q8Yil6 zdFuDge`ZR0UfB3glUh@6<$>ot`#Wh!5J=Pl`;6F9( zc`$yu@`Z+_4(AWH{-Y3f_&y-)<}G{uFz4(RfpEvXqT+_vr!LP=Eh}I+=P!+VU%+q% zO)TXoq#x{?l$%m@vPj8t~5pOWhM@SPl<%rAT7k`QL7=1^ZR_1tTv z?lpLil|3?JkNw(haF;hy2+kp;;YYLVq%^HO~0$5!D}pC1dYzDsNwO&l12X>Eh)?KMLcKf;x1VD;Vl)LGN* z{+Oc@`%?NPzqB6nOY30+rn0VZ^E6sG5-UQ{&qMW#h5P=Cj5J)j9c$MSkI8|BfK1|z z(_P@eo{Z7sCwzPawQ+TFDo>#g`@E+UAIt~f+cpm0!BgN{(cXx=hhfRIUhwU@!aR(a zb?6Az04DOpb8NO0ZeoKtT+V!{NU1`-uZL_CVca8((`zx`=yK7-7-wzG7y||PA0LZ< zfA|#mC$9^Rg0YgbWx7zsf2uA*D>A4WRk_qm5n*Icgqt2oSzeKQJS`n&h7WsIv|aAE z=rzMB>={E%n}z(9%2VqdrF2Oi5W36$IT$)B^tOf?{85-N31O2CH&s`-y zSrx)Ovi-SL+7V1_?ip!3i)Pf1OdtO3Dxuxm0{Uyh-Vzf+`9VibS4K`{_!;ktWS4V- zh*2m(J!Uf-nSLjQN4-f-ikVA(59RCa-6}=C^!`tkGKwY7pyq=nY@wey^N(i2K$2z2 z1Jh5QcNQ7#Az=LXazw2|MyFLkm)ak1mi}`r`<*@$eA8c}XM7z3)cdeQLglPXm*D6< z5?__IVx#*4TH8P!bOSYc-9SJ(=})@jkNVi+WxJGPy?sTQT}T*Yr0uiMXKmT)2ub#a zsq6g})}Cbs=hImuGrCQi=`rXT>^C@IaM0ioFleLU?`=d?zI!W;T$4kLYKjA~H5^5= z4pNU;=en+%TEzF%^uxzsmuYtu>c`YW`Vsc7fkNJ5k!isYvqGrx%=o%VG2IsGiuAt4 z?n`39Am2tB&rk(n_aS3qbo6c~m-lwpfp;CJ@VjpZxwt@T>M?%T$8Xk)EdrYWBhyQ* zq@uf9_?1{77}`7q)^Wa!!S#2pKfO1d1)|_G+SZcpZ{*p!Ysbppo}f?1$Y10^VnIGM zqPaHVGM|o2Z-KS_-u5rg@^X-{XaaD*FaEU7?yirA$U8E9uMNKwiOnZM4TPTOR7!Uv z8?q+w`liM`dT3;N8;Sb55(@?(K~7_2&4pgAD0(2j?}P4TsBv!RB>PI^;;S~T48@}j zD?{ETw&xdSTjF({HOEHy=#Me{#d@zmsB(01(wz`Z@--;GB)((=1%%d7z^`rShF#$_ z#7~sl@Wy!fQVt@9;wQ)&zlRApYjeWwN+41~jZ;bDT6#N;NGu48Vh!iV_1D`-f6xlh zi$KC$5m4{NjdL7_q^8d1AvImy4%_KZG&NQIU!R&T4p{1a@nUl@x_djn5(~u5p~lEv z`h|3xB~i9OEethI<|l>u6zG#D1slIe+2cGh=N(__^`WDn-AQ0`!f#ZOQ&Uq_CgQ71 zs7+X=)jCeZOHvtsuf7Y<499!++k6z5{i>wA6x>!5GNmV-etCE9L}qr?{?vv z=0$7#PjAKgQE*>%@q#m;yd^GSnVGn;;mjM96R+?gjCT)sR3+bjCozUi0)(K3lK_bY zJ@8Vf;S#s7O!N%>qNMEkf?4@xk3JH7o0jO$e|mn|it7{Iw_cwZy0zg+OI(`h8F;$= z>1Acbzr4Au@Rw`L3R66%7L^s!kMsYlxB2Le7d%~3mWq@${T>vyG<6`=Zsk-K$%;5G z(KpNg>fRrB?|&BRD^h|NII%u*Yh&BfE6a-Y?@{Tc`6lDS1|tS_B#`wf(6wjFi&Yz@ zZ+WqF!{mamJ^W<%BdNm`?OUF?@X3>pRJ2zdedJKq_irA4^0`M+4_6%3chCRMTGmP| zF<5G_%-~Fe;-irnvklHMIM-koyf8AO%AOY)tTnjAVAS9;gDVWKG`Py(YJ+iuYYnb5 z*kEvz!J7?kF}T%Wi^1CsZU?&dL;i4TNm=0;UBF1=>HN-r;TdcoSG@2{>bSnXu)3@$ z&pkbp_vBTh%_E1dTz&lQewH{MO7bqrPrj7|--`#aKjY_(gM1$VsghI|Uy5J& zb>5NnXI7H#hVc5+DoMLB=kki9se>PCJne;_F_Zr+bk)_@fHf-uYx_=vyA19&xX0i< z2KO4g*Wf;bZ3g!nY&UqoV3)x|1`iuN2E1aqkn$U5sHYni@f+5aT1lfEX(C5@kNn&k z_9zYegEg$!8dj8USfSsrh~KcQv-{u*(ax_bBpDRr{h8w$esggs-TtLKiCfJY(4;_sF3$@XC+NGALb2<>w+u1 zs^FCprQUfn^NdZ%BUdu_^!^VM=u->iY`o!3(bm>uq^Vz%^$DSMX6p{UPVP7a)M0-8 zo%sPa(Q}y(ymiRg)Pust%~dl}mLL^*uo!Yguc*J$`vpm8rp}5g=#o3(m3YvwPJK_P zHin!3RIoLlk6Wp5Wcn7cRPyI(R9vrHcMRf0y|mRD7Im*$`%xC_6Oa7m3NOVTG3$3s z374b{&s3|5U3z8Q1BupVWrpy0TJBJ$rO}b6dOt_msRdhodc>!oOF)1>8Ug%dK81d8 zm_kN=3N0qL{*zLOfG$IGH@+>=H6yL9s)FO=M$(7&XEJ2){*y5ol12^O$iJtqufhnBu}4E^yG#yFc9Pl*MdRBnc2vUv!m zfISMfw!;)#<|5zem^>cpZpJduIZcfgF6|0cM1Dct1!P}O>VT_>*R@1 zhHj+q8kt9pB6fpe@-Z{?E3wcKZalXeSUQTudi4x zx^EZV#idz1`W~N0ZwPpF+a0T3Gk>mo4g5Jwo9_~~SFFiH>=L`@;ul9T=g*(ZFej9@ zi7`vaS^FW4=GW6x`OPOTyPAc;nDsC+Bk^MX4QC@YQu(c#f|Et|=cA9Xkvd9dy7KD6 zckO~pl2ZjcC+!C6KT@W@>s@lHVCN*I^1oZYEd1_L3M?L;X#>9eYwDkwhr!_9qbg#r z;PiV0&)*~X&fS6wb^))yeR`MunY!QpoWIllOuEzl%-C*!F1ejQyZ&KPJAYC&p}Y6l z-~7AV_=``;-3Ro$xtks6&PgGjbNJs~`gr#~!~Py1KJV?FllJn&z{f@)qja+MIC)aj z_vv}Z3GHCpY&DLaCVTd z$c451aT3SxztLVU@zUQCI7m2ncUpGcPB}889~zF#7%(_!aL8cD)(-i=w7!M$uW6nP zevKcJYep`o;`168!3U{nO*a*lPWr;@3Bn>1VbhI8Z_qFE;K*&-RP;vuIx|Qas`@f^ z0#DX#=NFO-Yhjd5k9osCz79jPqk=eZWQNQ#E{T0d3AixcvKX1RQeX%|#Y3SyfgJP$ z?|WfU5{H*FAwJ4U7DrlsbLh$Kdwr^=B&ulgfg6mrb-i22tU6^Q^4p(bf5)$*elLG$ z)0AsMse=ph&%7qI;q268loht`69@B~Uec@ezr8w(e^VpNABq%M`kiNuORrZ-&#KS* zpv0g|NdbWz{{6+iqk?bJXE$4skJi6(P$Z^K2j5eZ53hxJ4i z7$hnf2od68UR`9vBwqC8_x;eB&4b4A*YWpD@xx>FxdX>ftzVk`t}3wavD1?F|6?H{ z0~`Gwn3rT=`w~BCUAgWtJ|SDTWyxVsCKOuE&LK3O-C1*ZRKCM~*XmS3eVIBnwB?1L zop%)1gJev{W|{WU;tusy1x73`Z|~<^ogb2_;!#~}+>X<7s>3O^U89Qbl8cKgWbB>} zV_~jw!F=NaN1rJp)1xrq-Le&B4aR_eIAK8eME@db44tYew5Ft$U_%v;UcUVLB)R94 z8`_+PGmW}ERR^;c6Qih}^~v-q``GYoD%O6#IP3a(QyQO2RnKp3zvahy4>!#fOEvze z;J(_)S6o?e-=?D0MW>aOvwd6fbK-HG!_Dl^uRlHYQu&`N*A1@^Uz%v2S^4z(-pZ#N zuDW!~f^J#28cP!kPS``OcLoc#O)v<-vw?<;4M_ z%a^y-9j{-$eECx3%z;uGa{4t_rJFL4%HiloW6#LZ1>gJH+qoSLBZs&0LH;p}g32cf zwpx5&9a3?n{Siv@MWtalZLJw%TaXjRa>OK#3p3kM<^LtA3hu*c@sY+eVUx8>1F&(5>*y3!iI-}|pBu4YKc{5y{eV6qDf61#b9jr<50V%3Lp6Wv9x)$%7bAjSAr zz64m%q9H2Q|5}NGBm^3kmT&H_eD8W(X@+dzS9WcjQaS(N`bkxl9qa#;T67QzQM4vB zgX%&_&PoodJ?mT%xJt{HH7E+UHH-N2EJT(F5gI}-j2u<&oK&<*PoAFU>PdYOoyk*8 z4_*Oo=5|8B_`9jU1g^-e7q%>TM%>a+h`2Ci`gKI#R<7l#cWRjsA7C0hI7x|eMxKIP z&3Dj6@e_3O$Wx+8W5Lxf<1e~h#w$|`w3dh;GEVquve{z|4IdRMpq|z+`}~Ag#M@kw z)N$Mz=EV2Qf=N2brElB=!}Yg(yS`=z$F z4rtAuYE}N$z`)RBg@xi}6jk5ZtR!Jd9C+*Q{Y4X*Y+{7csdXkb+)*%leBHMqoJ)Sw6PMrQOF>^6A9 z;BkY;3?4Rk$Y7Vj0|wg-?l;(GP_s534hHucyvN`kgS!pxGPu*=od&lXyxm}n!L0_j z7`)lwCW8$I#Z@CS#FXp>8;l!VZE%&rl?GQBTxKw8aEZZMgNqDS8Jur$uECw=DHb=l z+TbpOcN*Mo@OFbO2DcjAV(?~zn+!G>TxW2t!Jb~>JYdi>*l)1?dA;9nu+88;gZCQT zYw#X}dkpS2xXa*9gLfL-Zt!-4Ee5w5++y%%gPROC7+hy?t--j#)dp7?TxoEH!DR-c z2A3GDHMq!NmBIN2=Ng=2aJIoNgFORkqi0Z&J)wiaL4!jEhYf~)udn$A_Zkcvj2J95 zSY)u+V2Qy}gJlM18k}Wtw!t|D=Ng=Eu*%>fgS7^i7>pWRW^jeUl?GQCTx~FJaIL|0 z1{(}+GI+DWEe5w5Y%zGd!R-d`G`Q2?E`z%b?lE|e!4pP};|7lzJZ$ig!7hXHg2ije zpd6w{X0#dHXYgKwdkx-WaF4;=26q|UY4A>i+YR1su*Kk3gIf&VY;cpo27~Jit~D4p zxZ2<wFVafZD(!Km93li-#-oU>Bld@1Y^NGFcEg8VqKN7qJ}AL z7{NwdD0=DUhh<_x{X52dnW{Th84glxqZog~*}u?u&D?l?2Wx907I|yWvZY(HW`APy z{!jyY^8UW7*5tP;rsV9i^^LOiEvMmPq7T)3mG9EaeBR_XM1X&3oSN9&6>2=K4XHmu z&?yQySB8q3<4Hn=kmGchgJSsRPQk7_oBjO`E^}G&k!unM7UAEzl^>d6nG!;q_BAA_!=eI)-(!Z!vC7!QM`c0YI95HoC$hxEaD2AxTgM&GLw zai-XzQeVotLVd_xQNw8G=Z!k+_hY_bC+O9t5Y~X~V}ScuujtcP`9%GR=ST2SOKdI- z7u>c)udrBuKU`54ZhA)BKZaqrqNr7;{2JH?1NTZaQh{)U$XIQeja7S;rBGPQhFtV_i(Mk&@{{Kj|_|!2f3VU_@97ahDz(+a&evDgN#F{o9$N2Y~tw5`O3?T$OP<53e>B+oIwZlP24tG44=}7s< z2Oa5G+xJ7V5_5oJN(*lL3Hqs-9EK|x-NU#zBoro=hy=raPY%g|L}j7WNmsTgqXF71zQ%69Vf$i4`UH?%-!)!abAbI&@b9>dyhmxcV5Fg z+%WY8HrmfHnT6t2lKc}1jCLn5G}Jr|H77ZqlH|w?>#U(Zs_~hDNckFQ*Nh*CAI~0$ ze*+qzo*CC!V|`+oq=La;1xrw5WRl8F%OsUc^D+W1i@hh7Nh%kaq;ki|Bo&;NNh%o0 z`F}~#JoJAqDVWboHJ_ITqT}QL`#6xgm|_e2zLZ@>5=}}I`#X%+ihXV3h}f*#6fO-< zO{8gs%XjN!!G9f%1SJWEXY1JuNXbdEsR)nC(Jv*Ia4&<@cf(NNyO zb&IB-VBJH5#5!7>_h8kKG5Dz|x60?f_fLH8Z1zZ5nrQniTPtK``81?IS;2le ziCVh(9Gln&lXtc%Jv$6X@ZT8h`&p~~#sOy?i%B|;w>$I` zZy%+NdY8DjxEJU&3h^Mr=}!-Xfh{`FVhfMFD2*()@4bE{t%h>c`>jhfI=^a&dbf?w z&!q?93Ofx#)7{Ff_zf&V-u##?LZn(e?ww00#-;-zAw>PfqfYJHjx-IGl2&MM;d#FD zQIDSI^8D%5t3%gqyzW!!jU>O*vepl*6iCc5%Sfo++q_B~*>`7l|r@v}_ z?efm|zfPLXGR$eGQWNUeir~6sE-G^ADDD!d+1b>7o_2m+=GzYNgBEg7dhFnI;}iOD zV)?HU=sPOUClGUXB(!;&&mr)}3&&xEzVi?#9WUnF5{}M|%-+l$cdRQ4Ore2|&gNzK zX5ySj3T`>g=-zj=q?SU1bGUej&9ur`q(MQs(VV%E1fuJj6sxyvdGR6c(c^n( z)f^*>Y43Kpm?@Y`W6Crty*zpq#^HFkj_3YJStOdAJ~XbqNXm0C;uJg-E_i5qQ3r?h zA8Q27qPf^5aLXC#)s~@cll$y)K-8$o;)BGErJ+W)*}9Np{2iAS`pOsn~%u zph69AG3q&*&15T+8p=kFIMO}HZP12>WA60Lk6+V!pFYrm%#r#vc&J0j$Eqk|M5y=Es-n(IJX4T(F&reBGb+gvm!v~$GEa1o ziY2-{=V$DoC)J&I(n zS3T+_j4h#Vc4ryul8;-IN~6NH|6EduW$9GBV8ky(*06k~1d33{Qjwb4@Ya`Qsm;USSF2;I(VaB9E&B=R`B&Jg?{z^P zx}ye0=&X{ntz&ZZv(at*jr)?SuX4B1Rn`n_)CFodmM1nJhX`#hhm8nUiEu_~;zsn5 zD_!9tafaVP33l zsrP|)*R zx#o)KRh0`%H#e9sy>q~Q0w!R}a7?hU%APcGPt&V_;BZO7)-K-oH0UQFLqLPrP+klgFw3{G z31#!~aT;P=vCy?!N~Eqg6wA5xRz_z+14op4_fWO1rmZDkLGuuKXEUo0XMI?#6MnMeEBfcvSD55o41iKH?X`Hns?=dMmW_Rfh=XIq8c*n`&yvLGtcd8Y2ciM%Um`d(UR?i;O z{9rnn;`%1BiT%M#O~n|LyjP?8leLT=vJWY06QgDzS+5`)HrLG+d1`u+)$>seJ1u}+ z?=NYlPpE01gap!Gwp+UGf&Q}H^cR#<5ehwjk}kT6Ohzy5V~ZG~CT>KjCg@#H;+fNE z)sxSeUec53K8<(fT}~(I28+%Rb9bos+u9S~+>@7{((kr%UfZYHhZ${#?15}#d(TrX(#1&wJ&?O&n9q&9&XBpF zyYBC&?WFC@DNu7ws&mF$vtq*r#1gWKnNktqm<^6s*7R%MWL0D-;GS*3LEPZ){i~5 zmD0nwe2xN|Zd!E#^>JWD(r)zy!BV7WRF}meyV_h8hy1Q1=tS!XsIxd;S-Y|z(aM`q zW9{9_^%|u%Lx};-{1q>_uc&5IgKc|UpIj1MM}t!J@nF7+8;uxso-Mudd>ZwBOlv>M zi}=|a-VziPv4S{(Tr+%qa#`)zqWYd7M^lFkXGU6QGNZP&$>@iH>!6)_Pk$rXgO;#Y2hB`?S8XwPpC>RgQIR);SygCP(K&M^p`F zgp(4aYFANo-eUT8cwTM1Ah8a$o}|vaaoIB8yy1)iOHxI5;7QI&$Hyycdbso^Sjx8{ za$dED{N;lC>Ym_OSV8OU;8O7Y*yHnJJ!$5?PDQ@jnd$+A$AK9jaQA^ec<-pzk*w0Q#{0Bc#~vh z>cK$l_CC$XNh4oy-=f8zGM!A*K%xVlL}V~0=LW+L;cmmO_g&;GxG(lZ;?L6xn!jYt zsd+rno;R;1L+U>xUS4(Y-N&eY+2-KPM0FsIbU2L~El>tJ#P|X9c|)u2@kGaI^Xf8a zeOze0+A;lCsho}0tynAqv`!1g^=WC@r@@b4_D2a8z1r24M>Y~PO0!~BcK7rxuq93l z^MjeQm<(D%4Q6$zMr^=su{OlO!ga0-1A!Xv>+0R4(`Jn7x#u%^d;%qiSF>VNHLLY2RlkaYS`n%BYjV9O zR!&sg?oqXU%+=PJlh#@$^)A&rjR=$)#Q(tLg4@2qQ`6@D+#I<4wq0tn^hM%oVkkgg z>`zt~(p|Dqvnu7wfNvYoqI|BkrYBjCNfrYqk*CPB)Z4O5*pV3vb;QmJVHm}uuU`e> zjWc9lu)qx%#pl{|NDH|tTe=wq4JYQE(Wq5;XL^^T_YRgGqU9Ftd+0xsy*e4YOeMTp zE5w%(IENG>_eWHTh&|MFazIbb-xCTohmtkzNQZ|>)q$vN&+9TP;FI0hk$4iC4D^aaAhoe3iuxL)vHD?p&GJebw{?WrWSq==QW9BP%~-NBnK{K zPRF$8SX#sEaleQ2wpk7aMvERK&6Ry|6(t_x_{5o%+L?o~D%AUD_*Y~}oGiubFz6q% z<|>WpT~DRcR0V6gwo&8pd+7uP6p@V9TKTL+g>~YlT9%o28M#@o^i#L|28l@K3`l>j>p{KmQ)^X@bGNUCf!fvk_MXG z*5ydvnTt_DeCsN!U6EB;itW8qr~}`STJxG%wdt8G_KY1$#$eAHpFLykd5;+$0TN=K zC!do`5W_E;%D*jH1AB^-V~^)OR#}(Lp05*1uU4IK?3rOUSalS$@p~Mzy^QjqVFRw? z7`oZ~ZkUE1`)0cbSY6#q4V>dd*DM znTtUc0p71&pv}@ZYfh9St9>KlqDpK|fB!ju#MCabMUs|8T5na)+9>;4;(l!=r?uUF z5iLDa&2TELjBE9?HyDS#&NeNHNpdFEBlW|=Imw!191qpRIXnAZP*>GP?VLFy zDHlAdoWb(iMdlz*o+`tb6`|IEv3^?-_EV0{70Q-nksM6Lj%~|r!TQG$RJ;5;cFb&w zcqb^%AVoDkt%luLg(El!xLL0E!_3}3rLN#nCsgZ(x7Am*u>HY7S@Q9s-;@s4kwLDD zEGet3FtSJY`;JYazN()6R(VrsK4m}xuEsITX4#^(}E>qKRJVZ)ns^pcK!!DY!zWfa{0F=YwMo&DJ-IURud&a^6eP*$tp2h?R-q8I4iX$ z-g8F5j&{cWj4kBJYgKN%U2!j3ILiX+Vvr=Pqs)@|Ixe#hzYDrk2Y6C7`<&xd3w!O} zxAvIhRnvhM%E2SzQ~Z|OL}~;<7}`z}-HXdK5PFDb_FL@vexCRG&--|eU)y+nXszzd zjbFF^y3qEVH^)NL-x3SWxHuN-<=?&KvCy5fVxfP&Bo?~+t+CLqx5YxY&yI!WzMXIU z>)_uX-$D5mvCyOZ`|zAtXz4p+p|8Iy7WznKEc9{yh2I+sJ;A?ER>eYP3uB?nt7D<9 z{Oi3m7HV1)3vJ`y7x;H0!urLqLF%~1| z6w{V_7aJ!d>=+DhCWWt=Q4sx|jLzg$=fc_GW)pkhR0UT@%4-YF!-1)7sIq$I`u7^Q zIQJO%CK@TP*AJLxPQ7>j*MdC|91g5BO-OLp%w%*{?;|SSy@<{%ub*w^#6d1-lzoz0 zESP`>)11yt#hUcykUekV?5OuJ9HafU*id-iYIoHP*Fftnbl6)k6y9 znmEOUN+F|~1S^3I{JS~ASqK`xjXBRUp+BD)Tt!yjpHDM%!&%TKF>gxX!Sf6CB-7h_ zrZg__H!+sjnw0sF#b@BQI<(Y#XVz<2VMw#s6gyGZyVDBM%2kc3_nyPd;N&nnDcN$k z?=!|Vg>=Tow;Q44*cQnnR8?%ad@+N-XTPuhOTd2iW@d8nEH05vpT?r=VH&)iW|r%+ zsC9m7@c?&h%;FPwPcu*;pq#$?y{>=Gbg=ptw>|asXtMdeI@?&$r5&l!CQC%*MG`S^oq#68ErTM@3`*5akJynul7plbG*Gwc4b&>njY0@LRqnJGM-2 zoFCrcpQL=B65)ySo(l`M>Y71}-kqTf^}r3bm(4fRa!;yyuDoh`k_+dOHdQ^}Z6aYa zC_k*NtLXf|XVDeD{$19no^7>rTb4|hUT3Nz?d(a_&gG~Qr6d>6wV(47{?GY+9jZKS zHz$sEKLeh4?(wMib1NB*ud`p(+eoe7& zVgJ`+)UFT4hs(Fo_DnAWDcb_J*?RqA4_>oIbYzuH`rJpNCmhwT?h=PLUnwXA{v{iywUUp3KW-m452Y8i@pzk`2_oiy}@Z^X2|fGf;CXcziG3OW)N-% zDqa8Oz%$s!$0_tdhLc*J*o+Sy-qxkg+j>>w)xNiNS=!rrHtMvR8w{9I*%@qMMt=AS z$J|%pZB0LnNTH8l1fw;Sf!H`uH6%-|U(HDynn~QU9o((+x z){8lV5^gLbUHIk;l={|U_3zDR0Z+d*lGt1ll4E;G{w@9>U#s;Psa10k_H;RYAHc|m z)3;P0->E%4&@bAlp=lo6v>F{^r1xS>?cxiC$rB@Wn|@4O^LM{!qEM+c^hM>=9ZKGDQf*5{BfLr6 zI9Kvq77)DL&f5SmEozJ{}sQZrfz|kodsp7cN-Q%CS>bMB84%1wW#ZId*lDdy&YjKWI4&tB?1Un?}BDywdW)KK0A#U^-@<)vw? z%4TWD4+flN%1vQ;4Ss=W;$*RDiphrM*<2zL!U`%$6k%<&R+%&;R=Naoa8?J_+Iu*- zHnn(#F$doE1>awsQz2{eMb%>O149K2}#9Q|Bcb$u$o_WET0dMj-3BGcZn{o?~sZ@!hZ z%FoE|<>2+nqS{^^+me@H1H!|)C_N$lp@o>ZWC6!HhAb`Q32~By zYLR$=R9rAy8|4Ao#zE^+4h}Z=d~xg z?@zRU#@=dR!b!P}XZuU8%O14uWPQ*#&3|?9{l+V{3S(pr`L1@=GaXjk3AJ^JF+C;L zd$q;(94vR9{(KgN#Q(awaO}Ahv`w{0h@e^9`i2t};%ufjQvlpams91(T}}B>jFPwQ zXQ(caXI~)Ov^A69nx)d!gHp5*o|sy%q?1#jhpl78DCyxpGt_ILihUXg{sP%R^34cB12b9leuVmxXca8XDb=taCVLF}e4>+5KoDqZqd|Z96nf z1LicG1I%rBOYc))<}*a^5n-vJw$=@$d`hAxdhd5>%)dwjumtP)t{^Rv8w0t#m&B%8 z1`ZOY6So!XLD*b|kpYu2Zxmtu4UU0r(^_JE+P~9_0XF&injdZaFRQ+UgJf*R`*||b za$sAyr4GNd0TZ9(sdzP{KMwM0d! zgu)QBqdsr-KU)N-OYHLyA9TYgm)_2FOIedMGsPF1@-HrEF1MXru7@ekEoeTEMXxUk z%iH|Pj*Ee3lNy_hl~QytKZpGuj!YIoc0QQ7o}Z#)s+P}FQZ6AqDG|D`$bL$klILK4 zp`XxPWQJ^O2~^;rW*u_2RGFgSKQJ#kRZ+BGb!Hcpji)Q^lz6`S!V_&0IHxO)(=km? zx-xqxaleE_?q=*%Lx~5JAopex9OfaU_0D043ZjSEip*}^wwhz+F#mFtJY#(GQTska zdFI7ttuLuK3hxx`c-Z|)Eu7^>Yp%RHhEfX|J%ukkecq#qXSiT9NK@j{gfnT%TpBJ2 zu{72NRYfgD>ceq;&A`t059nLZljO1@wPu3eqW=6$>>VXAMp{~=BNG#J9}*%z9XaO} z;*yCM@K?}r{bLdbTpb_E^SWgQsn!ZFgv$C|kw#&KF%AxH=uRJ3IBOQB4on%Ao)cugyghWKts5@mqVWhYv58DF^_PNn+N;193 zVPdtOR2(X=;i)$-7@V^S8P#zzKk+aSbD(LhJ^`gM`vly~2rvb*@9pVfG1*>HjxLrL z*+uHf8cgzFv#~OuC*i zp$!hSSv4@~y`S|j>Vwd_kwV^TtA*LbR$*;6RPVjn|E#s-Y;z%Z?+e^}UlRVud=-M) z?@L1DW=%o!%77l|a)nHQ)%tC`VE*2)IgDS#X$mZkG-BT3(t^Z&Y8+|kf@l%(s2i`d z93_bx=^2!Ei8}e4zeOqPi`alkFhfdI<63?Tv#OA5WQ6jK|~#d+GRZTVS^UK>6!1W^)4%DzD$Hw zJ~Rty8gB~-Uu3SZS=3xR5jDLGHN7-7y)@%5@{#lzA8KBUo0}Q5HM5w@DD!kcO?cJf z4EJFS6iTMIt4#&pkKpss;~E%DS4L_r@ztB#>U!*u7^yS!8GZyzeD4y0{U#cLEkk8Y zxErm@xfH|_ggH75snH);*|yx9#R)12s*V}DS2?QM$j~$2Q82D5XtrGql@0TiLDd-n zm5b~U_>gK_SX5aZX=IrT`eVAjJJa>u>8|ficm40aJ*w+57RUxBs#?pE+V;=tIH-Dp z`a@9FP$C?IJwVl>Ddvj;qNTwsUuxfcZDd>Q#CRdBU3H(TeiO6DmvA>U%45P zCPO#seT?bOx{BpHs^v6m{Y+StNFKdEML_q>GPM&umDwaxSvP#^d8VVH0EO=|9kjaG zMIrqLsi~&vMyJYNNCN4%XtT(Osg|_XPkM`zy3Z6V?X)4(c&=3Ef~_0ekoSuz*!pqD ztceF~-qy9m+9p7tA1o8-eHh5VS5khQKoRo9-ZJCKSUzypkPLb-C;IGzV%7&FKWXQzksHn-6QaDZ}-Zvx8w zlS@S$_&wA_!*Ucmfk|rG`-D?|-x}UcYFO>M&6@M|1^QCR`@BYWC}5f;LbZNT#iN{F zseZ}5YF!d~iDM%6V-Y+3&AwECJ0YPH32UiRQ%`5rN_!GB-YA5`jP!~1vpxsd{x>A1 zUbg?}^plSMGPT_5dqgN?rzngaqoCRLQBCRxrw2jxWwboa53g7ybcy{a0M^LAT5|dj z<6lK12ni|LzI?IaSA#H#Upc}genklPz0J+6lNsTUU?`F`xPou=VFd?@{a`{?ai zf>+&l3zjmPYL+sVW?0IGFkdnD*)O^Vw}&dM9MiU>tsGkEy8p08*!q~sjLFBKuW2HX z+^l)WuA%2kUXA=LEcbu9 zufn9<3Sn|g*3%^LK=&xpvfP!aLQ2q~2vNZRf@J@7%UF`hK7@DD1P%|rA;9!SAH{sv z%8MJ`&SrH@LpkuWh8e)C8ZHF>O~dPfpJ_O|Y4fmTORR^! zf<%obwrPzmRa&i}L8X)dE&TlmMaf6%r(0TSE_3w5YMAiY-Ue zmdeIMF<2_GjT&2y#(PtZHq|{%)bun*qf&FYL)=1YTH^`wOIOM|BhqomyTpeziO75wP z{pBFp*##-{G4m`6WWnecUPJCgU6hOF_aIhCX2niMZsR~J;d7q-oHr}hk3@DqPj|H^ z+s~6{#X5YS)2-<=`w^Y`U%MY|uQM};(^c5YBq@W7X56U15aWDh)Xn$!3OTM<^;BVX0!WAMV;{q|GbH|NW; zQoo}30*h2l6QnSs(MRPo`P|?0gz3ljRb=+jAJ0N_&%!==X6z46%pfSU;Wsv6D!fXj z!coQ5td;Pkc@y!NCbtvfY1Q?1LOjju`ef`}C)48S`IgJ9bfQg}9A~w;5`OQ`vt0_V z-qkn-cHx0RT9|_#8L5;)8Lez}!9x65 z@!h#8E3q61fn5AKWZGQJWq6w(Z0f;S(ZZaWb5R}iBBP>5_U1T-9l22&&Vq&2)8^7W zxG45)pOhg6-~{Qdv0IkSIM7qaka#z`+#H4X<6pRSpm6js95OeP6pkJnj%x-CM}Am1 zm{-iQkCC4VT_R3Ux%hKP(Old>Mi0B0Np)L-!Cl8WFE%wrCZ`Otx7trx?iMm>4^DIPS3AbI zI6fP;uz~~|EfYAB1k)zu6fkS#Ok0Qrh;y4t&#A!TsMEt=C}SfeHL@9`nQ6Pws`T{p zHa73fKB6%i2O1)q27PD=jVoH1v2HMv&YjfB9U}85L^dmS5{iV>atO)d99|uOytP=8 z7Fo^y$$VN{FxUNauKYP&Hax>S?$V8971-^;6)~=Upi;vxtw~ny!vxc<*sRkBZS2Ws z(sVFsxB^_8-!V^iddO*$gG--8!Z@9>f;`k|k<^*im|Q8*3zdwWFwZ&_vq7-R-NigS zLaXg!H6K-?vZ1shFd_!7fi^gcvG;&>k#B8%E%s(@%gbO z1rm}8IlS-hz*$7jm}>svE6o7Q(G7Vrb%j!(>KRx z1b?E}ihUhlL=(wcr}hNf{lmmz-bhJku*A|6#_6<=X(}w;V*-JD|LopYfX8%b#eHt5 zvAx6pIek{_*`;1ta`&|+?{Yn8yYQcn$BmsxTVGs$1QkYknawWT$1*dv32Sd`e&X3E z-U1!Zr8cKs8funen#I{|3QcCKu-hP>G!- z%}Vof-a^Ledsb`?V!-hyOIZotRD8Dtao~9%Q7x%3L#hhjr#39Hre8cy&Qzm_G$2ng zNE_M5LJiR~uR47aCGGwrexXQB;rlXY>S)NkDhdWaVarO-Jk%)ju$qjO-}f^fuS#2k zV?&AJLIZNoV|p8RoW`7tQN+)PT;q_ z9}dfSd|ldVyh4%YZ6IQlJv$n8-c(oCNM8?;lO0y5G$D9y)3_Rj4+Cnc8Pgc6iKRJ{ zN`w)c>BQ1Z_#m3@ss!G_9DrealJN+}z;iWSmn zA_PWZ$i%tmpm;4aS_vo5IGrV#XD^EFI)}xNjhw|7?<_s=j;(|caobs9H7vcf>8PF{ z9o9XKH`-oDO6q0!J#k^qq`CORxj!M#@z^HPOk8LqJrLA>r#l`)hd)h>4$`4}X&An< zU3uUpuU&Bm@KXPd!S;&QUFo3gY_A~ff|YJZ$Ff?;Vn%dj&J7N-qej+-AnbI9Auw** z!e#iS;e>a{bUAyg^IOTf72cpuYL!(Sn9Gxe5G2@G_cW}NO(S)K*zU?%=kz8RP0@y90- ztctz3{|ktEk+GfiTJEvwgC*1|vc?Kcu0_D`_|}Z|tmxqZYPv&7br9EKrJgtZ z?c>s059ixbE*~8-)JxH*9YzAv59lJdWvn~E?mAAD7xq2DSU&{E>0;P;(7>C;y-JN1OsRv!uGH%yloWF1jA>{dqFKAU&3qPE|OuY`pBSTXG{` z%v@-@onBoq{)OcjQb<3t$my@Kyn20@q08|jSZQ`s$RO+|X8l|;Wa-J0(oRRF{DYKC zbmpe{7vRv1I(DvWyKsbl#xdlR_VveazpaAfg5+lTOlKC3zR( zq%bsdCSE^}RT)w|sh`w6P(SIfhv+ADJN+b7Ect&Ou%Co4A^oIoUq1=@PCuzr`bpjX zeiDW(od_~p%6LCX-W+K^X=a&iC{Zou{1&F1DHS5ZaUJ|AXGH8aUiYdF1`6u0!;vx?nrdpORNc(w`DES0N-}J*ERhbHG7E^6}}V0~|CK#WtKi zP><=RKYKkUUrN~G>h{ECf-l~mS^!L4qYxQPY{JP3z@Lf%UGpvcoCDtR{x|2cAW0n& z%dMGxOn+7JTl_rgGb5 zeF~!>`>NW$66?}smHOt~-;a|KRmP^L>}02R!ZZ|fyt9OjhccV@lnluc9d|mjl^w^K z_zfS6+opwoI`iW{S=`XE)0v0qCvs_W3_6O-u5&wz(*BJ?^VhZu)9b$eA(}t7&`a!a zd??P8dc$#fA0LiaVk9Ujg84h#2`gI_IA6^i1VnZ~#-tUYg((@ge}jK8**LX{#70Gq zpQFSMIQF~}`&fK44n3;%BdHVbdwK6O26+Fz_1zoHL@G0FkE18hUmJ%m;Cef^lF*Nn z_m#Ag*uTU3rRbytWtU=xHR)YJ$h)y2??!~Y!vs<AF)0W66eZ?G(bha>xM#{TN>+77$DW#0DxN?+#Q%Fwq&ChsGAo zEN?)2*KPUoQEKYy?cBj$l$v6ES?A6wRM)Mua|ijc3*D)MLa1+)se|GUHi`IMfj&$f zRLRsqVF!A72r+HiCXu(S%A0EYhIvUAmu$m#?la@;pmWn+XNW^ir8&I7(`yYmb{-G!_sRq63cTL!@|4m=2sH?IQ@f}Lh|yyG#Fh&6(55d1~QV^n)bGzh+? zV&5p#ZTDX7)@|PWW2Q6x7(ecfWR&hYE+Ih$J5nyqXM-+_5IhoUe|h&eC_v_4Y$-wy z8Tlij-m1wurmFa(JGQ zdJO(gE6wQ2=8to`w;^OuLZFO-p31RLQ-EQiBz6)DR5N1r$9KwKCU?XDxXRXK1n;n zCHm&rrKfh&fE@I`uOXD!nfa)a`vk8&unIFk)4Z7x7`o=eO36Sq`g%I+1 zPtH@${FnR{smts~R+jlCoZ!OQ9}Lj2%>rj!(E?%r#TXf%;L}+5RzCb9)B*W4p}MdY z5V6}3*DZ=xQFU=MJ~_v>?Um8h#rxu~?6r}&%&}rsYsQi(zF8JdDq&WQzx#7QJZPX%y}8uIl2(S{|cm0!uLQd9#61G#Sjc>f&u-V5C=wbz-FD zHek=V{SuiW*(QnEh+vK{?!YCGDBw}|5=eG*viJSE1bu1TZ6wzf-@+cdbG0IVq6{0g zXJHNkHii^#tuEXuX0|UGSDU{*C%>^ee|v4=R!LiYaZU^(r{E>#Y*Bt1r9?IIipHLt z!fh~MWPcs5yDM(YsCWp46bl_gc#mb{ko>LqRW#&6+$dLFXal@GqhhVdd{W=+ebNXN zJlekGVon(3H`W$z7Z}K+TP62w_2+85v^PyQ$~*%D&3-m;Z|y3C0e=w37m`8o_MGBI z$);Onf)s)85g0wttj*twla!dtYLppBn&a=UY?EJp+dg<17H|$l?obvF75MF#`a&t} z`a#92?J1=f9V(`f7_@Bop@Lx=1-=vPLrEgGhd^)y0Y+d3FTd~qMxeVcVZQ6gTY5TH z9iOl_#-M7mcQYU0*}P`CfH!K=u?LFxlVZLzyYts51>PNzi|`wbtjEMi{u4=s5TmY^ z+N^T?ij(>G4`Jj?@p6RxvYox3sVj$9Y+)KB`yeg5m#nf$#DF7@~Jy{}_$Tq_%(R>yzTamY)jI#oWW+|g83WB9|8hiJ(DT(OP~$-OzO zB5`=Rp$i4EFDJiu7b@(OoaXAn26pT6@so6^$gtxJV@poJcrOR5xAMal{OKuZAkkyH zc<&lDwur_S?)Bx$^#T4oBNtv;s|zOBd#GCO#ywPXzixlZ7Mn)vp_y_3FLB~k?w{&_ zTW&~n7o+e*dtKhmJci$IEP~vw(QrGh_JfU0B`N3r23-+!vhX_agTNWf)6abdtsJ)O z7gu)u**RT}?p1!TWW-(>FlXWyl{l4v-FxXp^J-@oR?ZVt_=;Dl6R`sjSE>FE$HaL> zc??}6{2+$-)Gaj^4|5N?6_M`F*a>CaWi_~KaMx=X>BfJ-BnFw3rPH6z-<|h#{;vkH zyI;Hq*X-1y7qOf7r^8jTH@rc1`o z>G_rGpOKKfiiE>2VJ*S#5DaG!emU_2V6M8;@S;bz<9|t zlBlwfdR@=QQ^_}XGd@3aNik9jeJ-xv;L6kd_+J@2>+;25@o>y9;5rT7wc?6m4nRK6 zlbJf3%vnYAs_P^SUH7s`te*{^D}KfQQ%aAu4jjx!B~gejAzA|TGaC2jZ{vOWU6<_7 zZ)`#@7Nz;D!Dv0vX6(=3p0bRWXKpVy@~UtZk1EL2e68Od+_-MQQuviRbH{GC1vR!VFj@iT`HnRK5%MbYbn~w))(+|QLSC? zppz%JO0}XCp6c{p4-DZla(q4-ft5xa>E1W57G+`{jLxf$%mP$a47Ka&!jF{{S7z*# zx48S@i}-?qgsI6Bkc55&QbpLFGwbEsyOAN#%{n!I-}wCIj7r`vX>XUsMises7cKmb z2=Des+?WVRSwD_;benJj4$GNKa6+~dm-6E0M~W-4-p>lPo#kxJVEk4TZxcjEwi7)J z{-Sw%*M6tAmtXb7&l}-v)Zz02=K^hLtI?Y+%&JAb(=3N0*P-I6#Ymu;KfpN~H)*2^ zD%_EiCfBv`OK~&m(E7pVXILO*B_@qUM^!#mv{sLAhxE~J?Fn0((+Te!PAz22sIJm*MYndXJ9{GG0NniseF+PDKl zbFnX*Eg4^i&L83QvmA9sbA>k9 z9viC0ipr|YK|ExZj=|Uv)JFMf<*U;Ef-dl_=@c_`LJZySA()KB5PQ`@`O2FV&ytU@ zhkXtmnaAd*nJ*yBG8^So0LRJSnVC!GEK^z39*YE$u4)q<+8vw6-Rc0f8pCM!2zcITNXO_RkKk*aJXcA-^ zKfy;QP7;iQL2ft_-VP3ZJ0$dNYUtacp>K~0eLF1ltw$&!WJia}9uxZZ*wDAQ3)YfP zuzOtS+v7vuW+cC@Xu`w}@(wFdR8|@5t2wonpXN(5bnOz7&`f~{G9pUxACPQtWoE2f zW)raDtxWj=ZhuBe2(BiZ&A$IvlFh7TVzH=Vfan!f+zWQtqI&2Q_G$=kBa73=Mty~e zw<2_Q?c6OlePJ^)X4%$V%2_t4&(hIVp*+g4eaP`T==t&#dR+M3N}d>zI-xh?F&yPV zouA+56T4nH+A;!adu4ZqQ3cg%ai6Qr;7R4>%vMVMoxtNDONQ{cb&A6ywi%3o zd#LQ5LJ2OHGe{W8ts8-pM%nvHZ7t4`mCk=ulJNg}u1AGvMrADDG2Z*>1494@8tUoiXH_BL=I9zw)s zJerCBawN3l$_X*!jwfjX9RdzR>SgsZUP49zK{j`$oRb6%3ehmu0>1BhHAa2=DE) zYkvcZI-bh~VL2AmhXO}#=VSVX!{uGuPcZbgHe2w}ijx73<<6*i)o!-1_?`32HB5?( zokKshk{j21t+yP4rj4_o?r0JsLo-DH!*kC4{o~ls^TV^@^>Mz8cVWiP&oKN)5^#$b zw*!Hv&3j-mE7pLy8*U0=)LD;J?8V6?9HJq2g5S2yrfC+4nBCwFxYl)Es7l)VmztswqhY&wpJO=lvT|4#1e zOw3)A&UAB^Z6$}H%-P$jqZc`q8(Ku^&m7|S3fxHlt5HPa2JPL)i(iHER_zFwf_pL-Z6If4gJiR_872-uKYWLP_AEK2}C-_bQr> zkqKTluC*K4ELJ>q%-*-K49rf-`22&*?XQg-?827iOqsUj2N_LfV)78z!7M+OLqFcc zn*}d@ow}Fg^k}AG-G-prEw-sxa^*zx!Ho6iqZ5D$MV33;BuV`=PFftN(Zt=@+|G_k z&SG>J|8aE}JwJTO>q*RA7xRMey@NA$^2p&~3x->J^?3PfK|LzI1({{2{aBAhWt%~| zxlypieAQJ9DsFZ46thh+?%u#JHg}@IXLfbkm485YgT5b0cOw=?F7*?VBL=tL=L{SR zKyB416a{paIL@eDH=KVo4YCDhxfF*?DKP9*QeJx3_HzN29eF^K>_`8X>>$BK>#}74 zMe%}>{F-Wi+Tz&@;zix<|5kM8V!gk47w+YBR}Rn#;%qCrr}!}h9M+LZJ#oqplj7&U zFwMgQJNwraWkC)95TyNUXXB3xrIG64yWs45@2YQNmK}XIOtO|^B_PkvxijH6(vEbG zSwCXptGbGB?7lS4P1V)U1rm5Uq`2qlb#v$|k5*%PA6;`yQPvFZ`W`eZqEs845%~!O zDpth?ufi&SOnT@snLCbe-J(C@iF|E?X{_2-ON20qEPuA6Z!X?)J+;%$D$0fh>_;k> zuyi_M5o1zM+4FHV;^sjrY+^y?;$(g~F5QBcth?++@)|k~#!Z-iKxGq?pNK``GYa?Q zJoN%?F?yi7if=emNk4kxiB!8z zM7bHHm718&7G*5Q$)DZWge73T?10lGk}*=txxR?GTqJ5%6@-Ui&*tMBnc(mQCs(kI zk$;STVI_V)k+}hTA^8H+=U8;3JVZoZX3$&g8s8Aya#t=!SU=-ukqbLz&K9c+iGLy! zbXH5GAtE`WlLG_iSjH;mDmjZ>vCGM5Rh*F^C@;p%62)dW#`e#&+V4rixbb#I87)HE zwuKXrGDuclq=#F)f6uAOed*YRmx}>N*7>&JO8cCK8+-yY4fN8Qmg$8|PK0y7#L0Te z1sQi<0U`o>GP&xm{XrOhp}-K9h;za_QwIp_(j3Vg z2c66jh>_pd!Chye!(hSicyiqxQcm3ZrcY+~`h=(Xshxcy9L(O>y5Z`CF}I}8Sk$L2 zyYMseq4g=cHAorU<%6wMa&3V)C*gIE^BQ-^vozTEn61RBWDAU;49L4`wM&okrrN%7*8fDIdnL?vradOg-wTG8KXg%8-F zmGKzrjkF;fS@FVrb-k^DF^xYG`;1ye4fjIKt{;pYUm1`67BWMmE(VTjTNC$kGK=eL zL(L2+EHSBg89@kPWp)|^jJv##Wdd;exUK6?!Pu}y^~WZzd=Zr8az$Fhw9hoYKzV1% z)!LNfi74ldla{skiRiZmqbg&-GVWX;jRjVV+H5Y6K=6{kjLIKKn$c@4`3hPrvdN0m z8ZME&WtYgLo8{IN?N~Cy5A`8Ya89({O;sE-#I~3C--tm@Ggi8h=TRi@4wi z6iMuQM`BAu$IT)*scLRRfDM-s?HNHSA9*Mr3D=XycPem+JiitB9sH&L&>|U~vCmlZ zWt-Z_SvVd)dE&=IT3>h_3$sY~7Wmu>pOGM#g>8neY(Z$2oQMjz8MpJV`8pQrgbs2r zu1&01wJ!zN&|;6$zInBi8Ss2e5y1^Bc8|k8Zf-#8@0$sapPChWY&fgrG;V)k0;bk< zZL#ZRTXtc+?7^@2*2^}X%YGQIt-A`ZSw+-hnl&Y5DSkmE^=y`aVYB?U;89_L0LbTK(V#ib-@2GNnj?Ka2b zU5$MwBQZNoo{4&rS?;Lhc~%4)J0mjgJey^ir(iLf#4Ij+nqGgDtRQqtbA!628~38D z!aYhnA+mH>*KV^N9@Q3i2h>B(s7SwSIQ|Smt z04*{FybUv~pyds-4~9|lO|~FmUXy=y7#mn%|oezVolHZ2M(j!WaJKU_$^f zAQoI$QS{^LIvs%;pWm~T?{UDEXo<0lSbeC?uh_(YU#VYQAeG60F@9PP_tR!RO| zAnEzxL3SjTL3a8vw3FDdle4Lwu{n}xxKmagUWPM|$*?UQ-6Cl|HvyJyJ}-cat*b0A z2bxw)Z1J1D9i;pWe?{rEc~W1_MgL~&F8tn^+y6)X_}^^h21tCgYN?F-Cv4T$p_5=+ zwT#H6Y!#(4cAI+~!EkDDa&l|%{fGvd6<|iUvYzc3_Fnx{=AX&3?-9|k3$BRcVVfaa zK(Gl7<;t!!psyf3+wP3@dys|9Ice;k^rHV=k8&tIh`x+UmdrRbDRhNxPVL4Xx?8&m zTv-ZpLxtlbfGZO!|ER)A&ktWX+Y$@s{{SwBLjkx*8{7!GhnWpqB<(_Vt1najS~4YM zq!WdyA24e6$)4Ylgx#&h2*T}BG-J5#Hk%yWxEV`U^6^Vr zJj$>SaP}RE2Y)X(^!)H}niJt*QG&t$gk1_wwpljj`@-V z&z!<0Uu!8jN|v+P(XKAs4QRXnkjk2oyD{&=9; z{*OdO&kv8PF%gxMj~Im`3A>w*8a-Cn;m<*(laIE+NK!sJ7H8Q2XX}x8@b}6`^!)H} zwk5)``RLeBSTk+&vFQdH_7DE2WA!(&+Gpq0+$opf{E^(T!1-R@v4BZ3%$06S` z#10RlES{`y!VxQMQQ={`jLK7GgaVR%IjP@ITg#n!n5x3n+hN0$-OP^MWBkuKHsPjF z6vM+$cew3Xo77&M8^MgR)LuMS;?zenrDE^pjiNp(KDhU-__e&~EkxZsibV=pX=rsa zC>E-`R#3VLvWcB*nE%8B7-UYw^OKeC)T_hwW(T8xm}4{M z!GG2<4m0M#Pm(d?!y6#vgud+j#^u%@U@nTQ;~NLFt}AYG#>`E~$nHdrWI0xd>r$jX z{HGn^Fq(|QCjmzgc3dcJ!a8D-SKMgp>q5!=UGjeUHBJ40#Uvi8!IUmuaw`ow>dS*X zd50ymzEjqWU{&$@ApV9NK47qEFSWxOTI#t?T{m_;gWz(rG)&+W<#41QQiAyx>&aY8 zL!`KF3Hf1i5TGj;9*)2ptkt<5;@}1=p;e!^`x)4_vEPLQzm867*B`LX@2%d*eol8i z(V0p_Fe*9*9m~@v>?bh-X$U%xH6tt93tZCK>09$3m_2?W=C|gY|G+LQ){U76rz^1t&FwAkE^-GEsB#wq+Pp18nrnY*8S|5|#;e_bW8 zQn8DFrmdXKQh*I=hyi{Ot1zvmnn7`{9G&F<`7f@g@!LH7Mj-@)=Ljm~t<508^C1K# z@l9L(4X7fW{tof&;=O=2S}ChX9$~b2*aT6jXLz8#Uyd;lQalQYNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwNNt4KnW-TC7=Y9 zfD%vwN9sYROn?8m&9SQ@ANJQyI|x@1T+xP4 zUz1|K3Rfhuk2Z(>l0I#x^9xV=wDbN`w1<1zpQ3hZ7PNcoKJ5R5(elJ=3wzARzl!@a ztrr2?34_r*n!YD!n)1*2<@+GNf%1zfe?zi-cg5ax(+rhJVY6wXYJO8i$DoYL^pup8 zif=c494Txuy@=|sT~gC_z~;HIWHFsV>y5O2Y|y$F4bOq_(Z4zVAa=uCXDy6$(#X?r zdEza#`B7hBq7s<-Nr8C?IyNv{XeaA4u(LYBj%%^DP~zLR+s3yQ&#?HWCV6p*=fyaB zF`Hg|KGX}>D|tHcT|j@Fj5dw&?X7{4DjInauDD8Ae3$)^D*!XUzoha?xkzmKQ zSlf#b^na$byCh|NubEK=JvSH~2*yoRk5T=yQ1zBX{p0=mG3cK~{p`;|KVty>{C&Rk z+b8Mw@IHThnqcOQYBxUZa77Dfa1UH=EaK1F5PMf7*}KcLS4Vqgw6`eS-ujjO{rwWe z4CePA^G^xoAhGIv9-L7b|NOT|VS{=7*S<*9EQS{1akA%c7X59czwd!rJp4gdSbR44 zO;01Ar^#LFq}^~uJ8Ad+P`kAQ#^)XcFEgn@L}c@$Ff(71>PZmuPN1yG}*1 zC!mkeMXu+E6cI0?=6~&>%yf~tOJpLEJbw7|Pibc~#s3$awUJSDJ`M3mB#Q$7F3w)Q zZKRP%CY?W)x2<&EE6zqb@1%fRB1-=zHEK(RnccAuY~!+zli6q!O-pu|jaor}#I zKNo@Wy=&3^F>UO)YyAhM;Zq>p-rnlx!JgEq z3{#9@8X62!JT}QL#_uPO2IBY9O4yn_0=9O+m7v7>tJAB$R)5!5e{~`h_ffNynrniZ z)(ri7^xu5`vA;B*T3e|#HK-LS%r<9A$0J>O3gmki^w|-)gLVSrbHZ7M_wmfa0&)~R zXrTwO+X4|vh+PZDoBsOw{uP1v{R-;QQD20i2f_^{j#sbt>$8Kkiu!Y?f6bBTpX}FX z`*0!ktEhj<0Q!M`uJnJ=zQ=iRJog^cO~zH-a7Cju_#9jT82B^TZ>GKZN%kJ{>}{dF z80|4{B->;9jrk$c4fWZR(i3VmBlx$!KD&ZO#(W7z#s!Tq|CBWN`IO(kR`|D*TKlMVPf&~DTk7ixO=I{rP`;P)Hzdis z@n-J0hH^!xLT+ME&J7yd{m;>Uez&iF>He7cel>bj@pNXvI-UmWXt1X&G))o zOo4g6x0=mNbgc#~ zFPqF)<+EE}ocWeTFmKDt_4KlhUQP*mnaE>6|6f3t<`Dk>Ts{ZwJ7~3tRu>OomHg|`neo)vi@1Vnl~fxS zRAc+GLHbv1KL6Xq|C^<^`ZEO+!6P!ed4MuYAzwzob8eqdipH6;xyVe|~Rx z{O`s4K>TTF)JVoZXvm>T|3Chb&wq(O)#g%dTu_bi|El<(9RJTH_%HFNp-nW@bL+tI zKiBWS#2>=ZW~%K9swMW1Rxb{;r}t5_kD60c@7{~_bg0n+mjh!k!&`{lXCJSopQvy+N$5xCyYZgkxOFN^5qvv4Kk z^{_wa|Iasv`(JXGXVXAE4P*{rzzZMSf&QBz-c9k>;Bupo@FcH#c;)G_JnX05h#crW z64ayo50UN(@^@3di1I6vF<^>g{{a8k{8e}K@_Il?^R&nN`;+#=ZPp}j`95-t5$@4K@_BTTpJ%rmdK&Jyz?oqqeDrTr?}@4G2H+5YS{WanGJ2UK!c5N`7n6S#P)E}4L+W1$s;syfCg?3 zH^BUTC3*O>?-kTaJqKFjf?5j}zEF}inTdkJey4j z$q?F{Oq+j3qIuyDI-K;)?veHS`xp4)LmPV)?ja-q&rE{?<;at)$vLK{YSDOwBtf*G9Qpf^x23UVDDQ9U=XJ z88nc7E)0wrz<{U!VI)NVc1Is%Rj{O5`?1*skSSq26=WG^8eMR z!XmeoDqE;>dxA=&u-*Jb+RFpx9C~SNQHOiBvTYYXje?UY_|~_>Dfo#bx+9T=T-^LQo94)D zIvu_I*ntH3bwu**iJ$mIPIuCGl zZX-*g-9EULl~W`OYUUns%A#H`vM!dqDQm=e8l9hE!Hx7$_7C#5oz5K`9=bR;9h9Zi zp3>}ZPY=-3m*7fF^8crQ zvHV>YY`?Bx=*rGR=*9&@NBKp_IBtYwKjuivZ=?LtVe+N^lEcFK{!CCg;o!y1P4s#=Rd-PJ<7)#^lXy~pX0Y;l6Qa==m7WPIQ9hgfMZYII zDW9DS`Fn!$jNk8MekOVS?-w#Z6SDqiCyw~Rn@6?lf90M=VEu1_d~n0G84*8~Vaj8e zh6clwkidaI68o=@UL9zkpDlsaEwuU=TmfDFnb@CM02B{j>f0tm6x* ze~|j;9Etur-}Hr_{vSvE(c_^1?lngc{zv`#^#56CMdwogu_Mu6>1N-R@3d`Fm z!TRb_T3JaeX9TTK{@!4Hbt2`rQ~m=0^_vf@@9z1AFTb!q`bWq|+o}0vP}7=8%ApBpT{zB^a&ke-fhM)CQ4x3=~ zs5Y!)J=|(O?{AW~Arvn`H@bsXb_K1F_X}u&y`05L_hHJ%C|{i<@8$;5Swp$W6CihO zP|i&xwhK=)Jo(MOeAg`VyN}{MI#C_w$Nm6w;C4CYQEpIB&W#l9*W4Mf|0c3gw4Hj-z~zd1@gL=HpBbK=luy41 z^7jPgIleq+E%Q~n8Hs1udg4#f{)Vn6e$V^hwS#s&b%lIzkuZynWe~PqK+LQ@(`n6Wrc?5I-VpTi2LX%Ux!g`R36j}04Jtz!v2s)i+%hU@@F9*okPvXf|_Cc7y0!W;0X1rsDE>~ zKI8u)hjFO)ZX-9$pAAL%F3b{ z<@b?IqFEE6{4!h#JXn6$L!S9!l{`DlpQ>&6{x_as^FzPJ`*=FBblyb|CeVYjpa%)Q zq5p{VD)z-s=2xzu`ev$+3#v0*f5uct*!<4;gmAFn9Zy58G}MEX33x4klF#>HkNjtF z42}NH6g<6pbt}y5hjMiIB$#<5XeP1$yy)wJ{1c&Ol$tjOHEn1Z|Et#c{9}H-f?6?Z zjSFhA-G0ble>0bkq^6VdhakWc@U=4C%;SqWKiS5PM7o zpPS7ndDfe=_};07Yv$OD_|w_&JCA-x;0i;W@Q(TY4S#-QDVa|jQQDXqw83(4o1}O0 zdhb0Yz>LS5wY>)nQ)4GpwF_5y6a?pJo8LoCY`3U~bT0Adr#5(@eG4 z&o<@qOfxI!kK0(Xybq(fcA7J@0&!;kzg%!3|H~8WTf~NJa1o!b9Tw{+p&cES4?7PA z?YO~Wd_RzOKY4%JJLosY5hz75x!J+{SvV7d;Z+}@n&ZpXDs+|;6Bj*+3e{y?r zE#AldXU2PHCJeRGP%B(+9Q;o&{%ro9r1+RAjQ;@Q*e~gv*ZB?#Q_}kGY8tqn21*7n z!0?t}-{MfH~6++PwmqL8+0OE*Wk3El6 z6XxIjG%%Y6)(&96)1MZme>L?hsh>B1KJ)86?60`_lAFs%Qf&v-jt;7Ma*SX9Wsu7( zfZS_v`IFgmC&)if`Nfp~*?{uMpPvo3Uw2b)EA>_c^_ZW38XQl|r~CoRPfe0{^V8>+ zg{1G&$5X$L`aRPF5qA=u_0392p>Ffa3bs?NW+DG}`LW*L59Mgy*I?$6pc(3C zvHya8$$QA6)KB&IXQ;n{`gPR5Ax!^g@R$0vH(UJ&`M2NyOR3*R{WF64I2&oICH$SH z98Ye`y&dB(c4Joi$6=chj(#L>bkua%c?~Xqw)foZ|GtQ-o9)&2WXR zk50h*c)P*~-$jq==~3B09(nw;%^nmr`uDgzJIp?ed)Ob{E#so7ZyqEn^B`Lj#zpk+ zbo$px|I&`Yzf%`k|2{9z4)Ya>XNx%l&#?HNfcJ^rlPK!zulL+H0e|o~hyCOzgiuda1Ac%lHp! z(exQG@L0G3hUX6p!^873%0ps!R@2;Mnkxx67nq+sIT)S`X`qY-P6;;G@L$f7Z~S?91TKwFCLX`lOisH`E7hH!&WqCZB)1;bnF|pLVv>&PhQ# zEWZt+mu@!8v%?I9KFibJSTBW?-#_DhJe}yli{Kt@qX$vA;;~P5CFY++`GNcsp`o!w zFm!XcA?BZ+0rF2_Lb#ZpFQU1HG&dsLoQ$Wh@^hE=k7^B6GgAW5VSj2W>K%_S`%^DL zD%wid>!SlJtFzbDBn%_uN;y5DU_c+3-W^o zl4rTN67>h;J(Kka^4U~A-TcK;{}PfhT2DK>;BuoPPwJoK=%3)%Bj*RG*FwGWpq^{Q z>t9Vnq9^qiuBL&Mufssz00zAN#xY^~CsTh6^-~U~|Jxfw{C{OK^h>DU1eY6T|C8l0 z`yK;+yG^D%x0y6~ZZau+Mi&1SYwo`k=NvkpxQ}nA(|OAM#sgim+g@07BRsNOC$6RE zRrLH4xE{>?ZAnT+$Hzb7GhRAb3UVpfO~KE>0Xm!r!(3wf$hxMu)PN^#`420J}KT~fDk-RsfCo=h6Rq z`kyWSx0~5CgE&u@XOlV2ujR}crci5mF|=NvD>ATCP?_4}kN&QXKp9dH2pSZE_`R@ylkF0NMA_@t(>@;-?o2PyK=M7zV~L??jPh~eGl z3ZF{NTx)|NLLyk0TKIO3K$$ zeqN%yJD$E^K}dO=L9N}?8slhjd=ty*>KA`-4tTWV#7X<>eYF^i$q7{Mqw-(#fEYEnV8-Ax%DEV>o6DG#=0_UzADcalYUkg{%$a-c)EFH+FJPb zBlr;=eg%A64_72I8CcDXvmqTBK_?B=u4iIPf7TxMOJqkj|oX2c_S0QgX3K z?=TB|($g9sY9J8Jx)P$lb3}8c;}kVx@brS)2+=(hEud(Fh_;*KC>q)HE>d`~Pr9ZG zZ=eu?nB`YN)sDNci8R#l_fvtnuPO4>p18Vm;YE+ef?zrqExxA0(l2Ngguwofy zuRQtM1s@_1e4EX;W9-|1!CTJ@PFc^U7t`s*c?n)n(-inLKN{!LWVQD>YL-#+;COtp z>#Gy2H_ruy--bwZD}|qj3o#(?DZ&2peoD1c>JcmDMAnhtJlRX13%}+#v(5Kr!0DEC z2CSS`(&xg;b#W`Ko}wdJr#72LJj3?eY{vW0{WfdlgX>2<{P+U>D54+zAd2v@pF2nF zcbX!3wwVGvy^wMD=9`d>)=}#jtCbkPs_T66%&a>pAEo>~L3!ps`sd~Yd)=BnpWb@9 zKmQTQA{y$Zp(4i+^|K|M9VS!kB+uhlCD>s;KAm<(eG_)l0s&%rR$U(m|NF=W(b*J# z8LoI_g;%y2ho+d}_zIpJADqEw{tn+f%ns~>YBMLJ|BrOR2X7zL4(x+!F+;r%-advM zaxT0ZlXUSCScQ-;WKhZ&lo=8f=7(ML>3_5N8J=PJ;U2sX%@1qkgFinUNAuk@|8B06 zAKJ}4go6FFtL52jE|=$4GXu}s{3>5OtE6#`O+>o!a;dXKu+Ds$f^HqT&^9%iQoan_)D+o|}GsT?PIrp)t22_UwXmz<~w<@6CU} z84S>;V9-|DY4jvYPu@B|kla$F@2KjnR>jBmsYM9?xFrR>Nhz0ICD$H_f~!^UR&*9eK8yH}LfI z+5XI@elPW>2KCAJalbqxb3Wxqd<*g?CCMl3r+VcpKECAjHvo)Ir{=40Iq9D}g6(gM zS-TABh@w}ZE!h3 zmj}ydOzb4D-Z8_C;Q|-!t_ksHA zV#nQ09Bq& zP+>flGrtG!RpKo#*Wi7e>ppmVKl7W6SU1sL+P7hES%N+GCz`(y_kS8=HJ`#`DLgen zSn@}fc^v(3a($HjaOgke?~hY|B=r|l|LA1>Ofv`mvD_BPbB8IQ{~`N-MxY#^-oybd z3SdI$PI+!N8{}DUGWc{0!W`S~{}f3S-9*15a7ld{8y**%#!|O|GAZ*Qa|31k|2Ur- zg*@ZeC{NVKLH$dqKY{vZBI1_Fza18vC!rnPO*;>|cG!OOecl&e?$@}Raxu!SaOK=MC)Vc|o#o5lB=t>dX3dA@ z#a5Gi9!LK~(%;`tISA=~~VGk8=08a$fu(pB9wgK>5=aK>miHJmWRW&yVX5S5Ur)^5cT?3E@45 za@#0(f-A@HF8G`;yb^!P9iW^6a5t#(^z605-&gT9I{F64?RDk6`TBcjhs@7CN`*O8 zsCN{+`T6gJ$*-n-CFM(k@)v~3&!BuG<;S@4h~JyR#(gBk+9`IlBj&}?iyw1W|7ggK z{SM?_gG*${fAK6|drbZ>QLcn?yIeWfAm#Id@()wKj`G!E@|k}59k9Qg@~xD=GFd*| zTz+LdJZ^hCnJUw7gv#k~$^FFYm8DXMVu-b%ktm$-}1tyg} z9o~pMCDDw;KL=)Z)66coSj4~F;mcC2a(7T9Mv=Qjq}BY~FT!5UMv7!Dgvb&{-M2-bkrDN)?J!yBYVI&o5Rd1r%9Gkuyc4$-D;<9=N%3Mx2zitY4sL14aAKWXPM$ z?;O#ygQEWlf#?B>9)QbDUzVS{i+omDe)dx|DKXdgMzSF*8!*>+q8NMw1&2_ePzIS0We0Ng6 zmHM~D_1nzV!SKze+~~!So9fEB$m!q4V(Z_HU$g#|<8S)6g75wQokBZBv@^)H!~Wj6 z{y`0Syg!ohqTI`Hxn9YW{=MiAAM4Hily9T_BSCrQ=PZADVf%PDQEA%sc`r9R6 zwwSH7ha`V>nH0r-_eGV-&gX=O}+TSTDbiPti6Cy(~gP!v4qbpY6||lK&~6S_=6`!sI_@ z(-M+iZ{U4mdatITTpB8I4AnaE`w7Br<9Cujeq(I>ra;=pZvrhWq=l2k0>k_DOXEaj zym2ChHdE+>Q$x!4sgw^1@3DBF7~bcg9&MqaM#m8AlRr)I`N#U?VT$!ptUB4hER#8v z`611u;mPz!;nU4$Y~bfpf9z7|PYu(bg8GH}7fC%GGw1p18|sgw{$lDM9j1RZ+BfQ7 zF70B>%<#8&)PM6!(BDq|XW;VX23sHeM&^gQO+f+ew3=VyZ`Qy6=C4;--#{F!0$7g2r=9Ns6U=f_`!ejW8Y z;9^8MzFLfQC!Yn(7f7EHKK<#lpK8rid&E)m7*YQr z)c53=kFKHIT*^&!K*OsxdHU#Xup31rsig9u83>e5HUW> zocy@R$&d5=`H}ipP(N)2^v8wi-+>x}{@>1;0{*Y|)fh4iIFb5g)c@d=Kz{ak#Nf}n z_!{k_+zYN;!uRL-z3996{xkPG!=IP$#2-)gpT_X%rU&cSyQx=4y%nyWn;sJX=~jOc zp46Ymr(gdH>Nit=T$uhHC>j!f)+5kg&8J`gMCzyB2K^6C4#c1Subpi5%kcE{`Vj6{ zAsx-7-dpR%O&S$}|PQf={@MYDA@ zI~Fb(z~W+QsR9s=BJ9c4aFJ*+L?VT2O`$xuntVR(5Aa+d&RoRFoCBwuA8HQTooovk z9GNlw7Om#e>SVFH&-8P=vz|W^g#HgAz^x$c4VjZMpo&Dcad+JLzC2k|X>DeEHjk&x z9kki=c{`Awu%;U!Z8l@^bi*RsHvR;GXpEx25zz*-)){t{@hRKX%#Ya;+k2Y!_$r;6 z+1BF+plKuXeOgOj4QtEATC1s`$B{OMxlF=PX-*LjwwV*f1Nph1$-bt&X1ldI)w6mr zt7uvs3Vz0%Fkmq*OSLch{79`j(>g}VR`COnr;P_=!L=vC(>0EfXPnDUw z1q#tVsy-^JvOW)g!q)E^kZt1aEi3Xns6BcOv==)bv%QWYvoY5+%5%GE3x@X!sx6?} zI7iJZQ`9eW^cTw$_Xqj)8{qAU)Za?|4^9e+Z!_gNA(Upm`A{If?NEreQFV`~azBif zZ!#(HuNLbWqxf{|+dBC7FqN{_La93FAN8|^ZCA0NrRit^6WxMfR&8 ze6nAK;S9MShT#w0pRh(gxa8{L$4&HOL^=Gp%=*E0ZI0N-eieCQzY3lnZ_Z1cPp!Gs zIw>A9ON8s=*?xJp$HORJMR{{#2#>Z$efG)wB}hegP<~fXUh+TfhnzoYxXqvciSP~@ ziqX(w#}M_~Ajf>%if35AbxwjEmZK@ObJ{xC85IZ+(?6{-5dIS>UPSQ^J{uC>=4!}0 z`Ts|bGuur1vCoR6KXjvYwDOC%6|S?4`YywtZbsnA{zo>SA^T%mS4cic-XF8m`w-Y4 zbH99WGe{L;KAnMRWFXF#KrsK6L5lfrF`i-hZ;myed_U2}3Fevq-u?{1R>1u8a3KrP zezw@(VKU{}Y|`Yp)uiAVwm)WD72?UE`Kx6NSeY{S9NpZu0rU0@rSa-|jZp-2-dU1GL-V*p>QF>?H3O zXkF@$AFGtr)K9w|`X!EjVtSpO8Az`}DvYJVIaY!BF?YW&x~#89QmTYfM>}S{1WR0R zeJ;aipXv2B5-?gv&FA3~J{_h2;SQ^p$0Wpu6Jw83y@~4eR$b;#`v%bONYYEcah(J0*X+rg=#mu{->Gf68h6=8s*t$ zw&CgeH;wK471Tlh-hX2>zVYY|TF z2P^Z3cPrH9Q>~6_Q-l5|whzZ2<4Yg5=VwtfyAGNeR#Vzr_!rhcUz`-)caYxE=~Qop zi=ZTbI^oT{*@ia_PcOY0-knsdr`kP^n#VXXyjLF`2=6Lt4v#?d8mr0l+s5#^`HAUw z1*HloH7?0M`J;pKtbaC_$2SzX-NRmxj2@uMi*R|tNBmpO0>AwAPW?~$ zv3EfJp#*vM|FD9`!I zIgn>M7EurW6$JI)N3ukFssA!u@yNqPeacfm&(Y5f>hGlfm^-0=Pndq1qo3mF_bm*> zcRBSJQvb@JKJ&xH7scnvq`tnC@|!7tMo?bbm)UQ}^G`GQpGf(Al>Zxt9r~BeWE|oZT=J@sL|4Yz{ z9-#iNWPP;XqKElAc_RMQM>c8j+hMbNC+%c^4|Z;G?MVH41H%t}c|spg(dW~x2dRG< z_2*LmD{=h}lk4|K);}p%MY*G0IXBIi{|fweDgXXZ$nT*1%W%1(@}zurP<}tE9WMP{m(K7K!i-<$Y-Q0Vvm!T6qiH@?3HmjuaMPkZ8wkoC9cs4$rdjgEpRUlS&O zKjjxweyu0(+=q8nnEWEjZ=rlqQ2xv?`HLvuO!*N(`Ts-N_rP~G_3;m37$&263`1%t z@`x76P+F5(p7e(>M0-f`JflTw9!<0D%McC8(rB0r(M2+u8qdli8m1Pb?_p{Ytw(=; z@Av24bH3-^eZPLcU#}PEeeZdH-sf{Z=g&R&-21)zUs@FZ4_IGAr1m@PqO|% zER+2;-7bgybt!4RNPE(wY4>D(H}f28{le!@v%zwoi``4hv9!Dn2*2#+A1vv1euQ6~ zk25eCWlXYYGK(g?XoAc9Iq4C8)*O&~l2Sv;K|sbA&wu_NYRP#p;g)xI^`eHE>hK0O z5YFbPyf;0Vr=BF#VP$pe_wK~Qyr&@l5|9{lQ8#Fr?rMyNnd-g&8pV@>GWSs?pE5TB z@kOGUq!iA~B>F0U4Clo5(g~(hB0#;zl)RkYbOI4|RaUv8dVBWt3P9dBq zP+sKd-J4G+<>L#RLt<(cqsAZH#!)(417(Vx-wp%6b1p_0!glrN{8D}vKmlhY|!mnV+q_Y+${{vJ)`ne;o2J{@s7p*;ERD#cM;9VpNt+|@7A)r;fZlKY#I&t%DQ z^HA~;QgXd&0H6J&PSROw8B_O9>AWVe7n|(`feD1Y#KkaMrA*FB3l;*JR_TjORCvWM z9V-XOnZRP7;<-XT%Fhn(0gk+mU)<(8TWYNSL#swwP2f3qF#ZFxs=#!01fd>wyvmQH zL6>J>a5j)PszFxuZ$z3y?vHws*@w)7B23qS{P?#6{2hOSKc4)rfP(XdYH|YnRpb|u z|6-8O`E?sS=W||V*PtFXc$jv}Xm^LUljouryEqVPlPd5_doiF-r zs)h03euboUDu?HF58`#Ou?hC-}Z*#T(`L7^8 z=)CPHMEXCEby>V`?ne7u+VA`$P=ASUd>~$%!E)x1|8bDd@jMod&7TrwBaOCS-GuTZ z>qrL7|6^#L^c?FSFqi%je|W(Ep5$kce^8LmeGcaf zmXn}rB*p%Lr1-rj(rEQb#`#En7|@l!qksu4pbCiXp#S-wA58uYQ?PCcdHzL1hlaPi zhJOA)o6kGuYshaU|3Z&nI2}{J_0k{@@%51gwF%3J4@*t_CJTmy4DQW zTv|_{^)$b=H=lJ2wBJPX%g7(vnct>zt1W%r=k_Ci8TrR_=41Xy3Fse4ewciPfLpbJ zKmNb}vCV2f?qsh9-$|;3<*Tlxzx`&|e75&9Dlm{Wv~TS(%Ieb2GydcWB<5HE>FlX z-`S}}A77_#HyLJLcK=?`Xvwfc)`cbKvg9Ap2L5=(?`Oq}_tEP?ah8$%wvP-miEnR< z&sJPSewh3RgM7|ERbKrnV$`q0R3lKojV2>dzm=Wp*PSjTyZ{#t@VUS+x$&*_;@kOs zkB(36cH;c~WjoZSP|X2~M9Zyz(Lq-I8Lvg8&m;Z80NssOFN@E3O(nmc{BfQ5y3yF( zMv#}f2)wg2kNqSJf1^F$%kkBNjvYpUQ50z3>ej}1k~n|&^@ zez`|m{<3~!NS;S>e;?VaUs|w!J;|>p|DaBM?F9SNUNpCp`XYFnfF!^y-*^4u`f)vZ z!^nGE^W4_p^)Fead;OtLjQ&t$nmsU{Z#Nl%c#ZDVA4buIDRkjnp9}Oi{iHy=dXij6 z@!|6e@OQ3 z>+$y=2z4tky3=ShmPS_xOZV0XJ+1ojDm;W1vuJT@(1QMEqPIo!x1y83dwzzHL!lNR zR+#b350PEopty^B_{bGN498ilX)I^~&Pl)mC;5=ft z_-xX;RD<@WY^$3)UPNE_SM&Grc->5r%lu+O1=EfAfczvaUM&#RV_R!Z8F9?keme$gkv_9x#V|DT=szV-JR zKL)PHm(#M9mS?(_{_FRi9|HX2$WL4h{@%?}0Y86DkpBx<&H(a1jmDoJF^TGHA*f?pg!n#(hX`i5qp5=H6TkG<${A{g#o^8*C z#(dh3r+tC3Pf}GCTwlbi3Z%U6FK4Rf2hQ&kX;x0Np`Muu0LyQJpV7+C=v4mk6l$PQ zoGE{q$^|ED0;4(+3N42=Ju zJ>~iTF#!Gl0I8;T_J5&EFIP_qy+}Q3(WCl*hgi7&zxh_=l2z>ae-XTP9QuE@~1`PJLLiWiR3RKe`qxR*dV_j z`7Puh(}}PB=JND#^3vY`Z`&r%Z&NSkZ^c=sjQMM$=6}lkF!NuFn*S>EGnOF#5uGpZ zhe>nd{V=OJ<#Far^7F{QKEj`;Iv%y+Q3k)pkhhM!{+g#_j(GDS_OXXXE&|d--Dwi{ zCQJ_SnfU6vw*{oJBy9o`Nw!~pFuv=_n?>H+nrD@-nu6`Ui2NGz9}M!@Uz4dHWjvIX zdi{0BT(`e&m2{rkENQ9Qh*VcV&%fuhtaU8wIF?2K9g8Nx=tfSTx4_xCG1y=2{;?Ig zP7!%)HBT2O-^2Tq`7O+U&E%uJj>jWzNqLLNOIQltgPLc@t19Tg9LJQruqv^Bs@c4J091n zlL2*wi|gD6xH%AaS8=0RV3-A_1F?+Xy0MHh^)u5@DkWM3%1a$z2$YvPJ`os4!utZ{ zO^zjirnqW6_(zDhHS6Lw133fUMsXhlvA9_@MU|#YTA=boN?wNer@#!>=URcOg#QpI z?<`~rls6eJ5LixU{w^?|u&2OLgeic=FYo<^amKF^^sAhHoh5$NskWmd{H$fDL@z@= ziR1zAfZRpM_3C|+1N+JRZtEhPkKE_gLFLD9bSRpEoGDaU4#f9Bro~XXzLQFYQF($Y zl~lALT-K=9N`{_MOX2u4 zka4^4W0cOL^qroxgrQ_`g{5C1PqMnX`p7W)6{5c<$!@4}=wD#;&!&DA^^fxFcmCeT zQlCsMWd8U{yV(ZhtfR~to(p{CmqTG%Cu_%8FQ#?eGFX=Zv4XT10t?-#<^8nT#^7EW z^rFFaK>V%n-$3R&0Y~m_NAU$#a0=wM;muH_(9;`0`lHS7pSZRf%Qu@p0uF@ZoVfsrY`b)K1BN@6s^3B6Tjrx96A4T;a)*JQc z`ma)SncOX z`}Op>DfNe)8^iI`nnbOEqQ!XaNVLY2JpVQH-lUh4emD@v( zrVzd&u$7md=KxCzTL8sD_xU&vW!TL^uBl})4bV*Qf1%xc6UbS{a_0gq2z#+%YOG{P zl#-bGK8TY^?C^+8{lptd97f_`6662t{`EVie&Tr~=98F0VzNhM>L(sSVkL>ctphR5 zBQo_9!^n0TN&JMwbdSi?Pkf)mT_i3bG1DV5^%I{UF|8KFd=kfcM5cb?Z6uB&aRiCE z9+9b^IEcgo5_^!C?-7~$iN}&yP2%p)*(30J!eLhTsYf$*Aj9o#TY#JsfCnE`2bRdo>Yb>mF`LPiAbFiMd}74HI`C2lsb>+ z3i$;otB>*!#7&^7eDNThM&*t*GDlFRlrq14_E$3H(PY-qM0)TiK#oJ1Y9Nls ziT2GWmrsif`5BU1NuCLW86etwa6Rn;UM%=It=cr$$U=06}ON9xaW zuJ?Z&Lhl>Y7D=nsk4UvdRyFK<82c33?~?jA!hUdVcK9Zo!uoRXJZmDJhYnPs=0hhE zNM0|$g^`o~A;R}Q5X-#VE{mh*9qLNYs3Ca*$&UiL7i{qupS;+|jdwfJXieDNS28aF zHyYV-l&zrb`9{`T4X{12|A9x8)YTU{u9&;isDVZY_>7`0VHV+LGg56XVSfBn*QpuE z>7dSXAe2|gw{We|$3wY_T`wwLHu{2l0bw@QA{FXl$sRoCgO>dfll}I|E_s~qW?c~; z`A4hoLwCj8u!Rpd7$3&chrV_2;XLudRG#B0hClUc?Ln;7U?;oe@`91!pMUpCiQ(WJ zwLth@4E65Hw`+7DJ_mB9(1|yJj0-aUVHu1o@2f`Git&B zhq9JgdLZKHk#{c?GQ(bh)4az&H5)4>e7vuW$L_Bc3I%fCUEM9P3*qeoW$`ot&{O== zReU=i0aU|q{_S$2i-{bfbfPArGl)8fx)UX@2KpOOI#D9gSfT@n@`-jG08~!&E0IGK zCTb$u02B%>49Zy}A zSCLri5t+&pvOKTMNp@M4D61NDw{Jd2iF!)R0t$ud`176tv2ke>Rs{9^x|Fh(xtwHxE7DWtgW)JjBzmb~0Aj47{D~UaHC1 z5ek)&QDHL@ZN}D6sD_Lg!q8J>4o;!Q?|iIlTm$5^vBr-AEhzVb#xxRLPFu4{%&iCU zpEQngOPeGmF(YtG`{#c49LP)bd6baZpbur|QMN136>_`Lx>E5_)`?3+!^<{TDrUXC*_ZB;26JZ^oHr1=NT4VhdtxIWLF4jdmV3N&JL%D>51!fYSCoqlh zOo5Dx>Mk&m@EC!OEc7sevOm0^Kz3JmEfuOF{DsS^P&~!H6Bx!7Lai5APuL)^itq!0 zMTBn&%%#H1F67w?ftiGl3rr&{78p-B(&m|E4(!;6DV`6J`pmBD_Fg z5#iqj<`VW47~Tn(A~2I@j}Vwfc!0oo!aw6!u zz)Zro1*Q=$78p;sP++(Nuv}n0VMt&V;eP}c5l$7DOE}5p(w*yFF5zgGOL&>fCCm_* zNqCM6sc@RWG@d;{U_4=x!0>N?2MMev+_Se8l~1GDZvx{9!ve$X1m6m*C;Uuc70p%& zEFxScFqiN(ftiFa2uveVRsm||6_x^C+%TRZN zumH%(WQq4jN|YxY-{aVN!qJXe=aHO8^5_Ve{;`tDs!OmsgUGKSzehCwx?O?lCz0Pk z{vRJ$)z|lrmE^OiUh2FzFw+wbP}kK&CVhFZy9TyS{2Hj#cq+ogpD6y#Dv$S{m1OoM z^8tT(gWF0nyL_-||B@@)_B(haxt6}cOb0j5mDS388GTP!{ z{hw^PD2s>XlA(LW9H{TE)#|?iIrFIg1(3PFi>5y{mj1OqeJ)O(G5U{DzmfWP`t%v; zMAftnBO9-RH6k_LmT??Uvo4>)Y@nD)yc1QG&EtJkU-J5pceE`p_mivsNAU{vK2jr2 z@Akg0YyUftGlAyoflTdrf6cCLjSn8m{r(+L!}xHs%_@qASVdK;E9`8uiek3>-s)`0 z)?(x@&N9G*v z7yYqZ2ciwg>7djaAlkQM10g&z{L&BpZ3_8N>~gZZH-cRuY#Fa=Owhl%q-B#f&7+wJ zGgLjnr(Y+~&YN(|`(`p9ai-jdUVAgo?;Vi{=&jekL)slEX)G>}#T^V33NgCs$n&>B zya5*iiHE!V=OOm;hLNxUnkFjxH`L$0r$s*pavCZ6CJ%J9E3~oVqT1SRUTD|b# zJJ7XxIJa(Ocxv!m!^rTB!E<#Z!z1)LJuk(4f4Bsqd=5&gNBJg5IhK@kQg*-NR@wKoy(Yui3lyxAV=#jtOXpuRyr5JKok~2x({H$*Vl_{Xy~yLv~26Ao(eeJUU2z+>lF1ZXo$KAqQH zme&1ZSbz7c6%Kg_bfU5DM(Z|O?_3()^GcsJd+qmRisxSeImutb`rR1TH+Qmr-dI0P z>p`@>H->duC+msE`WjkKq4kA4SI9TRtQnk#GK05bJ%o!R9|fvY`(m!wQ)w+2sLfGE z@enFjQt_9!7>myBP);o^Ady^8ro>`3kkd%(S9wlfuv$>W>&!}9kE}V&Ds1+<%0qFr zzsP&p=3>Kax!C;8&Ne%F%*IY0pJ}R&cKYWDnClH0xZWg_@ue_y2pA;z*OgvLCF1Gn zBzpSOo16*C)LoSvf?N%#ZvdmmnTwF=K4tGiD-Kj#<;6fw6_v|Gd6wFB?lvgP9{C;p ztajlUICZZv{WndUX?i71-EZ_P7wZE0wJ%D>cbZte9awmTLX|vwoUNJXYMyE|PoQR8 z6EydsCMp_QXe#h^E+Ce?TN;8QCB$ zB3l4cY_+~{9BQu^wS`pc`xVp*d9E;w;;g{&5P@q{r$Gf<>ecE*DTELI)I=#n2J<0y zA;3lx> zrv;SB0|HtOUK!c&2qde-w0ub$nco~3Ge zo8A6yi~aeUw%Z2elzt7n&w&`sjhIRKaf}CG=S@D-*PDy=6gk_$NZceahwx?ExZhJ7 zA!p^W(c^Nqh;{BSXLAY95SU4LvcP!4e+pN=yLBy~sVKhyhl*wyhcoDK4IMrSXhGtq z?$bY}k@=fz<8CAl`Ub?EHLO{g8r+*+%HsURpIJFsh0hl#!|^ddQ?hpvX@s#G;*~&7 z5e2J6uvFbhQ*^1TC2dguu7ASJX;57soX?nHKRDvu<395^>@2lSVdm!5VY2QNoW24%u zw6kHs!jsiC^CK61@q1S_jFUFPcmt4WpE;WY^;<{YSn}Qyp6&sno2ZgE1o)NY&m#YU zAYbKX25K;sq)=jZrkNxUfKTg;C)s@-dXFWwOjV3i(9f~giybKAqh6^aWjI#GfWTWjT_jFzF z{IL5l$FKwy-sjpoVXx4ob%(lE}`a8b=XY+W; zY(=h8SX>_w>*rR95?kN6_I{Xf~Z@54&d3Zj<|Azt2C<-UYH7v`G}GqQGzw zh}9qJ)wb`Y!M*pp4r%mSIYtMWqdpM6zA55j5B~11(gptpyhXBvzq({@?X{bdNtAJQ-6`+KSO>8`7<@Y zLG`ow4d72T{M*Ry{sZ_UBK!k`{2_*a0r}bFpP>0oDt@K4zG#AeH?pRawUZr0K2U7k zX6(ZKfNV|8$0`PM3XkPl?!NiNLm6T-?QApUFk4=X%CWP}z7(_di%|n@hItM`2A+eY z^FAfTW~AzO(8$>6?QQ)JD;0C`C~ig$DtIodCG$})Ag6*=J&fo0ASgkt8U`@ zb~-(d=Uk_cfKBwLfxI>Uty!8X4^mcB@eocIsdbXA3#1PyFwqov01F)ZBMJ;JK!Jt4 zN3=r2LxiSIh1^oyY!ezDqLd0X+0Hf{g4xm`M%dXVF3d(;a*(LrHp6rXGSDI9KKu}2 z=!$T&0TmfSr=__s0CJ|YA}8=%l;<&@U}aDx9u5p4Gl=0dgv+(#UgBUd+5l ztfRbJaf45mYo7&1b}nVtQFfZh2H$6FP~Cmj4yU{tm-vLyQkM~3v}U2spe2E z&8LR-L(KKl2Tcr8jP+!NdQP&n*HbVA5r+-W=s2tca@ttpTR_@-#sl9w-OV`Qk66oCAc7z zPO*0VU)J|^$qv+a%RF7*Rv@RIMXdz#*O&gWz7?LoX`a8SL4Tj6NE=1&(;}>Ixo01@ zmvL%TMV@^@(Ed8wXZ#HNi?n_0`fmF2FYCKPvIF(q^R%w-b|9ycMSTersc-D^?)dBS zu83CNL#Di0EU$^>-Rvt*j|aw=@nC%7z4*ih<8vWJc2VR+EkgTz@?hWM+2?xpIYIlq zPr*LB4fdOWq|&kLd*2s-8Q&WuI}qRbkag#gIV@@ki@Hk}CFRjy`bU2oJ%7h~{&GC| z#?J_fG*RR%EfU+`wd?-U-`6EO;O~|vwZE-E&VXM~)JmX8f1tngkN(zr{$_gqW(56x zmLfS6xlfDG-tp{Hz5ZY2*;fSZucQ4E+FzvYW7l`n=YLt>6_OpO@1Am9-|aw7@)i{J zC6HZT{C)Kf)OYYYYhGR_^KuT(N0t`6-C9hQVN@yeR6>`hsB-Z5U9mDrn^l^mbt+ZT zB7EN;`h|S9D@C}kX7LcOI&ej&cI;q5?t5H61DCj)?Ja;@3pO!z7n-XD%9FDdBzmf5 z=|y@wi7DBH7BrmJ#o1uOAe(d#iy}BM7e19=MFP7{;eP%%2txq0H%w>tAeI>F!W5s`bZ{4d8+n4R%7^D52 zPW3sO>ZMfgc*I{H>X&=^Wu89Um->lFqqRT#U!eV=>NHWmJfQyQrd~VmotuC2ymBlCYvK{uRmVNrK(fv=wdB6XA9)^87 z?OT9!{mWz67j&{;PWwr;udwVpV%WEIvY$cw3fkvb_G5pG?tcc(`~4qC`*l)(%if7$ zU(v~a&qJ_}|DE**()CZ?9=-fHocEW%oc04~Ut#R=_b#_^{4}c!N$XWQ(%`-W*I=nQ zAJOBs#boLgP%qo)#jCNRQ>)s4p>DMbOS(?AAT8ngPtr=&DCf&mJ&*Os;aU*NNmQ<+ z@*g342Jn9mdU*-PmuH#90rD-#PU0Uhd*3xzaDhiZ&0)Bt44f=C0 z4c5`%I@iGG56?NhI*@yjCnx@-#qg)1lRw8(Acq2Ro`Bz4WqB`kq07WfVyC1pNMNm>uwEHv;a2X|NF}*xo$n zWc-QT58PZgKJ_vD;e6-!XFdh;C{W-D`286k^yfAjRM23AYv79y&p92;J)#)q_DYoJ^#f^GN5fRlFm!n@RsRFm2`Q>p zQoKBdl=Z5S6o3C((q>h`G|KaaBAk!(=W=wAFAGslnB_P?cEIHR1bqHIgKW{o-*b>O ztTLGDe!yos4^w8sUdY^`W$16R*r%vONpbxb`*sy4DeiY$>3_3oXBx%dCY<;C+k*ua zv7mTekmof0tpZ>E{(|V@?=LXbesYztc^1rf(fnf|ySg&p;s5vp!19W~XZsXLiuzL*?K4Hvu*zi`rG2t-K2i?b zXFk-OdX`h*l_TvBp0vNDXn*Rl{Ut^FGmWC(zA30bkoqb6LO<2guLn=YzoZ!dlCD$j z3wgd(g^`vFZnXMWqx7#bpFW=qZ@3ToQ>b4H#DPHnb3OeWPk*eZU*_o-#nA85Nq+|Q z>!_dO=|_9!eBd%(U!y#8-tw+};bp`2hKzgRJ(<#J`$2ktPg=%t@IH+9FN=IKybt@a zK+7}(Iio1E90=Fjz&9-ToO7bjp8fs>V?U4f1+<^RbA|lXk_6s;w}yv!T3N4777Z`k zY}Yee-n8gqXPcK$n2ncE_{dXz_l|6*xccU03m)pXZ)$CZdD(&tyllaDQq+8#VcxzW zV`Iquf#!6Zk)hwuA>;i}h_C6Wt0Ih33gY784xe=t{(s-|F-s7dH%AmtM+TysIa9aJKp>}*(M{z!%u(OG9a%fcTIg6(lDmMidxlGKf|L$q zID<&}nv^JSJru$uY7d+w8F~(54}6&tvh-U(*?h|0&vO{y16gvEcT{@#RM-J;GAdV7 zrJ5=i@LZ>_R#vI7V~+y9T+-86A4lsZTJOCV)`k4|z197AC=bgkMZ?QB-H+Mme$}dw z*?g~PI)L}?&K&~ft*x5{CbA1%El_?Gv?-2172>yH)L=Qggz!8-?T6{eEC?OBl!RkI zz`mgCsp-f(L`R-P#*U>H!*paa(2<9c@rBJW9hr=c_Z`cgek;!;J6p~+eJrZH~ zIx;zKM-Bt2TZE>2Xc11K0bZD{JHb34XBQh_2G2!l{8McKc|j@HSYJ!)iv3}oA=bek ztJbTZ-?AHj8OlD*Sf|puf!6!RuzsbJb=y7K^Y4J14qDgoToli5_gS;sE;iPcwC;WY ztRIMBeO4#yDaQI{T4&Qb6UbhGasMgv8(zooJP)Z^Kd|^SX*P>yM`$zhJLXxuX7COq zuZBEzw_hIDw`LXon%Bq9`^SwqAGy9$XgSQCRti;kLM4U#Qj#^qcql{cqBpIU(my!8 z7iR8k@o!2c9tf!`Jt_Bk72~zVMzw8;i~_!9XuSc*Lk!s(^_gVre(CK39%hQ`!r}(8 zxF4snb%U>D)u~5(0(GbcD!iIxncY4Fa;8w=d7dk5z|Rn++TNE%aJVNFk|96D_0(lx za)~hTC8aqWji-=-p9${*erefnm^Nw&p9RznT+Ht$!h_3<2N%(UCG_BAAU+6x_&x9o z=U@z4p70Q!$n5kUb}U&A%eeQ81t@->P{42@ICaa&Yn(+ryBCIT~HUCb^ zbW)N?3AM8hudIr&ia8a7co2zIB>p^=j&mBbIxG*-VI5WWx^yr%+guZPhz?e+?y$4X zOwMfmUhD{)VP^oVhgiC{I~rQ7>6Ag6(0TLQ#+qT=XCaI?xlewCE;gFtzN zW`%t3)`~0-5!ps{uIrGSZ6eD<8M@tkj&MXn`yW)4kvEj3OkydgODXZX6n9+l5dA$L ziCSGFv2huulk*UroLy19Y%@$Nl7Uw2OU8r3&|%>k58ixqr}pMuAg7AnJi~LH-j1zT znIaH)E0%A|p6OGbfWn}Bt5Lq5%FR^11c(7Y^QcI`i@lL?K3VYxgLRz8QY#`X`E^Dz zDSb)#UtVCkkNQ67+*hrEFIVI*Vdnp#&_KAnUe!gdq-_@G;mg}Xv5AoUazVZQMKb`giXn(C|-}&|41AX?q&|hlo z2hcv3_Q$*SF}?@hpgzC`8rGE@7uNNXhZuBt|5dX2`@sY()vfQ7zxJem<4wO?v*KSm z1`d!@Ngtj9@-;`y_i^$5lj{$g*Ybyl@CWZdNwyw#xj2n_4>x5FVwp`Wvxl!t_|9KE z6fNYIa=j`*8m&o}RNGyGzZd=O4qY7uO}2d6MbTApBIeSJc?ydY=(&8 z9*zEmpR;b$+F+4K-X!uy3r`oT8_c}l%LbG6)V7!ZqCKnCXOgYsH^q(LVbFH_Z5NhT z!Sa5b!pX%^SG%=Wib3Xj^8UwpHz(JOe1Rzlsk%*|tfy`eC?6sj16Wd6g-eBX_2Z#zGxbNV z31~45*#5?aTj;_px-blAL8kXr2d2hKu7ekm*iPcfB#!rpO#Q@U5>pNX@qd#+oZ=Cg z`iWbS?PQX;7DyUoLAl3f`k{BUd!ZcZ80u#C9;YD4~zIwpIDtj4Y#?LDgKUo&>}jfHT?yzs5e!kdGvJ z8Ogs-BDq@a6C}4I!wvS2Ku(zCdXKzrYe4x!Lw=j&q(qRP7IKwZ6eK@k$fYD_kUZHV z-%WDVy9drbhb%&0;Ws|^1qgPy3ythKl$}o5ZX(-^4-#!fEtjZIUWnLbF@6Udqc|GX z(CE8c-S}xm5idvfgJ#as_gDt7`-%5?&!N536W3L|_wS z)Bu4?2+so4WtpWZ%i>KT35g&?dg~;dg7?GVsoO>u13ByHeRt3MKJ;GC_}$&!onrW1 z${I3$dCH7IX2oN_PWz0My@~Q@+fz#$W^PJ zF)Fbft1crXmDoK|SK>Dyr-~|H0C6(i^i$_btTy})$zMnQ^E`*$?GM`*ERW zf%09awF2cwq$>p`aNc?s(6mgGJ4QNg)vBvV|^*D(~g35 z8qcA~E+|rhpRbxK#O3=wD93{r^$Ctxkrh0vmlnK~?`zaLZi3n*s(lSawYOFpwPK&z zbWbfWsJ4WbvMhUvYBf|V1>!1Vh)w2J)oeq)m*i%WuLHt*hR<-SHd(RebKx;$p=%Bi0W0A^EEMSt}|ms%-*H)4RcR4Up$ggg-sVUq=2U z^5+|VeuO_P$S)PA zS_?$ylGH@fG$C0YNuNznO>^i^y=p`n?S8cj>Khphya~GmN^XbiPxYi@pnhyn9sbAs zJ?v}GP%`H4VIP%jJ%@Yuk85twh1LN%nJn}Lph$(Ht@nqBRFw7p8Fm@+3)$OD0XMRM z=`3KdT|l(pY@TNahtGg|7?~8xR8eNn_0pc((QWn~mDeWU3t4j=>SMRmFCaPVNdHvm zQSbMs`pVT$NqeL+6-AK+Md1sE@SR4=f{i;u9`?q=I`z#wkcS>nk>lqsUQ$apQ z&tmc&^2;>e-R~Imv^QRRsjo-!+K8b$KhuD&Y{{as$C2uHVNu~ zPZ_1Mh|-%rr7y{`m5!!T#<5W9V2elDr&tJ+$N*y>`i@MQ(VKvrNwj_kh!>MP?E-i) zdDDeNioD&Z+(eZIstgg81hubSBx8LsDIKJAr&)}BzgqP% z_U~{9Rj#hjj!cxr-hkeHt*+#6Ku)g|$bA9CN|wQp+tfu!O*FX%uQx`^X_P~w3Nflz zSCbsWmkM3!IO% zCRbZYM&)3tG*YGQ8u$9Vh$_0fa6f1>GTf&B7RcE}^7}wCUOKN-CUz?A1tTzz0%^xV zV1@`p>w7(Y_MA^{HumFbKZ^DPW7=-!6kQ%(A(JXcsNPc=I$`k>yGhG4$cBb>~vMW&b zJ;vw`8YLVLqknithml;!9Wv{7oQIe|t5o|F(wW?B<022?Vv$;FXPYNG%*KBB%|0Wo^}Q%?6#4#B~Od_KvQBp>IIn`EtmpTjV9Uyk}n zpln{gBX9tH&)9%168DSQm2y^|I6es&>knn{398Bm!3?fqRu>K}xk`Kg5|C3*hf0Cy z{Sb2cY;p`15>p zY$Fy=m|b{Eo+v~Z*itDY<2^FGw`gADk}EWbr(fWzOE*U{&Y(iykJA-N_;$`$0DnV!P>TIhD=uW($-Xu)zYm@a%a4TUhLw0{L-W)g7>;a2cT0 z(|IV{AO|2f5^>f94qj{=Os9i2bntKDV1xSNF*o9?B`s1PF%9t{ih4(2CgH0B(+DdC z#uGj%Fifu=63Fc!b-%z0!hC@RgtrMCPk4hs#$JsPm_RrT&_uSDhyqi_T`Z&5i6~>Nl+mD$q$vV%h)8hJsNw|js;D0LdMoP0NzCdlJe2OT z{t>%E3?3?Uq$%tm7FNK*ejd#VwWxlSi}Hid6L8){CX076t6||Z)Am&$Tn`zKi6~Fk zP5#X9BILQ(lV`|}KMDMqF5kP~31jsb?NXRxyDpDvuQpmEsWpIFXS-Tl^M>#{yr(Iq zXU8zS>`7)WnFmFfWOKdS`FX^mGR7;){mDa;p_Tc3Y4w%5W*-7M^H|37K(09c&rUoB zX2HsF+P}~z#|!TaBbP_HM#_!0<=}5ycK8jP3jDpaLFDfuzXuRk{r_r0BWho{d_Iws zw39*E4+x!o7kbXS53^rYsW&7oQZF-g=i&;1^5RjCdw$2+?HCHGSk5*Q&IBwePc4>q|1jZ8%poE@jr^6I}P8+3TdOMIaj2@2!;;Y387GJu< zFhjnWlCe9OcHO(fuI(Qz1dl6d=l<=Cc_LAy=Ey0T zFdwwl`nYNBjfK)J*Z5f`OR zU&h&zLQYXuoAMBC%BfHlgMf>w%P{jN4>5n1l95XWt}evmrH~B5kpfc*FBKR^cs`)1 zsdquhzd}cIGLX~3nq~ue-&BvMHMXYXBrR1PrIrNOG-%#)jKt}bs6GV}hf)I5Q$6@> z=2}T-DTk@M0(?baUxw#7fpUqS3uwK^=w4|UEySdmmADH8GcW2D(CZ_0EvkT=M!HZ8 zB%j--q8^*G;BTQJ-$U}C9w1-CbG$W0loPnPxv35d*#;GFmnMT?h_Swa)>CMG0uXtj&PpNp7?bH1@l*871h>!E)2M|; zFVQH}w+%75fp(!J!ZDU(Z z5tVB7Yq6D$<-NPaX14rMvd`^ov$kh8-=apMUb7ik+eZYpaVA`0I`vOCrOL8g6(}dih`jQ;w#x=z*Rj#F18s245!FFRnCcuwK(6~Rl5K68WPg1?tsZhTss7`%(AE;?Yq#jw^-I+k6 zu{65WXH*j9`}3Qz{=xdC!kRhU@6WH13_b5~5FZLL*Q@!g{=P{pm>Ff``7OgaeDVE zsBZ0_r+E?0XZy^f?kD$zUZnHL{*MtFPoX6g8Yn_~^UUlgbA2Q8<)%Wa#C*SRg=F*n zzV7JL*86>H@9=N@>b>UgvUFvdfSh*v@D7lUgqud|FJs)II`@}>lA-$}BX+MT!eP(By>jSgp`|xi_ww~U(G=n!=hw3W- z0OaJ*n^izom34rF@yGX%L~*e9J^p*9cu|efAam4NJ`Z?hf(N%54{oFf^XS1~+XK#D zJMOnSH9KoRa_h-G#^%!P;2VAHze`~s>2K8#_#;zSybZ|NPN_9OwAX+C^>%+ZasU1+ z*{Qw2t`N42Cp9MM-(1p$kv7evnTUoi@2-;Pv|&6Yt3*lh`)8!AXPl(?{qtkIQg!}4 zN(;{W>v0APn!h6bfJJuW;x7;;7m81^dfNSh*A3G9agkO7nSc z@GPs=voJ3?YN%KWt-|TTOxR#oo%YeZ2hyDWZQ{i zZ($yPI48n0d1ctmdyHL_OsvlGL%ci{m^;A^s?bQ9#s9s0aI;vg-#C7H_ zS=Y=_+nKr&ic6QMt-;%v{~|ZiSG-^zXiC_9F-nNc{B}aGBbGv}ACp!Wx(R z1i2-z5Wzcf-U!Nz%1dDBR{kZbC7uPfQcrD&r*>fswVs{SZZ>M;sWyyi1A%xw#~!uwIUfWkjySUomc$Di$!VaHzy6L0u)K8{ zm{z*7IiBYs_My_rXt^5;8ez>MeVyJzwDl>DumS`J1iR8RPZK>plOjRV1q zLGDtbf*d>G{Ufv*_vgzr)ib=_wjw=KYbH z$({URhTMhZ7LtD)h^iL0!6_-zjVlik`4m>GXqwg8i+SUYV(Vxnm%Vp@oP@KXG!IDH zKUnNsLk^LgPV((Qm?xv%On0*j6u(CsfngMwK!GzvfEU#A|Dc*NpN8Cx+(^{CId*>| z_~!)>ET`bNKvBon?EDzxYqDhM@g?`a&~U@Dkh%@jEu^mg7j69ZjHQ2=PhakTjs7Ln zkLwHlQ~dgM*8Jf9d5Be0tp=3e;2dCNb`5|`FUo8HVtaJ9pWVrRCAi-Br~O#k&*!-) z)Pyt^$j)-z~5i`F?nj1jMsna#hN0hv__gE6Glkk+53yu}}-PO@2Cm7hgcGg(JQ zSi8Qlw8%PytoU=l`sIA1^<|Lt1M-}{WUT_yjVJy!s<9>3uwsRllAS~LlR$j=;HC#T z1y-otGb7YuPJduO2#y=PnY5cjyX$G^{<7dSF)dOnY|{+abht4cMALej_5g}F$nj7_ z%R=sITeAocWfr*wxsma}rv&in_w%$*KLa_tD7>2I0-qD&4srgSc6Z|K<5FY&3a!)5 zh4sTgaI5q9ZdCnz0uBW3G6It*Fp2`hMIhRE*^w7xJZ_K-dpsUzgpZ_f5ru#6Zv`xx z{@hslGkp3SkMBXtZOb=+oMqI1+@~MoU8n|imWajJ9;i@VT_><#ljPs8IWfn7Bd+&r z{%%}JqbnVBoBqXG#C)G}g=Bkm(J|Z8PgiFUufVz*FmSs-!R%(7L4Z5SP>e7;x$wamHhq#S9r( z%*aLeNHRhpUWb))4_7c%RKC|zHaAbS!_89zx!+(n4^iN$`&-O&4<6#VM>QF5lYvLR z#IFE*f2{gBK(h+!3qD$75$76IY+I#8*^5arTa3RH$w7}fh?nvL6tJ9oFpm@>RLJ#<#$Av+V042;=9nc zj#4Hb)h}p}Kb7zDFKu(xN+z-SZ zkAXDB{Yt;9vCJD>U|pySBx)z%e5A5`PI!$``v=uV^@rLyKnvm;bK>rA*|U&o#AFvt zP9w2^!~_yEJt9*-aUT+^N&LPqd=C8dmlu+Uu;&-C;Y`1pOj-7Q2;?-;`gxu!WPh?Q zH$0SW=`7Lkvdwk?v#}j8N1bkGn;y+<^k{Y`b&$<4J(>*k=uu>Bo-BQyr|xetZ|U(6 zZ|U_V<0G44zM?_KM(;hog*L-{MT3m@y%!vl^`&|)={<-jd$a9salHWr9IN{GxA6b0ahZ<$bStKW%4{|RdSF6pFIIQsghoq%y zJyPvYvA5-sWb6;7eJ1VO&cgV}@x}+!NX>mbbPa3l@KEN1!;x!zDy9M4$})vzu&_E7 zb`sEnNnTBu8Y>yA-AGIw0OHO*Am)2SrheiUWIMx1Y$S1(M`Y?JenetEiHk@q^N39S z#CarEk~o9Jc^;9epZISQ8%ey9#43--)KAPJaTkfbNL=C(nfi$*l9+Y@i2IRP>k*my zi5+KxIEuutfn@*Z7WSxW6_T`66(ZF=N-jblf#|mQyEHDN@iU(BSkE}yGtLYe7a8Lj zG;W}A4iLMT+}xz8B--#kCsQ4y;Uu-^pK|uT50+s5QSCg^!;ZH$eW;c=5Ncgn0?pIZ zC$0^Z-q&!FT4LL7hwb(=U^|SqUji`(kAT7$JSb_Yx{s;*>cm|FhoL{JTLtza%n>L% zAy*2N#Y>jJI?hrT3aljTD{vO!serl~#o6xEbu)Z$!#kdSO`%@{#ji@WGnanh?_Wz= zpcGPL&wXUnriZalp?$)Iu;0@g^$PW&r?Vg15i#NW2{8E$*=~^v$VsQke`$iE9j`- z4dl&7C4*bD!;j(EdOwg)mb#PNPVxZ}GW*xyaCZ1cKfjIb-wXVd4Di1M^2CMje%JmO zZbjY1ze9jtHMV5?-lNjmjT`v4-1lelUzme;chW}KXm9s^bq`==!U&Vb+n6nU!F=O z>^1B?YL|Paj%V~>sz9;dpAMx~Dt!b*nSCiUxFI{-9nuIl?3?x;6~9dsXW91LB3(%P z)QezW2;`By;>VC2SnTrU@#AmiWt2 zGVvczCnnH|IM0b@6NAsvtQxO_$J-E0r;Oy!8CFy;LVi9-t|NIF$uD#w=LgAiNe+`d z4JgvN*uU6w64aITkrA22{yTvtNf*Q9QtG>`Gi?@o?Le|J$Vvs`-)Ku1W_|0BzvVfW zlu4xQM%4NCzPik!G=tKC45yrwuRY4jAms~E>PT7YQ5FU%uanYF${deU5TrazO3Edm z+~HBK2~sAJl1a*Nk8)m+GL)1&Qcm|M-GY=Jq*Ra+?@_jA1uDHCDGj9jfaYRc)&?mp z$Z$GHS>aI@+mt4R?mbev4+7;`k5Uq(JVi=2Dbt10q;hQv$I4Vvrjs&GDD^7oMox-} zoUH$L^iP0tE!lGeMqnX#psm#s4`sE~f?RW9*B_WnfuK7Uy0Va37P7sk^eC0H*Xne< zfNn*G(?-f#ApWV1XIenPs|e==sdc2L4hHoFPpvB{?59a;BCYgf!hZS$*`vtL7vWZw z_rVSc`Xr==S`X^2q!y8SIS|K(a@JTJ`Z6>T%3{ zj9Q-8ZgIDIZx84+QD+m7$gsRj+kKX|p1i)7g7>!O=`#7=2Fqix8YRWw&y%!4WwX4% z1|lb|beuO0C4ZmoE*3DB1&j?8;LZ2m?{$ywj+WCkXn|)J(6E|@C%A@w{+5$1KBtvK z$!{Wm>nT!WcKq@}j19!A9VsvOMUqyk0-pCu)9)uVz|7f2fyE-=FK-6RV;|_EZn!M6 zERi?Q9;M~jA+XGIi+1Df`#ti&i2X^neJfnQg7&4f?`zq!y~7_e&Yk~WS0m0x;>>Uz zMvYo(v?G#qK-W)x-LVxXo#aepul2IA|COLRMBiNpxECMy?-5P$>GN8>m;%EnP^R^9 z842$_D$%`OUwe|(9<0>8G{~pHb*=&XU$?8Q&{1{_S(Rk<_hfbVi}+8qGs)XU-VvHd zy>j}mdky>Zf#jtP1y3R1MvH*&(G<1q*qb|PZB88aM6$!2zwWP#j|7tYlpn#)8Bc{p zeg!TRGGTAZYXW;N*+pbe^RroAi+b@|tG*53Pb7Z{`9nMNvA?e@{c7<0fmI@3`|eH4 zq%2q-?pk{Fz@qOnOclO*a6IfrgE$%FZv;a9rT50G{eMLf?8wPnn&r4_oQhPhclYJV z3GT@fp47pmLV`pcIZPDs~f>l-a%lBzsO7jJt zIo8+hCGjImt_)uh&JUKz=#4qc@ zBr$Oqh^au{k5;FpK(3HCI@VQ^hjNvC=W6>ZnTpfU`2&sU45CgG5Z1M7`y{?oR;SvK zn&w>s>VHYiC-oJ(<=M?^nAOOvM@6Mht;vbhOwXXjG?UI+Kz^Ug!M}m$bjx$1x`|mu z%o<{6)gdd3SuM=!1;qJ!vpru_fzp#UQp9m2XAB2mGzUh%vUSBM z4CGYN=o2wYPzSIcQC`>Ia$N`Z(xLVPfT_STs8x#EE}*BV)=IVMqSl}so6IUrHRRh! zP8zSZ5!3Y=qO`!2#u!D=$GT!Wn@R{(!aqj z#5-a2)VRptD(>!fkM&@>i>TE=P9?2h73;AyiH9}b%mB1H91o?#4TYfTwZ(&6#X{;d zQD-8M9<1*8Qys@bkJn?Sx>v9kBWRV74Xd-X6~|Bd1dGRU*^|6<@($8GT?F}=XIgw- z4|W^}{si*B0@74TP5JDVpOUwXyw@~O|D817{c$$uNALdl)?@YkaXim%|5M(7ptE69I18vk0G&*|`9@*Bv%&f~-XvFuN}-Pt~4 z$m$@gzsrg=5#JxKKZdD8oP@6jdR9o@)pRqaTlt!tZbJ`#r} z2%SrzFolw}kXK8tuc~6`l=*bneYYF~os=t~(+DK-K|gA;XH$-+RitH-_M%7gN|W`2 zst>BtR-iX68)$jBYv~`a8;-X4>_EGd z!S5h{BM|$8ZXbq~=bZ7Qk^6z0>#dKva3%}4%S={6NlYTGdylHvCTFJEh0v*T$~cs{ zTg#YudFw-LVxBa)!@oY|$hwB6tu(#RHO08b-IZ1TA$Dn;Nl&9m;ux4D0J(hi!(4PF zS5<%cnNC6in)j-zi zKwPZOevARD+z3yn3!FoE2cU6!I?llMQ0huq`%xu+98`XgrfkX%55p;|ERKM0k>~U! z>wRI>W`}$DS+!s-B`b%lCxJ}gCRmWW)?K_ajZ9j!x{r$D%T(Hz(tcdf9vx4`S41iz z3)CUxJLI1l+_9tMA~|E*=N3Tts5tJNyClmy)sO5w^MNf6vl!6qQP0xZAiIg8Hu zY!&ILSAqUwfR4W>3JddnwaHykMO_f5f)Fi-(eifJ($61g^Ep3VLw-K_7rK1buj3*3 zgY{uHs==Nf=CLlN3RXR7wTxB=xmJ-Hu|CPw7N7OmaU}R*^1lL#kb$_apg#9OT3Alt zE`a{z;ykwPYprejT5Q{|QzJ}<*|x8hZToX2!*)53E+kwH7e@PBpuf2_&bm`8yF{U;QK=_RPR|YzE75$p1LVXB?VBj6<_5_7mdxT&P)A z`Z+is>Eawd^C{Fup#o2c<#oJb`Nvs)Drw2%K^xb(Jj7SZ>%6~}?JJMn>kJAF`#MVSjnRmbMz4yKMzW06K zql5+-^P~70vZ;Q3DOei?+jdwiKBCsc%Lf|zFO~E;gkNj;%%cSqS`Q;phgSj5}1ozDkvA~ zF9#cfar#GL)=`)|y(GLqT5_jT_d9{Yoj4ES`e@-Oy;T?L*|PM$Ml-Lfrf?ha7Ck;R z{?VP|60DCOrHE%y#ARwkSQ^6gSiSYX$WWh4E?m#&%u5l9ll=22=Is>IMQ$k7xgQZ0 z!En4gD(dOWP>~rF`b`QwUJYGKp|w6uU27}_Ik*8qj>KD}4wUlKI}Bl2|EI7gQ`l{X z8p2W}qGwNkg7BcP1)oySS-))+zKIvKg50${|A;&vL+n+vD4iR%bckMl!@?i3?KAe= zvaO9h*KG?>`~>F#v*50e6C&U)O872Hc$${5TBGRs;?P43CFnb>*b{E9;N8>Df%)VU0*+w_YLF?e_`8iRBzxH z^pm9@&rh$8N}mY*JWAkWN}y0nKZ-sbYOD{@r+kWVjD!dSc?8z}l%LjatoCI(Clm>4iIU}C_;fQbPU111Jc444=& zF<@fA#DIwb69Xm&ObnP9Ffm|az{G%w0TTlz222c?7%(wlV!*_Ji2)M>CI(Clm>4iI zU}C_;fQbPU111Jc444=&F<@fA#DIwb69Xm&ObnP9Ffm|az{G%w0TTlz222c?7%(wl zV!*_Ji2)M>CI(Clm>4iIU}C_;fQbPU111Jc444=&F<@d~k1$Yo(Z@Rm4m$AS_IhF9 z>@{BuoOj^*rS-xWc;7Mbumi5nTHOTWRMpGolUt?pSJTorZxj;aqt%$Vy$oJUI z5nDqD*t~=y59g8Rq4Eu}u~~f(H5Zp-ZN2e(^a9 zFM2CI(Clm>4iIU}C_;fQbPU111Jc45W$y;^o`#@)zvApiN``fNSwS>}IM0{>?6SKj=D@qZHd2gv``f3x@#68K;6Ed2KmZ>RXj z#``xvpHnC-7_dNWZd-?d!~gOP1>A8pD=3xknE$}pek_asCU=fhpZs&l|H>SB&$wk{2YyZQ&x-d4e@x|# zZRNbNSqMYyu4iIU}C_; zfQbPU111Jc444=&F<@fA#DIwb69YYs0m1y480Z}g1a{Q+PR4stu9p|q3u^$M0q7^% z>V;~+62LORdVnycUMK*}2P^}u2bez-111KdF|g$elb#6u>Y|bI6a3n8fQf^jV6%5x zkDq5!xMJO^;5?dkFo`W zQoDsH0RI&;iYqCK91OYrKGqw;L791mn%#;xWTJSIM3J-@f>0z_1?-@Npx_sp@K+MN zC|9ZA7CeG1D0t5m+Jy1KI3W+=D&X#5VHJdT2_g8;fSV$O5z~V&JKVy86K;NdjRsmQ zfO>=~!e6)GLwpYlA>+FZF+)g?+?(`5C3*8U1pIDaNDfj(D(lM2)o`icsz!FnLD}b! zi~M0<$bdAYQ4Al|*C|RYWidLu?5yTFM@r_4v=sG(HRw`>g?^8-5=}T!Z9+jUZT_U# z#Htz>$c|70a^-YZYM%Ewu`(M>M8LzrxcRttwQ$tgYBYM@<~l-xJVY%d{$Z=h<=yo zWr4I|$r9L&pW6q-xSb*jO;`x{6|5}$KIX5wh5UZe*Fzua?#j#<7prh zYU!dMwXe(*4#+MPDnI4>$k;mjQCF&?gtYv4PKb_{ zQkdZY`eyHzMczgYm4ImPU-1=F4}jSv=&S|YT%7*28FM(JpAnY$r8W-Bi#j)V}!0eTo`3Sr!fER-Ad z!4A{%Hn6Qpk}zfJ)B#EoQt|_GFrN}_!lH=HwUOenzK=T8VjjU9)h<#5w?mG@pxT;R z_)0&fBbFd$M!(1!7BeI3mXXAH9EKx==cvP6hl)j_P&YP)*V2#lca`3-gcFQO>gI%B zbx1}!m@!(S^leVoX(@Xuj2b*i273Bf3=oZri58oIKIUl*6JYF99F&#zs%l}A?&gu7 z#za6E7a}Gom_E!6G$ua3Ao7b{9~$>n=w}L6CJocWa#+R=%Ml0&4v$}AA@p$R@w>oBSsvShOusx8R~?t#GyWH{`OJ~ z^r4@Cbu0F%eS|)rVa?|sRw(Q`x=^?maOy7#g`sk>{7yiLZ=jTibW$vh~@6apcHh=ide-r$~E8!(9Fbt#-2(& zER0ep=p9sw0D1`Z_r(2POF@73E+5EP6TM7{-g>v3ZEVcSXyeX)L(vA&8~~yUO=u4< zV$<$lr#+OGPFos46N3mNgSI%(fk}RYbJu`ruqG?f> z+Wb_Y((&Z9e4;S1v%$3&_@_G`lwl+p`GK}LYS5*5LEGor zf=yws>GeyWNyyR z+~|x?NylZ+j@SRqb$RCYo{J!+;}1@#orL2xgNO>&V#IIJ_hno@V$WAv#(prvu$Jp8 z4=Fm0j`>I?H#`XL6|J6oiqFsI5Ph}L0A94dkB_Gk-RBa$Z|FLg0Wuw3v#%>8t(8+)qTjPvSx#B;#ktFHbOxF|@+!Jf1Nq**k`zW8ZAow?Nmh$~NA zJI;%%honTb%S=}H78bi2?|zihf-)xmdE1qRo`w+99%)b{7sSq4;H+%L3Jn@JQ?4qt z)!NF%lA4;T8f%s)W-ClAjfHDA=%^?`M?G{6ATn34G(-N;Sx-{mjglhQ7ppHb{lOMF zSnc6A`aPyEo?deYqVo$NNsTJ<~g_Hrtc9 zjryujr>L2xrbgX78r|U2F&(@dddY#FXpk|wX{D_yIlwT3(+`nVpFbqZZBTS#n+K+M z7o)S6!xZpRPlV;K79fWynHb~7XUf7u-9|=$_K{XwTfYK#c4w73K1?uB8u6Q2TfcbRaOOY$)N6fItK{(7AF z5@=~+Uj;Q4$cwSIOg&vaUh=e05BpjwST9LET`f+0svHMXq)^BsHw8(_6Ekwkc!-J@ zpE$#@p_x<0u^~=usv?z++FC)E;R1R2`Hk+TDcBa*`P?L-msg$v!zKg=FfywPbIg)$Q>_T%!_VgT+=}PElEBw*_Uf9c5IY zNyJ`SB`97aQBrAi`@-^MF}Hn`FHb}ntC>PNY3sGf?JNu_Y(Ym1eif>IDA&kC8AzX# zDa&@OchwdBC}d~;j2Ku_T4?+fmds$^w_r^z|GZE*X0YZRm_qZ4Abj_PP1rKIjCZG0FZwYY_VWq^GHX=#B)*mNBw0(}aRh+ZD-<0U2!J6gw-T z<8ASd5iAvBSX!_cAUUh}u+ce8iq(oCp%Hs9z1R%KbirX^C>zS<&XM?=tJ$2%GrnfS zR8fceg1y_nK6?zsi~P3i-d-5_pqDNF=FITinQ9NvlmU4s(voSQ;pSz(DI^vXe!dynUm_EQLu#R7#iEl*vq?*UpxcW zcWls@r2ak?twDUc0Nngc3fGfXUp4YdNiH^wjyUvG?}gJ}*-z@;#5gWc!G&u4$5` z7ridrckyNHZ@s_1?hZWa^G?_F81?w(yrtWbG4>mKC$ntl^HwI;ma#OPzBP&;KW{~A zDx_*5!ARHi{$chnqXtyZt>QZGUzuDJceQ`f>ONIX7`=Z*pGz3mxq6reW`m5r)3Fn! z_gj;$?KxfR>iWWL#opcn8mWi&zGtV3i73S0;bx>JG#8R}Inq5zw4+PM(u=Vd_sn^i zF-M(}#p?A$pG+r?V^Tkp`q62>$y3s(A3cczW@bPJU(5&w1Hkn6~#hODuj^x4GR&+V=I zxlFdbkuGTOI(>*;QAG0#Qr*uP)63MFi^^*3x81kyN_Gm9&YmY(8kyyzzA><@Fz8^{ zXV5h{5DA^8-}z$I>}c}~r^FoG0BOM`dmiWoL~*G}0Z zg?&={w6Mox6>D($*CM7Tp)Q#$H_!= zaXT1dhCPrx*DhrlN!OMcbT33F^wC+~D$Xb+lA702vp3_$sTOv(2}=#vqVTJ~*zFxC z3nbA|XOv1+An(q8qH*Di(Ua)(lJ4W`pzp-iMYR>L_3=igG{HN#MeA>!#0daBT8u~^ z?Iccfz(QEoqotS^yT*szlS%41GzdS)rd z3F&cYr0hHWC*XC4JbTnW>Ek$YyAs~;TXyZW50VV-vakQSViI#6-aZvh zON?;z122qc!EjOI+l$Ye>_2>|^{%IKPJQIm-=3nnvj^QfNI&|ZXCK3p+~}Ktenvkn zjzjV>f+o+vMN%?|WK54`)X>lsf<*mN4BTPZX1_;HHC>p)Xi7OO%^P~)4$EL{XyB*g zu+gKo5NiUk7UQ zR^oi3n=`etMK^1waePotB66UOqRw#UatD>D2sD;Dsf*j^q(;%Q=rp`>sCJfi3|iyU zo`SKa4@1(0B}GwOM3|(HbkgWxxHvZF0xTnaj&}7@Y#M)^ z;E?rImq&^k-;N5p)==w1vVxHSB{WW1XuU|0qL;~r0m2r_Kti5HBYW(Tp6mX^U_ zIKZy)4W^$yHHVR2beMkc(T_O1#mt29lpz5w62*z?jw!~88s#a*i5lf8#);}ZoyUo# z4Ae(E!&^Lc=seCMj2kJS5r+if6O0y`eG-<(?EmWipWEOf{hcuQ0{Sc(x3}k)vc}Cn zQJsb1TIE}4;Y-@E-)H+++Ix~FG+pk>Z6%J&L7`$sP0aMG(ZQtQ$)a0G zpGwqz5K}gN|Lwxu12RaLzlJ3Ig|!4&LZJ1RT4Fv6MCh-cuTIwuX|P+oQAwnMI->q8 zdR!g#xIAk$FSd%(BBA6k+yKpXyBC+#*6@pTy-%$-CeW%knt+GsZ zNi;UXUR2Mx`h~m^irl^JL3d5bpjnCf8eLy4&y+kZQlm$Kiwiq=MHpY?G_f}OS1u` zw}!U%=+1s%mLvLHr)TlOPX+jzlPm($83F&QM2}bmEhnxctM>^SmvmQGn;_!ONm0m6 zde>$i>rr(2pAQL;W<1H#G4(h4=5|80^!e(S{?f@F*)_`AFl<8Wx)Eaxyw)X@H-1Yr zH_IY#h|GYwJg{>mP7sxl(`xnM?!utk(cp1=-63TH{G<>J{$kO~tP{_uuvJ^FGb*G& zh2+C!?ZGit>r^?!4P%wdi)0Vzd}6!A4!;Ld8Cc%c^Qd%3V!bgXerq|(ZnS@Fv)fB* zYRjrB#Zp^Yc}cNq1exq0?`gRu2dsGoqDd}+?t&&=EWVDc zXWDIaB1!jJdjZrY^{~LgwchBj<{K1X3&(I4nQGmQc(XDiI>Z1W(`aH&wvw&npdLeE zN!EkXkxg#i+w>D^A9@OvjHnmgoK5BT0{H#cJRZ?BE_>ufiQCXuqit(zw$Jvoy(8%) zIq&TWyc4d-PBKYg8tsQ;jQFWfMB^Lhk?MgbnJ?lPr;s^0vo6H`Frn;~?{8U5IB3g=8;m4`LAFc-kp1q%=8qfZW?f=8%4QGLddq z>|F)rfH-8LNG1_G#9?VT1S@fza(5+8;cN4RWv`V8^B*Y@K6|x9ShJ=?5Z9Inmp_5$ z(2VTInm=9mGT!W$cr@tqQg_==_^ItA&5^Zn(pVagWJ?hPRYMgsv$;xluo0RMEw_4i72@}O;cT=;aEl)h@B#}9` zM;zOA$HfuH#d&eEBTZwSO#a60b9ll|xqj-{;!!r+6n~qgSs-~t2(aN^(>BtdNJ%1* z%URh&67*mplvoRSMyu7Wl=;eWr)HJQjslZ7WK=nzu2HYZq*+sMlt~OI5KLq#sDg;8 z%HpL{-gLrdMoue$bsU#S)a~u-5{E|ls8sPXlv%WDgS@L|f1V^+^-+-t*}{bF3Vo)k z#s#?KcA7g>?PvF;c1Iia1m0siM{7Nbj+T%3_zG@LIYxHUU0&Z0kO;t%1OaBnLrX{d#b2nnLuiX2jJjCG*GE(sNP z4vDW%iung+mmGvrHgMx5324^fVs2S6a*wCmM!89&JYjYq3v!tHUXsd<-WIE5*rM+Bjos?;Uf)_8t1NclPJR*xeV`CHoS7HQA2n zb;rI*r<2k1y?Z_WzevaT&6fCIqx1V_DTSzCYt9OJ%r=jVk>?`AC-=vEFi{okEY>D*7o1JNEaXo_0#~ats zOnzsMrt8)nnsbTgT`rMBy92(zCH)7k6A`Q3BMKw1ujcl9$l6H9IucrX+P&BN7M>E* z*yOnB_}=o8U=VhS=q!wm7};5&Js`FEhGYpsSNukDTOvNm3u~FUSi|G@HFcI2*{Ju) zO%OL&B;&>lr!2ytGz=Nhd8gaA2uG=O5eA%LNj~V2*aagblmO#OQb@6)q=F!d!^KL3 zfpyTxFWZ^L+{pJF)>YNm3fpHEy`ye?wvD63dGu>g6Db!KOyaE7wcYvshz9r%suz;A2^ekUjQ zn-t|YT%0mv+8EYoYJ+6sQWaL#Jl0&)WNX%~+d27Z*il&Ko+ea&3Y!R$$3fSeP*3E? zr~GaYc4+OD0yt{6SS(pW5xOf61UGgs9k3CGaYq-sp!5Oc$?At&a9Vw=090pmV*F-GL2|P46J@6#_UWlkiY$A{I1Y?% zOJck z+GMc}w>PndP1LTLE~8OagWd~H9xY78FyiwIn^P5wlL(a{9PuXX$=o!}a2^=V@1*^b zu3>MKnNB1d+<@D-B%u{I9VXrZCDLx`S`MkmCH#x~Ra_tqNGemfo7x-ZtQ^HDw=>lnSQ%yB_GY8@YmDU;FOl{qf{H^)UX z`2c;rviGfblC4cr>7&Wwrbi=b+4=5eGjI>q%1<1I~uVOH_1vqZNtgBVWJ zWGPV1W#)6qpKgNnHZ+DEEx7-sgRoi{cGs@K1~J*mO{Aw&OZQShPe;c?&(c>fTjj>C zJCe0@Y%hskb(!mBUD`G=N1J9+{xjPby^5*|?zBfn((Cn0$-=#}%8rKuib^Ph!DPDrpTrV5vNxiQmI$Mh# z3wqe}=jP7nK<6i;`g)76TSsA6%B7EKUrO&m&^glh<+s|>?T`HCNN&NM_Of*UsEBZM ze+h|Z)cNl zXz~pcow|2FS2P_eXs&~d^i`h|_V#s9@6$JvZ@4FXL%scI^_c}2fIsCD49058E>ORU zXr0JyFePi@{#;2cx1cS%VEn8+61yLeg~(#QDA1kh*-A-UAc#w$aYsFQ(m!jqlfNJz zn*yt`A$W?V&hQf<_V(ZbYaQx(}fj)Er1Z*E{B^q@^oQ7 zU>U$@m)0ncr1--@hg@Hy8Lx!yk}ss%>y0=h!$^r6DxM>>fWQYh$d8!MZUPPQ+NX(14?Q|mB@f9)qmw9+U3I9a+x^e3-*~FwU zqA*rqGGgGI)MHoZfQy&e0Oq!ZX;&D4PZPp95r^*}>#?V#onsK;Wz_;PNz=K7HiXkH z5Cgy6lx}n#Yfze2)WcXu?iN+YBywn46HFE}I8A-hxAC3K84GT;{Uh(xH3&aR`m)jXy4IoTc5QD%z^{lS zL|1mJ76(DbIZm1NEL_%#eR2E z9yJ+WCWl{{CVSmASUvc?(8XUEMqv~zBot8!Hif-Vg(sETW~>IpFv=#X9fr+muJGc; z?IjB#q>SZ*$HKjG^G1rJEd{Q4o70*MvWl13a#Z_UyHpe*m9pgOV~^!Vz1T`2P%``)$Dvj^*3YFD+13WEM$kJuAx`-)B5)s|FLmT%KjEI*;5Dr2mif-0tOSf{%`CqR)TRAhhPAIptPc7eK)F9C*eZ$*U#MR@ zmWl?KI$sMm06yJCoFQX)2dOM)S4<;PB4Dt|L9x1s-lv^Wa%Mw$RgtZ{p~6-)t*o-7 zewwYOc&4qUq`tVsUQ|<7U0YUFS#NJwpnG3m1ey?(JdyI$)7-?$h-XDvHCvR}Jb`8j z-)dRVXT&zx6Uc7_2?4&aX;CYKFf-jKU8@3b3xYL<-5w|2#cG&ipp6N=6I!)!G~QX* zf-wj!ha`L$-RQm8R%;V1mQhYAB;}J%wgLkJ_>Of_-Qt`njeJTZzox`iTv1}FomDF+ zE$zZsCsr;lMesVu0>%h#uhc~QMlW_DLEOB6SHTVQ4D@t_8)ev55bWWA9JDt}PB|zv zh24V7@8f$*tyfUzs~LIt$SQOaU>kY$lHkF0XqpkZ!PV4pz>I+|rCGn$f&hN^P|$A-EO zbV(kCa2(UFTKj5G-p&XY)tdNrSVwu>jX_il-2jQOUeSTOw%2!fl%%viQ8~3H#9WAN zDX4uY90c;j%DVD$WG6I=Lndk;>C``2x*+VDi5m5ajfDH&#uWA`QTT=qQWNhCk$pDq z@F04Db>SGw1Jq+oZX{T`=_lJ~CDsg z`6R)aKxn0(zti`x03azsCG1t;RRHZ0eyzG!VHVNcHMgSbI;?^DOlAWqafh%-=4?9w zd@FdDv3oP|UQq!HD0tfKCE9b0`aPDOV~Z>Ow5*`_n&MhJn+LHrDgr-@rkY4OKrRGa zJ=G$@-VX5*$*;)o4Ui=o&56o~sVy7x5&J`7BEQ1R3V*oc^A{@`3)y}{5DqAWU*Vwe zz{!>V2-R0f2AGB(aJMj1i0v|MtJqKV#3aJ_bhzRLi=0y|qg~nAw28}hHewr@;`by9 zuBOW$XBL7-sx#7*W{J3qjbRtAlYs%H>{FbhFagu#t;Mri6Hz#eSmFi?F39+Buy+*X zc9ImfXrS4|ABMFQm*|zf{$M-p9yNv?dFne!LD14?E7B+`nk57Qn9a zd$iQ!>2nCYEFX4T)!-}^ld@ly~LKN}=qlLNnJB0Dv0tibBEG@z4}3!vPx zut=x^MyBD7^edCqRm(%KC-E5RRHO}jDvm)TKB(RrzUaoW83;*SMkm8Oh3670xoRky zU$iv8CcI z${zsnA#REo@Zff)X1|Bli{1vRDcOipZ+GGha%{-LRCo;k0-=_U0pvCZOuZ2c-;0W~ z{W|00hnj=57ridqyJ^R&&#PO1rlar;L0a4M^B*fGLEbgD{L0gnbW9vshx&I$9zQ8rIk#_OvH}4-YB~ zLwJ=Bt*4!%y5u01)Z~>!$wjMyoMAbv&f*-^-^u3)CM7|O@3{gyC)WB!h2+sQQzsRT z#Gl5`l^DY@I^WIMUE)M>E#SYg)>Mt$1#6mkU48 z^Zat5cr#=|ep@bFjOQ{uBWr20U4!^CO|vRf>j3MfgL7lzy3^33#vZC= zF_iL4H;?4=j0<*6`Ocowtp$VENhfPGbU`9LIKc#&QyC79<}lbeY~cuTA{;Tea1?=& z%e^gP?iix`WZyMY&!rKtt_L;-6 z685NQ&QzL1VhWq7bYqfbeV45jA_Ubc4$W4&b<97+B638w)h25QmcbR61p#L7p!DiQh}7-D*up$Pla<1J_b^>T)s@M6GD$Otc1f z1DsM&kanKQX`Wv1bnB5U%>+Drva!wyYZvg9Mm`#@i1en7Bg14gYB5guL?>8LY%#5J zlZhJ!3QuXH{nT+iyP*ol@)^dRcHY9ykf<{0rcdM-OIH$l*5$8|PHseqi!u8&aV)G> zG;XZUwcRs5@)Wj4kg#rOhkT(A>#H!<4^eWRN#xJeeZHYNI+k}rqo*wQl`QQdW_+E_ zOCSP(1vrx+Yi-6NS%Sb4mh37TB~{{s&V+EbL!wn_w@tGC9AA&o-J15xSWmAxtU?Gx zi|!>}gQ1>uDv-!7cD#NnPQrEG~)*wb>w z*I2QaUXc9W#|Obc8P#c4~g?In(PsdaOOo--+DA*jdvqIUOt*+R z>l0rGA8LkDDw&?gCFMXVK z=e?xy)TJvkL-JI3Pfo5!-P86&l9x1{v6?)U==yeM7o%Fdz!woNT-$^r4wCO;sNs+M6+zd$7pZSqwcP6>=^BtdUmZ=daTsijOM_7u|BbF z(sT9T>*{ny7LT#FwMS;^(R=L>Pp_hP3F)*@XKAI@c0DtWIxB1U)jPJWd#1i!Z`J6S zskLFx(UIuVrPFHBF{A4h+eSTCAANtEPF?g^(e+5S#@JWu(|he=Hj7S$%S_P8vMODy%2#Nozx-H| zWsuU@R|>eHy2(rri(4O%Ae%vVL1!xcwB$2VC~q#T_2e;AH6*5?m!5E*sWNMw1Bc5{ zcJMZMr8a&}3y1E?M>Ri@!8(v#3Z81_@Iq-alNP)uW*8rxjnhokqqBUB^dM7t#-C#r zq%RX@7#}#B<$4G>bce{26irDWfdvUs8rtl#c2)d}`Yz;IG?_7spDxIZ8Oo51-r_u+ z_YWpXm6zn!JuOh4L2jTxK)o3KQ^i5V=5UkDj+YfN7gDE8@rRk@qG~|M6Xp@PxfO0v zi|Pz1QXPOAS5@LGt zU8Vcc>9HxJ(7)qMB_c(@^)w1Hg(is4HA*sDpJc{TPk%J!$>hyw-o?ztW_fC7qnsms3&J;(^Xe~K`(^HDlRGIB>|6L`)x?2d zBg;A@{^R$_P`1ZPA|m|_3k)EZSh+Fh0!u5?QXA4c)A}Vtb!ANVGR3t+M)H~8H zPMFC;5;W3FpC(ZYPX! z*hC}6U}$hljY=+5i7gQ$UAcJ{Wnq|<`29hr0u!^o98g_}hCS$Sq#4+r85VJTPK##n%pVSEc5OgVyE=AK z!8yxus+`+6$31r>buSmQLCKuUHD_*at;^*|2N$F)2!)Pp(&6t8oFt=Lxr;_)m@O*E ziyDYpd&tfv8K#K%u%Rig%eY9Ezm}6;4j6vIyc~8yrgWr81>odh5BdWWBIavVA39}_ z>Ju6GEDNd`<{{PWp407eMWMs#59LOoVh(+=iFmGNm55uWJlvgF_Z5z=B0E~JGp2T;AdDT6*$4{>&j-CQ(dmN$O3j30QoI@SE+YDgh#{;3 zpzswb2bJZc-P_6T&5|tPGkPxjV#DG|ccC1@X;s3CyQT|nwhw39@J{zmQF%%M2=w#3 zb|SsYCsr~0o%>Oy_)!l;7if0lJy}09rU%=Up#06O>~S_lVCgrNG@yUR=V&teh+qH3 z{zLkp-j{r`a@p7aT=8fhxM}4h|72-uGVf?orel|^ujHb&ENxUxZ~-lC+&D40wQFwe zy4zySZE-5}k-Afdc@M$jq*AKPZIIhYGZwjLpgu0Ps^MjJq0^3IMcqUDI8$&!(H5o0 z5MUCaK5+UikU8NNeR7#4X>J>vExf6H_Q;NPm-DqD>&G}%J{cv~?Z1-2D$PB?woV8F zWhWy{kfAYodl>sYw--U;%o&3?3VX&M7ttHskkbDCBbg@qXw&H~m^anp4j(g;* zZrLbswx>zZ($d!VntvoN;uj!nnNOSOT+kY$ql|pEtK}x^VWI|1br&gBqab-q*IiSXpJa=NVH}hC@P6C*!>qLx~$lW+RVmXJQ55$0}nnQ)`9c0Ffz;Gwug$iZ*er za|bMT!JZE(^k+MA#9W)bsH_aS;%x9l@DF^Cpf&>xRRKH|dS&0Re}EVwskRHTHVU+F zRh3-x*Hp~4?~=;mNZiVjndPt}n!FFHG%l{r9qs360*UDGGfM!pzF;WHRz`9aa_y5A z?UAsmZH1g{B}WTpaANCwJuJ2az-&}l-HCEjxzz)^s$yj53Q8!59Ug71a_W6Kw5>O~1R0Mxg|kl@Pf<9c0UpBxXJeiS zxYmy~8bK$DxnUpKaRR}?7B~+mM7U0HKHbxT6Bdyuw(+RiU+rpz?tj@@beL^Y}v{vw&zT@EXmeRROpCx z0$?QFbd5$UsJ@zwR(3s&lB*@3%36!UM&U16nK=hKB^w1Pr%C-F-MS|$pK6}~h-Fs_ zq;giDdO3k46jgv3=ZuxNQ9|dVlg2Kze=;0k{Ao#Ib;--yfG1JQ?1Hg$tj65QPCB`z zi~GpgDpP&Mmb4UzQAXhf{0|H|pSai^AgscAGdqmS8J>e>g2(BQf|NOVQNN#px|g(t zSVyJXftYckp~D$%*jvj*Z4Xk7*^cAT_)XebDU_SAm6Bas*q3wS5Et~A^Wmv2sm&-K z$~T36m~vie^uv_XOwMy#PPMkAC#)ygp2nJK{?O^2m9qvq z-oD)IX(!ou)b;)g%8ARMe~)2?PCLPenU9zmyyojQ3@Ry9{af`v7()wPbZF;-+9**=j z$TWTHy*gn+c9dlvdSL*eZ)k8raP$3EV5o?X@MiBt=Wd7)SNs<%ljD?a4ctgNuUgfskL_Tqf)D zs_Ab#S*EWJy1lZ3b9wBdHT%F+uKfV}0}cfA1@s3D02~JR8Q^HZaexy5*#O$S5zma) zKqOdl8UUsvVFeI(kpRj7RRBAHY%59t+N3lAS^%_nUI;h`uoUonz(s(o0Dl7f6>u}) zHo)Hj_W@P{9s@iMcna_@z)OJ5fOi4!1GWLS13m|Q59ot~g}#6RfPsJ`0Y3)}24n-q z0!{_|5-<^P24Fg14qz@o0yF{qfH2@!fO7!n11%2FdZ-xa3-JuAOqZh z7C!UBHKc?SL-<-vavVkA4C8 z8Q?fT9$*CE6u_x~(*P3zQvr2=GXZk|4FE4-AwU7N0xkkv2KW=;M!+3_zXR?AJP7y~ z;90;6fDM4nfcF8P1HJ@&57-6hdjRkS7zp?|U@#yXkORmEOa>GIN&sbmDnK1zF2DhB z1I_{b25=GJO2A(MHv{ef+yi(7@HpUKfad_u16~2V4fqJK3$Poo|A8nApg-U+z>$EX z0fPZKfIPq`z;wV&z+8X~Xa)QRa2eoAz*T^20XG0{1N;r}cffss#{ka&o&`J)cmePV z;0?fsfE|GE0eufbUk4lpI2v#QU>INoU=&~?zy_EKC<9ag?0`DJ9DodH2b=>~3OFC| zSHO*cn*o0ZJP3Fg@D$)Vz)OIQfX#r<0bc{Y2kZj$>x+H^I029YI2BL=I0H}xm=34| z%mhdPFF*mb115j$SxSHaFYbM~3lHN|ohEMS6l zFVgiNE(rLg{*oumC@HF~s=*zzHgNW5jYay<6DdJHRaG^`WtFzt67GQ8zI+NU5Wp$1 zpdA-ec{JOwA$DIBu7ShpLG`pV?PW!FH6_^C)zXYUBTi6>4(iuY-QhPOrofYMIa{{J zHPQ%Ob;_DBDlT=ZduMZ2bahiZONCUC1p?T(Gm3b@>_}A@^zJ+%aMN_kl735$SiXI- zo1O2`?1q#5PUMY^XMIKOU^>HcAszNTx2}AmJwW0NxfArO5hrOPqAasLJO8x9Is;jm zC7m$cikuG?hrGDwgKYB92`pKbi9U4&Zow7k`n|+m%ah#3gNGBTl&x zuX^Aw2=nXezU)ly7uN~NcDad!N_oGq87|u7ho73^=K?zU98Hapj+}&gwicI9vb9s9 zwC{Q<=hWsKL$%)z`FY`U>*)9KWY#H!V+uRz`*ndJ#BxGh7NjHHw-AK)LMU?sVN296D#zt;WRY31qxlguQjRn#3iE{5eHN&~4 zS`fk<*8X9-G1gfAPTEP0&HG?D5RspY2%hJ&s*GU$kHlaNVHmrZ37jIsy)hq>?`KBx z7pStdyb%Q16Ph!2?i@&vg7FX5ZaQV}D9wVob07_iG;y|=!8FHaI?d5@QT+^;6Zp({ znkXlPoHL8hG2N49#@ikE%y`|AW~7{kd&p_NH{L&<$~QCM$%oTeVR~4?2|B+!8`~)M zdt+c(;VfFWd{ZM7^sx&ozOE4pzpD|}V5eLS_zdsj5AfSnBh3F1?g0JwnGMSv+Hwn< zR~&pTci(~=y0^n!m{0Q&mw_4+k&V*6a}j{<2BCd>)H`3`kTd(?zTk44&wEI|K07Q3 z_@*O{D7WG%v7uPF;whFQh}&rIHB=^w5BI4R`a8k^D{xmpRiU?!eGm^O{&2v@9~;6?A0MC4mMsO42ur&}qDHxUM}>*FQ@f^Gme@S$+>7d#oqw|7)<}`=kF-Yqi105k`Zq-G zm((tqL=Yy=0v1}-v#7>qpC;PMOKNJFJeTIrxXp0UzKze0{EXpJdCzt>WGfbrpYTon z9#q_3Ypbahi|ZWqirs~&%w>MD^DaC+(44Esb5sSCGjVNS1G+<4Zm4C89(G?0(oHv>4f?TO+_mRp zW*3-rR~UjWbiEq6lOPK+>ArM>a)7A-5>7fQduf<%N9F6guEbde8op$Pow5;T0W^7` z+M2o&a%-0r;mi^{Zb*UFBf=Iq?85Rvb;3UY4*}Ky{s~wIcoFa#U=!dyz<&Xs0lorw z8_^n;o z@&x!Y=i3GGNjn=&iR{voy`v!bLk>K_N$hkyXk#cH>q}kDqa#UJ&8B^{y(Y3F#O;!% zBhi~Y4Ssvm1ctr68%v$p+)ZA`uGqJVwK=`-;VIVcS0mkC#i=u~+=Y|hhu#*(4UM6% zzOH3sNbJ{_t%=U6Wm=>zj77{Vkf17-+H;jW5wGCB;(MAu98?|XJW{N1`@$iaxzKzn z+M#0LbK=|5>3Wmaa&-3`{jw1m3({F4-fcJ*u5Bi{9;+3n0Ng$l%|Q}Y=guKfb9U^U zQfs$kHRkqtV$y-(7!pf_IIzQz67meNY9sWD35$O|PdFEFA>a>yKLc(8Xg~5NzdHf< z8r(I1it`X)Z4!UYkMhvcr}QXY`u!Wv7XhyW-U0j<@CAUW@HR4($mu{vp29*C1%@SVYc{r%t>i#DQK~hQ8-ccRI z1osJOw(3Yg&mfhb+x7WqsOuA4fB2jyJJyntIp=fR?MWl2T*@Xzt=^_ zPp|LA#?^XYEX|&Px)&S`JOH%1JN(dqW(PWga54OaV`_yh27kiMc%bG@_=(5Y3ZESd z+<|Yc-lwJnh^XVIkE?wjZ^`Vbg2A_YDC*ZS|j-o1T0 z1$u1r=3Q^>K8Jk04HfOmLXS|<4sK78-{<43eyjED7#D;!u8}*~H^xNdyT;V_jJ!OV z-4|BiJ}$d3T_}g#ksq{;PEBcLNw<^w3@59k$47fr3a>!!$P=|&)n)GJfYXh!iTh<) zaq09(#T+wDrf#9d`Ps^R$ODC3)J2)BHbV|>*>&UOQpA00LDsG*Yb~NLrVF_2<`+Y8t8}<>{ zUBitsuGDp7r9)arxT}w`5%m49Vu{p4$Aen!WaXj?V5xzg#j2?C$L3^*=dwcMMf56j zMa>_U812NwU^P%HjZ#~!C2g_;3ogP@&-6iF4&E2MjLyb#E_$nf0#~_#Jcd|t4nrt7 z7ZHpyTzBYiz_}WZXh0IY6Q?iO-lI70ExdNr*4=?~t_FI4@FfK6=jeZ<=j7&h9np}wRChSQHiItqd5+HB(e#P!>TX-or>x#Kw4=ZDNQEwCcU;}Scmtwk0U3e)Zn=PZ&%jVQ4b2#s3dFor4#WR404kUj{Q z%kP1pBHAHi^uE+qYbzIdSK-Gz!VozatVF$fZ#)cPoQR-MiM4!mf3Nd#4OFMv_9!as zxMzngVx3QJ180m5ZuDg@Oe!jF*khxk}eQbt4VB`;+sHM7+^%neyYjxnW1Cc7_S!RP*0Y z8xJ~X+K308Ug#s1?vReYcP81bz9zj%XC8?jDS9jDRAS$yHxrqrra8_;;DK~j>8H1_ zah#arjLVzo*fHnz)aP~W+?C7onElFJFGinF8CTNjtQYf{rAkh>8XRHR!uEw~{H;Qb zO!8=uF|%4DuM{dpJ^?!v;1Sb1+cTCSv;2bT*gcRuLc37I_7h>ORYNi7dbBzYBMj}O zXzx>l-Aro~$3WvTMv!8)#yQ2}DHYxT#Q~qlzyedCWhOTSSv!Dvre5tpQl;FD3ql(? zRu+-z6R>l%xI!fW=<>zN{B>;&GXpizWi++@WAbvQv$js2N@x2+euw@4YJFqn zX6P)@YKJgFsXtf??t3oIhux~|5KMu3AU6P4Fg}40BaKgG>}oV5-FQEhF@M1}+ynJN ztx$7#oiGb94?w>);CEKTef42=!dk%7fd2qq2D}c~0{8&%G2jcpH-H}j2OxeHU=ZLa zz_Ea#fLwqDa5BIOCjcLf(csw#c=HWw+?lE*o zEGu03igN~%v7u8Sizt?njb9x9@SN!)0G!cFo{@CiBP#sr3@w$jqP z)3OFYZ_h{SeJmFybjMDVSh?EC_^F4TPf0EpyHEw$F-yZx)KYB}^MwngK&GR;%-%Ys zV__&1Y7s+KQ*ntU_G(sLI`N`1%RyK!R-{E}3CR&8^pH7YAHTo}E#^TzY6(a9A68)D z7{MiNsf7F~2<2>u<&+&B(u3l%O>`lg76?api#U?GpCJ;HGo*%#iY&3aUSQ<|5?k?! zsPz*|Aa_?hPk6Ivo^T7G4KNEpV~~FIGy?CpYKNuPi*(8y0mf#HJ(rzFar~+MHU~Cx z2p5eq)tYrH>IJZUqBPtjdE}xo5$um?+dSTEg$Z7C{~SaC0KA0!l(>CGGgGL0O9MtUxK~Bte4Y zGEpOK+(sw>EQX`!hgE{2;ajbk)*iA1s}oUFM7&cT-o< z2DerTuH#w^iewchQ2bT}l*AWu+3+3)R%v%NRu}`kI)Qo8G(bHqs_uf`c~kC`TD_xC z9YLc2y4iOtqEUpYf2gp)pk-Q>Qd*pTxiedVg~f1xAJv<9!_}jaLyy* z*#@A0qt$0YjQiM#J1N}LoGGLClhlU`{hRM@1IUra9gPMq$BLjCp5OTi9IXQCStMlqIsVa)45(BWPpQJKvolD59TU~IM)>fnbDVb%hu zhdbep)*ckzjTGn+qmoFXXFd3>iZnA(Q}Z)F>&B`Uk*682On+ke8;mk&5&*ZBipY+0Fg>vy-WJjHX(y;EL&=HWLAzg>OTyPns^gzGn# zJU`&oH_x2-!r$&H*m#mv*ff2~^bJoRC9QvK<<5T$8TRCTGp@brq2~wQ`pBy5SM8U3 z@C64p+`I9Rf1bFl|2@Au%RlO{^5$88J5G9hV!rGC%WZEiI%we=eO8MvUNd~qE8Bm6 z{yhs%Sb6_Jx4!q-4P#$kwe_ZF`nH|?tuXM?+xuO8%r%F;{qTSV=j2cH9{eYd^NK$8 zjt_QDZ)s_iJjcFPAfI0;G=A~PRR?)~b!(r&kMBJA+?h`f{PLe0SIE`d9yt8Js~)}R ztP39eVe@fsHJ0VSe&mj`Ub%kk|lm2t)x0~i&^UTJ)q1UWm@sHa#{Ojn6_nrBh z0spX^R{zKYfA>7JMqIk;ll$*`?9Ye1bN~K-e(|2rFQ>lp-@991{Oge?y>YL%Z03auJ8Nn;wuM!_TtS4|E~FqKF9yK z_8|A%nT=mR+axbpIL`C)4-abbEgJmtk6T8(^!wS1UmvvY^tYP)n;-o4+wG5DTJ-1x zN569Eiuqe_e)ZL}uYBRgC)d6r)&KX_K`SSpG49@Jua6k;TKV9t zyT3Yp|8esdA7Fc8`~1yyo11RmeyMMC`=jpCi|>=3{l!w(>SZtbv&X&DTys_HA?x;^ z+W+APkJ@kOsFMz?d-Sx2p33e2$i07<{f`j`EV!@!w%r@nj(&dq%8RbwIP$pVo93)o z>-@_}UpPL#?&byItSi0y-EmOA>n4vo^rQ2e`UZbCQ#kP4(;vI)h{dbkSw7;PUyUDp z{~>?5^u<36c=VO`AK3opSwl9z(f{QaU;6EocV7PdoBQ5s_APz=gy)WW^fz-(dhn~a zTUYp7r#^7Z2eS{pAh2NI?thabupa=Z`qx zDUY*cXX~$jd)w?8|GL^%b?}87pDufN?F$!f-TvLP8+X2YNY%=_D$ZWM^3wdJ*FS&k zHNTsF_}bG44clmcDX_Ec54P=6-G=3sBR*Jp>V}oq9DDV7OAkErn!)EDbBFMkH@?eX z@#km9-7$A=>j%erJi9kfw!M7)p|hX6>BRG{diTg1E*4Agy-jMpfv|4ed6CgT|fCB z`AZMK!E+C_?Pt&bamNQAKDKt(k7r%6{*{T#o?Z9dxC@s)-1mwvL-!L!Q;Rn6VraHwZz>2s4edM`e7ZK&w***o?dX8Z5s0ng)0Y^|?N z-7xM?2Yrx#=~F9(ThBXh@akV&Xj?ev;n~gCY;7&txY0BF_^SLP8_phg$aVRHbKW{u zm~^;s&4c#QOP5{Vxcs6Q>?{9p)Kfd(nz?iPlYhKz?eNCsWnH)9)nDz}`uysaJC^L4eeboC`rUBvIpfd!+lmv99r^i@ zeNP!vI{bL0b#&i`r%jK z-GA66_dgw2_SfIr9zL&h?y&v)ddC0a$;n5KKL5}|bEjNW)wKT|wP&ySuD$Lz&o-8y z@YML<%-cEan!nz5=zVWqedL{kh1&OLkFNUR+Q!BWui4xGb9B|)Wi!tHuKKF{4ZnK% z*maFRyYQ0ynuo7G`HHO%pRj)8vV%U}arV5wua&3zu9)T-wagygI__}m9ew)^TTpxA z!6W3!hrQQ++ts&DTYZ^p@D;b@48QP^EvujX;>JtXf7G~X*P3D5KiK%l+pCZGVf}3b zCNI74q_gk6V)BD0t`B^3-*8#XAipftV<3!|EQ`1S55!f zp_iTZ!oXM0|I>iCx7Quw{Pq|9>{q^aa8~~HSrez$_Yd5B(y>#YdGEO6TW>lc@3{HL z-_?KA;J-+p{9^6qza8`CO83v7{^FFwcVF}M&;IYEdk(vzTp4u4>EBNt<#h0!+ zs^Y!HM{g;u7{6iUWxu@i56_(T;5YrP6Fx1T-2c4aPO7o4nIKp1H*wa{^Tzpqech?! zo_PI~K6e~*@_CQV9DUy_R~7uX<)txi^*L3;Mi34Y`}1!rsA4EKUsSBX9rFFsYaQFvh zQ;xg%qN3{N&ug3Z8(TMNb$DjKS09*h@tSY!58r96dFP0;s$V(#(dk=%`OfUkc5%*c zKXILT&+l%Tb@CM-&E5a|y!zQC{(0U}e{Wba_>{LFSormpPoKZ%osG9D@7CWp;e(cq zKYlo-Y1R7&4p{u&_|s3?K2Ut`(;3&_^s%&a{wMFfGivKg7kskq!f}85=#hH&e?MFG zvt9ps@r56*_x$O{I}WPbJ#x@5z8k#wweP1qdHuKH<@Mi8+a~NdXX)B6PMUb$XNS!! z{rr!%emid-@$8r1U3JOV&+V@IYX01|jWbVu=(R(C|HJFQe0S0ttG`^h>7pC%+x+5? zFW-9qj8ory?U0rY+g*3OdjD(NU;fR#`L7&sOXK>n|5^6Jg1`qa&HcrRFAn-~-cvb$ zyza@fhrj;MvchBjwQk1Dwck&;>WQ1qed+P5wjQ?T_PZ;dz2T|L&{EGl{rO@2p9%FX z{(tt~JT9jG|NlRwm`J8<)r2e;*~^;cVzOorxr8t!L}9Fjt_+3jWzC+wtRuxBBq4j* z%9gR$WeZ)GxGdktvw59Q$Gn--@B9Aa^Sga-^Xhi*abBEBeiZp%!iJx zx9t8JvTfs)4LkyBx_ z^z+1my&ck$XFlAw>-^}Bl1Wo*Pq=zTIcwjlini7b|2?w3{ibx=`E_!x*>_krdFx)s zbLtCSXGq!|Xc99dZK-YI=r*O(x%u&9Ts<0F4u7@gao(W0^VdB4J!Ag7kqO$?4+i&H zcCEcr)1Z0Mr++;O^6FPM>$TkfRNsOv1@-e%H?MK8=UiiOpMjem|1+W6tQC^K&;Pkg ze#*Y)eM5JxxD<;(J=A9LJefA^}e-m86V&BKvZ zTyA{avS94BX%))FUflbr)U1=?iZdmzD`SQosqFB4kR~p_?Zb*a=e|hE(5gbmST(*h zGr&FQ%+_*cFP-;4IJxe5GoPL@nmd0-Pv{i+{l=G2k5O-AE${x(tIkm?C%O6Ib8pq# zw?$Yw*sJf&o|QSeRaEfx`uWwyuPE`ccAHU=>%t=1H;#JkwW6-4qEmuPsRGM~vAwDu zyY_D9tB1?KEzmUTGP?45Pg7-`SI6D+CT2J8dBIur>E3`BokwhlX&>V zDz|X@rItgV?)P})E&uM>`?u(vemN^^F|<$J05j zUA$U{SuET2e0J=@d^9- zTSzLd>piK;_qtbiSkIezWXhxS<*wY3E{{FAw_X=(JJ*`icBrO~I+rCinW6Z$|JtPW z7bah<@oxLTuB&a|#%suz%(Bdtf%lKO5*_9g8bIZxT>)YOIQ763l+U2V~zBOvJ_NZs=FWEVpY$gs} z98~F1v#X6-#O>*}(7N;U_9Yx=haI05rF~NVAMYVw2jzB)Za3gv^^$V}JNdM`x%=v( zbJyZphPt}Vx;?b^nem4fObfaF=3?rE+f@dYKDg!4)2bCd%$^?GBXi89^6^$dd%U-# z9Bp+j)I{|yZo{*+6>F7g5z}IPUx%f;Dvg?#GVyM^2H6uDbUS)uW!`Kvi&f7x2WNIG zyRB-YgEIGa*E=>GH2&W+|J=*n88y0ZwK(Rn0mY`Xu0N;$87W98Fe ztwrBsrN*V&DaYn7%N?aC%IU@BNt9E?<;pjy7@RM%Y_IGdoIqt#Jm-#mn`-a_^d%k>N^dEi!vB_V3Kh0P; z^1`bMCfHN@p>iyegukFeBeNgQ?&U^c2bFI@d`>IZ* z`&6o)ke~R+q12k!j;&g&IkBUhlc{FYaPtVsIm(f3}_8cD7 z@b_u=-6BoyO)MFG-7)FyEor@p2j?y*c{s7!=2K61A>mc&iDdEEJN z_lG;&e$QH!xjiFw+>P7$|8^XcJGR;QJ74yVj_7h%p-Jy#)^Kvu5>=kn-*7no^BqN{mH8CoeR+Aly)wR{e>p=(1?$xe1`F^Fa zCnL((tn_OWUUuBrb~DBfj(uu%t;`CG?;A^V`|JE!YSY2Iaw|H`mu$OU)#SbZn35^q zKKc$Esv0@^l3ieniQ@xGzW8=iHf_O;`daDT8G}bZ=zjUr(T5Y3o_zbM@{yAr73!t8 zZr|RPvn69isB2bAYM+Pi`(+#-{cdN{z|rj!OFnRqZ_y*GZ2h|jO3Qk-DAD~NH?tXv zhl;mnVn;t5;4*&c+b&~HPQT=HXmQf0F#F#oT#xDJ|G33v%b-=q%XBSK!?e=T0p_(E zpFP&*Wc-OTPW2N8FZVt))+{CS`>w?FYc37$Y+5uVdw-Snektl#Bi`4ZI(FLz({U?G zZ?GsC_tL6G`$?rn&o$=;mS1(M`<%y`85L$8tiRv#u*`M&^`+~d-8xw|HOLNfUI_i|&Eqe`~9Xl+u) zd)dfM-wS;AkMRlkexp+0wazi69|vcaz5b@RS(s<55{FWDjjrvJuBh~}+nBDs+Kmso zw?AWS_dB---8=^-FEgz-q5jH*GACP}v0S=ku=zt-L({iQ z=>E5pxwtiH;X9{(!~SRd0?(TL8I<4okHNd<^>JH$KJCszNk+=?ZlB-gEPRrG=hEK9 zK9-65LwjusYq)fNw8ORTDK>rk->E4L&R5>>dF!^k(f-Tz)S<9r`^m(BY(%@v>QitplhGA_vHUCyJO zIUmwroXHNWb@y!i$e}~`@9xxP^UDbVmz}05zm93;60qN~-r%=oN?A0pac~{?uuF>% z=Z2Pwf35VKm>)3G`FOn#AGf-s9A4lMH8rwSOtZ?Hlm4{|UvliXxa{d|W3Wd9H70r<6Vo=il>mIJdImLX#y{$K^X~=7gPcy_4b^bGB^t z|Af%)v`tC@H(=F8`^OW4~|B2HZfr?{TJ=`ja;7CKjT6E*-EKz^9R07 z*|qYYJF9Q)FO`&g#9>M72AAxBx%dl!iviPL-%z^mEf^}B@Tg0@Mx(M@Jeqa3R1E(3 zKcd%%ku^-?KRlDgrEGT&j~ZQfb4=~0XZLHqW^ev<`@`kd*K)qjRK*1(t&Jc2HGZ>2 zyFKBqvl=+mQa3ME@m2qf9>yMt7`-Hy$ z&}N1&Ik4KM`{5-u%WRBMriCAOTTr6r&@T3_fu&q3woi4kvYI=(PjrV+&$to;rhiWE z>3eDRY}d2ZqHE?4J7l$M1BE+cS=w<)VUz0kGV)}X3Y6;49w(aJHmuZ{ay5H}n9wS=}tL)Ws!=DqH-#yc!nQfej%fM6N&Z}-6YH}msucp=} z4{8NGi~KEa*{(WoUB1a{*ptQVZ%RR36ZwYpyvU7XsL zp4f1rLwU(^XTp2Y0BtVuo4F#hK?Weho}&q#hUAY5oM)&)MTY zN9G13&I=qH^lFH|OFz>wA6%RJ9+)K=F|J~JpZa@7DRNKu9l0~}rk~%5C!=bVI5t{4 zW{G>|CC6?Rw^Z)Yzgq9^QB$Y)$sX~gw}Zu{o`a7p?-l)EN0-!f(OpaC9q26Y{ZFSk zwNATTY0^nv&TDdqZqMs=T(r1~=R1Fo0ZmOu51g9R?vEq4E&3NEFYecR_i>Mq3Xl7q z481k@ajTpmj{P4F8ufaf*Y^1bhrWzz=3V#S62m5R9z1+s<8hCg%T(Hr6OTMTc|2LEQwkbT;e+M&RE|I`m$uKW9xuvvNGzt?`( zWuSGwh1<%%FV)}namlLB|MdBO%X!D{6e^7e_R+9q*A|UgsM`2yQHPKB7MOLL z6LGF)V%R#rh&f(Xr&Lwd&u8Din-RX^vgh2sJ4ei~Y}dy^kw7iQwL1jaiqOlOhMh$Ev-9#*cS42 z_tukZHYTP{PEROl_u{a8*U2Mut}KYZa?kQmxr1#Eb}Q$rUNmyR@yr_j$11uH*Yy9V zGp~K#S zi4SKcr;R?pYv0sKl8#rdPN=!u4C4`8g4mvP~PL;pRJica^C!m2d%XU*Ov7e9MsgQ z{a;U|^ZI!OJ(0i8DqGO^lz(3Rf-UZAHm44*;auQBjTCN7P;6^*W)G!qc*#luOlKu@85?yLRl` z@`tawG}0{aTwi(gt2#>4iFxkFFZ67jeeaXXc|_+I0|MH|Y`772{?q9e{*|XMEH~-t z(3Y3HA9?KW?fG5)Pfql2`xiw_uGI2vC9^s5f~0nJHdfEAR%`8mV7Eou%mYom)fZn6 zI^1T!vy5R~JwnyrU)kOAZBsq)?))wmX-#rpD3>mswZ5nbDnj%^N*%1m)^NjZ|})iS3B!2svXm6W}O=~RWZXvI_cW}Zx<(DSU+(4 zyBcq8S9krouT@-U>tUCt^?FnC>bnIa?suxa#IL|D=Tqb9ece`6ZPvf`!MiWl-9B~b z)4AL-owqEu%d_&`(sN9yw(I+z46oDT-sT9o&7-#G(Y2d$vcD`II?<-tqe?+> zEgD_5Uf69a?Lk#;Pk6NDVCfGPsy^)zJAHQfOJg$k1X;x&P1)jY5_+!H zhPZF4S{2tmYZ23;%uxWH(rO<7hVvv)OqEHP2UVE8A_R>|mp+ z9j~`@|9AYLhPn6tIn#G^)XvN5xN1`@ug(~C)MsV3dC7N*Qg{GJ@KgLGQm%qzGG|k& z8jh8~8Nbvl89&nx9|@8ufFt@bP_kD6Ir>_h$1gvV;3tDiY|)Rz??7vVV|;{1;);Gc zXI;t~$M`9v5-0T4Py~=f0C)8B;EzvsO7MA4Nd>N=sQHQ9#LHV2}Pv%-<2m zGXQ>@wZ%=$UmnL}K|S;npj6L=pga2c@HfZtAD|K^$5P6dYKr4&06#F%;xgthhvQM8 zHu`&^RPTA93;M6%Z-HZcc280j{SBCZ1dc;NJM`~kei@F(1AL;)A_-~*mV(~sf8lid z-xqyrtUrwH|3vg%a6Sd`DPJE@9sR9P6EGXNq5l}?DW5^W4*lh9|M3|ZNh|cPv;7}~ zK0XO#5f7z&7l3Z)zlT5VCq8p5smMtsrY5@m$0xld_{fdLMYjL=_@3l9^mjw4UUNZb z^#6iC?LU4UiKGhp>)8JPi9Y_vqs3je|Kreai2gAsT~A9uFZ4gdpZ1@wnetfw8MgnE z(Z@bmoMZb>HLZ#MPAJ)jfsW`uhd=HA5P&*ctY-T^6a6;m-)8$CfIhBki^EX5o)&=~ z=>G$MS`R+9BdILdfBckPNlTo+%JzRW`gPFX52g9$gRbbmfj`xAIKX{tv5D>fEcDx> zpUw6kKj1{t82yt_x}KJSKIngA`~R!^|1{#${wshZ?6*KUpaOFAAK^UhzZbAYKZ@;t zF#4|OXR!VEN8btkgHYP92;h$XJNVQ7|LXp~!1mt{Hnm_M2POM(&OK`Gw_pd0!h;7|MctNZ^F+y9ZU`3?4apj5B9pfma} z;ZOTN6jVWfJ=_03(f=L&du;#5q2Cbwq4SNH!lw*RAHQwR13 zpfuln&=vi+@TYq6_y1<&J0~?a!S8T2F)43ujo;&H zBDFR*=j_Z)%qp6@aaGJsTE zn>NSqWH#e0@xMOG;(vcw;Zx_xn8Rn^{t1WBRsd z6kJd6_@;vMg8G3eKm}HU?cfQ{;XiSRt@nqemEdRvB~e8Q>R1{zEQ`8X<9AwD=4AM7 z)-~}npqt{iS9ioGNJro^r(xVS?hN;YaxHAMM&Xw=eCf-EeU(Qf`l`UbDss9nDLzwr z1`$lKSGpW%AIrkij;oGOvAW^2t+Vl)tW8X2o1hpaOw3G5nn+A6O{6BaCXOb~CUO%6 zCBV$qv0bf<{CC8Uoqh$&)MPCT+>canL#4DaksAv(m z)KT9eaL7rmZE!nUlq_vt#>}!rSyL+$x>A2^{G9w;`tkXgc#2~8bib1vcQ|%Y2kvgv zQ}-EsJc+TdI`ArndqnrU%kf0}uN&n@xzXIzERn%t&=Xt+4ZvOy2wnjPumO03`=BjI z0wLfFFa>i!2ap14fUUq6JO-#7w;c2X*Fh5y4<>>4pfp$rx`T_L9@q`Wg1>-0SO*4! zyP!2V24;ZIpd^?Fx`1<_HrNS9f#;wSSPlLFw?PYV7)%5I04uN*^afW!Bd{Ng2X8=C zun7zU*`OUb2|~d)U;<_XH*gwM2U~y-cm%9L6zB^wfD1SXCW3ds0xSUCzy(kj#DOs& z7ubQdU=X+iT7jcrI`{<4!CcT8oCUvu9bhDQ1}cJ8fSzi%Ky#1?rh>mgS+E530#`so zun&v_uR#^C5ex+n!0+G$_!E2u<*|bDCKlWZ=n80mXn*Jp=nZI7XjAAR=ppE2=w#>z z=m%&SXc_1t=ptwjXb!CxSL!kGd_n>W{ zZJ@`Y$DuQ!Gok-N|Ao?1tQ2%UbUw5zv@7&H^gOf0i?hKI0Gf1 z*K2p+1pI+5@B*$N7?^=hpce206@Vvb2Bv@#h!6%kf-|5d*ak*`CxD)`(!#6Q9I?#{ zU)?G|ErA0t1vY@*FW7^Upc1eGRe=ex1{S~$&{suJ7E}QxKzUFG$UrGj8E_`1CCtps z%}b({LX)s&!CGm(Rz|N`inOvK&Fa5w<^Ic7_^M`8zI+9=ifENstIV3MUbE9{_99It z(j5NFR^`8Jh5K(_68mmpQMz=QGPIqvWwb3+S}AMRtl6+uo;9kQuu%<#jjt!Kd|i3f zEAM}F^~(JpU6JzJidsp$dhj$v_K)O@CgRljftjXdarw5m0P7PyiK329&hw z{~~}p`Tk!vb+Uqse1qRPLP>6);x7SOH@Nj1@3ez*qre1&kFi zR=`*RV+D*AFjl}=0b>P>6);x7SOH@Nj1@3ez*qre1&kFiR=`*RV+D*AFjl}=0b>P> z6);x7SOH@Nj1@3ez*qre1&kFiR=`*RV+D*AFjl}=0b>P>6);x7SOH@Nj1@3ez*qre z1&kFiR=`*RV+D*AFjl}=0b>P>6);x7SOH@Nj1@3ez*qre1&kFiR=`*RV+DRufqwlv z^?x3+D}bAB+V!N3;`GaEqdL;h+H`O2J!ORBxN$zp$=<$G#{~L$`;Hm!-D#xn)Y0CB zqr*p!96xfB&y)$18Y%sJe-Yg{OcgLwE4aX0!+t0R{ft!=8(R!jvtzQQA7x7II~u7R z2>qR4!#APLO}#nDhGONgaefZom(&BXB)5OejeH!~SS_Yx$2Z}e`o6qPAnX--acRv{ z*q92sogI_y&(e>skS=1(?Rn9niu z$GTAd&DfY6>c@`B_GkGE{T&V}C~RR9&L5#S2N_VT4Q!mBqtKCklOtA=o*(6w&c^PO zX6bS#+n?no^!NTnZnanp;oKC#G^63kw0&%V1s!W%VGW{Fh)PaxB&fHcZP9tuoBz^33rEa>EIO*_9+a-pr4FR zO}Kv)S00ahNO$UobKZzajpiiZK=g|{UkGB7A2s28Y8I2m>0U@iUq633r-47!o^NDJ zKZ`j};9nRYYn6fqzzYJ-#oYsP%2PjNb--;<5edABaF!U&+Sk zJl}+Igg$iM>8OH>(Tk%-U&F@eJl}+Igg$iM{TN>V^x_myU#nXyo#&e{j?jnBOOGo! zXXZnFs;?Y91l6UGtx(0MuRlJ(-Gqo2jb=se$q zafCi}-Wzt3M?dbnE&7gZjL!2-7)R(s=VM{#A&5iQv;zG=z+cm3^RsJO=tr?aV7EaK zi=Hui(NEHgM|MAZCJ22g-c8uO(u?;6eapu`=0|ovizoD@cwCZ#YYSh#QGPwq_tuL? zc0Y?J^raY1uv@GbZv*;!_2QA;&*BMvDV_)H?hE2k&0nFP&&KFH--LTA^r7>L6AG@@ zlcIG}oMz~^Wn*-nZ^Af2A3DDnc7b|vLeLLqV|1Qx!Z^H-7dx2-y97ZT`t=j3=-&rF zdml*l^!|sMFs?8LopU&e*Nmsb=&-O+jUCW;0-e}6+5GI+o!GE#9maeA_=6vI+rPvhG$<{=oP+!W|5_2Q7-&vFy`QoL~3#puOT zqo1r7kL-RHPv}eW6tK(Fi^sjdpMQXGon-g3ctT%_cNuna`0|Z>Jka+B{NHVm&ChBr z^dtW~*ew>sBA*QuhmFyBz6tLyp%0yxCM&p`%!gvob@vqgFTgfu7}qR!80P^30X4G! z*>y)ToNWC;y&^{j(ZJGGB^KbH|{s zA6E%qzVUgsmr(mC?Kk3Qu?Et2`z;#lazu{w|q`AE^XWn;V#ozwUES^nK%NBRFO zKRQSG@iB#Y&^bO28mA^jzWhGwM(}4njH&hVO-4VBjnR3&3G)^D@aK(ctbnls#tQuZ zu>y`}6}kA~_FNwDQrL45;6AADW6zBNmx0XJo*M+Vg2$ll2zzcicmulm*>fjBlacn^ ze$Z$X?0^=yjJD^3K`eL#T>S01(Lg@No(lu}!A($ZtUcEegn}dxA7IZp1ln_Fz=(11 z2RWeaczbRUxDV=2K)&D=a8=rKlRzx6m}t-S1Ixj6U^fZt02+`3YD|V7hyZF}GR2-7 z58i-9Q|-AdAen|^kOd?`hz~Y_s=@Z$Y@h)q(=iTa0}U{lfj*c74ua}4?YS)=2iS&S z%|Hoaz#}02)1Gq&!Qdcx2i!vKxwYUEaGhn(sX#7hqC#A78sq`D+4kHVpaGV1uwD=W zQa}N44ud_22L)hIIQ9gjgX(j!exL%Ufyq3~1pz$PuIf(2WcP=I4#E*xCfk8;21=J6kxj2p6d%DKn9Sk!u((k$O5*jas2`fFj<3j zfH^<|a)3`Xt|ef-7I}c9K(fxB^8i~w7O1`+eGmoGfXN2b9ZUoVK@N~^#J+=I5DOjw z=_cd`wty@k*^J!4Y;YQw#2_CK0n&hU3vvayV9-{?1}59!1ERon;ItjJ0$HHd4y*-a z0Lf0&5-30%3j$lg6;J?b@5h?KEbtw4K48yH1$)2~P+g7v1INMNpvFPW3zmZS zz$qT*!4{AUY!BIU+kj~T?rpFYd$6kY2kOO>@U=PxOuy}wNU=q-P_rNwAHee2j1r`tSECBxC0w@4ZT3nkT7CZ*kA0aoe9B4oeuzid; zAQ;4gEMWTtb|4z0fdVk`Df+{~Xs5NCr8;_61@B6;J~$kmSG)D1ZvY zf-E4(#a;pr5Da2LI>-akzi4U3L6js zGC%=vD*+o23*G@2Ga2UvB0vgw4{DgpxPD*`hy~AqOGz0w5yXObpl>M|S4JY^E&&${ z%mYq?>ZN6zI|v4`APaD1WSk?A0|kf#8t@WGEs;0y2N|FMIF^Mi@CVT#4HN(uE6f9; zz;W;nR4<45z+NDe%D6+|38-r=<0gQk;5DdjBjYB4>%gwOj2j3dz-?erLB=%!qri4x zT2aRNf;eDWNyfDUqd^?V0=+8BxG=C6+ydV~9a|aa0j7hk;1b9OmF;BQaIhP^1FrU1 z7l;G7V5bZUnmEX~0bnn93F=mX4`^H!`vo$9Nj2mGR)AD+q`Hjz2rS)4(=x4txNP zO;KYo13Uy3n_=Bx5>SITph0sPHx|T#kHEEsj2j9*1J9N+ZW(w2s=A^Et*{3m7370E ztufXH*E=WxZQIJY5K!iK8P^f42Is&B;L;AcgZ1DNC;(3FW!w<38r%lufJ1?4(nP2el&)>+0a0A;(#xIrKaXux|=y(_M95Da2L z7Ld4O&A=Z-gEUY8Zg)eSyJK&`*&Z^kWKS8_0xSX7Gwd*DC`aJ2hkt{v>J`tf?VL_kGLQMNXFn8!~l!2I0hNOB>-y$k3ro)%n4G* z;ra!Y$K#p;yFm^ZrIc~Iz%x*DBGwEx11*qD!rH(x@C~$|jOR3vPmyu+!4dEPl$eV3 zPQ%`Tqo8XLY6~*JN6;!5&o*!rSWL(D3KoD1p!*E$8E}}1Ji&VK4Rj5WadW|AVEZR( z0j`3Nz%dlhArKF2X34k?U;;P`-h*l?Jh#Afa0Qsp#vXt?P=5}d4d4vO1MS1`+yjZg zEF8}cFaulwHgjH=1R zbx|_zBJf&{YhVSALD)+8tdeny!6(pRHLf#|0CGTwHMnlTCGZBUh(?`20qC+8*9=&> zPR3<|!Ruw*LXZZ`H^{i(K`>~y5%)Mq0FOY+O?Z|9+s!gA5bOb_F?f!F6i{Ld_5>(E z9H_Sy_Z+CQ4c8&a0(RSR9fDx+2-xnxeFLIEGO*Z*YYN1G&%kpRp3|UdEcOQ2#NqW7 zYy;-IW!x~307~z{9)dVvx)(7(oqf1&fysW%0fNC%Q0f431}VTo4O=iDXh1eFJBZwY z7YG9jyXs${fM|gLv=^SZQDjULKWk&5mKO zz#?!Q6o5v@5g(+00#H2(_Y;^5Hh{C>4XAtq<6u5`2xKSm-T^!ZcBilwFby08FM%vs z#?1tY;4x@$8hZzxf~qMpt_KJPdq4)r2bIs@^%x8VDzFWl1G&I56|eE2AD9ZFK^|~C zi&$Vf*bdTw^cG(Za^7qCVU3}QhRu(>GXMuO!) z4YGjsC0q+248(#AQ0cOa>jZ{_Ibb(93vxh}D|l@N(cmoj44Pj>EkQEK0k+qWBUle^ zfdbGZ9oGw34m6;82KEX>fDBLoT&`msAQIdG)oYlUCu zN4{jQ64?6}!(I)0YR8$LVg4mB7A@jWel(|}Pf?EdMSRHKLtt-NQG87?u&1_%=^^G% zIkpw?CqJ4~>RXhfO2mikjRE{P@~B`xWJOU&M#zP{E#bGxMXlEGrwX0Y4WvQs-+2ANv0T zUbe#v|1ZD>sIZY8)t;bxiTdsW8-C1HFb0#tMswPZ*4>vLIkpt*W7pMg+{Ib7f?H{eV0 ztzjQyz=q<_VeuC-UBxs8O8MI*nVO0&Bhj8@2Mg_4Pi^oRp3(~ z;uFApCJTHTI2d00PUf>;;G;0$Q<&6$`Hl7~CO}sUs$Z7Ke6)}BKC3|$!)wtZCbb+W z#m$4#Uj7TEYq4aYu5S(H8^xyUEg8BGEDfVO*D-=qx7eMKmxe`kMw`(($a^4Ls z1x3Cf}GNv`56ob~1Ud$LO=0mwusP^mn@pG!# zT*sN75zN_1#GjAhIH9O!5h6ZRGY^5iM#P@hPkU$S`0KS$%o~VFO$DX3M?mRX*aD^c z9b@NlSh#P_%A%ax8i>u?D+Km|#juYN*l!TA=hv8Lz>e0KhnUpTp|r*)Wxv(5ZG&rVIKo~YOzqNkDB#K z`Fl}X!*CtQpK7gTJ`~4W#E0yqlZ)22xES^x0{f(5*sBEguSD$Sv&T8V&}<^?9K!8D zLv!V@xwL}0_KNuNc{)!os(+4%PvN>?Pffx6XkE5-idPf0U@lJ)pTc#qxwL}0!bSWj zH}Z9!QM9gP5g)Qw2<-EUVIL!~cXTqme%gO}Z#cz(9p#XNnAEgPO=jxuH4CQJOzoh2 z<720b#P(-C3Z}DJtOZP?n672#DL&<-MW4T)C3Ow2lkBA-MfR>D_Hup^(Bp^2UrYQE zkH43KaZL9|gx(x9#y2^C0DXBxJbs!Wein3s#lc1D~>5wcc`!l^QU^I z3+fr6XUqHXK5~8l+96pyAB`ZNG?q`6-W+^v3QhUQ|18>H+xkD|&QH(#kiAl1?_Lc1 z7=e9oG3>Ph``BXGJBI3B59&iH&lXU+rs%aSOT?enSGXqlPzz=;!l3jVT*_k6pUWH? z7_JTZQ>=6rD~rW?!eYG<#PTm@EazE8dy^pI!#_794S$^{<)=VQYW`5Fml8^A4QAui zr}grE92VA-{#@lJ5<8v6P(vxU21>D$p|l@q>^u$&YvrgaTHi_ov3Yxiz&^DY_OY<1 z7Q_4~mwXXFvX|30*8H->?>py4Mb7~_j%n>4P+_AnzR^B7&DQ1S2<4xFk$OJ7y}qxK z`Ox@f5g(dMEwKMm40|o?$?rXs=J?F~X%8DT{&8Ku%27V2Xm6DwK5{+?bkIw;!XC{_ z`$ZZ9f6Axu1iq;doA2}YdMa$lR;@P|jR_n1sRg-NIvZXO+2;xD+ZMy#F-*6&PEdYt z14aBON198)d?@c&5g)RT5!h!H!(PjB%Yo7yd8|)LxzfEaaWPyInEcN(A=rQ|H;N;ftIMB*^1iN3#Op)89?XYgP7(2u^OHiGlo4OccEscJNx(79k*YU` z{#w+6e9W2}UIXQyC$Mi;414E!MSJI0410yZex-;#t(9Jbatzo}&XI^oEt+Wz(^#fz zDB0bHQcS9mwArs~LAIX+wrvgA7EUbqM!p{Nb@>c|^7|ERAO_i#L5y?*HWYU$;*oBE z(i*ly>ApGurTgj_lob`7_zHZyMSSKmpCwS5cNLWK-^gN6?vVy!P;QiWfdLzeo6P1(gHoMtuzog_>hv5+ zbG>2xPf)6p$pT%SETR8j8_lbRALU4MDqH-zeiWPRwF3K?V%SR;7R665hP_;1&$SfK zM=7v(E{1&!?5V{vRWpC8u|mY3{0eKpd~=vDT@Txf>Fc?r09#H6Nz(!NJPX$@PTh4&;oPc~%lytpXml?Gz-_DX?$YBB890{i@8*yjoC zYqc_5lfwL$6y@((411-(KD-$AYJq)1G3@hTPptq-^)Inhmmk&ssfa)M(VFD&q2|ui z14?^1hQ*?1g;Q(8wIP3smCSr7mnkAXWS=Ln-(C!R$7MzJzgY}>g}~mdjo~#=J~0CO zX2r1A3he!gVec5JtF;r9YUIrNq;$_wtyhY~fk|Pl70id?XhnSFMf;l|;zM(K2<)F0!(Jt@ukibi z>(S4N;wKC2JBirK`2f%|1@UOl>0S%RG1X$F-W>l?pXEjMxv6K%PtW@l)<;U)V%WQ`)YZos%I|Nmh#$Xp74xCGCW!b@ZW=b1S}@mB5kGz| zZdK8~ILgKA;4HBBD2BaKV6PIfr#jJl(3=MAXuWF0q^5yVjgp~s?WM6kDYbN_bWDEI z)kSNybThnG{ytC`u%nm?#H1#NQZDXL%Ebdp_kkBXkHf+o)aX-evW+wlo43zl{#xco zv6Dso$X8C^SUcm`@rQo%Y8?x6pg#}!chG%CQw|k2%8!TUq+?6i&}$Px?+a<{3v!`4 zIIq#w0Yg7DSBz5~sPRh2@}JmK93{s2`l$7CB0p+0FEz4P3+%PUu-6Lgr5%47fm{S-dhQ)|vF`@-A zRK<*u$6^$)7~Hy|JW`7p!x=u*T$#$DR0DSwi}pv-`PX$MUusmB2o^)dd?}7+F@4jS z57jeL#E0gRtY>=yrP|Y6$s&F*;pFsUP*ZT#>l&57^!|PRS zD7rU$>e=$s3)dSXun#GQy;fkqSHxb&*SNEgh> zb^kFxvY{rNliOUBqjNFrodx!aV%RGM_L0S~R}1Wui(#K9u+J-oy>kqEU4T*@x4kTFHEaSu7Rnlk%|wiy2GJd^IdqGV7D_u{6bqC8y+AySt`i;gRtD zn^{lYbxiLCd*YaCPys4zG)C*=$MRTC1yFiD;qkNzjP@F&E8C@9W$4(OvImP+=oGnpeT%`a@|<38i_1nW~_4 zFHz%_-j7FMT)$DgWHz1#rFiMAPf9sajKzAn@NvkVZ+zXp7_g=J9CxrhpyV%sQvOmX z)yfwHNj9}>zBpjYXtGr zSp2MF#&^0Z9^bZKQT|Rirdqf{g-uu=+Aqglx@*q~O6Q!RR0F#1g7tj)IQlUZEQUYx zrTs}Nrf&@Mp_m0CK9sLkVDHrb$F=F_SGc~|qU+a7#Gcko&!4>p>?o!JF{$}ODQ_i| z)*K9_x~ZV_j93JvXWD8g`CWk09OU!Vz#L>l&!=Xdzg{23-w+Ysov@|c zlbLUtz*i&U`-a(4zWE}y)_Zj8vxAa-btvsq;XeOixHcZlmi)X$Y*hl=2oYPgz&1g| zRtsBdIZ(>u1M{W)wFZ1?jdYF32O3_Z-CkY%>QIW`07}jC+mAd>00!I z(*A9PQkxGY|K(7=zABNqpE6tWOEO?f@#sFV^fJ5_>wRpmnO29=TIw=w2Bn-wv-1<6 z6q{_CiNs#ceAWqk{6&0DFrTvmpA8~DIm{|${bKF-)(5=5Q zl>A#mX>PiH%?2B;!#HM3esU4p7=dk|h;2G-sbw)Ay2heKd?ad}4+rJ<@v?}IocXvj z^n4rY&2P)p5z1e0Q$&0{m@Vb47O{rTcG#0UNq67a|@tIh1m7hte86n0i5}-V>o@ zpA4mz#xxyD_PJ1+lWZ>=n3HVi{ZX@FhSw=i(9PorrM#S&Izy>WuI&6ED826ZKq|R2Z&L9`n&M&0%VBr06>I6p7&q zTWZeChvtnI@li5cy1p)p*v1HK3q)+w1-7+(46mKj6z!RZh^;ehskt&AT4RWak3tY% zEn*wV;zu)$VZL;o-WTyr7tCYpE3)RJMQiS4z?OgRtu$am&k1M5qvi^wy_7?#HtwuX zO3edG_9`g%T`pS0rCf8MlxrT8>RbS&9Nn3n97?gt z#@|3}InMK~ylWRu&Uc`5TXZRmLC=8dH7tsn6C$v-;V-4TRtxD6T@t&-(aNSwWhQ9Sx~aqGGEHg%YZNC zLht!C25e~UPD#48OQ96s7E1f<$kYu=``ismd)=4y2SLeS1*N&jw?JerHEgMApk$xS zd}%GUMj5U{9`h|=zT64jyyUA8@pXnRHCLu`D6P?*#h~?V5Q(8=wuO5jVjCl{wH$4D zUFoo;mc@K1FIN#C?qpHT0}a^9DKKlviY|rwMP1rAew>unL_{MNe+|dtn8q}E@o9|w zJp?)A>Dj=fu<^DkfvtnT;d-bAw(bUO0 zdN%yDWGm-8(3NAvb0`qxAQ_{}!4@iPd=4Ih96a=FczfPfC9n+J>%fgI+6yU;X&sJGVdK~4oLsaQUV1jXJ#VWJ*oGUhmGh3!0n>hbP1H`& zy(ZGL&LKeenwYN_i{|5@`<0H9VMEU%f}STdrp6fEE0M@ctdU)^ApcI7`)7^flI?SW zty09+^0aRL%24vJ0j0bfLg}6;eEx~V=+A7)Un^oeO<-#oXm}lK1-7mtwxJy zVN2~V=0od^6!9sWqVuT;<)0O)B0h3vOLZv_u~oA8!BE;mQktjm^>3WvI>iX)QHa>4 z3v3sQ*m7rdYnDLyHETqCoS7}H`IP}%InMK~!4BQ~FWLuMFZtSz*WDiqmIK++xWAy! zU!QGZOXr-R!bW3q!GQP9|C~p~=7|)s;>5A+txsAInML#)$adXr$2lto-^X{jbgeA`usW< z!&-`F{5tdX&Ix1EJPH=qA4+~oD6KP?jZ>f2Nqw@9fl_R;t)={R4f*+}7_gyu z>1>`XD8ooD#H7H!4z}8d5 zR&tK*Ih5*0bx?`;xHBKQz$Zb(CxZE?1U@+;K55J+S>WR^$?)2_^X$0<<=5jO;^WMG zTm?Si27KhG5#Rh$#NW4Q5R1#8xh_{UTx;3|neS=0n%1)0AJ= zh4NOzmh_~+$6LfFkJ-|CB1LSSF6eS{gz_~_67f+mTZ*42VjIcgM?=XzhWXO#pu<$d zYfopsSXdCZ4$2odpdzNGVUg;G9pC|?`3h_90Q1~Xrk z!1t8_UpeOCTX&1Dg*Bl*)rKD@rF;mdprU)+6~{E@4iz>UBmZ=kQx?lfE67Qu=fnGx zubl5dyO$BqDM^siWtP)@z4-cZ=UH|woQ1||Z%8Wy>)xvrp1?Qf%erfX`usk)!iH>X zL4{2}enh#h|M6$9De$2<^yj!F7AO2Caj13*%uUT7O0ktpX^i^RbF`C{07v1}f-$b9bQ|8qW1%)zg31DnqeDr}THtxwD5%VG26iOe^tg7|fi z%I2s2yvgQ&`jh$Pf`lR}ipO=BQFP5Wz%i|%EmYX}bt$f}eS^}N63SmYQ}ldzf8IBS z`NlF|wZK;`;;Uu8Im|at;QLC%*YT<@XD2A-O7(M^`Q!TZbM;_8UIHI)5g!%vi4gci ziukCRE!8Mh#8xY?%@eVeUMqU;JA{a=6}HrdFdwRqyNJ(v<`XIK2@&zhVm?oxwB9#R zn(GUTL9bhCkr=vDC5Qj9iGiqQ>9drL9$4a6WD`nMPFKMmJp5}RiRn`aK|lhSMX zLMY9(iuFn9zE6WvOJ|x5rTlWCe10oM=61-?#i#}4uh%RCK4e4BT<1{3YwF74_JLBa zq?Fr0D6PpCO0npDNQg+RRj{SDk!dWHVyRi5lIhDxtKN1uO<#f81=5bur&Grs>R==In_;&~supi?3ku z{h_peCDULi?Q0a2?6pv8IZX4QWN(qF%ZqHy!hXGe%8OnP0u9*EJPO34CWjW*iKz#a zYV5_%PlwX8cs7)eohA}Ho%yPv6kEeI8A`F!*!f&2#eN5+oE)=?u0JmP*J~tO4}on1 z5nGkO)=R`z16yiprWwqa@(vgAAT2;_L-c-?NW(I7ez(V@?M z2Ay`{a(qp@#yuz98n?*6P5E=I4>uaP1>myyMTdU38+4jPr%}_{Z_w!wE@Mr-);-o< zjhpYnRqNMg7mhtA_c<|61+slFka1?qHj%{-BtHVAZE|-RY`2PTn_#=>a@_SAbbCdo z8_2eLG~H=U?m6=QCFWzffg94en_ajnpZi@n%uh4yv9ti`cPo(jY?EywOFNMKZlKEN zgzMbnN_ip1^&7Z;jazBpMl^1Vf!nHace!vG6W9I;Uw4nG7xq{>fy`GIkooEca-8%4 znJ4dyvDkABHbWY>+=Z)r+~LAu+wHK&(hQ`JEkOF%3Z##1K=OKlsxP|@Ha*=j?zrpS zb5sN_OF(q&`RStLx7p6e-*%p7>DwzFInVZy=MY`6L0j!{wiu%l?&sedz_HIw@HhLF zb(N@N+|A-2ss@x6)H6RU3i)>{>Z#W$@z7SvCifg9|JBKX1!RutSFVeWANy4~ZP&mY zeCP344)(zYZEcUUrQ#>595jLxpMwbM7>i%|ry3P3K)s4xA$J8(PrXKohwV)GhI01Q4YTgyaaTH&1TQ%-R1GiJ-wi~$C-<|!bW^`MFy{Dp8b!BBbelEZLW6FHaOrQef!nKbce-#HGoL9P*X-_h_I@W{9w6JF z3gkTV3SJ20T)P;^^`=<1D}e0tW}xcx#V&0rf3~=AXs-+QSUQ08XE%`kbPB!+q(A=! z+Uwuno$awe>U)98pM8e5Lg2EL1KCzYbUBxjzvZ5{R?%$}-F8hk-=Nzqx;>)XtLZix zbUiOSK2HVGXD^WP+VkI_8xq}e!3dDKZ4evGYoEbJtLU}~wu_A&nvL9VyXUT3xb(l# zz)g82)}Px9T))QcGH@f{vNVVe^N@6-yWg#%)28WU8+1BFr%ThRH0W48v6x#8T(8F6 z8VqTIrJL`TbP%q^9wTk9RX1f8{Pr5@%asD+;RiAS>tXta62?^ zhk@IxaSs@{o`1w*OKlk#e|&5KjhpYn%MbrXd0LkkH zvh)De7~5&EoqE90NdYRIUV~0Rxb$Vp_uO;QsBr@Z?!6j!gMr(vaob$D%tv=c0m0f2 z9`n`<+VI2|q=wsW_%^Ao}6q@6zl>CfK;Ul;r@koP8&UUz;A<|rV~ zjZYH%te_Xj|8HiN-~!;0*uGG3mEam+3hHYGuL9DqCg8ECzfrbt1s;d(yMc_2K5V(g zJ=godW!Vp84&MMWhwliEe#6;57RWXi09lp-*#^0LT-qRqu}|6J?#EZe?sY)=@hu>2 zZvisLKa}nJft=ru0vX?KplYMZ(8jyqvW)6=VmSiHHjb6;Q-B;ZX8_qo29Ry|WPdG? zZPCBohPK+kWqCk!*v>(NPPb-%>i6CAmGWlHmqG*AuW=g<+z7ZV4WdK8x4GyrAIw$K zt?vG|irqHBr-8Kndm#I_8_4nHc`FvzG=t56#w{{%8^L915*@a^(V)|=+27&9Wezw_ zl5ca*LAUtO1LPR$1=5c`spq!+od{^>;$M!>X93v;x!Hy`0>Y*JN&~l1>^BMCF1qZG z7K3i5*3MoRt{NXxTHSNA{Gb!71*GrEK*l=>NPlvG%t?Gbfb?}Lkn!XJ8P6p^^4ftao{6`+=cpT8mL4E&_R2PqHaK<)3^qJ( z$J*Ou;D*3u2>{t%k?7L@9R}T2(QOmmcG)H>Uk@5=bPJblXWub&Zd9K%xp0_k?|+CX3S^&nfQ)G>kh};`^+~(IW~;{CXW({<{Wk>1_c`sb?c_U$j*mWtz-1{1()WmL z6IDL*4K`YZOZ_GTw^QS8H*l^0#`4u|;CeOgxUGhmHEyj&q z4K}U!W88^t17nA}U1&%7Sn0xH+qJOA;ssJK8%Q7hK>Bzwki2%F@^Q1lX1B)eaN+u4 zUzMcP57GayMIY?`$KUjK+}#6nz&iTt{UGLVejG=&spo043y1dZfIXHFkb31n`Vj## zPuBs->jtVk?KId-u`ccB_87PY;IjBdhiy;z(ZJYk0zOm@8b#-NO{c)1(;-~i*kIuH ziTz&9ew#tZJ0ceIJ_ENLT$YgNFy`cY++%Ll?B^P|U1GmevtMq|Nf{aQe~W=z04|GP zbm;$XgHEGn|B!*ZL+rO}_NQ)h&rh#rf0cndb(G`32dL&9kbV8cWPJ>RXa5?6B z4csoV->KQ3c&~fRsYy;8DL@rRz@QTlE`8c);5KU9b_2Ivc`X{yXU1ybOM^rVuMbz z=(GUY|E;3Sb-vM{+ahC>e<=84!Dj^jAozlyl^knxpP@}ZxGY{E+spo7au@iCd+z$cW$6_>daTptiGq^^&j4~v27t6p{~BFvtM)rxIJDOUdn}EDw*wjT z-GV<6dFYZs+bB5wj&z1(ZFrhxZ4cePL12; z!u8vcIUkR_Y(6hcdLVXQI01jN-=+Zd!aBcJ@$M^TyQ?(2m11{;!S1E6n(c1a?Cuh~ zdkuDv_=nlpnCuF{Lo-TD7qXzyY@^@uId zrCoamKH6bdZPPy2&Yj{@TUY6JL>*UfpE^3zyeGVnKTcujF0)d-M|fK+-?K6QR9x=;hu+fjhk)Yc5B>H12^TU zSZvJ(u3zKsbm6KwG43Jvm?E&p(g5U`YXovmTo2@$aubl(@oxvxCZE?18Eozamt~*e zejshW0i?}$fV4R}#o?s@Y5OSD?KIe)CpzZ?>F;tNZC?tc?J^*3Un%=H0D1m*Es(x{ z8_4^=-v^Ebw#hb;`-$WeX`jeB@Mj=>WL?I??m104+KDR}NFDkYGU%)nou!)2W`j^A7^6`hwfokIqla9QpJa(w($wu#Ia$78@?<6YrWf3tx*WkM|G4g+_I#yw!* zUaxUeA9atp6I}N1tD?g(o^R0c9_Q#R1gde=V9;q6F7vX@!0iFk&Nl_WD|nk`!~YBS zy!}qN9BUg5+!IfV#n*1&hBWRz1Gib@CO_`(Z>Pr1aN%AKxu3}Mm}VfaN!8Ph5Qw^7=;Uhqb(ohE~Bx7N-s12^R}vGLPu;0C~D%r$~H zh%WOsahH4S-JV9F`6ycHRA%fV#{i4MoYW`oWS(P`Iob{llw7B2hekb&zxHI}!j zzZ^Ptjt!2{1{V%oC=%>oG$fqfTv)4p==X9*e(Q40tSJTfuEQ9dcj8EXHkE>Y~KX@9JX(l?QKBj z^F_f|1m6Ivb)w*@p~nk#Cr*xyt&Ilmd~jKo137Lk6Oa)#G zJQ4V9Am{e?ft=fIKba74THxUZ4l~B5)G$H6Z!_7PLO+Y#$+byx=6k zX@XgTa|M?O773OB&xZYK;5oqcz;l5cfnMM@foZ^-fo%T=!0Fg-2W9{t0nPwE3Cslk z7MKOx2PFR$!M6n81J1(!&76Od!&Mxe5_*kJ2Pa9Mr}q^*5G+Ij^@TWO{=!S$#y=l)FVg;A|vrTlE-y(xfx9I#=)7fOu z@lSKwxfrPWp~Ill3NFh%n$AIkPN#4g`_yOMW4F$B>?Z@2PlW~@Ke)_SQ1DBl%YJDx z=ynR1zU?w_t#cfo$n7<7{Tg>-r+ds1ja%TtWj?qrwYYGYhj!RwX$8{PHrXaJC(i=O z8+oq7I})gJ-Qi+ewV(Q1_joQ6yFnn^i3n~KY!Q44NSpN0?_!f29#flLIBe%N*kk!O zkTxx^vo;+ec&6Y&!E(W`1F63ksQl?PwDlj2d&s~&DJ^Dq>hIihH(TQt8n_{i+i2ik zt#P**xOZvXE(7;h8aL@V_t*|-T(5z9RC+9Ds|?(9joW14t^k+iGST7My4|32i)O#a z!2P+#ov_zEAOFy}egijkdMqE62JU=~+hX9>YTR80?rq?5p8OEV`E|c+KPonO?C&+$ zI4mO;N5=2n^W)XHAp`efjl0Rf{jSE{Vc`B=VE#(jHv0bQfa}C^YYTR-I z_c!3Oj}C|q$M<;?BLK-QfJWcxhkH5+s{i0($wq0f6< zbZD2~`=)daj0aVAQ9k`l>^=@;-EV-j-6h*Z79!(6BHP(M7N~Mp=+Xu`yhgOmg+sdw zV2`*|uu5=~;CF${@g0Kq3ht2oPYC{9uvhS1!7(!(`!j(od9uAwun&rslUaAOP~1t`hW|Ec{?%3iEk2+HqQ{u5cCNy5?le~_y_@c z&F=~z&tcXIenoH-koLYScn6UEd9UCOseeN786f=`G0VZRKs8P_JU?_^)i~Mf!lB)n zVmA*+zZL>HUJHSoM?t~Q3)TxZ3SJLnoHqe^KjC(%-v*@pp9#JOq)%)k_s>K7O`T(N zoiTN?;ORj6lm?^?j;V5kjZ)FA1hUOK(Pd2ATy$xl{Wxx)yN_GN{x-4yYao4m4aheB z4WyseY$p%Xfh@CtY=hifmo~`Zx&LMt4s%s5cB4SX`9&aYUk#)m*8|D>IgmEV*=ex( z4~^Sn;HJ)r*`4s0p>u|2@&8{gCRhRR=;JD2gXpN^41Fc10n#k|)Srb|Wye7*f}~vG z9FIa;`5ang%J$4s9>6;8hwfXDI2K4&hxVuN)77aQb;H0}liw^`%1 z8Mqzbviw@`Inm|Z*=x}CmdoDclVtFeta042*&cJQdxUB|m2e|By7X^Do zm$}_z(Dmm#x)%dgZj)bfkGWNJ9us^)blG06LDxG!mahf_H==R38o2G?G6&BJzAn1- zsnekAUl8+Y+~3?|Z`8Qi25!5?Ej4hvHEy$kn{r;v-<<}oU*q-|xDkyzVZVDGS~afU z!0ptyl?JX=5R0wF!1Zd}T?TGQYcg++K}a=fdSYenXf(r_qQ5%O3%fk!_o zflUy$Gxgz+y`TNcKkV-kK<>*PVjp?We$G#@w!;qdz6;n5IRs%TkJI&_uKGAXKA|(n zKF={r?0pB~_R*i4Un{i7b;{D%7)gC~=$M&rem5?6;V|9+>=BEAj5h>ie#(K2DI)dU z=KSO~`RzcKR@vVMWSi7!HMH3)HjcU=HZJzL=+G|Ln~c|nj+Z`#V2`C7$XFsk#?m15 z+-5Ght!y?KY_^JS8;~~JfwZ|p>bXsu+@=rRf*%0chRtN5BJyt0VlR1pxsYE zyPu>!1f(D3KxMPkV6$0tTY$9L3Z%_8spmFra+|Sr3cdkUv28ZA;lI$)4FZ+UZWkTp zyXSy=KH6cAWe1SHcL3@8ZmH)sedo5aS!b}>E4qC^+O(EAHj{yN0n#S7nGdhv1wa+s zR+l!EABS8xwA%`MENwvg(GIl7k<@dWe(V5}-!1q7Q28n-II$G~=|ccWABtp~NM9QTZv(0v_+4zP_FG&yw41WhX}?$6>jScV3-!!F zGEmvtZ?F{+TLB20Xdet zfo!V>$m3tH)Dx-i2|6*+$K9oXgRr5-xQMlaRQXCt58(p}5r3l>nQ?uXgu%-O&z~5}IGtR#9p&UN2 zgv1w))#U#UjL|0GL+P|?e&-svU1GmevtRC_<5!IV4?b*;bqj2%ShwMC`nWUBzVbVJ zwX9=6rE@TjtD09j5#e%s>N`W{#jg~Bn;$d#T?kvshf@4a`*m^ll@Ghc?+(rHZE;-H zywb5sVq>e@h3i*}z>HmHzsJ2B^LrxxW_#0sdQm_)t2{n%^xh zT)$ET?%i$ndlzh}eDB5IY;S*@edR-s_}#7fJ@L@M7*+F1$5R^1cfi06Xxt4hT>8uJ zb$eVmTF7Xq<=dEJAm|WH;{TM<&J-;K>FtavQ6sjH?&zKx&hH)dmbx<&%{F8w9E6u z1{V%}+97tEfz)dO(snD5ezgIaw{{@;y+D>eAo*5BEQU6hwv<1~BSO?lD6~cUMX<-> z1+p$1NPql5`cnX;KLH^5%|MnGAlo1}+ocV1xP~>maA>zz>~;X@$8I2PcLM207m$8* z1KGztKo#QwgYBZvON>A}Mj&nbfp&~QJ4T?g=^q&aBe77Q{_X&mr5VV&79ef50%@}i zX!j#f+1zZfnR_45ZBzpt9Lxu-PCs13=m=0@7v(NSozA+Kd1h zSG(Y^fNX=@)KMXPCKlSGPD-W2<@VxHA$%ql#SLiOhEbtJB5KHG+q{OkdsGOYiACAF z0ru#_y@GoLUl&ZNa`vYS77DHv{J!7;Alszfl%!B%gQ!t$9#tLV<{G%^;L^YIMThw; zH|SgkF3Yzxoh=5PXN5~2J6*Vpk?)~W3DCk9#!kE(7=Q zD`R$h4cr2aJ8?`1UM3cmr)xBBfq~lzE=!l_FrRe>9ji9xcbkEm4K9mUbZCFCK_{Zw zPd+R}^@O5g?Esg3^rB`z!=Q6|H0FP~fx8A=+P_Zl9w1|QP;79#Z8q3=69cish@S~X#q);7oo3*A8e(}WGH^p0ccX#Zs&U&5 z++K~l&%pJrkNKN?L?|H#tWbG~Xxt0~w_W3g4BTFDIYy8Af`jJ(Ro`zi=r)SZZKA`z z-)+$81()Sr!BJm~wRgy%8xSsYl07a&GYLiIt6Afg8n_+cG6ye;4&!Jx=$x~`iQ{x2 z^F^Iq2AxXb(#Jjnw;f#i^efH&lp{mXOe`wql&fOnsmO&(f0JRR&4t6Z*TWvmY#`g1 zFWW?}4NHJr(~E#yw@QFqx2l2E?*Otb>h>7gdR6027$1U0Vo`A(^QD+wzk%xqm%c0& z9rjbDL8no4zNhK58g%{zE=xDij#qSHMvW*`BnWLWyJ_;o7HK6Lt?FO4CG{(5y25!E_9hVY9%ZWwBex=6EHgN9( zm*rL<^?xb4?2l4|?!QI%J<(x4T3vLQm&3v7bKx+D>0fbtIul5rE)-lPxJIy6@G8M3 zAkXV>l|AI*h5#pmV9{EZ20}3_3p&ojWw0eFmK# z;nLTXV?v2Rphm^vx!Q>%6{zCKHR#lc&KgZ8V$iu)xNLW;f%|u{{};`Er$HxUqZ7w8 zpo$~uSohd#g-f5Z4cs4z{W~=Kr3Rhua$wxW~X<11?JqkTHA#$Z_~J zvB6_WpNkFViSsNpA%xGwqQ=Pm($2%u&M&2%P9W!h7m#grOMMTJ$E|+>InUk)^7uIR z8fTv60$K89n@C@1tKHzsm7=>|bQtdegU(&TWjvnaLikK9D%SmC{{WD6{{ga%(bqaY zGS0;Y8|mP(wmL3! zd~5~J9@B9?P94NY|1!tNh_u(BwYSHmJ;v24I&GScl^Pl>EPFgsr&DzPtm$MJbW*N! z@^>;&<*(eJ;}@OtHJvR6orrMR2b~6PtJuFs@Bz_f-VYgct*<-l(WyWcPxguKd5eh7 zb(&74L8nu=jHlJWO}XCjh1@*`u3zK!8Muw$vfpnL9j-@HPI8a6SF>Ma;CeR2{N8Bb z1~hKFf!hc!%k@C!F-q@wC|Zz1Zj$8~@O3cuo$%Qet77%-e)-#NsP8 zaF=P^W&`(Ha9O@AI*e_nLFbp6{aypN2VDAp*bT8UK5=4*O(ql-YZkaHK20ZJ(5V!i zIw0-bD7u`78x6WIiSF~F!yI%NbUfdT^~XU2H=uDnp9#TwVo|X-Yuv>KZl}g=FmO|v zWBzV6aA#}WP6Kx%xGbAQhq*iCqQiA=EI5Uygz%YIR35(gEywOdu*(xlv`G%n5f8XByRsUdtO78QFVxGYVA&4MjJj^{gpY~wy4+jt1b^W9xQp6@;@_@>~oH#+x= zP5~+(_8NS+2V9m5f%NNQAmc0s(uYdfCUQTKKGX?*S@7#X_V;%LTY>apJnD)(A$%ql zm4~;$WqC(%E|PYPY6CE z*em$1;F#|?Z7@fHNg;eD78Q2@T$Uoi5RkdQLU66%SAg`JV_>Vn=JVjPYzMNPonm7b zkp1~AkmLJ|n;hOGAZ@eVJqFt$;nJ=(ImFL|qGD?n`?qNJrx|p*HTxk0H|4t$2T=LH z$)M8!E=xqy=`iSY2zLbZ4jQ;GYh2H1A!sBP+M&Nk0VAh{@R?Z1VIPfcar~VCWZgs{ z`)P`76IqDl6FKhA70dy0t(z~~M1Bts$aXD|>(o_(O+eat1V|s*X3uFMd?psf zHp@1Veh^uRTwiYks=k`|*${Un6cy9&ME5U1woPPAe;52Gka6_^Igdx(?DW-mAlo_- z$iA8)xInNRcm(RBf?on2iS6rvY-cBsZUv8Y`BSmTx(xc?OU{}y~tbnW;Jx@T{3 zVwnM?Z|tv5gU)KvsnT?kJ{L+11~rU_c1HtOxp0`rQ@`){(h9rOdraDS0mxY11Cmz; zp337!gUwsS=8dAm_}UFRf70ylH*in6)$w@@kUozGvW??`^f3v4r%VmuGqI@L@cf{` zg~OPaNjsMat`_{fV7*|Y;Prwx3EnQaP4H)ej|=`runWlcQf`aoxX0j|A6%C61(%C1 z`)tA)A?`{jjGgVYYV8CJ+)i+*^Q!1D&l?On-d0CvAyAF)c7sl{=-jR8>^JE2g3I!* zrjvSR$gYe3P_cV%kL7r=fg1pqrATxbdxJrzS+l>*!0iN=xqU-${2h*O?87dDZU|iJ zt`{BpHsP!gJ`;z@M# zu3zJ(P7A?$Vo|Y2G;Y2Nmof1;ve|{hyzhoRmR2C!Xalkj+JVf;4#5r}`PL5{eln2! z6rjrAE<;;>;Zn~!JH*d~qT+0jb|RufpQagf+C^uFrV}#g^omY5kZt#fE@R(p(DmLG z>*G!Xw;EjL?^@AeJckTAyG7@(nvVCJ5Hu5u%G=~0I_=B?sx_^M>%5SX8cV z5gS*FjqAn6jhc;!!N!|n<4cXY}N5bAg7Y^Hwz#g#yNWU5duNS-t$iBQ? zwzmPfZa*X2y})E_zbo5g?sdL{9u1_ui9q_o?>LR=A$%qlm5=+uWw}6fFOh8`=Ux~{ zUm`%BbAJ&?U#^k;-xAy+_(LFL`!A3_u$?Z052xQ3<0efHK_js!e#Yv8tO+*Jl{ z54bGdqQh~~WYF>c*ok!^kg-x{r$MJ#bne!4dJQ_g!etJoWQ6dUSX6$z?Xg@24BTps zyTQP1*SKv4?sFP@eu`fy>gX=^QZV`0kIz?8yw-`tctsKaCo9v4PtGE@S?a=rHC6gO29`M`tEb zjrVN^okr2QP4MTU%eAH3pqsMYY3~f6YHwmzC_a39Tjd}kI@f7B0fSDb=)9rnY;@6~ zFXPebJ{Jyi>;I|K-vxrp1uqpW6RZ|o59Hc^b{8G`!ehs{neM)Lf9AxI4Wxg5 z!Se-I%Kq;GS+0}%Z^<^1ZSi=OVQA}*!eu)R2ClWku}kh&1NRJ#+v&okpFBQ$azgk_ zEUJIjz#jYd8o?h3J|+07;1Lfwyt4%_5L_$xeZgIVCqL}u@K~T4D-8x;Lc*nQ+YH>R zHEx%I`+&wxniWb+25MA3y1`}X0WvSWqRaKfYtZ#P66?oG12>>?TU@xz9p`M13x|H* z341J80U68JWSdCezX9a9Z2^-18j!ZhP0bDAGqI?g9J@2d%{Op!HEzVf4Qt#j2JQ_S zcejE2GmU%D!0pz!p4p+qB%ns+VeF%^JS;YF)4^q)a|Gv#F8iXvpj#t4>jb~7>25dZ zwu8&^2#|h13FNW&w_<~1px0pI9kDU`=Z=jOAjb-Q&zKX!XJTPnD#M;{<<*O(hf+qaR$B zGSQ(geuGY{X1~tB?bNuf2CnrB$CqRv{W}S$#^oM^?s=knf#4;YZgO4-))I@#!LLQ< zS|IDb2V@@Z7aJT``34)~9*^a`$-tedakm?|Wg55Jz-`sIWNq$nho4^jl0vpU7>M%4BQ5dJ7HcZF$t&{0pZ$oi^lcO3!yf#DDKZSZsojC zA`vx;`&W(IV&Eq2isfvVf%`d)+iT!1(zp}zL)KtL`CFxN3k=+5jaz5n{uW%82Y_tr z5#UJRlVXE&tJPp5^_Q{y>^E>{fy**abl6tP{1B@Wii*8VbgDI-e1pzra5;XqXgUoB zoetr$-EA&hu6bj?Ipo4&+r6;I(g&nX>q#fK$w0dRnO|;`?*-B}xziSeY)bqG_mRWz zTN_+BwAU!@gn-m52QuFg;3!}Nkh~6{YIm!_X0OKWbm1x=J?DkcQevS$Y}@mclZ&Z9 z)_G-{$o<)ZA*rtg(l+BLFxYMto%=PN4F;Va(dpK7+Ff+~@I#gDH!rt+<~Ds-^+d)- z*$-RF|AY9Obx8#we8vjvs9&(#$&DYVbaLakN=xZ93YXgv1Gin{ZgJuIRU^R4JIpce zhAri97yhO%J#qGxzt*o}W6!fNq_q_LQ*piEvSf=6$G~EPPDHccXyCSL+-)vgKb??r z%1@Ttf6+(!L+paC-v6DjtG1aJ&b>q6klPd2j*8WKI+mC0MIkT~i{g60WtjzJT|ji% zPN_k+QER8wh3khcRhB($9s_$|OO1hj_?vzmh_kQ!@6>#la(+lPGXNFW`gJTX0Rz_y zF3T*@VgGC}=tMO8?FMeE#@%P&KA~}w7l-IpLQygP2V9l|qC>wk3_2Nm9GzUC%6qws z4((5E4-u?8e`oH`EwH8RZo}X7b!VJ?*0CtN^?MWN#zE+)xj^n0;IG3`2ph`pQn6cSu-o$ov)yf)-JN20kHPLyU5WWfS~@Tv-Gk&~DmaXN0#GmU z`S{VFmfJjz7tVd|FBSVo{>B*})Mx#1+BWl(gt{har*4pT*hh;*XD*O7N`R`*_QdI6 zw_V7iZnJQ?oqR#a-WUI&xQ}Yw3yIIc~=htlcL{GM=ONbMegircGk{RXb5GnS7^12>>?TMXPrjl0XhZP&QH zE?nl9-y!_V+~ZIFt&`tw*kw+7fXs0(kaN6G&=OwcutL;YRwL|ke=~3!Wc!IhyME$h zAsaa-`9}&QaD=1dkJ~p6`&zM&T))^a0Md^DP|f|_h8P-!OTDD!A$%ql)!#d$op#Y- ztX_jouV%m0h09hWCpfXD7KXTK`BRo8fWoZ%}=6Z`kr$cnwfoyY! z=-Rn5=q5ksv}Xa;`Z8`s2v!n{ipMWpZuCx!h_Wc(}&nLi%0b61A!^`H@`7xLJj6!s0br)eBjHxYGgBLKfy z!s0*m+BCksQ$A>mI;~o)`wZMpjhlQ?NH^F2x3X*f-tpxKpc*F`2Awp~$pzBRc|gXn zN^CG!h9bcbvcd5z`?Aobn`vb-5hY+NV!Ey3>r?Xd<_V{Mm< zZNF{R`S{0!iN|oYn{iTlVT*PduXTCIu1f*xMdc~wFEJkq;y8-0xPFaWXW&LOZmWTN z7q~3M*VbsB6oi*5u+n+-tPYy@(BY67zDPM{hyeFmG>i!tt$PzY8Mi^@?pxGY}LVcP*0 z9Y4uZw(d2L$&Ik3#^h%F&33oO*;l@_h%e2WFZ<%Ss%@pyDO_%+6o=IA0jRiEcPuZt z2Ci4*mb-A-(EI2gVyB?m?tQ(G)&2YT#_hl3je+~SwEcO#h1ODtuD?gy&-$z19C)5z z`IfmqCajM2#}xd{+++at!a5ce$1bhi{r^TA5PknnegAuf)@zWV_FwaUp|uI3@86;6 z-<`a|dIB>XiMRTW2~!8PIPaBXp2P3<}1 zhOp)Hd4o&p>%tBGXkDq_e_`Hy|3w+W71b5h6?GNGl@(tIm-^HE{!2j22rfiru(GD) zifBJOFK?wc&7U`ypI{A_;SBs=m4W8YQ*x zNjOqhQBxhq>ArfPt=f`#HPx7Ub$-8XN4JqTZ+ALzTV7GUrZQXyuUFc{m8>i*uMHz&XNBM$Sdhj!d420Frf&K&+)Q>x(O+pN={IdDHXlY2AI?BFj2uku~Mo%dClz36M<` zZ4F%#uBxeBFSAoL_5I7jW#QUzbxC+$O+D7f(hF99K3r1Q-^2i0d6gAws>7v&nH<2I zx2({};j*XV(EagE`84`(Wm-D3{(pWK4#?a2;q^;v>K33QO8t4&>j%wGptv>~o^MYP zmA(Nsd{dT(Kk115-;ue2$J%vt|djB^}8EeBk1J4Tr45BVog0RuJ9{cLAY4H3h90)@Z!Fg1Zu;P;@WWO^15PlCT2rnarBBf&hiTvUl8Fn z9Dc?04~)(J9u=-DuPF^K3tw3uj>?xy-3Jvv&(A-t_$#WhzEqS3>+8zWGX40>re_0v zi+wL1e1COKT`*i-Q@^G>SX+b6RV>|it(|N|7;Jw@O=&n7sj0wnqRb2!KhAgF!sW~T zE0-@=Qpn+iuebgIoF(g#X{>|QIQx`T57?hyTvyERM;F!9UV)SUgm~E(>^}9KR`-+p zmWONCR+NN;a(+9g{`|EV1Hl5g$L|*d{j+W0t7y11W@72f{zrat;$!wPC_evnSmA;d z)nzq~tK4m0Kja+Kg}*_`ZGc_U&PhLK2Dam|qPnD}wie0pl;a{nxYkor9xl1Uvg)g^ zsIFO8?J23LiqwXqQRL23Wsgbx_OmliJnJejf7f}UxWMSjSGJ^uvdZE$QBO2n2X`#h zYHf+9sv=rdTvt-wZ+|r}Q+gP2tj#FCn}XZr0;&3sY{4o1$n`fWRAflL$o^W;P*)?Tn z+kVnNWuvm94zs@UTyfn_gW9JYR!*t}%VVx4YhDVC4H za+uO^xz(}ua%%)8$|(>YW12TyZWXL^t`(kwZPu}LNZqmcoBuz-a2d|Pa0Z4mFr0z^ z^E1%f?df;2@n0Ux^BT5ajn&@qps@>k2T??81M1J zCRzFa@L27Ci`9L7+$5{}fXB+vbYDMal2r=b?V2xhj-6!f*Zi=w@(%c^*gp-D4EZQ! z8RE%-OomiLE{9Bjyngf~>jlVe$b*m{L2iY76;cja2AK<)0!fA(OhFuwPRRX`R>;>O zYat=XB1i^g3S4F@9^g+g8UQL87gH%E`KsF*TUw}j)rI1CC49GOdM949a!y&IH zBL>KQkWG*ckZMQ~WGQ40Bm;6L!~;1VG7j=K#_j>ge#rBXPRMHHa}{ikIpcq3j(?Kz zIvMNlc*s7;(~t)tcR_A~G(k2%sv)Z(%OLrXLs&C2fFHLUf&aebqv#eK^jI4qdmw#~ z$^XWDg{*{J1Njl;8OU3Z@tD7-gR>jQfp$pGRKx^4b*4S;$&Q0puje!P7AQAgz$KkbKA($ZL}^Cm=UL z)40Hby{bS@pJfv64`)%RU{BTLFecRfy-q7n8R`=JRGhzYm{mrYaiH5Ct_TNkKFb5xC z$g|Sz?FALJQK_)bpTBJB{KeDL&nc~}#Q$t-Gy#)6w@zAh5aBV*Wy`(U> z{Nkna3V44QJlhDL0Jk6Y#mf~7t*?OfqD!ozvA$y5-EP36o8&pSeDO52 z{e-gLzdWx%O!q%TjR%JUbMtBa=_7q>!gWF38?+zLwqL;*%1mCK7>avz8+Jw^H|6zp zb+8k}&DZLoOu$|1E8x}@*V(mjOFWX@Hw_j@iOTi;YU@882zQ|IMleHbP+Yr{cf zQi_;?CzE}}C0Ev0;OQZHGB7k4Er8McX%kPN<9X#FIk!*n)z&+4^FegEF;4>p7b0(V zw$B?OBV{1N_WN5ZR&Ae(wzwp055bF;rw7$|y%`xu8{$zal?%RF<27(D8|e#PP#Y;P zuI9@J{-N1L%Q6TJ?{6F73)(Y0Smn$H z=h-iNfAAtNr;~N79ob?`dW`7)SBKbo$c`s|PXUx(f!*`Mb&)d8?;(SjJ3oM~SP@*v zo87o$ubw|kw|n4g@O}BZ;)p2^d3h`F%o;sC3jLX>Kl0-86n}pt&TCC}q*-Hp>ncj? z%KZZ$he!7X7X=rwg?i>fwE)&o4|Y4&)p)rp$yZg};P*|buCEH$;vw_OiYmTPu*9J) z&s)N5HpJO>eFsa|N@)53M2Y$pZK{7Dp zFjtj7Z^6>~>W`CDCM7G$SAiiL{upi);VniCiDJB|;jA3*jqeeXQ=}5j27bKGBf0-eVR&fd_Zs z7(O>I|AGYzoP*8u;G(&fb-I28_>gP4Iu2|e<-@~ZmHpjnJb>aTm2aP^{m>p&I8CjK z4T=w=T~rWU%DMF%^gqtRXCL};ZtfiYI~^+@d2+x?0mE21+E-huFP!EOI5YK^$qYwn z=gjFlA34u+=W`Xi1$unyGXDH$u6@>>J;d43T;~vHZJ~C3w7kE2Kh#Ts$PLcGa8Tf3 zZj7(4;-hr%fb5u>bDB7Wd0A6aniyhmDLl9w>)!>@GM=kBXB#G?>U`Kf*GR=tzPh9s zPc`%V-+(uRFV3^=x7*`*oim{>&hzEr>HXkxoLW>w{1{_t{J{5{k-id~)XTK%?|zdn zcsbv)j{ErMz=6y>dB@*=)8BsyXUsY@L*H9_|Pj^nC;q2wijaFFbwO@urfm>l`krM_-`$Fc|25DU)0a9Ka>S^c73$I zntv!w%-4_l#lc>JkNx=L(q6%j`S|)vn4^#tPyPh@=fi>VA79_@<8dEfe*xn^ z^5g5DNBuA9W6ZP?sc&HRqCQa{V;@TMylp6gbuTM#1RKDGteSQGZ>r&m z^D%3qj=3P-OeleNI<%o|Ux}E)oW&hNn3dSCuS_12aiM)F5!XW2l^56f-CX%%fxvd2=6lCWiDLF z!8sx#uC2>oy=GZBQd3)Zk!5{D=<%m@;YePRs;;rDCCq1C4X!ZX z#g@@4Gg(to6~XE_8ee<)D-71}Mwdmy;VZ0+G0|vAaWz0_c-vbCR#E~$xH4~{M?UX6U;JGvxXfve0Nqw%dAuOf^dQ)U0A1Ab|T zk)hvD9dl)r9v__)jMU@J7wonk8jY6`>~S<>RInmiU5pX119kLx`)FSAwX9jT=Nu6W z`B!ZToVjguF&nqe8G{SE)*YkqQxnkKidc)Q)2)$X@XG_%p)U)ZM0gA?)}^v@RP{S5qIs+_Mg#E*imgQ|oajzICNmBndyaQCydqQ87K; zvie2^tF9=mKpXY&0=EsSajQV~UFp==7ZaVTDyK%~ca5@Sx40pnswGfXsTpgitDx`M);8XD!fUIFF%}u zXkd3zu-?9?WnBfYal@nr=|b)=v3unTYh+STYW{Bdg4LLqn5VE(U0jJPy?kfTue~CM zQxPl*yb>GiuMJk?{UO{2xx}hR3nl!$7kwuzM*B@#*2x%`_A8Oj?HcFWiuDvUF^20g z-|@;8-Uvn?oJ1xTM!cM4tw%39f9-OZ!Qx27ZpE_RLY}IkYwY_dmi0C4#~i4_mHgt` zHBsv_tR0N^f)T-@k_hi0ad?h}ZD$r<13u3oIcc)&k-R)yH;?bE**`R4y~=f~qK!kAd9iol=51&TRw4Fhohj7Uh-=|5SR1$R$qn_ zd$o0nov*sun#!^W*Z(){brdf%V|lEL@|~t=5&# ze$=RTeIQ(0M!Wq#_fc!LCG0^wc$c-hWIg(5VeD?>JiK6t*B|FM;81|u9QY+5i@$^9 z+)F&n&JBOQrMNP`wqkAA@i3ZaEnpV$UT3tXGR&95^XlOHYOG+m(nVkEN}XfAW&L6V zw&&I3CCBQzKy6J4Zig%^wO+I4<4w5Iuv!40#{E!z`+)9azjM!xalRnUC$GYQ46DXRx#M{MsO6(TWd!3?=P%TO4d(CEi10TuWzU? zmRKi7S7N!tGK0RD&v@u~UTG=c#I!6QdbGH7amDIdype}hr6Z|OEh7>j>Jp>2o=aL$ z?Tpvb{O0GxPSrrx1s-yeK=7e_2V$g}7Ez zy8v%h;=rqN@~oXxXSDy?{@WSNi&Wf*nOVm%iZuhrH==(tX=O!i9exJK9*UN=dIW7r zcC3Y#eV2M(WkqClO>r%}yk;avj@st?zn1lTYkpOvZhe0(&U8lN_3Y|cMFH$oL@;&L9V5|_g7#21-tE;$eXAS29 z^%#E`ZC9}l35wO^<*&>OEL0ZHle_oPx~e+d_^qqualpDrueHw?u^!@ge=KW}zDJJg zW2Da694}kW3D|7K$CrAn2(`r}Sjz1-M#-My`nnn(Xn0<8ved01yOQsh2K(O~JyqL> z;}q&+`%X#R$9Jl&leBuVXV<4oJx+})c|7FXr&aWvxuK?EaAdsEg4Yj932Yuy45&)3fk$lF4XJGD#DeeD&s5lJ-9E4 z_wd(6txNSgX}Hi2`Wy~U=AZPRn=lX1sxshI8~=LIa2D1@k%ec ztJG<+SZeJzwv{@rtT;KcBgdQNT>C9+xn66h?<}d|$)Zv|Q|j;nvGNCAmPoC0f)cDK z#hlmLuyZEPTPdEaq98dSfBl4cJ}iT%jvqX&aNO`{%VSrYd<6zahgtm;8~jj)|QjL%faPY~MY z5YAH>_&G6g+ghxiy1+48`+<$+&d)Lgu_DE|J5`K>TU1|kt=oB?&Imq)%@fHT+#d2G zQP~F`=aC@x#21y%3#%)F3#%gY8}MTwa)Ip+<8hCY-+{RtARs%Fal8WbGVSmRneC^( z-~Q6?Jc%^GeLJ6pNBej+!!|l#ulynjlE7CbLggJ0!{I;l>yiJ0cj z$Mpw8CONY1b^IFImiUJx6__m|Jq5gy%wc~xymX!>8q&{?YTLd#S;?`^hcoaUi$9-) zUsFlUz(=x7mj@k4d3hIQtjt@yVt(Pp0bJ0DAD7PT{=Dvwg!(_`5%T)PaXuWN<>xP* z1SGolk>W?Mp=$@t0NT6PX^-Eb_$ABE_$P0Wm(Ff-EMq;#S?{N1I55|~EcY9EI?q|V zJ|(Az8YhTlv(w(EoTa=x=Bd)L{pse3Pb3yO_TL|ed%ZXh`P8!XA!g0d{j0;L)GG3{ zNUiRJEwHl6zdqXM%N}&7+c$Y+eZP6EZ*?us`AhJn9(SQ+=9l8fxA{Z7++2n;Jp7~y zo|PPUP`4Lp`#GR5B>RFv9LIysMO6E85Z6aOHt`$f=}>0mAUj|25RudRkPVB*wt>%E zy4a_aH)=g^)9}#3R<2>$fMDw==K49oN&yfc4l^}xeTmy~b*=8R9|7x$nQT~7*e$OX9w)5o< z$&usvtg{PCcp;T-TnVeL37%Jv@8|ueEmroCKDqX7wDDNNr&}YH7XOV zI5$!2l6^~8EM6Q$m-HK&etw>{P3gt`?6yn|>;4mb_)0;wGMv=+tKwO74wd`*_u`5o zPQ%ON3HYT1A8xTolC;xhtQ_Yvm!BWw^PPvQzW6aodyHrl-VE|{=BL=1H_6 zyG%@tnNr^elFLE;!lQiTfQi-m$W;dH=vUvb!+tr|F!#Z^!s>)5Dn% zOk2E7Fzs=Ftbyk|`BFOG=d_B8zPJcFsFygEmGN59&&D$xM*6CLc3555GuZ!9zlPo8 zL;EAA*1WW)zJ%dK200J*Tj165p_{WuoLrD|&P((AHSMc1L#q~X^k3P}j^Yjoe#>+4 zt|&m}R)E24C_#L^4LDCVT*ae#6es2C>iJOW7|~bsw{#^Q${wN_wVw2I*VN+nRM4#P zy<^}BW(9s2d@$1-pmGdzNL=1q+;!}sI#3A-v+n5EvhVH5U4}A#bN?_c2ie!P_|H4A zGTTb@WCY$vDaF+m^;6q}TFRTx$CRzH{bx`ghW^JS-(zIR{jZjc$59DH+v!1gNX;v_GJx?uC4d9&OXw^Au(a}vh?z#Q82P*g5*BA+{=bk&j*W7da zgNAzUxhkJ?T)S*|=Wqu8@6CW8&qE=))6?z_1YXV0E}`Rp&xZk>JPoVjzZoYOkz z**SlkljKYBt@2&vyVduYuiFR51D3TJaF%z4_siagynpkal6H04*0f)yy_|Mf`qcCQ zqH0ZlGW|gMG1H^dw@iO@`peS~%Q!bzL)XijGY;O&G;arG4mUlpUFBis~{_w zwIS=PS>MUJCu>L6U$WlKTAUruZp^+Z`_Am$*)L~%XRexAKl6Jte>wAong5wNEvG!E zE~hbPQ%+0H)|~d7ojJR6_U3fw;IRn{4^vrpr9F|hGX3-EnbV7=cTMk}J}P5e#xWVC z8OP6^JM&+eZ)d%qb!PVT z?3vj&XLo0hoO#mBYi700`unVZ&PvHWG56HmD|4@zec$XCXTLK0*f|sDOrCS~oNIhH z_#XB>;ro@3X9;*@+d9)5@qXL;Bk%L+4`y^_oG~M9#ziwiGsdYVH+?(^KoR@NXau&{dGWYe|@a(GD-H8bXA-kkZP%)7Fl%-WkhZ|3zgzmaoe&hzMx zZ^F->+%x7B&I!#~JLgvT_}rW~=A7hf^;zvse;k&Up7vDQHR+qux2FFnef9MFr=OQ` zU&e7W!ZY5PQJndHW>VJYvO-yvSq)hmvzoKEpoLem-p-yf(>pVF=E|AtFs6!fN^{oc z+?rFH+W@b3=Dw3_&7LzmfA)7~ch257yJz;n+18wKbFRRQxM$9uIbCz!o^uNB!_8q_ z9hS8l@LBI!-bLPkcYfOWX~DGSv@L0Eh_fSYPg+;n{ zqaCy0<&5z&uFd=|#^RqdM`RtAb!yg(thrhBSvO`ql=Zu;m$N+C)3UR(^RolltFp_p z>o6yt{C_BW^Ee;N_W%EF8)F~a*q1CrLf5`u*W1=4duWo7&{(pChU}FFp+pVY3uB2w z3`LPNR4Snf*+N4?LW2_D=XJj4?sI>?zt2Cvf11aAKg?Xqd7j7dI$p2Waa`6FtCU^O zZe;&#|7Kse}2zm-@@2Yr^L^5Q(hjN2)wnUMFvof0O@^qsl|dN6Jp6p4v!V zuYRaD)>LhTHbz^hz00mXuNit@eT4p}{_CN9u`ul_UXoYC)Xk*@R zt7s=8&w%Kt=;Y|k==|u4Xyi0A3b@a<(v#9SX|?o?bWPeK?~sqlKg+|FQS8-4${2N$ zI$M2H?W7IVCh@+%y$5qj}fc&Hd&rvoL3IskPFIBNlYG z|FX9@`*~}f+#c=#H!fP0H&h_fjo&j^<#}qB@s%;noW*ayYi=|@F~2a+nitH==5=Dq zXe-m+XSa4bIU}9%&Pzn6boV_s%RAzA^LzU*^Umk^=lqOddyp5t_k;prScw#ulI8yL zA^C(7uU1fft%cTFdt6K9eUD|oEar``*5Zt+Mi;A_)yo=Ujkl&*v#s~753Oz1r&g-{ zto@ul*?!$#XfL-vv$O55?eFarZ>;yecik)OOTNbyKMXNf?b!7aB}=*^6_AUv+OZwF zR81!5q-#sHGJ0*jo!(84GnyC=8%H@m31*r(&)jR4u&P_Ft*%7ncsqb40)maj+~^m;mIdyx3prqrZ*$=?bXwaSB=HI?bYU1&hJ6<7;E;ASbL4Wa+9igyz%8)rvAQuOh2pts<$y_8yk%;ja;j!y`CI7(#!F0`VE2+!J=Sw_*|U| zM0)Te%mhhlOEpicq(7|B(Rb+k^b})|k!vQgDzDiEo#Kw+M4gA6Oy?=LzdP4m!;r;e55NXVhs!|5otgMo#R96hYho9%y4jKp9 zM86KvG0`c}?C3FaQUP%uQl+`l&r+^*Ny>7LJ87J>b#AgZ%=^~6#rh}v-Tfil`T#`X?V=W^*V59{*;V zh-r0|`<2_uuSD)VvZ`V9G`==Uo8MT!+0~tf?Dh3-HLsUfBXFaGxy#710%2;76qMuT z-NrtnieJ;O=c|4Tzk{FRkMdveC;C(TkNutg7ye=Ytp7W2xnfW?s1?)?ibYEk3F<}_ zB5iWCA6aQAkzj4~gXos%p6H?IspxrfK3iu%X?%VzD8t`Aq25%dYn!!QS`zzZw7y;6uiw%O8)?Q;`|b_H=Qge*LmGd^~ZrqGT1wbMCQoV*qKU_ULXo@mOAqOYAB}irE)`wsHy5y zb*uWfT2iyLR$7>EbDemy&-d<+?s#vtx0z>23C6M)KL~2!gA8Ll55w2i#_->cQdg-_8taBus`L28f^O$)D^P*CLXB&ntJnEWJp zd!Kw*en1&d7Fk4eD5dq$#%u3s&*;x`z7Ocf^@rJA>EM+_(=$`eSIE~p!L3!T4#dXU zAn?;f$fjV6srD@UJNu3u?+kJ_k%xbA?l=YAME41|uRGeEuGLsFhpNq&g<`lh^0&XSL_D^?2Zbw??vmRGB&52!;_RU4)) zBEy9HazA+ToOV^aqs8kL$OPf8$gnf*Bq!0`;BIC|?f@TWc)Pt{s2Jio$({XY$!pX7 zO@5BwDfl%=hUns(hl<(UbL;^?P~`qmMC_I$)qV z)m(3W4d%(SDsZB@*@v8eh+BR6i+TQWBKf@Ns%WHH!N?+>ua7iBx~w!*HMN=A4xHal z9j=a7r;+iOsq55j>K^rgdR)Dr-cTc;|H@iDO(MRx*1BrFwZY(*PGEs$s^0|7Ez$EpYFfs z^D=rD6nG|4ZbeS(ArFv8$se0Pt>=92UUl!dg@by56nNygE98)ZA`c`;)uo5UT_!0H zE7jH3YFDD-S89qrNN)(

    mMGqvVulsFtR&Gv*p`PE{w*t>nGz%_6(+@oPluL>op; zGD7EQcQVX`=u6RQQjma%GE?RcwM)(PvTHQnB9?_w`M z?2LA{gYj-Tg{d$MuP0S-F<v+R=8=ZvVONu7Z(mEW`hH-Fr%5wKylZAu-+N zJwBoK;w;=z3ur~PM6JHoR5P?ksk)!kp4L9lH|rnkU+PEnpFuZ;jbcV=qk^#xjI)(` z_y^;pkxLB{XO=L_n#tUCy0g@&?B4Hob$h$nR1JAvasTCD8rW)aunxSkD>w-=a3Q!7 zWJDK6--&L38~B=>{6{n|`ggc*4ipS&f=B`BG6?;aR8&rs>&T7d*6g3oayL0i?Z63b zr}d#G&$iB6AKB;Zt9B0YG22b?2l-D0anT0U-3z1Zh;HY={jv8S;_p&&Ik~djKsMwS zR0@-Q(V68ea#q7?eCr(Iyq|Plb`OY?lwr{tvTf=Frb5-9CW0X`VqVeOpbX!^@|EjD}2Wr#xVrCvIaoMTvHgq*N z$?NE)`m_AM{UG=!yneGn0+&{UW9cU6DrM9-qoFa-7)n%4q9&dL|3gE0WIX>gtejF| z(UvKRs>-gqqQ0#yp~n7D+fD74qutPMYj?H6#HpzM5V5~6Y{O{%Eq#H$R9~ql8IF+y z_Uc6heiL5iK@eUmtBduN)t@;0s`a|{mKDZ_%V72lKMnMp8cmNzdKVJ-|FCpHx*?5{ zr;%SPz(psnYakjAsqqbm0odQD-DmX{3{( z202Nt$%R5aDUvLuO2^?O?#TU>Ac0%&t!H$M{~*ob!7r zs2r^aw#<%R4BzRlLJ`I=u%By5uS?57=0~JlxsZ|pV>C;f!){)sWwBqr(k^J1iRQPo zpV%2~jj_fgxYiKs+q~lqc0aK2U6=uxXEwYJUVolDo?N^Hr1ri4bdUp9i5w^-u=z?5 z>hsDtaQ8)Jp_-zlY5S?HF6obx-!h51>&#tn4<`6D9iFZaEbV*tGjKRNc&Epmhu!vq zGnwhm0VghTSGa4zUs<59-R?g3TlcVg%stKNz2shVZ@G8f4&Ds!53e>nO5}9xJv}MU zk*D&eRwy0SG3pd`m3migsA*a=-q}p;O)aVq&_}VC1{uSR8RjphWi9X`S7UqRdv;wt zS(2ZoCJ%Y6MA+$`Y9AQtaoU6WFV+rwh11{Vg+>aCJ!LDEwL$+Y(ivh#th&}gE8^b> z*CC;>sEx)*GnCWHRS;T&R$JRh^*ln~Ll!D&RyOOI61cjx+4W!6uDd4Tu&dCE5Biju2d z&=U0O`XkmgE5WXAH-y1h1+FXa)^?k?^V|>JTAoI&zb!b;{<#&j1jiN@_^KRL&Y#kH z;?S>ZeQl?m=FRn1P?K%r4FBYr{y^&2uV4#j2R{Y(i}+Po#JmGaZFLaOwpQPyXIMLk zz^ANVtaEUV3!RAjI5F~V*6d6FvEV8gvaqQ8%S+w#enuZEip4PCE&k>2m*wNZ12*rm zci~8Neq5lgs=(bhCYon^zj;b{Zig2Z*lx14PTEFIcmQ6YBz#^U<&-i&{mvck)%1T0 zTEivB-cuF0?6anA53onUAWLMbiezs+s^ImZt+U{ zL;YQx^HJdaN#XO(j_m_onlG(UimHnGlDa|Nq3%-;t6>$s&|GF_nlr7}sP0dP_qZ(f zte;3v$ZLt5txyemC<9>dCM#d+7xWu?Q)3zU?1)pHb6+@8fnT{o9sdBirCs>^yJEjz zUuq;tFiBrauge?Y0mI5I5zN^=cq(`%_%`Sl-rIq~LSvt5ZWbr*2$`okjB4a`>^)_G ze-97`lZ{lP0Q{e2X9dTpvF-&$qR)oEe>HZkZN!Ef)X61581-~X_w+cwD!8qC5TekR zqu+-AmT!gE=D(Hg2W^c?<`ugyEa!ahG4^WjFc&5i5izW?^q{0kj?`4`t-hdMMlpz0 zDW~*vF!+jTn!dRb4tImIJi0pie)NY>f2dtVhPd-J5a)64XKKvSzU=o1o~EjNE!Y@Dq$1+X z?1vS6NbVr_rDB{d@20-aQC6y3)LQ5_QSG*Iz`SF|gQAoFONaU0>mc-@ozZWiAboOo z5s|;{fz+DH!@*5U*?qN@7>bCk^ID}fv1c+d|3R~o(+ak>j@ZN7R)U{#QNI$!_JecG~e*y29o6aC$qV{5Mgt)=@Fo`Eg-# zP(Ru_+BMo6UW$9{9s65t|J4OvBnr>8)=~Ez2hH5D_SzTh8=|5)3M!4AvR~bjUS+SI zCwaHg${LD#fxk7ph}fSyrK6JR_wlcU_c}TD|6P{b>y4;cJgyy?T|{8wjc|sismqJW zwd6&b4$i1LAoZFiyE$gD&!s~4)B4YOm^4T-$tLhw> zqe0y93Vnm%Jr9fQc8lsF!AL}n>zw?P zea^fJB6`^B1Y@xQoD!~KqGLK;$fYy6a+Z6>y~f(f=sPX__HY-^;_fDIM5hsTXCCi2a=J(;V?{zfJ{3m#8G&t9D?QS z)oyBkY!~8s?VU+r<`0}4Fla%z`ay0hc-j$OmiMQp`Sbi8WUpL5k@MCpNC_qdZ<9&C zp~|}oOEwt9yEgh&`21IkgwkN7kW>jae;}OW#~`U|Qat>C1Ut}CP6ILQm4A{Wpy8e< z!LKVz$h}R#dp*@*>T>mvnn0{;q4nS`P376%(>~HpYbEvO`eXV?{UvaD5(uy=+2V7v z4qV7o>oKACX2RTMqf+Pkh0p=#2S>TLbDXp|p+zSVOEaXc(n%>#sigiQvb>@9)E9!V zj__WVTdPq^KC$-0>72IiT7~R*yR=;%wxXuf#PNt8og9okq6*9AMEps8luESRFpba|Ehqg;)++D+-FtX9@5A1b?*@0Anqdxg|^wG{l`e>2WGaQq?9l7xRC zfbrd8yjVJbhKYkKSJ&qW=yz-_mNA z?@Y+DkHMmsVTaBZivAfC-%zvgaUrxuA4w(djb+UjQ+=VnG>a45Vk0?)+_D*cwFt=J zJv8_;Al+f=cT|9-QQzOywov`u)51)hsb}jQj48y#JfpgqLl(PjuW_e)NBy{Y+7W%8cmTQOPp5(VC^&bS`<+|aYvHwq<=#bYTHk-bALc(#)pY0I481mx(d*udZVgey z>^Kn@Ye*BMrBaSm1n&O@`4jnu?Bt`wnM#)Oqw+X)&1^N3r&G}Hj{X;CUCu~0Mi}ve zWet_yS5Zp$2$tuv9deXUao*=Si=8jw<%_^Tq`BkKX={?*d$O+cLH8THi{$xu-z7&Z z^1p`ZZOHyR3o>jN)uPQ{>6Sz{M|Va43fEv+Y`qhx*+Y&hMBG{OSDb@3cv0Hmfcc9G zFkO2{PuH{b=ZSC)%uMT$RSjRuRTP3mCz-p*U{_6p1(}N@W265GHN{!n2bWO*l7cS5 z!r-Ck@aTB(a9m^>mo!-KhDsAfMcsLnSo@6fvNBDXrOZ`sDgO`w%5nahsJhw(j=ZPZ zm$!6Ct)_h;xcx-9kaT0Yk%MNPj%J)oW*&w%xf-_bcekTA-kSz*^_}-1y5j(L_6L3$ z!Q`gG0jA+Y0gXl?yW)giQ&9DNy@U#67(Sn|V8YPnvrf1e4&w(An)!j) zS*-z%nn-Smq4x{QZMC`<*0;U2;o1c4Ittrc#uiS~Ff@~pv)mIL0M}m#ZUm8N$!Lrn z$c*kM2gl+`D$GEf{2(VktRr&e(){fSSz5Y2n{uwl%17=jL#lCGX5xRflE%1ETB$hk4jeGb~!dU=arAWz6=6xG&$5)xAnUqwM9ai$Ti9lZ3+qx&t%*K*X(TPvNIVy z^RBzoi^a6`;3IPGec+%-LQ&xr(WKTWb*a+Zc)$wCOY-@zWLz$9D?cj};dic}p52G8 zlneh>36Iie`XplTt7t8&VV*xi5jjfDf6i!UK59OWlJ>kg5zhV{a^idFt+}v2d0^EX z&c|SZ-!iGt>w5RYr|$Chd%1WU`ciox_pcH~5`((ITu@6M`eY`o5BsxrQIUt=V^1EC zL;mnx97f;3_8m8xnn{l1w1#8p;`VW$b0@&ZFK73!=L(Luz`Ngn5Pf=r|G8frM3f31 zT8XFNLZFEH;V!wZsNm&mOO1(7yWo@Za1|ty=~MHSs2gf+G^d_;Du!t<;Cy>STM5^- zLHki_3+A5&)?Y@gR{@RrQKJ{N+YqAFE4-N{uqa;}3(Y<#iHkrjo569V;VK&0%g}-j z2uvI2Gd)NVx{BY``N1_PU|RtGA@((XlHl*nnBNCFuVUeZ{>>+!8I!? zIMWAE<+`I4Z4o?Ryb_|6WTih^QK+G1vvOUiDo>z;+vKH^hGf2O#%jt-!Yz|bCai?2 zz5^z(3Ld-)?i#nE*U9VQ4G>u|ta(?!GlYuDSdmBO!EY25^+Slz{t`@7veq3Bfu)DI z_#d+&5g{4Y)e}ray1l>-G2co!@Z&fYli}KKp^QrKK0Sjz{}Z`)U45Jc(k9{1X@IYAAv(?xPEiUDw>(zmSG$5!8`sJIpvcgPmj*h? z^1t(22T!1D%?>ib_xH%NMTKUZF0I0;P)%+O+ujdeG+rsK)DRVWGo_c(mz+CP$yB~m znhL!&1$WL#k!y2}LPW6t)<2G*vz>)sD`1zhE842i16mT-7u$P<+Lppuo9Et7gzN2v zT3ZISds3s2*!K`$o3*Tp_cJF-q!u>gf?bJ^D*kdk>(_H z^_AvY^8<5>`7Z2Ah`%y<_Qk^SiAM{+-7)``|BqiVhz|@r22F6=SkZ^Mhd$9k=&E7$ zJ3m~T1F^H41UIx0t*xXo4CnG{+-i032JTlcslBx4s8u&HP<;-_r{&9XUl{r#yxHN} zseEQg^O||>L`^bWpp-YgWq7mh_#tPP4pYIsUM(tk)D&sFlp>FpLnrb;;|YPMAF&^C z-gaN$E$sF3{2Cztc)`sb4PLaoVl{sPf2 za5a(d_lP==kJO8plPvWDLng@qxhqTgiPK+3tw>z{O|7cc;(g>0nH%X3>N+ey2cy67 zB1m_zIoX^^U3b|`w3@Wa zAKAeY{32bHu7Z3@qg~ZuJs(1;?IeE#7k@-Pk5{OmQXGDuiK0-aq~cN7PlPL=RwugD z&u4W8!vK3m8{^@B8M;O0C>W*L)@wq;-)|p5Gv0~!`x0>_(e~uB@T$MUUjzRfJ88p%@i^da2esMlL#aBzS)JkqH(N;3rLp;0{kB}4 z`wTNsln-QQdHfua%X9~;1lnr&vl5`GHPn+q#jnhMphhNCooYn`*M!u>QtStjD4tG|t2wFf+R z(Jct$^Obi7XZ9q24gRZ-qI+SNBg5kbrW?V1FOd4fM4e)lBxRxU4xX`ksF^?D7pt#5 zpdHo>Fx+QGE%e8JptV(8|CTAErw_J9+H33%aIjCHMc#2rqf9iV_8UlLF&&-buy;D& zyOQAlhdphVuNaQ^r~S*=rUVm%w}{JM1gBsaDn)C+#Z9NuIuf4k$?>B0c@-V;ce$LB zlFyfIR(7$6jwt6)GYxzY9dP>`6i%j#S}9#N1{-5U^&c{#xkf3o2<%TK!8#8R{RCO4 z?KipS0{DHyJ@gJ9X0;~Ot^_x{5Hn64ri2Vs?=Q94n9nO!Oo@=n%^;}(G zpn;sBx80>EY-jK?{^MSz{;lEHr2?Le8-Ag`MPTjt;D4C;PVnnlFs5T!qq)(IRPSfQ zY`!dBXaMDn4srp#zo16MR^BeOJ z(f1FKWf9&;L#qir7pbuPORQu(-Xk~{mGXJEEcYun$Gb^2F+}jcf|;ehjTd#-3F!9MQ~@eS9aaQN-K8Z2d!rNjYkqCYny(?*`uQt1XAUe_#Iuj`j$Q_+8F%JZ_tG zV}|ht8TtcbJ7@W4cHwWvAM`tXOtd!Xby+Xs*=1JamQxguU>%-6tWP@QSxpOG4WIo$ z?Adeh@P(SPfkS+~Rs;{jf4Ke-M~4U_4u1cV{RcjjMfv?POFm8RWtKJ{^k(^`s_}D!mD>nk$tPYxa_y0sEc-!U^AU=z@%) zuJw3Y_E8mIp}xNb51j_P^dft2sr4Q%_3z1lKUqIpwP3M626O+88+v#?-*DM2>b>pl zfp^OFiuxu#)0x8Ql^gsP{6Vc=CRz;_aC11uw$VqUpWt=bN3_n3UJIF*tFd@cS*jt` z0Vhq6U&4zq4|nJ$@c$9cU+9F5(;DDzuBw+Z${Cfx%m&%H4bG#m<{E>4XFL5<2gvfj zaqneeCaPKYS)o7YlvUEM3{H8<-YIm@&|xski{m^bqnphO&IBQkkREy*BEg3b*AP|N9D_QPB|TMTFpeE2;Cd& zgQO_hb3*KIhB#xZRFM5{@mzaxt$&W|E_4s?Mg_Q~r-FPN!jqSS%`Wd&c59+#d+eP~ z?ofI@#<&yl?v53A%pR&;OmKyvtE6r|#@-D+x}|)MR{Jgferc(X2pbGAQfdNNjMghlrH3$Ol6&t#(prU3I>y*&U&(MQ0YZF6^pduw$sqX45K%Z zF3UJ&1Z2Na&yXZI4Gv;{0;&VuF{B(;DM737xGW zsw-_+Ml0MoJB^ycYmjP=C5!%LendaT9+WyGm==6LFM-jY{o_E*^|~ZyFI;Y zZwlxCHaElH?WY7UP)~T|s$#;!kc?jQh+fQ?4i>&`zF<{>S^39)7EkmLZwC6$J`|18 zIA_`go#8pSmu1BS9x6+AyMPPqZAC{{Sq>lYH~d73=qb#x@7gB%NeicrTflo04139+ zF5-0TIqFLhc`ho&Z^{fc8N4)w=eVpt3Cq#b8Ylb=x44Hwyw&^AVRWYpC!!}+c?PcY zWOs=B6O8N$|L>r2=sDk2OnAaVjFN#O_5d|T6SJ-8g(=55eF+Q^IZ#aKLH8?7@nVI% zSTFG96lJ>Tv;2w*_6IP+bvpHms`cq>dJul}OZNR?^{jdge@q?3@m9Lj9C?>rczJot~>=U90h;-x-w7MLPp!Ed;x=3TusNN7VBk5 zrQfKAVCW{;Y4Fxfh!$a&N49&=og&zlu*c{{YW%NQ`3XTOYPdnf$JlvG#!-Jm4tbtJ zYB9PpUr>{Yem}AI&sY(9$UNsDzs;IQii`T=|L=X~X*KlqdZzKI@grGn3>`X`%xc8Y zL7buD?E1BISGJ)?A`Rzw7EZr(^oy!NE-ue>*g7toP+aI*Z%GTK`tk$RVT0s5D23I* zK@;$#p9Tj#4Eq|!l-hr=`!WtG)N`UWVIQR~5@I&x>y@<;_T)#ugF?i6ccv1^fB{#)E z*H0adUNKKyA-s0w*<&jNM$MyJ@fCVE_vl4o3?2q6tTZZ$sIY z9U;$$MP7wZJp+!ryjqQ(kTz;3^Xa-#1M zT!1Rrzn9RccEVk6rQRq?WNbi}QyJcAS1Pd)?#uYr7NV$p1eW~4J?sAA-g8TN)x7$i zLGRxP{M>WAh2DGcmV3P)i1&YZ_s|%t`SpqW7yqjV@crnSaDOx_F3wOQczZPQ=&V#& zPLRWzeY*TU=jj&RCoQPbW}>j=C_Q7~E2Pz(Gy=+YfjilIP zh(Mds9?!y=xy~B5wcsw-c&+J7noO;@R4{XqPQ`^b_=psxJ93P?2DIu473yup5`KgQ z>S!{ghCc9>-dgzndpN~lXU7wf?|M7^lc+d1{f;om=fl|8JNEZl(ZleKIv<5$H&s#sj&erKI>db6WPgx8x~TyPwdrFZEF8KBHihN6RhKrdmMH5JbLZ&wmocY!w! zM^`iAKfg1(IMeAPk<;pm;Lq@XFDou^!#s7owvIbK4JNQ*dAiasRvI1YM`I4|s<02H zBG|n)O7?V|vp=J^UBdqncG|Y)RKALf?@PNl6_-MNF`1}!$=l_N+_|B+;8a$~f1+JV zyx*ZpBe;&@`Ya;pH*|>nW){E;x*Wywpf%o}gI7{_+H$J1ogX;OmE6JZL0F*hy(9;H zgBetgPek9tjn2LAik*YCX|@ zbvm-?>X7errHN%-rj>RY%lHd4>$s%_{EcphE;4RYKif%2;A4RK=36tU<4 zolZ62m!AP`yhudKGRl~>%?EL&wWadk3yQslx3e@op*@82eHrelwrF@?+x5{V%DVUA zl6?}t&mQ*>=l?ogkL7uOm0kQAy6-W(l8brL*FyGzjaFRnPtCx(rR5FEU&?v47+pKV z@TvZ%C+Rjgvm1&>=wbVq9;9-f%il_+%kg<)NX?kX>T2=GX8v5Gd~Iq59eAgtb5a$& zR?p!LJdO?*a@)P(wk&m^`W(@C89Lc5x|{pKGN!}sR*81 z*YO4(gXKuGzP68|kww^lFH>LTQnM9uOS_fuN19}~m+10bf^#B_eDQeMTBD=Zp`+_h z92^e`@5%*SHRYq#>0}udK6|7@WIq4>jXS#!t|<)^@Hu|O0j-b%bTHllJjK_u40abNS9*55u z1!~{KoqmfBf1Zk`5RQ|YYO>lHt$8T-9ouQ^)lb=J*Qk?AYn6Bg9hSU3KB>^zw46Tu zt=eAv4`*>*--R<*$TuCBWzb)Lo({2DXqMUfK{|4;P;1r%Wu?G|jWj00cDxUA&xKho zWR^B7p{DD2pxTp_(#<*Ma`S!qg!h_1;I+C;En0`_;Ca@oyug%G*gOBA@@2vfp7Wac zqy5kPYgE70qc~Y>mk|6?MCuQ#^FQv{&&Kv!@X;Q>kdy3CvOgMy)E5ZkapCD*}FMD%6WO`ebErW;3|@NbeGn!~A;Ktuj}B zo7}h=jrdpjFI1$kb2rp+URU0NxqlzV>K;Yu{c^X_8PfawNzLp(S`;pb6-8gW{K2Agh?&cLxNT@I-<9}JsY5n70r^g;Ns>tLL;TV8O zlBCcn+5z`PUug(Es-Xw22L6<1Vg1&C2x}_U(2AlcMV}I7P3>7??2Fng9DyszFXiwK z_d)WQ?6Sw2X=)(n_YVbxX^?!5lM_07%{_gYcSa8TJ(AYBfee~_m zs2L8sN9pRiMDI_C%F21Q!DT9l>;NdN3OyVvz`|jV>`%Od0@Pjyqd!qcmJqd7Bl759 zQa3uUuClA@D>|O0>O8T{Gk0V6Z2w<6FSGFg6u>!MQE-{EZi1Eip@4r*7ie{!|9Sc$ z4jN~TE2y)D%y_e$nPh(U@19DqPfyU#{nRw8nN9~DKPP(R$p z;{`rHiH51;iW{z^6Q%aE&#&Q$iBl^Rp%nT?TdPmf@$#m+1odhs`~4@i0UTa8ZJPG6 zb_kB35IjfdPyRqJXw;(O-dsv%u%x|e_8fbZMGD&1NJ*(fFb*(4RTBgEvWuUlp zW+p=DfVv46@qnY@GI+-+>sDa~MhDhoJIX{A?;$!zx_aB;RulZF-`0QB-|qiR{EZ8A z(Yvydx+n=IZW_+-tuS6Z;D!={pD)81NT=8PH?m~d@%bEBX1n|duKAhbIZsnM(bI2W0a(ezS*} zu=72t%9HGwU+@5qqPt|N_aS-qC$jfSCUtzn9slXC#{aKI+mJ6t#N3a&N-)WsuMolS z%;#i$P4*4z-kS7|#wiadQ5gF{AkcYaj&$`s-hGaGk-EE_i2f~b29DR?U|)PlEp$%5 zimn+tWd>0ZZQ=dj#)se$+YgZI?%?5X2dj9|`o$gu2ekkf+a2!MghLB`D=z-tVYt{P z`oH*c@CqHR)uRtZ+vA^_#xxxmPWaRk!jJHyR7?Jnp1#9!C*?8aNupvl_wWUPXA*cy!9FIlI4|ZN^=}yos@T}_A9H85Hm*OCQheQw~$sslQoBKojIJH zIK3vB@EEgw(&%X{lHVVb4M*j{eZ}T*oVGi`o=l;OaISO13EX6|{W$kUkoIu&{zddM zmJk?w7VGkv6s|)y=b|HZ=>)DgQ$0x+{YBKBHn{mJ;5}EZ?)DG%PgHhIoX_azjrS^e zXYtttFrQ2DTO5YHYDEY77CH|jk&>c5t02{8y>TFlIY>3(ulj4ViF`|Wf@fIW4AFB} zl52D}#tARbAI5`pJM=Y&;r=;gHlh3OX|l>lTm+dg#bHNV$j+zG0hvqZb?AId3>uO5 zzQUJ02o@L)IH9D-+36@(2L6Rlm_&7fj)R+=3;Z82<-Mo|P3qb6R9RDnYa)|p4D&+7 znqkewef2H7KY%efhAL2inH`BZDB3vTm2;_F|03Qbcn+G`7-k@3;W+xm{|$F)I0<1K z9`QBNO`$`+c1ht~FOGtGi|J4;K@4GMYUl#&hLX0N=?DkWs2YJ7<`Z$wf^fshN`r8J z9?`2Ab&W@OE8XxY20p?l6}*R3*3QwyFIp8ah?Bglhw?F$R=277)P*fRx&_Zu*F zq8E58y-I#9B1%`>v!D471S)+n1A?Jc6YNE)WMl(f|AfU9E>5mwIyobEkZ!PQ4?hE1mJ%!L=L>X2kTpX0f%b$SkEE z^Z*QI&ebURzVT8vGl>%DU`ofI^fT_+ig48Rv>8;PV~G`a^mroMX#8YhZ@ppmBs%o8 zR>7V8NC$xKJjMiz6K-?#4+l5W_r3);T2IWK7?nR;XfrFg12^X$*j!#xr;_5VBucIn z2oJ$!;?2caT^%JlHkia+yPqy90~5mg+cE(ps>Ct9oB>4-3dG zRq=I@RffmzBL}U%puC)Da7@(0ZD2z~_GBBC*IDYqYheUrQc1}D6r(@f6#DagB4HJ{ zx7JL(SY{>S;T#64UCyd+!dKtWl|Z%6xX&{6qZ~bT?YwX%&_?0DjKeGcH2LBsy2g1M z@DnA4rWcRWf+W-VM4%0x;IYY%M`syvt!TP3^j5j&c%1p=l=pzPNbLr zFleTjQU=U$nz&d&t)bS1t^1Y?RghR*mVSjCe3S+%NIxRkNNU0~PUsIXHifK`%o^!u zm2#4t=1wy*!C*HF)~7LUk>0_;U>MHRW^@3J5`AKHvx8eo3caW)Zs9)M%X88}=?u<@ z%W@9qEsUD8;3F2Hy`-VA8Fm}E`UtxE2;Aq_LDG$>gV&0vnCLg6fAIdGWf0j=Qs^9G zgdY6`xwkOfvZRy+7w=IGZ7wqac7Z#8)t|sCw#lr8zpya+P00Q}LGQz_RI!K9yVJ?< zmhf~O4sMDmN==x<^;q;tT$OZ~!>7d7>tX3bsRBx9S9v2-J#wid7KzCl8g*)K{QhsS zgFazqoIz*DR=okUFm~Zj`qiikf6&2N!#uz8%n8c`eV0dP54#*1(1rem-%NDk6a`PL zgzqRRxUG6{nEj+T=qS^0ldKkfewlFjk<%rGPdtsvY$u%nmzcb9pV9!fznof?TC}73 z7+r|>@Y*M_qr1~p^O`n~d0K^Wkv&F#NZ50{gxE2H`8%u7QoA?tA|PF2eS~a^W^^ zEuu^sUh&VvcXu^*zx|lcvH(@}cPV6J7gANOrLOEuT^)9BlvXRT`=-!A{uQ{iF}3ph zS}&&i&CwUq`x9?;#T7D*crcIYb{be8MPFiK`N;o~**`4hV?JVYwTqJ7TcDjS+chff>>g@k}A5SXScqfja>)|AV zW~D^mM?vb`RCy?lmgUs9#X+khlvkC|1<;KX6wUyA5vJxXF#9%K51;Fa4l4*u?ULC=v+r3BZW3X4-f%s&hf zMO`L~HH8De!9FTU2d2TBTtbDu2A{xQ{}9~4ZQf_0pqTJ76pR)}m5qY-QI>j_61n9m z)_bnBhMlVfW(j+tN|z+ZhzZ4+ud6DUf;f`4&XM%MV(I1(vexR1gN06^;ziZX0NRyet@tr_zNz6w50LJ42 z?xhE*NkbP&E>nAk3HN(8`=z7k63b+g)`Oy}D4j0GGQ#1om^$G5Ad~$XSr%L8=UC&_ zIE=1I4w;*??(c705{VrVR4W&e_69uD=Cyr+_b8P^A$z)>4K`OWZDEHq9CaSU? zuJSECh3sOKN@NT#T9?zzK=o$F8~xW<7}LTAq~w&C(?0IQmU!}@(w!DkWrxWk$(a=Mh@ z!iuS-nOB(%PhFl$rY0OpIBBaBJ?SIiswZkqU=Jc2DWY3tx&pf6RtS9Zp=mhSG4|+g!G+1N~>%T4EeT1rXwUp3Si|0?=J4+AjT|71Q zr=YV5+DmXx^R!GH z)E}b>pU}>rz9#C8@*M_+h!8d5LRwKHb|C+kf+4HS+89iXZ9~i&BBDmf=e%G|1hdSw z-lg9)i>mf0+2EYD*nXFtwpDnKk1^5VADF^;dIY*Vtaqfe@JlDt_4q0d-O%@|s(D7D z=`fdhB;99Yn1%5|$bgcsOACzo0zLQ++;TW?p(~kl6#7y;J0UjrW)#ozCODxXn&@U? z>tX$Oy(?H@6lWY(8TOoim51`jT+Ob`Tx38Mqxc+54H9rl7|?Pe0XuGT$ri z47y0Jaxa*l?v=9kZHM~Ca%BN=sYPF zEi3vMJ5%{y2s;j_drJ%btQPZ(WxN=BrSI6+#nIZwGR@{g;aj;O_kzD$DmsnNDqV=M zn}x!2OYINGa!jjCwYU~%;A+<8XL#%cCJziSUqqF84_ti=x3a>{JYqFs>h@z`>wb0? zNMIXt8FQU-c!fuUm@;v;++}{$0HMTZ_@9zz@6dlK2PWt8d-#GPVmj!!@Sb~@7C2=u zh^dmCB+r1;Sc&qHstm@vJRGiNJu{)VgPO)uRrkUjnqX9?8!X1Xr?Dr$W)IzF)#8~B zmP%FsC4R-5=+<%M!eku5@4=cMg-5#p!pw^C6vIo0qkAL8q_UF9#}SjMxzedij>4oA zRT4P&1C)^E`2pqbKQqX~PX1ju$G_9=BLZHauD=hjM<;OYYGVk_{rPlhTw?y_<5oCB zt0ma&Y5KFDx92jEWigd?Wv7Ny7sT6~RewzMs!u?FyoHKX$SsH3+5|^S7ZlQ-xbcp_ zcARB0Pyw%$R}p64@_e+?BlNGIg_9`Ym+~tzg*9}>w**6dLZ90~_}t4dy5*VORD)i+ z`KYtYgH6F_Oab^IxK0H4hyJA4q?0+!by^SacZhd!0&LA1OfD_BuWnLL(BcSGky+AP z)Q8)oPsmfLOd^UyIh-TdrR(skSI8Gl$rOF?_e?@_-AKl&3{TyenMAwrX*SNsVKbTQ z@D%gFpA~Mi({{|qvx@2EgUMY}+}U^r@3}MRpg9CD=rKcY1ZQ{!x^fA6bUjXSI5QT7 zd3I@`FYgAI#j{7+;er`WwXs|-5|jdmdvuyFhMl;CGJAt(Wr|a@Fum<1nSEaYk7sqJ z@^y^<49+Mm@MIaO1}t_QEBwL#I%~2V7{fxL9gc7D6a2Yh=XvNo52tbD(hW0+c>NAD zFF!PEkli{kgD&(-+_rkr-#6B2;fAvZBO6MK+V)xbdj15qPXErxnMt4Lf7rUi@D-th zv#^>#2Svkw=VFF_$N4Z;jo4+OD{Up(N+opCsi3Uw)0mVoJE*|SgKo^H*%v(=?txvU1ukk!Z{Y!I zmkZL1^4C=4x0sQbzzpMt^uM3QZ6v94@@E6((x=}7r~W{Y!hEvcNuuc|^bA$Oqr1a+ z+nf(ea8C3`m&U)`TJ(&i;TozhQ0P>0^ftaoa4BT-50n;lWMO#r9Q6LP^kv0)cGwUhO@jtW!I9%#?z)Nex7`;}bw zHLmS>p^r6m)fI9}pu99gb65`>mq@37TklcOrtgB38wu<3wt! zccCldC6MJYeGTl=&+toSKt?s`2b^gRgrj`|N6IA7&j8f`JCc^b!7ZV;2 z=g;~ojE+!7^p1YSM3Zx@X&5P%=FjlYlPiKmBJ_Y(rW@vQ^{szhDVlzWNnJxhSiV~g zrgx{0XC0q)8NnYfmd1h3YcZ$kAHBTU#(EL%;=gBVHAEq722Qy^eK*&=O@$Xu7fPmw zG=uE@8J#)@@Qx&j`ePzdcP*T0L@FaNSV0)fQ&KYevPsk&p0BOk)Ymcn_y&w{SZOSw z!ubX_bA7?K-H$%B93~*lY0F^ZzZO&E8gtrP(m$6Il!b?ga;*;G*A>7VWrP>>9bAL) zvWMQ-AAL0q%y$w_(V~B45~@y9{VCiUbBS~B(&-R~8^ghg@d#aqSIu%(BdecqL?xkq zegQVQP5)86HxPHXO;5>CvilEk(yP(grDzwJvOYL2Bb~~K8Yd1v|1&7;v*Br%;@nDu zCwq#CGT-5xRZYM)aC&pwGCB;C({;@H4K4GD>A!!NdPA#VDP7_*5MN6S$1}AnbwdpwAKAo`rBY zc7U_U;QAlpatx=*#B*L-zz6lBn|d@;Ea&2oeGi{TF6uy`u=B}&7-UnMI3J#eMoft; zASP|~#W%c`l}`|PCs!`U^ziyPse5rZ<8V=Lh8+vtKBtuibieKp)7^?_73oLRVXL>H zQ(i%Du8LcI1We^}P|kPo8x4#!V=i8}+uRH|$^J@#orf~a5GNRpT=JQ=J} zpIs8>!-2TYhw9VuP*-NqVRzCfVKxV)9yL4LYx#P` z9XjiKuvgbGrK$>!+He+1m=BMj|DDDue1WRrD!B9(nXybXktwwoh-p`u|3E&H5`RqOln9K|x?2iBq<}e?sIFpI0M8~4)oeF0-_f8NPAx>_H zn`;D}LK~RT5-)Pi(`1|B_*iCwOVhw2p$D+AUP>>I-k0J`U{XvA`jy7RB*f$1Xpal` z1#c1#&J_Fw*ZjYj&+;IOQ%2B{nZ+;jt&%w**E~FSy)e2|Rcf&(!;XZGaQx51=T71Y zv*7m)REdG+uk^M~V|wr=CRF{+Y=TVtEha=(M@92+ye!7CbIdJ5PFM@KeStbif~n{M zSFt&`2sY0OUFu-)1cARQv9_|;%MmBAz=khIwF??xe9aZ#ptB!rnt&P*hVj9yk?D_=0SkVxF?NHSBJP>y1nR}B= z&b4PJ2oGZ&RNJw*&BOc|&NKT};EgmKXItoe%)s}4mLBG^T2-cgj?h9M@*-9?p6^&S z$4@@oOoROkGuJ}yU0$gO@fi$AbfUQ8cK}>si-uNPacKZNWk@v)W#c+<~6I3R%;W75v-`W;4v}QYh zI~qu+9hF!=_Dm)U=tZ}yHwjPGI?-WpkttC_#N>)>@ePg^C~IP#--ZN{Z)NJHOE?Jr z<8TjI3xPw>K5yOy^Vf zO*x#7Vdt&Ebda%pL*!BL`=3;E_eb@p8)|I35=8Iv(`b;#cst>A?U$%zW0*aeDtaaz zTAT3&oI)Qiq$c9FyQwy(*Rcw`-fS}eYFHlCuyJ*C!pSv`$n^lqM2M_IPe4DI+;{QH zsJ4xc*@=pF9Mxk3hQKSW*%yH*aN`epMKqn&)AXgV{QKEnC& z2b|2)yu(F7IqIMJv3cjG6NCrlt^CU82Av`$g|3jr(d6OFV0eU=qa^Wswe1^XO_f2d@ZDDZ= z8`AAFF`RyIH5PL+`7%-wdF+3E(IJs~bP{hN#P&%>Yr`{JQH72)U%=Hg9HjU)RYyD- zxhG$(I435EG=?1<4WD{|oSYY`dF0<3qVgI{UfD#o96I;Qiuj$t+^an1huC}@AQcbk zI(W>R+GF~YbnFyCy9;>VmpDI()SqwgEuo#Jje{x|ZKWRW`3rb7lAXb5d22y!dz@o# zJ$!KOf?mAk)=ZY0jFQK*C6pC0<|L6#Ax}hYpL{I>h-b=EJ1%C6;%?*jKx(s9_9LpD#q!P=Ws3TZ#@-*&75h zjBl+Z!-$7{WQUj}bw+EccVidMq_bfmY-kI-KI8E?G_;?9@tI0A$>5EYcdEhkw1F#p zm$zRNzGD=aeGQdq0!;lhrV)MuZm$Q1PNPD7kG)w=cznu=x?`D`NtBCA@D--kf5ar$ zee(U>Qv~0#uDW#klwub&XHI7$cKvFh7y5QGis2I8%33Cr7YBK*gas(;H}K>58W+#m ztgP@B7r{Ri&N#~fIqxT%T$0-$L8-T_F7`;io)VjQ6o`hqe1F?{|?G*A?F7*U5+5*|Uj!hpU&I z$utYgSSIFW8rEZ|2sP<%>5b;|7VFT9F99v1EAuGslb>))*G7eX%kO~38v(C@SoK-i+cz?o}mY0 zBpSxw!vB^GA6k&PeMg+D&N(9DXlkiSC^zlFdI`}M;WJK-J!4Jb7a5K|mjMHL7q+e) z70eYd?rgQ`zq2;x=U*|G84LgDCF$2}Wp*-uqC0yV`|tuzwuoKQ9`3!u?1PoeJ~$QZ zkFibQowC9g5%&5X&p-3ECJ_=JA-d+JZ1g^kMlfL zY3N}7Kkc1yT-Ej2_kYWiV@5@CGy=qvk)okHa1L;Q1D+KXdD9}tU1U_;MMg%Al9cS! zSdyV5M|Lt+R7@$UQDer899!hbkE+Mf4y{mubg?Y>{npU>;X z{m*u9P2u|1jGv+*`HX#hTgfg~t;CE*^Y@6Qr)X6~+QW?47r0MP z$5Br- zgLDY4f+~ex=4qNcFA2Ks*4sBSKjcfYF&%r3qa8l~Jti}zvk7Ru`urYFIg+x1p35S= z(YrXOQ(dRKGU)AJ1ZLZp{2A!LSGLy-a%hu6s3@;qkf6nF&a*?9OT!* zoQiwgi{%je=ft%<1rB9DTJ&?kFBdZJWyYkVAeaMi@7YY*-w*5cM&^IH>xjrHs4p)^ z0VK`}jch?HqJLOH2HR@txChMNb(;M<^bD?tC7+$N6wT^N+zR|mC#_}KD@cx&%139s1_q?Do{VDegoY-`nSFb@iy_s(4huJI9IK0dp zzz3YzOzjax;QLsLs^U@9#QVTK^FXQfNq+)4hGwjOLPmIzs;ZkWEPd(Ez>Q~tf0CK1 z-iq#OU&@=HvJCblZNv5BIeP!8;Kc_(i#z$=AJPZ84(9&>oZ1?hw-V3spR>L84c`B| z8FsYk*WoK8+Yt`qYIF-4tWT)Z=aH{B;t+Rz_5)~Z8qwA;K>|lGQ)Az9v;m*sWU-mL zWM}ec$!EdR{*!HgyHd{~3zr9{Ena7;)sIJ!Q9ndECG5$581T=@B`2}BX91b`JTl5P zOd{Or*vKT>lWf_1ncCwW{7gn2^Z8Ea;RJIf4Bs7iB|pTx)UR-Je4W_xF|pu8s?#&^ zfXae5C6sDoyh1)m=-=By>S}uLjb$Ba&n0?C9YnI*s7HcqZkA0@jMSq8# zitXTyVKyXuX}^|<+{f{$_%mGAM@g6BdUHS3pLld0NcK2xU{hB$zvWAgR~)ht_$G7$ z+fcW)Ipf&PvVtu7K+0n^i%Mvb^6zId~O(a~$fRJa%w?;S_v%1s+Tbxh0RNGyAc$R`rViPWoZ~{3twh zWIl1edLX{b?D$spmF|Rl=w}0o#@hUuS|d!ysYGH?p1pwIw;W~dt0@QZC@N4!aRa?% zf7(q!XTetT&?oGYyE^?Yx&g0K3kTB0t9dgX&9Z&vZJ75|c#z+r;4uAWsEMsJ*>RZ3d zyu)AN5#wN4E==AENBlg_34Z_&4x)*1Fz@6|OJd6TXnG6YC1+9tUPdhaYvzyOzPI35 z_*K^5ncG-Ow~?RQh}7BFCs4(GNS8H^9&|fBxW(*}nx|2F4JwKUnb_DtH}MtvtOI1O znJH(%QK#`n{u8EJSn|-%a1fWR&r%F$L;c-!0Dx<%d}2>aT}Y4mZmN|t za9I4KVlod-Y!8B9+tg|77V4>5)Y?9O(=LMam zMGbDvz6_;r3;vx4=(hfVsKU3fN2;#qB>RQj%q>KgRv7xf!iI$Fyi*Yj?-sJm%gpP1 zgnvOex|%KMBIo0;uoV5%9U!om(QJRj?-EX}ZT5<`QFCQb9p0VtQzkQCrSd)vPBD!L zQ$+qV`?9mr=BGLEsd*Ai)x)OSvv53+;$R^YqLln9f&jZWiQ+}>YI{zvi| z4)F!O6dtbf=qYZQr6hkVG7<#f7;8M(cfgkETNWHW1_-{M<4#uV${ubRPLMGXZV?Dt^a*;yW>y z)4g0ZE6vo&c08*d#Ygp3eB#6Dpf87yW3yL&q|wjscZxlR{U^(H!^0l?$DHn&Nh$2k zu2coE_-ag}W1L6-uPfOJYxoz(N_rpDLDLs89b63-JxZT=302my)ZbC#e+h?^h^piO zJkyu1L{wtS>H6(rH}O&YX)dOx`vgqWaFA)bAaf-ulZQZ#Jxt|~Dc`h&w|0s9W}FS5 zr0W*Y6H8^wqwL?f6%^FL#M1%Z-CPjeZJ<}*(#MGIzrnTVFH9D|E)!QHweDGL|DO8) zZD79U4LlG}rFWLEbBSAFE#9NQGdEc@Q$9A9y~fPNXUWo4yui`RK7dnErkqJ8U(8(S zrM$W#W^T`hk1FGZRiSsQ;biLY$gW2@*vO1cGp}x!xDS;_YP@|+=gf|RDi6@ZI?Ahm zgjtSr>CDVzj{O5vIXlt*--Et&Ip}5{@AY%EH?M$Vx6+@>)NacLltHuj?To5O)z!=) zQ?0Wi1}3qY2MNl8g*U}ABtv5}Wo(sSD3 zNDt2G@1Ro=ladJXDPdA(Uy5*!=M$ZeF}JpXSlkJdJ{@H6Q{`r7(_iY#a8r*Q$`mKw z4O!2iv3w6tj$+;Ual5*B??TbSIX0T-c$7W$aP-Ohk~gB&^WmDX6AZhTIQcR9m4M?} zIIec4*AEa~4x=hPnOqZHlSuLNcs>T?YS^W(w$kDa&F2zX2g2Xc77M$ zd?`9JQ7m7LSbkfb zF(c4*EFr2@fuf#*^ZNxet*?UM-AoRxWOfLDJ=lxi;DQ;&HtJNI9b4$)C9-Mgvh3S& z+>m;0Kb<_zV<1xb&1Cz3!pe8UkblU`i+B&ZK=waLI+!e)n^dNWUvh-9O)Ut@q4jY| z+LiQlj=E;S^2iSH6SBXJ+Nc_*#Gf(`BC}w>u?u4CoAc{UWQlb&p^`ukLU!6;yz)i=^eb1?iYVxgjKPwxIS*RKf_$+6-gav zIc5_fHjemTdt$v)R)J;Cnq78E)?)G0@@uY>*CCDTeat72Vqf9kpP;auz*%VUP2 z06p#pY(6}PSoIS7tpq8=ffX0RlV6CcOiNdNaw8zk6)%leZVKN@$He}))_8fh@ z3y8vAqSHaRr}^}@e*pfSp0a=~4^O3};+b(59zE@Ju=b_?2?g%QWX*qqZOdSOL(W-) zI8vN~zu`zm1p4kGD#PcQqYf}}F&mzWU141QA68G_=lO=O5zPlt&7Vy? z?+$iH;`w?v@S5+SCtCv-`b)m!Zu-Dh?ITRL&x8rRL@~%y#KAIpq<_MfZ7b7k6Wi;q zVUleF(|GSv0WM|+>oIyL2Y4Og&?{bKXQ!T%nnkXzgh#1@r5R#c?=pOMZ>Pghi%-!r z#N*e%i$~d@`^`$rt-MF&XUnasDHG&(8B>tE=uf^3Yx5qHuSb$jLsJ^VY?}k+O*TG0 zMP%J_zUPBz5Fh_H>ieZsGVh@J+o+rG4xkKK;JOJ-R5Q5!0Lm26$-ko!;|ut+nJ{Rg z6BU>6lb6l}vn`;;IG1xSU3xQ^r&8W^l~w&1#S?!qSo`;mRPfk+F#Mt#Gd27tGl84H z4#)3-f|pehgGWU65{q> z@Jfk*!PtwAW+4&nZWJpWR72aceoW<5C_hi5RlTjs*rxVmauwg||J?O7?@xMCM+q@l<-2U!iGQP3`>< zXkWJdz6gGN15dNRvscSQq^Qh_U%HTKG^5k}z1LH57ok8nmrVPja~aMN@~1sTRZ+^! z*lPTP9-!m@B(n?MI@kRaKXol^*2CHEAeYGR;5XyzQZS~t)NfQDa>0BHnB(^9+mo;Q zBb|Slj@Gu@xc~(CW{Pa>T?2!$i~Xug**NY+cOc&2>C~w?x((wNdJaBZfMw_CRrK6T zsbe;vnSX?i*l%^l_Al8^RAL2ed^QHGMgltMom44b+V3SJnww=W#|v*eJ@wC+qm3d% z+EC3UP=DG{r>-q4TtLVY5VfN=9Q150i zudskm>3nfJD!Q)peRS{+pqCYA&QIY*jxixSoekvTgBr(N>mnvwQ_1<_)G4miE8r_u z!dTpfOV{0~(l*hn--=h4OpH9ozUJLjID27>_A9?Q$lH)ua}>4U30YxTr@$;;jcRKZ z>Jo94sK$w)j;j1QI!!q^=Sx*5ii}d`DDPr!NAlrPx=f##y_XT9GAPeCN-??=YE-;#c7dQHG<3I8jXJwI|TSz7u6alWG%op`8{c^^Z*E|BXrUf6!|) zcYK|}*PTyP@K8e(z$UI4-%ju|BExnn{9iGvCtk&;;=km=q4-9oV7Ib)t&REIJ+SLX z!ROObPQx?jEcnDUbjv?TxgzDi$bdgaT~G&de;k+L=Tlx}gG)F2V-9LBZx*%6JfdG3 zex!b~$_FTPHp9$6qPspnR~KN5YX<5damBBl_I+i{}S3ZD)egwW-$#h45!z-Nc z{x2K_Ujy}=i9)1?O-fI|WQv~syX^MsKs7LvtxZ+rs}3~FgYa@+h*z~S%NXWtrrG0g zRa;DNGZSuprTvHC(R<;y_fUyAIGMHhstv;%pN&%JK_+=#R6P0@DwDq^|2J-3Vche1 z-0~&d@eKTwa^Vm!gGDTXM_diVyB@x!-tibG@+{{e8k1h;CjO?b->0&%J(avI&fkT& zW0l|v@u8l~jFeO9zO2G^^if=;yXeuq%j|%-jz-}aVF&kKsB^d#bXH%dCXfl{PuVvy zgyYda)1vf6eTS<4LS9rSDEI*S(;@Uzf%NlX+@euPZpR1c3o4Y^Y~DjA(`Pm8g^E>u3?V~ev05;?U?OX=Xh8atzqrI0L z6vs63BGjR&sQJ%TZE69Efa0Yq*-9um>2B>K)xow3E8UD^j^y}G@KO&Lz7KRQ=RATF zAZQ+3I?Jf%tWRJ+`YCp+JsQ7~`EV`C!uRu(UB zEv(POXjT2h-_PhACg5q93;%NuJ>PBY|9zXAax6WOYW)J{Uw=ji_<5q_QT7S^9b^~@ zDqarLbra5I&(Oo{LJ?=lIw>oT?QT~QE7xSLr)%25)|r0xht1Ajh(f&-H-sP4Q|irr z8y@pmwoBb(4BIT7IUFG#%G_)L-Hx5kubB6~h;ERVpM|rtoBvF>{r2S7lh-*G!<<`E z?@7&Z9m4r$FRH77EWO zEKL7|Gpl4xivqvc*g~Cv+R+X=bunS@p);IIO?L&8c8;uk&@eww{w%}BzwCjlvL$bJ zCZ%6WmU@O)b|8HXXuv3*Wr&C78T@bGPUGK{&(b}_PtbEeXg^~2vC-Pk?59y>{y80B zRV&&w>$1k{d4MX@IUHDWn4}6+KC6o1*-J)^0xSA z8_hp!8~XHjoefN>-<5t0Pq4Q$*HB&X-?z>(to+Lht~F%Smh^0y|LZh=u32QHpSyRX z2|n!Zmw(o8{^zpMu9W$&U(>61$~ojm8{z!RpX6sNj@IveDtPq~SlTRf6GJf0w=*Hu z#;pt_pO4?<$*@50IKNM&elZTgpQm1&wuwo_BW!@YgDKdD_+m$38Lwq}^X-fsFeaIx zr`yqc9m^_YDrYo13#T9Aba}LLL(7=umi}4{IkSZBS`(h=gGniHHT&?5Je}yf3f5~6 zSnz&!KRm{EoM<#BhtYa1OZ#nF7QFR7Cia)X4eRNCALF|%=ezA@YIGhxtk0uQ zjb54tR(vqXtwpQWJrY0aM~I&DK#X4|-Gqx|B$J&5do^42<| zwLYAuXZj4de;QkLZpJZV7d>}N@^{GwTksA)oP0Jq)_Y(pKgVfcIsRe0ohL9!yaFt@ zo7dpLOXzuOwR!ZlZewa-5Bo6|(E-@bj*uBl!>KDulbkkk?b$3C6`6xtM(wTa|Sw} zb^Kg!@gDN|l83o(%a|Q`J7osS(Ldv5@;Gi+8DPRk*j6H6ZW%jjt6}d>qUX6CZD22m z?{v0xu7;g>3)EtzcP%etpF1XN8Cxx?@um9+M6!sj>}z=$yP4&c+qX{q3kS?MF$1n^ zJ@Mn9Jz#ePU&TH$?P6+{P5S*7@iLy#pVHjqwTv&fkDqZFzIprMP8RVdw(#9Pr&3); z_iu}ybTnOuYwKY)AK?U;r}VHL6C1=z@s(9ECC%=d+G^73|f zqy0RO9{z4T9apB=&~#jYs_y_^@Dks46F+8x-Ivo(+6Jrm6*p`dKih}F8@3LP{w?m< zdD*LB$Y1A!-|2Zr zQ@x}UbN&Oz(=wEMKS8PZ7#xbI72l!b^ckH72Yk<~%w=CrHhG1}{R(>h9QUm_Qhnt< zABU#z^Nl}Y+f)*qUOuY4LsW)DAX|*`@X=@j$`o%_+c$$Xw^1eTLQ}C1jQK8;ln3w% zoI~Z|#vl0m%nsbD^~5984!iNBTAXrI%GKohSdiPxuy|D&&!Ut(nQHznx(`cGcf5i& zCJ`idI4gx1xQV@2--mlzJ%$#-_7{)&%h^h169dv)C)f(ldZ-l;slVTov(3-uQ7^F=l#sT;r=`W zmFA<&8eIb-`~Wm~F`ANR=?%`nx%OsoJ3bn-N@|9}a^`_bxT5k>bn7Nb!~MiKE2jQFE4 zKsTY7&T>8LI*H8l4!-fv(zCybdF!*>*TGO8a-T)tV>@&9XKDUBSu^uJ)Fy|dOIU1v zZz~nYY9?@+_#3BbzFE%u+Cc>{4abP<=JRbTFQgXU%f@n} zJVx=yS-yyd>#Qgr* zXh5D!|7-e<+%*^bQ=etC;&m`!|A6;;0r$aIsS*#9(Y})%nH`gzjH3IZ>`Ty;-HIAF z3Euc8a{sDgv`=sfHFqf!zT?KL6Lt0 zdG60_47!_I*JzDVjBqyE!tF$l5jw$ca@;mzV=68kzs6ha7Wyw&!@n&~$>To1pE`%` z;U7_Q4!{q8i&>(rHOiunS`DQvU)p=;?w-5vR9ABc$`W`IFePqN_@tC;^r}kZ_ zistbaeu1~=Ags5QEtoej>%Ie~GZKyLYM9n0P~+#kjdc18lBomqN#ogDA(IY2X4CW@ za?)9N^b8c-Jb#`K=zY07tv){NB`ql_Ur1L zoj*o*AkMH$m2f#xUEcXV#Tt(gS!XZ>wwlcTH@N&2xSZ{#YZIWu8&98p1vBFtoj=EE z@+~xH2`QJt!EFPJ+fr|&bKi$As7!7AIBg^IwQr@J18Q3fXSM@{>M{H@p2fd(2D3lw zIk_YF8KvPk{9tB2J*&6iFc%S*9-~k4Df#|dHVhoZ>EPS2E7#$~_PYTj}e=>8M(aXfLXL>1p%sOK%{Ia_u&uJhFc6jM|rH)ycW9u z;kXAxp$4&`*G)hbY-f(nMJ6m@ilRvB>Z(|+!+o%84UQVNht*LV)ze{bq&via-x{km zZvmR{QuJ))sr+Z1vHE+O>RA4NV~*}R%7e!(fVC<@7f=FMQ3i8W0i)|BW``0+&ruFwl+L5!7^1u0MW2JezRLVF z5>T<&VM$#sH#}($b4ht{^aXIGMRdnR0m469H%EW=0{Uv=Phm99F=F|TU2xqVG)cM4 zljp;C7otuwTIXo3-kj2sV))H}KSGu?2F$-t<^aoy3zc;0x{_V&>G0qu9NMB&$SdIw z9x?xSwd`6nj5y_KWLDbz8;bD&D1}uoXRAjg?g>>HMns&(peSa7a@fO=2d5_AzDOMY zi1HJju0^PCOHkvNIU9-Ork`m$DuYh$b2s{pKKcR!D9lEgO)}Cgxa`HI+o%c>m~*q^ zgfsc4m7g^crGpy{cneABJ-&_B){?;sb!zm=fnDT5Q1ujmD>RO2sKn{1?7*!vfr8o|6( zKb-3zS!o#VI*@LZ$LS8V5%nUoGA*4*&p8K=Zqc}xp;4^BtJ{nFcs0HTwJAnboSvZ* z&4J;MGX~)=i+L@T`cKrVF29?OTPU}$7?!>iuCN9*MH9%Xos;qFxdg^fCX6|W zh;*x-P`sW?As!KBbZ{zAE_uhbOFlTK4)~rfRMkE3i^EL285tJ5s3P$AOXT*Nw@Q3C zYU$6^ za}*Z9hNFU$zNQEN$x?R9d3AcK(cQ`fRTt>I2To;}jzJjuyjZ3Uozz5fYw}SEmFunX z1!GAwv)_IgmqGgAqs)9;V7wEV#Py)7$Rk=voG|ZKJyD?zB|<+ldI9*WFu3ek?dN;I z{sr(4rRZR4Q0zA_*Vc-!m>(aLL347P7#wHxbH)bx5^ zn)%WebRnHo8Qr+o_OkPEgkEzL_gprCiRL|z4oESx45h^O8g6?76ZEaB8|frx3eOv2 zcq3qSUGTYiXder3wX2|)TZ8jb1M#N=-KQTEG{{WNFf(ZZl;&1_2NRLFkatkQJ7}Ow z)kGh?l{h6)YLEyeFCdDzUt2aG?4vt;# z`{X!Sz}+um$5V;EfO6dYEA<^z)3vT;YQ@JUrUsO0O{jER^kuZWJKRRZT*G>TXi+2R zlt?tU(I1l=X&+Z?{m=2eO7CkeH`Yf@+rUhE6L+@-eBGuuxYOQ+rb_N{FE_cLUdkY~ z?l5;c0GB+bH#>|u+6cYhvE1-@x&w(xb}CgDxYmOvSZ;iNQZx6@4=x;Fi|z=$PQw|l zPK0Glwm0Z~lbuz=>@SSvmgQ=!t){ct#=RQkKFOSS4s1XL(Xxr#)6RtAFb+6T^a1j? zDaG89I&Mi9cchQ#D068!>flQ++N=)q9|U+tICR!m&&Xr*7Bz zu@YihCBC3TY`V7N=;a}LN$e^E2l>E2GIicY&C`X8(I7D^oDEsA%qEF9wVTLQNaU)) z%c&kj(?VB9Ho=ad(~GCqCUaUP=(*~(UpgZA&^Fg-CN@QIA8e}K^N`G#o>)%Pt~oDsntsi7@#MNfTwCNc>)4i+#!J>p z=7|S|I61pgvQ8y=r-rQ4qz(t-XCBU36@x}AsP!7aoqo>AAgkD^t333yMX}gI*V9iH z8J2Uhht4UM>>(#q$y*fVK|e1{&L>t+sE9hW8jjWnc5MN<4yxKV7IdA1My`^K&`K5% zKXh?-6wjYhSeSZ{d=Hxf1In$1J7ua}=48CY_&R4BOkh8#ewf%k2DYC#D<^NSSm*eB zoL3WZy`3FnV|4MtgSaJ;i0%%)!d9IVw$PJvf>dN5g6LeEK`I@(?aE4}nybjfJh^%z zayRED8d3R==q~R{^j`Vo(<XzjqyA_k!%0YJZys1u5ou4k|I1b6@w%)*#Ae39Vz~M`B4MMdF$d(0<vw)%MkatJ*oSiM$qICzmUD zW@b#R08h!52J_qoV8})kO@-km6s0wF9(bylI-y2=Iy!=S|NzXM;Vx?il`~NLW!G0t}w7rEHP8E zVL25*HIoW*(tWBvk+*0l<~K89KBw+QiPZ$!_v?$aXb!Z&JIOxL3Qk@oPI|yWqu`z} z5Ra2eFNe2TNcIyy1Rr?5(=BeN0Xn1-Pwm>LuYv_=);HQoH1+dR2f*(ER6%m?xzziG zMAlO3d@qr;i5%F5ideig!cm_{bQPtW#Mee5Y!8Z(Q91kKxkfi}$u*K1{#&AbHxn1OgAZ5~Lw2&`SE z$_`QHcM)|*K-b~$CvI?cK3UNVx{*5|5m%yZ1apdRD#?;yRy5DNmpD5Jat^3YGeLDj zIUwdTjkS$9Q<_;)e5WGNKe)L8`8p5VL{%8732m?w;^@3xc7>1X~+^tMvNxZr_`!8=uC&_>>FD{mL(f;XE0ek}yQR>Jhixwa{S^`jdf zC0@%csFPP)thv-jRU??SS9RnzY7@z&#pCa_1N_rNq#lJa4r3QuEa-J2PSJsXKYMMc~)+VBD71+e@8oRLwPp#?L&K zm@R&2=G$$i9+9egFof1)eP3^>QdCgMUTF_QmnhUo)B>#b&Go-nL79E6cbC4ae0mBPcRs zsakSyFR9dg-JqOIKX)LUxNU=p$>kP!sXXhcIlDOj0d7D9{7XFVJD>OM1y!}fw#b=V z@FTWqrBXzct^xm=@p*{%JqE6d$D76lvMN?>w2#-_$vJDSQa9JIP`^&pDlTPG@?j#Y z^j)`twK{_*K0w`R;^N6CUQ5<)6A(WR5Ja<>;zuAoN$$5trlW-9}!#PwM%)w@?bS8Ox`e)1ySVY68MZtaP;jW+KlC$TBY_8(PjIsUAebh*jPbnWt_T1 z_9l3SHaLcf_a9FE<5Hi;YTkV-=if!14ntWg=br%2CfHhTfb6m}adkKt&Ab6l)S)@l ztK}f<2IlTtz}S7%LPq0UqmQ>9rnTzC`ODr0iR*oevBN;w!k;C=B^1D)$&76s6;VeJ zX^#@$g%OszC>N|<%Uf?yj;xKGE$++VR7Vo!b2)jbW6Rj5SFag+kc=Gx7v=_Qn^C?Y z$VZsx9}ZG;Q5WUG`_}QgCCaz*#?AeQR;`C}sAXm6kK}8)4^0~7L%2Ivk+&Cyq6Ks& zxq6T|AJ90T2!C5Xsj_W?S@-k8W4RG_D%t|DS$#0Vw}ZxeU}ViVo*3jQs;F*Ti1MA} z?%|AZDkVW>dE;j;s7$c9Y-ULWm3hWbxlxgLug=oi$lp%tr6N#x4ZK7fuX_LmaX6>z zf`upne}&F<;$_=|3`8{?g!!_&iQuDxzgp)SBb=+C?gYCX1SVB(8OYm94OI)@Bsi>v z6YiW;ONGwaL}hZ$p{hza3fT@lsM&ms+A4uQlZ#%~H@))+cu9Evi($#k}@fUVA&QeNfSN zEZrfgd@D42cf!YyxFlZN^i*9$?Go6>3RtLW5SfqjHS4Ueqwi2G&(U{Z36IgpY4^ZK z4Uo;lIBm1~Dh)DFO`tVDoQ7;jN#L{#;1x{Tt(krx-RmXL-{)b z?#T`6E>$L@5$*RNNIO6zx4>q|YfkuPyxlq1C?l2&-nNsii#TWV1)IpsJlS|EW%C7> zPQu&6N#W#bnfo)5S^aT%+dnC1Tfp6kdbZ{Z_Q7vAtIKTwv}PlQn_0Raj8OE#cgSSn9Gw zZiHa-Jgv@3dGkK{HXWJ=03ucX8Dm??VAZ+K?ae{TyEt5RaseGD55b2DYbzK9l@n$t3b)A_fq)RS& zqCq!|4^huqsRBIY2QxD?a)Wy4c?kZGhm&!U8w!aaven9`U5-`|LmzP@48&k}3I59^ zM-=MpW!*S#@GGM|`M!jriyQXFj4oBgl@{uPkxA8jD4u-NeerQmqyqeRH^j^-Uft@@ zN=?{FW|5jO3d}fxBMPYZ1vfU+r)Vd`^uY6sDj%0a*RB8rQH-m&>`oE>G*lzTf*@oD zy@HydkqWU*neHJva}mTG!47#;3&m9VwL$DKU^)a2%r#=U3s&xehb~+}FvHYQGd=gqLg6*l%$-G|B;viLmi57*atAO>EJR+>>zqrys*epaI&NjYr6#OCE}qDpummHB|ib6wwi6_P*ZV zs8n{(j0qu3VIc|#rZ}GIsT)844k`yjE61oTK^P`OAP7TFzfpM~GxH1wV}f))Y|8r- z(5Kp`W?a|iLHl1wL5a4!DFK<>3vc%*?7Xfo`l@`Jr;H zDw~uY>I-&F5~(&k+BXqi!Hgt+u!uwwVTeR;APi9j`Kksy(nIH@f1Dw*z{f{vRVj$m z%uqgM2z!(x98HblCgmwVR6QP5`l%`92Dvrwl+sJ_q2(B$FBYJKVg;Ref;XoMMnSq_ z0~$HPVdY)g5v$XFe>-<%kSr3Vy{~-D7+z%({K_MQX*>|@AxuIoalo%NRNDr)DD+%Ea{uO(OSHQn=M7fGMiwA<;n3+^`v8K^!8ypWu+= z@n#40WT=w-pE87>epslkh=Rw@fk`NUJu0ETIGz*i(GL7rvW4vvR;rA6PClQL_rfQ9 zok<8E@5YqDDOG_{WcP?*6j50vqRw`6_QDGnjo*L}Vv(5AOHMJ!DT&%YtJDr!3uoV_ z9no+)qOM65sL3mI{7cOt9APCY+$QpgS%F&M{Uvt9qug;Sw^Rx~^}#DNDYqnyq4WUk zbZ0`0;Y7_5rQMklki+ru!GH<=-#A0J)*Q8yx}d$vD-5II5Rb+j7~pbZLA7$f?LqcG zzBd;Hy3Yt11&wy|;kXyOj!!6M1KuT_*_GQj~} zyiKc&0`wP?^TPz2V0Lo6V9^kpFs2-^6+|j3Iyq-=u!qy2wPl;LBgh|(>Z#k|j|#um zdF$i7%S*SamLgvJIt9luNnJWK*Q?ctAPSk0i};2d(xlogQ$Hlw!op5~D8&~4+8Y=M za!bee2FyFqj}}Py#joE16ERpOb%RRj3HU&dos-zbP(4ygH$ZZP)FURlXc_MYc*zaT zRG+<6pGI~V*}yf<|5r}p6I;jzBZ?FSAw(U=CzjC-@Y2VVnskC|n1~RD&1U2%ehdrt zg``4t6Dvx-u|gG0=?`}M{#}JygN~<`6N;;h^f_BP2`osrQJ) zhyqZB7mZFW*h2133mw1?%@Vyq?op724Gubw9ZW^sq;hhFd3U6$>4%>hp2S59OCe08 zd6UXje^xWjS$v(Dw(E_WK&H*qHoaQg$}Ni3%C?joQc2e^RL6Ad?wU{?;{uI%i6gaS zk_Mtl3;m@I7>pk6G7XYhMqMT@bq4znHN=!Qb$l8EmyV^!qPVbAxfIb~szy)N3Igd@ zrNt=u#RglQryN!(Or^w@COQ#*Q0Ew%M-r5$JRWU!Ypxk|TVSh0{fIL9^(NYwe6O6r zI(MS4WX6_Z`bwcXHy?i5iw>+gm}`3I-3QD$WxLIY&^!~t-7$Hq5caG^OVb|YEklte zioS#gY*C(j>V*3U@qjnOD6+##$i#fSEF>z@(e06|sf0*)^1t1IIF(MKd>{7mQ)y4kUg9$2s{%45yW5WsQb&BIA@6p-Sn3OZ1p_8BT=WGO#@(tiJp{nB+Qvc&)=8cs#&f~U-bjW*A+S z4;MY6Y;-&ws9Z2ZDX5_ujYorap8Sd%GV9&T$x=!c?Y~y+XtKCUG zSxi3gX&osZk7gw)99BLRf>(F*bi+zYcky_9C`duHn(~61={}g%!Nl8jD>o@M<>a_8 z3e8^C#|5-Xu&P2cp7`&9wJbOeElTVkaYh7H1o?0dUR79i2l1hJ4NGlM7pyTmzlIJg z@KUZuGuJkWksecIU`BWQIO||W_vZ0#g@xXe9qm97DiJfDo0X**&l5Q70<`8;FqO^9 zJ(<;l$yDY{iswFblyc%jykYBj-)Z9Y_EJ3xGDxIa5DqC%`RNjMC=FGQ(uER6X)Md8 zin%<{f{7JdwO$;Aw~RoA21BScD=f#X4oDyOo~~ z*u_=O1AAEpMil;FnED_BY$!UcLOty!&bkYo$RM32qt&K5Qp0ZHPZWiH8CjtdW-3;7 zkwxIldTx-p&#Z?(%fp>%hjR$0OHm5r6mVFbE~lM(z(qwM%G+GnX&=1O08u+Yh387M zyAsk9sLkYcwZZ<&i}KL%@e&(*Vf+(d=!&SbYWYU7%Hr36qPywJNffK552Ky9PMcxl z`b#DgC0ZRnr>KJyop$gm|Hah*O?`o>FEI55roO<`7nu42Q(s`}3ru~1sV^|~1*X2h w)EAig0#jdL>I+PLfvGPr^#!KBz| -# -# This file is free software; as a special exception the author gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -## Syntax of this helper -## First param must be number of to be used CPUs (only 1, 2, 3, 4 supported) or "offmesh" to recreate the special tiles from the OFFMESH_FILE -## Second param can be an additional filename for storing log -## Third param can be an addition filename for storing detailed log - -## Additional Parameters to be forwarded to MoveMapGen, see mmaps/readme for instructions -PARAMS="--silent" - -## Already a few map extracted, and don't care anymore -EXCLUDE_MAPS="" -#EXCLUDE_MAPS="0 1 530 571" # example to exclude the continents - -## Offmesh file -OFFMESH_FILE="offmesh.txt" - -## Normal log file (if not overwritten by second param -LOG_FILE="movemap.log" -## Detailed log file -DETAIL_LOG_FILE="movemap_detailed.log" - -## ! Use below only for finetuning or if you know what you are doing ! - -## All maps -MAP_LIST_A="1 37 543 595 289 572 529 562 531 269 47 649 650 599 548 559 429 230 573 349 13 25 409 229 43 48 546 553 547 604 545 90 576" -MAP_LIST_B="571 628 560 509 723 532 607 600 668 33 585 566 389 601 369 129 550 189 542 70 109 554 632 552 555 540 598 450 558 249 35 624 557" -MAP_LIST_C="0 631 609 534 533 619 469 602 329 580 615 578 36 556 44 565 544 34 617 608 618 449 616 42 451 582 584 586 587 588 589 590 591 592" -MAP_LIST_D="530 169 575 603 309 574 30 564 568 209 724 658 489 593 594 596 597 605 606 610 612 613 614 620 621 622 623 641 642 647 672 673 712 713 718" -MAP_LIST_D1="209 724 658 489 606 610 612 613 614 620 621" -MAP_LIST_D2="169 575 603 309 574 30 564 568 622 623 641 642 647 672 673 712 713 718" -MAP_LIST_D3="530 593 594 596 597 605" - -badParam() -{ - echo "ERROR! Bad arguments!" - echo "You can (re)extract mmaps with this helper script," - echo "or recreate only the tiles from the offmash file" - echo - echo "Call with number of processes (1 - 4) to create mmaps" - echo "Call with 'offmesh' to reextract the tiles from offmash file" - echo - echo "For further fine-tuning edit this helper script" - echo -} - -if [ "$#" = "3" ] -then - LOG_FILE=$2 - DETAIL_LOG_FILE=$3 -elif [ "$#" = "2" ] -then - LOG_FILE=$2 -fi - -# Offmesh file provided? -OFFMESH="" -if [ "$OFFMESH_FILE" != "" ] -then - if [ ! -f "$OFFMESH_FILE" ] - then - echo "ERROR! Offmesh file $OFFMESH_FILE could not be found." - echo "Provide valid file or none. You need to edit the script" - exit 1 - else - OFFMESH="--offMeshInput $OFFMESH_FILE" - fi -fi - -# Function to process a list -createMMaps() -{ - for i in $@ - do - for j in $EXCLUDE_MAPS - do - if [ "$i" = "$j" ] - then - continue 2 - fi - done - ./mmaps_generator $PARAMS $OFFMESH $i | tee -a $DETAIL_LOG_FILE - echo "`date`: (Re)created map $i" | tee -a $LOG_FILE - done -} - -createHeader() -{ - echo "`date`: Start creating mmaps_generator" | tee -a $LOG_FILE - echo "Used params: $PARAMS $OFFMESH" | tee -a $LOG_FILE - echo "Detailed log can be found in $DETAIL_LOG_FILE" | tee -a $LOG_FILE - echo "Start creating mmaps_generator" | tee -a $DETAIL_LOG_FILE - echo - echo "Be PATIENT - This will take a long time and might also have gaps between visible changes on the console." - echo "WAIT until you are informed that 'creating mmaps_generator' is 'finished'!" -} - -# Create mmaps directory if not exist -if [ ! -d mmaps ] -then - mkdir mmaps -fi - -# Param control -case "$1" in - "1" ) - createHeader $1 - createMMaps $MAP_LIST_A $MAP_LIST_B $MAP_LIST_C $MAP_LIST_D & - ;; - "2" ) - createHeader $1 - createMMaps $MAP_LIST_A $MAP_LIST_D & - createMMaps $MAP_LIST_B $MAP_LIST_C & - ;; - "3" ) - createHeader $1 - createMMaps $MAP_LIST_A $MAP_LIST_D1& - createMMaps $MAP_LIST_B $MAP_LIST_D2& - createMMaps $MAP_LIST_C $MAP_LIST_D3& - ;; - "4" ) - createHeader $1 - createMMaps $MAP_LIST_A & - createMMaps $MAP_LIST_B & - createMMaps $MAP_LIST_C & - createMMaps $MAP_LIST_D & - ;; - "offmesh" ) - echo "`date`: Recreate offmeshs from file $OFFMESH_FILE" | tee -a $LOG_FILE - echo "Recreate offmeshs from file $OFFMESH_FILE" | tee -a $DETAIL_LOG_FILE - while read map tile line - do - ./mmaps_generator $PARAMS $OFFMESH $map --tile $tile | tee -a $DETAIL_LOG_FILE - echo "`date`: Recreated $map $tile from $OFFMESH_FILE" | tee -a $LOG_FILE - done < $OFFMESH_FILE & - ;; - * ) - badParam - exit 1 - ;; -esac - -wait - -echo | tee -a $LOG_FILE -echo | tee -a $DETAIL_LOG_FILE -echo "`date`: Finished creating MoveMaps" | tee -a $LOG_FILE -echo "`date`: Finished creating MoveMaps" >> $DETAIL_LOG_FILE diff --git a/contrib/extract/vmap4assembler.exe b/contrib/extract/vmap4assembler.exe deleted file mode 100644 index e5331a5f70e68253b89a522ae8c822bda663aadd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1427456 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� 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

    !m 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

    tM_mWJp=3~7A0s)#s1Yk`~9Uzl@v?83LlJy zv=js~vmyn7L%)51SrAmZow_Xbq_juN^Zjwetd`!gF!|Ru!46 ziLjO}DXB|Jwy7;Lvs3X;*rEGVd&d=0m08`1g@6`#x}bSZKy9*^LsR`zGXmx)K_o%) zjuPCgRfwA(Njmr$`JqM!@z4G^L6hI1Rf(r-Yl)}QIo_eF0BOGH?bS`A*fyu(tydz2 zUwK!sN#70_C}xR@YA$NyYS(PbEnD^99=`}x7_$_6pg0Y?bW>bdY<^Zcq5`^1S5NwE=##Ld0c3R%}%%VU^&-0W{fV5+hF&A$mbfkHWaqbTlr;Oj1 zYs1C2DtR};^ev`bKAov0i6@21y+Go*UyYjlB^K{CJfVH9NG@7Do80ll1#L zj3hP2c8ajzWwCB(^;ktE_b<)jNGaX^wfs+d?j&qlxTL2;(zA^!GkjmypnS=Z^2HM} z#Sr;z1P%eD&ndS!?=d>fD!sZIk6ZItOA^=iOPuQ%4Qc6kXer|S7SAbix`_Xv68{0Q zb*pg`@s}(`#H7GcnYc3Y1x;JYC!_=;uvS`=T@0VHV^uX3r!5lSeTAY zmABkn$YXC>eTdmRuCyBSMQK&z3o(CNJ`qkU*;`AI?6zF8R=RBsLgp&|DQ{HFMi@W(8SF@fOGfJw>@!&0ABkSW=~YzJRyb z=A_`-el=5Y5?7Lf25$~5c++qeW^Wp5m@i60RrigYF?E8|S+mL^J((|7i$P>Ti1a^= zyxY^ryRz4pnyxlAU31Q5uNK@<9`FH)%85Zsw=CEqs~~oB=lssKw|ox!C-cqP)kr}L z7QyuuA>E+>P-M$iXv$cV*-3Z-$%JvfunuAijbJ7k4`^icwo0GYxO=N{mm*R*V%lxb zU2okNr41Heuai^=FxoIR;^^rsnPZd$Y5ku@=J?0MWL?Ca=7!Y^hRK3kkec7)pl_IL zB^RnbBqo+Hd2H5)?J!@IerBtM^zxpE#Qf^bS+`lHGaOsRn;!Xkp?yM*Y6{4-D&IzJ zDAfb2r58(%mFKWml{H`L3-Q^TK3!x!V&}#Ngv0C!sr_^EsW)x5$Y-sH-~*L)?b88PiM8UW3_^I>#ug zjY^H8m64a^TAq*!gZh*{DnGW69f6vBmQ-JRMx~4t$wP5~66C0gC-veYaeR?1H&R(f z83=%1);#e_`7ihQ2p!K&i{^YX!4x~P)LYHJEtV@|dt3F#PUZ9-Roc%NXN*3{8B$fo z$0U!+I~~kvapj}j6sz93auuSO3V-=ljtrP#+1L!0{;}A%@ZmTkx33WQJs~MZzP`V= zs!*D#9gGtMHKuov z>H@Jf#JG9Ed_`d^a%oe1H!77bP=Dw)BQKfr6~$tM%xEL@4Z`X3n0dO2`xoWuanr|5 zy5NvCRlh__e$3e@{Ucv~%yVc<2$)tW5ox!MaJNyMu}Xyt?HLJlAG6(Ze*F?FmMczQ zDnD|(Aql+<;i{DmWEmqr7AyH>{6GNA1jv&FAUD$EsgWDMk2Z5-48dEaq^ta~Np946 zo0|G)+MLR{x3Fm$PIJV-$_m-~n&Xo1){yFEMx}FXET&i4mOQCWWRy+5W#p{#1pQ^? zu5y-~_M?d6?7j*)qtU=>IYFfCGxJCv6*M`wCof)mSAv%QhcAyfpyXId6ViqvgR)T5 zM1~)TEsxonU}2y(MI`sJ@fvS1D@-)ki>;fDn-`REl~*HB)1j)K{|TjmWr|lkuNH4H3CRO*;!#C84K}~x0b>#!5seJDAlpsi!5)#? zDx)!><%w@&PDyg8kp|NTDHrjFvRR^_X%eA@mN;O;9P-+AHo$hL2M$QS6)vsl`r-u-r{ZhU{ zT_rVvay1NtWT`N!UE_0X-t9{?Y$zt>EQnZRe6cryXXHVSJGlAcc=!Tz*>G6`mnCpn z0+%IlSpt_Oa9IMEC2&~+|Aqvl{p~%EQN~d<`KXe%VpSV9zGI?E%T7(ra|K(%x}ur2}z(d!ObqD>OL_i-vRWT68-(k``mUmDN@qRC7AE zHWtDS3pOmsiVQ5&OFJvGf~mE)$9Viot>`q?J^w-wF6Do6wf`fl{U2QI{~gu--(vbt z0Ocd?K_A5i62R7CVMFhR1h9!%*bpDYeDoD!VMAFrgb>AQ64DKbmAfsGKo^zxtOQtgjfEPX5b9lmKcSut$Kn*QuhVkwxxp1kVr2*Wz+ z1^vEGYTU*ca`y0bdFi6dqj>!Zx-;Yet*3a_S5G%Rla<$f#o=3&!?N3T|q>KT}sG4(}HXGZ? z9rUGTMpP1a%25%_n-*tfijT5hLw;jdw6VL~VxnUwCoGpc-0p40Wo3fCwu3lp%@T@ z^pa8|tjvFyJL`@TD~FaX_LrIV_oU`~EYD#sHqA>g7ntTJG4C|ZS(rsO7M#k&EQ@rc*X+c6QF^ls z%rZV@^!?K;DHA4*vm}jnj<$@Skizm%bNtL)Uvi1{UurnMzZOgG)SQw+Lf?X&!AN)}s8QYO+KxD28>B9&Dqnp)~$k3VrkVagDlC|Q+VEsPR3t5w} zUK|cp4$Dk!p{z+rPSlqjF+ySPLO12V>?Y)YFG=mCq!nfnIAhl`T(Lr)BTtdrTFe*8 zjWR`*C;!6w8#NH(Bb_k~K_Yp$mQ8@QVhMGU%CYS0fQj+!IhVDuceYn~S}mRJs?4%p zPG)ctjg^`8SfA;~DT~(9sM71T3K7T*eL#sfwhR`t==NkglMKs8_;a>MJ(ZbNcTBM( z`CLFygu-lJhhTd_oNmX>uomOj2OC*93m!JZ&OJ~L`)*1Z9J5`C^E{&d?^{# zthq#9#&+w0NW;4>P^MJk^?53lIQ@oQQQsO4I~8OC zHj;o{FypAwC)CWpmpTjURZV5C6fCCQHDznWO5loY7a{ zC+PQKgOXlNwC^;;Rn`@81rQPuS16&{LBM@wZv{`i=S^6;{Y&ynD~mPDUs)u!@hQB# zxcrrocqy5+2+~+{NJ2L@VxkR`JI_f}qEv~jDz8SApMk7yL7WNND6#(I_YzM#CFU-7 z+)=g?srAHrRen&@SESI1wh~?PpnP)3k~&(OD{ik4w+|?bHf_GR^^9^$^3Y+uE$_%z zuKnDJza|82h&f884Rx}2Zh$+&jtEtP?&bFMK_=TU9*4ukd;@gBbOsW$kB zv9-jgnf&I=)Uw6*wc>lFQS)j!;_F8$s49Absq)z!X`srdIa!E~`%Bafwq^YqAG9Iy zsL0!)XDDX^)g;V1arazdjaXknIwP|q#>6{rv^CstBy%D-G7D0maxeqwQIVx6&-qFKwe~^4{0-UQ;s~Q{;t$Ly{(Ph77WkXn6f*iRqVymn?zks4bG$_sHwt z8I`*kUu~JV@|1E#YN7pjwNC7QD|X*8>}uI!X`<;Bps2~TgJR=^D$r=kk z0T-3uGe%DvIVNTD*as#|y5EvIDRtVo^A>3R^YXQr5NOtoM87kdK1XFtyDDFQlGs)q zR0PNt8|{?~%h$i?mRwN24!8wDyh<{7%hw5*edX(5o_fpIQJ61^PtD56sJ|)Dw_Dg2 zYpjuElCEYILi}pfLCddF%tY;Bnexjlb3yK=$q6kryHy3=*+1zz1AGAts zkUl5ak}4ZfDO+eChOxf9B|S6aWJ7ZopRtiBLBAC%^pA}`1{?S&ahu4JH>uLAXea2k zc~vd3Fh2x+j%z7us*_WNr_065rHUQe8@R3w`;4eALenz}q@1I*BzNB9nZDX+@ubfQ zwK!>+gtA~;CN&G!U_+w8O*ullKyDVSQ#bi!7n8R1o%hMjec9?J3%jIYlNFaQH}iAU zO}e|hZp%vCDK~fKanr@(QJ4BY(LP!u`IvXcYxz9TkL{DNg+}cOQXhEK+t!tn9+R#5 zCkIsFZ1&apE)+cm?IQ_%jCzGis$?702en+W%);uG%*axA$_jWIkd^7(EvcF-COp?t zTci>8IdR`4udgvGWmjCd$a%POj7?e*SkQ-golgB)@98hOf=Fg=pzAOTbT$lC}SZHjnuAWKt>;}0whCS)A20VFF?Z4PQvk(xDsxLBQabo?^A9P zj?NN}eA9;=gkwE^5FfGRYVM6RuJwgVKHVdsVhbb97CBS1lJ>U#m3li+ zzA^Ha1f`1vMKuhT8Vv@mr}#bC2#K_y%@-FM-l~WshUeCjT3$<%w^gHIsPQ(k7GLUn zBa$MH)iDFLhlrFCEYrm;&5Vd7GI|oLa;H_L?_r6^xIJF+N(FADZ#a>VZJ)9aPl@7M zQinWEYv^8WiUj4Tyt>n9zi2bXZ9?^V zPnQfQ{a&W@$(0<#raVtoPT1wHp4(JKMOz|)_*LAv-3-KX2}Er(5UQC)4*pGSq#M2< z4Assu*GaGKNAsc|vZkGtzD-uN)#bw1zF5y=Z+|xj^S{u(@UD;0uO*OXS>qf;M5494 zj|p5O6?VG7oSbLlwx4GEgxhCBB}#0pt;*_6d%r4uCP=G8*=Ge>*gGpLH1d@l`Gg4( zB3aFEcML@`W-&$ilvWmj+!?+rWclC5JFs|(?&Eq#axX0qf3?2i`2m$s7~70g9#q+f0;k5i>ckg34edSFgu8iFc7te>~OY&Eb z-MQn|$0y&e@BK#Q3N=(r!H7ii zXl*`qqn1Q9sNbb>u3gLFPV!j&L8CmbvBK7&6^p$HB^*1P?vs_iK^cEiU>SXQVOF22 zBrL_wlfpBFQm&j9%YGPfc!C~kI;^&K2TKu>_qB+dvM>-E`ZjeX>(qBKe~~XQS@c`> zixuOONzR6PC}D8ucU`Galzxw_%#p3)%DtIh_X>E~Rpkj;CSQ)N(%+PjE0* zk$jTl8ScrtYh|TEf84Obh8s`FHf2f9;(L(0>Nwmd^a!oF@sNdy~BGg-WGdEr}HpvI``!kb5;GF~_iSfh6wdu9C!T{hggPBq3X@jVg%r zOfo_v70(Zn0}_LCYf*et0}%@CF-&@66$=^|D%!cqDWcs|nh0ABhsgk6lL4ZQX!lYz zwJ!rSAz}_aF1R|{oC-jVImd8`P;0U0NBM0DRE;RhPV48mS0l;`3@aBz*~wkihg={5 z&;F`9)}<{7W3e1~t-0mda^urw<7|*e`EQ)XoEZD*^bn}?Ezx)(|_SMWzz>(p&|JXuJL(|*WRSeT;5E+hN?gqPT+0oXWF#X@#ei7)V)B4l+9dtSSLqo_ zpRe?VN?)Y(B}!kW^yNxlq4d>CU!(N3N?)h+^-9lH`X;5%S25kD%y~-Rsq}oM?^Ak# z(hHSdr1WB?>q;+Edb!dolwPUyDy3VL`&Omflpd&byV8S|9;);(rH3m$Lh0?4-cjkD zl`fk$J(05E%o8b_;E=!4^E!!no6timp4%!e`#d$i-jb@B_ zrqMT8q`g+MkzY3NsTPj;XgxKKJbH;o6!GaNITV2v*LGWwIwzmWi=Yj*D9&v;;*qK; z(YE=7Eh^Y8K~tXrH^28zYm4ukL~*LikIG(*ZL@BRvMyEjs7Jit^q^fBw4qj1j4e`G zi?eMmu|)-DDr<}ZB?hVwkJIh>|HNB+`U!?&>?Lo~g-{<}XR*t_8a4CF_ngPYglW07 z$*Fgpfkq8|srCc*jNbC;-7NiA-t`cX{^;-Yd0XX8$f}wN$vLXNgfzV^{hU`hAOmN@ zgXVoJ!yvMGuPVwo;;B+?OyY>ADl;XkNJ-P};7pr;eY@lmk4&3ZZPx9|QWOvVD;PO1?SDh)?=vtJ?Zj<;_XFZswN2rOI8hi@2Le4D5!bD4vMJ;#H_GJBe%9 zifW{`>+yj=<}W1%H6>trVs$H*$*@-yPPED8hd{})9;4iC?Y zvzJ`O92nW#IyLFPFbm=t8QNa@41VynqVo%Z^YUU1A}*qlLLjl~^d4j5skG4lhJW%u zW9bS-3ni@oW=ia|AH}%&N1Oi^o*DUi^N~>h%>tb1stQ(jDFurBoi`YSnq_sKWd0vj zp@rxX2FMYPA7g;o-nCb#gMS|Io*e%(tNVT;D zPpL!A@2AnuQ=clcr+$r{)A@=SsUcO4ry%f_5ajI|C4|YQDj|%q0O`w7-lUa<(MV)G zS;j**a$d&8{9p~mij_)Mb;9x z*k_5$?jlwim44?|*YR%Sgiif#)rz&b)#;rM^P%3yyt`E1O)wwoos7GTmvR8MQ?@+% z9&I6Hj5%jXtJJ>x3}rJ1tleUI;#NU+=sz2l&VOHgaOm?cet#bBM@ef*qHc^(+eR|b zBq#OwMyTK9B5j+9kY?Q5T!?Vh8Ax{QPGP)xE-rVJ_wYx|?J!SHO0vlI`120OG19}^ zA24SD)IkqzRT1vTDq3kxd)q#NyIBDzYwc9y%2v9M{7{{=s;ge3e_^^Osbp?lW^ZWt z9FFm#Yz%Z+7dXgbEaW1@vLc!ilVd-vi%Zp~Qp)r_#84dfME1Q#dPK2GAE0!H(w$15 zqVyD{Yf4X2`Y5FjSNbre4_3NU^|GcYT~m4mhctR3E0tcQbc?!gRk}^-fl9Y4Jy_|X zN)J?Vhx&RVgOwht^f0B%v3Z`z2&K1Ex}5y(iIk6Icp~L6 ze|oJ-mt%wJwJKds4kay=KA53&PvkJA4_Epqbd?Q!T8{>sa#};i?^{d!7$Du5>Sr`L zERKXhLx#FytjQLKewUPT`v86Wm>IibS zWs$3&)fLz^ZFW<25Or#hYj9Vq|L(M&%_IcQMy>%}$ywI;1U-rw9LZ)eRnh6WvMjhq z?b%!K@lyT`as8J0hx017473>Jy3dw*$Qe9z-A>mz*O$M)>GIF&XU!TCm=!hh-Vyh0 zv0ea_FTAdkg!o{O)6N7V%>CUjNPvy-ek`HuHn?e3YJFE<0=&6faHzAX>n^Kna1cSX zCOGtT)uFa2o96}k)6xLrW~vPzwiD1Hu4wD+3?ElwzO&nvsX^U_1gF;PHY7APpxclz zC!dzI4jmG&U#}z(XuRAnu-o9yRla8-HJ?ql4$S-`b%P9Km9reeVN^+W66NHcZma*Olx`&&zY9ny3-Sxq;iX<^c1B}QMyyTI$9%kZ1p~ClwM{%*fV0-`1GPj$ER05>fEa= zho={pAIv#8I3o0i*%9_1QX=dw%&xu>GXLE3`;yE(vsxYui*N--q{;m5+_cS?EQ_vv2 zsGfOCEV*usW!OrkxMwKy1SNm51!;dTS^GDwEw$)A?8GP6c!W?Jx|hoBtff2AWhz&G z3!2sE^jp?@>rU-j_M?lQeXaZFRh@ZMYS!qIaCarocZ}Dp-tcV=OF#9 zM&d&#=yYR215YMryu~+ znkk`A=HiIw0FkTheo<_Q0F4(ii#Th`!3%Ejf`ti6q@Sf!zwn{ha4nUDa;Zc!gGTM? z&<0>{Nc^A#&r%Tv6FKRXeyM&tsa!{nh}w0pp3ch03(7XhA}W6*pVKODA{Ew6sb^1G zDar5P5KszPm1VAvsf_x<;f^U!S|yLN#_3Tx^J9*)2*{6AlS(>{!;g>i`4LJ{nc+{a z?a<~oo*3;38GuMi>#DKDt*&u8EdZJz9u{pMcg2+_Wi=4@?mn;3^@b<(=Kml(l8cP+ zsD9% zygq+P1Gyzue{tn6utjI=NIgRfS#EaNGH}5_zuUP}>B`$&QpYdnRuk7JXnA7b#4l}=?`00MaS$~3k^pgv^F1Uy zF1JL%ohi3iEk7t;|3IxAZYP;l2_=e;8j4V~DY%4Z=wCC)1)w1blUDRx<;e~tPQsV{TBMIov(Co^ZN zc3q@&S^MFMl=U9xiJ#?110rl4z$M6kbMqbbH{V_I5H*(XZXNI4B<^}5mn&CRD1Eik z*IeM@AleJT^>b1~T?1%8^o?L0$LZhrwV`i`+EeOq<++BdmPMf4-CeT#(C!nv3+nGk ztvLO=EAMntMDSuXyZ`Q~4SNiZ2%KT#7mL$v9r{Mto70fs*T!$)>F-V#qLAR{XFzQKCaz2!g~4$VH$M$i1O7YQSul6ZKsd;@0E8wk!yWY8#-hV ztyCqmIl;F}s7@E0{w}@1lEu9&BamVBbBt%9)z89s=8dMb(Sm)^w42c^AV8tg^5Us| zcj@kfO3sIn^KUMRW|)d*s4tqqW;E?)GzX^E@rroFNEPaJD#h0;JzMFUl%At>Svcg0 z%v1VKrROVspVAAIUa0gUr57t*S9+P!%h4t0Sv%x$%2Xzn#DL#8%1V@?1Bc z(^FLLbya##rAI5hFZ#}%s^RMG4B($CpD4Pd{ae>%&0N@`K8@U{9Pj+3@thHcGu9cb zQDm6FEluRCVD)p~Ru01RT2-KX?XMh6DW26p^xS}9=oD_Uu*COV?qxL)JvTsXna|aG zHNv-2Y%t~!tKu*~=?@t3br_ztag zXe&n7V_h@x)bms`Jd}{r<5n*8RC-sXcTsw0rFT?%JEcb`JzVKwN)J_fFnUejP5H-b zPZ51>HL_2xrB?iSLabO#mtEBih*wcnFQSfIRY_mV)j;&D20FSN?v+|cweL!=p_7J0`SSrm+@3oItEY85>R{E86mgs?$_Q?&9n|R0Jv9FRMwpWP7Nm{Mx z+gJeZlwh?cSekVu4=pQr_>J+hNHM*at(karl_tM@3`_Zjdv?hK z>g!C@^71U%kJG;yq#`heKynO$l)O%uL}EdiFDhZ^O6+n79*664VqUovqxO<)F!Oy zWu?EffhVMj=ySK5AA_j{-0qQBJgrvg1m0i`nb*5Q(_UghRxM9r;Y!J%WLYCD`7V`J zeU^91w+<8YWjML0N6bzq!`As(ar?NNm00YG*{M$IETZ2~awmNiNseOTWl=cT43Abx zWLJu&h%i!HA|hvjr=FkM3Jx;-mOxc)tNfm{l4Z}vGB+dtldn?)^mVX)-frL^adKOr z_gx`Z*{8qO^}_zqw(`I4ujR%Ri||cEXnL+Hr))7nP~?S}YUE<=K#_4iYEgpzn;QPG868>WqG_8Sx(Ocn9Dt>?er|vWmut^f zj-2?rey+C^R_U2m){dfRm9|o@Kg*vCn8}YT#;M@*2C6OwgOR}Y2t$?M3!!mjLZ3vO2HFpzo3RP@_Ri`$QrDylCi$(wtTA6HzMD>0M#_zr51bk^!o7C>!~2+3{&zQx1+<HyNcZernI(cf0ElwwICxqjmo1NuD z2YF=wX-0qbT18fBmAt9BSglV#<2t&Zy&0*;_f4k!X3>a4mI1$!p?VOr-?o zEsVX$VXcDFS73Apet|A0Bzr>ElUzt?9Y3ye88~>9C*DvHqe?uMKl!$S1i+clVNO|( zTc-ABI#89yJ@Tg4>(O)j)PU$7o2UNa>bsqprr=~tB;HxrWyUGu#Ak}(1ZOkI7yP_V zNm+sjEJJDpWUT~*h>!}NJ@U4n%MmRmT})lYBx&Jjhbg9*S%MnPAEP{H29#V;J)SbR zSC-@!CwU!**@d$Gn9<1{;<|A#zG;Od==K1ypLY#<1clV49Oh9~!ql&q=3-OzN^?Jk!wO+F&Uk8c3BSUG0V>^K#ln<-Xo zxaisIS}OJuTm_y3rkk0EQrDz^Dlhn@zU)#~*Z8F_-L0or)|&c6?D%fWV`S7cHGO>g zrkInMhC3T>98N-w&swOSM5ll0>5!j(wqek`;iR)Wwn5q%8Tt)+JdR6Oh)C4cpa|Wa zp(2P<`%xFw_ho-m-=E+5kv5u~2}LdH3CTCwk|pyI zOtMX%Vt8oQVy+NrHu;)x#j1S+XGSZE^PvjWu}k#TxGB8>hu&T}z~otxE3O##tNRFi zPsY5IR?_(uBtD;@x+AJoki2>6fnc+OROP?;sh^~dw8pO56s)xD>Ni*e6m3Q+o!+;<4rjb?U9_$yIl~_@Fg>StB#ZLO>cFIq& zRJ&VD<+L_Z79|GqUGJ$^;x`}dW-)~SowjaqfztxG!684NpVt@j)u*&C=U$ZG3jQX) zF&|(wuq2tuSd`$!?0hv+iz0@Pj_;G(W+rgO>??UzY{l6+#1+dorPTMNc*PG8=~$7Q z(&rShBhlAKP^~LA7?+OW#&BN@fYDk^loz*}ZQ6(}1ET2B}gvjD}5>uVmUlAo=X<)aStY43k zqxdn)s&}t>rq3+3yC+1}*OQ)6F|5X@Akm}Z%6LC*PK5+O`gj!sG4KV`#0n7|#bhI_ zH)zCCo6SY``pO4h%Tj^E66*m~BhP4&>F32*@hJU*)W&8@I+ZV!Ns*94k)ZOi>aKVq zi&yY^hC<6k|)xkbg2$K zky7w@BBi8a%vb5sqVz;c;G$0v?RQfuluUERX{ydS=K=edP96XUbRS4HA zeVx+RD?MB3o0OiT^leJdQ+nV4p)Yqs>`e_6ZwmSy((>RPs>u=mZvDisTpl*-HkJxd+ae41aG={dvyS^odz zUuL~z5!^Zc)#fRF#f`sL<$W%AHrKrN{$B8yxhr>ldmjI?_#mI(0{+EP5x=@=F6XzB zf3ahEqQ2e6zZmWOhVn1>!})Dz-tWwBSMz>Pe*2o{0sIc;U)~+gZxa6^s}z2nrg=8M z8T^Z#h5Rlt&CB^+ZJO8eyWTW!;&+>A-pTJi{v|wx{1%({%lNG@%~kwbpESeIZz%sN z{QR~v&7Jw}YMP_@jWx{5ygw&$+ca^kwY(cbqPZn?$M%MxypJ(RKChYxySR=){T$0dv#GkV&% z;Ys7B44*h_+Jh-66P)9Q^E-UfIOoV|ux}+;fZ``@lG7xO4L4@RZS0?;m$< zc--ij;nOBOG|sU1@5WWaJ2qw9XmNYOr16vau}phl!jviFlJGYve9SE8xM|_zr%s+2 zKAx{R;mNdWdwkJ>un_E|S>a<+o#B%wrOXPC8Q72Dsk`Bw!jmRU8#{T@q;X@NeDeYI zpM-CGO6oMp15;GoM{4+|}6OuO^q#L*KbVK+6r`nB-z>Wrb> zxKJ)$H;ue9Eqt;h&G_)iQxRKuyMB{XCnbsZ9mB`XoT3s2_uKymX=8FSjVvV59O;}e zaU6d6WNKcksQ$Y$t>LzjWM0Q>q*+b(x&7ZvIik;x@U7=x&yBv|dZ@adFllT`YSOr* z2>@@JtDW)ltL0a#mcRVh^7prTf5q%?wFX>x?Y%G0tN{VF|Jm~k?R(#ocLQqIuJb?p z{y%g7LjSz}ir=;C)UjFSM(2dD7*%9n_A58nbzN`ON9o~ANwD}A7 z9_sPQ!++L!{Px_dU%&r&lV^t>xcQ?Qr-Pmx_|0|iPX4vk%Oiid_47x)&DiSv@Ly!I z;;y%CEx#<&@~LYvy*hU6_KexHE1#P&;}`eC5C75NwTj-cBkS=wbIyjG zJ^O3v-FLsg+Y!@2ZdF3SP<~O}RX;R@Y_uRAo&lM}~{Uae^bzF}g(?{>$|IybUd@$$X_U#jH zIePT)gV$X*;@OOh#-|1idQIECd!q=o5! zS6{gge)ie@{kwIW`u&}EF4;F=z%qTS1?URPGO^~lJPpS|+zvp4SS+joAq zCQYs#x^3IjCtrU(ao!`3RNdaI*F$TQlJbt9lFbR*V{zvn(yG>F$98 zUwX8#aMk$Mt@}Q5%{7DHTC}J~`uzFzzwFmc8{W>Lql%3A?dE}-JLD#)eAm!#~n}At6e)VB_blWc=+(_`?hR(dD7m! zpZ>abZJ*c1jM=tk@#1c)moB~j=HlYLu358A-f;Z*w|(;RTzB7m^Q4a^PW*16+wGV1 z?YHmkx$CawMQ^-u$NH3%g0n-0tgTZ~@q6Tn6W_c$ZrqnoJoHdS$vf}d9%{4Mzy0{* z$@6EK&U)%4GKTcoKuwmG$ z(WAGFyz$25Ged{IlfQA}gvF0N)@0b`&CgxkqDA+OFTHei*CR&`Hmd?;|GMCR6ZpRX{=LAzE%;9W|6Sn!GWa(K|Chku3I5lDe<$#N zAN+p-|3AV15Acrz|Iy(8HTXXa{Rvp9lUwga2pX z-w*r`f`5PT{~rAJfxiy^cY^-|;C~JH{{;S5g8vube*pXw!G8((e*^w@@UIR2Y2aTD z{(Zs!WAHx;{=b9&Iq=T`{{`UxHu!G>|5)(1g8vWTzZv{f!GA3HcLx7v;NKAZCxZU~ z@DB$68^QlN@IM0nuYmtf@b3oxL&5(f_|F6X+rfV=_#X%V4&c8O{8xbgGVtFG{*QwH zc<_G&{NDoqbnyQY{M&>7UhwY;{sZ|26Pm1OBVQ|7P%af&UHQ-v|8f2LF%1ewteG z_`eJOPk?_3_=kf3x8Oe?{3nC|RPc`g|KGqr7yRSFzYX}$2LI*Ye--#22LD3ve+>LH z!G96>_XhuM;QuE07l3~N`1^tX72v-L{6~WS8Su{s|Ha@x4E(PK|Bc|^75p26{|De7 z1^%Ca{}k}g0{_>+e*^fp2LGqPKOFq;0Dlko&jkO6!2e0`uLS?O;NJxNzXSj4!GAmW zXM_J%@Lvc1Gr+$Q_{xiV;Vemf*{ttlvWbpq2{5ylcANb!7 z{vE*o9QYpq|F^(@I{1GH{`0_p2l&qc|FhtKH~8NU{^j8RHu&!Y|5w2OUGQHH{;R=% zD){Gs|3~2e7x+I7{%yhkCh)%%{7-}bPVnyn{;z`nPvHL>_&*5#1>k=@_=kYM75sC- zzYX|r1^-a+e+K*m!2fyhuLJ&9fd5?Z{}KF4!T)OTe;@o)!M`r}r-Oe-@NWkG&B1>X z_}>HmE5JVi{Cj}^e(?VQ{M&>7QSiSG{4>CR5cuy_{BQ2~Gx&#te--$@2mbehe=_)g z1^%Cbe>d>I6Z{8&|1j|X2K@8E|5xyT6a4=K|32U!2mVpup9%gk;C}}EYk~ix;O_wc zp5Xs7_^$!~c<^5Z{?Xw7B=|oC{x5=mSMWat{+qym1NeUj{#Sv&9sE7u|2z2a0smd# z9|-=9!M_arM}q&e;NKVgn}Gi|@P8fr9|8Yf;GYEk_kn*?@Sg_$qrg86{0D-6A^5ij z|7*a15%|vs|9;^A3;1V)e=zue5B?*-zdraM0{z{}k{a0{#`?e**l+ zf&W9`{|@-u!2e_Lp9%hv;D0Unhk^fV;J+UHw}Zb9{)fTe3I46Xzd!hY3jQweUjY77 z!2cHT{}BAggMTde`-A@<;NKAZM}z;3;6D`nH-i6T;J+FCTY&#d;C}@CE5Uym_%{Oo z3E+Pa{GR~-CE))8__qZA$HBh@{J#eOMDTA1{y%{KLhxS+{#oGP0Q^4(|6}0a8~io! zzYYAK1OHCo9|ZpEz<)6Ke**qjg8x|XpAG&q!2eg8xt8{~P!}2>u1&e?9nzfWH;|bHTq2 z_-_UOQ1E{S`~$%MdGN0T{#StiT=4%9{7b?AYVdy_{8PcdF8HT|e@F0d2L8>#e-ilL z1O6+(KLPxEfd78*{{Z~kga1+RzYhE}z<&_1|77t03j99< z|8C%aC-@Hl|6$<&4fyAS|F7WxCiwpe{(Znd4*a9QKNI|8!2b;R*8=}X!QTP?J;DEF z@LvP|@!-D-{G-ADN$`IP{9gqBuHb(P{5OIB2Jrt5{I3FkJNSFR|99};1OB_fKM?#I zgMS(Lj|Bf`!M`u~Hv#``;Qu=KKLY-}z&{E6?*sp);6DxgM}dDD_zwjCLhx@5{?~y2 zBJiIN{{6uJ7x2#p|6uU{9{fjue|_*j1pY z{~hqRf&a(gKNI{T!T(zD4+H<#z<)jXZwG%J{11b_6Z~6&e}C}*6#QM_zX1HFfd4Jv z{~`E~2me^`_Xqz!z`r5*j|Tr6!G9?DZv_9xz<)FNw*dc_!2byNSAzdC@NWeE6Ttr< z_&)*uOThmH@NWtJkAr^+_Q+-H~4Gde;fEe z2mYPFKM4HSf&XCe{{;N69E+Nbnt^&4brSUeYBK5zRA-bQ>V8xQ)H&1v)LW?Os4r3T zP&-g_P-jthqi#o)quxgCL%o7}7quL<8Z{M_gZc>d7wTzLThvXcTT!P`vTCOb>Q&TF zsNYZzq6$#gqe4(tR4%FwYAY%f^$aQi^*pK$>I&3c)Q_lA)YYi>QK_i9sB~0ER5Mg_ z)FjkBs1>LLR1egC)CZ{csH3RsP#LH}sNE=|{r~gN;ixLqd#HO+$*8YTpP{;;?nDhh z4MTl{%18Z*dK2|0st+m-6@|(~#h}ihYM~xQIZ!=OFQe9=;!&$m(Woa;PoZ8!bw!;* zZ9;88eTTXVWk<0O(DOTL4{8@G5Y-q}h8l@_7S$Kk1hozII_eQrFH{ohK2%fGG}I_m z8fqY_5Y-xW4Qdf;KB^z;7gRPX81+4B1gbs?`VSSMZa{TM)kEEZs*Q?34M%N3?M1Cc zjX^C&EkzZhW}%Lw@=!OUCZgP^Z&7!l-aw_G*oQx)0(Am44)qY~9h43AF={3%5_K&q z4D}jnJ!(5jM;%5vQLRw@QJCf1a&3K@p?u4pmDc7vUPQnX3vbcy8BlTyw&5km={~UHSFx#r~Qxi zPdwW>{Evy#-(Ea@=lsY4wN6zX_-WvQudexGZr>Z*KDlblhj-lb-uL%6|2T44!xJ$_ za?agXEA_gqSCkJ(TlH)|_x3Y;A2>epN<Gp9(2`XyWJJ-JP(sQ~GE7_Fm;2)_y|K z9ewk5JdvEWC3WVkCn_GeW!Q6vAKZBLhJi;uYx4H|^6_iKcdYOJ^_d+@!9lhqQ#PN07mA>!4<-_ZqfB1{XUbWr4_vGX4I=}zw=WRYt_OCU3-jzRh2>WKi zQ|o8FUVgI9?<;?taM!Mi@5X)mSwQVpW4i2KaPGBjFAlo4%ZkL`U%BDPf`HW0KUQ}u zORxXtucM-Czx?2cc>APJ&n&p=mR_|FKl4t&ErCBFL|?WuQz*TNl@?EJ6dL_4X){r z&8-{zbB7z&PHEKguBrE={OM`<*O0E6K`p<1r`OfpI^C3XFsR;DuMO9B55D(>?$_QF z@!tLQ0)vhZeR|I`zpQ_0@e9odevvcxmGHvR6Z+4%=gMYRgw^}_=^uZ(W<^e)qSifI zG--ZC{RVX#zMbnjxpB>gPI+&%49;x&+t2}ZQs4dL@N>WXHR{n-FSqqOz3J4{;a~I^ z-?z&nf8IO2eIHlh_BLN>RX=YS`&)7Lmxb3KuxF0#9o_ob#^H^&XUvJXGqbYSCwm&* zaORzfE8FMxzwV_LzjuDWuq@%R2Kh%f&q%rQgAUJaobtxm*d>ixCzag3ZDG}#X1A8F zDCjt6$ghi{TIb$%$K#uKcRhISl`j|GRDa*HZ_-Y^*6#aEk9XJ@&{k&zrVyHeGd05Bc@r z3&%hH`liWu?yLLqiT$(JwSV{h)z@F&=GJREFL`x)&iGeuym`}I&ey)2SG6vGQBg?2 z>rrxc`HMJ%^r(8e%VLeEa^13r8P#{-MB?H$M?v zd3RRN#-+bp{l?cf?il^i&p(A7>G|I658eI4p5?brJDE7^>)_DOZ_b@|V%O|I^@~ z2>yS7|6=fu1pg}VKLGx7!T(9{zXSa52mfW@e+2w%f&UfYzY6@fga2{xUkd)E;Qt-? zcLM*t;NKqn`+|Qm_|F9Y2f+U@_-_FJCg49F{MUnjDEQ9<|54x{1O7$ep8@`1;J*a? zhk<`n@P8cqKLYFR@k{}{kO9q`Wt{JQ}D8v%a>;6EDh*8%)X0sl&X|0cj+2KXld z{?!5hM}U6;;C}(|zY6$Y2mH4I{$jx20`NZ!_}c;g8vy_9fWIN&-xKhE2l(p){v84T zS%80Uz~2|}zYF;P2KXBR{@H;4Sirw3;6D`bR{{R!fWIH$-w*J&0{rU&{xbppQGow! zz<(Ox{~YkQ0sNl<{#^n8!GOO5;GYQi9|HXU0Q`pl{`CO=$$Tbm3jzP-fd5>;Ukdm~1OBmqzZ2lU5%8A*{_6n$VSs-m;O`3f4+8wF z0RA5V|0uve9`N@B{PO|-vw*(~;J+5|_XGTm0DpbJ|1jVm2l&4L{1*fM9{~RVz<)X5 zKML?44EQGl{>=gZ2*Cdo;6DxUPXzqC1O6ibe=op)E8xEc@b3)x_XPaKfWH;sKNj#$ z0Q@rm|1`kAJ>VY>_J{y~8M7r@^K@b3@!7XkiH0RN|ee+l5f3h*}o{HFu{ zT7Z8w!2bZ?KMU|53iw|I{0#yBKLP*8fWI@~zY_3w0{mwH{zCx&=YW3=z`qvY-<0qV z_)iA>p8@{SfPW0&{}u4J2mG%A{+$5-0>FO*;O`6gn*;t~fdB7+e+u9~5AZ(@_=^Dl zUVwjNz<(d$-wyD<2lzJt{Ph6;lYsvwz&{=EZv^;j1O9ga|3JXs6!3oo_;&&PlK}s= zfd2`={}bT<67atb_)h}-TLAvG0soeOe>cG267XLQ_;&>SEdc+1fd6lRe|^AzFW~PE z_=f=gGXZ}Gz`q0FKNs-t1NdJ8{MP{fx`6+9z`qdipAGmQ0{mA1{__FIx4@UH{-F9H020sMmj|NVgfNWi}#;J*j(Ukdmu0RKmT|3$#R z81P>P_}c>hI)MKez<(#;Zvyx)1pGq*{~W;o4B(#!_}>8hQvv^*fWJ53{}%AS4)|{e z{CflbRRRAjz<(;>-wg2Y3;6#5_}c*fv4Fn>@NWY6Uk3aK0RBAye<|Q!6Y#GG_;&^T zTLb>50sn`9{|>K1+Yrx+T@IMOpw*ve< z0RKgRe_6Yzfk_#XlMCj$Pv0e^qMe<0vr3iwL^{|116Yruaq;J*U!{|Na12KZY5 z{_%kSIl#X%;QtWtZwL6>0RBOM{|>-^AK?E7;Qs~i?+EyN0{(7*{}sT04&Xl@@Q(ug z`vLw30smOQ{~q9f8t~5r{AUCHg8=`%fPWF-KNav70sa>N|GR*HW5B;J;O_(YhXDSO zfd6>FzdGRW4*0tQ{)K@5Xuw|u`1b<*n*sj)0skj}e-_|>9PqaT{M!KjhXDU7fPa0! z|03X@2>5FQ{t*9ZJ30sa|)zZu|P3-I>`{D%Pkwt#;Pz<(g%{~YjN2KXNa{BHyP34nhc zz<&YYp9c810Q`*re;vSo2H?LN@NWwEzXbf_0RJU`|5(7k65t;L_=f`ie**r_fWHag z{|xYd0Qidm|6ss>G2nj!@b3xu?+5%p0RC+O|CNCMPQZUM;C}@0&jkFV0sn=7|6{=a z6X5>>@c#wyw*ve<0DpVH{|w-N74Uxp_>Tho_W=G|0sqc`|46_;0Ps%&{AU6FHvs=m zfd5gze<eq0^mOv@ZSjdR|Wi^0{-U#|9OCaZ@|9<@c$L? zPXYWd0sg}Q{|B10{CwO{KEnNmVp0Sz`qILe;@Gg3i#^* z{+j^*nt=ZU-3#DNh{MZ5{|eZ;{L=SCb7@d?B&5ywP)1#vyZ z9T5jed=+tr#D@{LMLZz!6~v7Z$3&b3@pr^!5U)j?66mC3!~qePLA)4o5yU$Z*FiiG zaWBOA5T8eU6LCkxml5YfoDuOF#4!@rM;s4vIKr%5~-@sPv|5>H0_A#s<)5fT4Kd@S*&#PtwoNL&-~uEbdpFGXA~aec&H5zkA! z8*ysHJrP$#JRWhq#N`oRMqD6q!o*b)_e7j7abv_W5&uVAD{*tgj}iArd>nDU#CZ{a zNt`S3m&DHzmqz>=@vg*O5zk6IG4Z;@y%M)eyclt;#61(IMLaZd#Kip(pGG_>alFK* z5?4!HEAe~8!4Wq{oE`C+#0?S`OB^uqjKnn)cTHR$ah}BQ5+_KU9`Sp`r4r{#oF#F_ z#3>WUOgt{}$HbcwuT9)BamfN#O8h5ru*A(0-$=YDae>715+6sr8*$gfITB|}JU4OW z#Df#>OB^$Cpu{l~?@PQS@u$Sy5?4puCUMrp*AeeaTs3jd#OV>YNE|Kk^2CD^M@xJr zarwko6Q54}B5{huy%N_?+#&J6#Q73mk0wX2U(o9tWGYx4Lhn?FAdZl65F>~!OZ%DSMRzSid=Yi zHw(49iv`?W1^=DY?#`Xy?jg7%pb(D>+`WW&tkmu~W6x@*zR|2t>6Wsgo?$+w8 zi>+;DT~L3;_>0#ZPoQDwxxRG^(VGd>rZUwf|7ARbvqDSl$FE6l8ej26(_t_ zoi)qms*cOT*|jWfOR>7lmSR#asZ?y^CPX5(ACUL@2BE}u=$Kt*#^+V-Ds>^TTT9z9i^1Hd= z9o0awpw58HPMO=^;aiV~Ewu4p#oQunvv6z~%JC}sms;pergmZO0mrJ^= ze!hi6e<7>iXzrVQ{iXk*^x0oWpD zJ5|f$)lOY{v7H4)!)qPtCjW$;nhl}-px~@r8rUZk(sL7NbQX;vWEv6@b@HG7{w5iSD z8Q4`cob}xkkQhLhaqMM(5v4+YfO%V66plTy=6YE-S39&DxZnh8W^eIz4Hr&RI6+Uz zg#siw&)nl1xA-2?)|&GJ7p|$`1kHyF#U%=CBVJOUf6HT*MZ(Hh3Jdfouf7 zHhdpsOU<1vgODVi{+wS+A?xZSErqmcu)v106r!;dBDO?hqWI`}!k$Qkh^?*oJNzKU z)>=rwQt;x;1H#ssD+;0!ZdpsXGT94?u;()4=4#KSgcCs{_Ix!s2}*Y&&>=VQqYlm$ z0WMt5al&N>CqgyYbESg|SDhBN_Cj{-`Rqveq+Hybx%}}%FgGW4ChYm@b?U^Y?bJ!g zjSCl@n=6KnT>e~y3U}e-qcIAbb63HytKipF@arm6d?%q$o%ljINz^BNS)AwrMG-o= z@#=DN6V&Ah##-P6Tbc32C_r3Zw@v=SOJ$Zh}f_jLO{-O5rAy!c8cJ z8+PZ>=rG`s@2V`&->V;A$h6RdK|{jRi`pUYY>6JDC!3mu*s9FgN~0sO2~qpD304o~ z#kOV6w%CJ&#rO9ggM3oux^mP0T%zBM0C=zE9x!~r;nIn3RxW%Kws5iMf#uSPQ;&s9 zCr&*$;UVGD$%Rx22d>(1!o%D}!qt|Ai-fB!obV`gkyvqoBwQWg4p(b9vE}dZXmpYA z_;eAF>mm^{BM~wqapnVYZ3wXlnUM&YaS}4)BGERD(k=~8EbX%V^wKVGA@KSyegZGm(vkBxm^(Vo;f_;}a>wEC z+2gp0<`M?KygI?`abo^r_9#1lo{pk`w8~C67RS4@lioE88%N>V@!@idH8{>~dMxKU zj@G7cB5OJ`idSYa#n5$X`>Zho61v>AFcO){aQkw z3S@u$wR)eEMK);*zka=_=KX9QZnMGeZt839{$2Goc7#I|cUgT3accVK++G|iyGLjB z9LrxDe{(I=EA|ykT;*NY<%&AJ%u|6g+Dt#8zLq*GgEvmOtiI;reP8Z6#X>uwgH-?d zzP>t38Xb$$o>MwJ+Gc(5q5!FiN9RE+4#wWJ5hbJu9lvhbR~H}s=V&uO_3p^J_LP! zdRjK!%fC{+0=ZUjaJO0?-{@7JbxNe@GRz>t^MNGrTFi*BHJ2V#>DuFJ)n1<`>0OS@ zsQ1NYr}y7-{E)NdH~9_AIRCq@7xk{+9^CEH<}DTlrk$C>zT^7lpQkmw=*_(7y8m8(O z?bjPV)~s7p^~Lg#d6oQwAC>lvj0}>>jc-`UCiP*0UOii+B_F-MlF^aU>JtVYtM%qY z!FHMV<2`l$$UZn@%+$S~?l!p-#sY z-|d;d=tj4wW0%(bS$h4-@W&C(p9&P#Zd1dy=4A)oRGC$EdDx_iRe)!WUr&$GyVG?< zHSb>~m0KGa=pLLbs(HFqR`|foNlKB<)zH1G9!M|fe<&Q5db*%(i`2aByEf&YY|t%p z@OZsl=3V>`?Aa>ccUY91{cLyUp`|tN@2;}+@{ZU}J+A$+E#dMCL(^MTlk4AB)zJ<9 zZDN;@h24io>22~GK1%nZ{(}`?br!VFU~24Gsr`$~f?6*wudO~M{8go)r4)sZGX$!vu<@nD48%uMOo#>t^MX_u9)Z10EnTa-}qT$LWW`}fwb+@hmtwf+aY>^t5@ z_rT8ie!JRN9iHjG@oRpr_+nnxjFkl)nq(9X*`6D+%=A_8)8%W2$JJO6RXJTtXSsu| z{*y^z+A(zpGSw#ZJhZ6ZsO0Z5jWwO)# zt1sVY-U(ME-)wfi{=xA>O!vMmO4zPU=&`5aBfsiXqlee}dZvq3sK0Kd+Fw`7=0s!! zy}$A`QtEn9UVr5M8fnij>*f0Fs~Is8(_ZNKXU zp}Kb+Uv#-)=aZ3>ethNr!m$^3_IUg?%fk58fdkWX_nom=km<8w?XH&9Z1eUl(8@pG zc3`3Jp|AoI^HHIh**&GlDjS6lUD#gP&hDV@uGO<^9yPjK&2LsoWi#pzBx0jR6M}3l zkNTLkuX%et&`i+z@)(EN_6SS`H~W8|NIQ|dXKW~^0QKnQzj-?8=Pu1pqgld*LiL0c6X=t&=Vtkqn}yGB1_-B zZnuATu6Rw{JmYEBY1(uD%vsf7->ixHiG}H{>`Qib{hIh%b9|vB`$q0{cUH$J6XROZPXQvoWQ{g_K!!b(nMh z?&5sc89^TvXMBnhe24DeXDClwd);By)W!NK^So2@3u~vJJ9+tI(bENIKfdwL4~l8> zC^51y%hz$$M6bbv>gd;RWMWwBX0(0FWfGHa8zVo<9{D{Q(@N*;z!3YqK5H}PRl2`w zdc)@DHd+OK&S|%;sO8q@c@DeGlIyIJ@6?&RxuyH*KMZ~H+PWqE8J-}!|2EN~;~w{x zwy{P!O>ElLsro9%r&s1I_kPiZvP5x7Qs9@@kA6Rt`}xb5d3o2mrJX(Z(RO;O*la?Tk&cjQ2zqikG)5 zX*cOvV&s`E?$KA2Mnm75w{t5hvMmfv(>^{n*tgiXh3s|jhp%^5UYDD06gF?7g=yNV zw%HlSAADF<___1B*VjjXF20x(nLh5b-_9l7byn>hYd>-G_LjySUK(oKSh}@qs!9-R z?<&H6GI^1GZIj(bCF~p;+$aCz*;FcCn zTXSVS6!YBW9n*Z`if!w3PS@5k8SdM%dV85e?FWe)Q`WoZ%n3D`x2|=&=?CuRoPD)= z7Cv!V`1!C&$)kb;MLG38zmB9zyD&O9uqx~fJtk%vk zv#L(2?^P|kZ(aR4T`twSK54ODQAz)rAs-s+_$;_ly@uJ!8r^#M>qf6NHSTfxL6fEl zYnruf64-Q$ZbzeK(r1lx?{04RCM%-RsaH02zNWsbyTNov?RlOmgL-~l4NWY*)EhNB zyMFHnqZ-_E>usOkVNR#n^G|o#`(C$m*XJ${x)UdN@7MWoSDAO^Zi5;OvsM1G+|Kss zO`A&T4Xr008Ys@Zw#ed-$San2D%G}{`!KTQ#yRP&zKBa&pB`dn>e)NUWOVDa7A=-M z5*fa3*}ToJk?ool?rZNB_^IuP8r|EJ8jmnL8lTx=>8Us7Ti4iiJUnY@^t;~&jmQ|> zRJFwFc8qbW1qtoF`o_n+Y!K_Z>{{H&+tZS~cJ~@vzq;Np&4VtESr{x2WLI&F!Uq zk30^%n!iEz+X3u7P^CratcZJIqOwtVU?}=ch89%sB?YK zfSHHi`|SUv>OxR{687zn`meSX9TY z0ppBpiuR0ncklVd9rp{?tA6v(?D{CO;LGopVc8F>>5Y0|-_x|DmgvFr0V~%$m6irR zdvL#F@s+919#6O3{N#Xt#2+uR>wZ3Y`O>GA^2J}$wfcYUV9@xZ(Wo1LIvrd2AuhxJ zz58S4_1NUxSEk)2zNkIW?d3v=PU+hAXWx8WH0#~@uU>BhhmI^5Xt(c%{%V-o4!X&7Ft6>~7zv8JS-antpxvjgqV5cbZ+Rx-KZs>O$J3;n9z-3~k)< zvcZ>O$6GI4ek`fo%@ZDu4NsmMFfjMeu8WSYnQ-OEqTEcGdAYsHxMZUe?w< z9jonf&N*uG`NmfcUo_iW`GRB0ws{GkqUM@AwV&Up&Eo~jyKhL@>>IN9)gLVu9UpgZ z;ro+0t1fO$TA5PUe);Oek1JX#vr_9;OIXr#zj)a%mtHTmu$eYXJD}IhVMThgBW7Hj z^K`|y>9^iF&6wa(by}9miK$aVmL?z4A2i|7_NL=5-Ml^C_uPVs!5jKc>fErw6up>h zlhg9o$)W`6Q!PownQRY*B7)bzyNd4pZ40h^Xgwek6F87@xe8Ds$*HdH`3a5aHHeyY3C>Gsd?-C&MrG@Wd_yq*wJ4$ zV|#du{QUv$hWoVM`ecij&)d6edSOoTJ>vs6hxr|PW}SMF@GlF?$)0ga=hx@kvg!<6 z95l!BMWNm8fXG&R?ekZZwApohx>xmILhc<^NKl{-2o_B5xe`S?$_uc@5;6bYf zHuC;xvA($8Dua(B-fwX_b$ImMts75@uL1`q!DEn!eUy&KOQ!w>a+zxsXq7spmDc5i3V!q02q%KLAX z9%C0&e{=GejgHqE9{v>7CvTNa`#mPJjyFtMl{U6r>qb33?;9hMRGvSl)ZksQ`=)M# z>Ma}Ou*qci+$Q2H?^aJ6elfmYtxadP6lsq=I5F_3*5&B5VS5@FKN_5!UfT7pq35LE zb1&T+mlUDj@$BeG_k^QsYU!Ol8NNf+_GDG5XIgf_n^dLC+^<(YC3%NFH?q4qpm*!N z`fVJm?LJYmecjrrHH{l@zcqerepsh@BQLivZKhaI<(+Al(78*Kr#f_;_iWIDw!VQb zyTsb>Yu??|yXn4*FE>2BJO9hHY;(7;2FrXaN4I{u-~Gji!j7J&EyjJg)&FWqx~C3f}SJ5H#&qILJ2mdzeF zmyGPcWLy5d8E3ZpTXoqz_}Q>a5BqOV^6qi1(bKQ;=3Rnx+@{?8{jue#3A1NMUtRgE z&5jR!=LQUTFrl+}Q0HWwIU64-teRCnGFdNbL+7k@MUDrKO#W1@V_S~~J^Q@b_By_W zWlHUp(?=d`pW38gv8dPS(vjvF?uQRo`h0nPsARbDu#|U+o!WUVPFXed)k~9y)fz?i z4ou2_Gy77|?@x9Y2K1Y)lWX@lYgB<76Q0vNC+`pO-Kld11Y1ZyTyIfzcYN@)mltN4y4)_7ybtM{*ztpP z(*=^7J4}5JU0?d-@re(aGgrIn2I;?Oq#fb8`e5H>U2oa8o@ldVev0=ObMqy8eN8_V z7O$)`V(83-`bE|k%x%**drYtG`pBV*XngYi_<8q!tNYe}$mhY2JyN^(f7x7Xg4{*g z{pzn5W}LW~ZkJ>)8GC)G=}|@IwD>XCpPxCVyxwGRjUB6t9yG1@dVJ!hUilGc>+aM~ z*zCVLcWxWLx9dWaJheBlskG)qGz8GIsXVIhV z9iu(;);2ZYVdUQZva{J>#h*vt-g>-YURd8|>D$kZx==HAp>%KPORZ{!g#QF>i`tH+?I@Tz9c{r^50zV`p4bAu6J?srEY^w3oN$uEo3^M%I`bw zP@c4Y^IfG`12T`9T->*4N%n#Dwc1q9UKvnrYV{K}3wG|%ecZC6a?F%L;hwdRNSkcl z9ctDs{5 zPi;7MxZeKiQQgeug~%5_3ihuQ8QHhgSS}5kB(u2jDv0SL*IM+7ULKkB3_;3O;QOo9cEmFgwqss+r2FN|T4b*6<9tqc`TX zceN2+TUVC+dQjKE;B-yVRgaMST(HhgMQnB)2Z9@Qd^wN-?VFR zX150ByY$BIIpE*r@ILw0XW7Z3rH3+iSJ{2PX6%m3OaHjmqtlAZ3EQgPGBs4)uAlr{ zux_1&AzdcwMGfyhYPjE~2l^Lv7wCLlQG>~7{fqX>9WQDvaG6ql?d7JGUWG?!<$ie= zG;ruRS=iY|a@!G#NUh($Ts4ZHcBTD2gPWuL!tV4u_hIi{?g;M(#1MyRZ6P+8_3EL(af3hb*l-?mKOJ-Oy`)b6X7~PunUz-%6^E3cMRw za&%MJ-Tq?5>=L(#gNbLQnKN@jlN+~EUQX*5e&6<7&4fk!b$e84QMvx!{?$x79^cpH z;LZcOZQAeho9~}FylQU#*Ns_u7sVY4R?Zkwn9*ceNbdHh!LLl?hOb>-IchW$vfKBMMtBm4Q6XD@qr?V#S6+a-H+Z{2M^`O4+1 zFR$Kr3cr*2zS+%W#rT8u&%fPkIz+iWp{U`W9tl&c`#t(vYj||1R+lriE9v^rk*)mt zJ}4tX8u|4~efdS#v>NwE=IdR4-luA^Z>K7mxf{bwrFnt%-+4sz=-pkBa4X}|@SX+N z{cbzn)eW_~(d9*YPKHn6{*}jj?7TSEBJ1np0|#CipV^l?-6wN_Max}lH|)!^t#&?N zYk_a!z_um@VTUq9N0}d!_RJm{ZdAFQvi-tcx(Dr!)||cCui9NBv&tp22>*?Y#1c!} zpb72Ge2#|5k5~OAq11JN-^R&al9ZFD3Z_@Tl)K;KV@dJ!-%1P4ZprehnU#^$du6iO z>?x_n7klQ`>FZNqVlc8a`iitfGT%HSzrS79qk6`vS^3qHC#Fm=N*%n6NpHB_?BlI; z+p|j_B@7+@1dz$gQxVhSC)(uwW{HZ^2*1lHhg^68vme{LaCw?7X?0!&k+~}7_*UN0mEnnjk3k|1Nnx((raf3;5@*(?zT>G@+dd>Hjde%tUIH&Hclnegn z7#-JqvAg19(2Rs4pELXR5A|J}CO4cq%i;RG6#d18`KjI~&!yLXTJ-Vqn~!G~#02I0 zM=IIM{3As`~nM2Gue&Y1Gm_`erv1$uimJ$c|EpOhKb7#}KB~Q2gxOATO z{vA2KBR6f7b?TCw+N(usdJUbdkEabX&Q1*|8S3R$D%X!Ha5x{Et3UI#UmfQ^Bqo)Q z$fJ+kNRW(MY@6R>w%H@C^-R|B9HWU7M@XhO4)@zX#5tij)lXhfU})ymw5DxRKx-qj z<=q+MJ9|@^I%&ybpBWiJbLVIIT)I z2gftAKNqh0aQ*eU&KHY6j~YzXg{`tam(#C+J-NiwsW)87AL6O zqljMaYd-)S*ZA+=sbN4J0-4$ukrzY-~Osirt z)UC0-Tw84DaIB5K{-iLkRHr20^eX)mKOXiBIy-*6{qbh0CZ)qN^*65g)iCAuLtn<| zlb6^pKPYI)g+!kl9z|Xaygw!l7@cpnDCnH=RkK;s>sqJm@7HX9@jR`xg1li#ub=ji z3E$F|r+M?1ZGOW)zO9c1lOHYPrpljFXA-8`ev1Jm2JeswnI-jlpp zs}FxJ3@Uh3Vp1=s=z!kFyicanlN}u9?M#Z!Yq>Y#tl@j7M{Zq)d`=j3TNashJjt*0 zxsQ(BJ9qo|Y@Li9tLvYY5XCi`i%uXHCCF{(Dm=p&DeBpbdv|Cdo){< z(6nh_leR`3b+MPT%LFBK6#>U*TbFrb*t}M-2M?ovP{J zjF{V2OA;2eGLG--)jqbt%b2)p%UqMD-5xo%*KV(0^s3h%b1|rS;<(s#Bb}Nq7*#dx z%;*zmKFf2=w?`$pOi|i@EL41)`#3UdvV3^L(;?yFew8C$+uH zPK6`hU_FL>OhQObty%NK|EZeG;lk5>!t zjXS<7=j8j9Nn0;2x38PB;$!0K)GTGoB?;B)E)(zXx%Bm=UuI3Sv6$H_Kzp`c(Xcre zXGBaNx8msxr+2reRrQ!K^@K@Q^3ss069(xY8rO9Dqw%+IUYfYzobRN*8-k}aXxMr3 zwHUqh`*~@bMEe&18d~+j=5>k>8Ba!z+19pBudT{0b+&9h(Q4z%@eMavJ?XeEu7CXc zJr0tz_ic}@?(F<}?U>KMt~t1PMbozg07{){ZVaJZc4P zpCRkNKfguzK126_Y@fGUd*>||=M+xgb-?&u@*%%rHxH&-KO_8S=Y+|A)j2hzPS&>P zbAlERv@3jJ*(x&N_KJM_y~lU8Dfy+k*L3B9dm;HC0D4|Ol>KV>jXU@5CRhy$HW=XD zXyB^i^%fsL8my}4wB`MXyQ2@E3Ol)RYg|lq=kphori-?YjW(;@(9mJso)*3KzRUPo{Hh{aC>YEByb;(oV>i>JsY zPq}ob^Sxac=Xm)gShaEZeJzdHmmab%re>2epO1tNw))+bdhr*BZ#lE6*1@sbMOsG#Ck{)CzWm6z!Jg9e?7^Ofce`H7 z{e4nI(ztu0&vw*5n&2LJR=?(;5ui&I-=%$TaGZ&y;k>IBF4Io(^YX#Tia z%O(9sN@m>4-)7~%{miq$ySwy%cxhM<@1*TtpEkM{)TO!n<`g%bQKAE}?0~}EPjYo;_ZyY<*e;xLE64)@F!iqZ4~yUdb6Q;gAYD3qWmRnu0Ea3a zxv_PZ!q%|5j!%=AK1>Jf~8@E2*sRmn}*fru6u{wNtul?P2HQdq3B@@N!!4Z5Pv7A@3!{A37%Xl`Lp# z?PI#*=98t@4`qHh@mSY&^~^>u^n+G=Mre0k*7xAV*0#4&<}a}^H~->o>brNz%HqOL zGl!0-V_j4~A>G#eLhb1uo2xiHa^0UiUi90&dGSO1-`4ebJoxj={@qjM6SSIN?JjjW zG2_CoNp|TMuaA}3D~_5D9TPt-^Vpf^*9SMbt}I%;qsHrcO&|2ylsLZb*@*nj3Hm$t z=C1aylysug^7Jp`S{g2SXq#rMJKMOgVsdExjoojK$nBsk?6C04UJsqB<6rE^eza(< zp2ujT9p+7)FL!tUQ!&`=@vXN<`-aWiaBh2gv)Gy!MuqN`E-b93^|HSrQlU&xi2B7T z=+j6d=WtnYq{x-N99BaQeS=RdKA%rO zP#1hlMEDY!R4$5_#zaViYFsajTHCk zClLipRrC!rkyNCLLI&_zst{?cR1}*SEfa-PPNZy7Qe;Af?^lJgx6MT&k5Ex;c!Y{i zITjyEi%=@0@(!XzWt>PAPT$ZHMM+hW@Ff$elyNb^G73#sY?28PvEl5MG&(v)8I7XF z%0xjCu@nZ;yD4MvO)P0tG=1nyR6|cEI9wVd3Kn$}wTXZUw#7&{x3*ns=sAZ=6=4yI zFfLwY2$Z3~Ih(IUQ9=Z4ycNn=ku)?EU)N$ijfjJaViSeD#K=@}@>q&N8I77E>Q)tYn>B%@NZ&5DXi-$dh_G+Ho113PBEW#Dm>M#$sP+D%%8;A3|9 z_ML#S-pY_TprVg7N~U&m!w2#d;fsX|#*FdBHwvThtwRyxjBgprm|%Por&OIgfkW5;KIj#H?%84#o%j*G59`W4Mq=P`XenVzPTu8V~fQ- z5#ozLOwn+Y;>(L7#ORAWh?w5+qryKazON`l41$i;dK4+}NkCB?-=PTl=F272hfMly zFT(dNXl?kGA{tasB8Llg14Tus(;zcDrj?5ON9Wx|ob4U!5{GW49mitp*~qJSt6bHjg!SBBC~Na*O3D$eYjEnahr3HAfE$}4{yeUZ$o9} zCI6Kml_6CiWMfJ{ckWQ3zd46n7`$j(*7sH@lAnQoYT%~^ern*S27YSbrv`p%;HL&y z4fOMI@mVpo-~Ef325w8PG^tgq(M2~M-1*D5u!G_vFc=PsQ24vZg5tvb2)@ zL>u_u*ZP0v=>M7qzF@ZjD)SBgNY`(Qs~P+WA$Q?^j>i3kVKoevLjLZ)ZFmiXt`N=p zc^cu#eL_5U-yO$bh>*^?Z~U$OrF=Zu8uxX^)i5xDP<%gs|5^hlt0Z`lujgHL*)^Up zoRbvW>oOBN>oOv^_iD^AfsGg@3Oiz4hve4B+BS{~Lk8CE4AY&S)-qe8p`am++~0SHqQ=M!%SYJwd?AW8T-)Lz`z5i!hWoL@%R=f(_k3T|T&eg(qsLf+aU%vZQc5#|N1Pr|<$ z;#+`g6NG66zbSCHgsd`Rm`RA^1M=wwe>-q*CDJ!X97XVZ67E_^s|Ml=M}8h5j1JtK zpce)1-^TSi#IY7-K8iFlac>vg!*D$m(i?edit87+w+wzKBaVs4hYivkhV%FE(*ei1 z2)7XD8<6f)hza~#BF$@XyMwd>;ie0ji#+Bb?4PI~oo>2JQ-~$R8PXr3fQ*7nfh>ls zh3ti#f?S3aLjHh!ff#hxW!gfzLcAe?kQhiZWFce&q9zs4q^qh1V6G&%BFGwI{1Y`na5o818Amke4DdZER zwzDqN3epua01^Qi1z7}1ha7<9L!LmYxaczVA*~^H5D&-@h#W$zrj@Z`T9v8BXffLO zpo9)=CUlvau$$0lYT@G&wV66hU8Wvm$kb;VFb$bTOk;dv!kB5oG-aB>UZOeEf-zxQ z!Y;#2)S`Vft(+jKEy_r5(d-i7fV%^yXE71M1_B)Un#0+Nqm?2n09?A@3 z0+>LoIR{}qIs~iBp^T@8Q}4k(eLc;wP|nDe(vW}2beo4!ejw3Ac!e*iIE1w&L==6 ziw$6nTez^nw5Tn3(u{))x!_qA$=?hiMpHPCi;6~W;Sdm^2vzc~GFV!KgvdgKOJ%5V z789dTdm<|~!JREwfGQSN7edsbve@A8fY1n;T!=@*B_Jds2BuhiaE%*+CO9Wp?}WvM zmv@7@gkThRKroCj)Df{R8f9gZ4~UhaVmK{@#>ix-4zj)CUBaM7vMMW6s)i=moAL-4 zPig8$!!=$Oqate!E_S*Ru2lWSGt9(dmEXp|TI9t1jq6|IRjK3w!4c8n>Xr~L8(CiC z8u=y@Dn3sU3M7Oa3AGRjYdHRvJOWt_2@>?nUa}f1=Yq@!!!}1&&M}ru5Cs>QFA7Q( zoD{N=vE}s)`yH+|sJ*~JqwSO7ol+s(j4o?PBgjI7&vA?l=wcnpM-F#rN2yShH7eGL zLtJ?^u{X*`idLZt7m`rQhD;c|pr6$>*R z;S!Au`4O&gM|~O<``s=}6-zf_V`Bo)_{(`FH_f=<4+|iurPd7V@h@Er8|7bn5!P9= zQYrMe&|^Ij4m6rQ>&B|2Tu-Lq93_jDQqeW@8yzD<7d;B|-r#?RkR4gA!=|BwdUG1?~E%ShOCy1^!s?5X=ff-r6-Yg~VJ z~L5=itj17+FI(p3K*eOteud{c6 zw^u)3%neYgHTuKg$t zFBd20il)U4*~*Rb7z}7Iejyujyph8XY3WT8yqv?TRK$(yL?LlB*%EnrNnAuO5?=|u zO2WM%M1w^}trxC5>akNB*zmWlXnwi4)YAqAFZd*|Zvq8LX@2kn`ex(gCl%noC|>^R z-^J=*>rit(gMF9?rzkiZZD&#IR;tz_dNnA7JO9zVm(7xpM#b~25{BnL5J!xRo6r16 zKG<2}59EO+HRY!t71v3~HzdW6l#2$fKN6mumohfyHs)fRipGPHE8gZ(2Gg{(VsWtA zr6D)pSqN>Lz3hz6k8R$F`-h&xay&^fu~k2z{qdA7?_!SUH2vu590eg>j-Ig=6~usM zxuR5f6N<;Ix?CMwsraIOKh1xrycKE7!SV>Ic+7vfxtlP5k&OgZgC9p#v1}Gol#^dtDB*2B(MD^eEjIl#?P`I)HtdE-sfdl|ims4mMt-VV($)(b^jm7&Fk zVDuP_Q6jzhM~eQz@_sw3{?YijT2@ceE0#YMJM(6vQe%eR7h}5uQBWMc07~!HwUUp- z2ai}%6}RMQWD%+WMVwqt9xJFD8Bec7gEIpGQ6YU0HrUoAL{`DPXtYapOg~uP8Yrw- z*);N`L4W;lT;EVLf71v5L;a!9PqWIxtJYk*qcJDn>N@bPPDITvgz37WhJic87ZM1u z7^Z7bk$S@OA}%@r??-ctUV!jID4GxEeNxQ-z?xxAs5_oxap)03(Idp5KcF{qY1SBv znPjbx7Jk8Hj1b^)F%dETFLq+QITdeS; zu)0qx|BRF)7iIIDZ!#znah}!r5ymM0;j`iYv-+p^Z4;oQAFKM<00QfW*g$D?bs0UF)M;Vp6+KK*sH1U>vi^~>p9#I84s(Bn`o1h9P$OH2G{eQ=L^ z9vl_X<3FW`vbh7Hju0q?&>Q(euiG0d>poa*_k@0EydoW%KD~VGrtnWT0QO)21^!08%)u^wR77tY{gZmR5jGxG=2Q7=3FU_6>jUq9N8xfMQ?`v>y`B+$t7pToECED>69Md!O3?Fo-lm{$C_ zF4PNiKd4jT@%{sK!&|bTOu|{k^Asbj$}?qWKhkcbWtKL`pD=!nqOF5y@Cr9HDN&iP zZelon>qgc71NtdvHo*uyKyTX1iR;@{*!u`38Y+>)5A)fY_832sXSNS59~mj(=kKQm zern*S2L6v|K$!D#3v%3}(pjo#jRiYUyx75xmOHWC9Wi2}Hm$e?H|U1zUlHSg?hUfen&~%@n)b>q+}-v6t}?QcYzekG#G_bcZW0*64|= zpgjSF;=xo-6)ugWjp6>ybym(`km?Y&wG>>)qbgAm+=bolFqmxtF>(CXgEZ)YN6=w3 z1!rhux)4!x1k1{rnOj+6y_Bn)1SyuTv4x|Eta&*v)HbMm7>k&h+ghuz8lVvnO+g+< z^BOKZwjfme=fhH-xbQU6VU4*+#0yEQmpEA0@Y~rz$Qw z8ZZoD(_{%gTCl+ml?v==$$92l1jT{;yMW0R#iC_nFFu%sQ#=}>*g-0VW%u|LlBRMC zc~pBwHfa|>x<@~u{Q)IpWyocYMS@ac##xhhRN$1Od$`*~=&|jIUuL4=I<=?%?8bO; z3M!j22HE7-J=i@=$&-j0VfjElu=|EbuA9-QNG@M2uFy@CdFdkbURc_~#-^lPzQd1^ zp@Tr5DWlyvzlYCn;!$9$RfQ@6t)2@3Yj{}%ZO|ARql^-|DFNo1IR7RdzC$a^54*BV zk07!F!PcwMv|=q}=N$M<3r>hIsuQw8(IgQl!}|JC{8>ksS7<*V*L z(0N(ieYdjI?fScVkt(Rw(CQ5)d75p8x**!4Gls7$?wLn@0>9@c`w{^ju!vv4mC%Es z2jonNaF2e@+z5lrhPeGAm1wPP0BtjCbFsO&Elq60(NH7!y)}iXk)=@dC-BSboiiO5 zwN}A|8aDnEthESRs>1l6K-UjERg4U8eaO%kar?eX6~VBHXEz$vU^iH%r%hXS2U_G$ z5{vFBn%!`imc-Gg5+%&`eDvhU=A9@vkzhRY?ERNciMrufDGaOuLg1ITkp4DaY_p3< z62b`zC@^i3%m(15*U&en_$mz3XxCwWv)#Y+VQk+WicuZyI?D!+6-Cg7#MCz;R3fOS ze>H}X(qKx}x`RlShzCiONO*7%&rsG^vq}mW@-O zQ9;yWqch|E(xX8p4GtH4qJh&^xs2qS<}8nc(IEG@4CVkAB*PO%ig%jO%d41s3SEOz zNJFKrfj?v>WDDd5q!eNit!v;7351M+%!O=$+=kQ}f&Gyo;gC&`r;wI0x(0(F;gE@t zG)NBQ2IM`&K&5LC0vQKMh2%l*L8`|hE=Vk76XY+@WB=q zMD89=0{-ZS^K*1=Z(%`1@C}@^hR8U7fOGHeP5+hs0(f~dnh`1${@k;bvo%(~wDzxf zVA=Yd z=E}&wAf z^8g$-;LT0(G12WIR|ZMt{>*ap+m7R58}mc!*8hI}sbCL7Rx>izYL0fur`o2SxdYVi zZUmsl$*P8S&*!W?=}nAy_=`X&5#D=f3;R!+kzwxwh_hFpKCaHb0sUP2_ILHcZuk7P zq>s-)vY;2P$%b7BL*ayLnAs0-?H4expO>#I-RH0Sxk_9ZXHO5;KE7r5_-pPSmyU;5 zp8#i1FCSMIgym2o@JSk@XN)U2uEAUs$_^1&GdYYEI2#io9B~%xIn5`@7PU<)mdp4T z>ssG!-{=Jbq#^M%UZ$6rS+0o6C#1zPGL(*no5p-uV3*X>26K@sv0Q8jVJ(RpoN88~Eq)OLkWD4GG$7zPxo=#ri&K8=>+zRXDx*FBl4= z9q=|S;9oFtA-;!YnN%2$OIc&wjF%7EIY#N&T_B*3Z^iO~ZkM;>FYCYh z$cU9xRp@!eJ*&!@5R|RGvO6H4#quVDgasmU=*ThY>^d@LK`NpG8R3m9_8dJY9qA)G zm_Rbn8p|;eE6F}}F(aY-eAmp7(FMJ-LT=o42>5mZYzbo&W}!3>GQ+fy62Uw7W|8<# z03Czz7CrfA&!xhVXielx*gwDwPh^!D=5G`)y9b0>xqArDexwDP4S?-26Y|UVMCxny zIbz1W_DyMqM5t)WZT77@n-^|R00z9N8IdgDP0hG=0Uhz2JjKBgM`j$?Wk#hpqh}Bk zMIXK~<9Z4zGk4AQJ~YE+b1fic7a;t27EghOH> zQy~i>TOc`*JjgxBQ%KdRn2$k7C&Hcs&2hd7ZX(_t>jsREmvb*y;Ktj-n|rmdrfo6u zX`}JZ0r%A)8cC_(M~>$L`REEMdoO{77S$K`UI^dk2;)RT;NRFX(yJe8dl4FwkSRYO zyh1wXnL2*+hl=UEEDq}5eO9N*=tP7*=znj1t53z5%<|^;fTcL(3wKGwnExywUI)2 zWR|^;6xnb%hRcFtWLU{%uaVhuM<|QE=8i055Jew@!vZj$XSj(O)$j-w^ze&oOGcwi zxVA_6Ev>}J8++eUtf4RXx9o&xd@y=&E-i`=W#;v0X(6_-W3Zq^)rRo6wzShIqosvC zY9dk@VbAH*(t@21+8184@)7&RQ9@#;JUL;HwA?ks}l_2B>jk^!) zn=cd%#?Tq^Yd}m7Z%_6+RgR)xTZ1R$uTZ-pQ2=xV+Fru`DD1Q9it| z9L271n^~D#T79z`g?Kgd@&ajAosY2@L^Cgrxc)XT+b0Qm36^6nq>&rMDO1LTMTmMS zv4WzE2k$^WFpS}Lclag`B5ssJ@oVN~4ANW(S;wa>UWdR|e<<8IALzjU!F0 z2WnI68FN&=9{wXg)H435a#dv92`iZZuJ>S<%hm0GTZrdpPZ(BBxNi)`yTP!ip|25h9yQHZ zkcaO*7leH9uu)GZSzAd>g9=*gEmM~|{}t62Oc<0{m;P631E0a^Ar!Be$%P(4RIZs; zXgk@+gIeV#c=0s}lxhq+db!Qmi$mN6Uj5sb%*g&ORcrJ@DR+9x_XP^k;B|_MB z5TVTq@d?MjkN2BMP%auMv10~}GAd-TX5Hf>=zZg8m`L($7n|&N%gpz$+~XPgtUBsgeHwz;Vo2=W>i$1LT&k^ zw$l`J)(`lHxmyfuU${OE^&s>K|0)ilw-n-HF<({;;kiy`(0JH1~0>P&`y`7^$c$tm69QHs%Glt;Qx4OwS?e z_P*;@@wB*=3r&5i*D`>AA6H*dA4zXlA8vSEA-#Olo3j&y0Dhn$v}s`uB#f*nKf*oO zx(b9vh0@n#Xv!r{iTwQi)WA;-{M5it4gA!=PYwK!XyC_q&HsM8=t{g+gs(kgSj7H{ zt8hmHj63O7+Q`y#XB!)?Y2AV_Hm~ zhB`Ppjxu=dhvT>t>yl#XeOr^?Is#eqb ziq|-qX2#8$;vf45m;Z_JQdD998D_yi8?PV+;KMB#Ys$!lfw3vO=`-9hyD)D@JnO$d z-Ykn3Z!ZTU)+!72Q(Zf4!-R6!oFecpe|Je%g!0kBhv zU~PLji*DL~UCvstL}9%~*jb${SrYM;C2Q=gM?1DhVXr;fU7g$a)eJgmrD|ni8P{3; zhxFgd!aB~3T-ZO~UW?Rz*--HR-^KHPube-IyYJgqe=i+wRg1Lo|Htpg^!DH1U-2(T za5F4nRVG9hET^~1U@=2>=2QP4d)EQjR*|$7OiO5?_d^bdI3Wpk3WU%S(jk#-Nsgnq z$d)Y0!fHsCONfc%@aIAZB%y?M+)=+$4vqus|GwR~YL;WgN)*Fc z$#~|yw{PF>?CkFB?(FOhN$bdHQMf%bv75af65a;+b_ofWzK!)bbBzAQ5>IH?1rw5u zQZIQDg4$=~Snr*-Ph? z&zxmVfSF-fHF~+4mC7_>vg@YtBz~q;*AzPVZb;g~C^s33yiKaI zG`7vaIcH`Ut!=AP&zR`8CqNTVZVS@p&BRf1+EOCC+yyW6D4ytR6@RE# zCFpGO#xVUof9RHV^*pr_zoY5oSzxqIz|=R@v!iIhjvty0;SFRO4wS*hGi$losK*kZ zxSVI2Jx$#cHkxQb^~!OyewZOLY>4g%Egl2xZ5Uqy4@sgY>F45H&oDG}&9nM3bW<~l z{u}B?h;$f6A1Y!nOu(ix##21Dp8Bo)GsaMSNIh>S;w%}T8h*TdPwLc@;68yqri5P! zv2BGuh(hR(FdlKCy=LOYcj^wpULh^sY~NuXWmvf)EI%N38ZeDTvg=CblFqq zfDs5+Se2&&$v8T3z#P4D-^AB9$*;f5buVo?y79J1Rb4n-*Cx6g^c`LtHra-*(d)E} z`-wea)*$^TK@~t~IFD`RxDl=x#AU?0Q24H(okA|Z{?5;+GXm>lVGAzod|@9w(eD^X zJ89tYaT{@EH!ZAJ5I(DN;Ic6mj9C)gp`cwxc$6)_nWf$&_KG2z2z4!jibq|qhYl9k zuT&g*q(!YPi#_Q%?bnp6>^z^1yS?SkV4mKV*zb)Q65(AxfH8?5JA~zGzQ{o`om&f%S) z?NIiTWr6pP2IMBs+3|<_r8hNqG`6JhD4Ab5$iLmuW_L!Ytb?Cwotl?Q4wJuw>6O$CileJ;S)(&T&TUmqM1dTA}wxdAI1a4vl>&%K0PTN zm=%s->KBGL(%Jw!A9=F2Zrb!2Q_AO9?K91$@>08{e8vo%pg7$)k9ke(ITN}d9f@I{ zpfrBT+!Q?;-U7xTsU{vALM##{LwN%poAdZ%Xnm0zTrUr!K=c-5iqerV?qxn^_ zk1gpQYzf14>Pgalv2k^D1Vj3))xNssUhF2w@aq%8Mj zb7}&5tiDBT-J_`~^jG-Mgo%)F9EjaJ4PvjW8(znQEy5}~?1_r)(37ax<6T`}c%>Od zO4n|~3wZ<~L9NbAKZ5S*#8z3$m_@KxjCn;Y-J1#v*$aIR5 zqAZBHBt+CpLct&H{Tafim=xu#VHzPA!d_?q>HRx`;}6V z41I3c`I^djD{6XvsRX#pWSGG6Wb=&>njnMym} z$BTyzXc-Ogj_eIILTiaX!!0HqjUudJaUmxF(d(hla=GOcArzHq-bf?wx#=8QiDUPV zj?q^nZIp-v;Y0^Y2hvB|a(x858eG`Yh%5}Z5%inb1}Sz}$Sn~HvYU{Y4BLr5!iEK(B zGDZs%fe6DH1A;);V6P;;LH@CE($@2!!Uv;aY>9!pSZWMn9cx{6JV`#`f&qEuCX+~; zpGB3(1@6hFBQ?J%;e@*h@<($MD`Y4BVp5&0^U>=Hb}XO<$N8iJ%Jk41eNw}OvcL}V z#&l_%3cXhD?-S8v;AK2O)_k17swARgxyYs>wPxvbi7-WEzdR^%gm4_pmqaVbDaw?( z5^M>;H+h3M#JVk2CH1BB_*32sxx!){AQ*tJ{&l~p@eU3k;yQ7hzsc?Yl~2N_D?s-Y z{I&v00U^M-fY-hoHuQ1e&7X!pSim%Z4{#RXZonsiU7p!y=n;VVfaQP#o<$shYXKhu zc6n}_p>qIDfQta%1NL|x{*3^wfExg2_*=#VZ$MSRF<6BVyLr$ii&2i0bFF$(!UujE zn*+J&qZ@y|C#$hF&hu!%#0cgiNXf&Y!8kQH!kh7xF7}^Lis%cZFL6r`K^f!jQ+#N= z#Q|^`(kfOw`jkcv$gsOA=$HHujXe3G&g&L~TX=_KvyFw7zI;QfYklKkG(@vRq=z~w z(j^Dm%5@P|;38feW+vBvWOps}7|}h6i4LvD;hK<&!;H;yVbM*th!a;tV3EB^dJ88< z*yv!m#!zutke8!HSVX4clIektinbSjF%N;4pu;Ge5bXw~2;)hfbBKjSM$Z`xsqkpm z4PHzkHBsKij1|*<$nCG^mz7*_q5*Y}2u?wT%qm$92ZNYd)K-|G-g6d8%}4gch5p_i z^^|UPzrUwHt1|Vw?M}|Kpvw+A_@g0PCjAl4%`Yfu%=x-F0eC(992H!_m-73z%`J~w&V`0WWz=oF9*hVk{>RU-fJ zI`vY=-6cteceqZu6n1&Z@vSdw`#Zm~?W4RnS5ay#)YD;W<_$`<1q@MjM}&wgq_kp| zYI-P0{oNa5<6Gq2@Yo6 zblnu)H1N_0%8Hg$?r>pEW?w)r{Mo*f9H zHywGImQ_yH9fK&Bb?@bnHXYDklIsul9@!njvvYpRbt=j!it=hgo{th<7JaB6Zd|9I zNRXfOkZ(o!wzMZ|Ld~T&>^kgCvg5Q6S`HNn+dU~;d}_yYuAv8z6V;cG)zKGlU+QN{ z?X*ivPt}}hmpZO4$p$XopoxI-E3qb+76J$K;x#sQqR$udk%#t9S`l)GW`dIuQP$Fr zX1>yqD8)pJoZ3D}3y4I0oQk$(Dsy>1cy z(PMk&=b7@8+#)4%ByCUoBA;RG9e|@eh@=!KmS4Jj3h~3_9tF+?Oxt@g6OVI-_&`c{{@Mx3mRq^G$@KEWxVR7=p`YWY$1Hgg=vp0`O@5AmCs@+iNB zL$8C4u2DDuTX399o}spG`~a``SS7F9b6Kvve^U#mt-sSwfmR5Dzc}{CG$T_wlgr|G zq>@DuPc0+NP=4!~o^&3FSkw8c#hD%!-U{h|kh8z?bmzX*A!$93kc{+iE5^$-B-NjF z$VFe$k?8B~oQmJzwN&JSY?8W9>v823|K-|p=O%SR~1+Cksx<*3P! zSXvl^mI#ZV)S!i_0~Ppu^(WcpP>n(|_b&O75At38^1+`}dDO#hyC>~4Klx|glgBT0 zuvh0k{(#Ux6Ix6NQc6AQ2%$44zmZ&eGE_eK$#2Q8+C@G%E9VtlRnnE5R+TS~g%ct3 zncl(_ZYNp-rXe5lx6bePVf-eBZ}Jc})f{D<1IbtZ_?_NMJXtpA4I&`gUa2vk0O?7{ z21gR~?&5D(tk34rTwMSdG<~KT}_e<9K9N;Tg7C0-(9#GC}72%4f`W+dc*<5!oS|q}y z_Mz-W*K?ei;5}Co@V@Fl)dUA_ZRCD4Q4S-)6+h%k@npEppwnFcF&X{tmz#WU{CYTf z#}U1qA0J<1fW={akxtBUmg4xZbKWS=1tW;TzNlvMwRD-v+dz2$ZVzL zUVqirOu$J`V<8pl{9;;7icDZ4kz;#d&kTp*6dbi?7tfa6A*TP5OitrAn6zz|k2Tvt z88pRYP8hSIvT#Em=KkujnHAQp-Gk76QHw={;B|5^rY+k#n_Nb)O@*im7<6UPV1Oj7Mz{9a<}8-6)? zHY$8OL|ix<9KW*w=tityeQ~LAdc=DCse0`@o*A!nl2JD#= z`AQ!b9aw&mDE2C0<5F@thGFvy_ks47hM>>Iqa~s+xQKW?*v6bv-i1jmaI)kmA1l-j zrDw?e$#bGlV2YH4rKd>A_QTHeiRokH67C*yT}^ zwy3N7V%n&2i< z+e4VIdXruz@Jxesl6q}FW_-Lz`v;wyYw1`yhkcPKknQ=Znfih7VPwRWYX zN?j+up+2-d&qeh^}f6-`?*v;sT!Om;C1IJHK{5rPkH%E%mzkJWW{?8ZbA((>-?3SFaD%!T&lOlHvf22wV_s6u&n; zt*8Ck>vyVdLcb8g$TgL>a1E`-7D+0gHsBb2l(e0NnhVb7s~&WhoXj&W>G?~)&X`{w zzU1(Gn{Y}2`UW4pq7?sSMZ>uF>8#27Wxn7uH=NH4V=;#ESTRg09*{CAg=?kU`qa*{7O$gZps zElP4(rOWcBGh}advD`X%5pYi@BX%5L(K#AmcP{AQPq&dTbbiY^c(4#Xujk& zU*Ab^f}HB!*7e3e%1?T~#M6$sgHHNjNbGx(v+1MJUgb|;>@7!`bFJj0``gT~=yyjS z6<_kg3_(aQH%rsRTwZE{;&TXC2TbrffBDaDec`vb&Y@c4?i}c@5y<^D(uz2n)-cnI zz3e~J>q1{;C13UbxAvVx9b?VzuG!}+zv*L)Orys1Fo|9#Ft6ZJT+h4P6m;tVU~qs5eS5q| z5Oc7p?ZqT)Y1gILEYRPAvT;bZWyoK7rI$hX*7GEcDY$}}7=g&~gld8NlRliD8~Wbl zt{r+dQ1V0Xee09<Kj zM4PU>2kL9`YF5I3)c;z2#ev$vKz&m6Oj$iwlcw70Icqe=ZOQF)xA!wjIpjP`f4IrM zp5lI(gmG)a|6IE5B;9f+pNWHO^mqk*{_+wHL~)PbxiB=@sgla|rz@o!RKUOmk|UyZ1whdFS8md~#oS(3f}e zB_FA6j?`}K+QG!B&vd$Yd&I_w4i&w1J~-?X;}~_;vv^gS%;ea1dIJ$0{7Jb>vD=n* z_V|K4)*!k4?5z#Tqz`ZEb~9h)oUiYs%KAXNDAya+D&zl3yO_D$)5mJ8+nYu%yZ2oz znS7=veI88d2qj5#55154IOihTW$D(|o@g@%_$pVQa^Y+L8V9G&o2q=txhgfw*;5aA z5avWuXNcq(E~%|`vgS^?N`2bB&TLA3FEwqM+Z&~CD_*JVeAe@9(wVLP-IuXwzS@C= zt|;4}R82CujS~Kav(oAG(u~iZ7$xiV{EnDePr94W^6aUG<$IjFKDunG4EC>joG<4bxP=9w%!nI$C7W}!bnp0L#y zKYyw9IJ>s2Kh}f(((bL_3VDM2s-7h7$aV3A9w7Sp6g5ED>5I-gb&Z?%WkAigiry6D zzBfL?X{>QmD`9CBUqOdWRlfMx`&dk^dH3Clh%1)*xNUO6W;e5ya`*iqo6>$HAqQ;r z5-CZwpH$M;v!BNF@X{(I5j%Cg#8oC6A0?TzGR&WRq}%dzxA#$bPY;>kRbtg9f9X!; zWp}+urMkCpEQv%IRR)PWEQ{p&pRanGNC8v0ar3un>~m6c*jtaN+8F7BBGD^>f{bBQKGX6#FNVwN6zsD!4G zzjimh7f5g*v&5!{PjDhNyl7{AQJmW)40SZy!ARcpr1W$q@|7qD)#~(Cw#P3-ePcC&;=^IPxtLgh&d#NX)AB?XUM6f)XVo#DyIp%xc zW4`LaZ|ys7t&OY449fbqa`|iLls=^TCUtGkFg8u?t8oqvEG#*`v!jO#Vs8`eJVTgQ zYExk~VY=htzqzeSuHLv1)SC(`%qB}T&33!DuuXCqHl)$H4O zwq($)cc(QWeX?om774zmY}(Wp)sd}z(Y<8+bv~as6;^5h%u`_xmcrCx)k!tU*5nag zC3skmQ&g+@dJpd_ZK~%t`;v!z$xXh#16Nz{ikp}XcLt+@CipofU)8zI$HmWfHbnGk zHkD(N!kHNtJ?iRJEW(W$BG-}t*?oQN+;xm;&_S%iyE>`y}S){#Cn<`DQ}UpNVOjJRMpSYJ(uy=wJUsGSxj62| zFYQ}$D8YE@hiGGMZ=l}Qis6OialC+F@SA*JwlZ=Q5+8oxEAj9=BpM?W?HOX%=|mz} za09;q4h(Q$fCB>@7~sGF2L?DWz<~h{3~*q80|Oiw;J^R}1~@RlfdLK-aA1G~0~{FO zzyJpZI55D0ZXC#M9g}P3PS_Jf#jdO>onNe=H^HWWPdvIYSVh;tPks?X(6*8H6dr-Q z4AlhN1HLgLj_G@k=OxmU!uqZON5(kC{s21`F}YR<_ zC9xgnl?3YiF2T!IudvA@pN1PE!+9^;wnN3~^ttK+(NH{ERX*-;(63@mFO$B0D-aC( zh1aY2*VaG1(LgE});GV}`&_$MZ0wtG!KW2($`n1_*`@HF9 z%WRV|`JPTUb<)A5;h-m6=hx3b8AJ}A+h!@7Bme3xt}subnlNTUN*kc$t#pcY7TG?= z)hgsahawQK_V;q=Eq?>)-?)0%ubuzdwv7?=C+uI`0XxZfA1(V|y`BxF?5o|rIu9t} zwXiqtbbme|uNzlhbK|cc{x>25IHqx9R8xl$3N5AUFiHst`{*!6HxLy3M#5@3fDw?g z#pZaY8KWKA!0PdIgzzISWgwsFl4%R|k}ldW(_a8>zQf3oANeanszbU_@w*8x;Kec< z8+;$yy7unhC1OWyvb!Ji|xEe?x-;ZcurQ1N*?kl zdv4Xo^qrd+OXwz{JS?!>Z_~{{OGJNTW`F}NSnqyxHokoJmbZ~dXFnclaR&V%FucX< ztGAP`3wP6rv+Mt(KJ0!7IuRGf>i(#&$!o_b4R^XFx4-ju>KxP5;|{fJHpOA|7B7 z53q;_Si}P?;u(77wnO&->;upP4geGZiUAV=lL4~;rGWW>T0jFJ1ZV|x0G0z*1I`6p z1h^7#1Aytw`8P;6NX4<$=38u5pxaEh`DQxZ=IUl|&sDfhgtL?THhZ1Z>56b-5kI+y z$?Jw|L{FX1-c;vEOb~2<_%`W$Ltl%bzt{KP^3~tdpS4_R?X%ETMAK{!2ZPwR$X!uj z0x#6OI(d>?zEj5mZ9@O2zd3qoklH_WeLwnDu6%@XKL{;)gxERg7pog~JgLJQ@*TZS zo{&gyyV>?{sGC}zld}7(%x}btE|nTlFxq4fy6t|KKgh+I(eny# zIm&14cA(BSi5eTy)-L58IsRl#=lEaNZ+S`%!*j7_Abr1a{$+K36MRa0oBVYgjNm6} zc#FW&RBrOoy&p=IR5?E3*@Fqc(hfyNldJh2@) zsEynvuR%&a!>*ZT=Qtt-e>DbcEXyt5-N*g(9UQ_OtLo$EGj*=8O`r!x4@UItTlBcA z&Nv;9@whw-CWqqd_G-5CU($9XA)msO1F=y)jlu?ymbm(<;(lB*_4+Ad9X07jn%s6v zkai>6bk)0juBJr2k(XM!Xg88xl6{Fc&}5G^z=p!E#m+ouiW}|%4aF1ZkCDOZbuD$_ z0K5z8X25ZvtDa&N7KY_<85^a~saj^87jLsDILLZ@t-0KIoY7Qa)Rh}erPGbmr=^!e zZt}kI+f}Cb=Y4fU2LTrX-hBdg5m~miqD=%xzz@|t3ONqY1PSeIl8EY)OQ<~17znlm zcq@xA8t_?|oId*pLIe*InEvgNz7 zb%SitQK`SK)gBDF0;1w^T}-XZGn`l+)$6rtY4>^kUY4?0F;)AV;^FXaAJQO}X&DDr zUEIM9Sddw#g}Ik?%}tU?Nb57=OU0>G54_U$Fh!cst6;~Gw%ko!CP>?cnZc%bUDO8y zdKEuU^yS)*8l6c?UKj5A1qb?)cBd~Gp%Gnfa@t)FpvUPDX6^%;CP3b#v@qAVdx+h5h6tm~K*_PBn6nl6SY8S23?QMcQrtX}l` zsr3BJ<}$5@B*r{u#D#Xj*G7qVv^BZV0QWUr@^od{cBR$N^-fns*xTevOITmi6>+&5 zDHs{}rF<0Y^(_sqfKxl#BuTm9dwurb-F`rUj4-e-NN-Fjrgc^LIx{!BFz2r6TW&7*z`7Zr<^P!POZ-~~!aHvg_ zTIfas>7X>hGS08_1!bRm*~{Awy%umY;BLUf0P=wr916a`JsMyu_!-v~a{M((kNe!E zF&ionFG%OcpYHv*2Yq;x=*yepV|wo4@xU@t=^-Pbfv7vuqk}LR*X}lV3)hTv=Odj4 zD57Fv{Qz9#)4bGnPqDR_N;%4B? zQESqv_U0W0dE>6O;0CbQ%dS39)8&aOa&Mrl0Zw>Ak^2Z)Gx8(vsp*gwB#IMy-9g}s z95MJrTIJq9a!J@I=d_O~J3fs}DJdP&lOMiNj#S-_*AK`OJ|C|KL5$$oYN`5w10O^i ztiq$-P0~ApLAs7essj3!x=3Jn6C~3a^aLcwW?>H zurE+7ngj!fv(MF!9!EMsKfbDs(I1!q(5=SlsT5^i>&7I>Fr3i&Mt*x7R|b9q9N1tSV80k2?=*S+uA&jpYJEOEPpxuES>?xaYwtJycz8Y9+?IMduZ-rm zB|c~5h`P0jV!d8l2Tx28t>>DJh**9DYDVH4Vz0VT3)E7Pj5wG5{^^1+&09}>30*p7<^G z3ZAru;S*kwW3_M)gC%j!mEPmU6Lt*lXu!#VCh}2^6R?m`ysM=~OJ2#?2}nOq#{wIm z>R}M)4A;qHs&!^4lHvO94@?;CL35N_>F`axE8s!Y>-ffD_=eIG#dqZL7t%E~==Za~ z;m|M=4TXYX>P?O|;YrX@C&q&&AM^^O=R8nGy8WKU-e2KAUNpls+WMA=H~08M>@W{@nKa%3+>G>nt> z0+>FngF;S`?k=!OCx;A%>zq^qQ1xUQkZYNQslk97f-m%bDSkqJycDMhnG=aRMvDiS z&2a1IPB+h-uDzdBa+JsfA+^`Rl?IYt{=Xed3i!LokY> z$EZZU$FtMt@W^|%y{M+qro;7S7kq8%k=sB7S&_0X!>B~Kqdwo^dIZEdeBmbezL4I} zTD(mS`Z^>l%s~t5mCQK!S}rO-1P8J}x#TX+7JM*@dJ@JvvXS7NchYxJBI3LCkTu4Z zIcd5X5HO4uL{TM`6PSetK#rskFRKT0i~1pFP3r2w9W)y7HX%ep-Ip?rNAy2|@}{^@ zRwH%Iu27H?AoAJNP}d~fNZ}czP0Ry{B#5K%L?e!GS>sJjeb6PRj4-u~VoOxpQc+E7Ag4z`SDI|H%v z27Eye8aB*9xye{1wpx1`aJlMbw%PP_FH_1<15CvjLFNz20J9 z1oMTCLmxy>fE3H=TdnRe4Psb;IuZ@Rs~=OOwT0+QoR}Zr6J&?76t9q+6*R*)MRgT=@DMIKkc74|w+H%Nb$N-ng11v1ahO}ISM z%@z}gloc$gM7*5wL@H1K2!nt;LsKM2W3vXPcDC%=ocOf|^{d(ooMj|C+-sFf1>SRdO8 zS%M99A*{;FGT?f89VDpHFRi|jghKyU=J{m29Q6?C|5dVZ(b#hU4iVgd&Rozj>|oxmCN zMg0NIC{pigbqaYCMihwa{tveu`XONJkKj86uo7@B;BmmafFA)vKi+oeD8Mv817H#0 z4}j+ZUjVlL$F@Vq1F8TGfDXXzfHwhqd;(uAfF{7XfL8%SKSg*zJzx>wT)@qM=K>W-vGvciL?OD0^AIE6Tmf) z-1PeH^OEu`<9e*gb62>sQpAS_eghm>2M2PK!;L?_)M3G~eC`y>ama(fcHy>7H_J3v z%=KhD{$!KL89x|rk<@AP=5d>)26T&Ro=urvSsJ2pvbr8tgjhzxa->^xnn_pJ(1?VU z77cWC%Erk6-HmJeXjr*0jJ6(+;Tc;EpR_Bq!lcmAV6Y=1K>nt4o_rGK_@*@B*(6R| z=`5xh)`}_S=~cqFZo*c=f*HFIx{0vM1FZ^bt57=7!9h7=Pu7ICS?HsPmvd-+;8Tk? zAbDl6S>PtGYN~A8q0KjigFcI^sfs>+z38v1tj>@(R8@*0fFIVqJl(tZcPhMr2z1-A zDX(S!Ug~SQSySdsw_B%{&Mrk}`{A#@*RyQp!{>E~iF4E=Osil-3SRf^U0F}0?|3me zL%obup__e>s*jvpaeKpJ?1vM^IRPQ6U9wqr+>C|6eZSYwWlN5 zSf&qgiYOUhQoe;kYR8yM9jK7b0M)i=_LFj7h+b&HDv6s!;|Ozir; z3waZ-CYOaNB*g_x2vc&PM(gKb{z#lgz>DOqL}V4zfeJ)t`+&UVzcC)@Nfy-s#dBHrlZYi(<@Iu)UD;C)t)4BhtnW zB2G~Wvtw7cP+5OdZo^>PEOrC1&Ksd!%P~sN`vLk8zuGE+Z)MhVR6R-GzoB02!#Cxy z#T8C$a092}x|`VZfa_lNji~2hC`MIK^ithe-lrS=UCy)RIYyy%+PbSC$&BQ3w!j`8 zZ1b_NREF{FLY1{X?P)4E^ir3M&sqCgT`nCo4RD2;g_&mtXI z?&dHRV`v1!lq=gfOwxy4nqm)iBkQ&+kZDeHmey5}mOqBaqB7+p}QUW2a%7)<5DD zh~&$ZCQLWxm?@l2?9=bJ!$)!}KK_#%-N6yjH>|_2!um2T+j8Z;C{4!_TcncusL~*Z zpQ4AV=y79IZspQ_J%wjXxN!P}8q-O;`@{~$lZ4-FdZ-IxCnQhUk^UE@XY36>&P-2_ zTb#`!_fw7*7TyVc2|FJWoqAF)tn@2wqnX&+)rayCTgj5jC#7<2>~fI#mU|I6vR3_x z+O9@@B`M2soiaJk>np<>BYbXr+W6zB-tv4iI{cUz^y+kz*BmhP#~Ai@m5dz+C@vm5 zcKn11pbp`6@z~U@}!yvPcy-0InxuOJi;N_(-wVRf z$FxcNrL?qVlC50sWuLYHkKv)75@`!iUrFrc$Gya)DiWi35#OgK8Zged_WbMb^0ft$ z4tq10#A?PU*h2&@o%$_$bJ1!egF`m>e5~{#ZWkVr>33W8-|XSpM<;t2muGqNL@6Jh zu}$S0cJ!<~>6;e28@?a!DSh%C);5)6@5?_>#FBN9g4$io7@Jl%~Tz);c-w z+rY{ClwY>>PK^Ii@leOqRDjfJH9s2JjN_C}kv#s#a+2^!Af`32O3&JvG;R~$>U9{q z9s{=xCkN6mw_Q6KQPl^QD`8`QC#4YAagkN|V#jgRB@cOGtAZH>TxZ!|WPI1|!f`Cw z^*2fH!$LFZ>wS5jD{LzD>;Jyi(P_DtOx?|_1r&QB+RCcKKf`~C5=_1)nb1(3?^J- z>irzb=oFp{b*Vn;4~gw#*rvw)2i$wj`_ph==-DKoK+El~u#4puFKw8}9othea%^&O z_X51i^c+lQ7&8(vV@xglv?$*$u#lxihqfU|Yyf8h2Y#E31G(v|n|}VYzo$Q|@sz9< zoTkDY6vk8aZJ40*I$@Q?>XO~KC@BuSjw||6&2miB{aw^@Y0ozdY1)wcvj=ICPXBHE z@p2mg>6SX=9ox2)acWk)!(5gK5AGeIZ6-Jh@l_x$HZ_P&+Z*V^HZPyp6v}Vr5;s37 z&jO_>tX*shwySg?Zo}x3Voa{-gx^(o-||JVhhW6vdVY6E+}QxEC7NN|Cbp}~ZJpRM zz?)ur6JyM5ALGGAL!2I5+*Cnz+QtC!ZUp-m_(0p#k1OnFzy=07|Drvg+(N9dovhcX z{d5A$TRJs)Bd~UllZT9tSi8l`jq+>6E_|1799Ayqe@1Ml!7He-|yVr%$w)AJjIi+xmJ&OIV!qA%r>SBWn%zfZRGb}BMQ4cnl9q#(3 zQ=MSEQN*TOq`BpDk_fKN>c*Uv89i-zN0`?8?0@ zmte@n-8l!j`$2G&+||ot<_l`wDBks-k^^V z^P9Boke;oR@6tDP_q!z-?~cP=c`Asq#lSXiA(9k3bq}_ezJxa!$sF}8zUP`-+uIyo zAG)Tj_ct*rjqiTA&QyFq8sF|yxd}}#(H3MXHeA1T}_rPmDymVh2wB68e0N(@1 zhXTOif7*ZO&)PNb{aSvx$?3*#@24Cyb=ve9GiS{{_P9B7ah6D#*dX<99^*58#wR-6QRtg{liPee z&q`;ZAqaMv2+JdkVM3C!OGCDV?UlT(_tqb2kmvbmdyk|IlMJodFLC->`qRO<1B>vO zs4h|lO}%a<&P^^ietVR8-UB`#>Y-=`1Ii<;&f;^qLfvjpwXobPpj%Gy`MNz-&oVyf zqreQpd%FQ>S4yDnNW3{<55N|H?EqXp9}L(Ez&)E=Ynb3bHy=dS?x zd=D^%{Mk^y^{BJ-+#u$rQH8k&(jJVsWxYdU`Vx<}8iWZcySu)RapYEillwc;cFd%) zPP_4!o||N^hy22UT1s{if|{Pxv3SPPc$}%E&Z&^kXn~`8#1W7m#;)RJ+wR3Z+Bf!% zclpdW%UT%7BCY=m`RZ%Dq#F47*+jvW)WlW^4`F8h);Ek3n9xKDLei$iSfgc#%! zhgdeqAs->N79ni7(J0ls#4Prxqz$v95*ucH(NWwAi@6cGYbmF+i>*94=3gaW+Mus9 z{bHL{F1(JPgWN}cv)zMF2sZsVy*1(tdqeO8np^oZvH;Ig>|>hfwkFrQ;I7vyR}N{| z5cMhU(VjkYa89Id%{5}c^SjAr-3t6dT_-cv5}{zCc+8B2I!v3*EuZ&EYqi!n`c{X_9<4Y zdG;~o*6AD<%yczb`Sxt=k>W|h7Q|xZ_w_H=%$)rjc|ZWK!2CZ-q^DVaAYU{y6w%K;O?ROZu<4!y8vg>ZU@3H4zd+)RF@AlId z4%`0#!-2z#MvOdY)aWq>C)SK69e%`-M;$%6=jEl!s_GhhZO_k7T-1Kj;*KSqOHcm4 zWxrp3%8FB0o_6}G)oac;^Q^Pio^$Sb=U?!L3;+11i!Q$8(#tOY^A%TKb@esZ{^h#s zZ@BTVH{E>8t+(BN$DMcGeb2r3-T%OY4?XFdnDZPS;3YHb*}8sNbH6bB|>qSFz6f#vKJV8RZdj{zne z0eUJhVRO*afC-m_OVfb~I~79@1t#FXZYKT^E(JXcn6L%joefOTgFY6RP*AAT9S2Mp z40;YQ!P}+N%>^bL584P!XasEnCcHdOrz-^}`~h?sFyTVbW?;e}L0f` z?ZAY8lGce&S&@I3O7)R(@feD*|ZUZKq4SFFkVO!8A0uzRU zUIa|o1#~+wVGqzJ0TcY72Y&sN0~e!w2mzGQCBTFb=u3eKLC}{06G}l}4os*4{byjp z@u05&Ce(qx5}5El=&OJUAAr6ZnD7zkYk&zKg1#1*a02MR029KXuLCATKwl3`7>ai6 z24KRDpl<{w>;(F+z=WMa-vmt91@z6pgk3@30!-Kq^sT^z-9g_5OxOeT?ZAXRLEiyP zs6{(@CorK7^j*LN2k5(j2~N=W02Amv?_OYn3-o=!1UKmWfe9Ya4*(MyKtBjf@Pd8_ zm{5pz{$XIkFwl$h0igc|{3XBu`X%7600)A8 z8Tf0!aL|7T{svG4`W4`B0V6=a3j9yNNYJkVe+M`S^y|Ri14e;<1NdKn(V*W1{x@I@ z=(m7>02~bZZQvgP#h~8-{tuu8^t-@60mg!U5BR@;aiHG^{uwYH^asGd049L`5V#9) z2=+6!gcSr+}Ua`X8W=0eu+gPe4xvJqfhp+Z51>Z^wXEe47ed@ogGt#kc98 z72jrnR(zWYTJdcbXvMeLpcUVa1+DmY9B9S2IiMBa=7LsyGlEupGl5ooD+R6iRt8$} z%?w)c%>r8S%?euatsJ!C+dR+%zX1*ma6ocEwILO#7pe`J4_dV$HqfdKSpa$(+L9{3 zngZzlz}0{=K+gcK0h|eXCa@iF7U)^PwScoh&jzjotOb26umf-o=;MH$fOA350j>v} z2YN2B3vfPYBd{BA0caDj2k-~brN9k<3qh9wdjWq0Z3aFb@F&m~;6}hjpsm0@z{Q}; zf&G9>LC*sY04@Vv0UQKe4thRt2=HgnHsBKgSAbps90ptox)L}7xC*r5&yAoJfBp(u z@#iMcia$4lR{XgIwBpaLpcQ{^1FiUTJ7~q9J3uS`+zDFo=PuBSKX-#x{J96T;?KRH z6@Tsnt@v|4XvLogKr8+{1X}UuVbF>{kAPPEc@(tb&tsq!e;x;|`11tlrb{JkQ3Bl` zG+|57&A^1MK(_!Bwg%k_Oc)Hh4VW+l^g>|5HlR-gCTt6O5insp(Cxs4?LnUeOxOYR zz^{LD;9`^yVJOPz5@5oPpf3d`>;(EUV8YIzF9#;<0{YLugk3>j0ZiBp^p(Jb-9cXk zOxOeT)xd;3L0bu&^G`R_5*z*FhLLcufT*t z&^G}ShJn5rn6N+STYw1%fW8%&U;up^FyTPZw*wP~gT4cpPz3r;V8RH{cL5V#+YGut zFyRT%_W%=~1br_s;W5zn0TZ4AeLpbaXo$oEzy#6{0ux9-1WX|PFff7iBftdGj{*}& zKL$)7{Wvgz^b^1Y(oX^tNIwNkApJBjf%G%L1k%p}6G%S?Od$O{FoE<7zy#7S0uxC8 z4VXasC13*Smw^eS{|-zb{R%LF^sB%G(ysv%NWTtDApHg~f%Kce1k!H-6G*=eOd$OZ zFoE>Dzy#9o0TW2S4@@Ba0Wg8|hrk5V9|03ce+*0@{SROQ=}&+Oq(22Fkp2vqK>BlF z0_iV+38cRSCXoILm_Yh#U;^oHfC;3(1tyUGCoqBZcfbVF-vbj!{|lHv`rp6=(mwzb zNdE{-ApIX;0_mTC38eoEOd$O;FoE2KRA9n2pr-*7t_3|EnD7_SGk^)#fu0FWxE}N@V8RWcX9E*%1br+p;jf^N z118)AdJZt*X3%qi3AcbY0uycpZ2~6T2D%iOa69NSV8R`s&A@~^L0f0O$q4ga<)a0uvqrT?I^d7<4r-;Sta^z=TIZ z+kpv>fvyE6JPx`JnD7K>2QcAD&`w~&Q=sdC2~UG|0TZ49?FJ@13)%xrcn)*}FyVR7 zUSPrtppOS8ya>7xnD95yK48L2p#8vvmq7=B34aG21SY%!Is{C374!+fgx5fafeEjJ zjsO$h0Nn&kcoTFKnD7?pW?;hGpj&_m?|^OvCcF!}4VdsA=!L+9_d%ZsO!xrwB4EOY zpxc27AAvpznD8;^fnWdRz{MyZ!aq<(mjDw!0evYj;Zx9;0TVt0eK|1UbI^YVCVT<< z3Sh#QpsxfbdwyXX0(}E8 z;oqQd1b!N@%jRg;fS&>E3i>ACX90si-wga5U^mdW06!1d9rUfhF97xceH-wLfIUIq z4*WO3UZC#)ehIKQ=sSU52J8d+F5ou-`-8q4_$|Nzpzi^G8(;u^FYr5n13}*h{4QWP z==*`+0~CRN0Qh~t2+$7#e*hQ>`XS&C0SAG882BT=DA11pe+(E6`cdG20LFlR4EPhk z!Jr=pCKQ8y0+>(&`bl8ISkO-a6UKp7JRA>N@o)lY#ltetiid}QRy;fuwBq4J(29qL zfmS@61X}U%aL|f}M}Yo2zE3z3^ee!Gqd>n3OgI|!YrurbpkD_jOac7{FyR=`sw}30 zR%I~_v?`0~pjBDS0IkYmCTLX_vp}n|mICM&V2Gwy{CQn-y;# z8>ZhowpVPw*q~T(*MWM2zO<`8X70L8XYDHQn%7m)RTbM=U(&UUeq7ftvGHA|uB~H( zV-va#>8gxX#}4h9*tJXXuEmFSP3jt2ykqg~I9>d*+OUG_ec$EH^*wL|HVzaxB z?V8(V>^iP%PM5u_wyUmdo7i@-S9CwrN0+m! zzRT6+?mA-Fh+!j#T|P`dY`kBN5nRdT@EX@OLUj&wutFt1%-nPy@(8ZaB@b(r~I_h2a##5r*-GQHBEy`xs!`WZ2AbwqaYtP{S^UJq#Ph7Aar| z8G?pVLyh5hL!IG$!v}_s3?CX!FoX>e!_e4{v7KT&$99SB8rv7C6gCuk3k!>f74KhsK(V3tz~bS>Ma3hEe~C@A{1PjS4U6p`J0NC=9T*!P zD~gSXjf@=>8x*s-zWVsm11W5$>%RvIgdnPZliHC7($4{PxivH3AuY(Z>I!5IZ-7MxXZcEQ?$ za|+HaIIrORf(r`%P;g}m< z+*)v3!R-Zi6x>;GSHax{_Y~Y)a9_dw1rHQFRPb=YBL$BZJXY{{!4m~rlx$hDRms*R zgG+{#Y*Vsr$#x~%mu#4|sG%i0mh4orbIC3xyO!)$vU|xMC3}|aRkC-{H|ob z5`9Tw$*_|BOAaV8lpI(xyrigPM9FKLJ+ax7n?1G}R{;LUe@2^ekg>ox)mUv@W?X5! z(|B~5tE{o?-7=kdkof}hu9hj5D$C=R!NzTjTN{TM4>C?PzE?KgILl}^))-GWUTmCP zR$%_gJk|1q4tlXh$Sk=U;6RO^-{;2xf>VH;$SKU<| zuIZ}T#=f(Cu46;+en;a_<95c;#$w}P#^a2KRV_EJF`jKa!+4hQ65|8L`;8A7A2mK^ ze8%{s@hRiO#;Ijf$~{c-hXH3c=1nng8(?0eXEw?ASZ;;=ZZ4zr`oak=Yb*BH+z&q&Wfp3xp><1>vr z`iA-@`lk3M`;PKmA3iy9O61L^kDK<0?iVeJj))dVOQK_=cYqNFQme?vP=U4u|a(U(dRi0A$Q{`?|ZB=hq zZ&}k^(^Qjl@)5xf_Py<|+5c|e-m$G?JI7Fm(^2V|?>NNusp}Kh7p^Z||8#%n9_%^N zGu~6;ncyjGtZzKAaW`MJufk{Z*?qOXQeU~R&R6N1>ofX7A$zzwd{Xm&7Dg8Rxag3@ zD;D3gcu+?{$F?0ib&Ts++;K|BsU0gjK3MYElJA!Myky(Xy*u~o40MJ&PwH%3HhKA+ z<<8}cPbpkG)_A3HuE}JYX{s>Qn8uqbP35LyQ>m%UbfjsLX`*SW$!a>nG{fXHZHWBm z7Dtt-)^xDRXgb7XGgX^rnHHGllpR+#w=7zAYuRmO2J->t5$2KRBJ(xotISuMuQl&) ziCChReXXOdzq1}?J*3ak)-l!z)k-z; z))MPM*8Qxbte?&MX5NSMKA(4NMOnq^nJjbe!xs z$FbJY;b?Z8;_y3GI2JihaBAsyC%B6b$#!)dyF2F zr_@vCsq)P8)OcolW_W5nIcGlS2rQlokE`*y#$$XnzVm!be9L{O`2Np#f$wj% z$hXqh;9KiE!`JRx>I?f$@-_LE`I>#F`Ofm4>+AG2hZcp}L#-i4xGr29emMMKcx_}< z^q}aW(TUN{=C7MSXnCOR{$wvgI zcAnOG>M1XtqFZt3${8!mS6;ZX{z6T-I84PuVYJhnpvw z4>eCR7n{eJ4>31uswzODUEp3*+TVArfVu@Iz)(w&W+~QbkZMB|l z?XaF`ZLywgJ;S=py2!fPdV;mty3%^S)nRS0o@#Bko^JhV-qMPeisLK16?GNviu#I0 z75ms`+h*Ek*{0d7wtH=N*hsyIRFR0wBYF5?s4RR2|jH=tJF0Q)0>Z+=1s&1^hscMg!y=r!=*|lcx znjLFeYtFAZr{)heXVan8QLZaoce{Ra?c(0q zy{&so_h#dstcv?Ka_gv^X#}o8~ zJc~W2cuw-H_C!7Bd(QMM@*M98d-iX1H+mWuH}34)+xLO*6W@2f8+}jvKJwkwK^H9`SwayU%x*?>*lez9)Ux`o8wP>HE9yT{?x! z`FD2c^w1fh6`}J&qr#)Z6T`E@p0GE3fB4z(YvEVI&xfyyTp9UOz-;+2a}UA#rdogJ5VT+(r4 z$Hg7jbX?VObH~*k*LQrhq-)7`oi}w}*m+*(UpnvU{8Q&0oi}z~+j)8C^_{nOUfOv> z=e?b`bsCqQuxwv*!}6z2e|FVNt6o@j%j(-#-?;kL)sL-tVNJ`~9cS;ecJkVz*B-uh z+S;5mpK}Dqti5CHCu_~;)SUAt<6n%|8Q(MAV!GaRpXpuG3#R8xZgy~+BR^+D@B)~l@#Y>@WvVe8}8>#f&VZ?xWJ zy~=up^*(ECUT4Lr6&F=pT5(CmvlZ7>oLNzBE3=twMq8=vP1~!snC%1GC$@qGAK5;$ zy>9#1HfX_rZQjaDEB{=1S>+{_msbv|GFF+Y=2jh7^;*@7RX@G9ZX)ot;|oWZ<9o-B&dr=hyQaIY zaoyv3-(_%*cI(~4-3Pn(a~HWw+y}USaK}7<^L*=h$@9GD3(u{d>plPSeCqky^RVXy z&&{6KJs){)_dMr$+w-002G47r_dRcUUi2K_xU_Lu<1LLZHonrhpYI9ZHvX~xk^U)u zgMV9piT`*0-RTT6=ilM}BmGDD5ApBq|CjGD|8W0A{|NsW{{;W`{)7D2gzgO86uLHa zedsTt+e6odE(;Zh=>WAU{Au{z@O$CgB2Px{iu^V5OyvH^O_9B#qobzioTxE+T=bgg zWzox{mqag(wl*(o{(bZE=Es{KZGNcvk>)`y|7rfQd2q`%EnUq&H*eMQX3J)+yR>fG zx?Ssxw%Kj7+Ge)h(ROFs3vDm9J=L~&;gW^1g}*FpU$j~K7VWzB!R=eMZ{EIT`^3ek zFTQW_<{dd_KIaIAc5K(NW5*#KfA9FH8+tygTeqF}`zS6;NT>9ojcH=p**=}({j&8m-Ay}#h0bYQ8W^heW((%nk8EIp!hztX)*cPibn z^e2<9beGbi(r-vTg{c`YV%0TV#}W_7h2x2d}1A1KB)ZA@}I3AS^sI>viv9OF6EzEzqGz*9bEpE z^|KAq{^iEQkFCSYw<`a|xGcm^J`D5J*#$Q?f=!Tt)1!k&at&K<}f;savtm~cOK)M;WRmCJ103y zoku!HIuCLdIp;d(IA^(LyUuex;CjS$jC;1*_G)!$6*)Y9f=Y~BRrZlW*Jf-or z#{GT6eMPTmJe{AX^E_AfUc`uwN(1O5g6CcoFe(!avr z=Knvx%YT;t$qPFP0(MO_>MgJPTDSA)z?&uxS2cx$~Pi?-T`N`&InxAbR(XwBQzNM(;)0X1a z;jI%}_iY{DdMFR6&iQ9(9o?#L-LG|QYk6B~TWy=YZC+bVTXkDS+k&ZF}_U+pDY~Qm1rSvh$$MqRvsBcXb}L)V$QX^w^~nmzFM_y>!CT@k>oh$1Xi= z=^;yZUpjed$SbpxyKLE2%T_MCblD%4g_gH0U$VS&dHeFV z<$J6cx?=kk+pgGk#gG-duh@CTZYy?JvEzzaD;KV8TY2%yOIEg=cJ1jep8nG5&z*kb zszIx_T>Zl;-RhrKeZQ(;^)IWoSpDOwvsb^j`mNRPuQsolyJpUsSJ%9?=9M*Xu6b?E z(z6|Foonkhi2hr-wt8*-+WBj1*50-D{d2E9@5=LEJ>PJ_*b9!h;3VV1()QA-(wU`G zOXrj>D4kvEDs3(`mX?=BOPfktN=>CZlm<)vrB!8Tmwi)qyg6uo(fpeERrAZ{p_Uyi zds>dROtu_ldC2m!dq(;3SX{KNWhL!*K&^`RPR!~XY~Qq!>f0%e!qHR%^@}8Y7VWrt>*TcTWfBqxwmG5{ZM;_ z-DmgO8|~-V&$Iv0ey;su`$hIY*caDcT6;?EMYUJfK2>{j?Z>tE)aIOgMDR%MUA4E= zzFB*B?W?sf*FIYNPVMcruh%|SyO(2c$1KN1&MTZ@=UV3_&dZ%GPLK0k=he;=oL4zd zaV~XU;B0hW={(uF+sr@yuBTj2yPkDbyBE0Y-3@NHyT<(=_bcYTJxdy{Z@8r4%!XSU7B@6E+}LnM z!#NE%G%Rg+xZy7i%NqW#;jD%W8?J2lQ^Um#oeg6f?`+%<`Ohtm&l|sJJji#t|8Ddzy6>6TLd2SKjpvP|APNI|J(lm_;2_B;QyEZ5&w(+y#lxRU-y6R zf7Sn)|6Bi8{!jdm`XBaR?f=4mpZ{b3e?o?fdp|3+nhTFqS!uv$_j_elMIkIQu z_mM4{hBOs4ZQ0Zn*{ zYJRc#jpjpJj%qog<&c(%Et6UrTc@@fTU~7pZT`0Zww0?T57=(LTAoxP4svwDyDBk7*yPV@RHq@?7!roB_oy;FF9bzW}Oo{5A8gp^RUj-m;Q0-xl3D@Ub1xU z(*I}fo4*{{-mhow^w_q0aECRvtxh@}8x>Sgu~QvYR2`=~NqcPDwr$%s-}$c3pU}P5 zd+Yc8tY@E{^ku+Ud5ip0tM2fKB-NblB%RGX-FEA^5ov+^W?MSUCSNI zKj~^|dhw$YeVM&%QQ3~N`S=jtgD=F#@D6+upT-yAtBBuaYX~}mo&XVU6K)Z15a>CJ za;zi=X$i?j!bqj0G|5FOAuT86lYFE+lAE-Fw3<{-8cSMFDkAM5tt71@<&pxV6{JE^ zeM*07FX~`wCKaF#pmwIVr*@)#qkgAyE9L&PVr^)o7t!tXIK7y@gsx?%8Rr=%85bC5 z8FiR-nFE-!S$Ni9)-={H))e*__IUOrb}sukdmnp0`yhKXN5NUfS&pAiZO(hk{lWdnmGIti8}L4JYxAn`n(#XEXYdyYf`T)Gy@F?gV}iqiQ-X@+ z{y+42!2`ir!9Brc!7IUQfkE(5@LX_1Kme}`z6sbuk&rJG2xG#iaE%ZasYE)FL8KJL zL>5u5$SC?P`XlNnZZG~Wxg@zOxhlCLsSe$de3HDDJdu2poR_?pJdm7_oRZXsnm`Sp zW0LC<82TX@D;p^rBTLJYvYoOwvVQXZ@;>tZ@Nk$2cZLVTVt6Lp3GN1Wh1kA(Zcli>F7Sop+WAKm}oUjS|mXTbt^GOU6B`hml()os+>)quLQ zdZ-#!w^Ps7pc;o}sJ5GSu=Zc=NL?@8AYB(-H{B53P~Bi%e_dN$cU@0iH+^@#OfS{n z*Wb`T&|lME)!)|N)msfVL(-5iY&6_7;Eb<~ER)=%G}X7%vedOyw^XsDEtSDOWl35d zSsqwsSjpC@R=ky9C0gfLXIXL9Y-_n~k&TVu5eY&7_DlA< z4uZquAUTQ7S8>!f?6L!`r`N2FtIq&Za7;GpT$k zfjWySrtPC2qo1VjrthNf{12@EH_-Rf*V7@Ek~N!cW*=i8WjEo_I4e1;Ic<0idDD3v zc^|lKdEdBId9`?1yxF|Tyg9tFyurL4y!yNvykUQzQg-1t1;>INz+PZqa17W7YzVdk zn}PMgp~05PCxGL3AnY>(`M?3Zjlyav7iZ-)27QMeR70w01G!D)CWyd7Qv zpM#Td349Q~2rq}1z#HK#HBAkvLG=u^Sj|++)gtw5wNTAgPgP6QWc5f5K{HG{MLSMA zR;$#}btD}}$JR~IjnmO|3>{Nv(3|vC3~%*S4e#~u^xyS=^dI#f^tTOn3=E^pC^E8* z0%K+HuUHJTQEHSMnMR>eV&ofN8^flxrj#jd3Yr2Yn<-{WnCvEt*=}~4`=Gnb?JR99 zoh;2P9W5O!<(9b?qjj&9YlW?1>pI&8+a_BAF(Wa=i9`?v0^1?G)UL5FvoEzTw38iF zhu48R)J~PtW-uZr)t_lNf%Uo~G1UmYLKf5(5(f6af>f7O4>f6ss1 zf60H|UlMo_kYO53i-|A@Q(->Lh6%8_m>Tn73XG4zm>e@>R%|RL!T3Qe7ziE@9tj=| z9t^Gz9tiFa9tz$I-3dJny$O8?eGfekJq$e#tq)g=)Q{|bK{e+hpE ze-8f+e;WS`&(Hpl?IySg19Dd7{3cZ)w*C#h1e<8IXcO=&$HzI!~ zwW743=&89>H#I@UsAj5%ico)1yV1JPGHFs8M7u|SOn*kdLcdJEN`FAtGj21UFzzuP zF&;CXGVU`TGVUhclI<;%wtg<5dR#ip3bmo5eHo z_&foR!=v-4JUy=$-v?4bBDfGVfgI2RW`kmIFsJ~nphh@PctvR4OWgmO=&4 zK4>*`0XhK{LtCI7&_U}J* z_fa-f{-f;je}7(6;qMRp2CktTpd79osO+k2uI#PsukDPO`>mG9w`@E15=U8qLX zm>N~b)nherO;R&ii`RlWfljJZ=@hyQeN5lOP~TA3P}|VdaL@3-fEp2_-N-ZUGnJc` zm^PS}nHHGB=7>3D?q?ZbS#DWod1ZNHnP)Aq=2`XDl(p2FZ;e>DT76d3y3MxBw%fJ? zS&Nh)yO7<;T;w>i5m}F{L$)LHkv+&JWGk`?IgcDcRw5N9U*P~M`(67z`yD&mL3j8Z zc&Eb|ar&K@)9!RRpE$oeYr2}bI=E)Jj-h+d!{|Y@5G_O3qb2AGbSt_Sy?{p1o#;9A zI6BVP&Ns@}#n;U@*w@NO@(uI->-*sUC-Bk#&HvT^%m38hCh*3;7z<)$*a9qs&BGGd z!b(~HF2@#OOR+Q-!-}vam^2s)27?!Z=Yr>hvQS~DAoMfTEYc*>Jkm6>Ai|AOqs*uv zN{h0i{3t8Rh_;Tkigk$TW2Trfri+>4j<_eDjwj>Rcp_dBUmCZ?WAS+fOAD42EGSr1 zu&|&oS&}SHo=l!kR!P}Xp48`5%XF*sn)JHAB@@*P>lM~6+*i1!Xl>Esq6x(li$9ip zF8NThvusrP%<_!vD%n5qpYY%C|76$7uAN;y`{sY({jZPUCjMm zJdiw&Jed41IftA@rjT{yq2&H#;O_)pPA#Kupq5ZqQj9QG> zjF*gOj28@$DP)$i@>zT~hs|T(XJ2REVc%juVBcj==cqYbIGZ>Io|p&oSUeKXRVm}2 zji=(tc)7eKyeMx4FU(uXE8;EWMHFheF{~Tc96D~{(?G7n@a0QKS2LTt4m)& zjiq>5mTaNyknFH*oYJO5mDx&>lBo156-tKEq=c1WrA4Vyg36SVs=Nd%m0Tr9S*~8G zUZ-BFCTof{Sz3w~(&g#gm2&=Bu^}K==g`^poecjPIvO$!-3^@$T?|Er?S_Yju+e7> z8e_&h;|bFt({|Hw({9rx(@xV_(>Tj$%XrHe%P`9*%NomS%PQ+S>p|;A>tX8=>ptsT z>q+Zz+g;=%@&@^VTt!|Yw~(jE1LQh#8+nG5A=i-i$Tvi9H`>?OE0+8J(9i7M9mUQP zXQ^|pv&fltw)BkgwDG(~`*`|#ntB?0x_UZ$nt5LSEl>M{*6_G|I-kME^@)5YpTtM= zQGBy~Ie#Cgv;2($H3LloO#{sXbpkuF^VkvWAXb2#z`kPZv18bNY!9{;yNsQ}He=hc z8`$h%R!|EY3 z4}wR){opBZ4|pED2<`@T!o#9tqHUssq9dZMqA}9p(veb{R3@cLM@T12`BI*AmUNnQ zh?FCpE~Uwgvg-2v%5}!MQE>Uh!?p1D6ZdNW<&Q)$y?p7aDpH-h% zA5~vcZ&ROEUsK;yA5b4uOSC1r1-i7ZTvw*MudAo8uODm}ZWw8JVt8bjYb-OC8y6X$ zny#B(nx2>zo99@vEK@DBEwe1!E!V7#ZO5z+tv9Uqtk0~Et(R<Z)n#GYWUvENwLynph( zV6U(b*k|k~CJQQpiQvcJ6U`I-60H+E3YH|7CYL8KB^#s~ zr&^@yr<$f3rWh$^N|Z{cfb{V6sPwRO-}H!dX1Y;f&%zFcZ3{aWwkdp7c)##n;nt#^ zML&vO74DV@jAiS=(8=SX)^#_H52B&N1G8-Vxqo-U;47{$T!T z@HluCybHbsAA>K!ci?^S73dPWh1W!vMGk4c6qU}GmPl_%7f5rZDQQ$XSIU&FmR* zH7cz}yG*xMw^+ASH`OrFFx&9lu)(<8xYoGxKXCrD#JI}%#`wkb-SpA)##Gh3#Jt>0 zvFx$bwAHu$wtlhJv)#4cwcWJcw%xbgv0by>vh~Xyn>#gkSnj~wNx8jq$K(#kosv5t zcW~~A-08VPa>wQN&z)@lVE<`XJ2VcJL+Q{u4m%Gxw>$Sc_d54DcR7zacRQatYrE90 z<(|sWANAyVN<1-7zGsc6*yHmo^A%#_oDuaK;V*DvwUA&@rdGV^^QKjQb z^UBVY-7dRXcB|}0+1T<~<@a+6$g9cMs8^}O87$5N-XQ)*@ICk&tRegk{s6y#TZA`7 z-NhTEE2RgdJEU8s`=zU;Yor{RNw!8-TUA%}TUkT(UD;UGQ1wIoQ~g{0Rc+MjwM%q+ zbj|f-1JzKm-2aCr7tX9<>tO3@>uh^sBj%EF z*}3#wUM?Y*mOI`4&Hlq~bQm0`oM)VMTxUGXJf}QoJ;yw2J=;CoJc~VVd@p_PeRqA{ z!1}<)K+n7pd42MF=i!6ZL$t6UEDD2RPM8$l8=euF6Y)jeQGawrY-Q|hEI)xIl8O0= z4T;r>m5H^9bfPGcN?a_sTyVDFQo;S?&E&P@jpXfQW@Z%>ac99KA|uwUV#!UjeA{#pRkD8?0M70)R?UVNi+uvZ@%9?Zh#XY z2iSoLdCWX&-i$nYUREA1Z)zSbuU4o|$QIUwePKgb9=3#aVPYgJvMPc_^P=lwt7G>P z=Mr}k2NFjUHxsuKmlO9BrxI5a4-;1sPZKu_HYOh=d!>4$c&VGIA1QXFoPSoV4XJ5H zdS`k{;f%r-MXihK7e6h2Qhd4iMsc8&SE?zMmdZ=xWvQ}6*~YT3gr(#y_y*0gcyv_X0{a|2w z;A=pYC(je*Df2javb=_&`k_GB8TN!-;f=8qu~zxj@_!}n6#%J&X+mLk;nKq1ML^N8 zq9H|1OX`=H%QlrgE$d&-DHoLU%7OBT@rXe^TPKFik0(QZ%V( ze9_pVGeyMW?Bc#9-AdM!ZY`htga%Q=xTwFdndsOyO@^SJpvYl~}b)J>Q z`NPW;){*gK*($2ap?#>s^sqr*DdYbJGuOtkL20f`xANb|A79< zJfo{^Xm3oKKQT2uH92)SrAl*(x)f83IVImpzn9v|kg}TP#&S*h2X+gYKqa@qwo(4Q zfqCJ5F-^WIU!7(bUM}ide6kEwT{jlx8S{^&_(j5^lH8KK<>5myBtJLbmTxREm3%29 z2JQK6%6e*~MFWc4mUSr8{QaM|ihsX>QlJc|4omNqZKm%w29iRscz~4vgfElm=R=@@zKrUbh9DoyW0d4>VJb)MQ0e&C=U_c%a z1VTU0OkSnfd#-qU=gqwSn}61^Z)m^6j%l<2UY+pfmOh2U=6SqSO=^J zHUJxeO~7Vg3$PW~25bj*06T$Qz;0j<1122Z2MtVc-aG6gUPP2TlMdfm6U~ z;0$mUI0u{uE&vySOTcB|3UC#;23!Yj05^eKz-{0Ta2L1-+y@>24}nKO<#^FP0iFWS zfakyq;3e=1cn!P(-U9D{_rM3>Bk&3M3^dDVo>4WUMMlevRvE1`+GMoNXqVA7BQv90 zM)!;!89g)p&FGcUJEKoV-;914{WE}!0T}}`24xJ+7?P2lF*IXX#_)_086z`BWsJ@k zlQA}9T*ml}2^kYJCS^>{n36FyV_L@aj2Rg-GiGJX&X|*tm4VCPX7V!mnSx9(Q{qeHR*t`)8i?o(DX+`FtQxG!0?aP4vb;Hu-g;F{tx za38ap;MQd~CDbM~A}l6!$?2FgCkM-^NxVnCL+(fEMHx&PO>@v}G!M;6%cU7Xe&*#(lTt1yI+Kt^g;)!ML*Qo!PsyhY$u51`(zb1`u`<>g3eT8J!c)$bXS%q0qma-xnXB8G@cB9F)=rilWgm5Vlw=TD0x&IG6m|KV2k~@gohTDPLhuei)pWBGr zkK2^nm|Krqo7;}tj6a6IiocP6j=!6~oWGfWoWGjCfxm{ogTIWwmcNxhMz~bCLs(n% zQGENUeBEUF{+h~?t2I4(Abt>U!UD@MgSaY!5#Tg2t! zn7B~v79(P(*d#WK^Tpj{4q2}3wyeE8A%7`oZ zKUN>qr}b+L9}MpdZw;ReUyVPF-;6(u-z(+(`HOL)d7Sx>*<`U=epvLjU$!BRh-0;5 zfn%#mlWVSPuWN;?$dz^#yEeI&xK_J%y2@PJT^n6XUGrSaT>D)MT?bs7UGrTk zuhOgV!d`OleB?yrLgZBBa^zCvN@RU>V{}b)Lv(F)L~=}WbaG^JQt}k;5bgqQJ?(g>*_h`3iuW422?`XGZ-)X;SKWU$74{7gdUuZXI z&uAZLpJ;b!ziA(7uV_mdvzcd^SD7c7SC}W5H!8({=Qi^?^BD68^EmS|^8)iC^9=JS z^Dy%?^A7VX^Bb!(y9>K3yAwN;y_UU@J)d37Ucg?&uF2`gA#=Q(VcZd1B3Hv@bEj}~ zxYM{ZxD4)W?s)D*E{B`Roy?_jMO>IWkw1xlhF@P$SMZ77Ku}Hag8z-*P*6|smH(Mv zMbK2xOz@rGT=0YcmOnu_Nw{3NM>tf}Su{{IMAS~yUDQQ1NYq<2Qq*2FSTsV^Pt;J{ zNW4${UVK!%{Xa1O-xTiS1KNQ~)ZxWvpZxDYGe-^(MKM?O1Zxf#u zKM}tbuNVIm9~Qq7pA@eaKNjB*e-|GU9~U1GKNp`6_msJ0sBE+Bvh1qtuB?;1v%IHb zu%fS`qhhpToT7=Mj^es}kRn6TS}{`5M$uSNMbTa{u~O>Kt14P4hAFBk8Y;#sYAQM@ z`Y38Cx+rQZ8Y#A@%2m5n>r`u1^HdvEn^enG6Erh4Gc|IJN~6`ln&X;>nx~o6-j!TYXjx&xcj>nEujz7-Mu6)-u z*KgN1S55a*R~7dq*GTsZ*Jam7*Gtzu*L&9|S3UO+*JsyT*YiqQ|2=fwb$xezaJ_OF zy*jVWtMyLsXZgi`sUPxR2xMS2F-_<})7d(J(i~ofCh#Q0-hVO&_jQfIXiEoGRgzteLg71$X zfNy}OXXj@pvX5sU%s!NTH2ZWmk3c672y6m}KqBx7rw9#l%5u7s?h{**nvk9lKM)@h z+mQYcGf1^aFNlpv)k*LE1LJ=k(huSn;#cBbVgph&Qe9G2%0HBol!4Ssl=GDBl*5!= zl%15Vl+Bbqlp~b0lx>uKlm@h!wAS<%^uF|d^yc)2^p^BG^bYhvbU9-QV-;g1qZ*UU zBr;zz|1e)O-!Z>1tFXQ?|7G`NFJ-T0FK4f058?nEF^9#abH&_>{dWI{p1_^Y^>ZEE zIM>N7<+`~A++uEu>*JPi!`#;Vsr>i+Mgp>+k6^N3ieRW>y zU;$M?6wm~H1=9qB1av{RV7P!H7%!MEm?@kpJS;pQJSf~RoGIdnrirpeO~g&b9VKlf zGb95ggCwIQvm`i43&{XUJIN49Z%JQCe@T{PvShHNy`+hxnWVdXv8$<%sf%fd zslTbGsh_F0sk7-{(;!nX(*P6E%rN83OmmKzV9qwbFuye4HNQ5$GCw!pG~YJgGJ7on zi^q~@30g3V&vMn$$XXfvD;6We+SFRz+R$3dTF2VJTHD&hirQi}%oeoyZ6TY-)&Xgc zG)5XAt&kQ-Q=}u(1ZjxWLzs4+oo(mZS$2j!X^-0v*!SD_+FLlrIz~9YJKj6KIX*e6 zI)6B-IIFt)ySljsx%;{&yIZ@n-QC<|_c-?icXxL?cb7`3KcDE%a<_H&a@TT?cF%FQ zaA&$Zxre#?yZ?1hb5C*4cIUV|xcj(gxqG;$yK}q*?|ko4Z_*p`#=K=-pEu?8dh@(R zUXOQ?x6nJ!yTn`IO?$)MQg76o@15kI>{s~peuH1*clgzQyI<*d`*Zy|zs=tSn--)5 zt-*!C1wli|6xtNp651R(7rqew9r+abC;BJyBa#vQ8TlN!9K9R87QG&Q5WN$96ula~ z5xo+<8GRVV$10{>WuUWSxY(uG{n+&wGs#KrOg>28De7Nr&r;!~cpjdO=i+nlv+yju z20tA?2R{MNz|X|<@y+p5@EkmZm*E9?5I+?^9uMQScnUrne>Pi2P!Qw{}DWsydZrjz=TMv=yoW|8Vp zYEphsno;jlK2vT|K2oYsUr~NhYEi#Z>QX;Y&QNMnUsE1X-cue?UQ+H+8c=^y8d0B6 zs#5Dw-%*}X-cssQGpI}&mrkXV=wdpXKAb*;uAt-T9J-J$r{~Z?I)y%o&Y~0Olj#il zbb6RRmOh6*f1RjA?5EFz1DnX9$lu#(*i5Mc9h$-TW zT8YgPpCl?NktigvWVK|4gbXPq3nVKg%OrYqhYCmZ+bX9e~v^8~AbluK`%royWe>ZQ(HM=bf4 zsAY(Cnsu~I6FI=J9{|WJG(d=yN0_4xkkDMy9T;+ zuBdx~d#O9*wz#$Kg>IcY;&!?V+=XtvJKw#`jkw+Jpu5yv>|XB9bLYAjx!1V;?v#72 z+wNZM_PJNP4ela0%}e&~@ow=}EcgGR_j~tw4|%tH*Lsh7w|O^sw|Y-{H+pw?cX|(a zcX@Yv3I2e;z`xW#-@n{n%`Kp8p5t z{}-_@v8S=uF-w8Bz+YfXDw49KI;l+VNlH^0=||~QVKKe{pN}uY=iwLN-S{9rj4#DY z@Fn;--i7z!IoTJpo8&akS(vlrFTtgxMWj_EBWVhGJ}E)+lOm)|BqwPBDNb5QLP$Z< zVv?OyK$=Gilj>3ar4FN3hW@Ro9jHC1U8y~(pD5F*-Kg!TZK;E(N6# zeW;_TJlYz1KE0f7q0gt6(M|NlbQ^sUeI>nszM4Laj?yuDiteW8(U;M!bc7zHm(U~h z1ih60oNQ8< z;JDzf;IrV8;Jx6JfCt_Y>=xV-+!P!XToqgp>=zsnoD`f892LA3ToGIo3>1omQXwd0 z3ME3JFeoe)mI+r2&kD~AE0+8J&^D1=WED9?YLQta6=_6O#r2>Ik__mkq!;v3@?7#x z(h#~V`678Cc_{fTX$m!hK1l9KYC(8&_&5JNpq+hbVM>jHcB>5Hd>Z1OUVjl1+rbTx3c%L4}Tx) z{8UVZr@S1Mm3l zxagSVoarPuan5PZG0r*8kTZHQ zaX)nbbbod?LJzx-x?i{-xc9iLqPN_S+*jRy-1pok+^5}_-JjgY+_lk$=xujnvv?jPX;uKiN<6Z}(sEZ}V^U@AdEYZ}#u>Z}IQ)ulH9C9P<|h(t%Xq zR^WQzMj#8DgN?vw*m#VBQL)L`6pVmP$Fi}R*lY}kae~gEBe*@dJGeHuEx0L&h8&?l z=xXRf=v3%P=yK?0=uGHR=vwG#=t}5N=uP-b_aI}B4MyyXPBlaiyGg>S5E&3x`HC827GgduTEyjz1F;0vh%_aotHs;IyT=>G>&2_Yo5cUbe#L6UGvYns|HRwHGvlq}E#uYWE#lUKP(iRDTHs6O zCjH6EU=T>UlaA#6 zl@a1bsVwD}5b(6MZdx5B(^82mSDWz<+5AeJ}kueItD{{S!EnJgho!;-VuED1}@;K0-J!f!A@W% zSQ+{c0w;kT!RBBqa0ECE>;iTL>w(=t0PG1)0EdA6!8%|Ya6H%z>;cvVp9tE5{lLy( z15hc93oi)0qM)ci6cy!(Fj1i>Ut|(>5{n=XG#tu;_>dYJ2Tg&b&UEgJwgcpjpr`hza4KY-k`vfcisLXf!lc zHbpi`Hc>WRHbGV_tN;Cn?B{>r{QsNmi|nhc7`_Z2g(L7@xExNv`S4tL9lQ-b44;R0 z!TaDc_!zteUJIXs7sF@Z_3&=^0DKd^3Kzn0I1Gp2h44Ih54-_B3m=D5@M?GgJWWkh z6Vw7VS3N<^QuEaswMi{i^VAd7RP`kFEVW9_QRCG)>dMf6vU-l1uEuFXnxH18iE6@{ z(b|dHQQDE(@!FZ%8QRIZnYvjzf-YM}(T&&Pba-8sZlZ3gZjO$qyQll3`>p$>Yp*x! zje0lqM&Hm-&G1G4TmMu4P5)Kj$nZn|S^rA^N&ib#;gWHuF=9Hykn`uA$pWk$?qb7M;@OKVFLOG`_0 zOBYMi|G@okTT3I$0?T|$ndOB=WCg7XtIi5pHCCZjYgJoSR-V;lHCP4K^|p<+H8wxu zMI1;7u_GSDf`kz(;zn#p5XnbS1VQ46!Y;Fm?Gn4(zSzFVzQlgRe$(FB0Xn%(qm$`` zoD3)5sd07|vz-Q~*r{|@ivCWXv%PDEYqD#+Yocq4>m51{C8Gw^j7HE9Dnzr<@u(LS zqX0SwMNm3QLv^SYWuY}aY;+hp5*>_M&`GEX9f(dr|3$C4XQBPkiD+MxgR0OGXcjsf zC7??55E@2Dq0`Wz=pa;r=Ax6)-Y6F(qA-d_>-sW$U%d5v-@TW;pS*K?U%d@{wS856 zpS|^c)qR)!C;X@Ur~SA6H~iQAC;eyro+8z|FwpfC2Mj zc8rIO!;F{y5FJ-3 z{=1W-GooXnjbim<4P%XCEn>}Lbz==;a7-DS9w)?s_{g{@J}54Xv*Ye~zxd4f)VLxp zkK^LpxHzti4~_HUs`!97F)oPX2lob>g#FL3+ESXB4PJU1R zN`6g#N@`Qalqsc2HB8q}H%PBce@=f(uPIz#xVCUp;i{q)MU3L-C9g`JlsL+Ml|9B^ z#9zTb#ecxxz(2>|!au}cz`w-5#lOKnz~9AJOuNcJU(I$9oP=kD7k`UWR_62|Hz(I4 zHzEHdH6*tqS0y(k|3m&xYERA}{~>)N1*kS^l$xe`sZOe$s-xynEmR*hMh#O9R2S7x zwNmq`5$bQMjCPa$n*NA>iT<2^o&Jjcg8qSipMIBqgZ`3!n|_OajsBE=hi+utWmE=( z2Mhtz#d5F^mX~E=Iax*)#tN|ftX!6j6=IoLb{3UQW9P81vd^)vuurpZvM;f(vCp$F zvL|yUag?0RoIbpsya_xuPtDWv2)rDgh9~Dacsd@DXW=n;Lf$Bzl*i+ddH?cz@O$%n zgL6Oz$O3hs0n~t65CQd|2wV(ifi92@GQnA34#)-ZpdB0s%0U@O1BIXw)C%Vc=ZWTu z%0<=18R9PDbRFj?ST$LyP$>8 zMQ9sz94dm&KpUV0v>ciTl|k2_6cmN_Lz|#Q&|zq%Y>sS}tV~uen=3mYJ1F}tI}Lw= z-@(xm( zQNDm{DjO&#DXS}g!Jpv~%67`1@JMAxWqoA_Wi4fArB5AI2hk)>YB}qpzk%^ih2aLoGu+Lvur8Lmfji z!&ZaSXft|@E+cGo7?s9cquaRNwA{4Ow92&9lxtdHDl;uI%{8qw%{MJHrOlW*&zv+D znDfmEbH%i)40OuuH^1pY1S!!8fS!sD~@mou*m^EgNT9ek0HE1oi zhOHiJ+KLhitqZL#>kiu<+fLhd+Y)38vL9K1EJyYsdyzv(DRLS)h#W>vASaPE$TlR2 z>_p0u#mH)888Qz!hG^~g?GNma?6)iB{3FxBaxfhMr`PFr`kWzW(3$6K?n-dGrRl7LB1i?;u}SUr(RRH{RFJ*TL7>*V@H^Dd7H`Uk4H_+G1 z*Vi}N*Tgr{H^4W$Zg)Q@zHwTpF%b%}M1wU4!lWyU(k+Quv~P0SqA z#umjF#tre}xFtR}o*!Qx55+5%`~T33<3;fmadSKsx5pR6U&q67SG*uTKaRxx@p*A9 z?u`fIh4Cfv+_*2kEM6MVi}#I}CFdpoB&jJRWl80x+$l%Om9nPLlrv>dolc!fwMef@ zuTK9{Sf#LLVQFDW;eo^wq{@Q(0?Fr7S+Jexd(Jb^ruJcB%yOeI$a z|BA(+lgE<>k;jnxkjIjTlY5azlG{*LP)n)nsB@_csB5Szsf(!dsDG$`=pX67=wIlc z>D3rt>Hjdk(W^3QGO9BgGQ`Y6R*F^5inHdk608E&TviEd9;=8|#)8-^HkZw0e?V@q zZ?o^QXK>bY@_25ZnYWI&mN%alsFeGUVqSu`hPR4W&WrPw^XBnFJP~gLuP+}4RbUdF z3wpp5SOP}CJP-qe-~zB5lz{8NG-wc7gl3^txL&wHxJk5Dv`n;Kv_-UBv_@1#T0`1W z`Uv_8HJ84F9zva@f1sDpeW`vt^593uNIx z29!Z1Ux`zClyqfMX;8|QE+t8+Q4*ARB}JL9Oek5(DoUPGrbLutWmK7?%u_;2yRtwj zP#Tp|rB%6Jy+&QEUaOv~E>bU3Z&H`47pcqC3)S<~%he_7CF%|8w5CWy)e^L9El11M zva}2>PfOR*D#d?;ul4ByI!x!)IdzE6qx0)*I**=X5d*1Q*_w<;r$tdPaE~da8K-^)&F*_SE-u^wjb6@U-*%Kzn<>qqRKsJRi|sp7&^T z&lmIs`T_lkHt{@1pP?;0ztNta_MU#8e>}g?4xZ2G08e+%6Z9$i7JY+$LtA+|c>qsc zPis$q55H3G|H(dq5A+#*_k3C()kpL(d;}lQNB3p>*gl0%>cji8d>kLkr}W8v79Z?m z`h-55&+60r_&%`@^3na(1N8#U0(Ao|1FZtB12qCI0*wO=0<{D40}BHS0;iTUyNF%Fc3@Yq-Pm625Ox(ifNjTiVb`#+!8yT5@KNwi@LKR`@Oto8@JVoP zs3bHmR2=FQ?i%hE&J6bpHxK_m_TB@m&Fgv?rz1_%q-|D{rcKf`vq>|Wr0GmsPr$~5 zDZp&Z6t)q2$#U#gj9}w{umK4{(L@Nz5(voxA!LSLG!V#^Yza$%00FXv*~=^6(Tn1Y zj^FS9i~rx#@Ag^2s~pzbt>f{EhPW%3m#i zyPQ~FSpISO@$wVpe=Gl}e5j(QqPId(VXhEY3|1^uj8>Q`92Hk8tQFddxr*+JnF@79 ze}%4Ms$!tRSfQ#Is~D-6uFzLpx-a*CTZOGcSs|*xpJ_hBJ;OgEIKwzgJA3Ku16ALx z`exOEs*kJ6s*0zM)~?k)NcEs@)ZVK7F7*NGx2b=vyHxkX`bX=Z^?SnaX}_QNJ?1y! z_v-*#01gw4Ir1NH|7TzlFb6S*G3l5{Ob+JR;GYKfhjfOhLb^iQL%Ks`As_vQZYia8&1GUiI$<+!1^ z!8lc1XIx2KPu$hGr8slk`|-!(@$t0y{seh~B0-&?Nf=D%Oz22xPtYd3l=y3G0(KWR z5&IrC3HxVk1okjC8ykl8!~Oz$0Q*PmU$9%TSZo~D7rP%Dh)u;NW23PjVk5B_Y!G%Y zb|2Og8CHs!nZ8 z{Wgx7%1>=iZBA`U9Zc;?J^vqY|I<=csod0o)N`pVse;tLwC=R7wDW0~(-dhJ(llv? zG<6!1Hkj6#W=fN#Dbt42uBK7b>(Y}m5;77q4rRn=q-0<-j%AWF|DIWyS&?}rvmx{0 ztdFwZ$$l&Q-RwVQzn}eK_6OPTW&bL>BYP^FoI}lN$f?btltkvA|w1 zTrg9xQD7*zRxn;*DY#x>Di|%eh&SM`;D_*f{Nse56P_kKLiics1;P`A9}u1;{D|-q z!i$852|pw}Mfg79Ny00HmkHaC6&%AK%ReSOHh1iek6!=i&_}}KtmFLS(&KH%xyJ>^ zn~#f*w;Y!oXCGfY9&`f!EcgiwaVIf_xR)3}j3I{Hm){@!diVbpq9-wqxRn@7+(Gms zdJzv2|4a-crV;lMj}WtnLBvF2H1Q-cffzvyB*qgD5f2u|7seG*icS|*6_JW6ii(Sl z7o9DtF3Kw^Dxwz=i#{nTFQOLxt*El7wuoF*QuKVut0liGd8_2@lGjS!EqSrz^^%uL z-YI#rlEECJ?de~i&i*9tlY&nQKe_qI`{f^$|E8Q&{z-Xx`Kj{L<*$*RCw-Un zGtzfRKP2Uoen1EQV z6|a+iPx^rL2I)!CBmV)vzxpugZpA|+57MoQr%19h183xCq-WaCh|hGLX*<(-hI7_% z_Tj3>s~)YYsj8}~teUS{ulk_+o$B|hU#|IC&1*HU*VNVAsBzZVYbI;vYbI*0)i`RV zYoz2ZvWVP4UM1foZ;;o>?^8aa5Gh3zJcU3hpq!wPC>4}XDEX8#l&=@No2`#hiYc#9 zpQgS*eV+Ox^>ylV)E`q{q&`Z0hWayVab00uQ60aIS7)rdTz9kX@%lg2zv}mj--~`P z`@P`zy5F)t33C#23R8&r8|JSV0_Ftf80I+Ua)=>hFyvy$TVbz+y%+XU*qdRmg}oZ~ zPT1RF1z`(ei(!(8Ly_1>c~nPKPfS~kEM_`pEXE!)88Z_z5;GU)h?|JJ9yb{`6L&oR zqj+)raQwxDQ`ocE<5(uP1Y3`#U>mS?*dih?>U8Q<>PYHhsx@^ybtcu8wvaZHwwN}VHlH@0 zmXUEJBQ>Kcvn7+8`AKF|CNEQ%$;>>L`DoT-S&wJ^Fzatw+q1p1cV&BJGqN4oZ8_YW zmK;fr_`c+SQI0UDF=sw!Dfdq9H}h`g-p*ajeIRcm_ipaD^SF79dExnC`I!8W{J{JJ z`SN^4{)PMp@IS;a7I@%4Ex1+i1N?Hq!}z6wZ{i=qe+&N&{CdHig74tx3l<6<#eWY! zgMW+gAz>TgeS&xO?+9-Yb`iD^ya=xo_7HwW_#@#rgdK!G5Oy9rc8qZB=&|Kvi^tyl zsN;C=aqV&S@xJ58aoKUl@vsvIPK2NMEAb=ZX(F3=hWK}4DUnVrATo$#V%>j0{?8%e zi6z7aVm>jK7)&f9o+TC%PZ4W~RN`?Wjd+4sOe7NXh}pzy;wQvp?i zN_kCreR)GUwfyhp4Wz%4&XM9s7?KwWPYNN0ld?&>NWLULQZ(r>=`?8%2}{Z&1(SkE z{-ph+G*S+!fD}WDBpoCrl0G8sBZZQXGm0~+Gd*Ye&PdMi&kD{qpM9a~XH`G0daml3 zDsojrRc+PRJG=LzbzK#;%2;KnTBzDuy`y?}^{(oj)!VCIsrhBin>BCLykGNP%{w)3 z)x2BttD5Q>dQC&kH_10^mTT5(Hfq*uR%>q6+^M-+bGznSWI6dR`40ITl-p!)3YpSK zsiROREJ_1~Nnub5DKyI8Dd#BfQ@2tRslTDVO?`*@F7Z%d_&agyao>plR{ZU_ z%J{4C!wFXtObLBhDYg@9!z!`uSTRS!TC%@W?SZkOnIg_vm>)R^U16y zvcj|DvO}|dvjeh&vkzpmvOBY#+1)wqIiKb}lJ`X3lX(y2J(~A;-eY;Zyym>9{Acm6 zEPDGv%5tT#*v4_}AY$di4JBbLfm)J$r5Ou_UVjodR6caBJUoJdP zln~{_q52f2qW}U1#S$(qV~V#}h-g3B;vk!A5^iT?rbf5OTR zl*N=qlqHu1mU*7`I_-Vh=kzbi|4{zN@;{e1mNU!Q<>$(q%G*dMNfjgsi9({1N=R%{ z8L5d>M`DrAkcvq)qPDsB~{s_DMuKUx*D>PnTl>T;E->SmR1wO_S=_4(?pH6Paeq2`C= zhsh6-zfb-)`7!eM$PbVoB!7pjAX~`arF@(60OfVc2bA5EJro}bLQztBC|#5bls3wF z$|Z`J(o2z2Iw|4Q0P23~ZfY3ShZ;)7Q1?)Sss7YJY7{kudVpG1cd~A@?i=+U^-tBm zQvb{PH|k%n|3&?t`k?w>`+eYd)_=`k6u`ysFf0rk(}Zcp42M`lu7*4w`lqlzhy5k2 zCjuAw_0I17Xx$ZcE9SxYN8`UA|4{rR@jr)1i;0Cof$ogzqi}6U z(wXV3bVfQoy&+wb*_SEF?8$s8D>_@1qt5BgS;%=V@2B_W`|qFUJ)8G*-t&2ayu|#Z z{P*!6;(w2S6aPoN6Mqe#O~@kT5^#hZLMkDjkWR=XBoTa$?LPL`V}-{g$L<`vdo1^( zE60t;<4(k!IC$bZae+8XG!t#a8R9VU3eibiB(4)p#8Kh|(L&S{=ZRCqIpPR$oaj+} zv*=sJt3_)?4;4RB{BZGiif>Rr0KbW3SKDW){A)TcD)zC8bYy(sW2-B#*f8eF>lWX{R#ljM`%IrZSFhfX!0 zYC6R`#XWVnEVnG93|p33R#4Vm=6~An^#0SnrvpxlPH!pyOSzz&S3W{QNQ0zq(lBX= zv_W!`v?Mc$Lz*I~Ne0pl(gev!>Luw&3erW=H0kJ>;WJmy*v`IQ^~U}x? ztyPjLah0`dq-wM(ygIZxqB^*`tGctgqgr0=UE@`=y@pl8uK5Z1N90$?&yimy|CIb9 z`33T80=QnRQyYBH5b&7c-gPf$~-dDLUn zB5D$~vaY;NQFpuUt@e(cj@c^_RpZa)6- ziKG+BCtfW4l=zLpyTqRsdK9h_zg_rH;RA(_6y6~|Q~YT0W5rJwKT-Tt@xhXW5^2d= zNpvZ;G@>-A^k8XxX=3T&QvRvJvf{G8m4%+hoDM!6bUNhpfzzix*mrQ5&gs zR64bb%Aua6vZ!ooO&z6_(I|9h0hnha$mmx{CfHS_2TD>e_H%P@yo@}7XPw%ck$tpd8~*PL-9NEQ>rHb~@s;XZeouo#oQ9w7gS@-*egl&2_vp!idMS^He=v$b#5zEt~*+ShAeuKjtfges=Ws28XR zRZShF%Bg+S9%=`*jjE$csqNHeYCly-ViTX((gM%`@PPwRhN|C9Q6 z>-W{i*T>aY)Jyj%F?|>fCN0z_Y)_amLLadh`SbV};$Mw_G5+C{@1{JI^8G_WI1DZr z=Z||n{b%W%^kW&OOk<`w^GfF7Y+m*Ud7?aAep-GoJ{%v455ph0FTX$k_4a=mzkn|% z>_1j?Y~*;#iC-6fQ22h~n}zQc{-*HF;$IZMTKq=wE5&IgT_y68TP1|jzm=XSEi5IL z9xMIPsWWAjW#qDovQNs+mQ|HSpN>84RlcXvw{mx-Pv!nfugaa3-j%y5JuClGHBp7F zPOjEe2iAnu>>~$|1Ic^H`^nzq-S=hxcai)_z#~+uC2(zE}IF+TYY(rCy|tP=~1+>JZgJ)l)~Q4yu`IqF$!1P>ob8Ra`e; z_d)&p_3zbht52yvQ%|e^lV6ShOvrRddg$ITQ^Y&P`=h=Q`>oh-$G#r_O8nXQ>j{sg zJf8By6m?1%?f~w^^b;A!Gya-^%QoaB;uG*^2!~Gmp>Rv#?+ZUHe7EqAg?}#mRq=bp zZx_E`oL!Pxl2LN^Kj7d0pDZmaEiElB-FfnvQ`Kd0rw^W%mB&^FRYp_>S4LL$R`peR zRAb1YLPWXI!<*`m#ItC8R{&xyKbm%v2LmEJN3`j|E~VG^}ng#UcbNo>&5P7>$G}Y{gL|A z`b(Gr%)YS0;cvyyCfrDPA|(nJgNwjL<6cU?nrY88=KL;Ck|)l?;;RTH#}1#^UiiD> z-xhyR>{DD>dZx6ltiJ5;Wz;fxd1rZdc}itcWpbtctY_8sDz7S}%3c*oHj+ar2Wt~+ z6KZ2?BWt5;zgc&e`e5C+>b_I=K%Gb3H|id$`;>Zz`t7>E*F9hFS)W;-Ri9mNz`PxQ zKK{ok&!jw^@{^QU+^gwL>82cW&hPV*@hSLKJo&!-{h6<~hSdZLp@uMa+;-fv(5uk9 zFs~%P1Yc56@@YwRX-z4!j8R4}J5qVLGPN?TGNW==ReE()O;YWV+QYRE*L}b4(Yhbj zJzn=%T|?bU-9z*ymGTOW#x2SazcFqsrrz$>b#R+mvVOUQhQatS|j*WnQhME-O2Q zoL~D~T`~@fW7HAqchy(dAJ3Im3>J5U_(!wxH{t(o?pEEldeXdT9v(XYg$-Zbi4fYQ zFX()~z<<^9za#6vX8Vh1`$r#o@X=2m27KhfN1uAmHp^|u!Fvn?n(Eed((H(chi07d+2-V`{?`W zzH~pjKRtjR2>TI4$Iyf6A@orC0eaY1_9vVkL64+I(WB`x^jP{qdK^8ToT^|L?VIMgBW>LZk%|A#I2lks#+0DboI>Rvm~8 z=|tp67otEeAl*n0(u?#VN(4dr5f!3FG>8@%Kn9T^M2}oVE+GcQh+IalAST3&3?o+& z3t~k^kWpj|u_5Eg1Tu-(ktt*vnSow(fS865_c>%XuuzWO(0K1;?nJpg4L!FsRO)L_2H|9g-Bf7DL>5BhdMo7m*U526kxB_D~;h>tp$yeY>f zqrZ~mK&~Oz5hpT>+(71#d1L`u{8HZkY#vLk8Z@-d!Gbms#%evvtb+ik$HkIsGeg+E?Vy{Cu@!{2MzaTF3qe3l^#& z&>CoT8jaRWf3WFlkpF|OqoLicYeh>*gXkY@zS#F?d?SrRG(dg`L9c9 z!+Er~rTGCod26RPQ<_0sxiN*Y4zr>SUan&$uGdN7qNC0p63fRUMW?!D?5}jWv5cE>{2R}7nI$~9%ZkxPpMQQ%6_Fvsa9%~ zTIGOJryNucDfP;W%1cUv(x|+wyrMKI&B|frRi#B~RgNe}m19bqa$Gr~oK)JCQ_5-O zjMAaJro66nDrc29lyk~?<$`iixujfHt|(WPYv|g1d1YxzI;ve)ZYXamZz*pp?<=dy##}e#95?L;R5dBoGNgFi0>Gf`lRmkT4`1 zi9jNeC?pz*L1K}ENE{N6Bp``M5|WHykrd<*au_*+q#`&Z4M|5bkW3^Cfj@1GS=MceHGH=6|W|c|LqG!`{=(+Sf zdOp2?j;9}`6X*?e8l6sO(3x}=olS3~bLdTUF1?w~qx0$K=mNTs-a>Dsi|B21F$WksGPf|nl6lu{>)|oRw1MVx=xO|n4*?qn!&l|u z!DJj%U1JF~pVfpiSWvfv83%Qr!4}mH(1ihdsltJJc(8%)WO^|@QUBx23AF45|1#cI z)MBe@CnJ&(f%2dE*(@i&G^R~m-@TE2(UvdpF}UO&vCz_D@$m2jZyeO4veAp-t%^eV zCPp*EPsL+!-F?}?KZ5$}Z`{fC@Q7ycp=OFX!<>ei>nxW?RinDmlj{Ywo6yN~m95Z+ zhsWhrZ?`9xBw(Cl_^X5r3FulFt&BibfU1ol21)b|>*2A&6sQ)NtIT#4U$w++an~(_?HZtiDO9a9+dwN- ziP5@N)itJ*xdC-Im|WEYbB;OB>`a~^&Bf+y_4LGFspfLyd5uidqq(3NX*4&sYT7hc8wVT3nr@9sV`%Kqh%}cPC7LUZ?GURMq16DO zrLk9IZR`h)Qlr)kH_A0Fz$-NR#y*X<5dr?+0fxJq>#83cm>KZ!*v0kZMu2={z&S7t zvI~5;vjYw4dCwKdZT@8`um*Df&CTU1)hh89`G`6XlQWAFk~F+1!(}#1;bG4+&skW5W-Ur z!JI*Ji6`fE@vK8#0$4?!hNl@C4vU=W&eGe1ExT?bx$kC&26@JQMI^NEU^rTJ1q)}QjCb(Eq&r1i$>fF zIiSm;6~p^xpEJW)tN@1Yct>x z(8D8J(do=lbT}a|JKLR7C}BR%EQPB)KPR2@@R*sD%;hSgdaf@x7a$^gO}!UZ6f1}N zQu>D0;7l-L7*fb{=NSP^f97rGE#@8OO~^01*}K?2kS#W03{K)`qYY>z#Cj-gWat2` zTM$kQqea8IN6^koBjHxt4Sw1gcbVg0=fmh^bTDL~fhRdMw|IE$VNW(rG}@uo1y*|Tq#?0qn&6f{%mG*gX((Ec+RADS4N01uNxkO77!dE-1A&klSN8u8E% z8ex5wEw;@TcRTp=g_^)Jh=+wyCjjqIA#y-%- zqCOOi3yf}tTy+5IQ()AdumWAG9ju+KPIL}ltnKc#^zb;Ob~YVGXL1CkzU=+zeg&}o z*#7RFn}r^njRuWga}j1bq`A>}ty0yL-W7o`dHYx&}21N`XtSgB2KT z9RfNeM&M*AE&UdiMGt3iP`uT)&DJ4pmmZjKS#FVSm2H#lkS$IwO>URDG#(!3U^fM5 zl*}<aPvFA#V4(*F2mVhOVVIx-JTIm4et9b|5>LovOy6E3@h4%XFd92rDuVGhZAy z#9bOlanCdvO01ioy*DdFa0H@2EjVnj3sr)Cn3DnKa;f!V>qVG@hlf#oS!@9A5-M$n z2-)F|l9kDwvgJw081gP>o&xTkg`i$oZAK3R17q!F^ttEZ@)E&}gt_curKvA#uE6LH zb8if31scIYQ!E;Lz6>QJ3M>W$+oA0tRW$J3Dj(Kv)&*6_y|e1_bPe67R2cIW@lKlz zVh?i6jEmk`f@deRPm^YOU`U`73<~@}j$;ha)KIDz{fvXmSnzyU)q}1kJi#t<0gQNtjxhkE8T`VCJUni}sBbpj zcF!;kT?g1t=>OKt{_X?@mYK)Q1h1*gBg`yj2J;XzpLv*>%*)j}W_|tRSFatUgr;Yah#x70B{s1+xyY_Otw17*_bbQ}5wHP#3_OB(m}9Fm?nx zi;Z*dJX3vC9mS4eGt^1!Ty-Wpn;p(R40YM+44`p*0|H2%l(l+jKd=-5g+XckA%nJvt6IgG=BRaJT3hxSl#MT|Sq_%|>lq_F3G! zXq38m7wka$+2mbxAILlOw|EPXDOQJ;d0Y6)Lvy?h-d)};(A?zRL8J5T&sfPeKuc^0|0xWRwM00^VTk#Qi@3T*t8(+w(Ym| zNWE<;=>@b7J^@Mh+Wet~+AVMP2A|(Sw^!z6hqwgvk_E^DWzb%>&AvyrG3gJyr+t^q z+wKkAcKc4dk8G>`=H%L>t9^>;4wS2tw3~x= z15ai0Z4R-#UA`4$sk}{oUfwG2ly7(3osr3J&veLlIJP+az(beZ(;<3c{%vUrh@Tf)sPqx0@@RU2(KG!wZ3D311b8?_xgy^2d zg{1{dFFYGB%rC4gEG+mz3m4p7+PWOtyJb0~HyCO+;XrTSigE>Fz1Q4(wYL{I)9RH~ zxcB-}`;PRPSNr=|>zkGfeef1#{RS%SQn_?TnRq6AR$)c55LE>fTqqkr!&4Wq`RZmhflXsG*$g(Gea>y+YWa^4%DD@(3gf^H54c4e z!U^WAfMywRQM0C5)hualYwl=nYSuLvuyDaGO*m((*2Qgr6_*?2*1I$=Xyyh&ZUv7h zg*P+Y5M3njLAp>~m@YyW3_M2Xr}NkGxbTF?<#Pjc;ci=3yG;;6-RIz|3xM3~uMgJm zgVIm$3p5ZgMDNAl&3D=D*9U>@f?fRGzzMkR1`L#Y0loQq+;y84LNq5j1@nRnhI58a z!-Aj-G<|?7v_@eN8Dzkz4gChWL276*uuKBOia=sm6)XyPh8{y3YS(H|8kQhmY7Mi3 zIYEa(Z1CaV5S%w4292Q`EP7EZ4-dY(ggt^h)@0(CZnn~ZyVbe@al$aIwl;!9H!)2| zP0OHZF$qn4(^BhN>w2q?o@-iZT^8_61e3sY4(wV1=OCh*q5LwiP1BZT@tSy1JY~6N zv4f3Myeb~I%!?hs-w@A=ot8QA4dAa^uA|uvo)E?JmPyMj=-^vQlrBKc65tF-3#cZ- zHY7a=*$Hy4G|HA>3$|U6>ZRefAX%6#&UO)^`m*$ZE!q}u!`KYcNYpacmShXD#Q=Xv znuu!PN$Imv=3@_*VPt#l{*aCK0s7g)WpGmEVL*4=eL-_Twjbyoz!1=V4tpKujs1?@ zjtlZV4#=hQeL&&;iQL!GE#KwvK_!=lsn9~+VJHTibcM!AQ>Z}-==SekU07d$TYMp= zC$`6Bcd%#Mau}LfF0EZ$TkM19OU4kxRl~k_`lIee=k3-zus@3ylQh{D0Aq8(0hNmi zzHrXAX`^+a`aNh|Za{CA-ed-Wi37VtRuY`)2#%`-i~?e37*_A9)C?30z3Lg47#A5~ zDg&c|nFjVW=BA~KCbO{aXGsmzG{WeF?mlBU+u=M$aiTeqoCEGi7jxUV60QhNQH(B@ z(+cHY{yrGde!u~DJl<^;nbz;!_v^6dR;fjbg7a_J**^CuR6p^ zg%J#@22@8_L#m4^ttyR$V;yFtuyin@O=v||O~4kbrRwuAz9x1HsyWAQQ@5)5?ltAG zn}HLlJJb?2k1b@2*e&XIHP>D1@|4I)g;m(X>tx^x}<*e$9_()Dn$x@29ZuALjN z>jvviz|SC@9}DXr#&^ll!1)3f1Q?|c*T?An_+g+6pgw>fjM{|&J%Dm>LfmD9 zKGMC9a2o(;Fl-3AO_vN)=+12s!jlVdcLg^Evj(eS4EXKBYld;dEx`_`n>N@{yUT{_ zhEc;X@IwZt!D1K$Zky0%xM3JETr^xU=s?~I_E!xi!)<{cB!}S+#Dm#j1RgQ~N?n`_ zwum|)y~YjEt2il4a*Me7VDbD)4FQ8W4SB7Bfc%Z zW!Y-o5O0;hZ3S8Cu4Tz`+j3L9&AMW_CEf`=e-Vz@#-%ptgf!oVvt`>-Y> z8 z53`3t83h<=KPZcYx@cJ}nz5qo!4B6LFpeN7LmYlU{T&A!0Z{hI!-0l50)gtCjfz31 z!FkCU3KClZZ+e|N=VhnS$pU`J3GZCoPhElTXQB&pHy3U#++GMr^Hv1V?aQ!sD+oLZ z!EUZvR*h@yb$HLfI1D-E2*b!=GB2spSs8G8CG7KTF}n>;S_a2u9i+|TWO6WYI$Y2T zu^hpVhlrbpz27PH63rPrVPEX9I!A2?jDw@N0waoqK5>0;?o{wR!pu-*gXc_E7AptJ zcD59}%hVm{Y3@`9gYOW)Y)&pGpOeEW;N+n_Z}!;F?c*X`6<5hk(C6qjbxHa}{XsYh zQRr!i=Ew5m_%XmI@Z(X5A3^C**GMKzY zyG56P_lAhrW!-%*E~cb6qy*cH)G2MS%}O28Ytm`yb!mcZ$do9Hhy9C_ML7E9CZ`!@ z3sO%M%s3TRGZ$v~IjCX1lJ$w`sP+l>3ik;2i1v!EnC7G^IgSyoy3ELg6@v4t%5%5F z-d4*v_t>lm|y8vbGJZLiQgSFq|9&?i-ozciJF|t%_Cgd@87rT=!M=e9O z1Wp6zfc7ZrTgT1S4RAGFEf>pALPwUOPv&D`Pb2wDu&a=jgnsB+?FTw9rP-2X$uQ#> zJ6F*?*8@-H*51Z-AC(zKmI0Wf%0@@$YMIZvqB5y2gKWO1bLrvD6pXuD-K$ord(^#b z1xOdv7uenGK6Sskhphtni;x8I5UY*Q(mCWrY zrfAtPqej3;Emlk8Fo644z|}EyO**=csXMAG(81G@j-$(ia)`^;HA2bK;dS}CK`u>4 z012MNbUd{DqQ6u=oEE@C`V{^VST7tu6)3C%=+gK&Jztj&@?n<+;9-55J{`(U2oUuwl4m2o&ChwGI((H9~fW8jLU!Xqa%#5Cr9_VcD?VxDFPyJ_AC#Eyiin4bz0lPc&+pGnq|J(>2p1#PY0Z3h0Pw-efU3OvAu00Qy6$TsQ5v zT21?bvw_A}G-k3x37=(A3K`v9!n2S&sxa1l!1)3OSp%)xA)8(``J;6^fZuENbKAkm zhm0t&v4Qe!OdHQ8v@vXrHaf@)kR4dIMQO8*Yij}-p6XHR;^OUz_7qtXGYjs!=vBi;eK?MQOOIg%X*9Z`-%kg<+fpu^5{3iyNr*sS0K zg=__}n!a#n!Nu=b-nk69w-=t_Aq$Q`sdkmC>3y(web!YKl$YV{^Co063RuG`wYse_ z3SIFmMiZ06Y-GA>`_MC$2|F8X&1U2lYl znsfzrXjR%`YlVGTlBU^HVbu@IaP}jzL$YP41Idx%IOI5Dw>SlgtIobT<=hd+U0B(C z29HT#T~!^0`JLl z3FC#kVAh+Egs#N_Q5cLPTohrAvc_1wC0>$HQM5G@W_})xK(S3`TbFj)+HD(BiLK4n zVZ+HX>{460EYqGQ%amo=Q)L;D`!XD94xA(1k?L@HPk>Jbp37bkPnwm{)gYxy*Tzw! z^D&`21=fJ?~zbVXh1!EnlAxagYZqku2O}#0vMiXCL9-?O1e&yKHip z>n+&DELpZ)Ezfia6)>Yd)929+{yTLk!e!HL*gqEpxt}E9odk?xfPEE4UI6_Z7H)4n zB0L0tA{=fQ+iht!tj!+PD9q8Q9%LKTL+F@goE&Yowu2+(v~#k+H{2Lpxo(VW;f`}h zxT9Q~dyS6r@%#dJB=0w-3e$x+*tLDeETCyZUt^{)12`9~npPl^V?y zs}-;>XL<(@t=kwLP4Ej*>%%KJZ$m zc7P+$PI6fw*|{oCBa{QWDQ8r==9PS>lOifY4ukX=mQClas zfxpP5@rQH-{dF#jzrda6&T*N1y^hVl241>RtIzxVoXZw6^el*(Mtvin&kry*>*@Mj zp&!I3kI&`vp~fG0CX~&5j{Y2<3mkkN(nVX%zEB$>!HM=s_5znF+G)OP z!iu&5?*q73;x9=Q?E%i$eHN2oj4lY5^w@9^^GVijIM0WyN6`3B0U8FDSZkEq{vw*$ z4oJ4Nr&)VZK17miJ#4)z-7iV7CR(?)2TMXF7)dJHzTc*@>1;=3MzHj1hrHH41RP%0 zXWI#q!M4492b6kSlRaN{1V(bnMwe;8q5w`CO{TP|ZHR5a=G~qr+Xi;|_Ccs?fI0@C z7I=az4?Urqb0FAt@?1OJ!Lc_&JxivQv+Oi`Gw`{NO^YU31K4MS#DucZeiSGd>Oq#} zI0ocwJ6pz)G3-1U-Hx{x*fnylJ>N0r9D>gtG-yQtv^inK@&@4W4v}IMq&!D~qfK#1 z-m17Lmne=p2Hl^SHv4qZL3ma`zVOz0+Sxxh0WIMc?Y287onpnfbILh1r=8P*m1<56 zbYM<1mx#V4!uBNhB=yAf?p}`V-MTp1t6drE&FoY6nb+Witz88QpL;gO7J*tv0 z#Y_>i4aVdGF3X|1u4-aUsNnqp;5F5hYDUFj*;P)}G{~QWjeU(h!=6{qs#nxg>{aM< zl)VJh&Yn}>P*1Rz)syT?oDuc{=%&?IVU9Q0PW7UCj6Dwg3}_wdYd~k&(`+aEy81fX z%C@i_Q1|b^#*u3!S_@~6)2eOP%CueDYp`k^T9I~!a~|@fLTd)OQ#-*K=ZLjefQNhy z^fKTL&J<^iW8g@&qZ}h=nlsNa=q5RB+F_2BGXnKa&MfCT$IfwZu5y;$_tQTg%dl>1 z^E&q?cT4k>?haR|7xK3^U(t=~?s7+TS9KFQyKaqpi@UA4l|QE2;O=ZTyEEi%ZVP`E zJYUvXbw-^@XVJCjcQnJ!>Be=Fx|M(1=jKQ*@a6h0zJf2(_v+z^fbY^K7?pYjND@Gm zzFjZlA2oLB<@`3N)#$tQ=lSRLZF;d@%J0)_^&NbfzC+)`@8*m6?fg!DKeU1zu9xsz z^=kbEeUBbNH7@NJArUg5M5qy}g>cUR<{7h$=|+~ZUDyH=Je3(6MPgwCSZReSVSy0~ z96a#}>BeMZr|^Q126Be6TPPDI0hcRc8qjs`0$A2PC;L*LcKu z$Ve~>guOzMFh_(pwt-$KR0unSQX$URCp>J-H)b0H%>mHzpFxT-4r=ltUt!Im=0tOj z^{6Pte8h|wg_{qX519#~AakCG4)qP9WU!1fGetOak~z)H6LCce=6KK@G)I^jU_lc} z^%#&P)?jmis7aIuXOSghi$ct)=3HyEIn2xv#h4?(0zUbG{XYjBnw{}hp;c^cvL2Fj zSd%6B;HkhGD@lj|gZg-h*_I?p zkVvfpYct3&18YG0IqP8w8zdI0fw!ZQgOVGzRx2N5np^kTxEzo_hHZABPMcqQv*?;_ z4`gl^__Qy8_Nr~hX0c7%_P1ZR#iFxE&&PN?%LbHTZimCP^s*k zy~QrGUyyZy)M`IqZjnjt0ad4n#vHU>X|BGBmC*?aQ_ad9SR~-X~May6keh!Y)KdByh|*Z#a7ueF|@Mo_2J+ zF8_J%s1k`oee^N4vz?1#`a!^G5g=^+S5SzMns+clGRot3r#g z(P$M83y;D$2xd7tkI?oI^b{;O&9Ga$7k4f0Uxqggs@>oTdSysq1bh|`{d{naC1Bl9 z&8pVbi|kwKo9YeqZMe%eVVR@S_Gxu6Quxfpf$u;$YOPW`pk3!|Y3kSZYVUG1+BJ?= zdy{jUGo&5VBHC5X3g-@3ehzcG6&Sm3^WJ8sZUMM}W}oJH-M(f&bSz7t+0(qP+Ygd| z^Q>-Bx2n6LyAE3T#z?n}mY?|=;;Z;tKI}7~5mrFWzXVhV65I|zFY5r()7%LBd59IMNG?LGEVE2RH#dN; z6LbtHU62R+)Md?<9v8)dj2G=5PZIb??}2t3X!&z11o@++_Y_=+3Px^m32|O ztqHzW0o>5t)WK7o-lV_CzXZEr;GaWp%_;EF4eN42)Njony=Ch}#~IU|*z1J;WXw)x z2UE^$hj@ftfOuS0wXq~56t&)0B2vJE}ElF-?`0ZKzm0QH5fg3aPYvO&tSk{LUU+yO!MJpOmhhMal!UMZ1ch9 zh`}v`hnf?cccFe#ntcbo2jiN<2LnNlY>plD8a&V(I=Fu@syS#dxcRm&sd<7Q(Y$YP z@8C9<1z<4RGRW<9)AzrkPW?6htRBvmew2S5qF@;K3H^1TX8p3>=sulG`Wv8`(_8s7 zd^>Pc`g#2{l;e7f-m1T*p9CIGGk=)Bs2|Z!@yF42cD|E;l|RjQ=pB3$Xs+`Ar*T$z!8l|TfTTC}7>!1i z(J4fX)56=rMIpqfa78GDI-SvA)EX}V2T$w97UM-@xAB^A4J9lIB7oogn zUA9`F9JG#Gr>&QOo3suAg}GTx)<(&7s{w>je!T>+#jRxzK)o5*y2qm-D za}usZZKZ>Lz$yT0wW`3HBe7Za)+WiYl^`*RCahg%9qM<+%9PlxG|8xyC%J50LUpeG zT)>tnM_eTzynGJ3$Gykltc-gC4H-WwiE7_A9s#`9c+hxUdj#bCFp##49{`%#?l&GY zez<+tcx1cJc<6Xy`;PIH_L%m)bFv88Ew-4BD_7VF4 zdh^)r2D?di74#4r_F=nGb_4k9cB@^7>c;JpcD>AGzhqb2b+XIQX4-y5rm@f3$Lv#f z1L|V}EUy8YLAoTf*az)%cCCHJJ_Pb*&|k3+%CxeJ_KP5E03CLx-E3E*H-W3)&!HQ1 za>pv%a4-h>yxb|*I<7db$$K3Gj#0Y~ZLt8gR>z8bU9JFm8KkQYi{m1s1r=I<$uaCO z12-q1m1`XR!1Xyyjy3sZ$C7*ztcO6;<+$MJaTpzgjvJs+g2n*&IUrw>Ao>(LXZsZ^ zPPkiU)e7%f_(cTZ*8t&r*4ZWJUEuVJ9kaVJS8EwjtcA%&~XYj(q_1@4w}-FZ=Q z)2UJD6x(N4ou1%f8=wmgc2CbGbtiXkO0nHjbC5IVCg&2mN9M-o;z2(OnoUUTjsw{` zXPdLTb$*Nc7K7n-$1Dae?uRlRz2!HpeHYVu1{48{xSo(j|HZwFW9~MoV6$ftvkdR> zmV*|P;3*(<`M`4EatLSw05?Iu61+U!YwsOg*_1CrsaqLZnF4zk*jJ}kv->8|Cwa)- zYlD4bYqqs!c#?q8D3{h3))&{8Q3*a5ZNTRZ#(B8cL*XuTXk9jO|BJov>`H9;`kaqu z&e=BSoO6!f#f%7oAXy~aZJ?n+K>>jV1SIERTJt+c``-J1!pt)-=6Nw|_F8+_u3h0& z?NoIR-o6@w;upkU>0ijHz|61r6XRVLoZ;^N?%~e#U_LcJJU&=XO{W%QikHXCV;b?8 zdQ3jDc-hBkVV`5bF(d4EnBi5Xvk2+2wrA_JowQ#Twk;3prFd%ykIGwOORCVWWKXc4 zM`@+DVIBCbibl{EJn<9QUvd4*{c=7g595X+B<~{rn|7)Xs~*ry(FU>ZX^eaO6*>;$ ztg+r%?jG;V$m%8_>JPsktf#hz$5T7j{7UAJLC26|7||GiialA*qECsZ-{cA%&rXyT z!CUFLycO2-D!VT6MnW6XgvnFv;{?_}bzmM2@048Ih-1|8cxF9&dUicOhn?xjZug~h z52rn)1b3ZT8kZNvs)sdmv=OZHP8vfE*%WIZMLkcKtNXxi-+$%na&$yX4l9>Ml=f36 zp5l6V0wo~VnrF?iqUYnsBab)cNI#{Xl24f@&$Ija_1ue98>E%+U|+Z`=7A5ycjbFB ztfPb4bGdmbg4WWPrPpQGozQa-PoJlaX~waF$Z_JhKo>ub9>=gl+g%>Zi8Jc=spHg5 zK6zG{z>2q^1qEiqts5L7bZ_TUwWr)Gplp-%3`t>w%a6;PE7ktR{_CX-&&)#peklhh z2A%_z`!APg`-K$AzI0!KIst9hE!P#-wUqkn3Q8rk)&Q)#uBOypH&R-!n{jh&1(riv zNofcDMrlI5P+d&vq%=^fuFEJbl*a24N+~5@U430cX`^&p*IZYjPdz1c(@tr+t^?me zDWZJ4E~hkK7pOm<`ybI!>MAvPGXpJ^t9wBQsCnoeze(RrP^YLbH;dF^>L7K9x)Q_7UwC%&Y38+B(->|OPg8gB&))$4lE-mV+a_326(-*nmI%yBNGn9;2(V$|yL5kn)o8eO^W z9U^qIbiXyO-s@>tc1V23eWA9#)+$d)Lj%H59UvcTKG4yGHc*#;RbI zvpf&^m>=gcncdzHrIl#=uRt!Rl@&ToJ-i{peGmRq&uOVCcp5zooF-2zO$8=mj_AY7 zY2x(#!F5_@$~SpW(+}y>22&&2o=!_l+0)mD;6v!){WSKFeTd`Pucrl^@Pqf^8NC0& zcbY+&InCn`bG$}>eC@;TL}3ez{!^J$K$ z2&0P0Rm4wI=v`zgjal?{lPou)mcld<<>qcpEqjlwaR!+)*CXLU-ML-S=}n&HCQXGE!F|68WIuj z8^%^zmEaY;8f&Yy-&$;~wVv_Xtd~3~ugWUn6^ioEI1L>P&?Vu7gXuUC&Ny~(V$C_&4u)evxFxK2 z9}72xQ;;1yc7#U`zGK0$i5lM99W=)}M&j#$V^KISq>%ioW680Mb{3H5;5b%=0>`HC z0BzHbm!}m-mxVOpp>R#O=a_d;g$IsZ;l6MV?T3yn$E;&dc;Yy9tT`y?xgxZk?K`qK z-|49RdsuW7xU1Zbvr2c1+jUm%#^2Jq!?+U^xjmqD?#OfeEOz$Io$u~+2O)8uHK9+N zyW8F1E_J)lp3kCZ0mv)d+vNNu?k=|%b^lq9+kV#Qetl|p+obrChEc!I3f)g-|e>vNv( z<@xzJ^IYI7^1YuI`U)gv5_l!>Tf%*FUeOuriS@?%VuLZ<`NAEs1x0^sIM$6C0Ue1^Wp`ps zIh^Q9v?uU3mFP_jB>EFWi8j?~@Nn+&_}WXq<>w6WCzYSP zje1khDPL+ug&dN0rSUstCZVEdn3>~DGShT1aIupe&*HmZR-65mO_KK`VutVgxmQHl zi4(sI=XWo#3w$@F2izw#t6S9#>N@qeuaj{XrzHW~WZ9_Rq1LNw)LYahwAZTls4ZXp zum%l&2>>D%zD`%f4eAUUi*`!m(%3YX<^=T<+Np+v@>s(`Kjv3oCOMKAO~8_FS+}CA zVZdJ*lRA9i)~)GkQ5)CI>c(^nkic@fN=7wf75u1fLN|wUUbn8BMp=cP{~jh-Rb-a0 zF;t*zHk28f3?r-(Lz}72FwVlw#?T0PE3g{)4TzapW2_cKrJ>Z&hI%b2Yal6ZGbl?q zrJMm%HL_%jsn^tOs^D~+I!(~3sSL6{aDSlP)M_f{beMX+WR++qp#L9zkTZd%7tT2NoMYIr-~Z+SD;2j04M%DQNswN6@p@$PvB zo}OpsX?Y81zeC?DJZ}yB9Pkg!le`T1;8aM+#14f+f*MzN?vOi#;LaQzvV~}sIz*80 zP-l@cC2DNpkh|YK?H+ZHyAx-F?nz__tkFG&a>kuL8+K2DOOlzQ&pqHyo%OnBAsHe2 zmHBFs1#mm{)%(gNrM?PZrLV--AZe5o`xU@>xT?MT6)kw-A z{pPEeH2Io+-^f`!(vY-0*o)Zi4*I0eQn$1dJOKfzU+R_O6bp6)yC4gKCtykb8iv=% z7v%5ZMfnT(YnB)}=A;i&Q!hP zd0G$O2HTeqd#)YUVPmkgbTDOS6o%TULeMjXJ;Ib)_#6W*~*BcS7^ zee0g}5KpIA53B;=C7%DoAryXh%)yHD?krZ);%gZ`&0s@nlqY0BLnwOpy>9X;{#nYqlwYL z*wr2CzA+jZ`??{+j*g0!KhSF!M1&6*CQU2Q0Z z93r8eY{QPN49L`uYsU+;d?vhcERvB!jC?&?aBsRd+-s1mx|iI`?iKgCdy8!E^0oUq zd`*%zUyrZb*9qJ72M2;tDc+c*eL>td`6j%2OEICGOiUymli}2=%A5A2pVL3~ zE;KESMb@a{a_`{s9oECU;g`k6uSc)Pu7|IODI;HgMzl`A0&MD-dPqGAZcxpkj-X^w zPhhoE>bQCswNH@KRJ5NOwdO`6q1|b&VH+8Z0j=vaT8$Fc`=QZ8cBQ%1{L)+!Hl!Ie z-!+QABIi_hq~oIhu}+{9>S#K?j)Q;tfv4+Yz>|SEU(iYiGIb&yOV`QJV3t-!JK6TR zhGoNqVGQ;f2hIWK4bz4-)`DTyFooI*Ytpd9T4l``Rt#;7W!92m(Xh_?9QilhBrOX4 znYv-)1G08#+BUUv_Dy@HHck(uy&Q_EnX_S9GwqmGO@DDCHAJ4_}^8%=Ocy7{Xemc&D zVj(e7k2rlhlaRbjcg@i_9VLHqu+D?gMv@xYw5}-beidokKH;h^fY7@bvbXA^`#-*ddVT>9B zP6iXw@!$|Re5HvLMiyc@5!|~HMWEY?g2xlW?nWNm%f z^a!?-TV+kuryK%6Hm>hGx?4{o2#*>CumXG0He)@_K@dA})1S zJ*}Qmf3|#5lg3Q0`I>f#XI#;K{1pS;fBAAhqmLoe^)h-Ok?V+Y`>Zv?s$rM4_qDr0 z&H(2aJ48&F4!&eWEyz<@Lp&wcO~Ae5*qtXHh4l!SgN^nTd*qq7uDacuBiBV?JvbDk zW~Q#E$yLv*`BVXw7{Mbc!D(n(nws_#YqgN8f7IOkwQdDgILsKqT8~(l;3pa5j4Pc= zH^vxc3^0D^zU!2_3AA4520@2__{%xgmSNjKXRRAH4ZDUN!v-SskVVB#xTZ1AD2Hhp zhNju3an7k}f^%XT;*4-O*e}b(Aa_m7f$V~Pez!(=abAp<=B0Rg>o4n-^`}*BP4KkV z8|$t0+M48rc~QjB<(E$I)!p%3XmeZ$Ee;j-{lluUTHzr-gm%ZH!$d~ViJRl*x!G=( zo9QkT=Zj0krQ%a}k(l8w7Au8ZcY*lx`Qy;+m~YNE;hXhM`MM=Dq^5h|RlUGz-y~Tl z`evl_WQ3%pOTmTUBFSf^pR-gVQnut(ptuXlt0SB8ibxG=Wu)Xlu^gi)rVu6Nk?F5k z2`Oz!d>2zCQX48{i*!j}IG2&vE*O;5X} z?HjIjQ=}b^S$ohtes?m>K;JymG$?MC)-tik&36mjLNZne8SbT6buGCj%$S(QZ7G>D z>@BFL$(ayI90RH2-_T*XcpiJNi_9jBWL$`-Mw(4?Pcy)4?r1l<8FI`lWA1A#lXYNV z{KJn0rW4j2$7s#)vV`qmrz>HFxL>m1>w{)jf-h3s>?3oD`@KoZvU*8bak&=V$6T7no4*r@W?@2mQM{@AFVIEd_LZnc@I{T^{23i{{cM| z@ZWegYa!oi&E>!H^7sy`+uDQc3ti}2C6>6) zVbxl3wfM|kDHemT`SRxt*lY{9>09)z`c`~PzCp>5WI(d)Tl1|$J`COG$adfdZ_>5k zhcs74Jm+1y9b6B-O1FZm!Oh?X>Dvtvd{&ol%kkgK195YL->k(5?hyHBCAJEFKCzTo zNGvAo@MZk!rSzvyajQ(LGMQ{<@Zw?bH!P%pww%z3X>ST1d``vpMa{Ejnbg11w7@Cm z=gD@1>#^m8`78f!saMtO>P_{AdQB}s|4(qxVz7Ns;{(OFJCeF+Pqc_8tO;rSnt&#* zasK5IUxWU~I-ax3*kSzEnRO4a{}w}FSY=ps4xLM9*O_$N44dvzx59YR?J=CX4Tc4M zHW_Oe_3uHzLIjer#x`&aJaBvi*C2#c1pbt4`PWfDOp6>X_OAl|0$!NDgTh};KTX#r zK5L0{X}U2jbJV6QQvUbo5HuFER>2D*j#_@iYCv8HTD?}E)o*p7t&;SQ3eXb12lZ-j zHGH@A*&4N$@yq#P>l35|#2i{-!V$2h9Jj)>BM$%hB@8?C!hj>{NIF8O(d?bt?a7d6-&bTzS& zSV_z%*AnZA&BUy7UOA`y4bOD~9i#{2w}}+do0ECTSV(W2y_QmU)H14^x~;|;ph;`o zv}c-^=Ak7tDNT~}La*+C5zzT{KAl^)&!95sr1u;%Ji2Ecjd8>{WKbA#c!$(*W)Q(! z#D+80xj|x(K_*5W*$URbHR(;dzq}x2t%FVC)+DT05AGX3@nuh;Czb`_=9nw+8$%v^^mykujmgQW+!I73qu|K!1C& zBL)741gbQ4&&zN#luIAYPg7uhjr_;GS;`D$`s+K?F0_DmII4n*zXV6Ly=dMwuh2q( z79?XYt9e6>Luvr)*Cllc9g7jx5u=z42IOqU3Fs*!rVHvqx~MKfwh`^0aAEjvP~pi+ z!#SxNLb}1h{m*o7GMU!F!IGdx(;DZ&v_jT%ZE5R^^~2iAe}k4@tr=_9+RV?fH9>Rj z{5F0I%J(n*l|ok~K;&YQ-V2MJMa~EK_aEql59^?f)a1R5vrUbKZKq?VLx^dqbuO!ik-x6VjHJ$ zCY6Qean|jXT+Kn#d+H0Sin>qgI!7C(eP|-2cDamhdM2M{$OTR{FR zJ-eJo(+C+E-6=jjEQxjx$!*@^_P-}QJ{4)GBsKCpCw+5p@$+|cE zU_BT#27|$5&>7T*YiJVpOOo3DTB+-cvzy$e1I~@%w`q@KHPJW@(-FsMqH`#mW6mKw zkqX=gKK(V4m<>AS*I=*pwqjd_t;p5~Ym|N2qQusVTD7gpR&J}bmD+v_>ug>8+OO8n z(Vw&fw(<&_K|R7M&>E***x>x;Y;ryc>zuWa;5T%kO<3=A2wR+Os5d&Rola7>BX~_E z+S|!q1osIK?q1m53}5dfJ$yiH1#fV>g%*^ba1XAVKTNjwgAR&^Ko=#CZlik?oawKg z$Z$RpJO}5UZ(btyElU(Wp^xXg@YTvzByu0$wBYo8Vbc z5tNZ$RxSGxl%P$5+GVgxb{-T5zXz4U3)F?dt6&Ar2UYNAP#&z2Rm!A6QBWORkP!3y z4SnQE&=VPoFy#Z0{s>Dx8aaXQjzxwe$MTU#Z-gPI%a3A%WWRBeQevOuSqi3t3Z51_ zjGZWs6$}MiL9{Hx@2T+3!vy}p=mZ7al5&NNg$PNXlCC7t?**~^mikD&r(VI~{-oMg z5v5+GQ{Ae9=|CDeD#OpbWtuPWR(>%--uX8#Zuaqh51&VF(H3b7NRN-h|BJOH+ETJs zs;?$}yizY>l!L3#SAF?>nf?+!Z8co8?1n3rjr3n)Ciskr0gv>VJf`1}GQpd(&;R0| zjqtX9{x{nIzri*LZzSMZ*yHSUb~}ASzp(2cUSlJzZ3i6_JKVof_H5&3@4NPWhsA#Q z)+HN~OK?r(NnS5&mVJ{o%IZ*SASJ}yY`F%OJcfqpz@x;fa!r|=c0+eL(9C;gH>-vw zaJxh%JXHUn;#8(pXcM$DZI+g#z0fkWa&4L>VVpBs_1_uw`WC%{QKxU#H|pgKC8I$v zW_;8CV5k_Ej0;AszDD1qmom;6vVUZxh~XK!;BdU48kT{jXFag)S+~%j!|()|%b;bs z4PnDCmeUY01PwZt&tPP!S$8at;fCc$51f7^g(Xcf6N{5IrA#4H+H}eZL$`iXzvKJ_ z$`j5DD4!$b1WBoY6EU$l8B^4hL_Kceasnn1=O>HDIfHHfz%akV)@AFl4Zt>Swieqc z?9y%Px3$}vA!z~<&}(b8b=t%IO9wS1Hw6HSQrszgu~7uXFvLnJ4c)o&Uf@# zamIv`&MC;ofCRij`UxKQw0K3lAa=n!X2px*h^|5h(*-+awqUQUP4*BRlo{c{h$NEYO+7Ln5y+P! zr*e*bDzX@vi3sI9WSa@(6|Q_PvJm0RXCu>OmLbORV>|_4ajJk10#9Qs!~r)ZRPbWV z7$e4xoy52bPK=h=RBkBg$TN(@abkcjH>jC=yOS3An(bQWVY_sx9Pj|9r|lVr@kF|I*N?(VahR&*hX!W{3-shZOk@g zn?UsD;NLf&=C2}>*2Pix2K@d|;_%shzkRNtGwAs8G7-E)pg4;aq_ZkvMzeoSy`olY z-^iO`m9`g8xM9Q$Jzpn+g_ShK4GDu8SuM|;Z_YL2PRF0HjoT(|v-}w{&&S*e#MGuZ z?sod9k`?&pazvyM$Ha;=1v3#!#+BOr8tpr6K>w4`ukXXmYG~yZ`*=5`3~9q7D`T*- z-V9m8i@}EHoO2||VFh>+0aLbV=%X02acg zJI-xq0m?t{ioGLKl9b>)WHy?XP01!?ld>7)qxFbHelC~BScrN8_Eftn19k?j<8LRI z_;Su7zX&rL_YW`c_aDfXBlRM_`Yv5B!T08`7eQAj3)gFuRm$@9GU<Nw5n%aO;OI=6LTPg#6pdV26S5Kl&K%2IhUPAAHZkn{M+CFU$xKjF% zwu0WTZP&JtHYqjtY76KC+D2`cwuoL%@77k+E9v+hLR$vfsjZ?H(g(?&pK~G)L$^-G zJ;T5l)ms^6#yF|>N5+_bL_eu_Fzk#Hc+-@ALT@Ck@W8O3v;lvU^*{6cDXWYw*rm`| z3=5S2Ym61fGL)6ZTH_PznN=!O3f{@`{$KR zHY3CuOnGLH1r{g0~u}b>=G3nk*bNqxQsbG3rTe;;-p_ zmi-!d38L8CU~V*5i&&CJ^tq=FYu$`#y$?2OGVekwH6pfTT_%@v64w0(Dlx*ts5AbA z?rKFx&O&J56Kwk$&W^24WZyqgk7#Sjxo1iL^1*k!jAw?Q^r0D2)@1x-;2F*47Obw-ybo&~0QYPZf?^H3DC5wC_~Hkwk-$ zU<^9iiEKkNO6WxuQ-JQ_wB{yw&`nV~oEBw%?{6UTHe?R$wb|H)=jC3MU48DL{HpTG zxnFfvLDsjgcdpm|`fYdXdJE&WDeKp(*DKc>*PE2h>(Q^+;;JoFj+&>&4TXB9wozGX zsro|grYh7<=u4oMsAXt7RXeDURH52M^-zC9Zla#6`D&H=nfgSvQ^o24L!`D+y=Y;h zw_L3R{m-D6-cIkQ_t0mw^V$wNZiQG$BfT43AANwntzAOBfxe|}p*PX%=u@a|YUi|z z+C6ZC^bKt%eObG!UC^#**CD~pNxP$6Be`+VX>Aw1m0nM8rhlUk(I>Tg`ZmmrlR}&O zlPLcQ6#WaVx(J)@=r=%FKq_z(c&K02uj@JbcLrU*s}C~R`gurcz&A#kF{e*55{xY4 zNFQZn7_-`T^FCVe6#Xk>O~0l8U@YhvkR0o|`Zy!PIMp-t2l{P&iVNiSTXo|hw+{D!5TJB85iJ*y}%J5&NKFsan|_4%CIJlqsDe) znAKx!K}(vIWepnpj0x79G0N&Ut{TT79WzES*DEm2YBhElr;UroTy~pr$T(q4L5dUK zIAfeAXC`X@7Lw>QZtgZ4IUD8!Gu3>@88+{jN6brR2WQS~L(I*aJK(dsK*SVh%e-Kw znWxP^5FZS)n=@%%H9vE1IkRTEdCc5zoUd02hMNKrrE?< zG!H_i<8+$0%}3?|vz@~<&p+&*&v9{9%tPiibFX@{8Sm(GNeK?$ZqwU-VjO-&unBEcKFxN(SK8<{IVt1W%w&o0N*F-^`>Xz0W7zI&$F^>f zo;(}mB&9j8oXsMUQ{`+EojY4Z45!+8?3AI6PPR*&Kb#j%p_AieqkiiA?$kNYoUI~! z`$hd4*dgLNnNF#*2QtL1s8hsuvLJ5~-P#&O3UJ>>=J3v za_RgDO2DtL^0W3go%76lhCG9wUe77cC7O8Av*0YDgx41n|USTbrlO)8JY2w0r73wVo=pFvSBNhL|nx_6&Ot#mk;`&k^Qs@{D<= zJl{Mk9u{gR;tCH(JnL!njCyK3ot_pCU3@Ga_iT7pJu_dke?H@rRzgMq4Lms@IbaBs|bAr8$+33eyA$+ z5_}87zVcM?P^Oe`k|T&w`?4Q$b_9_a*^N*mrxAXH7rByO;$(+6M+A}M$Ua&rk%I_5 z!iwxgXpxi1ceFAfRmqtVh5SN(7vrFYQ$m58W9(P#GIkTgeKIChJj8V1u41N`KBiD8 z6-LyqV-kf-aS{6&`+?eh%nrv`H03iCE4Mv@lzgEhfL%eb0)s)mJ{8 zkHa{P_e){8;&nLqWHdXZkL zztUgm6_AuLZ}jJ6@9%nnzL;6SRH61mFVq(@^O%3;tYGgM%h}MO@yJ-hE@E#Q4~+-L zT_ep%H!_S&WVvt*7P?2X`@>*nDCR zaJc3$M`-4oV;n!EIET#~a|9e4J592avza$U-is z#W^H0IHS&CQOFr~8l4j&H{^Dw$7w7JG!^U5{AY@8@~W{*jY<{Cu%gGUgwG z{|xxM{Zn80LW%6s?jQD#_`Cd_{&7fq{T=>3l#~88|Ac?kFPF&B2azNh^j}8^?h{%< zC$f%EYp5qQ6lzD#m<}DwMnhepvCv>>BGegT%UH7R&}67NG#;WMSM-PaLc^i95EJ~V ztT!|g;>ZRt?i1)ThU|MpMb3W{xs0g6okuPrzamp1c|;@M^N1r?5oJUcIg5xQTC_?d zl89RV1KbUnX@1HT5e;hAm<^fWQelZ*C|uyK6z-Tg_A}y*J)-tq;RJn(*<+rVBlbJ? zLqR-WmAF7A_>nkPGL)Bz@8Ffdyi{Q-H-)ba%KTJTnNg;d1*zI}HDb9cos+6b7o{q} zXVb=XI&D^E(l4kDcdFgnxC{?pylST z*u=A(^CIF&d9GX+PEhBfD94p{W}K6vX~^H5N$0F+MwE4aINzLeq8BpWewwGqF>=qP z=K?xad#=PPj{*^L15}BxJ>SJY#7fVl_{wwP`R@7QSs?qvul?(YhAYXEe+A_a$&7yi z<+A@maw%E!&-v&5tNvO4qW`;O7T!D);>ngm0`hF+%H~2s**xjv3!!C{e8>$EV(ky0 z`p6y0-$sm)`^aKQN7mGeKr9@K#(Xh+}f`w;Sq#DwP(9B1=BD;s3&d_J+ zOf9j76YVr2=Nl7R1J*K|nKjH7=A*t5wR&a~vw>L+4!_?+A1&+~V<)MfZgwlmHsBSx z!e(&S#tyRW(%4Rx1zg*tubg78*=#XCpq5L{^hQ{XQ)0LAO=Jw*fj;pKpgR6dj2iH z#$IVJw3pd2JHOWMOLPM@)(V7Uk0=nE2Rk}97YsA&4 z?TX4>`=}AHg3`=i2VE6yinc{dq65(mYFnZ*^!x+^B1-p_sUA=oJSMTjWAE$|+Ai`IM3jo9dU@R&SCvBhKexF9o&b&@^*k)Pt< z^wa!Xh`IxyTB4WGQDUv|zz4~#gyBE*YbD!$lVr!g>o-g8CBHE1PYKg+L61AhvHzFE zATfeh$aX{Y5H&=D$4X^;phuxI*+EDt+X+!ZjL^RSFti;K%eF%2GG<63I}XWZo9HD& z-0p`g5ntpf;)$3edia?sVvygVe2)B%SR<|o-UorUh&SR!c`FY_{1Hba5OJcGjcF9Q zabnHYDTBfuNyl`GOzfSE!du0iA{EPt=fz)QZ?TWqYb-zhOJP*#aWZKYT0}cf`IC%! z9jHFRQQjtgfzu@T%2VYXIIfZne<$FBEOS&BeaCack)n8EeD}JY*~YYE zo?jS`JGI$uE=4wJvA5crF&_71z6bMBMTdxFkB99)@w5Ck2`|Kjx5pyUNF-8>)l##E zlsV+ed3p!4lj+d^*6T3eFnf^Q#~xx2u=}w_+~c`EtT4#0;MQ^j=6Y@&w}I<7d(G9{ za&9H}+5C-L!>!_m`5}IQAHh?7d_U+ju+2`4|Ast56VXLSSW7+l2B6OqKnC!LgC4v1 z8LtG-;wQ0N>=1iBzr`VsA8lU5xKr#BbC3&oel95AZP2)~iqo66ECOY|qbNAHH;-5bZ@8wNamjQs#=G8)O1yqdeYadQ^_0_$@-xiNDK zH)S5TcVIP9NYmzo`NbSDXUy%~E^gA?3VDn_Y>)D%?34Bkd?w4Ew#WGs_B4OiK4QoG z_5^>(K5Cz_C;4-z|A7?xo`~99J+2m4FZR^z>TvbBx?NqaPSl!Q?c_dNL8Ic3_|=o^ z&G+VbGoBYup*PR_<|*=KJq6ydI4O>cP{c4I@2BL-gIBO z2;Se7CdOT46d7ekm1##T)Mjh4)!AvB2ItwM?BoTV(#<6Le8LO#{ZB}d+WA4oqYe43 zfn4RE9<=N+B}84JFT-Q|FpF2;!+h5FlJnV&X3|$C*jD4C(PErr+l{|T2~I9cuBFgY zWT~(qCtAut^DJ-hn^JK2Zw@R4mSW4hxtE(``7rlz``|tA`~~}xebK&Vf5i%y?eq2( z`>Oqo|G{6k~z*h$CW&PDPd8DsQP5Sx+GH!yZrY7 zgVGQE;Z`d6d?r^!lmYC@PwtGUITh>5Vil9p&&)-ywtulP(N4hrH9=31qfRMo3JWFf zn~Z|vvR$Nq zZL*ix>+D&`rr0y=4fd09fxXP0XRok5#x?dF+wtXv#OP0`v%jR{6QuU>HQA53*P5aJRv*SaeuU`9#ve@Dh*dt&`#Y|{Z;K1&SfC( z0M`fCv}?*Wk0L~$!)pQMh_ol496|KBQybL@s$OkS->PHOBb7#;`GB+=i{ZMxT+V4H$z)zj6Fa^Np5Uf0N~#Wrsbb#X>X!8;nUa;Z{G zIil~eXSg1D8Zwzys?EDaj%F@0SD6LiR+vk$|0m?%QrK_M$pQP2op*o4{xIg;r;Sv0 z{yov2MazpZW88;7=*WK0mFW2SEB9O-c0r$ z5_FIy2Qsl;2CA}m2~O=S`#Jbe5ZQ&`C3ZRJcOU`Fu={t>u4~nGBhrfKE{<#8^#fi( zb#d+ZIwv}Dab3sg!*mH;EZ3&%ko1#Z=%E&^yN+DfqCMA@i0#^Tt+;-Q_+;yvi{YZV z4qQvFMc0<=)TI&eTpO+(R~y&K-9^G#&2W#EK&%sYsZfJyI~chtM;-6rexm~YX$ z?w$3HduzYurnsiPE$1U&{fRLNe_9gvNBjkWSDaJ1fs8*t@a#{)yWdg&jnd}N3*cM} zeE5U@fZyTIks^!uWBzx4zO)c6URj~^L*hoyu;1#p`;(G9>5IhUPy3_(T$Ix$CAmj|)haN%> zNJFyUpYjlgH!{c~3MdZ-S&b z+7azVsSf$&qtT)0ShO?R8Xb;~#@itcVUD0&6AH`wql3|ad?Z>AX(RAoVJ?naUfi#k zL5bUDJb;sD9Q<%Rs+f)U#s}ihih0y0;?wc4BB6*WM&kXb2NfYjcie~GUPVMP6_0}( zi!a2JC-sy(Zoho~dO z7t1oxm<9+Y}xZJl6uQRLZh#dS+?*VUoY=zY}~E5tCkhZ4tJfq zX4&L!bGNu_+|L<@$(*FM|Fq-oW>m$t3lvF<0#$*MKt&)-`eYO|7K+P4p_nWZ3dy83+L z@in}M0$-yruO$@5HT_yjIY<3(xL2Fi?^KieL5(ll)K|=tb7WC}p!@?D+G9F{&ZK|G z=RZ1KsYT}3%0UU(B`vkZEWF)j?lFsQ@pnngb>;?hhm?Qzp|eZxIqVWxv;6*qU3P!O zWw2T7V>X+8%4Wj41Qg#Na5r#{?T}~LwuQ!}a1XibmQBl+WtY1TYg4&RH2oE^Nm=d@ z?tIK*tQ>Dt_gpreyKC9EFu2EDCijH9XPFdC2`2ErS1 znw8H)U*sA2LiANWhfK2)Ps=lyU5#kK+u#wO&HLITzKL)tmIDi$+{c4`PB1OFx6cX; z_8IKOXvewgdc-~$SbN7g-P?KIb$;yahQHRr_o}4j(i&-fph8*~sFo6QSAu3kucXJO zWiO$OEE7tjwiI2AzR8!PoADRLMtn7%RjkF=5nUz8(xeJGr=E=3Nzy-SRduQv# zR5N7!7hY&G#TWQqn9*j6E}9U#bl~5R4~-Epk5!*T=S**{v`&gl26@lk*I&e6*YF3mCg7FxxG5+)!L9msKQj$y`5N3fFg+(j|9YxNOh_e*c3m zPP~24LGL-s+y522$mwJ>HUz#&zXjf~=Z{csI42B!$lgO+(RcYqbUXTi_*{cUHlyp& zm1vG)^{;ba3)+CM#kWzGCE=Gq0;Zt}9<;+%RcC54B^SS7!x3nLO+V#cxh`EC?f;q`o2 zPs9~)kFf?Zcp(tq)j&64L5H2FIqgzdXhX0i*oI7lc>3vj!aChRtxMwdibk+n4{2xo zZG=?j9XlUAmwQ!Sg;(hvM_Z4yOG?btDeZtwyGg!1P!6kg20El&fvRvtxH4Q9E?3ls zzlH0=HQ{Qsy<_*Ea10&Lqh*Q`MJen`L+u1M&4&h=> z)wEDmm+`>r^_eG?n~ZOLrtD%7)*mG@W_Il2G|R~?c zcA!t>7nxvFop&6zKwO^>NJqg<1O}zJHHXInf@qaO2CWe=nCyq9U^9|#LmTa?-Ly}2 zrt+$uRkxX5?34O+&k>SVDMj4x3-A?#^q+vpLYD9`uiiT>T|8fce;B<6?;U&!Zwi4K zJbOAY6&R8ZhX=z0@Cm#_fL1HcqT*-`qEUo-6>)i76)#pQv96)yNOG85&rWJTwVT>Y z?WM(}_7R(zhD;+)o$`ym3vTuZD_cGvk)C6QeezsaX3Ma?wF??^7SEMHenIY(_#eK| z(fiS5#d?FHkm$j?dcJagk5!IfHPWa&DvQ=D>J+tDQKyOmO?0RZ(-h2FadDRsvwe1A z<;b!wo6An_*@3Z-UX%AXxl?30vRps6do3hq_S(Ew?;05|8-eA(VqhziPR7GzFFdBb<6-t1sOC5jM_uSK+5hj#!Ty9k>8$eBl#83+73JK;{KZxF=U;vP%=G_4dCq27 zf_A)n3jCn>or0t|^<7R^R1_AuToI8MvEcVUc>`XT*A3p|^^wuBbsqMHyc_4w-k^7r zj1gi60%-91DJf4rs5WW>XNcZM zEz!H^V^km2L|fs%=4hLu5+45tmc!AwH(srD#cN1uFz$&z#;cUR_*2}CNVt#N;vtlN zpc5F5TjLM$0625}Ic|?f;+A-Y(iHz4cR)tK20VTZxD7l`?j_fg%gKY}W^yOFnxrO| zl3U6BBqe#2TtPb{$^4(}y$4uShoY{%6rwRju^WvMh}aXCViH?o?>c=b(g&EK_ujiO zpfsf@7O?l;d%@m&qOsS+UJy0O-0yRTy|ec@d!PUO_ul7ZKX=W3Uf&iwFkFT{c7*4z14eO?S8f8)y7xbU+sUj z`PELmVti|ZYQ1U=wU4U(@hS+b-GyV`wZXOFwSKjpwShPmP#ansg8%bPpITk5zE-wh zzTX2!@6`TSd%N~V?akWDwO4EJ)?Tl@R(l1%Y%s=i0x#uP65%!p4gIO1$^G);_w1fAQG-!W3@zs&F&v1S{7uS4&+l{E*wc#)C8=hmo zU*Bv0?hW&HjNTJjy9a;v^j_Gmbr06#_Cj~zdG>hxp0Rtz?HRM@+EeG>KZ~z_x$fo0 zmm6N5e)qgTf{*Z6&Cwct^+7xvqH3dSpHzFjPJA7Sk9pPQ4G&g5e);_IHGC|OZ#=#J z?xW=W$JDCu=iaZAet$0)Z+>>~IhNV@V991YC-&aNHBZzSs!!G&uZhL8=y`>T(=sz%MNomX2`TUo2YNA+{< zgW89+>ive-ey@FB`@H)I&;0&z@;&;Gm+)OY=Dm04%X3)sK=pAfiF^9}Z6bE@cX-9( z@j8J&seE^QY^8lAK4VonRk~HWS9(@@RT?UND*Y=1DuXLSD#I%yDx)i7D&s2?aIL>w z_E#RLJdFQW#DkTGDxE7Q;J6$pD^->1N)0NpGO4n%vZ``!<-E$HmB%WNS6->ST6wMV zdgYCGw=uqILY1tl?$#v#R||~6YRfB!RgJD%fpV#Itz21oqH;*($;#oCL#kF*t*TmG zwWexq)w-(nRU4`{R&A;pRXMWqT;+wz^Od73$5frDI$3q9>U7nasT1=ss_RuZs%}=@s=8fur|NFiJv=%?-#tS6aF6$^eyaMp>Os}R zsz+6itDaOnt$J4Vyy`{O%c`2HS5>uDudCivy{-DC>es5@ss_&;GI!|QVRJnywUxSe zk9OThC;PkK)g6`m&lfoU*VjlvtA-X9ts7coSqc_&+6oq8+lCfjw-YRc4uXZ^lZF-w z{F&b;g2fH+aWlbUoP}VK*ix|QjO+AmAy|Z?>$evy((tx9@O-@8;HJRqLSu_rQumv`d9=mfUo!rB`Tcn6yGypipFMx^vgTFo>o;$I`Smx`stye;=2$kg5Um8lCLHy*1Goes?9)yI%+6_F8~HzTLljOP{y?i_crXfA;&I z(I1{&|GS^J{`u#ne~Zss!vF5a|6hIH{^x)Gr}(`6|NO`QhnIqs(gOdlEigD0KaCU! zB7VjoOzNSB!lXWW7)(CG>B?}JG)9kr$y;1!Buv`k_$ZjPLyv|@2lN=2)I*Pj$qc;h zIG9wR$HQbD-lYjJ8I0@8V6q6u?E{ncXkVDTkK6QvNh7pB zOj_Xm4}eKabRbLy;5tDt`4$}v6DM>COkB{RFnJ$u8wQg`=x~^PfR2F4hv-O{e1wjI z$;aqum^4Pmz@!N}7A6+xIG8j=$HU}9yblR5`52uDlhp!#mKjVgp#OMD!7;)gb&?8` z_ITSgn7HGyNQcR%IGzEM&(N7L(c?N_I2 z(4{c3M3=#2A>Oxgm^8rqJRK(Qp=ZG4hz(xDFgbyq36taKSui<(o(+@z=s7T{L|4-M zJ-P}eYteIIvIad5Cfm{TVX_Uq044*l)k2sw!*gR1Op2`V^SNMBfL;QVLiAFY6r-2H zq&ePpIZOuOV_yLi_DYzrSHXn68Yb*DFk!ES340w(*y~}!-T)K!MwqZS!Q_2Be>TJ9 zL-ZDyWTCghWD;o`iAB0I~+}9zPbU`16$qf^pH!wMEg`Wiqle6e!FcEP5<1jHppMVK(|0GP=uv(b#zFxzG{RSrNw=iM<0+Yx1oFHAK1*8T3^#X&_a1H|a+8F{9_E4Cx zhrxtB9471$Fkz2`340Vw*rQ>>9s?8hSeUTK!Gt{?ChQ3?Vas5`mczutgmZtGG({_6 z(hRMFNprLsCN0n!n6yM|VbTh12b0!ldziFAJHX@FvyTF9) z3KO;)OxW&lDzGx)?*ljuSfh1tI`|yz31@(gXfHSu*r2`PEYJz9hbMu~Xak%Lx}bgF z9MBc*3mZW%)cx}*K!JkSFj08a*ApabD4;7fE6oDX`UgW&=oqC?<9&cfYEQX=$9*g1Vy2oM!y6&+UiLQGrMxpB- zi_z%1$6^e+?y(q)u6r!Tq3a%t@#wn8VgkDEv5=wb9t%0T?y*py>mCawy6&-1q3a$C zHM;Jx(4gxc3oW|tv9LqeJr?%py2ru+UH4cxqU#=uiRc;Fj|{?w6)<7Xgb8~VOxUww zG6d(?b6_$QT?vz6=qi{DN6&@H2=qLdj6~0e$td&!n2bg*gvl86BAARtFNVoD^b(ki zM=yoR1oSeP$k5ASB1f-)i2}V6CQ9@wn5fXJVWLK_fr$pa7A9KsI+)m@*Tcjfy#Xc; z=#4OOL~nx0MD%8uIH9+|#2LL6CNAi0FmXk1hlv|{2Ta`2J7MC1-USmKdN)iw(R*Ox zh29GjZ}dKx=+V_MF`)Ou#0Px|&J_?f{^f8zOqmRQR z1bqS~q3Dw^2}7TPNjUm6Od`-{U=oQw3zI1HIhaJF&%-1JeE}x1=!-CkLw^sGc=Qi2 zNkCtMNh10(Op?$)!Xz1e1tuxzt1wALUxP^+`Z`R~(Kld{fxZcoO!O_7WT9`vWD@!g zOtR5;VUmNs2NNUuK1_1aKfxpq{WDA^qaVOz3i=^T^3jiAQh4NTZ?VZ#0eCT!^n9M^Dhsk{O2$(EDkA%rW^eC7tLXU>YV)Pi8EJ2Tj$x`$(N@6Y(U$=WFy)hCY#U> zFxiZDgvl24M3`(vJHccd+8HL>(JnCAfp&$-PP7|LcA?#2vK#FIlRao1O!lHZVX_bH z1(RyDH%#`U^)NYrHo)W{+6N|w(7rG^jP`@c5wt%{j-mr#ats{^ljGGhxD>1rzpccqb?{!?{1a z3lyO%;oYDZT?Ov}Q_*wbyys6?-VPlCDV)$l1W54{FH4d$cQ z!e_t&^g8$~ScqN^p971~8{qR`F?u6RxYZ_@us6emy#*%htuSG4g9&>(OxQbM!mitY zwb|eHUxTjOe=WLh|8?lP{nw-G_TPZ6+kYdvZvRc_y8Sn!>-OJ*uG@brx^Dk%=(_#4 zqwDtHfv($sC%SI`UFf>~ccbg}-;1u>e;>MT|7vvI{`=8&`yW8p?SBwmxBnsZh4jC` ztuCSo`+JzMe}D=55=_{aVZ#0qChRLPVPAy_`x;Ex*I~lG0TcF3n6Pibgnb((>^m@F z--QYL9!%KxVZ#0iChVVK!hQe~_CuJkAHjtE7$)o|FkwH13HupL*w10YegPBqOPH{0 zV8VU{6Lu|3*so#2eghNsTbQtafeBl>NDD{{{Obh=d&G zzy@s(XM;{?2RH|GMmxer&;>ma&IMi3PH-ORhIWQ0gYIY-cnau&c7^l77ic%Q0DOsd zhYLYZv6L z3=?+U^G7uQ+w-RvdMN&!&!67tVKARRw&>w7pFe%jBVay%zCw?L`TS9$N5Ople2pFr z^ZD})dJN3xPha#{n9rYn=y5QgKmF0;VLpEbpeMk5{tQIRU_O7oMgQ?4$1y&azQggl z=h7f_-E(O$y6(9&1YP%B8j7xaE)7H1J(q@~>z+#^&~?wHk?6YT(kOJ@b7?fX?zuDu zUH4oXi>`YvjYHQxm&T*(o=X$Zbxu|Us-NgMP$n6yC8 zhsmet1u*G>UI>$p=tVH;gI)}if#@YLsfS()6EpNOm^48zhe>nv3YfG*uY^f!^eUKq zj$REDTl5;3bVsj+$pG{^n2bZOhlwS615A3NH^QU~dJ{~(L2ri1AoLcPv`24+iHP0? z6C3n)nDj;OfXPtwPMGkq*aZ{zZkVw5z=XXQChUDMVOPV1y&op*12AD9gbDi)OxTBE z!af2M_EDIykHLg}9471&FkzpB3HuaG*r#E_J_8f>S(vcT!GwJtChQ9^VPAv^`+JzM ze}D=55=_{aVZ#0qChRLPVPAy_`x;Ex*I~lG0TcF3n6Pibgnb((>^m@F--QYL9!%Kx zVZ#0iChVVK!hQe~_CuJkAHjtE7$)o|FkwH13HupL*w10YegPBqOPH{0V8VU{6Lu|3 z*so#2eghNsTbQtafeBl>NDD{{{Obh&`;4iv_1M6+7s=7evbA+JEC8pz0niVFVT9m z6S@X%Ks%#fp?%OU=vuTd+7(UsdC3hXV{Gw$z@!D*118pJ9ZV*mJz>%Y?FEz0Xm6O9 zq4hBN8f}1y672&Md$cc1K1Tb&q!Zd7CZD4NVA35O2$QksAean52g9TS9Rib?=unu< zLWjX*3OXDn`RE9k>_bPwq!Jwk6YdiY6Lt(t*s(BS$H9ah4-<9*OxTGqVJE>P9{2Uf zOA3yW_V~JYDoi?{(_qpHk6k)Uj^S-HU}A;inJ}5x8~+^%llkaLFj;`khRH&74onuI zjWFqj&V@;DbRJClp(n#63HLh%CW+{Lm?WSJV4||de@DW^16>4@?&xBee2Jb4lcwlt zFlmb}fysPyDNHQUWiaW0E{DlZ^mLefg`NSEuILJwbVJXC3HP4`6ZUMFu;;*pT?rF* z6-?N3VZxpV6ZU+Vuou9Dy$~ksMKED6h6#HKOxR0d!d?aw_Hvl8SHOh55+>|bFk!ET z340Ap*lS_JUI!EQdYG^`z=XXKChScxVQ+>Bdkak1TVcZ91{3ynn6P)iguN3c>|HQn z?}iC`4@}s5VZz=A6LvLB*!y9^J^&N;L71=)!GwJnChQ|HVIPGF`xs2v$6>-g0TcE~ zn6OX5gnb$&>@zT7pM?qg98B2fVZy!u6ZS=zu)l{1`v;h?FTsR;87Ax>VZy!w6ZTb@ zu&=>{eH|w38!%ztgbDi=OxU+!!oC9&_Fb5;@4jo zk72@o0u%OAn6RJ0g#8>Q>=!U$zk~_91}5xRFk#oig#8*O>^CrBzl90=7nrc6i?o2W zz`tH#FwRfOjxe12!=z(4&i!H1>J85QVG@nw!(p-=Jpv|&&?8}T9z6;sH_@YEavD7b zCJiHSP6?BjI6e+0op5|SOuC^bz@#f$29qz*a+v7Q3Yg@el`xr&R>7oRB+mU|5{%Zs zBrOW(|1haQ+reZO+8!n|&<-$JfOdpQYiu$RCL^P9{tuItDxCkr#3}~o|1goEU18#d zc7sVA+8rh$zVD0&Oxob~bujq^?Fo~%XfK#d#r3^m(hkSh;&JW|llHhyAWTLl;@lr5&gfv6Y($5^WDYtMCg;&%Fi|Dp+#e>R zl5y@2lS*_XOg_VXMZu&V{_QpzCOUKsOp?*DFgbvZg9-o5I36aWGjL7}lXd7sn5Z*x z4h<7W^dB!NI7a+&JQXG#@cyL1WEGC5!^9HDGhkwc&V)(BY@GYUy}Ujma8Q*iDNla4rE1```}IZO-%IQNIi74!_4bi#EiVA8S>=l(G1 zjGhIPAJDU5asfRDCRfmvFnNfsg2^NFT$tQK&x6Tr^n92!D8lO#CKl+0F!=zz2qyi} zi(xVty#yu$(Mw?>Lob7gBYHVZl;{;O>4#nk69ak`OctV7!z3EL1|~7+wJ^DhUI&v4 z==Cu99=!o3C(#>W(iwYhg2_1?-wcy$=q)fggWd`gn_`^%!^8@`9VTyaogFagg4^5) zlh1IST`)1>I=f-g9>@2#!Nj%{f8W4l0Qw9}hM~{G zWCHpeOyubEFj1l}z(k9_2ow7 zCiT(MMOr{w;9oB=7O(%ofUo6o@DRY)@_2YC;A?pTJPh!)EQ5ywzLw?i2*B5}0v-wY zT2{iN0AI^0cr@T^Sq+Z?d@a}AFTW07cfb5PeBJ%>>+p5=%df-N-7mimUw6O!I(*&z z^6T(*_sg%t*WE9_4qtb_{5re__fPmaL<Lls6P^eY zejV5eCj45cGfa#)?{$I6r#U$HhskLCJ?I9LZ2X<;4io;Hu?I{J$#L!rldT~*_lHR@ zJT7QCfCt^F!=@T4-*0R8vqkCbRbOn zp@U#zhYp5G5jq4WMsz4lrlZ4PG8G*TlVj)zm<(3nc>@z`bQDZXxK1=oKEv@Cn2bcn z!XyM82a}=bc$iE@C&1(dIuRxp(Md2FtNi=dLkf-&FC0&W$xL(_Om?8tVe$Z-0h5+0 zocqJ10-Xhu1?WjI*@e!A$t83SOz`b|1tUxvqH|%=5uFEA{!WDkj}4j_(Zw)XjGhV;6M7mS zjb06treMwQ48`%aXcCBC2a`?c^)T6t-T;%6=#4P3!s~YvO!}ZV!^D8z0+WsCtuVQQ z-UbsFcbxmfBon;@CPws5m|Q{cg2_4bZkSkl;M^Z3&v1M%Oq$~OKA3!iu7-(--Vc*9 z^Z}SO*WtMWlLhEQFnQ^TbAOn)d*R$4CNt4TVR9UO3??#f{GP{vfX{CyVA2wO5+(!C zr(n_ueHtcTqR+tOGxS-QbVQ$ni8uN@OzhDYVB(0r2$N>u``-!2@gLBn9DNBUbI_Mz zvIhMlOm?ELz~l}3Doh$1aPAM2uCMWV876uhzX6l2=$kN6;dA~inC!yw+c2qz<9A>( z9DNriC(!p`(j46X9Uotu`=dz<@bmAK;rIhIxq*HN6VVUn{xI=JKZeOj^b?qbqo2Yg z3H=NvH_*>vatr+eCg=U}Jb=ld0G#{7#2NhxCRylOm;|F=!{i6_8<>~};_p0|OhW$x zlVG%Tkrw#>vcQ~PO)Tbo3&sF#6N|dHnd9-dt~)0A&#}Oq!2jN3Gbi?+UB8}CUoaEQ zh4+L8LPOzwp^@-`@S*UL@UhTXXd+k$O@(GcbD@RMQfMW#7TO4(2yKOS!ly!e;WMFw zU@2G$*23pPNBkc%cM>||XC`zNx(VHd9>N#GmqJfL6nY801zY^Ags+6Jg>QtuLO-Fu zFhCfHpP=v^zM3*v7$OW6h6%%k5%~EIqlD4I7-6h1P8cst5M($ZR|rb{ya%1I22|w?_MQ|0|1b4wh&H1)G|7~0$}t&D zxu!hRWYZK=zNx@eXeu%lo2HtknMzEhrZQ8xX}W2KslqhVG|M#G^nc(3kZwX+Kw3ar zKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3ar zKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3ar zKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3ar zKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3ar zKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3ar zKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3ar zKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3ar zKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3ar zKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3ar zKw3arKw3arKw3arKw3arKw3arKw3arKw3arKw3ar;D3Grv7T68{K(YU^j2(ZYG>+T zs%M%ZR*36_!KOvRccz=BL8f2D-^7{XEYVE-QTCqLKx`=fBDS=&uxw%)XmT~#SUa0K zS=v~(vHZmHQ_J?2@0%K#T8J&h0j6(FP9_)A`(h*U1Mx%gBk^OgvDiek5Sxl0nm#tI z7B1kUe_7bJU#@LwJ>R<7=k=`{T6soJ^tZsx?72s!JPs-`E|0iw6fgr*SmXc^Vj?nhlQ!BshO#{sfDSf zsgSR(ey0Baa0^3BLrud>!%ZVhBTb`BqfKK>V@=~s<4qGxGLzh-FeyzcliH*) zX-#$}dy|97(KPX|w=hH;Dh?BeizCF5;wW*nI7S>RjuXd=6GWLP7ZsvXREcU)BWguE z(Oz^A9mR>FljtnEh_0fW=q`GQI?+?~61_#eXb^owU(rwW7X!pVF-Qy+L&Q)qObizz z#7Hqpj22_WSTRnF7Zb!pF-c4oQ^Zs;O-vUv#7r?uoFrz8IigX_74yW&;uJAoED#ID zBC+_NJQM$Z$N#C{Rf<*OTydT_UtAzA6c>q$#UliJQeO;#P5+xLw>K?i6>4yTv`?UU8pTE$$Z&hzG?(;$iWKcvL(l9v4rDC&g3Z zY4MDBRy-%37cYnx#qY%*#7p93@kjBBcooZB6R(Rm#GB$R@wRwJyer-l?~6Z)KZ_5< zhvFmgvG_!MDn1jRi!a2NV$FY8ve2x^tk`U-*)+2fvr@A%vvRZPW;4tx%x0R+GMjBS z$E?z9uGu`Z`DP2u7Md+GTWt1^E3Y-OYQLe_{Tmc~A3y{V|K? zz07-?+nV<=|H@ox{;b! zN1Kl^A8S6&e7yMtbD6pPU)_UEeVdPLENt4?w6OWqriV>On?5!JZR**W*)*|fZqv@D zwaw=?wl>{u2H1?Vv9#%F)5Yc+n?W}1ZA2Rzo4z(f|1CZT|Lc9FKb01c7LXSB|GR*D zM~{xWj-DO8I(m21cQkbL>FC?hucLp*fR2G3gE|Ix4Cxr!F|1>FM|Ud^E1i|6m6w&b zmEOu=nxh3!n+S+-Mb z^KJLpR@(mK`xuWS?ZpmaE30F+R#x+R&+omU_rl(bdiUzxyLZ3dNw$f$3AQSnV|Tay z(z+?mvFBS`T6eJCiSz8PICuZYTa$kO|K0)>vQ}ENiGxaZY1(;o@vL#QE{M$dG+hz5 z#QnObP0&Mcea3>cmotieI@?!zhw5fHopg-PdQqlJ+>tnCMl0RygpJubPU~G8d6w!& z`y7}yxm0erE&D(|K|WJHM)Az<8^^Pb^(HoQzUtn@BgCV*{ypC)Eq_N?sZz*{L_Wd1oGEnP`S$()k6r5|dZt0y^~2-%*zC;whau-bX%mbj*};+S7j zI|a3|GuO8FZ<{%w;rwLb82ME?k7Qc;xAIDPxO|T4vAU666UW^XH#l8)Iu$!fUt!o_81KI}z&~V9 z_~h6fu><2K#jj4glxChDo&GreOuBy38e>RTsIff00yq&r| z?YFF5dDSJ&%g>b`k+qfI%(-GW*5R*xLFc>IUV(Cb(E zLKR!=DRX*a?Fto`|L2|!s1QS z0|FP7f1fqi-efqQ)wn2KHObCgbH??$ZnM`wpT0g@{lmhy#Q4We&pDmrKiMq*VZq#K zQ%ihH^-gP@6MZL?$;xJUTE=(x6NF^H4L%=NxCMu)W@c^*>#y|?ekuGuZ;N#@2jfQ?nETX(&clMr=31f zT~yswy>*$c?dEXDG0&;Y>5@~JYpm;B_YNMO9y>fPdFs4R8Pq;+e7^Hn``ZUt2bTtq z2woM@Ch}&~hta0E%6O}U`-xvCKS`dMqEDNZzBcEmacN#gfpTi`w8Cjs)4WU0ly)g^ zlh#+(U9-vgsLSH;@lgY#7d!u){Nd!?B~8mTWe#QaI$uo-5dK+j*Xo5ITbj6 z$VSKx$ePLztNUtJI5l^(aaZCs@U3BJ zKv=-dfS3@oh^V*~aqq{sP5doEpLo~XDQv5Hg!4U@)4FTAPdqJyCT8_A{y4d|s9x}b z*oiY1$(G8N$!5ss$WJLoDQn_Fl{HF@+De_Q{#m_Do9=Mk`5U*fZav)I-2d;rFBOq^+E?zx-hN>GEi0TMyT)Rob|?D8(74Q3aVLy=9mD?iMPYM?3#H9{)1W z*>S}I5v3maOX7^7*(GTSt$jk0ls*B)&s6O+OEa4r=OrJTa=k#W&dweZyGOo5(Nr~D zsn&jB|5JFbz0y(Vmf;rZ9_3;1SnRRJv%gn>cd&k_PxBysd`?j|!;|X@Kz)!`>H%u3$;z`-*Y%R@r~;mk6MrCx-idAeY^T4hAj*GGQ34ha7=9C zN70K@a&tb(y^(i%if2J&aa@VEtoihqS;LgG)oa!9uASW41r-Ekg#Q*kEb*H(!T83g zD3QrNRNPW0Xx`YJa`bX~>ax_evs+)?2=A2!yP%U{hZELiSEgJ~d6F*6nq<5;`J18x zC5E!*v!}|6WFN~%tH)@*)AXE}=T_-9+kK(W6u*fPsWG#R^Ni8C1%d667o8 zpD0=>#wY`nvsIf_zp19HZ>pPW{v3~gV@-}$Xz|>i0G09A4?J1^eZ>4G(V=9Fp2J z@>jPX+!sy16t*qj%ipZ*uF;3l zU6-;()7a$~`)M(6W;)Bqs&X~od3DjZFuXKm#M#ALC-y9M_E|ooU;HO(qw*WopX2er z>Qtj!;dRIB3&R%w#hIr{3Zl->81LDjc9h&tA3`wsl8rPNP-o?4RQ zYVfBxq~EcVXKj&PMKz z=^y)1ifzhIsZ%p%*oq9Q6ad{-K=kc4aci^trBe6phCnTLt zewf-JtsrA$c34h9Zp4(H`MnCp6$TXUFR3WpC6miXD2J$v-5Tr88ioXX7~~n=Dd|{Y zdeK?+CyqOvP6fKeewj2QA<1EO=o_Uv`$_&``CDfj{j%trai6A{%J(amxIOR=_RaBs z9w-PUL0-YXMYTx0?h;ursjxxW9c6pfU|pg9dwtuW4X&pX!;)+DD>GkZ)*2V9zE_7k z=DQZSY29xXd6jHbbWr}NvQ&>!KTzM(jMVnhwzl(e+~GKI;(DhB&P|+~I=6Msa5cJK za}9Az)@A4}>GC|IJsavj(tn|k(kB_Jd^-4j<+m*$JFroZL(ss`PN9a-1CjNjU1I9R zddEJAy%yIreqlnt#FCWr>A4wWGF`HtXLm3TG-{0DMvuHJdGiYOMM=eNrdE`cm3|<5 zU-p^IURJ6MQ60DM<8ai$+NrN=wfk>g9tJzZ@W2gW;gOzkn=-<3Hx*hI_p*Co|6AFg zymp9Z}PW;j7zSCYenMY60Ro>(D zk9=nM#soeMw2j;x*&*6B_D-yA;?2~RX-hJfW1o!W2#$ccMIJh?+EV>`Uw3qpH@De{_h2ag>{I$6tyG4F6D{Cui42t zbBx8tBgXaxMTM$T$I=|{#&Hc&x0Zb2dfC0LZoYR5eSzV5^n|zx3Ew4skh(0-Yx4EU zZc`S=G*o@Bo9{W)t4#NWF+FZq{4(QDB~ghVrHz^Ny==5{nA%-E*Qvg9E9W0wI_XB~ zR(Un|>Em-KU_@Z+z%vHtU|DEl=n?PaxaILbB>p)b|FKDnlH*d_rS(f&kQrn=p7(Nc zOhI(P@}k0`^l2+*Oi*QL`v!j<>Z8nz)h4Y?J)SV$PU*17d5Pz5`d{@EeZLROkDLOeZ>Sq7mS`V2$Q{28%XRW{Zm+)S{@mT! zGu?BL=T=WaIOcWV`?db2%Q4?yeOm_K4$YC>kF1RlFkRloo$l+HCp>MXAFSk29%XWxhYzvS6<~LNQ7et`2q|6+ zOS3M`xG8(0?(EnjesbaXvez?z4C)-BRu9)^IyvZO>CWh?0v-ojN3=Hfow_^tH)G%Q zyUNAT-{2zS2$*T<;UGc5oDq}yHgSvs8-o9E_ z<$1?j=6^lVDQJ1f!|2CxOX9aCew(sC5jvtd8tw)7XGLcZFv<#_7o99`?bj)!Tln2H`;3)&^<*QJN0hnRmrku* zZCz7cTeyAY=I^%7?U_eY&nkU;Lr}0Ptbb(x=!lelsWGWhlXe;}8#53dlb$Pm1_w-vnG*Y9+_l6}Y4weFjKiliFZeS&`hu{j;ETeGg^g$5 z4sh_g;T7rqA}AxOUA%9>sp2g`&orCe=6OxXf0#eKC`Re;(A81vTAyNyjC@-nQ(9=gaxzW#SiDX1*88V3gld&g-`HO{#%+uWz=zVHe)4D;FMbJgcU z)WyKypc#R|AqPX%ZWkk?W5>j6;#KkI6G9V3m1l-;=B>=eM)TZ}c}=F66*MXMWNK8& z7iHq~i_?xN&Z$1q)OTp?ywGEo*Jpuiqi@H(NHNb)7i1P)b8a|ukh;`uty@K4Y?x>C z&e&V=r~Myp` z=szwR?Krm}Q#nEQld?Rsajrv1oaeY=o$tDG^Q7oVd$qgo)hRbiTmtfB1D!40?&sH6 zpUTTgiOn*(-u4ccdE;aMGhEUf2RT0~eJe9M9&?*)ydJzNRu_BMDKw*d`0CII*OzYb zp3}YdhL$A^ll|g4PIlS8%5Jgy-r$cDe@(GX-I=;3zcgoF)(aP-Zn@W_oM^+1fbRmo zj_4CJa$;oi^0Z~;&*ghvf7BIu+It5Z_C}2lJDRd3rEC6#!jBcN?TaR6;%i{xzFwif zhHcDy=5Q^~ujG@0{+^$QYhH>n(mm2&sVmA0ii;{O{As#{JS4e7Cy$>$ z?S4g^ouk98tZgNIyW1&j_`8TK$-6FDTQN80_&#d-VU z_ZRwxHY$ZnsmoWt_f~y+{fr*bxU;x-e>)f2CRu( z5mgv-G4@Debn^U^rP-T}Tl10&TuU#NedyOWpj}^5$kVYG(z+BsE2_wNnDs@)ZcTt&p0{&g%aDb6XYvM=$-QeL zK9*gSU9<1*sGoS$X_3;*wZgTPdz3C3U;kU^9i$Hm{5q^tydrgaYI&M-?wq_kc@dL8 zEg4?2LcY{X@BdkvM}}YKy@GnqYTrd=aT)fRP2|C<#cm^9KQ`pY#-=vR$;x>d*xF62 z+Z1p@<{MTtqk(FGCc$IPW%buUIUW9zIV_M06$>!%xz``_1m@2hpKNS$U_GUGRcs=~!*f$XOIpn9{eyJ2a- zzWn9#z@(kC8p?DYDM8(Xn`ee=x*0~ycvODO#>{W zzgJm1T7|lWU5f5p>M`>}-{gsHCeBxWtVz@~)?bZ!m0wo$qT(kPolFit)1YtDm0X=;n0Ezg_sVs5ObLQ_3@XE4vuJpY&N$Qmt??_y0NgSmqa53v;@vnrOV8WrjsQ4Ia#7dL-^3B<QrKPMVY$Pa3t_#sBOf( z)Nc86OYAFV&vK6#;!qygGtsr|mh5YJu6(0%wQ7sYr|xUQ2gaUB>r=F`q^9J9($ZPF z*$ea${;gGWRR=@%WFK-J=U(9PdGMIf?-E`l2B-WP9(_T0l<|2%kK&=4;2CH9azggx zJ)YdVbe(F*#KW%UZmkUozEgeu0-FTu!hQ*R7+)_XDP`QG;{}1r;#nE7xhcJi&l|r` zhRW<@4l?}Xj?6#LC~KDXvD*~cEZJvD)uPOE3PPRD;_FtDjq3bD_$xZDeEcg zD_bdBDqASqDy@|LmER}_DhDVBDF-W6%JE8#Qm3qq^HusOgOn-CH04FRJY|kDUs?N^RDCZbZqWvl9^lBX`>FHp}{uTZa2Z&2@5 zH%s`wU-*k>No0onr}6OH9a(6Xa;J&)O@Y!s%fv0Y4SCZnkgDLO{gYX z6QU{7#A{MCQJM@*fhJ3HKvSjJq?xZ-rrD=Cs9E$U`TFlt%^uA>%?`~r%|*>^%^gh> zZ42$Mnn#+4nm3vonts~BT2JkG?U!0-?Fg-%)?V9JYpZq9mTObAD>X*#Y;C+YNn56! zrCp&-(57n_YbR+JX@AgGYp-heX)kMUY0qj~*uB!WvinW@tG1opYpu*qVRtpOkKNaH zz3uwi34*_!mt9Z006RasEV~ptqum_4sdo8x^X*pHZLnKsx5sXq-EOdkgS3j&<>S3*n?`uuan@br{+-O&e&_hU2j9pxFZ3vL!P}W{_64m@SsT15)JJIyvp^v^&$DPlG~VP5U^s zL1_KZMxjkYTZDcd+B$Ua)GtH3g!T^|5E>LZFmy<0a40`?d#F5=6Iv3g2sMRH4_y^H zJ9J^_^3YwO)uE?CPlTQfZ5VbY6c23_)+X$$u*|T4FmBkmu=KF)Nt42U4a*BF3)>J@ z6}BjBW7w6jO=0W9mWJ&KI~jI7>}=TiuybK#*rhNc>}uHEFmKrNuoq!3!+s05*`#D5gr!K4QGcZgeQmd!~fns{ZD!4hKs}9 z;W5FBf@g)V46hEq7JeyQ6MjDYLU`wh_7Tk@zKm!P@kPXth~$Vd5q%^2MQ|eo5srw> z5nCe;M(m8(5`jmYji4f~N1Tc9M!bk<9N8$cb!4B&V-Yi}FU@j#5Y8h-wtwD*ChNsOa|5ZKIn- zw~X!({Y7+}=+C3aM^B0liXIo89Gw*{ik3x7qb1QZqutSqqnAc+iPlH2i{2c)Kl*U= z$>m9Ug7Im^J3u_{@1mW?%?HJ`PFwV8E>^@2sPp0Vz;F0)p#U$Fw%Y&Hb7VSmc* z&i;h`J-aQt6}u<93%e=%XLba8C|khJVYAp{*@5f{>{#}2b{u;cJDHut4rhzm8n%ZG zvmID@?!Z{I~Bu+LbjT6tw z;IKH+oXH#^$Ih{EWSqsE3XX%LN)I0rcUIZrwJIJ-F2oQ<4=oV=359EyW; zo^ZUJN1Ruj-#9NhzjGjNeQpD86K-Q}OKw~4-UJ5BCS|P;L-6 zh8xR`xfR^A+~eF$+@suA+-mNrxP9D9+(X<0+@0LL zTqk!ww{h$p?tO08*bigt$KK^W=7z)$ik%SqWn6HqB~}|-8oMY~6gw+c7psV^id_?% z1U~=g$8L?i9=koZIu?)JAA2J9N$l>})^R_^)s1Tr*CnoB+*k3R#dV8o8kZ247AJ}e zit73{P}n!9*w^rpPA5*_Yvw2Ht+&R^Ddbe`-em zUf$ij^}I8@3p|83m`Cxh^X~B;^PcjWCbUjym(V4lYr+6)uY|z~{St;I3`ppo5SS2? zz)lEHh)sw~P$Z-$EJ!F!5G1G*R0(qvW+ap)tV_6?usY#Z!m5Pp3F{MxgewV`6R?Ck z2^$iQBvdDO5?q3IiGhjT6Ne;DNbHjs1U~;;mDn>eJTW#gC$S{4Dp8lXB(WmVo#;%2 z6PF4$BxWbBNt~XzF|jFMlUSVi0slZ^eg3(`4*V{BG_f)NaN?;%PvYsse*EVAkNIa4 z@x;#j=ZQ$--NbJE9{ex(9r*$L>cl*L4nK;Y%TMA@;TQ8$`9JZq`M>hR`MvoZehfdF zFXjvQEBQ3kR8%wNsF!oSA=P)!EYzH&2K5V$!{oVF4!UHC}<%VA!sbf6!a713PuUIf^Y#(Fj_D` z&_SRVXav&*Qo&5YEbxCH--pX8_^f=BV3%O0V7*|KV6ote;JDzbV4>iG;D+FZpiWZj za<8CyQtPDeo$ZqbB=t|aB>E}oj%`%Z@T4(GAxYs$Q<5T+SV^3u+@!pulBCikX%d{I zNwOuGlPZ&DCoN1`l(Z~qWzveIRY~iTHYZgl9ZWizbT#Q#(#@oYNq51&|F>4wPi~Ri zGP!MXr{s>wG09VtxygcLNwOx{kt|MjCKo3sCTArZll95FlkX>=Ox}`wHhE9-<>aNw zE0VV+Z%n?Jd^h=g@{Q#7DHG)VQhKKRnld1zO-kRCA5xm9G){?4F{Q+%M5N@Ugr{gz z%qc`#S<3U2R;dkB*QD%Cp;FeTRHxiZxsq}y%ITCFDR)x7O-)Vh zmD(mXGnJJ(D79m1QfkjsQR;-$_Nl{De@+cb?Uec|^{dnYsgl%%skYSpsq0ctrfx}H zmbyE2W$LNa)2X`DIjK8St5S!iHA@?xek=7^>hGz8(;lRLpLRF3Puii>_hI&#J}?9r z0t^9$07HNwzz|>vFa#I^3;~7!Lx3T`5MT%}1Q-Gg0fqoWfFZyTUvFa#I^3;~7!Lx3T`5MT%}1Q-Gg0fqoWfFZyTUvFa#I^3;~7!Lx3T`5MT%}1Q-Gg0fqoW zfFZyTUvFa#I^3;~7!Lx3T`5MT%} z1Q-Gg0fqoWfFZyTUW&>`DwXn;8hTEd74^;`H_DtJ0UIUrj%l zemNb2&ZjrX_$~d*j5ZnZ8B;Ul8N3W`#`uhB8Oa&Cj29Ww40Fc(jKvveGd5&w%{Y;< zKjT!!kqji`R)#0zamLGx=NYdunq+>O**3FV=C_&OWcJSNlQ}T+m(0PLLox$1$7P0P zW@i>>N;1WnvP@&9C39xxyvz-mD>HXxR%h&vXx zSzl%SnDt#&_pHuYgR+9Mg0s$5hGq$}60_2?ax|4M! zYi4$x?6mC8+0U~2WdEE!HG6P2D?2=UXm(UKKRZ1;Hd~M_$}Y}UWmjg;%RZ2OH2YNc z{jB$6{UOg zdocG@?$+GRxqEUC+mN?0Z-3tDJWt-OJTwo_tDoN_|MUDd`CsR^&o9mU zK7U~Tp#1*%!}CM)$K-SJx%vEjcU5|RUVc%&Jl~pc&bQ@T@)zXq%U_-kL2L8(4b2W`!*asRFWqT?iG{D{N8tu;6LIXN64)pA>W~>{{5P zuzg|w!k&e{7LG3*UO1&NxNt~eNMTqZt1zx`T48))a-pygF4Py!E?iPLvv5)2jKcYa zs|r^Zt|(kuxS?=M;r7Bkg*yw+6`m-(REQN0blxp|Q240uNujr}ZqfTO{~s28S=6ei zVbRERS|8lvOmXD5xm2D6uHDD7YxL$W){#iY(F<6%{#)HWn={npL!> zXm8P$qD4i&7SAkNR&=RoeNk1>@}hG^my3v^D@8Ag9u%QPb&4AncPtJlZeIL-ar@#1 z#f^$P6bBabiU$_=E&i!^cya$?2GIQY4^B%exJOS(&XN(M-NkPMN8OTr}4k_ZV)5+{Kmt|U<+kR(ZZNirlkl3Yo# zL?bau7D=iknm7I_~l01}nB_{YI_=V)TDD{|L8+`@rAB zL*Sp_5O^f~9o!TC4E`K0gB|cfxC)*LTi}kc7M8(ExDZ|gXTd^vI;?=_!;jz=(wp!R z_&4|?={dNObO-ztt|vv{2XGT<2kF<+E${$o-Le;OinNFH7imP9RGK4Ak}i>^N+nXh zG*J4DG)e%3{mH%0`#HAM-!7?8EYLWmC&a%Vw9!%M4}8viW5xWff)4vKwWxGFMqn zS#g=ZY=7CtvZG}i%8r$tF1uVtmR%})Ue>U@MR}w0-^;vZb;~=He^K7Md~o@M@~J^n z%30+J%5z$`_Wa%GKp-%a@h!F0U?MUcSG)qkK{Msq!o3*UN8}L(tXoi{*FA zo6G9T>dPS6N3s{?&14N^O=Qo@8_Ir^4VLwn4U~13b(ei1W6M~wT-kV8kStpkDod25 z%ED!nWwA1Wtd4x9tV$-4Et4ITZINx49h050ERyY(t&;7PRm(QX?#dp>5Lr`s6Z!A5 zC$guqPvj?L&E&1+t>hi#0rKzV{p3H%yUGX3N63fCC&|O*F>F9*1&X%$JuaupY z{ggwMk;+NRK;>vIbS(LX;98l&Q&^;vy{7)hm|{(7nC=Z50xGz z1QE*n%9bibi7B5duP84n8>{N6zEGjc)~ZicpQ*l9{h(T8?V{?b8l>u`8mbzv3RVTF z#;B&LB2^KpBo#}QtV&a5tBO>mDz!?hGOA1}i^{HYsD4%tRS#B=R*zQ)sYBFL)m(M5 zI#->qmZ%l#GPP2zQESx|>O!?m{S|kKdZBuYdZl`mdZ~J?dY^iSno#5F3+mt0UiAz0 z$C^5thMIbsrkW<2Pc=bREi{MKEj6t*37Qm5h9*lR*4Q;WHCr_sHAgiUG-ou2G#51o zH8(UjHCHvb=B1{-wt@DQ<|}PG?WfxI+F{zh+TPk9wPUsK$NZ1dj?s?ShG<7?!?kf* zwzh{hRy$QI(q?K4wPLMITc(w2Ra&Liq%~+Ow07-6?F{W=?Q(6kc7=AUc8_+S_MrBn z7T3PizR=#({;qAPtD|eBYp!dfYoYs6*Iw6F*I3s@_k(Vr?kC+y-7wuC-FV#?U7#*V z7pjZWf%9J%tBcdQbXB@px+S`0x^=n>I#P$}Zs_jnWco+CI{N22udbQCl|De>zC3ehJ%JHlZv6(T(7-}48 z9Ak_#jy9T&gN@^iAx4+cVl)|@#t7q4;|Ak8<8@*A!L5j?5L9$GrdJ3naw>`{A}R_iiYvqwB^460 z%&at5m@Q_T*=~lQ>E`+7dFCbN&E`$!4d$)p1Lh}byUd5phs>wVr_5)}m&~Y{G-Kuf zOE*g|%XgMxmhqNg%Q#DpCCUrd8St%Iy1 ztbx|i)?wB$)+j668fWEM6RjsEC0R49dDb#(p;c_nx0YK~R-ILEby??I=UQi3S6NqE zcUh~g`>Y48m#nv~!Br2eSM#4(A6uK+8rufgI@tnj{cXS60&T&zakeB|nl0V-e$0P{ zE!&o5TWDKmTVY#k+ilxrtF~RY-L!pVZ(wh3Z)yMB9$^2<-p=01{n6KmN=F>HaoUE zjyjGzPC8CGt~jnbFbD3S9CsZz9d{g$9QPeh9WNYpou50uaJF}LaCUTdc6N1kb9Q(3 zaQ1S3=j`Jg;T-M^c1~~xIVU>9oY_v36LuP$7N^x&<(%%E?_BNN?mXb!;H-8Ybsl$~ zaNd(Kv_maYb_7Ouvwx~}@J=B|dWk6pc7ZC#yRom>H~-mX!u zKCVF5AXkKo?MiToT)8ff>z3=DtAV?|`=;w7cU^Z6cNh0EcSm=7_Xu|@cXRhp_h9!R zcc6Q;`~8^zXm^Y|&OOl`;tqFbx)pAjdyzZMo$q$IXS)};SGsq*ceppX*Sj~mtKCQ4 zJKg8qC*9B7l>4^(uKPFl7nN-*+f@oH^D2uf#g+0(Ri(PpSZS^_RJtqYR4%AoU%9Yy zNhQa6sPahV(aK|$rz$U1Ua7oXiByu6*DCK;LeQhiCzVetpI5%9d|CNhWxcBURqI5p zssgIMsTx!@wrWz89OmrL)7IdigU^2*7VCx7B~O;Ju+Fy+;h@~PpW@u7=D_l52aZR&-fPra34E5jOv zPY#a^j}DIwpB=t2d|Kr8$nS*bB5y^ui<%p?G3s$t*XYU7&Ah{+Q=->LZ-_n?9l-jL zmB3oZy26TPm$8-XE9}$kuQ?Cc%{cuzy*V~c3+`O*<5+f_JMKtaP&~wI#T&?L!0W|p z$Lqw4=Y{gZdCk39JUeeXZzXRV&&&HHq5E@Q!lr~tiQ5xCNF0%PG_i#@k>Ap5<752Z zf+RtpAWKjzzyyTgOw!=wsO0kGwB!rPAE(Gt(o!rbi&KuKJWF|y@-pS8)Tq?1slTLd zOO>asNqd}DC%s;JxAd~~Md?j5KF)~B2+SCj(aO6cLYfIMt ztTS17)`_fo*^jfjWcSGKp4}^(o2|&M%Kku@CX|R=qDqldG*|SQH!x?}q=4L@+_>EQ z+}?Sgd)s)w@K)rt^*Zy8=X>(M^xn*`EcnVhx+tn>UD5QSGewh%N0rPdY3Ka_=E5cL zUib+-TDn>~xhx!f29{LT-n+c)Yj1$Jp8T=Axw5}9PdQJyRe4p}!TUrxSyiICr+%bv zt`TWEdXH*5c{_U(^jGvf7;cg}wSVKSv^+e2IK``uZUOmUVZrL z{g{8I7ymyefP8>_h6jMPEuBK45^NCTuH(g5k#1L=u;gM5qhLcT+KBi|!^ zkROmAk-kVjq(3qM`3d8AY3FCi9_NM9+H40B78)E zBq7O23X+PXA?Zj4l8Iy?*@zGkAvs7cl859Y1xO)MgcKtsNGT#lBnXU1kuszlks)$K zfhZ9bqDC}`7SSPk#DEwP6Hf@A zXlwK{^mDWg`UTn+{Sy5OZHKl;zeWSl4roWT6WST=f_6o_q219QXixMT^jowS`W@OE z{T}Uu{(%07_C@=l{m}vFPw3C+K=c>%S9B0M7#)HRMTeoo(GloKG!Pwyjz-6zW6^Qw zcyt09ga)G_=tOi9IvJgUPDQ7op=cNyjz*x7XcQWa#-J>ejdD;f8jHrE@hA^XKoe0u zDnOIaWHbd$Mbpr9Gy}~Fl0^nI9p2+BqC(0sH2EkujZVzdM;Ma8HDg;6P5 zhL)o;RE{c8C8|Qzs0P)dI#iDuP$OzWD^N3PL9M6_wWAKyiMmiXT8UPn)6p5|Omr4H z8=ZsBMdzXO(FN#2bP>83U4kw}m!Zqi73fNI6}lQ-gRTV()}ias4d_O66S^7Qf^J2( zq1(|N=uUJOx*OetR-=2-edvDl0D2HTgdRqZphwYT=yCJ}dJ;W_o<`50XVG)$dGrE$ z5xs<7Mz5e(Q3OR%48>6bB~c3Xpx4mr=neEHdJDac-a+r8_t5+31N0&K2z`t`L7$?} z(C4TZeSyA2e?xyqU!f580rnyG5%w`w2dj(K!|G!Vu!dM8tTEOE`vhx>eTp^1nqw`n zmRKvSHTD_yIo1aI0&9zXiG78&!`fqCV*ywPtRvP5>x^~5x?)3TaK;3R${BL)z}(rEw&C@k8Qv@s!*yNV$gieVUz5g3V4m)uP_Mz0RIsG2>%$bgV)9D;q~zbctgAq-WYF!e}Xr~KgFBj z&G8m^OS~1{8vhLc9B+evfw#rK#J|GZ;qCFS@c_I7-VyJFcgDNmUGZ*scf1GQ6aNPP z7Vm{a(06!m{Cm6){saCa-WTtO_s0j|KjA;)1My$*U-3csV0;KZ6d#5U$4B5J@j!eO zJ{li`kHyE~D!}YiUH{vF|0ypCp+=|<9JMO@pxC?jVm3S3C9iM^E z#Ao5N@j3Whd>%d@Uw|*f7lE{8v0E3(OE&Miq2fvHo!|&q{@Q3&# z{4xFne~LfDpW|Nq1^yEM4gVc~g+s&##D~O3#K%M(qApR7s82K?8WN3&#zYh16QU{c zDbb8*PP8Ce60L~V#An3kL>uA@qAl?y@fFdIXit1i1P~pFjzlM-Gtq_UN^~Q-6FrEY z#5csZL@(kyqBrq9(TDhf_>t&K^dtHc1Bjo9pNWCQFT}6JAYw2vgcwQ;BZd=7f zF^U*Xj3LGnxFe03YAR>t(Ji3Fbz5J^NbkwT;rX+%1aL1YqHL^dHLL_`jeOXLyxL;+Dq6cNQl z2~kRj2?+rcQlg9~CuD@2P!LK&MW_i4p(S*Lo-hzb!bDUMX2L>P2^(Q29E6i_5pJTA zs3N8lGl-eQEMhh>hnNc(%p>L#3y6ipB4RPIgjh-}BbE~@h?T@DVl}abSWB!U))O0u zjl?EmGqHu(N^B#x6FZ2V#4chtv4^N8_7eMu{lo#{AaRH|OdKJO632++#0lagaf&!i zoFUE<=ZN#f1>z!ciMUK$A+8b#ff5*j69hpL6yYJR5!ZcpIksLBo~p3$tC1cav8atTtTiRSCOm9HRM`y9l4&| zKyD;Ak(_lF!KJq?dd_z9fGmePM6R036m0Wm7^*MCDMqR34R26;Op# z5mii;P^FZZl29-urOK#sN=C^k1*N1^l$z2|T1rRhDFbDsOjHGBrYw||vQc)*K{>(L z--pXZxv5I3ikeQ%pk`9DsM*vUYA!X8noljD7E+6-#ncjNDYcARPOYF;Qmd%d)Ea6n zwT@a(ZJ;(%o2bpy7HTWCjoMD_pmtKbsNK{as+!tM?W6Wn2dIP8A?h%7ggQzcqmEN2 zsFTzw>NItRI!m3S&QlivgNxK9>N0hOx=JAwN?{aE5fn*Ll!v-TU8inPH>q3HZR!qn zm%2yYryfubsYldf>IwCfdPY5`ywnToCG{KiJN1f!JRf*I^nB#`*i*+-*Hh0^-_yX; z(9_7%*we)GiKnUOQ%^Hbb59FTOHV6LYtLt%&pmBCUwGPjzVv+MY3FJ0`PviU>EP+; z>E!9`>Eh|?>E`L~>EY?=`Ns3Dr==sI- zt7njBuxE&8sArgGxMzfCq$kib$}`$C#xvG4&NJRK!4u>O_JnvQdM0@$d!~4%dZu|o zJ@3Qp|Me%->;O&xHy}13E+9UD7myH;7{K>`YW;nm)&T(leLMVner^Oo|J|P){qO&| z(fcv~|J|Qn{d<0H1VR7ZpB(+~|GCloG5`PUr&sSs51C#t1Q-Gg0fqoW;Qu0l51EB8VZ0qKpmk@P-mzM)D`Lmb%%ODJ)v))Z=qh$cTjKWd#Dfe1N0-*7wQM~hXz1D zK|ezSpKxh;+8X5zQg~mbSp$QQ9?_W>|G!X*-nG2c% zO@*dGp->nU4n;tbP!tpm#Xu~G4RIhY6br>c;J;Zx2~Z-$hXha(lnkXnsZbh}4rM@@ zP!^O82_X@b1LZ<_P(D-u6+%T&F;wzzo=}@ONc?t6mAHu3j0fe@cWiHa{wuZO|6zvG z|6%;U(nrRJA;1t|2>f3mPz8Qpdj|MD?pg3`cn&-lo(Fz+dja^}?nUrocnQ1|UIs(Z za(D&25?%$b2EXCG7SwBB+u-f+4tOWL3*HUyfve%Y@IH7yd;mTOAA%2q-~T=e{ExxM z;S=yl_!N8^KJ!j|?Ogu}IZ*n~vJR0Bl@5~*myVE*l#Y^)mX48*m5!5+mrjrdNrR;! z(uvYZ(#g^((y7vE(okubG+Y`Xjg&@7qopxYmXs|`mu5&arCHK!sSy1BdM@~l^?Yf8 zv`|_kEtZx_#o%|@VX0JFCM}oBq;jc3s+6jvYNvFa#I^3;~7!Lx3T`5MT%}1Q-Gg0fqoWfFZyT zUvFa#I^3;~7!Lx3Uhf0aPA|2M{? zXsPD=d27a+AWo#8kHt@X9&zGWpH!R0eV|i|HSbvFzEiIq!N~vb326VN`H;x|s%O%_ z(BAu(^8Hn|zpI-fn<|?IzK=Hyd>e0sEK(LFi+-y=L%c)1!@R@2BfKNMf!gZ;w_#vR-Cqy zVwu<`yWsca0BIliM(%Ck8@fH>YoKPT6)6`}e$Sd5;G1{fslV3#Rf+r)PYL+e?>8}J z;&NI>#h73B#`e#io5A;q*Vs3TH~p=+w{u?nZ^YVb5qdk@`&7I1-x%5Z)PJTg|91%t zkqwm%lMR=Rkd2fD%0|gX%f`sY%Ep23X`cYTsXbU0BAY0i1iq*J|1N?5*~qG-3#HSg zi~jUC7G}_z#nPGdbBS~|{ahxUML(BH=SVlw(i*y4E}bXcOiSzNa;0=G{ah>EL_b$Z z=hM&i(k=9Jm2?69+(4IG>9Y1XR{u#;+xkAqGsM&X%hPd|c;=sc=7?wiNmnJV^y!@R z(=B%W$>;Bl{pH_?cZltO!~5^`;~#q~L7R$ybGwh|d=EkS;NP72ACH5vFa#I^3;~7! zLx3T`5MT%}1Q-Gg0fqoWfFZyTU;e}Y?5r2Y>{l0Y?Ex4?2zn~?2_!3 z?2%MU_Dc3i_Dc>(4oVJ54oi+mj!KS6j!RBRPD)NmPD{>6&PvWn&Py&xE=n#*E=#UR zu1XLID#0YUgpiODO5%}RlU$eFkld8qlH8Wuk=&KsliZiQJ$GZp&*I0T*uPl6}IQ{buaG&mFvgTvtnI1-M6qv05s z1+!re%!Om&I5-~W!3l68%!dVV5}XXDz^QN=oDOHenQ#`I4GUoroCD{=d2l{l02jhV za4}p8i(v^2!&0~mE{A2X99FqvK z=-XptY7BvY2LYu__0}n&eyjHHXyJXxQ6?*w$z*bw;(z7n;{T%8{I_&$UoG}6?Q8NJ zSrV-k$l`p~X-gJcPv>7ZRPrW5^DJ-){_4m`LAn=WjdKwrui?jWy-St zp+}l5U6w&xh5yj!U+)hDW&bG){3p%d$;bFI1Q-Gg0fqoWfFZyTUvFa#I^3;~7!Lx3T`5MT%}1Q-Gg0fqoWfFZyTUkqr5VS`7dL%9jp$pdHx{V45$}-1TA!xcS2*?nm zRnD-@)Ni*7RqM@fMosE!q|LzV^|c*X62V_ro@uM8mxH`D*DTvJ)oW=s&|g#r13jso zL;K97%Xzjb6%ZuydDZw%19jB2Lp{mzISOWt&M~bf|c%Z99nK1LC;hs&yaTzdtf> zvuy@hc7lvD-%RM#JA6GDULo-P73?JMbwDAx*5Ab5Y1>a{x}v_JbeNY{YK-!h@*55hZ^_!ylZp^)3f&=y6icQ3FH#m1`HtR1h5|fce)n^ZQ6kCAgCR)r2#sb;64dzhrpfTtpZFA(v+sFw$&O(O_rK# z1n8OFqBTFDTY0Su(yswo-@eY!^Bbz3Wx)JdINnTpUuAjEg0?Q%E`Sn(PSfQQ!#VK0 zXggn1g4i?QIRUH(ljXAQ3hhxl|8U(+pDqp1pK7K+?GA`q?Q83XO;l^%3EOSjI|H!Z z3Hn_CV)h^qbjwxD<0Iw={w()xkA3nZ@Wgy;`j70!xAH#m z`R0NAyFf2z8*t+z(Ed|@zNvI?p84xuzw|oi6yMoXPUkJ~kqXg1u6X{A=O2CeL)xX` z`e*y4ZJ7OqZKno;-1N-8@e1?xc(}brbC~WA1P!qdrRz%obr+b689sfoWdzU{fqrcA zWgbcU)x?elQXsfffd89olzoif4nc+9alYDE@T~TqE7MdH>_I@Y#J~Q=*NS?b>jB_5 z(H>$C29{G`?34T+m0&!R{k1nOkMNKDwdSn<6rW1_PO*pDr_oZFJ>32P%=apFggR2^ zG|p5}`p4>GuT~RjueQVk0(Q`L1n`Zj)k+c2o9P|elJKMqs9s+xk z-2=vZ0Q9Kl64NVU4(LZJuqN9#SyI3=&zxpYw`bUkeeDSCS@vvurXAIY?AI(CLrS=IvQeyiY5OKidP^8iAR8>fThnQ|9RSyGsq4}JCI`E#Sl+v-~bQw;QDzi&L zZ|~RYzk<&4rbnA94uCZ!0}(c>oQ?y3*B3l1>HJDsGf)3gQ=wMb6SX?Pw)RCBHMGYZ zdi~zkXzez{}$EjP)@pRlDqqd}FlvY;L;)NOoVXCKBvbYZ*OvPt`lUuDW`R2U5=?t zGu=J|MC7~xug$b=tZkMr!!w%aOi&8~t;)Q!fg}VY+Xzmyk-+z?Z*R`=`GeP;Yc*{y z1tjO%=POqLUpZ*0N;l6=nim1D`TF_xBVcY9*cbT5QRDx|H9@@?crBsxEwwMRpZBfc z=juxqg_p8CrswFcdAVKbUEyza6_D20SNrR0?VA)yplz>a9j(iyc}~~O11+z&tLU-6 zZu7ivCctYh@Z1RQP5vyK?ZeHK3iqAyTTEN*QD7Z;z-!nx`&Ro5-BtAt`(`?Rr!VG0 z#Y)31!(4i`-!g>&N?Kq~0X^9bJg(JxFExcGyT{*FwSAo8q5P&&?VW2#R~Z1?{q{BV zeC_l3%%`&+0JXay-#@-I^ym%(zhfYa*LQY+S5oyMe``nVhk;zI5A&U*MT(;}{@~Vn z*U%Bi{k~ed-8bz`)SmELDlDrsd8$Bbnqf=D3*S7|`0)TGO8XFKEI`@{2d&<*#!p56m1pE4q9z3+6O==h8D>U`7k+s_;Cv;aXb!T284 z;&$796Zp&ky}V|>Z@=a9ziZ#E-a_~Mo=@`tJRkXFqxX)61NwB`?y)}vx;s97?Y0fI z*83A+ALe*Qd%d)qfMtl|IbDl()Wmo+A^v^&)R$|7*2iaIM`` zV;Sv`_+rNZ@9DMPnZ1eoXV1xwVPLn+0qZrKZn4HU%n|IDcYqTl#8U(DV_P#da=ak&5V z?($7Gt|QX12+Za!WtlS8!J?zz*udUY^BoC}OaouF5bVY{V0}<)r^otEhClrOkWw5; zz^{&6{Wd`uga?I6D zqOGELB5SvEsaCuM_<40jpez7)A-Idd{q7Z2E8>kU49rI^@Xh-Re+Y8;_tP7HvCr=| zut*)H4)~q8#lBb7lVClsrO&C?k>$1g${cZYUYTE~^h*lA^rpqvPdU(s(fL$=@=({( zXo0M$RoDAulf&T9IgEZwgwEDC*M;tgOyxL^?gu4&8J)!qx>|d@|JBXSI zPLsp(qFVdf;n+j(CIhgz98Nm(6|>vdLY1QuNYlYR1Kd{Hvs5vYw$29SELsBZMCfPU zTPMpr$13?{|LGM)$ELp3v-yq%blf6e76@7lB+MUkl-@1Ve7k<3V~Jy%W|-glnz+UL z_6)3`bIsCNy_4v+mO9S8)#lsYZ`W4Rv65PJmOEAfT@2m#KYUlyet*>ekk$apa1Bej zu9nAoAltmJeKyegwY98&#MVg5Xv;>r+~jb0?cN%#lqPW9cOGtWY;|k~9@}ZJ8ao7q z(rb>A3+Z*eqn72h{oV2foogLfH-!~0<2IQug4c+*uLp{KzT7qXaKk}R zgX!o*lhm}X;-Igsy}mK*t>q2QV6ZEu`rFzMY-&TV~V!-|MrT1-dwT zWDmgzZu=SdD4Nzx%W$>@bTC#-py{o)pdf;dE*pY2`pD z5PULI%M*;jGRM1*ZhO9ej%!8&L8EBDG_Xfg{qJDc$*aNm7wC`r-+PU7jt72Y-pW}M z9jaIY=4Uj}@3MsWM_yxjbItYVcrKz!e$MgD+#79}FCxd+ayY0@ z`7g87L~p1y>u<9C`B~)OKd)^O&WW|g_-FrrMHA^{Iiu)4?oq_N)z=MRPNJQ5AGxGj zwm2uJR_#qIQn1?Dw4O_sv47$7#`pCz-pTtXKKH;XN^~atg$MsHbTt`oy|a#!f!_uC zBm*ZJ*p&ibT*^D~si2-g>(W4({*Lu^Uo*6sw0@)}%Q@HU(5?l$EZZq`=4k`LDmdnw zzfr2aYLPRCe%;9d{_Fhbbgpv-sONz@pUzVN$|72NoxhltOF?-D!~`ll+U;O3hzv`W ztH3;rs-8>CHxHa#m=<>4R~|FXvq(XPGCE7HZ-vP~ZLadMs@#`*0q_T}*kGg+ z^(yBO(EeV964>NUwNv37TXC>*64;R%=R)AO6||(KX=%Yfj9Li#`ubW7ctjX5FgJ^wbNwgFG0@9gdSxzgE^}T6(h~1t=TeYw#alU- zgWAfsG;i|0{ap2y&nDAiALrLzxMH<)1MRU6l#k7i{3q2?ugphqtuqVE$(pzFypA^d zW_TlQyGF0w?X*#Z|{)+NE{ag!1anX5! zmM{4uE(7V7ei*&8q@aYs8XK)ys~Mxw)2rbM?YWK~{XX?o=WGkN0s*?QJ{}9fDhxCp z^R1jLZ9Y9`+x)L{sPiGcVrzOt_*<=_&ve|0IZ2?q?mOY%j2ZT=otkvzi&z#Sl>3;HF z=VR-5|2v|W&KGok9z7dFT(3to+%*D7!@$iluh0d$M!JUjEZ`N(HJX;k_%!2PV}Ufz zH35`T#VunHcskUN6jMQq!LH|EJm*_Hv#Qtd<2R1i_9nrVC{ zpXQov4yH$#<{R5>@LcEHo3}0N)Ca)0LxF$I6$YL$;Ku3mcfEHO@Li$`_gTk+R^#a` z5k5@+_7u)wsN?klSpW}VLJn+0nue&QWalXr~Sg22QCAc{16JQUexRQW}z%|E;`*PZK$*v?* zv~L}3HKn`Ke7V58bRcE82%qQcQD?eb=6u>a%k|VhtJ_R-=&^1D{R^hYlI?kc2vSPC>{F48KZ=k=ta$d{u?C3h{- zmnkH!CkmNQw+xI?>XYAOg&^fy8nw&fs-QInpI+~J0(Oa!t}O={Lg+Q;@XdkUrJ^mH z!RU3aVjw?Lm|SL8I!$7(X01Zwvbn6T6(Dk+q1=Ctalt%keJ%Xa7r+7N+^#Cu7Lc#z z+N9m;o#VP=bozZ~0qH3qI>R-S)>XQu`)s6o485OM(XHevW&?eA#iCmOnySfowW7ea z(6!WsgPEJ>i&U5v`=lC=n(K~kiR&~?`gQ$H$piav0r1^U_iq`HoPfuEuwu4(Psr!H z<^oL~Si3cs%Qe~mZs)aTw_%fOr#IiQ7I>|4tp+8bUFX^ep0BSpt`UIidb++6lwQko zdVPWa*X7#cItfOy%g1GfKjxllwr_;1l{>r}{CWu5;o9!2?RoR`MOV}H-M$)lcj(&d z+UD9tYxjY2KP_!_xj_GSx=tA;YL>gE_+L@Z0IP>yeTQ6!T}No&)1W*>OK!^=!2bl0 z#QqQeUR3_8GE7cEFSAWlP}QrD?YDEK=rBhDqXt- z%Jbl^_MUTH_SxU$sd+A?d$$tIUp!c6i0dNoL4AHs-wCnIw=1vv^lSZV(?e^nx#npo z7vaKPH(Z$O7Oi{k-^sOGdsn_g``-5Deb+h{?2P-scGpF^T%a%afc(hy(Dm5$!1d&v zn5V91u4`Z{Ue|M13|JY9^@PH!*z0`({I>XJ{eb=@sO_MJxWypbQ1_emZu{nIm`^j@ z9j+PyJxH^->RV%x7Nu^KKOXD>{U#3r&Z%o)6&%!z_FMLV=s7guyL6s$ zv}Ft^$J5eSzvl$M1m2C(5o`Rrv52mt^f?#={3g0r=_0@>5$vAkUhO+wz-i--ee2{c zvQBbOc89u^rYY`8noIN;z7<+`fN}=@C z!7CW;JJ}fRj&rlzJU18AIc^;ug8h}5uE{vcs$0qE&obb?F79-xNE^y6jg`lq8gtBfGlVJo?U6YJ)JO><)8e^IB9#8l- zu;yCD0`QoRUUj5*H|89C3UeLARSr4&7%My-E$151e6K+4TY7-A zBq=JK?8ctct*XIe0XbWAz9uO`EpXRByXu|(EM!Em86uwNr{TLsc| zqFD#6$7HqHwZ+xhu?;01DmEIL;h2Bhf#2ZT4fQT~b`tF#Z1=g|K#uPvGPuVZRD9O& zulEzH11_7%{;=ziiK}xRaqU2Urg0lN>N@5+;X3X*>3R!qw1K$t%{ALiD{&3i;It9v zoa=h?WWaGg*-2+zXIxXO&%5>#{-Wywu{~5e5c{b&t;blhqSesDC9vCJ>jK*OHJ6R} zE%UqLx=N%6YUZvuhhrKKJ=eo11J$REvjYCg4`Q5z-E-Y_1ADvye*5smyHj=*{1$+h zUT(UwDn`T3on0}=G(-5l66|AW<1Cp&u(=De+pc@AgU&l-6mX8&?jyYm&xv|Nu0rlS z0ItE1Jaj#BX}Hgu9RsV%%jQ-Tq0gMk9XKxd_Q0@>j}7v_wVTKey{+r+GchJ_r2* zE}zS9^m?ng3{Ub-Zg|(b+!ceZAww4iYA`{q5v9G1EUJfC4P+cmuBhuZ=o^~fK>fmX zzqwuMOV=ycU1Pn9YVyiijPS5|7eqV?Bh<@e<1M0d=OLdsmxOkgOL&)vl&%qwDkEO- z*PvBri)Gg%(!YY*$G~kO@!lBcYBr8IO0wYz*o+`&Ks&dFes7_Uxt@YXMZPT{0e?3I z`PGcP&b2P>(Wbnz1GM9ubvVzCD2rQmM!Jhh0^bS&cd2Yl$q;K-pt`y3l@|N6=F!dd z%SPHq*z4`*alKgM(|<*I517SU7`eOVd2@Fo7H2(P)x+J3*o}nQY_96*ZZ^GP;O`mT zz1o;w7ck9-{zem*oxH-t1t-H0B%tzgPS}-F5a)Xt^|wS zC5wn%TvOv-4E!lTvmDy_rd-hV)gW6+?DrIxAT^v|SO#1vJWJemsE?Did9gfHz7p3) z_b&zwU)8>JEBGt`+U71ooGRQ^z*Rv0n#)_z?E?9z=8LsXcMLc;aAC}o44A3My&CxS z?qyJSHO{X}$7c6RkZgcQFRMr!=Z4s}AivwlVO_q-eblsGlj>^GW}Ukpk*`DUP_4_| z&UU`af!tcG<1yj;65DpSz0_l5!cO;c_YSbw=w1Q!R(Q6V?2i-r8q9YM(uaxUD75v) zOcK%ccD#XMLRwpMzm^dM5F-2+T`=sh-)Ri2A`;tpE%sk@Ku3tW+*wtL9IJCL;T zk={z;&LQV>pM|zQNpl0a%kB%%UWDf+(XMLJ<6Lu(uwJNIWWNH^^QgH*^su{~rH~DJ zx$bTt(w8_UUH07l0A-C(2MnKQ2Bq6P1?~pmzF0q3QS%UMuVEE(3)L?T4zkeQ+(eUaytiQIqwm^3^5t5z*TqePxX8WaVq%CAU&hh1#A;YySdtZ<<-R zh>`XgyImi#xr{I4(IPHu3wD2F|4B1*K!jD4I?3cx=@j zh8$Ot0sg$JtW$$pzCD3 zpLJ;ukB0c9dAgw=53>`<4A;Xc*7H-M>Hd8^z232KIC~qiC&svSYj{f&O@G5emk!YH z@t&pS9yo*VlJ#2i-nYnnV?Ph}4Dt;1j6myqWyg$tH-bbS4(&*!uR)|iur}$)9WTu! z7Vw(~P+5e_hBn7DzhbY=1AEqnr@yx*$3UxwydQ2@Su%!Eo?P%*K;)x6V=z*lXDqZc zaA(b{Y^uls{W#R;de)ZY!EC0Xyi>*a z(&27rvR!YroQb!mm0jw=-gq%fM4wlT7*^H z0$e%bwa>B6(7^8m1iA4g>DG-VIsDRGxefTOo()iMMolrS<0j8ooZ~i(#a9YRx0Kf7 zYvK2K_CSmYNjJTnp4}iDinGkH_J#dF0(!92yftQ3guQeq9cJ5$BWQ`2pbmjN)_j`W z7zS1 ztkwcz+pHa8hdmcPLmi!PeC84F1N=)$Z(7e(9`$4q6cYOJkpD+88hnT0u~r@e{yFdu zJ=JCTfW$q|Q_uF|z9nf8^&rf)-m}Gi-E-5ENp4b!IPlAer*rHvcyE>Df#*q*6mBih>scJxkg6^?{yVKKdJ#15qx^=a3Rmeiv1({#T~K$d!VP`-TFLb> zY{T4qY}SOT0P1Hlp|qDuPrK;q#r1NcF@~g@Nvdvv>nk z)N>wZ4W9^sTUGHEE%jbYA%{Yq7oL}fM3=(*!T#W#b0@CRYZ0xRu~wl@!#>-4B~ujH z^9;CUWkbncI*w2Drat?c zqO|oYpy7!2H13s_86;CBWF2~Wb$M5>jHksy!>0(=rXT8byOz7-(||JrT2HB5>opc~DRA z-f`p;9fPH&>V>@zndMqsANcMYEG8#e#clPv;1lG!PB7*(CCRE0^H{eqm#JPe2PXxd zxPXJBW2+TgMD7|-DsGwbT=(uvM&7w@2^o7Si83uIdSMc$d%j!x#b$bkR?YEF_r`Uz zNeka`crzRg#o5MtskN_wJ82%V??Ogkwpu`R^P!zfXtTaGJ)@OPdveZLlH>!(?BNDz zlJ_^HWyVMrd3Ql3EHte4l6df070+ho6H7nS-aq#q+d;9x(4U3~ltO%ktV2BD5^ovE z;O>DV8EA|Q-dZ3ps$T3Z_FjOfH*r6dgY2epchvn_7d0t*r8ll$3Tm9estrvIQbS=T{S2ELhttq61L`iIQ44LI*9!A?7&->a z?B&Z1$x{2^ij@Yp!rQ^tfd8g6ZVA6^5uFFx3a=aLVX;+2#$Z`)j6!Eud-Zw^);eV_ zYrSU9Os@mY6F74>c-N!NMyNL-^|WFko*?k%s@?3};+%4Rs8b?cQ58=Wz@> zywgo%*$VLzWv90haInHIJ_mWX51u_G{oySYFOz}aM0!cc;2sAny~~^6Pm>d5b@^_P z-LdZV?lE-x3@Tx*xBH3o0BLnuqKt%*9P}o*Lk6`5bLaxhVtDKbkqVeChYgz%B!>@_ z9rYdu=`lmYU^xN&O^9>SkcXkS4A@03xxP=ykUjnDrMN2f?;=Ip^(Ob=Ip( z2h>?i2q)WJ^d|EO?y~m+(cG!Mf`Kd z*nsp;xVGqk#eUh-iM-F@ABJ(4s%eZ76XP_hiL>kCvL-8Yuhofw$Z;0=dt5fM<;2spid5&3giR2D^ALSh38|Ir+wGLx$26+!S@zZ@cyOp<({Cz|+arX4-q7pg7*-4xUp`bOfor}?J(PLK?kwho?|o7 zat7A=SZ4vXu3|gpu+uRcxXbuPoJ%Y`&N+rH+=g&BCgx}X%_84o-&FL7OBaG{0X*}3 z^Pw(+$6ShmUjon4R&ujVf-dou`O1A(u&hAq(sz7pL{gcgu_tk7$?mK6Rrwr5<2CJ@ zxA0ci%OyalmgsAY2u@#}L9g^J^DXzS0NzDpZfHG(UIp!Hc(zwha;))HRriN@Yk@C_ zt@Cw-eC}MDV_lE78?fF8bsDbGX5=?vy~VfHH#IgHcFh#r{qeEsbzv($47s@teV|Wl zOPY50cKUV^8Qcvq`flGe%OEEi+qJ;&s?Gn}}P;%UN%ol^PoG;yIyc^;@CfDcC z`m`_Iwu|&}%6Gi6Ti)g#>i^<&>d-y>)rpd{e~H)j+7)I=vNo}uiyZ-1@VqdiYH5pPN#wbjFeA*Mq6%&pf zldQ7wtmy3TlqBtv#FnhG;xUmcGn{q2L$~w%vzUZ&Z`uWHD z>oI3X)D1A+oBdILt3;~u7}1K7=CKgC0Y;QW^yOs(Q8t)phCrK!V;gF+9p)d7TtnII zlCzF3m5Y+*3%^|GUZypQm{jF;$f6pT3&%+nfWzirj9J>HYALjK&=0SwB3`=ZT9|kGvbj~ejf}g1I61&( z6+E@@6oXBTe+}`fhW3UDTlgNzzYJvEa33uPYMz1gEZZW;)0MbV8N_~2w${HItoK&C{qx`-rNdtx!6PPl9w0sGzIxdJ{3b)T6{v0S zZ1!(K*+&0*L+3H5xM!liUUQeM%wDkA1=OOm_KU{+@A{jaFKQm3<^6Z;@A+>5ehvPIL{ks#Q+OUFSw8lk zBm5Kpvn0*)B<>vG>P?d9Bl6;TbFD0`+-K750o!8edk1R$pxKRQT{Vn6*WMq;KY{Ft z6L30({f%G~@OuDmprMzAmF>amcEwohl8TbDeKqZX)5~akR;`q@FLmkCipP+} zodZvu4WR21$by-6B_6jbcNq3*DC=5ztbB~UW1t&wrFepM3QU3#_6+n5lo2fSs69vo z_{}X)26lNE$Lc&%+z&NnFqhtj4SZvPw9C;e&>g5QrG6L%oD&IjO_sVmQ3jagg9zQ< zBr7Q2Z66Y-z_rN@SYaGlf#D{-9w#H9Ry-~q7RU~a4ve$j12pedjR2eS*eIxn21Wup z>4BrgmoUc?J;Qew80TSG6WJwJ=;em960@x$Pyv070gJaVkDS2Rz&N0ls)^{6hc$ek zU2_@Fqstii3BElifG(Dl8RLny-g70Mc}`K0=po}V&~4lp1^LProdj=3+-FX^0@6jQ$GihJ`mWCtsTaEDA1SWSvz|s zoI>$(EN~btju7AD(4Gh!C0rW0Ypf^jslaKXIRmZ5v|qc!_|FB-5^W-Sye+YvH{=(P zx(Iau&j8)xDpHpW8~BC<=()8EN&KnKL2yr)V7(T&Q*qU>x*pg_?iDxn6A0zw;k3P9 zdoyqgx!Z>A9fQ*QyPL%661{A~XfKS@?mk$h!|L2ivTh(;eUcPzgM>c}=fy*y9})gw z&10Y{?N11=_w>|6!wNdRz&{T>3+#a2e1T37!A~p#fx&e_!@4mL4uk@0VZ{}A%Z{wu zXj*&tP6h35!#Z?@_hC~Y0{k_C@tyKwoZU;}v8g;8=J_h{0&FG%X8G1IoWddFodvVh5CX4(;sTuz&%2m;vEnzVP1wd;8Dt8|55lbU za+qXir{D-<6eT$RBV`wCxpmuWrNA9Lm*e*DtEZHyt@>&<@tTQ_0o@5^HPYw{zP~qS z**=&Yy`90o#TbP!j>R<{LE0fW$vVY!pH27;Fg)NhbFizyy~Y`J0lv=K8KvEbZdcW+ zn)U{+kLVwk$!G1)WQ#;78(?>ZN zxk1q55Tu4dosQJ-;Lu=t^$4IxA`hQ9;3OCo%phDQX|tg97$eRJW(RYL25w)$F-T_v zQep5O8@vzudNaB8;ocX8?84UQ>O%e0s2> zF&AAk)3DJw)ig?-f49sI&I-;&pE*#^Luvuk^WnJ;V=IEz5?qM#oz{zh#^PXSlFzo1 zCBdbriN`HA(aAlruwzRMZK*-&R!hl^_&lIfZqlTc?!w!aZc`Sl2u=h9a-ipXfOKc$ zq}gvD^Th(bW>a1omL081h*3HW@D~; z)IEmJ8BnD(DF=gwbjC^@gqPxz6A=63S*TH2Tdf*#OchrnA$Yls$R` zn4NKJi1Y8(hak#fcp3=i+e!{#Z#5>*Z6MhP&(Yw1)WIEqwD8RcQo9MiowPSfcLt9D zy^HXAzsG>y5nO3H?@Gv<_Mpj1x4cgH^Q2t?xl)Vc$%PDg49_XU;~|dw4(ztGMD_qN zDR5jeZ1k9Vc?mgkGGSG6uRN{hGH}P?amFqX`7LNq6I%B<6Fh_&bCJl-1-sN<2|hE{ z_=L$;w{I!eKyx)oTULDs_@{=lJl!joH{dVwS@EOqE$y#gzZ9VYMgLPyFC!#(A>3w)w%3b4J>qV$7 zc&6$W^|+TuV~j@ddY$Ci661j(cfx3wkxY{-10atC9hk>KpkJWfe3;owq^3E2!NK4W zMy@Hi#W*`&p(GTHLYoPnQ9iAtfmd788I+UI&mZtBD0y#O@hA#v{Ww8-^smZk5APvl8sPVT^=DyzP@D>kC{*BB{j@^lI!3 ze45FsUt<^Kx?^1hGY>$n^=RyEve9FA0=^T>uxn%Iicz-St!69{Zpjl>UJwSB@`3h*= zh7{hHjWx)v!uk=+XC+XpiG_=_`Y4tIy&J~vG|2!5L~VVNEHUO`@4S5ynwEAQdaixP ze;bi(AnlGMizUw8z;8m?W}?{+?XJe1gxg43_}5lI9W}U?o)gr*Ptn1>47GcS&7sD_ zKy`)u$--TAFv)ifaH~zH)q%z%jr&1%j98s$Jf38q7{RH=lZ~^8=G=QMP8+f_NS%fH zydf)xJ$@0m3-I(d-ny{wt?Tiu(R;bnSU@yGVC1aP?Cc+aqg6BqBEPv9JUWJv1?wby`j#%HLxU494Jlg2o8E4U?r?4eb3K5z6k*5KJ2mnZ5~Mh^NK2O#Zl z3}8HeO%U1>a0^^**yvtS)F%AnZBt`?Wu$QpuI*B1BU*$TkJ{XTjb1_^d4bZ^h~6up zUm_2mZ~*acwXX>mx7X{D&CQK$l9V$zzELpf77utIf>cF~Y|@KBziE_A65U5@+#fOf z>huO!b#r;!__QoW{Mv=!z5|b5I$+x#>W)bDf$ZsoRA;Q?R`82J=ola{9q>y-`I?&C z>aIX_3vDK!K)RE+Pj}RpRb*E80BRCo(o%Y&PUm}voDi#5C>NskL1|yC`-N^MdGtr= z0H_Cs1|i)N?R`{1k~e&(06s%PLrtD6BGbh-%p^;WG@NKgw6Zt>Gu5g_8q(>&PlNGi zf@BT6DKns58|#C3q=zJX4@4vjq}lK^kbP+deGc&P(jDIoPf2#wf`?F>2iZL;v<`D{ zw9Quaz}V}#hTmAA@(eB>>zMVFeGJGRR*uBnj7vwORXMyZr@+i7hGyXSD)0?$g?d8W zgwXgbR5r%;V9eRzGZX#B zlk@4M?N;e5kjzF5FX4z_WaOqeC$u!Q7c7^AHpLc(%0i34asfQeRr4_le7_5ATc-{2 zC<1yO%D2Q8hpGXIlZY1VMSV?bXO(#2R9cIpEg}B!W&|n-GAof-pe+woK)t2BG&Bv) zox2#lGBksX4t_fUZ4KHxLIX^z1>aAgG`@Dv$ex0G1WId7I^AM9@=mCih3bfIE3VlJ z;C4cfRi6#rF1>3z6S^2$R^@}aoDW?H^@Oay6k1sQ z6yNf1sz*4^L8Q^OO(j=CUFuF%jl#Wcuec1-ooMqY)CF4^W;-cqH(d{Z&}!)OZYT(E zoO;X8G9Id4DAzm{=1fYa8h2ccuGb%8OHw%>00}9XuY8_z-CvhmvQ#A%)>`~ z_K~v}PTi#Qy2Ub1`H8(*{>C^zYROyAtc4ZAl}yMQNrWJ21Mft95sIQLl%$CeE*xqC z$_aCM4efpC@r_~E04Lnb&?~~HkvGPEm|I%X7+ACr48O$KxDX$jX`JZm9r8OC2}>~~ zg_QSd)4~ZGcqb8ySV()Xt!}A;CWh#@4R;K;3%>=vJ&Do5h}DfyoeT-&sI3cfUBjJC z(w5%iR1eVggT2z-WYg22dm+^~+y~m;NcRu-gH|M;a0dcCAUp^)dc45~6^}l&6%Ti_ z@EF@Ll)fk%9v=CQKJEv<10`uP!Xtpsgy&vGR=9UrKUm21?cLh5I_@A{CDi zujd((`AC(+$=k7fLAWSvF*IiT-xodBwh;Q;TCs@qx|p<{Wp3kJswH7tU}?BRRX1A( zxkz?TiP(pf3%&rXi((p4pw?s#I z*am! zHN{aKt_v@KF)ppXf}W>r&hR$-8hcH6V{toj&Me2siE%y06K6nW9?ooKcm-%*6}!-; z7tCipQV$(vsGkW@Wf;M_@E~V8%;bK}^Ab;ZRd{uHP57{*eU-0x1K4j2uWr)gABEVP zfOnLP2WmSYH4AcSe{6HOJMIZU)PBEW3-+)b>&2B@!`?=R1>&z^8%><5nq<85#NxPv6xA#B@{(Y3^h zwE9i}J`0fh#8852i*15BhOrLd>CnIYFmOjmFV#k#OvM=`Jm6GD+C{nef2MXBD%n?U-kb5(Kojk-8|2kMdHSxE?H%P>rq=moB3*Sas1-rY36wdnaeS^DEecSrHq8|8$ z@EYf+%9piQoDafYW6d6hkH*>qsz+i^!gZzNY{z1c!1ggb&#F$wPQ?mqn+;o7>(~j? zYJg4nxzQ7h7iphK0`nyHXR&?i$c79$6Kg~pe>j+AtE1t4N1{vf@q3#WDGO^HOhe3WRCWfo=qzj=HoWrmxO+Y`Z zylS%5?e#L7>?WPQ9=l<(7z6v&kBH^MsvN<5&3NZ`wH}ZMJVbvP=Ab?eJ_o9VFiZN@ zqqdZ5rs&-K*V0P^-$k~=N3G-;b|%N3AY0C??Al9%W|8W!w+L~5tS$C{fxxu{?6Xe!d4^q<9$}x+D6*r3O|iK20yLx zL9AV*14tTTw*kvh*tfT$J)B){!!q`gj^|h>^wOhrjC3~WcvQIm5meF<|1hjYA+AS4 ze;;PhJ>n%J&93S~BBZ?&Deln&GOZivo)Zt)yC7*PU3Hyl&$ejd)UsBmXK%1SZe50J zddWbu#mk5N3^TlXMtVg~gI$kz#@FW^37l3a^FxfGt+YcTJq#TBM*2kt8v4PJ0QPwT zGk92J0BZUh`j)Yosi1*}S(;9~GT!mdM9Ij=2%_;;ZgLDyvKp1d#iM4MWR0Z9oJbZ( zWk4|3q=maGa$_SQvb;!G9=VqJOf>P647vcQ$p%*# znG%^6nF0KCL)H?3QvYuvaPXa-+X$I8Gt!fs)w3WM&eY6~bR+wCxPA{Ujl}Mi&H>F_ zc;-dsC*{im;Oa{YOXpel!CS}@DKfMR4Qh^Y66>fg0r}#{BB+-d7NvwbU#wdc16Lj? zGqk#_B4UkHf@B*x4Qz(i9&sRDWk_`U-*+iD?wQp|{nh{%AaC5-h!b^VlXkB@vT+3O zHN}^Kssk&l5l`2zh%AfDhbYSU8k3`HLi#!;*PAs_-#vO*j83Hl&(e&5Qddl zOXzlh{hG)bSof>W&5o6kb#M>ai7{v6jU*mVua&YrAn5`+ue~k&J;}OA_tHw^?KiD- z14P^ySsz&h7LTpI$`^Q2wa2w>Ah9+_w!wRB6X_f746$vIEs?FjZ--|`q{+E6vJ0q- zw!`Em>9RFqt_^j*C>dP&5Mu8I{ho-UVqau8P%t9$Rz4KjiobQ;gHM=F+X2++dYG&8 zjq#4?2IKMB_8D*T{eWu*$-fuQG8pG!@Em2>YsB&hNRLLw+m1o|5@&NTaw2jHxRdZ4 zhX?LHSf9aqIjozP#MO0YQF;JZ`W(`_6u$cex@+Al<5chCz5tTfz+a49B6imzZ(^5$ zz5>tH$aNxR!G?o}kDb9)5MmNWKa1QAu;Kv2n~^C^S3rIX_}lQ@iA)DP?*TQFtlfQ} z;Wt5CbDgS>JOarBlPIABR@$yXZp=2Y)O!=rQZQo2 zM=-8-i;-ixWD@o$MR>F;s3~>Itvp}{8WJrMvCl4@Q>q%0aOp1SRg6UtiFAzpjO@C2 zj}qj{BQmmP;unj&jkJxzw~5hqQ2*a3PFVF0MqeF)>SS=84XX7>(xP2J*Yy+it?l{h zEBF`kX}DT_F$WVi-5^SLc(yDX=DCd-pcTWehsRv1D|*+yHSWJX!2T&YrF%x_0Ipdj zaqCPtA9_V!mh=V-z4Re1e7_X!5A?ujUz7~MT8%v8Bz+g-B*X1{4x{y2&aYpsv&n?OXW$JX(X&+NcxTI%2c4 zdO1*?YF0#-LF+>4O03;j!@nmXZE|m`-YZSESq(O847;^Rt&6UQb^|;cqno0eqg#l6 zYjhh>13cRa-x5jo_c!vqZRsxS&ghQlT5|p*taeBDM0bJbUi7vQ?LOdE7`_SHPii~j zHxKOrtNqb-P=8W6_|6D*%VWhIz~@kObIk$NAC4YrWp^}std-Ksd z#C}g0cBg^rWQ^scA%{;MNWUpRWysC~buM}y>dWwSHEwl&j2xfMmFUIjh3F;XGvBmR zb^VR#_2@O!?QZo3hbxCi*GT zPoj@aGTmxy&BG{H{0yYtBu!=M)##uS-NK(FhkI-Ed9=qnpU~i!2_rKe;2S?+@(Y@1 z`2YPSae5!-5&~`bQ!UKa|I_HhfLsJ-w;$doucA>h&n9g9)SdwhZzP??=J~xwt2fbO zj+fCF#1lTpl*DZml*oo0{>q1FL?RQg<)B^xS;IzmRcs^{=3ZLpg?LIfM>X(J(N}^x z2G3jMS}Z#@b!ckgbgC2bJxba(wF9c!dJwateUeq$+rB96*3<>^yK|BbZbz;7miTF) z>0;8(X|8~dfmHk(_rBGz%$S!jmI5C zBtuP_AtpM}d%PW35j$cg8@apXJAxg_rn4DrCY!}(vpMW2HkTdEj$y~LdF(iLJUfA% z$mX+?*aCJkJB6Lf7P8aW>Ff-4COeCr&CX%xvh&#a>;krkwXh4>MeJgB3A>anW=q&o zwu~)jt!xEb$=X;uTg5uqYPN>0Wu0styNq4Vu3%TPF4oO@*j4Omb`86hUB|9xH?SMo zP3&fN3%ixw#%^bKushjZ>~3}syO-U^?q?6M2iZgHVfF}nls(2CXHT#v*;DLk_6&QL zJ;$DBFR&NcOYCL#3VW5k#$IP{us7LT>}~cAdzZb(-e>FC2KE8_kbT5HW}mQ6*=Ou? z*30@>KO10!Y$F?D!)%0&vQ6v@_9gp@ea*gMS(amYR$xU|Vr5ogRaRr0*%&^Ay`f~la{@eg=AUB8`%njj&a>Kac+z4(Y zm(FEynOqi^&E;^TxLj^DH-;O_<#FS<@!SM%BA3ri;tIIQ+!SsqSIAA{rgJm6ncOUH zHaCZx%gy8Fa|^g4&cZF^7IBNYCEQZ3m@DB*xiYStvvL(&C1>O8Tovcws<|4jmUD7- z+%j%Cw}M;Axi~lH;Z||0xi#EcZXLIt+rVw)HgTJ|E!xR=~3 z?lt#@V>yoFIe`;7iIX{nQ#p-m=3?Ait}Wk=Z_jt&JMx|Q&U_a>jql2LLpU02m z$MX~TiF`gki7((M^Hcb#d?7!LpU%(VXY#Z7+58-SE@KALftnNBLv?asC8DBr}t;9v5u_}Ba!p5-~7=LKHmC0^zgUgb5unUC>r z`L;qkp}o*S=qPj&ItyKdG@+}|P3SK45PAx|gx*3Qp|8+S=r0Tq1`30O!NL$>s4z?z zE{qUH3h6?IkSSyd*+PymO2`#P3uA<_LY^>A7%xl^CJOn&B%wfW(#wKxxzeQzOXsB)p<1XB zY6YiICoB_|3oC?`f=h4<9$}TRT392j71jysg$=?+VUw^~*dlBdwh7yX9l}mwm#|yd zBkUFS3HyZu!a?DXa9B7Z92JfU$AuHZN#T@mS~w$|70wCgg$u$(;gWD!xFTE?t_jzL z8^TTDmT+6RBit443HOD1p+R^cJQN-YkA)|~Q{kELT<{7$!7l`apwK9Ugs>11qC%7K zLU<{>5?%{$1Xkb#UJwLPkOWy!1Xa+4W+5iL721mJ#P(tbv7^{Y>@0Q>)5NY~H?h0e zL+mN`5_^k%#J*xbvA;M#94HPF2a7|*q2e%cxHv)_DW;1VVy2iSW{WxEC^1(YEshb# zih1HValAM|oG9jtlf(jXvN%PYDi(^<#OdM;ai%y+oGs1~=Zf>h`QiexNVJFx#YN&` zaf!H8EEY?|Qn5@d7p-E2SSi{>yI3VU#A>ldtQDPNow!U~F0K$)iZ0PDdc;-YYH^LY zR$M2p7dMC-#ZBU7af`TB+$L@pcZfU1UE*$WkGNOdC+-&yhzG?(;$iWKcvL(l9v4rD zC&g3ZY4MDBRy-%37cYnx#Y^I4@rrm=ye3{3Z-_U=TjFi;j(AtRC*Bw9#Rl<#_)vT# zJ{F&dPsL~AbI~jMM86migJPo?62oFdjEYU-3-P7+N_;K85m}KFc~KBWQ4(cQ5miwW zo5h&;R%|P^liEuiq>fT2sk78YN|U-u-K6eP52>frOX@B4k@`ygr2f(XX`nPn8Y~Tw zhDyVv;nE0cq?9gYNSRWWlr7~*qoiDEv@}KQs#GXV zlcq~Eq?ytzX|^;+nk&td=1U8tBFQ2xlom;gr6tl*saPtJN~JQXT(U|PQl(^*>{6BF zkgBB`saA4Ib<#3vxwJxBDY+!K>Vr=>H}S?Qc~Ub-M%lrBk^r7O}^ z>6&z1x*^?^Zb`SLJJMb0o^)TTml~u8(nINy^jLZ#J(ZqG&n2(qll)RZ3QCPqND504 zDJnHdFQk{!E9tfLMq(vS;w3>6B}tMcMN%bAYL;TsTdA$wPHr!EkUPqq;HpFS)neNA4^4ll#j9KbO6-Pxi|JIVd;EAvr8ZP%SXrVhRf?4orBo?X$`z|pp;Rh1 z#jaE-4y9VDQEC;ZQl~6amMbfim5NJoD;{N)vRYZAtX0-2>y-`4MrD(-S=pj&RkkVH zl^x1XWtXyB*`w@L_9^?71Ij_=kaAc#q8wF@DaVx)%1Pyva#}f~oK?;#=amb}Mdgxm zS-GNIRjw)5l^e=U<(6_=xue`w?kV?`dZj^mpgdF_DUX#W%2VZ;@?7yMKEDyb+|f09jT_P8EU4QrDm%+ z>L@i=9j%U0$EtbiICZ=_L7k}PtCQ3Mb+S4|ovIe9)70te40WbDOP#IGQRk}j)cNWH zwMez73)MyHVs(kSR4rCZ)KaxfEmy5-g<7fFRJ&TGI@D^lMy*wyYMr`FU9PTBSE?@6 zt$Nf|>S}e3x>jAMu2(mx8`VwfW_63YRo$j;S9hp8)m`dtb&tAN-KXwX52y##L+WAm zhS^_idR9HBo>woZ7u8GZW%Y`BRlTNOS8u2{)m!Rq^^SU1y{Fz+ z>(vJJf%;H=q&`-ks87{r>T}hr`c%IfP=jit8dAe*M2)IV>I?Oy`bvGRzEN3~Q+ZWT zMO9K|RZ&${Q=8S8`c`eLwbR;b9kh;GC#|#AMN8AVYTdN%S`V$K)=TTH_0jrj{j~nt z0BxW)NE@sT(S~ZnwBgzaZKRg2WoVgNmX@vMXrr`TZL~H<8>{7M5R-+FR|v^Ji%~Hi`g6 zfFeKIh#8$;N$9Bi|#`eVy#_q-*#hPMrOo?f+u5W+;Bcwf01SkR&0g3=cfFeK< zpa}f$Bha;IaC3E$t;kVSQ#7bKuV`FRZPA>f4n=c|Iu@lD^|th}^tJS}^tTMK473cg z47LohbS~;rw6LhCXi-sGk+Ue%l4Z%ZoaxJ4RV=QAWd6sdO@so<&6#i)Eo@k!7)EiDjv!*ivFCwUk-P zEmli~rP5-v*ez8Sho#z5W2v<`Ep?V9AXYLN0_6`G3GdPf;q{YVooz>n6u0| z<~(zOxyW2%E;Cn{tIRd#I&*`$$=qUYGk2J~%su8lQ_nOo515C{Bjz#lgn7z5W1j!- z!~K8Q!(LQXbfu_I(ZJ?PMB~2_KJ~{Rq&rd%{{raCWslWLulN$bzNp*dVNu8O> zq+b3OlX?#LMC^}#^g-$=c$R#`q^|llle*xSAEf@{cbL>$zknD&`ye$H+Hv6Hhv$nB zt2@M)_a{v1UxUrBAkI{v+dw}S@GXIM{hu?bZ@$8$zWxT2dI0+D2eL5u<`n$;7e9wi zvCSBlRgjgRJ2f{WCl6#9iNQdd1>ynL|9M7wzP6==>u-`C(7`=0(yrUv<+ z?Z0jApS?47BM2oZ0u%v?07ZZzKoOt_Py{Ff6ak6=MSvne5ugZA1SkR&0g3=cfFeK< zpa@U|C;}7#iU37`B0v$K2v7tl0u%v?07ZZzKoOt_Py{Ff6ak6=MSvne5ugZA1SkR& z0g3=cfFeKiSfBeNSeL3~3 zU;FS+zW$AGedoJ>`e%Rs(f8s8zf0fJ)%&T>FkfL(zs)e;{`Pmi&wT&;Oe_8ypMjG4 z`Okm;51@SUiywUOwXb~$h56=pp?vfm=6C7e>9qBPi9u^|=PqeoyLIo;vsZ6o@R>jS z_)A~;`ZvD$ZJ7HH{^GCy{zpIl*+2a1U;g#q+P04y{4V`F18F7r1Lph8_kO`JKmX-F zc4RtqVp{P(`RwOD`20s-_~IXb^-n(h+IPPD<I-~BD~)8G91xBuMkpP1jJ z*L$;#|1h;~!iTB5CVrTDDF4IM96h-br8NLV-dbE*R&K4RwArg1#Ne~3AAkF!zy13k z|KivG{4brl^c*~Ncvjw|S##$7`@*=vXTJRLxBmQxfA^!G|LQlt?bx};pdrID$L7zR zJ$Jq((etObUt&5i?Q$6=XUzDe%;FN}i%ff_?I?!H9zAXev#5CF=l|dffAnu(|K^9^ z|C_)1i+}j1@BUf$uD$yX?9XIOojhY&(L`p%=RWx3Km6A}`Nr42_t$^`Z4KK3Z@q>n1FqE037!1KXCBS;Uhg+ zum4g*hX?I)A3oA?c)Yme$rqotf7W)?bFYqr?-Oy@OK|Xi0uBL!Lr@3e3*Y+5PvY%Q zf2y|~(sbF+ex}no@OqEj76;G76CwVM%#Ui5pn3w0Td_^+rdZ)O|`S{Fjo-FnR|%)kgoX zO)5N4w`tS5Uog=NX~6vbB_W5v%t0M6b6N8-vxhkjlK)^9O#d*oP0IX~1v5TOz1Zey zo9|8r%uMChKYfte_O~CT?t^yEnl(H<@W4ey?5>Y0~{m_;Ip+$UA!2zf2pr zM0}R{9P@eR19*-8A@fJfA2VNo7sr>FFT)1;3iDOwYs`ntpD6X0%` z4>!O9xIs?AJK{8EIx~Zr3Af7G%p7JeGmn{XIxqgK`S%^RFqxQ!chS#AKypq~xZ|PI=m9e#+dG0V$`M zGfbP5bIh+(KA&=t`9jKN=9?*3nQy0DXKpZGg7dONN|%(o%sr-0NlkL^Cf#y7!|Z}) zA3TS2UN5K5Fy|QNB6FF!%3QypOYYud>Khp55%c6J^PKVd8F*QTnJDvudG%V?3nC*c z4AacK{SSsY8(6*jLP!^1irjp2i`6NHxzcp)Wt{qi`g|k9tl!TtYxmyf80HR7%wm;%q#mUrKR!Vgn_3G!d9`=0SW)ZJ53 z^qn4m^vECSPyU~!4ruk>)OEB_1pcQW@c*&*=FvLW{l9+^iXwzigrX=yC^Co4A%u`Q z^E_wH95T=I%=MY)dAu$mgb+f=96|`;JYVa4_kG{{ocpZv$62eszu(9V8 zi6?5o#2|ESm>7)y049c_>%hb?bX}Mjj;;q2BhVkh#7J~~m>7j_028Cp4Pjyox)Dr_ zMK^|tap)#6F&^C%CMKXif{BUfW-u`c-5e&qM7My6$>@(^VhXw?OiV?$f{7XE)-W*> z{RvFWLbrj5+32<~F$diaCTNDA!UT1Dn4szYtVgRVlBEKOsqrq zhl%y*0Wh%vJrE`~q6fjmCiGyK*o++KN>hUl^Jpm>-Jmy50;L(#{LO_2B6C!#tOi1V{Fd?I- z!i0jJ1`{fJI!tKj88D%vXTpSm{t6~c^emXL(6eE}M$dr>2mLinxahes;i2cjM2Mab z6A^j=OeE0@VIqZI1QR>ai(z6ndI?N?i(U#7d(g{ZVlR3*OzcCifQbX>l`!!=dKF9@ zL9d31AJA)H;y8LOOg#A*`wS*Bpx47hM)U@lcnZA{CNiNn!9-^CW|+u=-U1U(qqoAu zGw5wFkrlliCbFRuF!3y!fr;nPEKFoab1;zu&BMg=XaOd2qD7dtJ23Gw+J%WiXb&a|qkWio1s%Yr zK@oHap8-YD5quUDL&xyX;8k=IJ_lYyr{MFTIC=+s0hB<0178HMqj$oWz#HgY@MTaE zy&Jv)N}<1ne*tfz_rO=dTj;&;HBcJ8555k{pudBE1#hGG!#6-#^a1!LD2F}>-vZ^) z-^0IwchHC6+n@saFnkA8L?40gf=cKg;NQW!=%esG@E-aYd>>RsABTx5=pSL?Jo*Go zR7IbJiE8LmFi{=-6HL@Vr_H}6I&J>7&}s9pjZT~Y2k5l<*FmSvzb-m${`Jsl^ZyW? zHvjtQwD~tcr_H}1I&J=q&}s8;j82<>6Li}Ao1)X^{}DQE{>{*7^KXt$n|}**+WbF8 zr_H}5I&J=~&}s8;jZT~YC+M{Kw?U`Pzb*O!=0~(c{{a)9q94LUd-NliIE#J^6V>rK z|L^1P3H&EdpvFdg?g8{(s0kDGcH!P1CO$;hhKc&<4`8AJx(-Yk5 zOf*B+hl%Fs1~AbA-4G^Pq8q_PD|BO+XpL?H6Q7`)!bBVNM=;SA-3%t$p_{`*2XqUV z=#2gtCc2ap&@*7-YxGQ*n2Y`jCg!1M z!Nh#@Y?xSpo&ysL(O<*FBJ^CCSd5+r6HC$aVPYA20Zc4MFNBE|=tVHG61^BER-u=` z#A@_Xm{@~e1`})1%VA<2dIe0ZN3Vp54d_)cu@Su*CN`nhz{F-W53dCSir_vPUIzxE zMR+|JgqGk9U@%&SH-aH(1>OXPqE&b^7>3s1EnqlWhqr0xrkCV3MPUy5XcSfhJxeGdN&0W!HYwm_lTXT1G+M0Wy)7JbsI&IB8 z(I%dspfy-9L2bhXwF48>E=*8+FhT9Z1a$zP26Hpw{u4d}=Ak3_ESQgu;h(_*bP_%X z7NS$|d9Vn*1HJ$jqrZVKf+gsk@FlPmy$ik!mZ5jUSHN=gx9~4u1$qyB6|6+>g|C5C z=zZ{Yup0dx{3}?4-VfgZYtaYbn_xZqAbbmKKz|Sa1~#G(!MDLC^kMi8*o-~`-vwLH zKfu3(t>~jLL9;pr6V%6Hg8E08pgsW;)F)wr`V>r1{{$1%Y4aEGTxs(c(P{IS&}s9R z(P{Hn&}s8m(P{J7&}sA6(P{HH&}s8G(P{Iy&}s9x(P{H{&}s8`(P{Jd&}sAc(P{G! z&}s9J&}s9J(P{HfqSNM|LZ{7t2Rd#3-=NdxzY~2Ab0TO~_hEwi0ZdT;0Ta{@VS@S* zOi(|D3F^O(zbEjYJb@aUasLnKy-*V-vhBvbKTJG}t_>59CUTz9X%jjk>Q3%}} zCJLilz(i5>$1qV0-4Z5VMYn>9*U+tDqB!~!m?(j60~4>K+rq>f=yotcGyD`LsN2H? zbqAQB?g$gqpTPumCzvRS$LtIfrO;hq;!Si{n0O1_4JJyXyTe2obPt$#8~r&+WR z>IpDW2ah=sChDRm!9+dumoU))JsBn%qNl(_WAs#*Xo8*w6HU?6VWJs&223W3wkL`bVDzLiSFp-Fwq0O0wz93uY`%7=v6S$3%wd9dZX9CL?858m{^E! zA6W+zi_q&~VljFHOytHr@J5(eg7ceTB1Uh9iS_6$FtGu>6(%;Kx530F^mdq7icY}9 zGBg7d%h4=MtUz-xu@cS0#45A^6RXi8OsqjmFtHXb!^AqY0u#H?Doo5mYcMezt;56| zv;hA)o`85YZt_NazSAWONJ@3OWfB zDmn!d8hQsz=;&`?!a(nYiSg)NFfjqW8zv^AzlDiO=shs;C3-JRnCN{lVWGc+2^+m1 zCLHtum~hbtVZuXy4-;Rb55dG-^kJBohdu%m^U*)R!~*nDnEozM9DDB=n(%S{I7|fS zA7Nq!`UFhOM4yC-uh6Gp;xPIrm`I{e!vupq0~0LzEKG3dpJC!S`W#GbMW2U>ZRiUy zu^oL8CKBjNFmVEX8796%UxA5(=wDzWLSKc6o#<;Y@gw>=Or+4i!UTQ(ya5x`H(`SM z7EDn81{2h`VS@S&OiIX1E{Rd1?KZFVDM=(MC7$&IyKK`D- zfAR!s;D6vJ=)F)ACi>!QaV?nWhpr71{m~!5!~k?1m>7tz3loFT^w1Obkaif{9V+#xOA&-2^7SKsSYnG3bwAVl28DOpHS}hl%m%7BDdZ{V_~T zM7M;AN$6HE@g=%7OiV_90uxivZD3+5x-CphL$`won&GD~LERoEs5`&}bw`+>{tPCl zJHfd4*GML_!`|4Cg!4h!NfdtZ+KN>hUl^Jpm>*;4vq{#76Wa znAn8=5+*jIC&R=R^c0xbik=D++tAZsVmo>|OeD}VV1hxrKB#1M1}CWfMSz{D{0H!v|Ay%Q!zpm)KAApHN=z}nE82vp=96=v~i6791Vd5zI2uvJ9{{R!m(MMt8NAxk6 zIDtM66DQF>!o(@`37Gf^eG(>4qff!a8T3yuaTa|VCVobrfr)eIvoLWU{WDBlK%aw& zi|F$(aS43^CO$)7go#e*OEA$HeHkXYps&D0SM)D1(G7hSCc2}q!9)-Ab(r`Z{VPoL zMBjjkUg(=J(HngWCid=;3Hn~W z2QbkNAM*!He2RVu6YbHDV4?&1F-*{V_V45G3H&Edpa#B<5%gZD2@^?tEv^Lm0q z1L&qOaS;6xOdLWtgNeiF<}h&t-2x_lKz|GqN6{@|;uyLWOdLnIhKV21pTNWkbQ_pB ziEaxMr_k+Sf@b(BOi;In3F;0oLERB1s6T@V>P|566CSfOOq@n{fr&Hdt}t;H-3=zr zp}WJxd2|n$xQPB7CN86U!o(GHFPQiR-5VyZqWi$aHFRH?xQ^}z6ThPS!^92r0GPOm z9tab+(1T#&H}qhbxQ!kH6L-)e!$dyx5}0@qy%Z+$qnE)%0rYa1D2QGG6NS(#VWKd4 z6->N>UJVn)&}(4gRrFeXOd6FHy!=ideBhX8EA$85m)5;$KU|GW`h7QG4Q zH=)a;H^aoc=q)(E1ziKZ6}=T*3%w1!4gEVFV>@~~x&_WBVB!?cGdRznAE8+^i|&Ds z;m{nqA)1GY`e*?r@Pjp;5Mkm;v;-3w&@xP9L@O}y6k3IeOlS=zGNW~v$bvRt;%T%A z6VIS6n8=E@VImvafr)3)E=)X!_Fy7A+J}i8=l~|3M~5(x6CJ@sE_4hNxzS0OcmbV) zi9F~XFp(Gi4NT-i?}UjL(Ys(GKYBMz6hMCq69v(GU}6RC5BI{vO7uRMScU!$CRU^O z!^9f&0hm~eJ_r-*(BH$vdh{Wf*nmC^6C2S-U}6*c2bkE5J_-|C(8pk6EBZK0Y(xJD z6Wh@zU?PD&2@?$Z6il$_pJ0MRpN0t@eFi23^jVk?(Lck4ggyroGWtABDCi3?F$8@P zCWfLf!Nf51WtbR_z5){?(7(XMNc2^h7=^wD6Qj}BVd4w)uP`wNeFG-OqHn^)IP@); z7?1u9CMKY7!^A}N9hfli_PGlaBKmijkkI#FV#q7_dH@sS&<|i@0{Rb_n23G|6O+)7 zVB$;kW0;`N`F|gOPvAd!0yPr&+6d^qP!lE|eT%P=F!2~&8z!FEgL{9N$bhZ`6B*HU zVd5!tJ($RZ{tzZIqwB*&7IXuc$ckVB$G+W0=T}ZUPfI&`n_?C;B6p$c1hO z6S>jNVd4dJ3z*1*{un0mqFcg5K6ERXD1dGa6EC4Zfr&!sHZV~b-4-TZLAQemn&GD~ zLERoEs5`&}bw`+>{tPClJHbQ|JZ5K@D2na^6UES7Vd6D(H<&1n?hX?r&^=({4fN+Q zQ4-w~CQ6}u!NgnW-Y`)b-3KPhp!>qa+vt8UQ5M}FCd#1)z(jfUK$v(3JqRW$pa;W5 zMf4DusDvI06Yrvj!9->BaG0oq9sv{YqesF-RrDyBsD>U56EwpwV1jxKOi+)73F>h$ zK|LNOs3*Wgbv))on5coC1QRvUU&2H!^kkT*jh+G%AE2kgL>=@rn5c`M4iojzGhpIF z^h}tjkNyfK8lY#vL__p!m}rEa0~3wWU&BNb^jw%|ik=4(AED>NL^JdPm}rh(2oo*P zi(uko^kSH3iCzK|tM>L$88~_UP3x(E+^%COV?m z!u!GVPvKq-J^*r}*TV-vF7yWYdypHw5k3T7KyQK%gFNWX@DcDNdJFsm$cx?z9|if) z+u&p1Mf7&~ILMDqz(0ZlXa+t33Zhx~BzOtU!Kc8>XdeCv6haH|X;2s~!e_uMXbCTh9!dJjxc?}Z8KeK0}&9ZXQC?Vq=?{^p+Wu*bPTN0C&}sXpDf%W}6M|lsTQEWW8%$8&h6(CBFhPA6Ca8ah z3F><=L46-4s2{)t^&c=n{SYRoAHf9mW0;`+`}lhT|6L|d65@q{+AcyXHKsN z+&_Pg3MC3BiX@6AiX~o46i<{$ zyq(DDgP)B$I*3$Yf%&Fi$hjFj<*w zOm^mZCKr>N`R5e>x_W`h!{lZ1G5MJSOhM*lrVvw@DZ&(GiZQP;uQA1$63pvNNv0H2 znkmD)&6H)zG3C>(yCPGGd5@{gRAH(z)tKr`4W=eji>b}jWjvY$*VcIh7m`|DZOb4bT^BL2b>B@9tx-&hP&zYV~FQzxskLk}0WCk(A znGwuLW)w4)8P7~&zGNmdQ<$mD3}z-Xi|m;@QlESjKs){!l;bS7>vnSjLkTV%Xm!4 zL`;%NF*}%@%r0g(^DVQ7*~{!>4lv&{hnU065#|TxD07TC&YWOQGN+i+%o*k^bB;OB zTwpFTmzc}U73LS_Dszpw&iu;UU~V$EnBSP&%pK-#x;gw+JK#R^fO*I~VluE9*{9e{ zY-TnKo0WZ*&CcdvpJ#Kjx!Bxn9yTwVkA0EN&lX?{vM;g!y4IK3LTq976}AXllr6@- z%D%=HXG^fJvv05^*;4GA>|1PUwhUX2Ezee9E3)sgRoM5_U0;>0##U!*u^+JY*bmwI zY(usw+l+0_wqRSbt=Ui5Hf&qA9ovEJ%ywbBvfbGpY%jJq+n4Rf_GbsOgV@3B5Oyd# zj2+I7V#l)M*zxQHb|O28ox)CKr?J!78SG4U7CW1r!+y=qW#_T;*#+!Eb`iUnUBWJ9 zm$A#)73@lO6}y^U!>(o5vFq6l>_&DIyP4g>Ze_Qz+t~!muq?~5JS(swE3q=Guqvyu zI%}{dYq1_1upt||XW&dyxH}J;WYnkFdwsKe&W3RKnvNzb9>@D^-dxyQt-ed2x57>w7Bla=- z1otGDfy>A}#bx6Db$yw+XSl3fHttz2JC}pY$>rj5b1!gtxV&6G?nN#?SAZ+Xy~MrD z72*nWuW&`UqFk|b*T2fW#uevEaIbT3a3#4?TxqThSC%W!Rp2UemAH4g_qfVj6|Ndr zgZqH1!`0>LaSgbJTqCYA*Mw`zHRGCdEx3=lmRu{YHTMbEhHJ~U<2rC1xzD&xTxYHe z*PZLZea`jddU3tEK3rd}AJ?B7zzyUEaf7)b+)!>9H=G;6jp9agUvOi%vD`Rr0ymMH z#7*X=a8tSI+zf6e_Z2sbo6XJP=5h161>7QTF}H+U$}QuTb1S)3+-hzOx0YMSt>^Ij zL%2=cW^N0&mD|Q`=Mo&lu^h+ooWO~k#L1k(shq}{oW(hun{E#OI@3S1JucuvF5+S? z$)&hm+_&65?mKQjcYr&{9pVmiN4Oujquep>ICp|O$(`bU;!dYq_ZjXi_cM2nJI`I< zE^}A7U%0E>HSRihle@*;=I(HJxqIAw?g94)_mF$UJ?1j-8To(x^JU^Q^I7<(`Dgg7 zd^Y|$K0BX-&&lWFbMtxlynH_XMLs`YfG@}w;tTVy@J0Bdd@=r2{x!ZhUxI&wFUgnU z-{jxoOY>#;xB0SsIlesq4qt(<$XDXu<=^8g^Huow`Ko+1zB*rnugTZqYx8yadVGDp zA>Wv9%74T+@O}Ay ze1CobKad~959WvPL-}F+aDD_ok{`v7=Ew5m_zC<(eiA>KpTbY&r}5MI8T?FsHvct0 zkDt#k;1}|X_{IEkekH$(U(atyH-~?n$)DL9`Az(0ejCs8BCqlqZ}28>@ec3u9`Ex3 zAMz2O;&<`8`EU6>{9b+^e<0nu5Auij!~7BcD1VGU&i}}t;7{_W_|yCu{w)79f1ba< zU*s?Gm-#FFFZ@;h8h@StHQn_$_?!GK{x|+Me}})z|IXjz@AD7%Klq3IBmOb}gz%)0 zLC7dPC1esZ3t5D$!gE4)A%~DtctOY`1%yIEVc`{_h)`50E|d`75K0QAgtvs! zLK)$0p{!6&C@)kLDhpMF_l2rLHKDptOQ5$X!{g!)1Qp`p-7Xe=}lnhMQ@7D6kb zwa`XrE3^~Z3mt@xLMNfK&_(DfbQ8J@J%rDNo6K!XRO=Fhm$C z3=@V6qlD4I7-6h1PM9D}6225B3sZ!t!VKXnVYVAxiAt5jVD{ulY2!bd`f-ES4Drkb9Zrz4p z3YK6Cj^GNO;0u8e3Xu>CNg*Zd5WW$13cG~e!X9C-uus@891so)htgetSU4j5ARHBr z3CD$#!cW3!;f!!r_*pn7oEI(#mxU|BRpFX&UAQ6K6mAK>3Acqi!d>Ba;lA*P@JM(p zJRv?QW)L%qnZ+#PGh$ZpIWfDKLwsJ$DdrM$i+RNt#R6hM@g?zPv5;6;EFu;ai;1s_ zuZhLQ65{LP8)8YZl=!CjmRMRWBfc$`70Zd`#R_6Yv6A?%_?}o72ApJ#SUUe zv6I+Y>>_p*yNTV!9%3)Cx7bJQEB2%Ry!)3Q{lx*|Kyi>bSR5t}7e|OA#ZlsDaf~=t z94C$!Cx{cpN#Yc7syI!YA#2>|z;wkYb@w9kWydYi@FN?p5H^iIb9q|wGq4-G5AZ3&? zNtvZA(lb(4DVy}H^qiDk$|2>F@=E!n7p44C0jZ$$vQ$VaEWIKXk%~&iq*tZaq~cNu z>2>K1siag&dQ*B!DlL_f-j>Qr<)re`J5mLyqEtzGS9(vXELD--m#RwDr0P-)siss* zsx5sW)sgB-^`sA_`cea_q0~rfEH#muN*_thq~=l!skPKbYAdyuK9f30ouw}HpY;Fo zqr3FE)Jy6k^_BWdgQUUIP-&PnTpB5jl158kNMoe2(l}|NG)0;!O_QceGo+c)taR(1 zEzObUO7o=o(n4vGv{+gqEtQr@%cT|4N@6B}tMcMN%bA(j`MOB}=j;M{*@k@})ourASIiJEWb`E@_XnPuedXkPb?Rr5~hY z(vQ+f>6CO@IwPHx&PnH`3(_U&vUElIMY<|oldem@N;jmN(k9%x7x-0!I-IMN1 z52T0EBk8g9g#4tOLCz>YC1;W|%UR^7 z!{rh3NO_bzTK+;FBafBG$rI#>>8_t7e<@Fvr^r*~>GBMDru>yWOP(#yk-wJb%Jby; z@&b9GyhvUwFOiqZ%jD(q3VD^hT3#csmDkDZ<&E+td9%D#-X?FC8JU$inU@7wlqFe~ zRauu!*^+J9kzLu7138o)9r8|jm%Lm4R^B7;mG{Z}y`zxs=>WUL~KBUn!uxj9=69*B^zH z!pbX35v8b7OewCEQr=YFQc5djlyXXWrGipXsieH8R931e?<-Z6YD#sbmQpv}y6Y() zD)p5HN)x52(oAWtv`|_qt(4ZvCrTTot6PyK-bx>( zuhLKHuMAKIDua~4$`EC!GE5n+j8H}@qmuKcK+P);hRl%JH-${FRX^0RVIIj>w$E-IIl%gPnys&Y-auKcRpP;M%>l;4!w z${ppd^1E_RxvxA>{!kt&kCeyh=J1#81ocTZgPKu&O3kEZRT_y# zHHVr@&8_B9^Q!sO{AvNUp!$;fGJb>9KaWCcVf7WYh+0%FroO5cS4*g`t8b_!)l%wP zYH78M`nFnDEvJ@OE2tIKO6t4nduru$*H=;BSF5Vk)aq&twWeB2t*w5b)=}%K_0;-m z1GS;rNNub(QJbnCsm;{pY76yawWZohZLNNywo%)v?bJ`z_G$;UqxzZJN$sq5QM;+# z)gEe3wU^pk?W6Wp`>Fla0qQ_?kUCf$q7GGusl(L~>PU5zI$Hfg9ixs_$EoAh3F<_3 zlKQ1OS)HOzRi~-b)fwtc^(%FjI$NEieyz?`=c)761?oa|k-Au2qApdJsms+>>S}eZ zx=vlMZd5m^o7FAqR&|@osI1DVyeg`aDyxdBs+y{+hH9#oYO9Xws-Ehrff}Zp!#^kb z=T@Y~YEn(9JJfH~o$4-ixB9KRN8PLLQ@>O9s|VDB>LK;8dPMy}J*pm4kE=hbC(^C^ zqIL*@{lrg}@gt=>`Zs`u3U>8^jE z{-HipAE}Sk3|dC*DJ`>>MSEI%M$4*Y)1K9y)3R$hwCA;)S}rZO_JWp2%d6$nUexky z1+;?NOWMm?A+50XidIA`suj~-)n3zzYbCUjS}E-S7{Mrb3oQQBy2tTs-YpiR^! zX_K`n+Ei_tHeH*c&D3UV^R)%qLT#D0TwAHF`rm$y=%4$_|IcSzt*zD8Y3sEO+D2`Y zwprVzu^OlGnxKiAq^X*w8JekCnyopSt9hEQ1?kouYLOOeNiC&)qwUgmYu{>nw7uFs z?K^G1c0fC*eXkwT4r@oWAGD*|G3~haqjn$MO7tmkQ3+aXRSM(x!QN5U6TrZ)&p_kN4>2K+!^)mX~dRe`kUS6-LSJtcO z@9S0dYI=3Ord~_0t=G}(>h<&w_4;}Py`kPnZ>%@bo9Z9w&GnD3TMsKUP z(>v%L^-g+cy^G#W@2>aIKi7Nez4YFCKYf5cNFS^Z(TD28^x^tQeUv_0AES@e$LZts z3Hn5RlK$mCepTRK@w%ry=VX0~K2@KlPuFMYGxe|Z+4>y)YkjUhPoJ+Z&==~9^u_uT zeW|`oU#_pvSL&s{T`Lp|10`VRdYeW$)l->vV__v-uf{rUm@pnga{tRK;T(2wfJ^yB)E z`bqsK{fvHA|5-n$pVu$wm-Q?9RsEWNUB98<)Nkp(>9_Se`d$6L{)hfZf2==YJZWSw zG8&nT%tjXDY2z6qtC7uk)_BgyZsahYH*y-ejNHZxMjj)tkR z5u>P4%y`v!%_we^FkUy_FiIMwj5m$9jM7FK<87m?QO+oDykk@_DjJoHca8Uq%0?BV zno-@TY1A@m8+DAjMm^(0qrTC=XlOJxniwA$&5ahu$3{z|mC>61SMR_4Xlt}H+8Z5= zjz%Y=v(d%qYIHNY8$FC(MjxY}(cc(g3^WEAgNLUYh$i4&zNs4Fcun%jK#(hW2v#sSZ=H^RvN3)UBB8`W2`mS8S9M= z#zte4vDw&SY&EtS+YQ#>48af$$xsZ{&X}s8YyFkvCG(P>@f}+ z-y4UF!^RQgnDL`=%J|7RW1KfG7?+I8#uekLam~1H{A%1VZW_0YJH`X!596Wn$arjI zFf*D@nVHPYW)|}qGpm`+eAax<%x>l|pEq-wxy;<=3uaz3pZTJh-z;DjG+#1bHVc`B z%~#AKW>K@4`KtMvS==mPzHYu@mNZM5Z<=qJrOh(t+h$p_oLSy{$E;vhG%J~v%_?S9 zvzl4mtZCLZKQQZtc}%uZ%! zvy0i?>}B>g`mFndHiw$S%;DxpbCfyS{K6b#jy1=bRHJ6#o%@yWKbCtQ;Tw|^^*O}|h4dzC3 zleyX4W-=yga;9KPrfe#vYHFrw+NNuIrf&vjXhvqzOqn~(o#rlcxB0EP$J}e~Gru$U zn+ME;=J)0y^RRiuJZ2s@e>6{+C(TplPv&X!jCt1l**s^SH!qkM%}eHG^NRV4dDXmT zUN?U=ZvRF@B&sbTlY}T_@ zcI$a7mzCRk!OCOhwenf{tpZj->t(BuRoE(G6}5_4uUfBJ#jO(m`2DMYkeZZq=}ATD7d&R$c2utAW+fYGgIBnpw@$t-FQQ(rRV3 zw%S;2t#;O@R(q?1)zSLQ>TGqjx>?<=9@ghpPpg;J+v;oev-(>DtbysSA7l--hFC+b zVb*YKgf-F{WsSDJu*O(pt#Q_PYl1b=nq+-xO}3_3Q?2RN3~Qz}%bIP?vF2Lytohag zYoWEsT5K(`mRifK<<<&orM1dhZLP7^TI;O!)<$cSwb|NgZL_vpjKx}<#an_UT9Tz$ zs-;_oWm=YHTaM*go)uW36>*0+HW1OzPAophpi*l57trZ zn04Ix(K=zBv`$$+S*NWt)>-Rk>zsAox?o+jE?JkYE7mX8RqL8{-TKwKVcoQDS-)Ag ztvl9T>%R5CdT2eeo}_Q%|I3ez_EUByJF}g|&T413pSN?_x$XRR0s9rZh+Wh!W*4_# zw@cck>^JSwb{V^zUEZ#cZrv5_O7?qpWxI;~zFpO>W>>ds*>&xD_J?)@yP@60ZfZBP zo7*kykL{LrE4#J*iQOjM^=<8T_NR6SyQBS?-O283cd@(L-R$mm5Bqbwr`^l$ZTGSJ z+WqYQ_5gdJJ;)wx53z^Z!|dVq2z#VG${uZhVUMxL+T-l;_5^#PJ;|P8PqnApGwfOR z9Q$i~u07A5Z!fZ!*vst|_DXw|z1m)9ueUeao9wOjHha6Buo;`RIa{<t zUE8w*JG3J^X{YQR_BZxUdzZc2{?^`WAFvPF-`j`nBlc1In0?$nVV|^5*+1E*?KAdS z`)B){ecrxcU$igTm+dR|FZNaYntk2=)xKfhv~SsW?R)lp`+@y1-5ma^jqu2RY(L>V z>11#+I+>lPovcna=UL}DC%cow$?4>BayxmPyiPvnMJK;gz$xgwJ)QcbBa49oY$Q!=CcB(k< zJ5`-(PIafIQ_HFCeBjh^>N@qD22Mk#vD3t9>NInjJ1v}#ot923r?u18Y3F?Ew0Al< z9i7jdPEKd1i_^{N?(}eaI=!6UP9LYQ)6ePe3~&ZIgPg(65ND_}%o*;Ca7H?#oYBq~ z&KPH`GtQalOmZeWQ=FO3SI#VFwll|>=PYm*Ig6bo&T?m^v&vcRtZ~*l>zwt@MrV_= z+1cW3b+$R%orJ?Utiw5iBRY~JJBp(^nqxSoV>!0tIIiP4z7sg16FISybW+X^=No6I zv&-4-eCzCS_B#8V@0|VV=J1b!{>gE`Ip`dAjyOl1W6p8sgmcn4<^1HFcFs6wou8d^ z&Uxp8bJ4l%TycJJt~%G8>&}gI>%QsSa&9|!oV(6F=f3m6`NMhWJaQg8Pr4c0r`*hL z7WZlQ88@q&&CTxSaC5r3+}!jdOa5`>ar3(Q+!x*aZUMKTTgZLIE#ek+i@C45uertD z67K8n8*WLrl>4UpmRs5_y+*TiLDRzVB9btGU(P8g5Ou zmRsAc>(+DYyA9liZezEp`;ptsZSJ;kTe+XOpStbc4sJ)cv)je(=5}{`xINw8ZXdU= z+t2Oq4swUN!`%_?NOzPw)*a_ga3{Kx+{x|~cd9$ho$k(XXS%c9dG367fxFOM)j3RMt76D+1=`HbGN$*mvLE_b9q;AMOSiVS8-KWOE-sq z4CGG^-8Ed(wOreET-Wtn-woW*jojExx+!;u`;EKP-R16fzjgPxd){Nu&$#E^3+_etl6%>`;$C&Hx!2ua-5c&r_m=ycdpq6rcig+~ z@9sVKzWc!a!+q#Jav!@-cp1Em-cw#CFSD1$%j#wGp7oydvU@qa=e?X>E-$zDf|tk3 z>*ezbc!j*e-YZ@auc%kdd)0f*EAEx>UiaScN_wTdH@&yK(q0+wZLh3X&MWV|<5ln~ zdX>C)z4yGzUKQ_suc}wgtM1kEYI}9Ox?Vl6zSqEO=r!^hdriEiUURR7_p#T?YwdmF zwei||?YvLD_Ff0CqxYHD$?NQO@w$55yzX8P?{lxG*URhe_3`?8{k;C(0B@i-$Q$ep z@rHWCyy4ymZ=^TM8|{7Jjq%2M;m!2E z@@9Fny*b|3-dt~B(&XL^=rdyeONp67dk7kZHwdns>+_l>vH z+vV-{_Imrg{oVoZpm)eS>>crb@Q!-NyyM;p@1*yWcg8#G{p_9d&U+WUi{2&gvUkP% z#k=ZV^R9cpdN;hA-YxGp@3wcxyX*b#-Sh5y54=CThu$OavG;`kq@Tgh=s)FW@-zEc z{HOhA{H%U9|5^VzKf9m9f8NjO=kjy=FZg--zQl5B>Un1HYl)$Zza7@tgV|`OWOexzm?zG zZ{xT1+ofA~d%uI<(eLDU_Ph99{ce7DzlYz;@9p>T`}+O-{{8@epg+hT><{sW`osL; z{s@0$y6Z>zqx~=ZG5%P8oIl>5;7{}?`Cs~z{VD!bf0{qtpW)B+zw&4Kv;8^#Jb%8w z&|l;)_Lut0{N?@%f2F_5U+u5+H~5?U&HfgDtG~_P?z6t&i@xUTzTum`<-309M}F+5 z{2l%-f49HK-|O%5_xlI@gZ}saA^)&{#6RYr^iTOe`KSFe{#pOLf5E@xU-qx~SN&`L zb^llYhJVw)<=^pt_wV};{6GAM{v-df|74IM$QWb_G6z|LXM(Ijw&2;|xgdLxBgh%# z3UUW81bKse!HYrupg>SCC=wJ6UJG6i-UvztrGnDIpZrq)+ovlRln>qsDg>2+%0ZQ& zYEUhx9@GqK1+{|@f;vInpkB}*Xc9CHJ_?!z&4U&}tDtqdb+-xH2JM3OL5HAY@LA9) z=p1wjx(B_2-a((BZ_qF39}Elz1%rd3!LVR>Fftewj81p`7r~fdY%neuA4~`)29ts> zgDJt(U|KLem=Vkj<^*$tdBOZ(VX!z@5-bgt1i%VD9g zNLVy17XI589#)x#QL z&9GKjJNzK5lWyI0!+K%;utC@`Y!o&Qn}kin=3$GlW!Nfg9kvPEhV8;n!}ei^uw&RM z>>PFpyN2DRLtbT~E~A5IJ>gj-4`{*BPkyQY?bAIU<&1Jgd82$${-{7y zFnT#E6cvtMiHbx;qhe93F8!>E4LAZi#jiW;Z8zDd+H`Y37^HIG_EA4e^t zR#EHdlc-J9Hfk4r8nur)L>;5gqE1ogs7ur}>K1j6dPKdV-cjGEU(`Pu7!8hwL_?!t z(eP+gG&&j^jf=)d6QYUHq-b(9C7K#dk7h(Oqgm1HXioHXG&hS{JR4HbfhvP0{9POSCoG7Hy9b5fiZy7x9r0iIEh^krJtq z7U_`@nUNLQkrTO*7X?umMNu3jqg1pb`X<^L?TU6s-$r|)z0tntyJ&xOAUYU*A03Jg zM@OP#>E`fnUz|VT}osE8u&PC^=3(@81O7u%~ExI248r_I)Mz^9n(cS1? zbU%6!{SiHk9;I9N@pEzZI7gf_&K2j5Ux@R> zdEV+Ntb*}N@yl_cxN!VRTqG_U7mHtui^nD6*W)+hl5wf{t+;etCN3M7 zi_6Cq;)-#l_}%!uxN=-2t`=91Ys59@-_ z7!QgE$HU^`@rZa-JUad&9utp^$Hf!kiSeZP%Xo4;C7v2ji>Jpk;+gSR@vL}uJSYA- zo*U1L=f?}(7B7!i#;fAh@tSyTye?iJZ-_U>o8ry!mUwHrIsEHP{>cHu{3yKO%_YOntUx;JXs=H zGFdA5RdRxYRT%!8p)c;TFKhUy2*OUhRLSMkCM%j z&6BN?ZIkVipC&sdJ14s&yCu6Pdn9`%dnJ1(`y~4&`z8A)2PKCkhbKoQMT7 z$0a8uCnhH)Cnu*QrzNK+XC!APXD7c-&P&cuE=c~Fuk-)uxfUgtCYL3bCs!s{C08fc zCf6m`CpRQFCO0KFC$}WGCATLNNhZlAxg?(yl44Rys_E9PCC#Ll^pim{Oh(Dw$vw$^ z$pguQ$wSG*$s@_5$z#dm$sdy^k|&d=l4p`XC(kD@q`UrN@>240@=Ef0@<#Gz@>cS8 z^7rJuWQJ76)KjTvQdv{kQqQHbr*fonrgEinr(Q_qN##xDOBG1HoGO$moO&fy zBvmw3ELA*JBK1b9WU5rEOsZ_ET&iN~-Bjh&`>Cp_YN_g}TB+KpI;py;da3%U2C0Ur zMybZBCaI>W=BZYx)~QcYZBlJh?NS|59aEiBol{*>T~pms-BUeMpQn1JdZl`&`lkA& z2BZe12B(IkhNgz4hNniQMyJN4#-_%lCZr~&CZ)biO-@ZoO-;>6eU+M>nv?oEH8(Xc zH9xf|wK%mjwJfzfwKBCTwK}yXwKlabwLZ0pe$4k@er!o?OKndjQcQ|XaVaq+rIeJK z(o$B+PB|$z<)y+@oJys3q`pb*OzleTPVG&%?tQ8KsROBl|AW2vjA|--qsBpE@4YKv zf?aQjz4tCs1*Aw7P!Lp5K#;0}qF~3~dw?Xg1VRar+}<1Z-o`%G*z!8>|HH_7*MHW0 zn%{hw=hL$|XWw(4y_2wVbI-F)yh$*Lrbg2>({(l6a5U%$jseGk z6Tpe!Bych~4V(_n1ZRP>!MWf(a6Y&ITnH`(oj_;M8(abUfPSDqxDpHmgTP=g1PldN zfni_-xEhQEqrkObG#CS}1J{Eaz>VN0Fab;iH-jl)DwqbQgWJHJU=Fwo%mw#?`@jR> zVelw;3_K2=08fHvz>DA|@G^J>yb2bAMW7ngfW=@bSO%7Z|8wzwZa@p_zzVPutOo1A zdawaBf+i3I5fBA&kOXOv0a=g(c~AgF@EUj>yaC>9vhUmA9q=xA54;aP03U&m!6)D| z@Hg-|_!4{tz6RfbZ^7Teci?;Q1NagA1bzn1;Fl)&ui!WEJNN^%fXyHqs5#UEY6-Q5 z+CuH1_D~0?Bh&@z2K9t`LA{|qP+w>OG!U|b?4d!B403=5LqnjU&@gB?GztPBM@RvU zfyP4Ppz+W|Xc9CTnhH&Wrb9EKS+_OBg%yO9FU~7NgzRRFy_ATuL z?Op9JT1~cX;n3Uxm60++2Fgsb)3Q^tVwpx(CDY6H+U42pvD;_2->xgL+J23FAN#5H z{q4uv54Rs--^#wN{WkmU_UZN+_QULl+7GrLVt?QAZ_vLJ+y(9mcZ0jbJ>Z^jZ@3TK z7w!l5hX=p|VO!V^wucA7QdkB%z=Po-@KAUdJRJUY-y`8s@Msu-<**~HfXBk);PLPT zcp^Lro(xZcr^3_V>F^AACOiwC4bOq+!t>zyP4Elgh43PHF}ws`3Om8eU{}};_JEhe zp0GE(0``G@VL#X(UI_=mA#fRbxdp8)e_wzN7s)tJZdatwB~RE0>kYLL34d0v$pf!W@Df4%J*I%J3FQAzv4jmuj2fTd>yZ0Ta@YUyU_Zs}p^Y3XI@ZRum_Yw2g{Zy8`2XtA}}S?n!?EK-Zi;$RtU8Dbe~ z8D<%78DSY|8D$x50W5NhqeWpEV;O51XBlsqV3}x{WSMMvY?*4AW|?l8VVP-}WtnZ6 zW0`B2XPIwVU|DEcWLa!kVp(c&vMjSWTU;!z7B`E##ly1P;%V`+cw1Ijd@Q~eKg)xE z#ryv@dkKw2AGx#_7Is6L#9exMDhd;m{;ZN`v_$&M!{sCKHYor-sgGhcl z)&CjIkrqfxqz%#m>4u1I&J2htPijr2kKBK?s5$N*#@VvE=z_Q)VaipZMa z9gxAu5M&rK92tR(L`ET_5de`Rj)(#ogN#MSA>)w=$V6lkG8vhIOhu+4(~%j-Ok@@^ z8<~U5Mdl%LxuaYmA0r=x;#UkDc>sJCf_d4l4r|z$al(f^tqFcRl7(a=JCL174zdf`jpQPE$R1=b zvJcsh96$~thmga_5#%Ux3^|URKu#j3kkiN++IIsZLo{Ai?iEk zx5+NvF2U|kHUsPe?Skxr?LzEA?N-@^*@fFh{4)B-ygfF1ZT8vhw>e;Q(B_a$zRh8q zBQ{5Ej@cZyIbn0s=9JB8o3l3OY|h(Uu(@b+$>y@npV$8XGPRAyrr4&$rqrg)rrbtr zqqC{7skG7CRM}M9)Y#P87;Nfo8f=U>3Xnpi2vH$w zM1vF~B}ge!hLj^(M2A!$l}I&GgBXxHq#iLg(a(f{2!y~0f}jY2PzZx?2#*Meh+Ic* zAUBa)$Zg~fau2zWJU|{IkC4a6lP375$TQ?O&Zd4;@2-XL$0-;sC72jnC23Hgke zkuS(smutc>m%ze>mlnd z>mX|{8z37fvy<7&9AtxKLuJEcBW0sxa+#xStZbZYqHL0Es%)BUhHR#6wrq}Uu56xc zzHEVPp=^=t-=*r`-%VSz9oio4fObSXqg~LhXm_*++7s=K_Cfoi{m}mC0CXT~j}Ahm zs0?*L2ctvKp+8+9{)}PhaC8JZ5*>w(MgdfgI-&}63_2DahmJ=lpcBza=wx&XIu)IU zPDf{;v(VY-oF@3W=sa{jx(Hp2E=8TtWvC14in^ihs0X?n^+Z>oKBzD1kFG=m&_FZ@ z4Ms!JRcII*jz*xX(KTo!dO&edaY)hCE??20IIB3PIIp;%IIK9LII1|NIIcLMIH@?L zIITFNKoq+ayA`<#Qjw*|RzQl2ic1QWLaop!iWMb_Qbn1fT%lFy6sd|dMYu&Y%V6gw0<6*&q)VN?_-3Kd0)8;Z+{D~hWMrQ()? zQm~481+2KK_`@Ie-yTuuS~MDsLD!+{(G6%U8i#H~H=&8>W;6*+Mz^3TXeye9rlT2X zCb|{fhHgjyaD4nTve6yrPBaJIh3-ak(L8hyx)8KuMHBX_P@(lt%?rL>tj-=ymi4dK0~c-bU{<(eEyL5512*Kp&xx(WmHd z=yUW1`VxJGzDD1mZ_(e;cj$Zc1NssDgnmZN=oj=W`iEo9pYa|2fm%>2%o=Nk*0+Oe6Vjibb|xnm2*mX56)TRXOKZ0p$0 zvAtsl$BvGj96LL9aqQ~Y&9S><567O4y&QWx_Hpd%cuaa+dO~_qdP;g)dPaIydQN&? zdO>DUZxCN>M3jm^X6V+*lG*kWuc=7jya+hv$D=7PCmZrE~c1?GeKVt$xEwh{}( zg0NsL6br*5u+`WaEE0>t)?(4vI&6It{01x*+lXz#;;{rQ5!;L*gk9~FbkLs%mL;C^MLul0$?Gq2v`g( z0hR(zz%sxYZ~%?AP(3FYy#qe1RxRE3?u=`z!o3{NCnb>bRYxB1hxX( zfbBpQkPYkrb^?V(_qC|8CH(zn&?-7Rbo|GHCBVwVg{@ZtH(?jgdrG;VHl1P z7>UssgRvNo37CjAV%MGr(Ek9B>}E09*tv0hfU*z*RsA6aa-l z5ugIpfCeZAN`O+J3@8V*fDWhtDgixE1ylnyKrLVZ>VSHn0Wbn400bZa1`q%RFaQS# zfCMOj1{i<^IDiKPKm;0rYru8j25=L&1>6Si0C$0VzHdfmtvsycuqTOYr7+3%n)X25*bE$2;I1@y>V` zyer-f?~eDtd*XfYe)s@?^d?UUIPrwuL&3F=?jBmkH z@YE*yrQzv#2A+v;#kb+x@oantz7x;Ecj3G7Ts#logYU)n;Ro?U_+k7AeiT2BpTJKx z!JooU<7e=*_yznDeg(gZEAaxn5HG^jxCSrAOYl;>3@^vExDKztD{(zug;(P>cr9+g z>+pKq*yLLOW}g48do$r64&gA4;3$sc1Ww{K&fqN0;XE$jBHoB!!>{8v@SFH8{5F0E zzl+~%!ufst0satwgg?fg;Lq^i@aOnT{1yHhe~bT)zr)|-AMlU(C;SWk4gY~#a4W)^ zXh!_Xg$>c1XhF0jS`%%EwnTfP1JRM_M06&)5M7DxL=U1T(TnIq^d}*hC}{iNt0inb<<45UE5Okxpa~+lVY; z2eFgLA$AeFiCkhYv5z=F93&1AhnrmM?^XQYtX~;8LL4QI5yy!W#7W`|ae=rqWglfO=Nc~ALJ`9%3t`J3{E^0o4f@~!fn@`LiD@|*IfCr5##phdy2 zI{dHlW~2?-oNPh1BwLeh$hKrVvOU>>>_~PYyOBM}o@6hwH`#~mOZF!RkON6O(w-bd z{<>Eg=|B!9hmb?bVdQXf6zNDR$T8$tavV9HoJdY0CzDgispK?rIyr-!NzNi?lXIHj z=aTct`Q!p}A-RZLOfDgpl1}6@(wTH2T}d}`Iq6AylPgFc(vS2fSCRo_AQ?mkldH&Z zay7Yzj3nC?v@hsb(7B*jLB9gqf}sT?3Pu);DHvNYp0soY$%8=h%4Awu(=?qAh{r=Agv(1Agds|Ag3U&;8?-&f^!As1+@i+f`$U9 zfGVI1*n*n{cMBdCd@e8-d@HaNSQT0qwkm90*tW2JVYfn{P+mBuaD3r}!bycQ3TGD1 zE}UC9uW(V}lES5hPKC~e?uE+>eGB~xR~7~o1{Q`Eh8IQ@Mi#~t#uxs|(g{APJE$iI6CnP`J4;sW7=P zvv6x+PNBZAs<67Swy>cPE5r-QLaLB1Y%IK1c(d?n;q$_mh3^YL7k(>jS=6eieNm^P z5k(`5fFj4DF-22~rWQ>vnprffXm-(pqJ>4yMZQITMIl9@MF~ZzMVUoeMR`SgiVhSV zE7BI}iu6UbMPLzB1Q(%2co9*=72Pa)TJ)^wP0`z;_eGzJtW?%2iK?Bdld7AlpQ^uV zh-!{%u4;j5k!p#`N#&+;S9z#BRo+edApfuQ$4HzcNRp&Tnq)|pPU5>x=>xIZd7-w2i246P4%JrQvIm@ z)BtKAWlPyn_S7IsO35e(YA`i~8cGeLhEpRbKUI<{S(U2FROP64sd80&RQamIsw1jn zs*|cys?(}7s!OWNs;ercsz6n!DpILc#i|ljsYUADo)j?x~qDm zYNc+iZmVvm?xgOb?yByk?yc^t?x*gr9;BA4W$Gd75$ZAOvFh>a3F?XJ8S0tpIqC&! zXSIvkUG1UvQv0d{)bZ*Bb&@(&ovzMOXRCLrcd7TP_o?@*^VP@Hm(-Y=QgiB?>RV0v zApgqAKbeoBMpFPKryMB-HI5ojO{6AKlc}lHG-^6EgPKXrqGnU`s0Gv_YB9BhT1q)l z%bMutLb+0Iln1q(@}#_}6_gL&ns%CQn(msOn%){)%^1xTjhDt(6QBv# zL}+3)ahfDere>=qTa%~RquH;?*BsUy(VWtp)|}Ox*IdwC(I_=4O^F85z#2?LX&6nT z=9=b)=9cEZ=Aq`1=CS6f=DFsD=B4J9=C$UX=Dp^F=9A{L#;p0G`Kqz}yv=J}EGceP z+^M*8ao6H*#odeh6}uOE6fZCKD)uS%E%q;7SsYRv+N2NeKdJezYaO5tQirH~>M(VL zI!Ya*j#DS7lhi5dGOJ*=`bd4E%+wd^EA@@~PW_-Plof4FH=}K62_04(QM{&jZE;NTy5iX4 z_~O*!wBn57%;K%ZImLO!`-@K%pDw;stSoLQHWow0Xfaky6jQ}qF<&eeUn{;*e5?3w z@x$V$#ovlMmGmmF&0VRPY!6l(3ktL}mStZ9y&Xrs$ zQI?dJl$YpAYD*eQpc1NtFS%KAtK@FUgOZ0Ok4s*ZyexTL^0wr2Nw?DOrM*h~mi8-^ zmdZ*8mkuc%S~{#0D3zCvDV^}I=>OTAZb7%CThXoQHgsFM9o>QMNOz(;(_QGUbT_&? z-GlB)_o92#edxY)Ke|6XfF4Ny`uee@?Pz;?5G|!;v;#eu9zqYLhtb375%frU6g`@D zq!sj7dK^8To=8uor_fXBX-)9c=~?tVdOp2?UPv#Z7t>DkGTMc9rQK)`dO7V$d(qzX z3fhPErvvC9I+zZjL+Mp?7#%^crq|F>^o-J(rL#-tl+G<(T)L!mX{mFmd#P`!U+K!y zfYQLyQ>CX%&y`*(y;6F$R8^`jEiNr7EiJ7q)t6S4)|NJuVx@Q~SxS}CrH!R8N;{Qx zF6&m-t4vllqHIjrg0hgZ@UmlN$IDKYoh!RqrYuvJab<7H-j{tYvnsbPZ(cs6d}#TI z^3ml$`GoR`<&(?jlrJb>Qtn>vQ65kpQXXC&Q@*ZzLwQ_zQh9QDYI$aPPWi6#-15Bg zJ>`4L50)Ql(g*QZPXEb#EgenA(Cg^+^aeVXj-xlyo9K8tflj11)5-J}I)zT9)97?M zgWgJSqqo!9^o}O_?WA+)UG#1`m(HX2(0l29^nUsPeULsx=hKJjBlJ=F7=4^RL7$}0 z&}ZrM^ac826Z~cR3VoGU(gk!OT|{f>61t2or?s?>uB5BzYPyCt&~rGN z4bX;YBehZ5Xze;}yf#U@OM6MH(w1no+FGqaTdy^0F)gL#w70Z(wD+`6wa>IKv~RSZ zwPx*C?RTw2*Gp%so1&Ylo1vSdTcTU0bJ2O}ymh|10A08)LibPV{QtKWMbk7xvouHZ zv_OmWHTpVzgT6`MqHoi8=)3ei`ab=Den>x}AJb3hr}Q)WwBe+tdN4hiUQBPM57U?F$Mk0gFasG|#*VRP1~F1b#yBv8nIX(jW{oaN7psfY z#p{xEnYyjI?YeB;4&5%@Zk6(KYI>>2Bz5 z>2B-p=^p4F>K^Hy>R#yH>pti{=|1bsx-UAb3hRni72PW)R7|XxQZb`qR>gvfg%yh{ zmR2}bxK+4UcvN^*_*R5egjR%AgjYmV#8j-Sh^>gP$f(Gy*jll@BB$a~#pQ~t70L=# zg{DGVp{uB@sH$kFfGQd*u2p<%(g*KXPX5V!7&Dw1#f)a;j3c99#xmoW@yrBfA~T7Z z%uHiuFteE1%p7JeGmn|iEMyiji%ejx#5ilgw%640Dz_&s<A%~eWU)S{=NQ# z{-gf0{+nJ>)x4@@RqLuwRo$wjRU@iqR4u4lShb|exyq}`yDFqAyehRSttzu>dsS9d zcGZrmysAA_`>GC99j-c3b*$=Km8wcx#Z~cDja4_Ro>jf6dSCUq%BtF?x_NcG>h{&0 zs=HP9tL|StuzF7Q-0B6@ORAl!-K#ySJ*&N|S5*5{2UG`EhcxMf^iRI$e_iV<^Nsn= z{9r6hGgiX3U|X`S*w$&m*Z?yLv9ob_bASZ{U(>%;o8eyl&ck_})3*&sHU4PissRcsg=&PK4|)vK#x zs@GL-sE)0UtKM9lRGnO%TAf*)Q@yJ?w>qzSPj!Cv;p$7(R5e}ARg2Y))px5OR6neK zRQ;mbx~5f4>zZCQy=(f`^sDJ#Goxl^&77JAHO@6IH6AtlYg9GH8mtDdp=!9An>BZ8 z?$u1Gb*c5L^{ox44X=%;&8yv0yT3NS_EhcZ+OxIiYn8PHwMDh6+Tz-h+S1yxT77L* zZB1=$t)bRf3)RB4SS?lCSbMGZM(xeoTeS~sf93Iim9J*ku#s#OyOxb+W7u`;d*5dx$;4 z9%YZSC)kthY4!|zmOaOwXD_f9*(VpXh~)v(2EDO<*tvpTkdtz@g%YPN>0 zWesc{ThE$UkVROO#aNsrSdyh#hGkifas8%7vL8b%ucgWNFAFu^d~r=N`L!Pfhgu%$nIR>{s>&YsEF=Y&Z$moNK|g&SKDI&)pPu3R^+ zJJ*Bzwbq_oFRnM&hwIDr;|6d8Ia|(-v*!kJQclJ>aD%xa+)!>9H=G;6jpRmgqd9<+ zbB>&X8^ev|#&P4h(RK1V$GS0f3+kNfT(WCVdco z<>a5tCvX$FN!(;^3OALT#!csDakZa0_9<#Btsz1%+T0C$i(#N~5`xg*?B z?ihER8`ChQVQRyIhLDEPhVX{ShS-L<4fZ! z;~V39<45Bs<2U1X;}4_7Xl1fCH8-^|wKTOdwKH`x^)mG~^)>Y~Nlh}-5Yq_LNYf}2 zU{aXIn8upMn6CO4D2$;0Gp@-qdPB2Cezb*6Yzf+@+AYRWQY zn|7LZnf99wnDR}>Oy^AJO&3jjFXd&t13#D_!Vl$#@x%EM{78NjKbi-4Iq%3T_%Zxg zejGo(34Q`Uk)Om*=BM$~`I-DIel|aspU2PV7w`-DMf_skiFf8*c{kpj_u!ZFp8N{l zhxg@CbMe>!d>B3oABSsU1Ka?EFa#qo1=BFwWBv*MjQ@>)&cEbeHPP=i|Av3d|IWYT zKk}dXFZ@^j8~>gE!CUxdf{oBzXd$!|S_^H2wn96hz0g7ED0C5iUB8FWQ|Kl17WxQ% zh5o_-VW40q*b9RMncyG{7KR8zg<-;QVT3SB7%c#TTyPW=!Wdz!FisdROcEvwJS@Q1 z;Op>B_!fK@z7IcypTIBRm+))&4g41V44dI^uocn@X^pf++9BHh7(Iu!e>V+{qD<}VCK2?||Oc!PfvxM2g9ATa?Usxn85uAi&g0tW%xCzSzPr+MQ zA@~S>g1@j*2oM6B=ocge3n4RqOe&= z5|V{2LW+>u1fM3P3z@<;VY`qeWD7flox*M*SJ)%$74``SgoDB%AzwHw91)HR$AlBY zDdCK8RyZe|7cK}Fh0DSfVG1@Cn}*H7=3)!5C73(rfq7zHm^T)Hgd(HDE>z#9)lVIP4+z0(*m578AGlkW65|j zmE20^kf+H@q>5}H?~?b(hvZZ84f&RQM}8o`kyez1>P+>bMp9#_vD5@=N|WEgf7Rrl z%)5&{#GYawv9H))93T!9?L>QVkSG;pqJubC943wsM~S0FK$MG)qCy-eju$72zwU36 zI9Z%3P7|k#GsKzVEOE9tSDYs<5EqGy#Ur&Egg@MNAdb#SAf1+$wGpw~IT( zo#Gs7E;XN8NI6sPlou61MN&~z3>8ZyQOQ&qb&fhuU80m!2~|p!Q#z`aGEfZ^M8OnA z(G*K@6i?lxZc%rshtvz|CH0zmL%pRwQ|)PhmeXVC3G^g-20fFWP0yj{(o5*2v@`8a z`_g{&N;;4Zrz7bkI+M<#Ptm98bMz%zMXTvzx|FV<^>i)WNWZ5)(=D0SOebapGm-(A zG0YTZDl?s#$t+-eo7@NgmD7JR-zDxAbHzR4UU8qeUpycl6c33<#AD(K@uYZ4JT0CP z&oH7fu+7%6Eo;Zh*dgptb_5Hs6WEFD zWOfQWm7T-RWs}%sHkHj}bJ$&ME}O^hVe{F;>@oHfdx^cwUS$i|5?0IV*#_3gLM+Tu zY$JP*eZan8U$Sr5_v|@ISJp2Z^w7zyYoHyDg0D^ z20w>i!Y}2Q@h-d<@6G%20emPQ&PVWT_$WS>kK^O{BtDbh%5Ueh_-sCpKhHxv%ws&o zGkha|jlaR);ve#l_^12}{yqPJ|HPYlE5TZj2(5%pLT90?&`szr^b>5G{2%;(EBo&+ ze}@67FjANxOcbUFGlaRq0%4)BSXe5!2=0Q1;3fD9VM2ruBdil*g$!Y!j@cR$YM4^MWDb(6TS4hRXBApzfAPW?3C@a{nDXES0~S5UQ7H223G%UpA!^Hhs{~tcWtk@;eBxH2*^Zd=^l zqz%dH`o9a9Ut^;Kb11B05K(kK49U z*tmW3`E)eX%6xI(&I73)XM9{dtXtFEI1e$QRtd^zxCFcLB)JactzbXMBw?EMFudnK<|u9w6m zBu8zzoVqhRc4u&&%kk`>#7OsO=j2H#gLWjjEDAinx%W=by*c}oKYvCa;9Tw8!o}c< zyQa9scxHGV@!zv@W1upS2#E}hURAm3{i;LZ+oQI|yp1^-dp;J4y%rZ4|04cQ;>X0f z$@`MKr%q4pn|3f`)z0p@-Sh74v&o;3zv9T#qjk&NJSKU$cnAB;^VJ4)37QqI3jaIx z{Ws^Y8F(6gW$lu<_>DyT)WokzYqlh9X|?0@j_EnO4>lZs==RKQk^4ILFUx7~5TD7u zSN%T)jSrn0x<2&Os-iGML{;RsxV(*9Hce05pJJ1GIyE=#ar*c4HyMVl@~o1q^E+(J z$8tyQ0}qDfHy-JF@}>LH(BD_(hR;YGpA&HW&GHb>&VDUcsl)N`A8Uuip2&K5G(1vb zzI5d1vPhS8E+<{xeIEHa2Sf$D4Z0XSIrQ3w#Kg1P&gA4Ca&)@q(<Di`@i7CmgQ@^D(Pj8ccCp{=jvGZF_?e5Nb>b#J>WqX;!bB{bbCLTX_vaRO~UnJwy zp{s{VPV{xpPdt}$Eeqd$FVD(rfp32B$;3jRt}7D~3ln#zD|b6MPjLP0y2-7T=ewZw z!EJt8tc>4u-pzAE_|}cP`2&-F+OEVzNA19NFFxGDylGYZnv$HquI#_jzr(YLTVfY))}=qs&}2{CN#`y++}eyd9r9*EIu@DU52>H0@ekskL;7YDmmXN$mQmyqEzc;9hPl$Np-pD z5x#t~=NHd!p546Xd++mZ@X7P-;P=*Vi$At9HAoD75c+rO`)|%)GcX`*V3_~UhK3E{ zD_2iiGbl1SGX1CFK>h}Y*kQ5hv1eoB<5J?%;$O$lOqidrAR#f~z-FuDisY=67O5js zb5eWlShjOP&Zb><`=tBs=er#4aHQjr&?9?KAjun-wRV3M`ha}RS*b1(Cc9lgzc%ze%M%m-KXH!oi|z&z0W z;GnH}S#V;or<&pHc{W}b_Pj)a5Hm}b@miJmQ#5~kI z%skvY!aUn)q&duGf%luRPN}2J8@yxvkAxrzA67;NKtY>>pZJJAS6oM%W4(v2>=FQ& z%M z4VY)1Z(fzQz`W2r-FK0Bv3ZGksoBZA%=(lcdJ<2$9r7H->L7vIe*Q-M5i*RdCLktdi{L-WckYS(8r;vt4r4`UHfv= z>%;*`x0BIrd$Sz(`0T3;sg6$EppA3STkf&cvm%fS0ax9N@>v@dt&4sWH~Z(q>NB@y z{Cq%V#m<5I_C@}@m9)9zZoj-v9?iVGyn_5&2Av4G8@@44NGjg`^uzoDOaLT5j#b=pXBDZcNyuPMDl1$-JEXGUwf{ z1-otXy5+g$ea~CEZ{xw6hnO`jV!YO$Ss%V3cvDTn!_7yxr0%@z1qQ4N{r=O+Iwx|# zI(XfRoUZv%PHBm^oRluO3-8*_{bJy{Fz4_);RB+QqV;jbn;s>;PYur8y4Tm`P^fR% zzOcqPFmXf13iG_2o_QnlqkU`Bj-=1bi_UAm_t47Ye%`C0b(=RX-28B>War>Lz>)19 z9|L{N5gWIr{H+52oAj3qOy5?q{c~1sp0BxY)U}w~8v>K3X8M^|?|FOJ-<<9g=O$Ux zWzDphzUxPB8*pNY>)Bjqzegb>LVK)v9z8qh*cNb$~KwhE~kP+;|iTxI7hg^E@|PNR~II!lb$3+r!zbH=8}8LmW_A$ z;5y6wh5y>XX+g%&>#Ki64@BpfuJL+j~qHdoH*)gTD56S|Cr$kLAkRIZ?qL+(CJZ_Eov`bUo|ZE((gN%YyyWLkri`MNdnL z+wjn7+%og>mFAxZ4*mKCXf}-8d?bZPnU^{sZ_M702NxXbl^=L==dz2@g$X5l$`9Ul z4KQbgG=#9L{iA!ubXxypqjhSFZNA%H?`odwcqsblm*a6Ka^h1GP9?(`l6@&B_MH%R z-0_mE92_<{hKvnJ+LCJLG9)HwJrZA+b3NyM&ZmRhoUS{+@)7(GhZ5^%Z7kTdDD_+B z-zxCGNq@;eQr_UByG}NG&0G=W+jaHzsE*N-H;zsozh%JI3E2<#Ek2m-%7nfPD~XsH zb!=_NnAWiYvEDzM46lhFvC}_4%4Jkg{K13EhCBE6`z=bFJS=zT$~l2O!voFR4l=Gg zQ*XLpF8&ey604KnX2c!5zHF##zFSB44j!St7XzHaE`>)%rLF(GzC~@eWTx3#0 ziZ&%XgUq^@h3%pC+&>5(?eD%Nnp&41`(^8u-DeMa9y@vBP#7Aeh<%#Ye%1o^zl#Qm51GrR-U-+`fn@QI#>d60L?>)fcI#;e+1)oQbU4&M;_p}P_os*c81=J1n+nf;mOYWcCl8?NwURRO=h(4{$jG|{BaWZ8e?Kx4-|{H?jwt^ssx-=NCSPe)Lm* zm*%4WrFqHD+Qn7-@{!LBemMH0QKHf7mYG&&)_-;Q+Tj6D*AwS_PX|A8b}if_dii>m zL8kG;CIS;R3z@~H#p8B!b~jvWTnBwFUaHjp_36jX9@RXe)nNLld8+xJEkCrWwJUbL z?soC`r4!Ger2Bsm5EMKejzyKk{#osNtp=?gt$Ncp%~dQSEy}EC?Q|WbuG;Ru@fh*g z^k_aNJNBm6KYZQ{ken8UKM^w*Q>H00Wtsn%gU0Rq-@!t>FV_i=y0DZ;)AO^Jzq;~U z^)U7C4|DZ?Z}5$wr_tx8pIPKslvq4KJ8OB>y40cK*egDKKR^FB0@4B)L7}H!r$2L+ z9r0dN#Epm5m(~M@xujzR+N6W7qo^>wssQ2skTMk(XdG?GX^bg@bMcPEYt>&cm zykV2&Z>)SgPI`QO#l-MI8*68gvyHns_T|a1f+vG}V;)meJMQGmx-_V9uVIGOXLhP~ zJ$6Yh<;U*|Y`6Q^O{N~AS)$u%9&N*MJLIviVYep_zSGd=B^?AP*{&MX7m;2OS z(S28URo{VTVf(nfw}X%4i0d2flYzY_QuJXpgT|hCZhHH z($$AmJ5}e@g4GXcI%@t-J3?D>_zgYUkpmfcn`vJU9MN~zuh+k7NW(l#JuNsE4)!dE z4_tnC{PPnZ_^SJB_+R$_A|N(^7kC%_pP^%+vQW3M+^~s=-pF4^eI3;mJAU;Ut$Q{9 zpzQ{~T25QfLGNEiOcMvw$7m<*o^!7BICG-^#PdGFfRfPpC`(LV?HMCqqf*m99Q}o5 zx7CSbU!AnO_LOR@`cqo3YiVc&>X{xnZJ26IH~G%g%QV8`v?a${WGlAqu3g`#6+6>#ZK4nj>|u(o>je~+OGPs+F#Xt z)dt|7n_Sdd*Sc3{Sf}UEw63Y%<430TH}vl|SUUQKVXV;$##UxmEs`u&EoGJoR>y5) z?K+pcn-(BxK_LU2Z;3uk*nX<-TB z{D{q%f!J%;zt^N{r5iyitzqSG3u{tIvbc-=-Ab|{?`4Pd-UP_k|Y5YTnuk*~IFZ7=^ zkQjVuNH_eaVX5Jgv4)k2jjqF|E?>A5yR3Uyc%>W{`7VVlpK+y|g!YI2I@(aTz-=qE zO2-Z}@&1jEOMr{ZOYX0_+hflj57w3G<{u3=%ruNJ(lI`7>TC9sMI^0@woZH6YSGHi z#n8>+xPy<_$L03-zx#*wK(nKMPXr_d`<}T#e<5Pze8csZZ#<=EulJT=ukn*KS6YOn zx?P36k>ipl?^tC}UE~`Vx>Re`ztsrR`GtPG{x_y4E$S@ZbMSG#!|iLg({4p>b{>4M zZXcbKTwibhH2;qRo;x*j+MPZeb}SLEj|4Ba|`Lybgri<+}_V;*ybo?D3M=UvXM(gcE8oC+! zj~YB~Fm&__(?GK)&EKM>S>@Y>*e5x>9bFVy%b@qzjgFs^Wq?bh{2fC zu4nZx8=ti7w||Mwrr#0qP|RO6oiGijbH}1CIE8dX&Z>22ZRvC$3OKx_TY4l!Utmyd z@T%b*Ci@z8d-6aYc-Zs@(-5;?n}1+&%;F;(y6vCsp0$71aol;*<(TVzZmDj+^Dyx& z_B!l6<(+dP+(+nRa`L+GAN=19j0oxunhK5zNv21f{V@D*5rGkQkx}P!&Yz9qL~*0U zQ7X~*$3(@pU4HJ0Nb98TvwBYYMfxrFM;vcBzv7nT7VNhbIC%855#Q)<#xoXASUFm2 z*_^R`-+sw{*mc`O==sy}Cw+eF|LcG+0+)l#f=%h=^wW_qUbr_VJ@z3}t&sU}i}Uv# zeeLLh47|;>uLrD;8o6Ebw>sVKxNX|%`@tEPGcT&@s*bDoX?~;SYkD8e`s6(!hEZW^ z&uV>es7{Z01AYE|oO1Lvt5&o_oQ-4hVjPa!YFAU0z{O$HN z?Dph=Jm7*Y*#E-mIrpT1ReG`Nms+k^SJb0+*Hz2aG&Kx$UOh5l@VKd-OF;lXaQl>A z$P4t(qbj0)8T-Jsqt_nPO*1Gs`nBPp@lz&)W_Q}W>TqYI_660L$F6$bIHR9!@PL^b z?OUtAdX_|mMQg|0xWcfw<80lz{7dia@C?L9GYq3?KYA<&R$Xe-%{Ogy`Tezd)j#Sz zYWxW;(01JGch@dx6>FCre){P1CSqEWeb}*+0WncuM+a%0FpV-xwSVyB5B@*J9LT`i zO#6C3X7i(O(zWNV8>xPxo~iL`J>cZmT|V%0!x|&sHFC#1u)BRm0~~|$f<}YG z&Us>vYR51yY()1feLdrDvtL=*Tg1@3vG1*aYx4{HJDlvCTiqY_Nb_>?K913SPhel4 z@xd;fEspewI*C0Pd-q|6QNG0;jw&8(uj}-L*dtf$ZrrVrX%cA~W>e|^mHIonG@}Qc zRp=Y^6Z%h|+EDweM*5+z^>}8OJ^!e^^(l=IRXsId%n$R&0`vlIfBxGyvIma9j&%=*~pTd3>dm0PD&R}d+IyP|F%jlQ1vsfr5aQ8atcs2~X zH$wk1>(Fbu>v}I8N!LGztr~`75tzE!CuWh@r`D(KitNtWU$9@Xf70 ztjxLH`68xv%<DSVPZaj{$!P4Skb!eCSS)rK(?5R&TfKS}yM|rIf{laiZ(u3T z|HK$r%B2LYI4mAxVr`Zz>>U1&qPlqmv<4i^!rNT?d4P@OT^haYbG@9#!AhLJ3*urt z><3*wCcv_fIvWYGmucr{Ue<}$AKES1ecPc?0K%gbbHe+`q-q;wC}I{b^Naf{uuhlsK;aGX?{i<7H2GN?9RHrrGD2D z8{1jWr}gZPHXMD`Rn0vY%fm+D$A90}eM>J&uUl_aKOZZ=;*NHhK5c%%eA~Pb>!lT8 z-`W&o|8h2WE4f|&4;bV9*h0LMyuUeVcv8jB$-fkvJMDkw<+FMbWtd-tX6#9m_iWwl zUpo2fnUwGrwFLEO{MXeTKBJqXpKbUzlS|g2_LdHr4i}wG-G1->rn{@(hk-Rg51zYt zq5ncTc1~48%|rcljcTnrttG9~`fd9EW$>IyfXT9jzDu<07jC5<>RypvIbQer6!@ME zXb(0#RT}1dO@8S^Q@Q%ypu7}-P0{lb%9&Q{_iJ3;}#yo%ReoK0o;rXA`zEkg4ch-9N zut@KYBM%rjnMBaua(K_>2e&z&GQUTHXhEL`8=ck<`PG>_&+0_fMXOzLRgF}8Lc>O* z3VU0Jr{k^9(m!G7V_0bTPvZgO`%NA&DL4Dj;sMKQOk~+@S%aBan_B1Cy=GsFedthk zJO2+B;(fUW9Y1jWi)%e*;P$S21E%TGh&5peKHL5u2DOL8(0k}o`a9?TcJBL#&mz1d zzKg7hbhyxrwO|kEwqk9zXZ%wA+AtCJrG~BEM+WVf7&CX|xQ_VU7uJD2b3Xi1C)R~^ zV?CI!-y^2KcCzvbJKc-@^RTt?HzrxOg>=93DN%Z=FKJKPzZL8hwG=%YBQ_hhi;U>g zs4>a)$F5yddrn>Vs;1SU>g`y$QVmZ1L#xM*2pt7)!80YzQ01K64p$9l@O38{9`Rnb#Qhkl&yD zg8T*pGy=!539KMAE%bE6BsPUD$2=4}jm=QmjB* za!96Eq5qUogOP*7EH;PP_`DxDk6kzwMqj|}qdlV+u_a7J^@!R@HB5KZBF^E%h~x`7 zu`<;eUAkVE-j~M9*b4Tf_bR3qSQcub@wL{047|;>uLst!bqvEARIN32^os&Ssvm1| zwQKbLrKhfcSl>Y3%=lZAI)_*%2j^3+Yi=3tCCA?IxyNtH|M!8<1lI)5(yK!2qYTtG zH1iJ$EPhWr;gs$4zDt2mSip~w#ZfNTob|`8Vr;z~`#mBJ1T=le^y9Ce_#mV=>VDM@ z)t9yYtedAhr)#HopTVCDgACs{3N=fm9kP7MCf?>D+s_^U;j)3LyPkEEcymr1^B?dZ z_ooNi1^qVoVsKM%U&t@Rgprs>O;Fm<g$@jTP!=2yU4I0kDt7s zKmOB+&rS~b9uIuuY;CA{*kG8^xv6k0+&ZG=!dGhEYH8|L8pkw#(zMYu(LJGStarbG zjzN#%72|hIe`!@@d%s=E?azM)itzqSs?IOFz2p9&yN0`q$B)O)9#1%4c|8221O2n` z@4`Pnf8qRZF1&G37Ih@XHs;0H`!ruSjWN};H}|OZEoYcHwqMv4+fUfPhB$L{)`r;nZU`h~ZTcj1Y1KHmh~NuQ!$4}B~0 z`^e5n+WGqPFJHJf`cU-#mffB`hzAU!?~Hlm#s`{_nkRJrOZNrCmyAM<87U+xNfyLwlfEf%ZFxzc}1sbcfk}W{&1>TTEDZ)2>;jS(@4!+g-MM({a@E z)nngz9rk+GC(iFq|0Vxx0a*dRIvq;i#O@9&40DNC_ITF&FW%ZGJ^k*}5$U+=zHRm! z^Y3Us(Cn?QSO?j@YM*rj z*yr!Z(4xy5emvyt1M07+yKBCy^VcI1Lnos@n;2R=MEigi zM{BSycX-e7Y1dagE_i?BuNNQ=%n!;?pFdozKcR1J#4!8au?(Nyz*mB+B3B~m8Y`BE zZvXt(zL7oHq%gExBTuiuSm)HQ)>QYkq9tWAdD7o9UuC%c9=lWse8_jn5fHm%0h+njg$o%7LScX&PG)#~-Ica-0;fcAjz0>29m2n`N1jXWEf7+I#)a!Bgj z;i+Y3y%eZ2svlbZo9dbSDyz&D65Y$BHhHZsE5&1*p)yT&#{OZEx3q4UETz>fKAiZ;L=hn|X7V#?WbL+3%HZ=Zd*?ax(8WN)@yT#K-Lp(#$jWhi3y8Zuu?;F{J zP2LkG*7`{M&xbxZ@~#2hN#c9N?_PhYe|*@PNTbV(*WA?0RsX3aGk(*-+#p2lztl%` zx(tjAEsQT(<=K_n7dngFm)%V~p7Z|ByUIuAJ0P8_~tL)Y}qjUjVeTAyW!yok2Aa9^HV>5sJ8A~=6Tka^dC2LbhvB7I`~J8 zd9By=UN-*0N2J8uy-{V(bc{5=+d@_2G3}QQKSDP$@vypQ zqsLwIxUT&z6E7F>C6mMdII?_{Zkk}e zVeV-;WcQi3{+2N0$-`B9)lLzv^>ru8E zQmr4&tkv$;i84NHamCKp{zsQBmuI|BpSc!lZ*MLRLY_GDi-@W7TQQMW{%)8~ z>!UsHbg#>O8!Ku)nl?sSCR&!y+T7_ljc$;Zo50q%XYnH!2=R^hThvEde>JKws<*3mHFZDh{*U9^0oP*HRR0?B3soI8 zw$`J1)rRlT((H8HJOgQ`i$m2TUW|U~YK!hMef3jMo=v~js&8c+X1ri=*zPxu@s7_q z>G;n3MqWC9Nj<79+C}s0@GXruw6nF%bm%&HHW~JvKD2HVL^uA}%8S0yow{u%`!=w%qZ zX7qvSx26x$ENRoW*7i;IhaA=&E;>paCmoMEHM_j(cEnBMcEQ8ItMhyZe52-JUy`2g1Axy;1_^0-fn!p5=zRMgL-B z+58QQ++%siY`s5Jy{x0I$JRe?7;oHTW@2kW)3SQj!NNJ&?S7x22D$`e zeQ{R%)S;vL-&zD))X;8Nh1plyAI!qrT>E+86PI*9_sE|vC#gNFep%}g?Z0ZD(W%h+ z+%VMWQ%jn2pX)slJ(^3J=DLl#cRPnW%bb&ge@PFaaf3NJLA39k-wpasD^{n(R?n!w zXx8iu?HlI>`U~NO*B@8=*u2h(=5Be)+*tMO`n7K~RyFR|`oMnOujTqvwBOpsIJLXq zrR`;KpU>0umu)|_{fF&`+D^uw+PC}OA0Srm*SM-$6_t1{PT?`efmX>VWUTSlc`WF+#xWVf zxK*AI<}vOncY~XRR^i-uW1w~NzTz3DL@Q$ODdPmLkf-3o-wdUZd?sFrR?Og2#tD=@ zRgQ8$?m%4l8YY*y2QQ1q=CVmThwR}ixLhue2mj%HMN8%-ag&rN0RAn} zMphH6nbpFA>|nLAM67m}nAO4RgfX=ZvW8g0tP$2IYm7C{nqW<`rdZRg8J3ha%bH`& zvlf7Vk+sBHX05PRS!=BIUF)f`{u6zUa6hS#^ul-{Q^*psg^;pBzEB_(3KN8h!X#m` zFh!UuOcSOHGlZGKEMc}VN0=+j6XpvGgoVN)VX?48*dlBdwh2YTcA;3_dbh=ih#X)s*odNRNhZuzF{*dXbnY4}ulY}mustil22f?ZP2Lu7d(Zj*z9wV; zS5<}@N<1?5(45J^Jt5g+Mnz>bZit|FAugP=mLd-y|4-W*cb#%>LCm;blf zJ;)wn53@(unK$XPTfhG=$CbCpEnJ5|h6Hd}7FQKl9ak4u8&?xoe-rmGV+dh2H!g>q z8)b|jT6SC(NgH7FGfL5@2hH^{dKu+$73BPX*5+24{{;lm~2;v0s0;Yf^U<)|-hgJb!AP@)z34%mHk|0@- zB1jda3DN}_f=oe{AX|_l$Q9%X@&yHgLP3$BSWqG;6_g3e1r>ryL6x9dP$Q@n)CuYZ z4T45Nlb~79B4`z~2}FW+fmqNX=oEAbx&=LgUO}IrUoaq$2nGd1f?>gkU{o+B7#BEhW;Qd2naj*$<}(YJh0G#mF|&kO$}D4+Gb@;t%qnIz zvxZsAtYg+Q8<>sECT26Uh1tq%V~UvVOfj>A*~#o;b~AgJz05vlKXZU7VGc5fn8VBw z<|uQFInJD5PBN#M)65yBlsU_sW6m=dn2XFM<}!1IxyoE)t}`*_22;k|WNtCHng2Pj z{GTE@g_p`pm&?oJ9L2 ztGLzN8g4DOj$2RM0s7-=IJKNQPCciA_!N}O$>a2L`Z)cZOimUjn=j4KdzR{rQsi-7vGTPu%138D!w2TW|;k(Vo9j+~yFY3>gR6*YYpA`!S{0Rg(GF#B3hxj1CJgM*;8d!UkCNKu?-lr$<=2tK z;{NyBpbK5&T)-xd2)YG%`0*$KW&S22Ly3 zsIG6AYbWI56uiZO<#=lW*^0&)X+@(H6ag9XK}&NHXvUN(c#ENa3AA7VWH9#8@)}K${w$Zf@zF?5W?{ znfrHp9X*N_gWW1Bnc&|6z)Tr4s&@Mbc{E)6I^%*M( z2urw}>G5_VUU~EQI0Njjsc%QP5b*IHUU%R;DrUW z*9cJNc4bWpkA>Ea1IyWfyxMv$@b8x+LcTKw<;<#Rb~n3CndDmp*NG3%V{}ay}S)0gtfJRH;9O*Pn1o=Niwy$ zvAU8!FWSnJl!3ju&ADq!oee~+63N_9$bmXSsqW**b6Zf;5?kkHJK9I4;?}1diaJtc zIR6ZB`lR;GG;cM|6S|ZVzLyeS$2r#soi>r@;z+I2y71ZMP8F4`U6#R)psl>cAuhbX z0Gv$}{RjpX&S)#80`Qdl76qeOYs&aljQI1aC5A(H5C^5GRVx>!9&YTU!$n z`P0!6N1(hAd^3;a%lVk|GlSzzbxS;HA+dvE{Tv~yaTTY?`tzEz+80Rw<1{XCtdkka z0h=1TaXM5T33`zamUNL^iJ=v}$kN_j`LGDJ1ta!d*px5NZ^n93P<4g6N%)O5zeRdb zvB@$KM`;5KSt1aZk~k`yFKA^F=u+_S{mw+5Z2;a4u%!uX&jx(00DAD&NXlqH8nuX| zFgsm41W`$aNG1%|i_=krID>7oW#sx`#=!Rg(sGD0L&-zKz$I^egkKe7{GEiNA*aY%8BJWs z?#$(FguujM>3GT35Yj4*@WV*o-2B4oJo42FR1WYI%!@!THvB1~oC8guNtZ+}S^gAv ziDv3h^(v}O2Ky($dPS2$wl$GHUf-j}C^(_Uk+Yo;3l8Zc!Bi?jEY3OKR6wx|>IK{e zZ`FE~`~|)yvDq@oTaq-lLZpW&v4Kbo!ToV{8J+(SOUhjPc+pB+Q&K}bVOw&;_CkDf z(qKHqk6oL$HnmvY-$vH08o2S?-1@hQiHw}W8e2q=KdqwpF78%WN8?%{^1SjIG3+%D zo*102K&X+=ZXm3bLG%ZdJOMWjs4DU{x)l!|+w9_j4`&JLD3MJ#M>E7Tg{au_6>)3w z_rad25Y-e^M-}|3AWZ=N;!tYN&~UztiE<~GtQAlNskXq`!2~O1$R>rXTfc`19Pp($ z4`XodnL}q4W&Sz74V}iyKxq<*RB) zntUvx*r|}q23l=@CES8{S~oi!vI;o>u^~XTBJ_6g_WDY5~N66fPzlVo@ zsnYET=h{LsQc+n&d78URmn2f+An8?w?4NtH=j9x2L?-4-!2ab85u9;bL;Fa}S}xs6 z2EWd14N>r<*sTCiJw8=7(AqKt@n`PRSHZRSTL5b%H+ew8TSbY?Jmk$Rs^EOWw{`v5 z6kjUV?EhXFOjF7e`22-3jkkwgDk>~gUCM8%-`;yAqk2^YzGi}cnMx^1lEv?8T?p8$2Xh@$lZako^+DMxieF;afB;M)+0 zFkwUHit;RE!(ctC;{Bj+2dW~wId;ZvXT3VCpLpgDXT5A*A!lr%)=p&M;p+YBI)z0khvtlW_z z?~S9?{a_Q5kW)<5w?5FdnLOdy$TG$1B}%@m5vM9X*Ng1irbG^>a(0bzn!I&Q!)#L$ z=_>{O-+Rvyl`Lnn6Xj$ls;-NYpOcb4w%NNs&%%;?z8U4747^?0vjARRBqGoYUTHx# zr_^_X|G0Je(}iSR-CuSuI#)`O2Ap}Ew;1Js6yhdt(-RY;WoW)%x`=kc>1$+62)11> zQKNvk8I(cnQ&4nLQEZpmT0u%Nkr92U8ZFH(0C)OL8NW-YN;QGRR^*Xoz-b%YspPE% zG@2r6TP}H5Qp`e@5$Dhjr2%wUT&TJU7wcW6aE8d+D2cHOrRuXdK7g{n4*6*Vp&jnk z@cErh`Usbhfo!UQ(`X1HQh;s<%#I2;S>&y~aZIe}7bw-2hW;f~7bIvO1&{naGgBy= z23yxDs8{CL85NQz;ZieSGK9X-5e;p%0!}FVwUOTG2mP~`^VhZ@<}(xH2uEv_s?SAQ zDdaCuytjztEjK5%j*^IGHK#A6Y_21;RQ9z1_W(ixm$GgJ;@C*uX_pXgglpx~gHnN{ ziu8I~YZ2&-w|WwrMaZ8xZEJM2uYq!(Sys{#=U746BAsZ3cPD8rKC{!tP_+3(G$lkW z+L>4Mx?rbxlsSFqiPKx=@Mi{+EP$A0kv_|tO^3?1BxxWk%*xCx#DQ0rwCnVS@2kN! z9_T&|NS_1jz;C6ysgqQBCT2uvBE5?b*~pK}~>7*~) zP`#=o&Pj!(^0%0s3^8hAXCd%b5)rSd!2^+}c7~+*`K+mA(&+dEouL z;ap^Mw?r;$4S7=DPeVH6{S}BB8!AY~Y7bdQaC$q^dJ4|s_+9!AY~k|R03#dGjY22LnJByahcXa`<{CH)qm6wCcf;r=Aw{z-JUu260S{e!avM)QZosIt#ea(98ul1#J`*Qy`ozZA}=F5u)sC8oA53X(-o zO@xx2*J`CJL?|9@b}M9e@c+Htx%_! z1j=hE9P4ddqTXgf&WH%h6q@vn%nk_a@+sAS2F@Y8)lp;=VM*dj3g-C;kvu>d+}Me_ zk+rZ+)WWW=0f=$+dL^32c@%AoA_M-81Vyf5tR3kzS2sZME(cYJaY8n}zJ~N>E96oE z{26R2p6`Y`V@KaSR56GXaew3~VW4B91ZIns&M5dB@v$`ao&U; zI4RH#n2YxB?CY8k6LA^>bPk~UC)up-NFeY(H_%p(!Hm4ki>i9s$wV;sG`YW!%mBbNX>wxIur}I`4Btc99!Vy6eW+yntPON#JTcUn2U{_O-f!_gSvck z8-%>r-LiJYWd^)fO`v!;uVOrbDozQpvV+70oX%n~@RRZYE1xw(^k8O<4DI31oP7>jJE7 z8y=&0Sy}$>k(BuUZUgDUpKn%*#}H`4A?zO=#EAS`9hagUPTwp=ap=A2Y+M11O!P_H zHetR9@E{{RveCvQaG=nm18`U-QjB)q!vwl_C{my#NbvFORGO?*=~UR^lJ~|}`yhJt z$agi!qrA~oNg4$o+hpCIhrFAcnnxBv9(Sj&FHY~sDmXyIpw^;2 zp@IPVA$MU1c^d^USJb7Wy$T>}Ymn!9rcAiBu z9lSNy3O1&v*T+YRm2&DqpB*iGb215!$wb4OouErQj0NaiS(@GiAMG?z+a_eq80?M> zF@{7C{WVGI$R>f=5dw(<61fGS_X25!LQXbOQHvp_8?(zO1Bb!p(p^ZNXix0P9L%Cr zl_E)*YzjOX2Nje}g2d|z*;DLx>vt`R$q?aNkch_9=!qc&Ck<~Bvzw$%`Snvu z@f{gmK-n`0)HN&z+15$Xd9VF>*bcRe;4L8RsqDn(hDRDv#lZVrNF%&A-j&l@h9WZB z-3-;DtECe%s=rRSEQ8VH>e7U;X?`Bgi{wb`9ZL|*L7;JpllRwnY= zQcE>amEm*6&-ff)JK5Vop3ZQZ6WKmPSPv8w<>i)KsEK%6B+is9vIfQvZ6bTepbjZo z4dLqz@Jv6F)lAm8w)T~!M1+@WK*mx-)5_9lDMaX?t%b;*1*lVO5~+&S-CY8TtZ~Rk zycLgTP^x43u6W6L;G4ku$}L47ybAL9qq&5=JM>%k2EZpRfI4~0hSBoG7KsHWamT@D zYxjuqSa+II77=35tAWrf6GfUj^Yi@#wQ%gHQKtYxD7l8-nyX_noU(^UhJx>aiw z@1Ch!OB`4sKa1hB83cOTNpHXjySz#I3hEV9(CM`r&@CTqY^BV|rDsr9W+K^5;#|OH z4e}Wu)!VXpF;REh02c+s3K?KgLOI3YlxbT-H8HonVQG+@SthW8@0S3Q`4q&=5RqAh zoyQ5?>Tek>xyFiT33=O{l_+RXk5J80jK>-Un|X-BRq{V;D5qg@stR;mMs+Bur;8Ga zTtvf2J(mW?8%sgE1e9^OY;2sXR0D>9gYMKXDJXhrgXFALKKrxHR&ELB4$#E>M}|3VTq&%d1ex2e`<$ZPw?|i6=D);ybW~e3=gF9 z7R%9^p`khAR?~vcqAtoEr+cETyS%#sY}ufEHUeBVB!f<=J>@bupFn?B*SM^%PXw|v z#}XyolxiZ^C!=>=l0r(D2ekKgR+4oy2P#JKa4|NIcJ2W^N03iITJI#KW>w6W4A*Zq zka4dApVkw&X`=8ce9!}DOVWHTgk$0eXY(yJ08plB@EYo)yqA}Aw0p_o&=7m+tskUr}ZQY5j8Jc;0Q z5~;aj1)Q~zv@S?nnXT z^<&_*DgvX;u)2Dl(Gmyuhn*&Z57V_^b4qtr=TL9s(lU~rgYE)tkVR7{Dqttd=){|} zZAE8cI_dAej@%8-Yyn7FLAFki*n-a!;Jf%1F?nw9Xrbt>V{kI{V09wk>;+v@t*3PeTGR#6`#ys4ln-brYOHss5s+T_+; z@PArI+3?m49;`nHRQg!6BSsRs5 zPvG-MJr~K`sKcAh zm2#5E`FEbImTUq6tDpxHtQ{iuhP**DYp`GKd?9$R7f>p1Vv(5i98PJLGRReMPa!gC zoy;hlhapO()Qnnm`@rcdlp6y+ZXa$&`3ozEH%{HZafphy!zCc=;We@`1k^ytIGgfG_F*PgU@S?_nr8hmR#nwsp6|y@}Ai7;<(MRWzKhb!ActH(ZE$ z7h znPrH@!5W{)A0e695~3=Ojq^&ccR{{JPKxb06sBn4?D$9J|Lf;~)FolHP zik)`9D`jbjO^ZPR>HE|xYX$b!3 zj`UmTx&ZSj5``odc&!z~M_Win{Mdplxh`?nDL>u-UPkfnKwQNT(_tcy8AO#WK)KFq zsYkxt9)@4>04p-5Hn94!PIS&gWhAOh9eBF6tFCRWlh?hDDp-Gi(jt$nfeP)E-_^)p zC8RHR{>|^DzKtn}?P}g&QG;l?0r1c|_|_cKEu(|V`}6(WxjvAWrc_bu zP{jLCRH|gvpxppS<)Qe>C8nTUP1xvKT}Hl+=WaB=}s>DcyG3;a5Yu3y(u8_XoK)cHF&Z^sT#$L*5|pz z>^Q1xMZ^gvmpB6QDmsQxof$`GR2=L+0WzAwh6&lk^73f@a{GV77F>QNFf%s zUhuhbZm5n4D3J7TbytoQqA1{e{gU+6R*16<*<31t+72tS0EJsX?Sq_3@8-`=k~pdB z$slqQUtNgsB2=;qr`G^~6FTjS+d7~YkIgkxPGOv*n5f8YC{uf9ves~F_7q0=6(0cx zDTtO+ZvD&weHE=A=_Ma!c4R=+;({d*y&3$;C(#zykVtr<03y^vR;Us}yG@j-_!@c3 z=z(ll+D0`4_`#-BX%a*z9{HyP#)4TEc=_LNi)5U;h+0%j`W)(FLmuqeGrC4(frzMm zJNxheX*K9J*)moS_r;rAB1mY%woyIUna%G^Cao3>O~4I7(Ml2C6{8tAO|yTdHfGMAw;nV z9UDlG6)mKIUp9!C)giyN1B&-*BCHl6t(vTwIM>8x0Z82j&u>#~EG2QB3B82+jn!0f zrxGGMDcn1|vB+-=a>)6F`Fa@xSi~-g=%S;QU=KB zJI@5|XDF(k}UIDiP0VLMJ&jlh_eHUn4w7 zD78*mYJE=wQR%7?UZki7;yf&hpA>6k6b(g`zG7baT@6|=#6|FIgSaukQ~4AG&9>m& z?MTWZdn`e|fDW8cWBR9Xx>h&#*kWhqh#sLdENS-B84VlRsfQ3cKz+%AG zP){exqtFiWoZ_9P`NAb3<*tymGB4TTRPJSOO@O@|(dI-ek-7N%9DxifZyUlRm4f%v z_sLwiX+RX_*V0ga<$^EUkUwjrfN%?Mc9L{t#Dj4Y^LWxF`1U^TTRP%uEH%lm^JD=6YM?Lvx& zmHE0TsG`nH5@#fQkKS26ys+y&FiIePLsCB5Pu2wL`nc(MrBk|eGmp$P!Nky>=hPhJ za6Fky3t<2LEgxbr1+_!b3c;2|G)_k-Nd)g?wbfHlFX!w9N``b8GEE4(^`RXnDV4ea zFqqxcGbuzhNFlvy7uIUPzIsC2EYhBQ@hExbgKVX}#ULT2Rv{06S9h}k6KPm0+@Q*p zX6jI+R~qEp$y;2=!V*-cCx>c#(`Sm2WUh?cjC0KF(haB0LR@4Lya!&I>qq?M61dZY zUu)ZkI+DOU*?Z(e0~rCdRHb`W{)V5_nd=_fM5AU|0{CVGv`cJ}_BO%_Y(ArL6ICr) zhq!sAZvirI3wYPateBGZPL_a9iz^kN#ZD8ExY(hUVsIJ&y`r^6Ry@uEPj3vw4d;Ni zWl#;aCX$ejZHqh^t5dP6Zr?gpjr;^ZYuYkQ*jy&wP2u=}Ts-t@VvRnjl zN(Rd%(BJAQf*fg~WJVtFC8LaF5%s$Vjo>p9M7av~+i7#eop}(|4xBy(y2x88k&~H# zfnwNWn?OM;)Q9zT8F&_|;jSoU?HWVP+{3QiUVLpjxhFoNwl#z>zy*@F3W#Kmh>40k zMpRY~yvGMhAbZNuIa$|RL7bQIbL{E(x=G@6m9;P-r=}@+McoOsAR+=ekL(+RJz2nA z-zFu|oC^_XUmRVTBWp}LAOqsi-b7U2VG>`13z;*D9kyj1kcBA_sgybeEfq#PEw!!` z**dtKfh3jU`WiBXihL>061M7&dB z7Ji}@;;>Hm8Xsqon%BZzrg*gvSvM>if=G!_ym2nPjS`rYkCdNfU^5%?p#|PczdU|{MDDryYRIRIPhiu(x z(~xT=h`$Z8?B8z!grb|*iO7304`H}(vH@w*2yrQcJg+AsFJC)D$f+k0wkhF)m2J{F zh-?R-XuWn0<%dYglMP5ZRDC@D1lHOJ)XoF{6pGiD1m9(ysF_J?nK08qcwWB$t)87A z6C>8`@Cno2>ZR;Z6H5MR7yK`q<6N%oO5Ly2fASW$pt-bmOBw`HO}?IoFq zc=4IihVEP3bh-#{;aq%DDn6pNLM7W1P#smwPY-RPSYXJL-Q=F~`Hp1EK=}xQ|hRKrg*c-EK*Q*-uWHF$iF?eT;E69ltwuNq$IBT z#mggesM4*IoNybz=|q+9IZEUU12B*w+0kR~o^Uf^lS5)B8=VVqHj~w8UYvxof(5l_ z0kZMmXaHf5|eTlMz@+|yqF>xCh0o;xD zXHay^Y{_a#qvRgkl8Ac*E~9Ne9nFd6N9sf}_>mZpGe%-pgen^bSd+Izs4{!EY;wl| z$kC2HaEGsBY|hSgLOcg38tg4kLG2rrZQ=bIiJVe{DgYmHzn*fIN(gzK&2gKBqO_rL z(gOLa{NBvgc8cd2jXX5M5DqseXoPzZY2yH7UiacORMiC~|H)lIU zInjV>b2f1fG4_b|;^H*Sb|7mykPL-I14<(~wRob0s1n0XaeGJu&o(R8@4QQv1V9}@ zy5!F>$m+1ef%gW$Lmh;s1%S=b`UNRYA6kI#@zGj*l!3f729Zo`!^es?hH66F!Z;b( zZc0s1a8cj0aPO(0-1qRgNyxK)xGez^pr*%BG!;^?nKWM@#(8dTf?e`2A!`o@WscG#x@EZHV3-&p~+?%_*(ep>>cbd_%CeY>g`bB|iyK-{pnfDOE* zBRlb4XLk-%4IYx1jPxi+-h>+ramM0Y)W#!Zw4*g0C{9rONQrXZf;ln5>M~S+{#*{^ z*CZJog|sfBUMj}acO~J?A~O0DyXpy*`{(*o2;;lCO84+P&XWW&0o+kA)PZd2lvdp` z#`p?(>s(F~ClH7!Y*$bf@3Mt~U7k|RD8Hu(lyxmD)5lPKQqZ#YIgM~083nmbl)ij@ zJi>Sv$mpCeC!#8!>7>{xf*f2VqAZ{7L00v)moIgYH+MMa$r`qxBul;qf3`!`?bSMw zzjtPu`?}`SD3am3rJMY?!%gjRPz4l1?&Jch%R%$B(G}U?q+}}}A{f^l54JK|@fCCE z3E%i3ttb0?8#5M1np;R8RS#zM3@haszA8sr0WzDG1RX-;p=m&H6%o&x!3_#xaBkWB z;70fSc>VGoQ7R&`4CmY3q$u-v?L!;#nNhGu3^(BcbXLJnVqUQpbyPSwyTRC~M>#n?$Ba0DqNW>+Y64BmhnDmQmLN_-R~TLs?V_xXf$eLq)5V zwsmY!swd7{fzH1AmQB*XI91WMz@Aa4k+l+>vbC5DcvxDl0k8FwwJmqO8PzozlH5L} zSR1cYjVsYUiaF(X&*CQW*-V+9N~xFKuxIb0Se6RsTLQ#&n23O4#VnjnP`y_qpw||q zrU)rnS+OEPh!};+*N^O-?~32^yu`r2<%@L^g>=Q6iMVsfe3H{shNm~VfbUEcvmVOs z^7&lkD;~-KIi(CmMj=)H?n1Z~5E)v5ZWxmih!El}78M;Z)0CzDzdcHXC~pFOi*L%N zoBa|;+}pBIj>CPkQ;cp0H*?-h;V-nHRaJoUX+YODssn?N5lfJF;}i^1*KVT|G`|Jv z7VMn~6(bu^u4v^Hyc80-luJQgCs9f2B^Z(Sij|N7TRZ)Uj!smI;Lb*1J(tL{0>N z}R>t{^^t;2e|7GvYQfRs}P? zL(~1eP%Vmp*4R-*(Ow}>0J7w53%uG(oMM#?nMmq35r?e$Y`~nnO*X@s+*k|}<0#Rq zg9s@%@l^7HGNln@l!1r#YE3;%gdqu%(;>roYNr{Jy?Ei~jN;u(+z&fRJyyxcW+DAo zH~6b-8)J|qDZB1cRJpBytcu!cB5sPASxP44K|g`eeDEeq;qRr$YRkCgO?3;MKr?{* zq`qY2*Q~lW64Q!ZmEZA$64Ih=vg)%Z7m=?Nyi3xq-Uf+c)V-EN#!6001j~9zTvbuB zUah7)_OKZ6B!MbGqGty10A6gH+3abZhPcELei&2E57Gvl zThYpu&YfkcoGt}jO2I!X(oLvtd59_?vIOVIUaY2!#@hN8iy+H|NDqbNVxVxxCIKHM z&>N7mfN#J`cScEX0^9_nVFfHp^oA>o@DmSeed_Y&w;9Qx@w|U_v+OP zueI!?_TEs@wQqlA_i2xKcXyVi*5$?7-PwO0)3NwDNVlQtGV&YNbyxJL*6OJkiuR}5 z>J6DOFR0e~W1q9jbx_5N%IP814!fgK&52*b(LEK(C7&-ztFzi>8dD+@-9E5?JxS>Sw@uR z@an<0U__&)D31=c4-7`IVS1}?YDdk_((!avn_pw@0CK2yQsX0gIXz;>U7Af*x7?{V z)q?+fV>pU_g%OR_+WQAP?cXroy0V{Du?*PTn^Li1CX)4g?@dueT2rO|HJsh9A?tsz z;XY+^lx8A|w!R3GsDHoI(x7_P9f_iS+W5%c%z?;XJ22m;+Iv>1Hm{7HPTZ=fZfZ?X z_2`SmdU;g$?gN(JSxkqpa?Ss+hElwTt&hB@i# zEq@xRe~H&!+KQ;`qtV*CyEeF{*4T*jZ83SdsfQ7e_j z{N5bNf%I7B2Y;&||Kv2JO1M8ZB6quoXCwaW*z8k#noO1Bq-r&H-!4^|iaoU|rj|!< zocS#Z)r>#jxqZIBKWEh_NIK9*&Hr|0=fK|YXAi%}snX@Ob*lW-?rYks>YWs|bCz0b z)Nh7WP1aOvmqz@)yRthf`Uh1{_r&Vr-s-`hRjO6mRZb<1DsmsNVNQ(CTr?xpiW2SL zcF((G=%=}vijhg>fPu~dChZ!8wYM3I$#6!`-(MWpWa=6 z$?t=-asQE~Q}uM^`X2paWl|I;ci+o4TGjX+9`E`s7V7?B?SuF2&R2dr^ZULU-)aYkWS%MWx~2WkGzd^VcvHZ>;>kD0Cg_d?Y>Wl;p1k7dYo)K2?U z>R$@~huqtva;r7Lr)Jw+*L*Bulm6oSeZB#eYoaP;)o+=yzyCk^96x~a>TkDH8QWu4 z*t@4AhWNYhMXC)FW11Y6q+9iRh1y*f{XxH~KSp7zn*0B4WJQoB zeX;61uOeEa+IQ}a%|n*xsOwaFg7Abb;>A4*PbB6>Reue~sG*TN&n~;c2`?_ z>pJTrh?WrZls$%6yA*q)D}wL)Z@bSi)gB{jHL>-siH1YS_>0yNt52P)zg7>5{ zj!4_z_iNo>xjU~v(5d~}`){)@)qi^VM1Ss+g2}G$oN3D~L$!k0JQ}`F}o3BlQ1V z|FvR0kVU^%56;@68R0*a0c!N9c3+xx#Xg0nt8u!Z>ba_7T3yVK{zzTz-`-ittKa2X ztfHt_&BL*1kCm_5U^!hwDkJ`>ih60SHdDp>o$aJ8+eW*peM3~9jstzf!CNa-nG#~& z2rdjBsQF3i*^G!aa$-oMcDJhS68ke$i!HS$kJVI2bg(=PXX6}b{)Tz6NJ zBO2|fe7Yz5B01QpO0*O~xUwkHOsXp`RmZl7w|XOyq9RfZC#;i$F)gZNQMt5akJx&7 zwpX>ZZ8BFy2-QNdo+x=JaowTbI2FycQPr2F?X5%I6RN+Pc4-d}e~0?*q55xkRH=y8 z(Vwe&wz#TpDxl`P9eY@2&c`Y)JmCrfJWUoh!>isbgiJAOA=$(3icY*4cw#CMX z#o8D5&Xz=<`<(v&=fAZ;rWc!^<4J0)HUFbetBJ*V#UY<{#A^LM z=ibf1=qH-}m4naCwb~e`y>;tvm^iAUeR(8~51#vdp0l>1;)}aGXJ##?mA5BlYirfE z8mNg|+NH0a$&Mgo;na?r0l8}fZDWxPPwg36Do`VHxxIM3v3tH{YicfHg}iB>nz=&} zblbnLU+p=3k!apuSx|9cNnPnwHE&cia&%*`EnmIQ6GidmNSBg*$V!Vb?AYbv?JlnE zJ!H4=LY!K)Dkrzp>?@7L_hjGxeQLiLL6XiW+W%Vrf6r`Kwb^paN{ta5+?B2}f+jh2 zzKCrK|A8mJG_b{@phU&PzmNV1W*^?qRBg96+GAYyS9YJ1htBw;e#$-6O{&NmtGDr; zE0I0F8V!FM%PQq?q;FEYGgb4(zJ02sn*G`Cvn}fNoI|m2km67C@))MqG#03F^|vt+ zmEiaNxQNa7R_$t?+Z*u*R`=KTo(`498L`k(rM1bv=sAGWhbed8rVdzmbjJQ4nVMI`k`tK=`re>+=lT^t<#<6ZycQ1S;l$70*idTmE+r#cqR zzn>qBeMUOGGw@qv{o0+0ST7KXtF9OhE~rt{9*q@i#0I}ksFAi*&{o$q6RDtk>wV1? zD;3)RL}NADAt>Qt^VILTNc1X2oRwVaE)n2^RW4&HUF}S31gDbw@>{z4 z2j_<7=ets(v2$3eQigBdT(6oSf#4%de-<*n`5JRAf(=+_Nh}gwf1Mke3+>Ebvz=a`n#!UN7AZN z93I)5{q?&md1@^Vt5#i&)uGLblGUURK*RHJ>xw-#pz~ABnBKlMDUpQL6^KyHq*%$8c2EA~hq_i2cpedsLf|u5SOt ze}B$Kd>LQ0vl@)qtU8(td#62-jQ;POb}0%DAVgNIx6hePidkhmIvb0|*`N59MDu(! zQa4JYh>)mSxV(02U?UcBe>(f;wVsGZWvVxO4#e(3+U7p>Z3{*63%@)<$R9TDFDD6?>p+90DZ{IGD`fA_*V$7-EGpLqIZAnqF z%XP>fWrr}z`L7Vg7xC@BHp_=J?pCuW;XmL?>4A!}%b`NesktZ)^!;WNH7e9R-yQX_ zJNh<ow zCjQlCEq%XE+5eD<^$~1}i}Vh^DEDXef91PXu^sJe_G#7L_EU%bZpNb&AEryb_ z&3hD!v99;miTKg>LlM5e(;rza`h$07*OzKX4p=i7vq|w%!oNU_{Tu$Lo}pOhQ4;a= zLB4TOL~4m5e}2R=2PsCP8Q>e5Rx>kOMb~hQ-!7fCb*wEEv2@2Dk+)`TZhgAXG3bcg zT`)1S;69L3EeGx!Qaz}4nre17x4N6g*7IYT(|o8FtDWR{RdjE>v0O#%&aJEiUB9&| zK2m>HhVoPod*^ZFWW_+Gdb0LVP3w(Fuq%c7{X`UZoiUqLPd7w-o;KkhieGF{ zZ>&@;GBTe(9UQAabjRpiRiu`rtMvWL9S0(Lrggr4kH7le!}!$rP~ZMrN=K7w*Mw;0 zENod)@9$M3*%8aw>I3y@dv+{>V*97}p2aHdXr!WTN3^Vo%)8Vsq4XcVS&7txgXc3< zx{j#Ud+UkOX!XWCwxMRqYBV2;4$=ROtT8&!$c4@AKJ-r;9s?cw){2zoWCtD$HX9Nzy=Z>2F!d!ruP zr|$fRr9Dmid;jJ+9Erh(SZA9Up3s5}}IyEimN=Y^`| z&S)Hjqgl5n!N9K1qW*G4DaL=h{cp1V&#fmP@>FOyOH_UT``C^|%htb)nT(#X2*!1* z-y#h3m&CIF;5~IKBa`cDuJ4V~L)oDI4Oh?jT2Jgdh~)#8FWhKVk+CdFUmocq0x?fy zAE;(-)ylcQ)t=A+PWyNNyJulED{EDJRsXl0i>-Z8$?LP#cnn2qNzwo9{yZpqZ3HWe zqcV68d0PFQeZ&%0H41k}T3hdMN`zu&MeTD})?zq2|C=ZJVm{hCdH83;d{slGiYBTB zBFLgzJX$GdRle(g%%eRH&ZwMO(LUrb-@Ug{wGRs);*od2pJnyse~7H`zlhP5NbTOe zWBmY54Je-=l8-n(xk5)X1uf=(JcBjz(d&Y6G=Xk7!sC zl{LII{~t8orT@QjjQ^L4;fi|Ye@%wEfz_qG6HR~RpAf0b2l*yNFyi3K|IEBT7R$f$ zi;p1k;333I{;ihnorzPkd~bBrOl~H3_H+(M^M8MR_t_Uan|@%o@3+qF;EBWY&VOC4 z4xih5D~VK*2{ktVHkxC&c$i`}f`V;*hgbjI+w7sLcJRz}GzJc??axP|aj~RU^8cAJ zxV+1!Le;Q8f(d26;oa}I#dl=uqUQuIg1)vwx1>XqDXEshR%g{{M9=bqC~0h#^(=f61QgzvB8qNo)S# z+k^Xmp65iW+z^364iP+_^&KcSw9q| zTR5QchT1o+9l)cBzhK&)OzMBG@W6gXWL_ETaJv40ovD3`k=xoMR0+{6SdT>4MB}oG z&ZUw1bXez(zkF93`j1`aK9AI~oCD~apd!lNX#Q(-ruFU9{I5JS5A~eCpY+e!W_H)? zk)JA}t^7{0|K6ZdlpOHkaNq7uK>f_pAIrRb+TCa6ze1-U6CpD)ur!{9Zsn#@Wx;4X^Y0a``TXU>uHCC(5 zYPUM9PU|_%d5z0@L32@aN#nL&)?CqC)m+nD*WA$D)Of63>n)AX>bC~0w>5V(cQyAk z_caeRL2JnRQ1eI=wm#N8(LB}UTAyj2YhGwxYF=qxYu;$yYTjwyYx1lgH2Kz#nopX~ znlGBKns1r{>vxSt1854Zpa#;wnj$NrK{Z+prqOBi8eBtYNDZZ-H3ki%VKtn_sNpq& zM${BrOROf1q$#z^8bwoPEw`FA6;_MphvugyP7|-Gv{qRYG}YD`Ypu1;ny5+A)LR>@ zjn*b>vL;27s%f^SY0@0(`yZAf|@>Szcr)@YjQPtntV-xrcg6r9kdo{hOEQZ5o@ugL{q96wU%kh zHDlHaO{JzvGj6Tc)M#oo6V^ISy{19asACkj)x-{LI9!;;N zPcvnbyo` zW;GkuP3xRyUbAIg&@5_}G~3o?&5m_Nv#MFstZOzjakhBdrY6C*rAf4HYj!k8fTO@M z;5d+EI{};oP65fb)4&2k02hHvz-8bHa1}_kT?4KIX|{CR4d5nl3%Cv3 z0qz1BwoKbS;69LLdjLEH9s$|5$G{WdDew$<4!i(f0y#FT?G<3Ny$0;IH^5uq9q=Cb z0DJ@-wokxk;0xfieFeS&-vO6R0{{RBKmZIN019XUw+#b4HXWb`aDV_vfC6a10C;Ua z8w0R_-^Kw(AYcpHLbkAt2LwO_OhB$J&z5hKfC8Hg6xxbx3Sb5-zz^UjP;4u)#R2g^ zsVxCW1d@OqB-059MJ{6GK* z0wEv_K2QJ@0!2VEPy&0)0R~FaQh!L%=Z5WE%lSfia-jHV#YxlR%4Y z3YZ3FfLUM;myOTaWD=*lRlv_Sr6g7r{&5W$+4k73{ZN1FwTOz?1X&VO4*k)~WHXS%`(}OrjfD1MfT(nUj z4H`fOWWgodvW){*Y^%04n-Sze0bI9cYXW`LPsl0Dg;1!jXepcS-%b}+^60G*%U{U>=wc7J!9d5m*eCfTds=SPoWzm0%TE4c36QU>#TwHh_&_6W9#4fURH~ z*ba7ponRN(4fcS&U?12IrrOi&>GlCI!#)TOfx}>?eFPi@$G~xL0-OY=z$|;VeHzTM zTkSUc3^)tUf%D)3xCq+q4*L?g3_9&A;3~KVu7exkCb$J|gFE06=qTi}AA^oVZu<$y zV?POwYG!9Kblh7124b4Ea&>S=mEkKLV60{7hK&#Liv<_`R?e-4)CbR{0 z+P9${=m^|pKMEg%kHaV6lkh3H+umdEwV#Ij>}TM9`+)r{d=5SjUw|*dgZ4}CW%vqw z6}|>vhi||`_M7l6_%?h8z6;-j@52w^hwvl#F+6M^u|I*I!q4F6@C*1QJZc}azk*-G z5aX&Q8Jd%BsfOkQ8>{t29LuNaFSyZo`R?08F&_+ zgXiI7M~Y(sPIWB8X^tg$8D4=`;Wc<2PIqKDG94RmmSYp%g0met4y(iF*oJrDBgj$Y z7-Dxg9LEu-!{u;0JPxnp1mbg?MEs6`Bj`AVoJK;9Gss!w91?b%M=l^2kxR&B6^=@Wh*UYM9VSFVWTeKSAhnJMH{wCOh!5#=^gH}W02y!ukq{C_1|7Lb9+Hm~AcaT~Qj82ah8-nHDKg?1b(A6H z$e5!7sYI%faYr>$gVZ7ujyj|sX+Rp0CZri@L0XYEq#fx%I*~4<8|guMkv^m!89)Y+ zA!HaCK_(qjj!|R`nRbjL6UZboSBub(2 z&IBio8qh>1gR&@xCOM5Lj|!-WnotRqQ3XwQn$Z-e1x)T zXb26Xxo94mj~1YXXc1bBmY}6*8Cs53pblpxT7_1lHE1nbht{J`X9L=ZHlfXE3)+gd zq3vh~+KG0d-DnTmi}s=Y=m0v14xz*72s(<6q2uTTI*Cr9F6T5lgU+IE=NvkZE}$Og zBD#bwqbuktx`wW!UZ>Bwfo`H(=r+289?>4v9@8Gzp3wT80q05WDeYyS$jo$RU2}Ko!7M2wKuf6&YRj>+S}SY+Pm6&+B|2z^S<_hw!ryN`$+p( zTj(ru7CWD4pK70JpKD)eOPr<7m)bJtD{Z;6!ueYJM*CJ<>3pZHa=zDo(0sG%^9z4cXl{CoeA15XQDPq+wJUe z_B#8V{mx`;Gqn@WN#~R^OPj5ocIIfUTAOyp zY1cZmPOVGp)_SyF?W}Xo>C?_T7o3Yuzc!!^YD3zvHdnjk%+uy;3$%sWB5kp@L|dvY z)0S&1w3XT_ZMC*WTdS?p)@vKIjoKz{v$jRss%_J@Ydf@^+AeLkwny8m?bG&a2egCQ zA?>hsL_4Y-(~fH=w3FH??X-4AJFA`3&TAL6i`pgavUWwg>|AlKI#;!8&Nc12cHOz* z+|X`1x15{WE$y~;N4xFZaUQ|qTt~5Z*D)-?bsRf^CAv;xNv>qqDeN?s;yQz!#m-@= zuJhOh>>_pvyNq4Iu3~Afbk{X3!mu}|1%%;EZieZ{_EPS+b zK^Tl77>a2z4AWtH495tJ#3+o$3>bs47>5}#9&@?eE&&rUkIRHfnAhcV$(Y}zU;&pI zvtU24peyA1iG^KpSgtD`%X1}Q`L0AP2`g|VV<}iFR_IE@(y&yZK`exYv0_&)mWSnI1y~_ggcV~YSSeP9m17lHC02!1V>MVU zR)^JNC9Vdn5o^Mlu@fDK|p*f3V%s&tKD zRjyHN3>(KLut{tRo5p6aYS%0_hs|RP*dn%sEn_R#Dz=8LV;k5ewuNnDJJ=E3QQa}! zaoq{sN!=;kY26v!S=~8ZjjPsmUUxxP=enr7q`R!EcU{q4)m_tF*WJ+F)ZNlGxEfuz zbxp22x@Om1-96oX-2>f2-6LI#>#^>M?y2sX?z!%T?xpUP?zQfX?yc^f?!E4V?xXIL z?z8TT?yIiV^-cF(r_ljAPzUK?U7HKhp*pP&)9G}29j+sEq>j?jI)jeUu{us?)bTn& zC+bYPc9*1+b&Afcv*>>4I$S?>ak_Y2rz=61s7umyxsr7$x>Q}7E?t+Q%hYA*x?S12 z9#@X8*Jah&batIX=hV4$eJ;1oqx0(eT|S*(7tjs3g1V3{tjpEq>GE|2x(q7Wx^+FeSy!*FPuH&-&<*N_bi=w4-KcI%H?Et|P3op})4CbmtZq&> zuUpV9>XvlNx)t53ZcVqYn{&;(Hguc11=p5tTes+1a_#7j=#T1;>5uDA=uhgGT`R6r z`c>DOYu&ZsI;}sWKdV2dKd;|(ZMiP!FY32lm-LtQSM)ostNLsD>-rn|oBCV&+xj?n zy!(zm!JX(%a^Kb8)8E%W&_C2CyHnh$?nnB^`ZV_w{ZsujeY*R({)PUf{+0f<{*C^v zKEs{qey7iJXS;LU@AV(_AN8N~pY>n#U-jSg-}M?jpa=Dk9@ZmzRIk-zdYxXc$MuAs z)Khv|Z_qP(R?q2;dR{N+MZHNc>1Dm5H|s6>ANrsAIDNc6L7%8k(kJUv^r`wZeY!qF zpQ+E%XX|tHR=rJc*E{r1y-RO(+uUxwM{jp~^*+5{?{Ek7PPfY))Q9w8eXic^_PF!( zUboNfcjxO1^o9B&eX%~^4!T3`5`C#Y>@L%n>nrrR?n-@?zFJ?SuhrM->-Bl=e0PJs zz+LDrayROm^v(JfeXG7rU+iwzcj!CyUHWc)kG@ymr|;Jf=m+&f`eFTuepElEAJ{jz>Vzp7u;uj@DToBA#Nwth!{1V4%&!;j-9@RRr{ z{4{%);^ppZ_;vgSUg5rp-@cksLTJ^ViY0Dp)- z!XM*L@Jjbn{2Bfne}TWmU*T2m*Z3R!E&dLFkAJ{F;??d?_-FhJ{uTd*f5$aAfP*-M z!#IMYxE9B79j?c5oWN_`Bu?QpZonCw#W~!F^SFSExCxhV8CP&KZoz-xKk+y`9#6m% z@gzJMPr+01T6Y?rj%VO??o2!j&&G3bD{jN>xC3|MF5HcKa4+t|{dfQm;vqbY=i+&I zK3;$q;zf8dUV@k6Wq3JWfmh;Hcr{*w*Wz_}J>Gyf;!Sun-h#K{ZFoE0fp_9vcsJgI z*Sj0sy?7tq=}@OgXzU&NR2 zWqbu+#n-6F5N-Bta20VIUZS zB{;%J@Pt5!go%&{nNSEbVIh7HKZ!UZo=6}Pi6kPKNFh>*G$Nhob@#b5h)km2oke65 z1MWe04q+v1gq?5@PQpbDxrg0uV#Mtsyo8VN69FPfgorRP>dqzdhP2mRNDm5%a_X zu}CZt%ft$?>RxlN66@{__ojQxy+*7P8^pGI#~tU1_iPedM1p6V*ddOPiJqh6G4eQh zf;>r{B2SY^o@CD%GR2eXN%Nc~&ynZJ3*<%e5}EGF@LVRZkeQyVY+%Qw0R69L$ajZ!;wakCk0X@O{7FR zJWh{Hx;$==$D@#D(n9_qf0AC0&*S&Rk?~}}lRzetNo3HIOs0^jWEz=HW{{a=$P@Nt zk-461GS8DkT1gveCmp1d%=Z*{T%?;U^ms@w=_89gelkD?$q*SPbICli*i+)kCrdqL zo^nqCSx6R<#bgOtN>+Hv$a1oRtn^fpRb(|;L)MaYWIfqHHj+(bGuc8`d0NS8PaD}z zc95N97uikrkiBG$r`FR)_LFs<0dkNWBI`ZFIV#OVnlR3U!sbMqQ_FP&cVt)NSexb(gwF-KQQ<52;7gW9kX@lxp`pqn=YQ zsF&0$>NWL->hQd!-cj$VPR|GGBlU^u@_eSgP+zHU)OSil0aUlA#{*Km9*FAmz!XBE zl$OFM9o6sAQ#eIX10Is1D4H7d7$}BfDULEyJS9*fHRLf-!ybtm@yL`ynJEkPgZfF0 zdd56)R6I5ANuUy`Bx=HwOr=n%R2r2|Wl)*aq-V;LMNNCMsTofWWuz)lv0S z1Jy`1QO#5f)k?Kd?NkTVNp(@(R1eil^-=xQ05wPrQNz>-HA;<9a+OwM?yeR;X2K)w4#edDf{7YLnWcwy7Oz-Lv62LLa3!J;&(d z^a*;)bCNzqpQg{yXX$hFd3xKksop1an)fN4?#=K%qo326-YoA6`X&8}eoeoj-_q~s z_w)z)BmIf~On;%j(%RcJG9p?}an={VZ$^?2jy1lsFOqb22!+Ci6jowSQ~(;nJO z`)EI1?yc|!=t^&ux7u6d4bmYxOy|;hbgj3}n@<(^JOqbC0-cq`ZE~hK#O1g@! zrfcY0x{j`=8|VgaBi%$d(=Bu>-A1?59dsw%MR(IZbT8dU_tOLPAU#A6(H+(RBG|YNG89p1n7`__58NM4d2EYIsAOmbb45&eC zzzjNr-hdkj18JZPw83Ct46K1O7!7mYc`t8R@Gg1`rmb{W-*()0qgV|s){4lI| zSG_+CYu-4+x;NgCU`RA18Ilbth7E73AknCG9EE<*!DZXXHiec4|>RU6c8#WA^hAqRkVaITU zN%I|L(tXF6By);6&75J*G8w*1UzYD2lkGdtTwrp1R-esh_g!QzF_)Pu%vHwW zbNa3^F5h*=?YqI;WNtAY-)+Y0^ZD*DcbR*P-*=yRz&vCEzDLYs<_YtZdB!|vUNA42 zpzjqE^1Wu>FmIW6%zNeo^O5<)gngfxFU(iw8}psfFaQHG5Cby^gECqMV|0w3!5M-f z8H%A91H&*Z!!bsNXL5Z4BQho?&nGc5qcHhCGh<nMq+%nKUMy z$zU>>EGC=DVG4X!#>Uv0LZ5?iGA^db=Vm;Nm+>)vCcp%lVqb^}GbO%UCXdNy3YbEs zh$&`Dm{MOUQ^u4tWxfiglBr_Kebr12Q_Ivb^-KfP$W-{6m}aKZ*TS?iZA?4U!E`cR zOgGcR^fG-+KQq7#GDFNTGs28AW6U@+!Avq!%rrB@%rbM#JhQ+oGE2-dv%;)0Ys@-R z<*W8>Fq=$`Z;RPxYJGLS9j4xQggwe0V~?{Z*alyt?eO_Y-vjm``-pwaK4G7-&)6y7wC_1Pr5CEt7Y1N)Kv#C~SKuwU74>~~hf0xZZb`ydu(5f){&EXL|sJ&UshOR^M8 zvj&!7S(amsEYAw8$eLJ*m05)~vljLT`;(1h7O;hE5nIfr`qTU+Y`Q{>#q#vo3!R+snHBeQZBFz<~N5j=L`ouCS}@8oSPV{XW0nzrhClo9q_5%?ABD>=EuL zcZ@sEo#0M#A%EC^ip%w%=JNb!xU<|j?mTyayU6AHFL9T-D_nv9DtC>$&fVZ{a<{nK z+#T*NcaOWzJ>VX4kGRKNq5lc@lzYZK=U#9xxmR3~|26l9d&|A!-g6(gkK8BjGxvr2 z%6;R$a~cldKn~(y4&jRZD5vExPRHpvoFljrf2p73D6Y&;a|Vv#%Ka?IaYl~k1Wx2k zT!p{VFL5%baAwZJ{osCbaa=r?z*YGZxg;)`tM;dGsazVD&Sh|!To#wj<#1Nc#@RUs z=j2?RoAYp9&d2$=02ky!T#dihALeqoI)5IQ&(-@I{Ehx5e*ss>6>-H}3D@jz@t1O~ z{xYu3U(QubVB4k?Zm|am`!{*UGhV?OX@f$#rqvTo2dn z@8$Zqer|vprk5dE*7+MdKyoW#bj&RpT|| zp#Qq@hViEHmhranj&aC;*Lcr(-#F}lV0>tNWE}B7Ha;;vH9j*wH@+~wG>-aT8DAU6 z{BMlo{TYf$tW3Rqhd50Eyf?lpT;<2yfML;XiPFD z8&iy_#x!HPF~gW?ocAyIvy9osMSqUbYP1=b{C4BA-(hqbT}HRjV_fmC`n|?Azt6bt z-|%nx{ln z&}Hm4_85DOea3#HJ>Uoo7zd3*#$n@#anv|w95+rFCyi6aY2%D>*60k(8Rv})#zo_j zaoM4f0{qTpXJZ-=lKi#Mg9_hnZLqc z<*)JA`5XLA{uY0mcLm&mJN#YV6S&9U=e+@6-~s=Tf5boLpYTulXS_e~oPWUw0>MBi z@REPUzvkcYZ~1q8IPjkTz<=aF@t^rG{8#=P|DD(H01xsI5Az6*@>(9_b-bR>4d6V% zlRU-Kyn)XP`M>5AcKh5I@Y1@T2?~Kh96^ll&Av&Cl?&{2V{eFYt@}62Hu^@T>e9 zzs_&)oBS5P&F}C>grmYS;ka-@I4PVGP77y*v%)#yyl_FdC|nXQ3s;1iz*XUza9y|| z+!SsJw}m^xUE!W^Uw9xq6dnnWg(t#O;hFGUcp3k5=mLZwh8R0}mitxzY_ z3k^b}&?GbqEkdi%CbSD3LZ{FrbPGK~uh1v-3j@NSFeD5MBf_XKCX5Rc!lW=IObau@ ztS~3c3k$-cup}%CE5fRi#NoZ;w`Zwa9g}1-W59o_r&|+1FN0^5#I)d`I3x~>>A?|kR2&n>#R+jzoDwsF)8dRcE6$0T!Fh2(TojkY zWpPE!3T6j$g4UodxGJuR_MjuUE;@s*;D)#OkO?*+Ce)-gVW#?^&ZIZt zCc;FTC{shQG1wHOP0c}ri7~OJmLO+p4H`|nNic~flc_D(9+XTSLD|$9R7_@*#ncu2 zVftz64)z4&O!21PV1g;plw|4)CYw@Bsirhjx+%kyY05HXn{rH6lg-p0w3{3zr^#h< zn>?n0px5Lx`AvhtfGKDSnTCR4Q?4n`ly5396`G1n!@*)xiD@J_8Z0%HnaWKSrb<(l zsoFFatTEM^>P+LodQ*d`(KHckGBul8Os%FiQ@g3dG#Q)AG}7x+&d~ZcBHhyV5=BzLXStAU%{GNspx` z(o^Y~lpIP4J(pfcsiBwBE9teA7J4JSmEKA3r4Q0a>64Tm`Ye5szDnPujL>&UBLNa9 zK@u!whO$D4gi6^Vt%ONBDJP_taEXveiIQl^AX!7U5F^<`tmFuBl2PI%K@ugCF3VTso=|V-s(ekpF5i%E%D3d(@*VlEd{4eFKad~FkL1Vl z6Zxt9OnxrEkYCEL~|$dmGvJT1@2v+|rgFE7Z8@{+tP zugI(Nn!GM=$eZ$(ye-d!WDdl!wYA<+1Wad8#~9 zHbT#p7s^ZJmGWA7qr6o%L+_OL$_M46@=5uud{MqC-<0o)MgbI1ffQIl6jaeFn6eep zDS8E02!&KAg;ush28B^rWhcZbMuk`6!h#|yCPh+YMN!O3d^jO&QGO^tl{h6{Nl+4% zBqdo%Q4+(cN}7_cWGI!G;SjkoLlzgQ? zNeU;23zZ@zC0wkOD5XkjxJ)TmDwIm4N~uXnRegVLxpDa}fY(yC;J z+mv>tL+Mnyly0R*=~eoaeq}%zRECscWkeZO#*}eoLdgnGDpSg|GNa5YbIQDu9bQlt zl_h0aSy5J%HDz7dP&Sn{kC~5~Pnb`dPnl1f&zR4e&zaAgFPJZybHbO* zm(5qq*6>yHHS=}z4f9R&E%R;j9rIoDJ@b9@1M@@kBlBbP6Z2E^GxKxv3-e3!EAwmf z8}nQ9JM(+<2lGesC-Z0X7xP#1H}iM1#tfK2Gh~L%h#56&&6wF1)|vHY+)S8BGiA1i z9bwvRFgwGHnKg4}SJ-HFhk3JL7R@HJC+rRT!jf4wD`vCVV*X+NX^u0;n-k3baH2WM zoNNw+Q_QL6G;=VVZq6`gnzPK=<{Y!t917dacC*9mG`q}hv&ZZ;`^8a7DPmTp6wkSBD$TP3C5Ei@7FT8?Fntn(M<2;l^;Ax!v4hZVEStJIyWO)^L}( z+uRoJG54DL%^<(B2P<&I@0 zJR81ixo4RR&xh|@7Q&0+rSNk2f#sp)k>#=FiDf0c8eR*phd08T;jQpf%XavgWheaH z5|C}^3L+!^1<@a^2zeql9ZdA`^A!y`_+<~`_1y*qOkxL z&;nV~a?^7&a$!qmE@D9~T1!?gX35UY$<=uW` zX{pYw$#q%&5B9zTE{^ledsgfwclYHIrCfS)SPtpUxl8k<(LthjupOBuKp;92k`u=u zdhZf#XLe_M@4e0L%$nx8@3MjhrdB)MLC5I?-AQ-R_geQ^-SkcL{npL& zE%dGQZS?K*9rT^_G5R=t7kxMVfOQXjFa4l(AN`PZKm7pxApH>iF#QPqu=R-bDE%1y zsP#Dg1pOranDrF>G<||TNuQ#hp`WE6x1O+`qo1^%r=PM;(=X63(l603)34A^TPLhn z>DTC!*6Z{e^qcf4>n-|i`W^aR`aSx6`UCnI>sjkV`Z;SLeBK%a2g4z7C>#cd!_(Fa z)(AKfzGz(vFN34tOV-QQE7oW@29AZ};CT3|^_n#SzHUu~Z&;JyWH<#*h11}4_@?!i zH3QCsZ(FnAY&ZwLW6gzEz!TmY|x3*o!gd)6X&6@1_Nz*-EKz@=~*Tn<;j53LMa zC0qqFZL8rma5aqD*23%H8n_l-57)u7QjMS1dCw_thA|YQdn)1!5W(!*4h-X5>~-#SZCAQG_V#n*mSTSHo!)k z5jMeQ*aBN&lg$R3Z5A5_TWxmOX2WcDo5P0N2%FR9vN>QJCSbSC3A7*1 z1|Nq{z$f8x+b-K~+bMXDZLe*gZNKd_JONL_2W(UDLE9nQ8Tc%G*me#+VmoR(W;+ib zw@t$r;EV7j_%eLLcG7kQK4m*?o3KsVuEN*g>+lWuCOl<3W4i_4hR@pWz<1$$@HyLk z_yPP74n%^GU?c=NZ=1G-A{T5IZI^6eNH`LKL?TO(WyodQ6*>`t;j=L z8`6$+Ae~4T!oZkVH-ch42n%Cly+|L@j|?Ci5Dv!0HX?%v4;w;;kr9NCjUsdeMi7L7 zFcB0HU_y+Ah%h!H#yAKU;URoPfCv!@CPKuB1d(D=M25%_8Kyv#hze078bpie5ILs6 z^oRjbVk*ptm=H5!L9B=kQDYclM;r)_5Qr0TA#P+7vKiTeY(=&q+mRi}PGk%jM|L5* zkv+&>WFN90Ie;8Q4j~#$iycOeAUfWsEVb zoKeB3WK=O$GuAN1v0Yd-V=ZGhwvJK5sAa5Y)G_KA4U9%c6Qh~Y!f0i*G1?g&j84WL ztc%gj=wb9S`WXF;z1Ti%fU$wGAKS%mij4Gl`kZOkt)n)0pYZ4CV_A>jJQ`i}-pLrG= zU~XV;WDYWin8VBw<|y+VMrXoIgn1qdM1#;^bQ%jmL(woa9F0ID(WU4GY#ADbMx!xk zEEIKDu0w0kT68^Hht{JFXd~K$Hlr%?tV~uGE1RXVtL-@~ja_Tk*>hPdSb3~` zRsm}zOK&e^6|q*a4EADH39FP<#wur3uqs(qtktYFtZLR;);d-VtCqE%Wwh6^>RAn} zMphH6nbpE-Wwo)|SskoSRu`+A)x+v#^|AU{1FQ|KjjTb|5Nnt1+s(K z!R!!rDBEN=+r!x5Y>PdD9m!tGw%V7mqu9~x7jvddo*)e+p+irK*aeE>=iJi<& zVW+aw*n~Zuox#pzXR)){IqY2a3U(elpIyLS$u49Uu~)H+*(K~!b{V^z?X*|0E7?`- z)$BFwYPQS1mc5Q$!>(noXVi z_LZDMP7!AnXWYKaUd$=slyb^A<(vx6ZhIxCinE%thEvU1%UQ>%;nZ^0bLu#I?Dd=m zP9vv@)68k%v~u>^+c@o<4o)Yhi_^{N;q-F)IQ^Uf&IZm#&LC%qGt3#`jB@CleRi0G za00nO++c19HxvlMsN?lP3LBCGr3vZY;F!Wm%D=N`8=a2vTz+!OX@ZVR`S+s19@c5pknC+(-~UEFSN z5BIdam)pnf=MHc;a5r)%?1S7P?l5jIQM_ng3@?@!$BXAB@Dh1RykuSqFO`?ZOXp?qGI?3NY+ep8m$!nK$IIsx@K*8) zc}2WcykcGnuasBDE9X`4&e$t?RlL=_HN0xxTHZQd4X>8Bo>#}K=QZ#ec}=`#UJI|4 z*T!q-b?`cQUA%5y53iTk$2)89=MC^S@HX-Wc|*Km-Ux4$N9VyjgcryU;s^6X_@VqT zemFmZAIV?JU&fE(NAqL&vHWxPIDR}ofuG1v;wSS{_^JFfemXycpUKbSXY+IT=k2-t z75r&?9{++ppI^XV$uHy=@mKMS`6c{Pei^@WCG@3E~9_fjX7|T7kl`UQj2f7c>YO1xgkU{pXCzyd@NC=3z?3qyoThsqHu3=^sy;lc=Eq)_8nDqJRv5=IMSgt5Xn zq1K^u#0&KfgTv@Z5GD$fgvr7bVXDyNFgwzO=|YPmLzpSd5?USE!W?0)aD^~Wm@h04 z+8mf;rO@su6gnJ5!d1dzVTrI*SSG|B<-!VKrI2t`30Di(2&;u_h3kYh!dl^aVV$sE z*dS~aHVK=BPDhKdRoEtM7j_6cg=n8leZqd>fN+Cwqi|3-Bpeow2uFo< zAuL3MfubN$uxOJbL=-9t6NQT+M3JJ+jxCO*qGh73jwn&IC`Po+5i5!l#fuU|iJ~M? zvS_nT= z5tWL{MCGCiQKhI#w8ybpv_@1dS}R&7su9(S){E*y^`Zt*qo_&LENT(8irPf&q7G4~ zs7ur>>Jjyd`b7Pr0nrB0M$w>XNHi=O5sixWI_M%;goySz0>we%VDWxOh&WUnCJq-z zh$F>I#RnV*9m~Xr98u!Kj%aa=I941dju$70k2n&=N#bO2ia1rACQcV;h%?1m;%sq_ zI9I$voF_i&$QKugSBeY8MdDTBVsVMMR9q%57awyRcT|Wg#U~t9;??3c;**YQ@mldZ zagDfEyk1-j;-bNFpWY97`q3BvF!RNsJ^` z5+{k5BuEk^Ns?qqiX>H%CP|lMNHQf^l59ziBv-ORa^8_A$(IyJrX4FKg_0u41;;8$ zv7|&&Dk+ncODZH69hV%HlFN=N$rZ!3?u2_gxU21$dZA<}z}`;JiQ14o$jp(9)xA&rzSl`fM;Nu#AP(pYJnG+vq@O_U}{ zlcg!rRB4(tU78`ylx9h@r8&}E=?ZC{G+$aET`4V;7D-o0i=_;liI+%Ar6^t|Etj%z zHqOB-q?OVt>1yd3X|TD#S&2qqIpX#+#)r(pISi zZ@e2aTPu+9g(W>Q7K&tOEowm z4U`4Rf@LAHP+6Evi|g=knI1RbMm$0mDO)OACX13q%S^Z#kCDa7;$-o%1X-diNtP^2 zk)_JgWa+XDS*9#YmMzPX<;qsbEO?$QUsfPnDJzr}$yUjVWhJswS(&U{Rw1jDRmoP% z*2t=5Yh~+XHL_aSdRd*UUe*9oF`Hz~vKCpZtWDM~>yTM-8{R4Fl3{qatVd?Y9eA&- zPu4FRkZq7{lnu&ooWO@ zBjl0trSfI+DET&gJ030Hfyc;q;<55LdAvM9o+wX}kKxJk6nUzA98Z&{%QNJ=@JxA@ zJX@Y4&y}x`=gD{Dd+>buUVIJdMXDlAk*+v{XDBiiS&D2$jv`mFLXoG) zR}?5#Dhd@vidBkYMTw$RQKl$YR4C5km5M6GYQ-8wwPLN}9KKFbqo`G^SJWx$6%C5> zc%!08(X41uv?|&Z?TQXXr=m;It>{toD*6=tiUGw2#YV-TVj3S(3@b(yqYAnLRv?N% zWsovh8KMkThAG395z0vAQspvblrmZwql{I?DdUw1%0y+7@&bMlPgbTVFX5@mG-bN- zGM=H#RAwo&l{v~>+ zR9qrYm9HvLtyC4Nid3sqJfc`tqAFFDsmfIqs!COrYPD*Os#?V-1jJg^I+c*9QPrx} zt3*Vds$SKgYE(6;npG_-F(DyZRc)$vm6YgEb*j2l-Kri{uc}YguNqKoP;FEVs)kg< zsu9(wimrlHh$>JWqz+bxs6*9Z>Tq?0I#Rt)e0g(ov2Py zD~V)viaJ%DrcPI9s58|nLQQ0;HAJ>rOXR3?)hpC_>U?#9T1V)KmFhyZfhbb1QWvX@ zgo!9om#WLu;@k2?tTDUa!W9I(5CeK}`^i z>Lzuwx<%cpZd13borH_%P`imu#Ac#X-KFkU_o#c-ed;Ylzj{EuLA_Bus2)-et4GwM zYPuR$BkDj+kS16Yq6yW6X~H!Tnyo~nW~pYGCQ1{niP6Mr;xzG^1WlqQNt3Ke(WGk9 zH0hcQO{OMGldZ|oi*U(UfYo5!;C}O}SCyCR`ZR}#!$iO42r-~JN^H<<)C_8dG{c$^%`swBL)XBX;{>7!)COsT zwISM2ZJ0J(8=;NVF4Zp6Mrot9G1?PEtTs*?uT9VEzGqjo7 zEN!+nN1Ll%q0Q6gYYVh1wT0Ru?J8}twnSU1Ez_23E3}o`D(z`vf>^Cxqn#wGwQIHO zv{OWlwpP1dTc@qpHfS5QXNa>zllC0ZtUXV(Xj`>y+IHq2y)x-eb1E<$&Sh}13BEz?EmqIEI4 zSY4bhUYDRt)FtVXbt$@3U79Xkm!ZqlW$ChYIl5fk3SFKqUss^JOsv!u>WXw%h*i2` zU5Tz#SEei1Rp=^pRl3!>HM(luTHQL`RiZ|Bji}YF*VXCjbq%^k-F2c#*Q{&Nwd&e* z?Ya(Kr>;xat?SYC>iTs3x&hq=-A3J@Zb&z*8_|vG=sH-3=mPaY`WwVeB3K`yzeR-V z!}Q_$+eCyuQomHcOdq9>*2n1Y5O;}K{XHU1f1ilgC+HLPN%~}civ9tSs!!9W>ofG3 z`Ye66K1ZLcU!l*_=j#jfEA@r?BK<0TvA#tAkSNuc>C5#M`bvG3ezl(AT%)hnuhp;9 z*XV2Y>-BZ|dVPbwQQxF**0<TXc#n@oMz{cVc1}C zju=J_z^&ti4TvGo7-S4Kh8RPQHYer`GuoZuMu#)P7-?K;TxN_iMjLS_;dDA?!p|Qxg%2;eHG46Kmah4kQI`=vEJIjpa#tLJlvC6pGc))qkxyD#+ zTx(ostTEOa*Bk4M^~MHcqp``@Y-};M8rzKR#tvhrvCG(P>@oHl`;7g@0pkYaM&qDy z$T(~qF^(GPM%aiL15H7uU{i=G)D&h4H$|8tO-oJ7Oi`w2Q;aFr6laPzC72F54?7c0 zNv0#tWK)VM)pXREW=c0@m@-XSrfgG=>6r7lGuL#&dD3~xxx$oZ$~P65R+cO zgQ?NfWV+yNHno^qO&6VQrgl?@sngVD>NfS5E;%nddrf_&E6%IVe$#+ygK48_&@^Pa z<{UPSm_|)>6Kq0Ef#&PZAak%e#2ji4Gl!ca%#r3B&ZXv?&SmB(bF?|e9BYm<$D0$( zx16_~iRL8p9cQvR#hhxs>r6AJn={Or<}7ozImdj@dEc39e&AeTe(20I=bH=6E6s)G zA~VCa%3N$NF_)Ul%;n|^bEUb;yxP3RTy0)!UT3Z`*P7Rx>&*4$1~b#uXl^n$n_JAS z<~DP?xx?IP?lO0qd(6G&K6Af$z`Vh{(L87#G7pOR6Q!l5WYcWLmN;*_Iqju4RQK z&ysIpy9z8TErk}2tH`p-Qf%S6N-U+8GE2Fo!cu9evaGi7Tx%?RSG8rWWu2wQQfpan zsk78u1TLYg!P00Extc7^7O_j>YOzQ`8g`qd-O^#{w8&g?SC>WM>b59dJ(gZepQYb2 zVA)_%xi(q`Ekl-J%ZO#vLbt#c#1d!?vIbj2tfAI0Yq&MS8fjf>U1n9gqO8%@7;CIG z&Khq`uqIlQtjX3CYpONPnr_XoW?HkX+14Cuu62bq&zf&7u&%TgT8pf!ti{$6YpJ!& zT5hedYFw4pD(h;i*0si3ZCz{Cxz<^0thLtl);epwwZW=)HCmgj23NDS#oB6Zv$k71 ztew^_tI^eM?XmV+O|Cv`zjeTBc5Se3v<_N_ti#q3>!{V@qFZ6B)rDAXu0UImE!Y-f z3$=yWFju%O!WL<>yO!FP*`jO?SF|n07Hf;M#oH2Wi8kCtxRPv6SF$a|mTF70rQ0%W znYJujwk^k&Yg=KyRF04Y3s6Wacy;V+qSuSY};MEwmw_G zZNRp{w$Zl3wbM0d8?ueLhHWFZQQNqSZi8)zEfCw~3c`Z1-L5^Z5Nxk26x-(t!@{u$ zED~FaEyMP^4!EMQXzZXX28+ewutTnRECEZzlCWef1xv*ayNSUy&Ot;7nkB5V~_jFn)eSQ%E1RbZ7^6}B2%gH>ZEU2Cy*SPfQ- zt;g!HdaMC!#G0^XtOaYu+OT%41M9@Pux_je>&5!8ery2SfNjJEu_0_28^J~~ItF71 zcFJ|y6=)B#Pq>2ZA@)%Fq$|umyB%k{jTet>%ObTUTa@( zud~L+)PTP`L9P`Hlj| zN=Koi$f0zr+^ZbL4z;_)QR*mjlshUMm5wUMYR4K!wPUSgoukH4>(IE@JGAaPN4=xL z(dcM$G&^)|y}QNH>M*$59PN${htb{X=yG&BdK|ruK1aV}z+rN4aG2d2K{(5xW5_Y= z7;%g`K-hyDb|8*G+~y9#gYgg?bBE$#csL$`N8(HIWq1^BcSqw6cMKkj$KmmK0-lH` z;mJ7eCfq4_D(-Zr;pun=?s8}1S$H;{gS*|i_zHZJI}gvtH@ge)E$)?gAzp;9!i(_| ze5<<@FT>06ZSD%Z60gFyyI13D@M?T5z7DU!Yw;cK^>`g#k2l~u-Hmt?-i){4t#}(g z<{o#q;~n@ecPHM3cjLR=J$NtPhxg+H_y&9O??o~uFQ9_gwWkfkK;huC? z5S7G~yNWpDKI=Z`KJQ*ltRbq2wZuB2hM0C=aMuzS-Rp@DqhrU$j*p!jJ2iHCY+`J3?9ABN zv2$bR$1aRr8oNApb?oNY-Ld;)55^vjF~`wy?l^CpKQ0&-j*G_?3C@v-so@m=G)$M=ly9p5*8VEo|t(eY#BC&o{XpB|qWpB$eW zKQn%I{M`8Y@yp{^#;=ZF8^1n&WBk_m?eWRo_jj}R2=_?#==N^gyJg?$eZ-;DhuDYN zNA?`Ke&qhqhoD&7iDPGuT{$j3apA;`Q;gI6(~=4KgknNJVVp2c;1k;?c20~>?47tf zac|=O#KQ^3Bx{m8DV~&0$|mKL%1P~{ZqhV~PdX=Elba{UC-+Vsm^?grZ1Tk9>B))7 z$;mU5=O)ijPETH%yfS%p^2X%N$y<|mCK*$lDgKmTN;D;&l1*8suqo%1Yii5Xwy7Oc zJEwL{9h*8mH92)_YU<3HGnda?IdkjGoiq2&JUqiaD>}RN?5(rdxruYv&)qtA|J=iK ztn=LS{PTkIhV#br=JVKj`+4Vi*ZHmIcbwmOe(e1C`TgfP)7)vnv~*fFEuU6QtEY9- zhH2Y0Hcd=Br#DS+p58NkWcujziRshRQ`2XrZ%yBxzB|phz`TH7xOm~vMf26WSLN5Z z*Dqebe)Hx{-7WX6UAGS1zI>Z;mw9*cF8@9QWuhp`LfI$><)S>4j|xyBDniAm1eKyP zRE{c8C8|Qzs0P)dI#iDuP$OzW&8P*nqBaym?WhCAQ37?MF4T=~LN}vZ(5>h;bUV5O z-HDE&y@TFG@1gh62PlW>trPum-fm%RWjtg&L_q~_ z#$m99AY?JL__yDL7XRUk(BdzC16us*=b*(?Uw{_h1=p*=XVX`p#W*5p+wD_H{PcHt&*8uIm!FlK>7bAeS65M|heEt(W=jxZC#ee=UXz_QzJ--6a zr~t={z;D!o?>2)y8+`B5XQ9OxzXUDTd>&ey0Ip4e@8(uz7nXw`^z4@xmXzma7B9~( zApZpD^Pa7D^AgzMyS})1EBLI0U-tZs$KU$G;xm5&pFe}o+h6cpd+aOF8P~hlD1bl# z8*;zMbJN3z{$QU5p7%rWdGhbbDkuiDWY2xx&1brs`z{dd}2Yejxalpp`9|wFK@NvM$0Url^9Pn|##{nM) zd>rs`z{dd}2Yejxalpp`9|wFK@NvM$0Url^9Pn|##{nM)d>rs`z{dd}2Yejxalpp` z9|wFK@NvM$0Url^9Pn|##{nM)d>rs`z{dd}2Yejxalpp`9|wFK@NvM$0Url^9Pn|# z#{nM)d>rs`z{dd}2Yejxalpp`9|wFK@NvM$0Url^9Pn|##{nM)d>rs`z{dd}2Yejx zalpp`9|wFK@NvM$0Url^9Pn|##{nM)d>rs`z{dd}2Yejxalpp`9|wFK@NvM$0Url^ z9Pn|##{nM)d>rs`z{i0PmjnK@^x$*D7E&z+yXaPiXRD_5^wzj1Tl?K^kx-GA`#*aGxhGxSH$ z^UgmoC^#fEEIcA|>9VNknAo`Zgv6xel+?8J4Db9Grhh2&w_$b%PB>leO`ErD-L`$l z&av@byZ7wfxBtMwLx+zXJ+=V-)(rihe*S@Ay#Ctj!J%M8f)NrE3&tD!_9rJNr>7r1 zwgCOs4E+(=^?VWJ2T>s!^a<#b(7!?d4*du8|DaDn{|S8>`V465{#odApxgQvp#Ort z2z?3qGV~SbtI*e=uS4H}z6lz>`$I25OQ4sbZ$Sajx1sMq--W&heINP(^h4-J(2t>? zKtF|Efqn-45A?s#&!JyHzl44T{Tg}|`akG5&~KsNLBEIo00lxpP%sn%g+gIaI1~Xz zLQA1#P!tpm#Xzx8925^FK#5Qi=(wH&r9x>?I+Ovu2E7iw0sRqL4!sFwLRnBYlmq2L zE1*0mA1Z)WLWNKfv5Xpp$@1M>VmqV9;g@UgZiNXXalqn8iaZn&?WHwE6`Qw8gw1H0o{ZWDYv0J&|T;rbRPn* zo*e!^^$dT14-R-wW-fVl^X2dy4Ajkt;^)JGpHgN8vS$yZ_oA6A;Ak;ru~%M${S$)} z^iPaMbLWdl03bIWI=};P45%}gpZF4a;tyDmlbijkew`A?VU zRTwT5HPw#Ye_4I8RMA=-v z#Ea;G3(`GUpTu}0d|7aG((=sL%1R2CMZXan+t5-A4~ttEZKvAIme5soqi?@`?(Ue8fu%GZpdV#@UT#L>H38$*u$GsR@3D(x9(iKdhGbe9Vc8sVx9$(_B4>V6F|-YYD;0po&8}P$`uLnQ@ zzX>=6@FF81DWD)=MZlW@aREgEEa)<{(}Nps=oN|=Ildh5seq<{x&RKql6L}j0j$^! zkmLry5jFG>I_g1@1JDEL2qcA6kQm_9m;5aNqqxv5NC$9>2hd6nkV^p}0SLf}+3|w( zg~ia~MPBI*WI9;1Ky#ve(c(qWBFcQ6nj_B~kg)I`JU-EY@`lS|GNJ-{FnHD-v0~! zhZik*DUJzFNeM0w`K4JL)`ozvB z^oe}{oo4lkBLEYgtxsHjLZ7$=5N=kVcmPlZy#863@ahwDXLASh<@ATFPt5(!f(P?~ z!QX%W6`*u@F9BpB6$_w<0R4ePil^@cSIA$QBlrV+$S?iX3)dH(i34uiCT!c-5szJI zi$f|?D3ofocFwLeU(W3w+q;jnt86{6eFt&ms2x9f^7QFF2b`PFotvI^UAlC|Yj^r5 zwkye%DwRevYgc2kj!BLmp1Qz5&xrT44<6dd8Q-;YVtm*BNnlsv9tC!_6Q@pj>~3ez zpTBVN;^oU8yW2lv{;$9B8n7$AV7uBg^+m8m^VyZ2$F5`pdVt%rrYG${Drn0h=OP|- zc+ml1{bBh_!MgncKm!-hMaF)Ct)Z~f# z_oi+?xO407v*;gpyAlL!KA#F8?K@uv)}3zw8_)j&3(q^iZqpRd7SI*owF~*bj0AjT z$yb*|EXi4ty99w=dRYeSGFo7%i33)mgn)QzBCrP~2c!UtQCdKHKt{l80j~qw(H{er z0}D}R0EL(#raXaoEk#?A8IJ|SJYoq zU#0#Z^*7YtQh!JNJvEm42WlWSh#E}&1@&jtDC#omFR2mKXlf)ioVt|yW9nk+XQ|(& zeu4U5)NfHgPYs}cnfev#SE*m4ex3Ra>NlzXP5lYgpZXGY3H4>_7pb44{*d|u>X)eB zrT&QeJ?eL;->1H4oFJjNbo zixVso@Q z(r<5;NdHEh{1EL*A)yhGGcNkXq!iLWKNFqc4P6LakWL0QJbLB`dX(@e{`E(XfO3-i zC~w81dFL6yV8n-ohDR=qjEsqic$A!!nv#<8C}TMo*?)ZWEc(YCC!XI=O{MH#6i8t~ zzoleQNW0RTls{5(C~GNVV3&G}B7(?SZOWf0 zNfgpAv5100zovYG;(|U!*#v!=vIY98$J_8}AQ^)x;S|zO9Y@& zC5v(lN(LT~laL?fH1sOvlawjwKPhLSuTaiIU!#zI>d#O&FM2)whxcD^KX*LWi=Kbz!t(=mr}X8|puhO}zhJx5roSnk2?w?p z0$5*`18dFS63=uR*mNdaNwhFpMT!>zc5aGSa!F0W~axkP8REP zzyBAE6My)daN@&@d;JKAsTcbvykP$XL?QiSo&lnnz?eA!S3ooq7+@jq33KvnNbMI~ zAnyTGpoTqdcOswh_#mJ0egiyeUK~?SX7Q}20uY~9K0K$rscZdg9M4cInFsMyUIdeA zVyQS>9p6CaMF4w~@?CteESMMZ&t#Xcc|0%Vow>Y_mf^P1j!uNZm@gj{Y>*ei(+iBK z+5ETKoBk1g8E@Ll!uUbH_-C4%W^c%xJ($_go_j%P!Q7m;o<;w-+nW|q{it8{Po&Pq zF^T+t>i_T5U;FTA^HR0R4o^^eqlqq3kb zDjCN_q4FUrRS05U$vCD@Qpq@`Pf$~+-BfR0L_GD2FC|fpP#Tp+O{S)Lyb7NK{shvm z@I~M;nD14X^(lM{cpSbBJPF?g{)F!X-@*@pXW_@d=RkTjeg^y*q+jC~z+*Art1;`- z2mv0CFyP6E0RD`nz_$?vJR32<=kdbzh>t+LYkqE4dF~nz&*a(9Gc>(me0Zim;u-qG z0(PW*zP!1QPu|>XZ@e}a$Lh_Sdwt*QkLAt12mRIz-52NTi*udPAYM>>6Ii0Z@0cHF zI~V0NbMU@j2E_N#9mwD=^6MV`;g_@f<+&A=CB+`|QUxIXljFm4+ZUd9{tK^<|2ga{ z|C;lk^T#i+ewfoQKkoX&^ZTnIPhR!oc@X`&3-hjBRNqylEy!`)QDPJg#Y8JX3yE@jsvc;a&UEllJEY{{R1%*B?mx5~w@! zx7wHH&+cEwXt<>}fhKlD~v`3@+v^2Tqz``h2GUiYWBy*l6T|KQ1fXz1$MIK<)z zL<*J8VsmcaIlgz|%*D%h?;r8jBWdjJ9UNwJg<_>zZ^c|73wqz=*-KaMJvd5MD)~C) z8>!#Ss4Of0?<)V-UW!SGUy=+$qAI@sgO{hi^?E>T(zk!~5Y%*e6kV`&n%)VVB{E`r;!*A*>U>2c9|P5aN?K5^<`yS%yo zMk~tLFnS#3Yo*4+4r0@mYqxSQm=B!4bMkbe4u&6W$|->$ZfYfnXL^hBXAsXsqx=L}~FrU?+o^mz&y&$N#6 zCCbZ`Us8TR`3=aE2%&_5c&2CyS$E?WR6z*>aaDyNp6O4Nw<%u%Qh0W}82y1ns`nlL zpt#p6@JEpGuT}HROCNdt!58oPr2pX~7w;M#5fww0q5^fO-ptGa<++N>tJZ;81uQ$=jG*8S5@a#lV!mk1*YUw{juax-lNj8igzB> z)Pi`|Hy#C+JeoZ(0`atA%OjU9jfqc)OG%A>1Y8j-^70<7T2obB{dVP}oOkKfaVcp} z(S7*vy!h}jk9U3EIHvjbqW3rlSrB9*1Q_0}H$Q?r2inBbs=ekJo_xtQomOqEJm0J?rLlI)F!Mu za1ec`X1Km#aQ#s0OwC6YS@f~FmVva4GU+4mv*;gpeE8sbb4&c+FK;f1niP-%{LSy? z&2>{B&zqxCvjaXs{Ur6>ytyu_FK-SQmMAYiekrd!H@6VrglGQ|(;s~COSS*1@k<{6 z%d_zD1K@*uQ{Cn*OI(Mc*}77ktN_1OKFTzcDSCnsJAD&w))(&2P5u`KCSO{P#RXpPm1vJ)ZeP zzWPkhSNGez$h3&8`wh+2>4Rqc(-8DubN=Z%zk0t0KP}Yc*X-BgXN21P%ut74r(c&} zw_lH6uV0^Ezu$o02EUDdgMLGP!+s-vqkeQh*bnhz_(2fr$MR$Qas0S`JU_mlz)$EW z@)P?>{G@&|Ke?a6PwA)fQ~PQBw0=52y`RC)=x6dX`&s;~el|bM&+g~&!~F<9r=QEu z?YGHqv)>lKt$y45wu2`_v+(eu@B!4!^SGq_y)qxTtG&bDQ(j}yB7hGbAn+KIyqg(Y z6Im8~!Tg8k@K0x#mw>{qGwE^9ZC_Z}e&mhcS(rYrFTw)(4-8OmLr>QGp3Q%F*FSCf zm+lJz@*hB-jQ8k^;jK%>CjHZ<=l4%P@A?4XU)XFh<+ z$MrQ(GvjSgH3NZMi@fzVs1(vaP1bS!ED8S8^8Nk zsJHQ){s(|i??3(l{%Mc?FdN_c^W~LQ<%RDi$UU!oSXlo5mH4ng-yolV`Xlb24i1S} zMm9_W{gP5r)4@w$o&`L_`2~gEW=4Sv(%-Ai(bMW);MJsSNz1R_$XuRPc(bGMR^aWV zJ4ws$-XqWNcND%s;zLq+NZ2wk;^HEfrlzKY@!*XdFbcAkFF=1dL;u+0!}G_t`ux*m zrH%J;{dyIF_ph_@{^0N!_1*kw??p0y8jPpSOWwa^*2wgpMkR1@HZOvFh9|!D=Ma=x zzKX2G1d4ux@lnTxnY=h(T&qWKn(L?MsayDA#I-)}`v-DAES&76_iiV>*Iox@w_?Z$ zqTCgE3)9Iue)F=S|N7IQSn@j&k3t_kiX@LR$PE~O1eN_f2hX5?-2DzB|EKi^2>La+ z$^#mK4hV>+^QIx_RX~>leEKYX;}T0ew3eb1>k07kz5n4fns zV|JR`y%!*XYai6EM1spK9z5Z3cwV_Mt1mqG2=*B*09Br!@<;r``XPArrCEQ&k*E5Q z&akT5W!z=(`b03-2uLPkc$Yf)*bUh-4)yB_+owB;XnTzGzcf$>y69NA~o zn-BN=eSyA7dA!f)<9&gC3hKl@yD!jxQy%X#`gmWUSAbm$sEaS!-|+sZ06|aV0&qcp zX#bJEZs3pp)h~WAyMF>4z{L*>AO6mLs6F+pJ$OJB~Y@ZujQRTeoiCzH{gJ`0m|%_wL_+@ZjOYM~@yq zPBu)MoIG=eY?$Qf7j*Ud^_w?u-@beI{{4T-`M+Cl3;3HJ$BGYTpqjTn@cE;kvk!IP zceqe9?R%gDw-MmN7yN$=y+I?pa4)BQ+y8aiYqUSoUZG{uen!ip{SPgh_P?|o+RtgZ zv|rFx(0)nFqy37OPy02kfc7eFCGG!cg|y$$ifF&3t)l&oR!sXnt%UXmS}84%Rz?e= zmD7T06|@jqB`uUzMGK>?riIhi&?0Env`E@o+EUs&+A`W(v?$u2XwkGk(_(0E(_(3V zp~cbOp~cf`XbH4hS|V*dEs0h~OQzM+QfLjdulRrGh2z7l-DiR2KZr+~H=czj^Xc=x zK8Gwb_eFqxVeZ@67mN>He`^C+OM-p|K>p8P@6V^t@Bi@E%7-u({+AA>>fg=NvPpv^S!HoUPslk7!Z2pT|F zc%?UJ>FK2>&8ItX!s)77v-Yh&|E0dMxxKTyw|~Rn@F>gx&8vlCsa&bn>W%a1?oFHL z;;lYNJlg!{)zqwC-`a|zTV}xI?uTc7fJ`+hY|u3L2sdzpr4Vq|1{af=$(LP)!U;`M~iA}NGzaGYCJ_)NipsjUhxhN!2t*k`0EGw8u-uS zmmr-C^B+Ls!>Y{e?A+P?lj!im^@m0fuU@wv;6qb8qpiITsqOCW?PCt08~bX8+cxrH z4?eI4dWZP}0f`@ft$dutn+s>pou9sN@e!|31;kE~zY+1kH>O(q4BR@N(+y?K5|c@@;Sz(8Nmw?W*}bx@09 z7gPc|^E~i$`+SoE;*CJBo?OtK=YpqCXawluQ%uqQ?vk7({x84u@+~N0$wv<#yhuQb zaqmCRo`eGu5lDgVfdx{qgAcd@PQ4%U_}z1o4p3wcLuM(n_W~06&%5({aqf1259KAR zGK;|@{w{csRJ9tEzFD_me9{cvBM)0@Yde~T;Krubme%(6j;^lWp5Ffcjijg;9--3# z9ta;wzEJrLJeZ-+_#0}-IulcM&F?g~wXN^$>^|4s*Eeu+;8Ojz ztD~b0Gcpjw?+TbA@k6Opu29NB{qFm71~t0_1M6W z)QO3SDPT_``%hoGaOLV1uRTe9@BY0H!=41Z&{1UIYQ}4CWM$=n9&lA_YnlMMwa?(e zf^-ia0DnMKU|vmNAV7ui@Tm6or725++aND0FE6hqDyjxyM3L{m3d}!BBnFU?qEM#1 zrqRCP9a&jfc1Kp0XZ~5>D|xf?&nqh{JA4Fes!pD&s;UZHyEdi0y#_pUX0*1x*8WC& z;>SKd2?r8@0%{sjK{vL;pbIn&R5&^fx~_c!)GRs+Djlt(d>V9K`wXaj^m$PA=o<7T z4>sI@?t+ePUjta;4>B0OOhG~9>Jonq=m;$V@vBQ-`U(Z~ja%|EsGal^P$h}%Mfw9! zFKN+|&n^i9HIse=(ByXjbzY@}g4##H6cJdzhX6eJ#1axgzU_}d5tKMkPbr=fMftq{ z7yQ5O{|$fA8-5Gg91sn#CYh2(`L+M6{^^tyN-C(p^i}_F`e%ZwORs_6b2$K`wt-G{ zZ-W|4WS6-@Pk*@*N-3p`QckG=DE0vQCFo-p2x4cKfc|wa+TXC)-=h}H$bT;iJhAl% zX%7~7r1hM<_g?oZ05e(uc+||@VD~OEfRmXYA%BW|-H$bqAipq+2T!O9FW8RM0)qDk zNL(PR?0`7_`F4-T#(P;g4fQl-&?oZqbD?XHFkIQ^!4`wT-Z25 zADzjIdy#qq=(jn83uJqPhN&$R?`#Ds)7i;0=PsO|uDf`J#D(kE9><0E&=VH!BYNP# zWAmSwoSJRN{M0)6dEb9vB#2l|O@A{JgsPU7m9GVcuey5jE%tj~-NJM-Sw#Sn5)#YG z>jOO_E)k4OFv`lwQ4hw_5=k``G*g z69c`^Eib=JJ~h*u7wLKbA9Fo{tas-E+Q67+{eJ>F4!UxlhE9Phc2huqI0K!7&I3(g z8uaA61YH3d!Bx%!X4-y=rBj(0$F$ONnB8o{X~~IK^4Alf^|BH3v5UYk+|@g zB{shwED=Bki0?NE-G;0{pCECehZ3>mU0kq14rmXQKuLTG7al>?ln{TBKZy&JdyDS9 z?4nl{Z1JElJ=c2=lq|p9F2NoR! zkyl3+9a{9_aRJzoW(PPTWj1*MtmeIIdT)5C=hR~hBE>iuv!Z=Yz|S3!%7XX1-uuAw z$tQZY-&fU$sCm3y@ zroy4a7weBPPxPKX4gApO&@=adANC_-N1DTjp)O6w(av{9ceS+a^WbCm$-(~q4I6;o zG(1WdsrMc~%VKdjJf5KaaXXrrl#>?otRL1nJO8n<@m=G4_U_X@h7YIq06+BEGr$jj z^U4KIZt~0y6%r2NOy>eVT(n zkLEZ^Jmn(L8F1(mK%*en_ar8eYkhKUPU;ur>O7FL59k-Ob|fl=2JB65Q@%|33eW@A z0qtWs$bNg=jzsp8{wjzqn)Nfh1y=4)`WY5c{3uWQ8CcL~K_up`{@}}R@cQXzjqD#<-R@_+ z|DXQMQ@HyFzxws7um9fvsR{_rQ(vhrouOzM&BgPb5)k3^u!a_ul=7PfcFD zeD(TGuLI^i=qJ7O2;iFWuX-tENqR+T*~^vR$_R*#kNY-oSErT#_$S|)`0i`pi%Ip{FhkZ#n|=Mp)6p$?CMao3^cW|m>cQ05rIx-Ie|Mj zZ{N8!d)jpL+?l)gk1s$6b-g|GgpWHuJbxUkuWmPKssyX{r^W}#d-MMY;{)0D=SAxe zK78=lmp-6EyG>o5?Xt@zOmcK=u6E z%va}be=<%ftH9%se#W}d|D`1_e=FeI-}&zMzW;+C{>al5#@hh~G=TZdZ-4juKfH%s z$>)zwNd=)GQvT?Vxn0HQkA1;*m5)HZxq0FDD(cg}~F2F?2i;`tW$u;s^ zMF`O42CRPP|Nb0#=HMx7j`zY}Q#Zm>Pw17Ixn^U3%XZ#?UJ<;Ol2*EE~*M8-9}+b{EZ^{2r2#MIZwlrK-FRt=fOMfT6+38dcl zv@o4~gR_3+cm3+Xuk7h%^O#@x^!vme&19D)lZj_!(pman)`MiSR&)CZ9bx`|_O1h< ziLC2R$be-nv4TAyv6sQM_ufrNp@aYl2_YZ}J#-;d!4MJ@LJ_f{V()G3z4zXG@2k6Z z^WPT|P*!yLtpA$P!#OhpbD5jr&YSn%+`C|Db~*bu8ul;x)%)ESP~%|U%S4hfAL&lB z;(Vkmk_u);sxeKOyh7*Ait~}ONmF3ve>mhL{kHid4#SM1qxu;*#q}~z!weiW59d6L zyIzDb*~>5o^(xFWLiI9l!d#=%xiC*W0es|QD4v!W3FZxb+eP=xU5PG_RuKCX_=op_`po_jtz0Bf{_b+WX zex%=BKb`Lr?|~Wi>*u?h>Y)ALI%sggnPFrM$ILMctP)lktAbU@V{Ndu7|JZu z0qcknm>t#$`yK0yb-}t~-LURh53DEF3+s*b!TMtTu>RNpY#=rW8;lLXhGN5D{_zNG zBsK~gjg7(R7z4A%m>3IVV;sx@bHto5XN-%vU_8tfbHm&*J|@6CFd-(wJTWomg-I}P z%m*8b`C?K`hWTOsSO6A?1!2Kh2qwouu`nzgi@+kWC@dN)?pHC@0W*ZfA5`b%Cya{{ zv7b1|L&_IH6=4X(W@JO5@87CbuThgyt9G5b_3B$%HE7rf75e^P#wAVh@zdjyXm)tX zeD}B?93Q{*^DoJp^N+kb#r-4Y@7MR7#3fuzC{CU_{l=Ur%eTapyt+005n6w|dUfuT zaeqD?|11@amSnwrHEGf~$Ott4U8*iutVmuCJe-eD!%()G z%6K8B!BL$T5rrKc{f3qr`Bjc7ynUjjv_fNePT}jw8Gi*7A#t_Y}Fs@H*Vg( zbNAl;2M-@L-5KGc>s!L1ka{>Sp?D_IfO7X2&rwO= z!7m}bG`NR*KIHS*lT z88Zt9%^r-VMvj2Ojm-HAc&^BUKFgNBSrNW6A`<0k{>ASP3#c&`W#_4&`d2JcvPF&s zRJpSFXMYN+f5j$MqgJP)`d8H~P=1+0Y}P;OsxN{XS*Sl{8MYiV*1uYVt;HHyti#r0 z8?cR7Gq7N7VPnzU!q$Rj(ZZsoMJtQe7HurrTC}rhZ_&Y`qXl7MXVJ;xcZ<#zT`am< zoWiLLIurk2V9!-H(!{ zp%Nd)lv$-o72iv#Xq?)e@L&>3nl`|geLvyVBvhYdzyO~Ckhlx-Y&k7)5(WCmv&W4~ zfMx46dG@qvOO|Apvwxdmzp33!HQgV6|0CzBC?u z;k>)x-OeJR;OjN5k*3*CSZugZh;9Z0JV#(c^Fb zHZGR;o=Z9J`JK||r@c^K-{gDwtH1QVV62l}!8%9p&DTTu%Rlm-d~w~nZ{ENBi^s+9 z@`v{`8!-;Q{h;}3V4gxnLvB>`o;WP}75zHACk_j=6JZDZL;s7v6u(z)W(Hfzeb3|H zz9(K>N7}Aa7sAlLO8jj7t9eRP@9ZOaS(g{CMI`|A&(E8Tc}da3=|;%!U(UGNf8hP_ z@035}7mtgk{29i;_)Yp(;g0a>{?(swUcxsUcQVaKFudRK|6xADFCQ08RP=Uf0iFPo4U?IQP%-7W6n>x|9=8|Lt=$ zn(X8$7IimE)?H7-SUq0SaoL>xsd7Bu#2U`gB zV&_5SaN}Z}w~0Yrz*X34*t`~M0v6BP#GoqRW~k-26{-ND_X~DHg~HuXqi`=&_uFr% z?uUJlUyMa6%`X;C!u~~mG36)ZGZpzOqYc)3agE66L!tH`U#YshQKe~{Oa*ONDpHK_ znqM-%Y<|W3s`)kZ>*hDiZ<^mSziocU{H{4V`p@y6Pf2sNTv0X@!oc-E7DL8!G;)mw ztYH-x+L8bGMzjH0D%n8=Pk0A(|Kab$e|A33?#+9)95`}8-#*;8ZSj(2%a*TPxf<#i zpfU!=deNorqvJqT&2!6kb|%`TVU1(`VjZczV{^bBAXiJ$CrU(PO7?!sPEcsC|6p z+BN;;?>qPIJ$U%=@#8Y*Z+dS2!g^<$;kkFW{#h4Qv0s7hGuvragq=4#1KG0+sf!_h z_FH)CaTnywJ_66M)8SdU5Z;fR1#QWRq#2M?`!3|neht~R??CqKSCD7>HssNM33;~f zK_2Zl@HG7pI}K0NHz3dU3&^~^9WrjCip_iAT}D(Xc?&#qU&9VV{_O+stbGh}c%Og_ z+yasZ)J+a2=^%IaJ9t`0&+Hqqx>WR*pLceAo+c?hDOr)4IzgE~AziJR zIB`yH*6i#lxp_rsev(?5l|5?~%ttDiUtH#xp>{t#>4>Z6i?)Q5BdbB1d2#yaxD zq0YM>={V*A_1PVun)`Z)fFIV8_n--Bjx-0Fv5veejYs>ij=VdKPy4WryoBaW^Q4Js zT$(eDMPt)^X=7=|I`U~W4NXB?O1^|mf~Vt|@NB#i+YZmxIq+n?g51<*Cp<~Fw(+o8 ziivGJZK%zyn?J{f+bqEv*sR7H+Qd?qL2R7%!{cIUORc2I_77ob{grJ0pxI}92riF{ z!)y6pAubx?A?EAv(>>__Z-3&<_v_evE-rj-|Nn#b;_^Zi7mek=%EZNT#+gdu{^$1p z>iID+ni;K{K0aB|8q;iP?P#58y&>Kt(o$$B@)VC7Q=3ntHLz)DGaMp}*k&4L-FyjT zy;u!(QS501T+sC2^T^ zlr|Tm;{L<9+bHct4zh8^@Nr;+^o(_$a&^J{%u| zkHClFBk>OUjHNB`x_CX@7O#WTa4Wn4-VkquH^!UbP4Q-UN1TdV<2HD6ygptVZ-=+V zE%8=(d%QK?5^sb5==S2jii_xZSRWOOzrypd;gJ|3WO?z>xV`*{SiA?tMHCMWEdNe% zky`#ZjJ~~8(u^-(%q*nNo}=HrQ2+IV_0Pq<&+Y%#agkd7bN0VI|K%&Ft5)mJe1rb$ z2kW1Ud!O5Hii`g?F4|B(6&E=;hvo=*l}qDd2L66r#BmYL0IZwP#*?S7()Vrq&`fdz=!$|%PgoH5f%fXH(x%w7`LPMT2Ne+1MBM`b~3UdK>pz8 z>Cg5vE}gNwaOJ8wMW|nG;l>Z%Z$bTx<^28scjxC!Up8~atl6vApmyYjMT`8gN<~Z?c%ba$NNJwsFyvZ_=1QsJLEu(b{=vT;9}P{KC3-U*2A9LM_h2+mwpt zEuMyXi;g5?T-;fbhqp1ccs}NtLq?1kp&yrKo@FaR2X3E@vIW?#T{cV^F^AP66pjfpB=E&@X zr_jG)7R_szN2Ak^OTT~_H>csLc4Eo6^b?qkgJ!~Pf>z=Jm=*KSacT6tycwdVaa?)^ z%-Q*HT>2W!z4>rlx)A2!9M;bT+Kt)ipR5mI#&PM{Fh55@JEotta}?(2oPb$5?_hq; zS(qnu2A+~HKz8&M&}vH75>w{G2?dHePK`yZLF@}>Q&<;T5$H=jFCvnu_f zS~2C=gbAngbvrVy=4NGOXG2_^Jf&d4%9EGx6c)~&T~str_5OUNg{Z%E7#E|Uck#oxXhtHF%ErZ7(Bi29{f#xDml5?iHX<40q7Zr- zjd5|1z86tI@__!zv(V=lKtgd*1ihLIu?uGB%yyZbHY<&bXUqag&M>d&tIXFS>6?pj z5Q#pzP)Oys7g0c@>Lb*T{Sq7|?q+NzerY@DGwneBXZC-xj!j8B@e}=uU))am#__QK zr{m?1KmQ-xPTcc9)s5c{t+gExm-x`e`(NtDUx)a116qit<%jnx!n@8GdYVO~|2Pbf zwxIRvs3G^M<)c;3{;}~>N5CXv|KJeM?neHw(Ak&9hw`73i`z@(@Bc324nO^KG@9RD z(vJYo(HYQQM*Rqe=jd;qhxSW9|4+w%{wMAaKgZ|)gYOUh|EK!{4|B!bFn72=2>z%0 zLlhQm7?1y0zDZQ)tTdpMt#gL<^eovw4d$_zt#ek9ai_zSBb1|*W0d2R6O@ybCzMl^ z)08umvy^j`^OQd+7bq7gmnfGhS14C0Pbt?Z*C{tBHz~I$w<&ihcPaNM_bCr34=K+m zk0_5Re-($<(qH^Ds=l@U8-Db-(@%JR&?lVy(zsB5+&A49+&*6a()3<=1J zD-Vl^8W#t3&a!gy3TGG1TfAKVo>uw$QBSe4pSZN29QujT`~Ls7{>Fgfh0TM-7Z#^j zeZSv^xI9?qEzK@x|3<_9dB6HR{{_@ItZaQ?0SVOyR>3?}HKxHnY&V}bv$6Idq58m6 z;EmC6(wDZIKbL3j@CSM3PQj?(8T|+wn#Xz(#@;T&oAy`Xjd?UL;UXx&dRUkh@0=%;A?JoPIA{H3M0hcE4S?*G-=&!##SAJ$3!PIWB4 z`2H|x@bFP6p%mnka&+RtLla-<=_T>@@h$Em8c^&1Nl2SyErm8bOYcF8$5W_=uxBW?S~I{c5>lzxx3vw zVet|2%h|uju>Y5z&-<}{6?A`afp--!VD=YVn&qy7~%7KhkSLtW|<;w^_} zw1=Oe87=b=1^LThwYbU!W~?1)TrYbZl*-Szpbnfh^Q7!0|E`UihM08hhhD&4B%I4>#%>tZB>2W78S!b!*zH($dVFduyr`l zlJWx9Ujzd}N^QN6SKQWb@7sc__f5DZ;!!ovTIBqpSw80j2G5lRE0W1Y9E49^s zdBtrtde0W}p)DM@9blZnR{xdoceM(z8nC9+mSAngZ8a%lYcL#lH^jskgDt^2xF**F zHUKu3+6v!Paa&E_vxPn{PdM&quor8v6~4uiqS*@A2H0L|OS7Zmwy0%nNx@b$99vbXq^MC|{t;c8JnCAfJ0T+soum6#Y#kwMY z%Pq^;dUn>5f?t95jlmXn*^*)f>sD6**Gg?!U9Y&UR%L88zGX?V1tb}4S>3dxbcgls zw*hxbZFRp}aa*m+*y{bjk}?>OY_Qe+z9q#O)}0>$9+ld1eq3=|ZQip*g8P^2Q)r6< z#v5!o{|SG?upa&l@K>p=@V_f=tL=NXYJrY^37-`p#b7J^1^f-ey5?1>9rPob*A=sM zyG>0>yZ3CNc$oPP{=NXI23wl9@HY(WOLPFts-(%VgjB36avc(7Y^}hpDC+?e47Qe# zttf|K{jfQ}qSV&mN)@*SLlh+o`n--;wW6E{C=Ip_SFxfzhV{q40jibSdR)EYw$OZY zS8$g=D*5jI1l*+XLwM*@w@2^~^Vz$ud^}Ep!FpBfl>RVCj0#pWDmFrni zTETiNOMq3Wy;cn>W(z&*b$-tl@?pEiR+P?wbc3x{jjSlcVSRWLK+{rN!<$vy7QFgi zvLGLhwy~mIhI^&jU~9Ow6~!60IX5r0gMPr-wqmxB4||kYD)ymkODl>eKx44w+`@_y z4(s8q0If^yg}14gE#$+V@7dD-Ew{I#Bmy!Fw!+(iU0Bz2D7AxrMANZiw$OR?de0WR zHZnU|QSt#34Yo9PR+J^MzT|g6=Tdu1x>U>-IFqC5N@!RIx}U~5S?E6Qfr zwz)^C9rPocdsfUAI@?ZLt9iv#cd5KV+)&aMX_aBQF08ns7xyg0qX?&Lt6x=;m) z`jWs8Z7m6^xUDf|Y^?`d+W}Jzww8oIn+Dbohkj`5a9G7{(aYF69tmw5z%+xc!x2`L z+pvB+>O)(%qbqKUQO4H&SS!jiz;uJH+c9uV1t9K2TUdO>ZP}Nxg(q22ssUygY+;F3 z6f0P_O8(H6)%c3rVwSPhcml*Iz)XWJt5k?juudpHv_+&<+!pJ7TU2QG&4+fB8m>iy zEh62D(jV6QYd*BqKcnKdT;H>W+5m$yttg`bvkbQSPlEUa>w+wRw$z>=yJEIb8^G;7 zTlyH42QdmT+h9wO3+*RZ51(9W2mMHRe#LB|Hh}wkwn(6(r$RdlFvnmkya3%_0Mh`| zOYP;%sF*EuUZOI#@@K(k1t>Du$|tbz44vjKBTZLKM)xUKh0>Bn5&U;j6{BF|s{ z=6I&>F?qn`0h0$z9x!>pp zpppN#K z5R<|`A1p+_&j<6vM6fQ`e;4{5K73CI90l!>U>z`TIKfu%PY&PZuis|m*02?QR|p&( z{Y2{$rb0!~J{T3#=jf#xmsV&ou9R}wx{!$_i=i~6zRq3T$I3$%e?z=}DO(p3t)uUImPx0=*g-AszG@U<5VjwZI4((0>3UWPn}=j4%=OdSHY}pf>;`WP;uZjF1I- z6EK1n^k!g$Y|vYP5pqCp1xCmPy$u*45A=3mgvp?H03(Ee-U*B#2fYgzAr$m(V1zKx zdw>zbLGJ}dhycA07$Fk$eqe+s&YB5HLav=)=GWv7nCtBPc*01xAPi zeGC{O9`tcwgapthfDsZwp9Dro0(}Y?AsO^(V1)6Y&j2F`K%WIh@Bn=d7(od7JTQU? z^aWr9PtX^E5yYS`0V8;Uz6^{Y0euA+!5j2dU<4n~*MJewHFg~s0qGmS2vjJha}yZB z8uTq-1RKz|ff1U6z5|S43;HfF0uA&%V1yQ+?*k*W1pNRQp%v(dzzD5DKLSQTzr$l- z1f-t;BM2ag`k%lE9-yBBBM3o114a;m{tFnv6ZGG}2x8FBff2kwzW_#%fPM*#;0^i} zFoF;0*T4v4LB9b;@CE%A7y1I)&UyppINIGcy10$G$o(YUV23-h@a0B!#U<7l}vw;yTK+ge2s06wQ7@;!gxxffjK+gk4 zs0w;MFv4%37XTwv1HBL!p*rYAzz8)!F9t@a33>@I0tNI^V1!zrmjNTx2E7~@p$_O3 zzzB6guLMS@2YMASLVeJyfe|c0uK`A|0=*U(p#kVWfDsykUI&cO2=sbjgvOvZ03$R3 zy%89pDd1+E1bq$|p%>`$zzDrTUjRnv1NtH`LSN9AfD!tE zz6^}eAGFc`13(-7KM=Ih|ARmq{XZDA(f>n08~r~Nw9)^=KpXu(9JJB@BS0JdKN7Uj z|D!+~{XZJC(f?yW8~slQZS+3_w9)_eppE`#f;Re}1={F;HfW>&IiQXHcK~hlzawa) z|D8Y^{qGFg=zlI~qyJq%zXtyy@Ib!-MsNlF78t<|^gCdLYoK+&MttXRXEJB>0TV&b1l|Ui1iBD-J0KJEEZ`l0EYP!ocLKDa z=K${lWP>gO-VMkBJr{TnAQ$vJ;Jtu6(DQ-!0Vac90K6ZN4|*Z+0l*Z{i+~RT3P3Lg zJ_MKwdI|7hz%1AH1V7xY?Sgnr<+KY$UCUI&bT^mKJ)js9N_+UWlkppE`t3EJrYRiKUjUk%#m|23eE{$C5)=>I=J8~wiyw9)_TK^y(Q z0kqNo8$lcWzX`O_|C>P@{l5jY(f`{(8~wi>w9)@NKpXwP6SUF)yFeTLzZ8do0@CM!5smZ1f*{PBOrYn7y;=!zz9g+1x7&n9xwvZ_kj_RegKSs^h00-q#pqzApIB^ z0qG~e2uS}4jDYl0U<9O}0V5#&7cc_Se*+^R{Tvtp=@-BVNWTO|K>8Ih0@AO65s-cZ zjDYl8U<9P!0V5!-12zIyO^e9`CJ&fAVDf;;111lAXAex918rvmrUM@VP;h8}0v`p` z0zDJ>7@#)jLg3?oI-q9(p8(VaJsbEWpdRQsz^4Et&_%$f0rf%81wI3?1U(PKn1-V z_!__(^a|kX02|ONfo}ksgI)!E6JQH^HSjF}4fGn|+kh6J*8<-Gv;_SJ@LfPF(CdKj z0a}Az4}2fc2J{Bt2Y|MqHv&Hdv;(~f_z|Ez=*_^70UbbZ0e%AL2zo0p0%|X914cl4 zJ1_#$JAe_8-U*C=^e$ioq;~@&AiW0|0qMQK2uSY(MnHN$FapvCfDw>B2#kRAAz%cg z4+A40ZM=R6`2CI7j~!^^_0tKo@%s54^ep%}bp3P&ZM=TEfHqz~Owh*brz>dV_0tWs z@%rfw+Iao+0ByW}dV)4yKfOR3ubN3jZM=R4 zf;L`1gFqXvpTVGw*Uu2p#_MM&Xyf%W47Bn384lWb{fq!@ynaT4HeNrYKpU^0(V&gj z&lu3g>xT~7c>ORy{|SCYK%dJ~U<9O}0V5#&7cc_Se*+^R{Tvtp=@-BVNWTO|K>8Ih z0@AO65s-cZjDYl8U<9P!0V5!-12zIyO^e9`CJ&fAVDf;;111lAXAev(g7&`w(}594 zBxt_@BV2*sXC^ShLD*ghjBpvY&jLoM1KVcMJ) zjBp&buK-4P3ENi!BbY7~wAHb-)OyZL=O2 z0qG6E2uN=PMnHNKFapw>ff1120*rw4R$v6Aw*ey{y&V_<=^elb=62Bb2S%^}y$cwj z66oE)2$eza0Y<0-dM_|SRnYr@5q<-`9~hw;=mWqA)j=NwMyLV$5HLbb(1(E$D4>r3 zBh&(Y6d0j4=wrYLbwD2nMyLz=1TaE9&?kWr>VrN7j9>}+G%$h{=rh0w4M3j-Mra87 z956y7(C2{>8iT$7jL-!1MPP)cpf3RqD z^bKGH8t9wA2rWS00!C;F`Zh2^E6{g<5n6-33ygq1$9upCNZ$uWK>7hN0@4qG5s-ca zjDYlGU<9O}03#s%ColriPk|ATeg=$y^k2XTNdFCtfb?@<1f*X8BOv_}7y;>5zz9gc z21Y>o4KM=IZ-Ehzeg}+zv<}z^ST!vs5BzWsSk-Glv9fMJG5#V}?P0wKU`XjU<31CA zMGp`p!i;!L>@nMAR)moWbD|#AU00vlf@(!=Ky6HILaj^GBPtVBh^oYIL^Yy1QG=*S z)F&(n3Q>z#ik-rqV_j`p+O)E%WmD6pjZJHt$~N6>8rsaVq1jMvYB$fdX=~HL#=~Z` z&2XDOHce~kR8j)^&)l=mpcE%JD#oZK~}ATcvH9t;#mt zR&A@X&9I$lJIOZFHp^CPn{At8n`@hAJJ~kGR&E<=8)h4B8(|x18)X}9JI*%7Hr7^Q z8)qADn_!!0n`E18JKk1c>tQRj71?^)ifz4YCAQwS=nX%(|97(PWYej6C)-Z6PAxjM z?9{3gdeaVrcj-K=h1Mc#PiwKYm$k&&+uFx^tTlSO&9ru_`%PC(S6x>_S5rsP)za10)zQ_})zj72S?a8G4Rj54jdYE5O>|9l&2&_qwa!M@ zTxYAJ>00Po>RRbq>)Pnr>e}hr>pJK<>Ij{ku9NO}U1wbvT~}Q4U4PvG-9X(S-C*4i-B8^y-EiFq-ALUi-Duqy9bL!J+3T1(mX59C=p1y8Iwzg8 zj;nLg@pP^_HyxVEY+An50|SVG#2{iYF@zXO3?qgUBZ!g2C}K1*hM*G+!k%CfEP_pN z2nWKEa3Y)uF5yD(2v@?5a3}bLfbbxMgoyAY#Do_iA-oA6Vl3fHNC_F?NB9!~L?97F z1QQ{IoCqbth;Sl;h$NzjXkr`@L&OpaB94eB5{N`1iAW~K6DdS0F@aDLX@rVMC)9+7 z$RH*XlT4BROF!mve||bKgP2Ja60?Ze#2liCm`ltf<`WBug~TFaF|mYLN-QIm6Dx?7 z#42Jnv4&Vn{6VZE))O0ujl?EmGqHu(N^B#x6FZ2V#4chtv4_}8>?8IQ2Z)2jA>uG` zgg8nZBaRa%h?B%A;xuuFI7^%(&J!1ii^L`3GI52tN?aqZ6E}#P#4X}Bafi4|+#~K2 z4~U1vBjPdfg!q$qN<1U}BK|gA1?7H<|ND*%@i`T^JW4sC86mN!8 zackTLZ;spIG`t1g5^sgK#@pa+@pgE7yaSHLWSG*hE9q)nn z#Czer@jiH8ydT~lAAk?U2jPS9A^1>y7(N^yfse#T;iK^}I2}i0cc$grd4NQ^0{xhm zq0jOT^iSS~zQ_mA?|2{j7@tCa;-AoW_zL<7UqYYYY0_EJdD0tw58pq3A9FhkyGnMI z?W)*SwfoJknq76f8g@19D0a2%YTMPZt7})!uD+e6ot0e!yM}g+>>ArOv1@AA%#Lbj zZD(WG+|JgHX4k^5rClpK)E8u0zPkr#B$^qGOv7pBGz(fKT4h=lT2LRU zGzzU2tv0O=tuCz|tv=0?W<_g2Ye;KEYfNiGYf5WIqtdKtHniq6TN;hlg4UAOiq@Le zhSrwWj@F*mf!2{m(ClcPXus1s)4I^Q(z?;Q(|XW)(t6Q))B4c*()!W*(+1E6(gx86 z(}vK7(uUE7(?-xn(nirRY@|a!?KY=YqJx|&4x2d{p`$~4Cp`>{iC2Z&1?6Z}*{!6h zyjP4WqHM1n|)H8rVQ=J!DMrMc~1h?}H7PgCz%ZZf? z5AqZ47j|Y`3mM5SVC{{Wt?A&N?49qUh&vK<)O$yGS~4?BWpA5yG5(^$oLxIr%=+%1 z;(yR!V$w_P1%|bAVD1#&QsFG&3a^MXRlY@#za%4knSjZ*WT&Y2E1IaLXI8i09aM>X zPtYK6ehP>CD88MfRa9%Y=P~W&e@VU4U#NR)dQCm<+aRNER5X81_{qdRNhf^I_@4A7 zxsP{$DSwdVCa%ig!Jn$$;=DC3R>RXS%wDUmAKOkfK)8utET7H%*?2cj7IKVLrMLgSGJVb8i zU~QkIN)#4kHj#94^z*;!)`c@Mz)S5fEcBcyisGmEKhs=`TcWmd_4azgPn8bW#;K$! z8J>?L4mxqiQiQ`f&h+0R?+6n8&njbuO*P8A>k(wmGdW4rfGv<-Qa9oUa-PEBF- zboEs2h@Bqj5I?)%&vm=G> z6WkwVHDdMPOb7@S*=EH%(Y*TkjL)d#@Km-q#wO)=;p3Q<@>U63!uM+n)WbcVha6CP z`u1emtE_#;DgqOqI9jj|(i_o_FtekT8I_{9F=ErNMCC_HJnOnGu(yaKg|3ahFS{Je zlsNNV@b-l-@~q=IPt;b_AgjISMl~m@btqfdk~@?W;XBj5v#^DGvhOu|H^Wf$j&u+b`4N&l=o#cX$Lzlq#Okq^RpWv%pGD6SD};ml+<)4t@*b#BE8O7{}S z=3IB2lKC!lfM&dCC#NB|CwH>bvh*&JSE?@Y16Yp*^_<@&-*z2Ru$?g_XRVUv5-Lb! zM++Gmvy9kWA3-%mKj!a>x~}qEJ6Rh2yF2SYXpm4HVY|dKq9_ao9n+qW9uB^fWZ^zm z{yMhm*mq$QGY7<6VcrZlz&@@fC$v^A4wB`bla6#+9=}#RPti}LE!{K7iEJYjkTP2nAhhnPx8fg#Jf_RsV)|^IC3)bowzEi`%7-?$sDDGRjj&JKR zFPfl}T<1&7#y@ubE$d*;V)@$u8_i;7lh_T)5!~xc9-{@PEjLVDsF3qQg`&7hYr6(T#5Ggx=gm|O){f^kjMZ>L9cwt=Q1%eV`{ZVx3{CY5a<`HXl^l`i zBBv-qRn0thMhL|sRSL5qYer`G*vX1zG1;yi{REOTQOeNMdFr^#*b~uBJ?*plMULd$ z;EeVqc~%zoDR`>Ll?SnWvU!QUy{{*ew3*ubnQiDe=S)lw?@OwBif3MV?rUSeyR-g- z2Ddu(Q)GMJaO)+W%9084rcP!oNS89_^Xl;LxVcN82(49t%(UH+s++b%pBe{=GN5dQOUXXv5y3!13IckFk{^tX#zsFr?z(*63*gJo%$-vTitu| z6=itnK=1RCyQ(g#KCB7qvwjD>&9fe8-a6(>UZ(6)@8@(pmK7 zyzzOWj3ST4nmgHTIV)vHd2g8$92{aF$FBDrBYGm<=%Er+4Rn%@kapzCByHkPIHx;~ zO}poNK{JkPsd&!zk;yqz9KsR~C3N@R7?H+tU{vND4NXlm(=L~;k@>19sh$NrRs9@~ z6r7N!@Gl2>3*K;w=xxS&q_6}5>g}A<0TIdl3fjojJS+Z;m{fN>GP(M*A@!(F*BtzO_v*=$~vJ1b$d$M%9( z;ZEaQMvo7D%=}w0I&hHJX!kLK8fgImG*PO0179dOo_x`9i*Ket;xU4KS>WZ>PxUsU zA>&TKFzIsTpUTrQo(VO*TwDfDX3Cz+2Bh_pHDLG#tWKyeJR+!`-BJ}E@tWD!>6KGY zNw~aE-^)R=#a8J^#_|fua_WS6w#UEjHl ziYgQz$=FM$$@r-)$F<1XL2s3IP92;*$}2A7i28m&xa=#O{x5%sKCa7HLlcC|8VS6x zP_H%l3+Q_V8>5#;ABxGMdnx_BQgXQ23C>cnYgQtEkK8f)Qsl+R&CJCCIgxiop^?*K zw80OuhtR_V+~}-~xooERmiSGad3-v@&NWXyE&H_aOwb1T5Z8#jy$StY6`VU^ed&v& zE{dZ%toBouD|?;_Z1wlmvJr9MRrA_&QmyOIUelA9E^WQ6z21Y z>FrUK)yDZWi|$lC{I{^x?qMF6qj|z?;S73K09o-|cs)Rn9p-c{{*mM_?-SwKIY%O% zIxpuuVt4i%#q7nJ!F#7%tQh1l+bLMUbZXCujIE@|ed6uzvznR1F7l2G zI#}=|>P67Hh&uijA#}<9jKcih5vd8Bgqj>n?>_WY_EJ{g@MLytR*JonahUPTe|TTP z0axYwA}2=AlCIKDW+jB&;oMt}bSuhU%2-zPiA9H45#IVfBf{3PLTZQ|5znOzxqvHO|w0J(OdYjVy_ z_H}x`UzLy*KEC1VT&~=TWg9v`_EaKc=1v`@$mR5o+7$T}PXCubM6x!~>8fy;HrfYw zG4nhYRnvczc6Pjwos^?-PYqZu@?*>Pwscj@ zAIc_)e~fpE?WJj+H8*N{-iwqziH&5*dFNwNxa$fg2b03%lcjm_d5s(`Is2Rf=(7tP z*}K(M;wFYo%zc=A#jj4%8!w?pTmN7F!}|&jXq`4OzHP#vp>?EZ_!|=12Ad}|%sS_L zE^KF}Kie!}BD0TsT3UD2aQghv`6FdbPyd#06t7g%Vkff@gd4c^$*@GCZ=+M?Y6LPNVUIqfbZdNZl`OJbou{p!*(g zYS>>fSUGkLABtz>>ek@M+-`BJL?Mc!!b zZ)yCX!;)P>kD$5qo!kSylbjcMIk;b9Ie4^^JPh>;lLQTo)Cuo$>^ajiXKEU|ERU%# z9Yhc1QWV3vPV8>-joQ7AR8g(CXu->@lQJPEE;osJ$K|bJ5w}iu8~Yp5-maH~0!BY} zRGfw855KlayM-a{8^c$6Mv4C7Te-w$G%M)m$`B1yjN|z^jLaI7l_V&QKz}Ncb`! z-CxGPpLo_gI{bN5QQU75Mu9}MB;4Prc6g8M2;qET3ad-VDc`Sf`oH`kJRSPREt4+_ z?ZLh%e{Da&RjS+-#jqb1l%01v$ISm~h*78W|E%1^}QPk*Kx`8?Mw^*qY||=l)2A)7+2!!C9mN|iL;-2N<2JbKtx7fm@3}Y zolatO@Dh;s7v$~ zX)*NU1xquRXO3aH`inF}WS!G$IgfUu`i}6OC*g58acQx+&fSuF@@EK#jqQ;YBu*5F zz2}5+=tYcMZaLWtJWt0ya6QCOMOI?r33cfm1qqR}GgmT}(Qig{4!O=+8-LVuL&ODM zoRpOvrM8jwwU1?+`yKQQ@gk%<1YtSPmC5eCL&75WMOe|7YRDl2rDq*SW$chDRXy1| zlmGNuoIcz&Fpp{)|M?1^|4DXN7v@~`!&5#NoGyp&X3^;572LjYY4k1>`4?QsK#douJT*UI~tSC+#@#E9-K1hBE!AJ$K|32*Ex@_dC`UHBnE@pEMly>Hp4Czyrzm-JxeN|(m0vllzK2lAp= zUVDS@#gC8#x>8x=0)12NW;tkgczURo$0a&ANQVhK#7=a!Wejy-s78BLr8jhanli(i zE~*}RD?kAX;vhVqRHx`(CTW9Mdanmj0I82f3=S2+D&{t%?FbD=)0^NQw9 zmEG;Q4}&&{WBpDkySoM^4`4qHdnf!`yqSI}N0D5>+o}AMeKjnWL3a(!+sCcR?-_B= zxjtPdQPLj>CrxOg*~IGTb>2bhXr?(qS26Zx1mxC~nz;`W6!Lbao=|obj}mHgQ+PUF zil~FbDRzs{am;o}GbGEsC-_bjPEsFd*N#6TQ_H>RbX5RvYT)9e46id@L9y8Q0|nHn z?yemrkJYuj`I73wlaWcztK0*`cBbe5uW$A3DXrz^?sdGM2^(kcXZHyr zrFE8igw=@bz*!I$nbSD_nbIM=u4GHVVsVydSH~uTEfFu+P3Td+$%7yE7E?NKHu z!ZY#{v!li(E46CvjhJJ3>EUs%PLTsObF};jE{`wzE$T?(LT?L)*0Gcjn{lM9{=(7D zC+P{i2rkF@E1do>e+XG{Q_-mOn&}4>$Kw|WAG04z-80&7NrC|B7^jh*ZB%VT@A&bY z6k{LDW&Z8cDyMllJ@TEHvOIi-=p}n$fTz^ixs9ip^JVYJaTJG>(N^|`Gg6Jy*VtK^jcYmML9Wx)1w{O44s$S z@q{2tHi$LCwKey(%-5NaHoM|)e?C~uBv;6Jyms9ZON?fp2Tj)*=BnG>nmKn z{iV;{UF{dr7rOTp4U2E6vG?}NSRPi5b3W6PePJbSd#>)=xBXaT5 zhVBzg=8bTvM0bcAD^&(hr>9Dou?qexaU;oTej=CT@)b`1mp{Y-w?+Iw_RZ`I>LK3G z96LH(67-~x@qZSxE51hJac(n48%AH(1u<X74EZ)iyaQwM7)E=)I%!p013Y}$ z%|cuIO-LRuex0>8rWfb;$g1NWW?gaE68kWuiO6#NblH^1TEgjK3HypDL3+>4l~a^C zn(iUJuN>uiS)3m~$Gb15GiRT#mv1J0plCR|X?%6YB8IzDRpC3Wreu_7XN2fx~v6%ze`^)AMKLh4#At)k#R}6(_`oH!nF3Ja_XLd&s^P$0My}qFXqgJ(Bg1Gt&{v zN|CMP?Ub>-zQ*bQ>c^<*>c+G7)+)jsYDEnfb9^S#hxyXSE3+BwW}=>+^ECP5Eec9n zE^~=@IQ!-J-5%SeucbC=OxJlyi{q~}pS&OA~ z67pwgMyE{72zO^lS_+PF2Q&X>zED(VM@YA8Cj{1FJY*Ea_L1yxsGPMqLYs0eW~y^F zA(riuY~>i0qv5YnZclW|IKzG*R=c~(Jq3Q_VqNaWJc#j8&vBT^TOimcPBgv$`xP$U zDjHE}>#(yiA=#6Yym%pzceVXf_OaA~^Z570SCy}M{&`p2Qhj;Sh04Xss+t{YC40TF zMM3+5{+zb-4e{Kd{N(y>+?2(#9oi$DJo+kSmB0<0D%wi{FJ*^AY4p0`wa3qO{o5Uz zke^dSn;x)9I+#0G)H`fUN?rfpc*6NaU>dt&_!ce6!HZ7>uHZFHOUp~}?ZE9=a4W)F zA{F{GrpqV9{wDif+fw?NepDXC?B?CqU!e(z({e*YzQXDM@`o7a+0s?4$%t&8c9y$< zgT?zN#HC^i!iVnIRnaZzV8$vYpDxeQiW<`YWCHq(tO@+t{dOnCoZ|6{hw}J`n9kd^vL)OVI8jwO@!+vdIW!G zTz5^PV!nJf{dh`Ej~%`{`6K9iLudG1Q!Y|gO*^7A|;M=GZ}j_o+x*-qusZvuglWuTSJq5+>;x6Sj2M~7a4su z(fL(8n)ucAOVXy$?ObkaYtUm|*G7!zJy33lO%1-}q>SI9A#sLj);ZjDozAc9(aHBo z&@x5pgs*V=zx*LWWXE_XQWA4~(`0$S7gY5tWDa7^bc#!v%6=xwQa^BX=2$rO3)c8q z#hzCmiSOspN+8re_L?0tLA6aaD|5MPVRU85Y=ODfN|8aorNP+V+5ybN>X0P23mft1ngEidn(0Ayu`?!_P2TK!mjv6Ovs7eC_NN9SDdYG@8;mzJ-M>C zfNdo_6Up;?8`Es;<;Vd3@BUPNny5(TD5*@RxVKQ9qHk7o4$aq|6Snt?5w4fYRgyrT z*rCkviu-IoO^)zS&g0}a;Y z-BC0wtBZC`Vsp`eusHtXpj3KYL5TQ~P~_WB{1s0Bmp?>H_g(TMnk~vH@lzxn#daL4 z@i)R|D9qvpNJr6k#f(-w3$5;>^_2*F+b1&mJ5>@1eK)G^vTuvm#GK+c6s;CLje8d7 z7u(qVjO+ig_a@+tR#oG86=g?61qBpLnzehAt1e_oUhPt=W?{X}T|CcP8!3 zbV>(7WLH)}1Qi4oWCvMfRRLKPR9xVb<#*njH)%REpr6k7|GwuB_j%rX&pq3{_ndRj zy>Diku%si7SBK9Tp)DN8B~T zYua%4{H$i%_J;a<;m^6r>+h|omrSaXvEvtiD(SU8Ws%7QE@JdkQ-ZY)1wWAv_W6e; zm&-erKG6IkaF<`ND<6GKIGTPmAlAJ$aaus7JMQ2wU1iJrbnj-^rkgU~UkxsaH1}Jd zAHHEpDtpkb9KL&jy>VCO2ieI?opR4wiPJN7vOcy-bG$q#7CqN3MISo9|< z3Km!ro+{)^J}>;h&?!4pxL(EyM#-!3uTwcE|q;pX5TlsbdKz=GK#E9#+B)p z95Soy)6x^ApOaQfYo$CXUn-Cqq-LpJ`rYYK>7;Z*x+>i(os`JOejxmb@E+lv!dHa9 z7QQZgPI#{9Eg?~46a7_47EwhfiONOrae}DPt`!Y_^8fz}Ui|j~qevxUidsZ*QB<@h z+9R40t%x$Bl;}!PT6DE2D|%V*NWh;J1?EQ5x|7WkQDLvpd?QprUN-(I+E;mU;@7j9a( zdEw55pDg@h;lYIm79Lr6bm6gu#}}SlcxvI9h36MuSa@;am4#Oq-dOnK!dnY}TX<*T z-GvVpN)|u8_?g8M7EfI~eesONFD!m(@yx}u7SCQhckwHWUt2tX@#~9(Me-tbv23w? zv1+k;k-1pASii_xbjwC$U)vyV5H=VaWg9IUoQ<}P-VOPNal^Uc+X!z&H|95%Huh~? zyRmQe;Od2|2Uf3M{pRY8t2eBEZ}rwszW*!l#Q&hZW%b(C2UqW2{o(3Et9PybZ1vIA zmsfwY`poJRt52`KzWV0s`>UT>Bd(pdR=UPmt6pnbYhUYHJ5AcAxmbF&^cv|8r60&2 zl0Gi|qx5;%8=?CXe=+=3@~))%;P+&oGHPRQ4hmFPsJ^MnsBcr>t$tWdS5>IWRJE!m zRh6n*rB|_4Z7R2FM&(t_s?w^I%BAwF;;M-18r8Q{i>m8Y52`Lx-Kg5Dx=8g))sw1U zsh(0jqPj)(7uB1pw^c8yo>lz^%lEllM;kc5?sZ z&6D4m{Ke#blXpyBF?r+UHz%*0JT!UNc**yrmmdY zJGC`6GnJnD-qaOSqf@s`rKa{zZBJc3b?ek^Q+G^#YWk(AC#OzOe`WfV>1U_jn|gfe ztJ96sXG|YI{n*s=Q>RZKH~se1J5#Ss-97c=Da!O8r+z)9pO#E(r!~`&>AC6o>5=I@ z)5&Shbl0?dIzGKPy*$mB_D|n2egE`B(=SioKK2FSdfBMGhebX;Z z|91M+nbTs8Gk=_JnmK=_dFDS~{U;ifGwhiUrr({`%=FB-W^6NtnUR@`6YVqMnbgd; zW-gzZn^~C|p83wq*38Vz_h)XNxpwB!nLB2lnfYLbI{VpK`s`V=oZ0scCmK1LR!zgW zLZj8FHK)snda}MkU#AyXJeEV2A6V|S{L1o#-( z_Nwd^**|1oke?+#UfwU4%4Kr7Tq$pt6XYtnMqVms$|vPnc|snN+vJ<_gYs#4T<(xx zD1S(Pjr>mejq*q2m&v~^e^maMJS@LN{!94}E96(oza@WG{-FFh z`MHYU$-l06PyQvvTXLeJRB^iE3p-&f2lCKQJh8O7s@HAPDCyyAAn4;5L(0mW;Izbo!h zoUeRX@w(#oipLZ$E1p%{rFc{ElH$*bw-om&?pM5`_^aYYMRw&p<%!Bum7h|Ql%>k| z6(vflvQnv5HYrug3gv*(qSPq$N`X?YoK@PCA*ENDQl^zN%Du|(Dj!omp?p^PYvo^+ zuPfhCexUq}>SWbPs;{a}H=J$wlHm*k!@xFhKKUf*7({P_p~E0I=nMvf*|4Y|(J$#& z^&9$m{eJxc{hEGLzooxPf3f~{{nh%b^w;Sx(chuJS$~)Q5&et$U+7=be|qq^LFyo7 zuxgMrc;4XggXa#a2f2fFgDr!;LEYfc;NYNluz#>`&^;I(oE$tbc;R4V@#ew12P4LW zand+v++$oct{V>+w~Ut?uQA?ayv=BtHyf`BUmLzLd~^7g@K3^bgdYgsAAThKO8Cw2 ztKmO~{}TRt_*0R$!pBAa>y!WgbqxIfkMNfxUyKkUCr8eUd@XWjgcxaxkRuh5#t0)K zjtoTL>sune$WSB`Id_t*`Q3h!=F=MM0p|hN0rvsV0q+6df#`w6fzbow2c{3q9r(t9 zr30%6)(-4FkUg+|VBD}~STJlDE;U?a_`cyL!w(HN7-UP27#=n}ZFt4-n&H-oyNvf3 zA2&W|JkIon@iV4h8(%cOZ~Uz3c++dfKN#OOo^7f(QB3EWPB)!qqMOQ1C!2UCf+=Yl zHl<7>rZ&?tSpLUeg~v2%+AwXJt}$I`nlfErS~MLr{oeEg({-k2O;4JBYWkJwM$^~L z6!V$pQuAL-CFakW%gue}nE7gR)_j@yX7gj_znY&l-mvlN`s?d|T7PT(uj_wXe|PO7vr)-?MaoWb|8(-KsbK|UyFK?W^an44CkQYAFQty-d^u9jdCB7No zsxRwX^tpU)U(^@(&HAqJJ>+}Lca87wzPEjU@;%|Z-uHsOWUiZD>yUzEh?@izP zzK^~0j)4K1{8ay`{&s(l{{;VM{Ac?==P&mU_^bT&{&V~yztk`H*ZSA|L;h|5MSg>S zuRrV8`%V6|-|9an@H7A2{^$Ik3;f9cg8z)b%l>EmPx;RZT;)GC@Ew17AP^7+yn*Wj z#=vYq7LW&+0dk-t@O!CM>o*Q~$=*^*Xf~CQ8gH6HupeSevj_am%>$<(VOLe#Cs$<)mb+#9EZ|G|F z{887ve8R%_RvumX<;qJdZ>+qy^6JXVD{rm5vhvy0&#a!ZN?AQ)^|aNqRtc;1tE|<^ z)#}xbRmrM!RlMq2Rj*oBb*tZZL{~>wCs*fJr&bqM#YUA;X;d58`m5w(y+$9>S@jP6 zZDVCdy0Ow2o#YtV2Lt*E&6H+IbA{$g%_W*+u>6m`ihY`UHCJi2HQ&-aqPbr4UCk4k zA8J0UJzo2)=0xppHBV~Z(VVJ1Nz2sMY0uD>YQL!EYn|FYtwPJuTC_3k@5isy9@HkZ zBibKoU)Nr*eMI}1_7?36+TUvbqsGuo4MU)G(aW9k}oeBGJ)uj;iryDp-W z=wv#JF1DH2Om2>Bj%|)^j&DwE&TP(aeq(cW^McL2n;V<^HxF)ZZCxg&FD=AO(iGWTU3$~=~NBJ*_S zh0L!ruVh}&ypee`^QX+8GpCLHE%RTQe`Mazd}{2|W5am(J#u#&~cC3DE#4r|ndXO7i zUtNx@MZOccIC3cRVC2ro!;zaKH$;9MxhL}T$V-u@BI*4nM_-NnF7jOD*2teDr$@`8 zx+o<|j?$tv(W+?0C;$KV82JC(=sD5Ws6MKSDx#WbBI=K3qFd4B=y-G@Iu~7tZbvVV zUJ+f5UKV{MdTaExeXsBP{XT(H<}^5aoNni(&N-*Y8FB7+UgnHBFL!P`uW>Fo6V9~r zkIs`^PdZO_z3RNyd8+Fv=S|LEId5=2>nw5o#CePJH_p$w?r^^6WV&iyCYRYIbXi;- zE}Lu0^);8m<#4sSoG!kL>*{m$y6CQ(Tq~}qE8*Jf^1AMH1>Ent&Ub&^{f_GxEdOJ# zg5>_A>lF8=+$#5PU7vS{+)ZwiyUji5o_2fP?Lq`S_2pL@?Rgk}PUKK{Fzg5qg)`x? z@N{?~ycAvuUl2ag%Cuhl$@l*p1OM}EPue~+{+jnK?|a_Adf)MW)^~#Mc;9KhGkst2 zo$WivNAS^oBwv}2>8rOZ>|XmoSQ=J_Yr>Yu2PL!20tJA zV(6?;b%+s)g!Ca-s52A}^@Wn5kZlHz1{Qjqi{ z4<`2}Hib8mn5%Gem{9>^0DMo$$OH&PyRXi+2Ow=zc@@9K5w{g_~4;;w*RsH z?)IPJpGlmScqe{B;>5%`31Z^xL}h}Ks82K|#0g2FJJFudCR~YQu>6m`3QNMC7)vZA zMib+S#l%|TP~xJ*wTYV&w?PT6Wv|L!nY|`^b@sd2 zYqQs9Z_Iu#dvo@d?Dw;`W^c>hp8ZkwuI$gV_hj$Q{vvx{_WtYx*@v*uc% z*UQ$+*XipO>x^~gdfhr}y_pS@ph3leq>AGxPzOGzX zt*h5H>$-Krx^aDQ-MnsDx2@aP9qZ0@*SdS%v+iB@tq-k-*2C+O_2%{8C4Qf{XXBT{ ze;EGl@ax0Jk8}?nH}dI`^G3e($@hOB1OGRTG>k|_9^Ah4KyYL}z8v2hKM?;`{JH20 z(TdpDw~5=dZTfcEcKLS2HglV?&Dw6cWifUcW?J>_ip!Z3$}&Z zl5NGdYFoRl+tzOzwyoQaZRfUY+r91C_HO&OL)-rC$o2)XY-}TTQS8Fl)v-%rH^gp? z-4eSic3te+*iT}2#vYH|ANy_WmDtO%7h|u-eiu6~{-@Zxu@7ROkC((h8$UJv<@m{Q za{MdtGvjB+kHPXk_A1VebK=DK*W>(nWxOWNi`U27{d?0R!%j5dEGVYBJ#qS+^ zc_cY9JTg8qJ2F4AKJx96i$<;X_AJC+8oxe% zWBi%K7skIde%AO`$G<*K94C)c#;N1|fl!w0~uPcK_!7gZsDlAKL%T{TJ`QbpN;a56sGEeY1htvDuN?^lWPO z^4X=?h1siTFPyz>_LA8vXZOxtG5fvQyJl~iePH(5*;{9?oBi(WJ+lwa-Z=Z}?4M@; zJo|^)w`L!j{o>qnvwxX=e)h@Phi8wQJ7Mna*%RkZo;z*sq`A^L_S|`M~nkPzB_mM+#_?x zVEG?=6+fMupPQMxW^Uiy)ZA5bFU?&&chlSrbHA8-bnf=Khv$AgckkTObFa<4F!#pX zS@U0&mF;ZVokyE5pZHk*ZFQratQ=O?;N{|{%nNopNDrHH9Q=!yq>f5QyQn#e8PF=~ByqBIvU0L|k~UdB**M9btevcz_D=Rs ziYB#_#!1&?W`1UVe*Ve%=jRQ3E*v{FcG=i>$F3c_ek`5twXdZwOmC&P(-)_&Pv4fl zJ$*;|XX*RW_osiJzB~Oy`jvEG@^Z(I#vT~^<=9JOzaD#e?A5V1#@-rxJDnK)_ULy; zyE6wfw`||I9a)-Q$}X)fUAN?1@-KBS_Ad6ViPwZ{qBYyvFDHyYmL6YvV(C{)&n-Q$^x)FdOFv!u{nFo;-d_6c(mPB4SbA~kq~-UP zzO?+c<@1*-maCRam#deXm-)+0%k|4G%Z%mT<<{l4Wy!L1xor% zv&*Z?Tg%(a$;HXVZ!FF%?qAF<9<)Ec=ea$<+VjkwkG=DbfdO9H^ZK4Q_i(>KS&;2} zb>pp#H#d&o_o;m+?mKx zYk6yRYi;X-t?btN*5=m1t?jKtTNiD8bL--*OSUfE`u5gkTbFNLv31qfHCx}=x_0Zj zt?RdL*t&7+rmgR7-Mn?{)(^IB+q!-0uC2Sbe!BIut$VkAv2_fV|FKtb-`4$G4{SZS z_0ZO%TaRu1a_fn$C%2y3dS>g{t>?FXvz6XAvu|zR1^cr5zPs&=%p-`sqC^BO)P38VFD|W=HcC6CgVIUqqI6SwD7}tm}UQrcysjD}hR+mQqPnGL=H5QR&n&YB{xnT1l;ZAIp0qPJnNDaZwnbhKcW54Tfp%z`NRJ&asAKFws?dPF-(jQqr@07PD~J!#9`tHF-1%hi+TPN zI7LVkMhK(-2Uq@|tm?yM`*y9g8+u*4FqotOVblZzw4wr42v7&1lh8}(AxIHcR-l!X zm1ilb6@`0|j3AV-{f!r&1ST7vEfTwd1FhCdIi0bUPZ5_*U%YsCcTzkN3W-|=neEndK0~w&ZcwdEp#rO zN9WU9>236OdI!Ce-bL@G_t1Okee{01fIdJM(%~zc=n}e=E~Cro3c8Z6qO0i|x|Xh^ z>*<4Z1KmhB(am%V-AcF7?Q{p-Nq5oRbPwH2_tE|I0DXx5-&w=|CU2Y&`=>iBNl5%t z9&8O!LImdvqBcwj{Y!GkX8l8i!2gG%<>zdHG0pH02t-0Dfd&vA&7zJ_Phb%m2#tg$ zLNkF);1YO%&k&e|S^|gAf_U;ej!jD-5lN*a5{XQrkfOH>rozOX?%_lLVvz zl8_`KiAfTYlq4g`NeYsZq#~(F8j_ZzBk4(lBm>DvGLg(A3&~2dk?bS~$w_jN+$0al zOY)KYqyTA%6eNX6VN!(j;cF$3iR4l;iA*L_$W$_oOedF-%gGhwN^%vsnp{I>keTFK zaviyz%py0C8_7-NW-^=1A-9mZWFDDMZY8&o+sPf|PI4Eyo7_Y0CHIm0$pZ2K8NLdS zEGA3HQnHLJCo9NGvWl!GYsgx%j;tpSk_}`d*+e#zEo3X%Mz)h3WGC50c9T71FWE=- zlLO=-a*!M%hshCglpG_+$@x`~j^f8oS{JRG)glhNcf z1x-m)(bO~zO-s|!^t3^mfo7zcXl9y)W~JF^cAA6cq`7Ernw{t%I*Bf#o9H2Wi9VvA z7$CBx1Xf9ju`4%&@IbF(v`5t2CL*fYOfUSxA4wglEh(X?q}^0Czptbu*qvh3OXYRt zEM7ky{{^Tr(9qHQ)=X(o^5HX^E@@|XcS(u7sidU8Rtofz5}vw~ z8}4FCYv9`mu|8JZFu#%#KCTmkOG?6R(l(&<l3E9k?D zsyhUKD;F*Ny&1()CF4Q$S!_te$pXzcRMBvRtB$VlwrWe)ESPBlfw$Z z9)sYSHh3bq?{k!rlBBv7X>tpBoOA=ZVGv&{M%OAkWkYN;JA~#>=&cc!!yF^f>+g-L zRc#4`X9$N;3w~ts!Dpqga(7Khi39B6>n$ni><6p%lM40#tJh=N%TbL%SYZnX>Itf- zN(NDA7nGC;n@dWF8okCO8&wAz67a2NBWi-i3f6{Chh$OpAm~fMxb{vABj#guP@;oz zOG+dh3Q);~5i2xR0GDf;P{crv)v!>smXsK3X+Rm}!~Gd(WdKu=R1K;b5b0Qb+0*UiRRV7{JRV^H=A19e!=eqtTNyd3rq0i*LnB~)0>l$m3>sl~ zhTmAgLnQT&g2(Cs)1WD3m}N}>b%K9bh=&0+Q$ug9MZE~eAf`9M7!bED2!rWt2B;R< z1iW9sVwBybL&Ji(@eoH7_$7j(zoeu`5N;O3%G(je1#wyqF^iQ>jTd;jG;EC#e8PqA zBjSIE{wmmE^Y~)=60gi2(&ubZ)q+aWf{nbpuH4+35_l%L7gutO$C~tw_%u( z*4S&~FvB>HA+_;y9JQ>BW)!W4jphz--ry0AiU2yAz`Nmk7xHlo^0lHUlJfcofjWxj z+sI);Mkpy6LUo?*1KnKESjp>WW4J!BSg%e6GjAH;)WmBO>^@yJNu{ z$_8<_3T#o0_5@p}Ms^X1tB?-R=oPodTElWhV;#&XhW0%dk2o=I4^3x^4|x}Ihej;~ z+qA&QU?rrfOG)gn?qT){>I5)C6sS72UhQPHay*dVcS-`Heo$S5vV*v(6veFpIQojB z)&v?2NUIUma2JMM<^*e&_C@hi4(=0;nAQNQcl75V3&{0@ZkyVQYrybnd>wgiJEA#? zI4}wY>|fL4tD!W>I3Zz+PKLaNQL0%Z%8E`+3s=X}VSR`-K9M`XN8n)Du8+2f(0b`$tp<4P z45pEzpz$i&6lw;Xz;d-*2s;V(5Fc9Dsp_hBf~*waI!;}W1UUR$7HBjVcB&0ojS7(* zW~Buqd`v0IJw@-40er)^_7N8mxDi20_6W zWVGKPFM&j+M~F0II^m`#b1-W-5?OhF9d1P;YVBYpLXW=B#t6a+BzTl|>N2_g#p`Uc zas3d5EMvWqtrWLt6g@SitX>{XP-|@HlR{jH)GTRdGq;}$JE_4KtgkcXMvMVXUYlry zy8&QC&1IYz=&Tq>wMUwx{I-FxsL|L7^W?WR8G~R$tc=1Mjje)#gmj>x6{I?lu24g7 zjglpY`BpTK3gkRSe-w5sP1y-li?9}~4Esx14^h@F41x{K;F%T_>3k#~1xg=qIU3oh zkMVbc$2rCpBiG38 zkmbC+(dIPD>MB@C7sw63qb}@yiedofC*Zco_+S?s=cB)hg7&;Gf9K=WuPmXg7&`ueIULUO7V5HVGbjhG+hw+Ro-9V;E zfnv&N^ohtdPNT%wB~ie)a%hZt;G(l3zKv#pEJlaXWvm0=<%_eC)#)*6dugp5XqOmx zNi-JNL=gaqoze*LW^DEWt`#EER>(Ec{ub~61>b!bf5_M+2qRhlE)DKN&kN9yF=%Xo znZYd);iFKOLSNTM6H-lO;8BVRqe29mPyMnfw^y=7JwP)WgO&vO`{`)I>7DYdP#5$Ok4H>;eYppzx|q zO~P_h7aF^YUuE()*EG|Cf|WSvt2JRzBdTG?*EJ!CDe3`_)!O$Yh)eo3v_?|94w6J?n-EHcDRsath^-EBZ_bZ^MG)aqa;0couot_fFwl#Jh zmcihi2F-E^iM9F8k%AOd{gUpCxA;iLk53g5jNu;I~*8U8M= zQo2L4m@rreen#cTJpuhzWxr z|93@A5MLlc>4}?S0ROX+Ks>GZ`xLogZLM6T)94_V>YPn_-JnjLJD&iPFFGBe)`*W6_VjV^c+ct-c25!^aHuFC=6fwQBvsjh-gY_sTW1>AtxUx48*$`2RyFgZ)X z+7X>p*Vt4p_W_557sP6K9I$Gy&W?{3089uTtPJCAu9vF`O{F!(ec(p>tGjjxaVMdc zc0~~!(_lX$7r0{78Sq zn}hTyYh+Ljdl;W9MoSfT6V@v$(hv}o7xgge(TWUgQVrje3^^X+E``T%qZ_)A`P6PteP94*#f>qS)vi23x=+zPs}lce5V1E!b+Ec11r>^IB|3dI|3l9 zhX-z2JovSvk{H_G97d0U(V`Ocfn0Av7Dj`(8$@etJ8TbO8uF#8vm7#k0KDktjN*~h zj@xtC?(7+{kHY*IDsH0-cAf;;GG)(8_p$mp7(6N=I3Vw$dn48-K`&P_@FBknt+2Hr zZ6CFlBFbO~4Ykw)AI9Ad@`f%9D%*vJT!=>*(ZMO?Q)^3m6UCtrSECb??x+D73fR7^ zrLsu68ej<@(<#8cOGPurFozcg@Wyejez0!_=4}|Dw3Rz59K4n)M=jFJENEu|)L7^Z z;dAUkt%o~=Y~KL%ARhO&f_-u$yJdAit%rwL6r(M;#wNVQcsskWIyAs8!eN+P;S{iL zb{>~&xdloyf*Sa{=~#~><2jlT0-T90rGqCx+XJQst-{>eo8j z)j|~!d?!MlF*>-MwkDl}igF0CSp<8y9KX4G`vS0!^`Ik$atfy1f#NWRBA98clekP31}>~y$5{;RSm1i7Y@vr3r}%z*2!6I{WTH}L=9wJSb+uE#Rf50 zj_#yfVGy!Ht`NY+8Wf!=mfB%~d2-<{F9wXpK?EpQ1dxw=WCKtW@w@^SEad0`F2*Io z`xSj@sj=2$H+K-YOkub~$)$B!VHG7MGQ^ke_6mG0gDBfI_qBHU>>PZLHsLGt7giL7 z+4BcF!P`TC>u3uWD40HoIr{*3v1Qlpf|*Nc<{TYP4;j4C^oP3gefZ=8r%}yx1eKYq zQR{~}mYcPWmF6mQjk&p=QP2VBthuqMCxs|vnd{Bo)|}P`pz*T!1UI+b~@T+2h5qQ%TJ4}c}SkcE@5D%khv-exaEeX&#q**cHm zn_JNc-DYROrx?v$WEVpnybq%Ng;9DCe^=4GIstAsw?WNkU>tB}C_0Mh{Y7w&E`aYb z&Otl%$Pfn0%u+K8zjf}=a!@al5kf6KLORDG2fV~QfT*GZkD>q_t`V}zN6?PsR^i<0 z|CUrvkM<*EbcfLh_&f5EGk_b96Fvc{8$^-7lrWLkNKFw{Z?}P41^GaQWCKhQ+^m{8 z5@}EW0E)YzqEp4H@uU4NWr+JY5Z%=Na)=cQe)A|roJmukB4xs6Fk))$Ou^lo(K>9h zDyx|tN*&4|#j{J+5sG57S~P^lOe6UmAHiIT<~nN1m>7jqbr2w;d3aZ(iVi#DOU-PQ zuXB1x$W~-jQ_KvA&5tU*jV)askS4+^rI1Z@&UUs+)&aZ3+9a~%B k`MPB&cA0e& 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 C-S#Bf~|$d&XP&#XY4 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 mf#WN1dTr;P?t0UxDK*aC`-hufYGm75HCneLl

  • ){D$V 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 rytnKC9s{Z1SOXNnDFC$sDd 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 z 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

    vCJ5M+U=c=jG%jxe7a)vn>-X^b?-``L5 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

    7VmJGF&7 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

  • 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⩔pFYU$-;q7+mfn#CAJUB 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 PjE2By2#kgR^+Nyvtvb4W diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index e47b2e5b44f..a0c40bc4392 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -158,13 +158,31 @@ namespace MMAP } /**************************************************************************/ - void MapBuilder::buildAllMaps() + void MapBuilder::buildAllMaps(int threads) { + int running = 0; for (TileList::iterator it = m_tiles.begin(); it != m_tiles.end(); ++it) { uint32 mapID = (*it).first; if (!shouldSkipMap(mapID)) - buildMap(mapID); + { + if (threads > 1) + { + BuilderThread* thread = new BuilderThread(this, mapID); + thread->activate(); + ++running; + // Do not allow more than {threads} threads running at the same time + if (running == threads) + { + // Wait for previous threads to finish + ACE_Thread_Manager::instance()->wait(); + // Reset the number of running threads + running = 0; + } + } + else + buildMap(mapID); + } } } @@ -306,7 +324,7 @@ namespace MMAP } // now start building mmtiles for each tile - printf("We have %u tiles. \n", (unsigned int)tiles->size()); + printf("[Map %i] We have %u tiles. \n", mapID, (unsigned int)tiles->size()); for (set::iterator it = tiles->begin(); it != tiles->end(); ++it) { uint32 tileX, tileY; @@ -415,10 +433,10 @@ namespace MMAP navMeshParams.maxPolys = maxPolysPerTile; navMesh = dtAllocNavMesh(); - printf("Creating navMesh... \r"); + printf("[Map %i] Creating navMesh...\n", mapID); if (!navMesh->init(&navMeshParams)) { - printf("Failed creating navmesh! \n"); + printf("[Map %i] Failed creating navmesh! \n", mapID); return; } @@ -430,7 +448,7 @@ namespace MMAP { dtFreeNavMesh(navMesh); char message[1024]; - sprintf(message, "Failed to open %s for writing!\n", fileName); + sprintf(message, "[Map %i] Failed to open %s for writing!\n", mapID, fileName); perror(message); return; } @@ -446,9 +464,9 @@ namespace MMAP dtNavMesh* navMesh) { // console output - char tileString[10]; - sprintf(tileString, "[%02i,%02i]: ", tileX, tileY); - printf("%s Building movemap tiles... \r", tileString); + char tileString[20]; + sprintf(tileString, "[Map %03i] [%02i,%02i]: ", mapID, tileX, tileY); + printf("%s Building movemap tiles...\n", tileString); IntermediateValues iv; @@ -510,14 +528,14 @@ namespace MMAP rcPolyMesh** pmmerge = new rcPolyMesh*[TILES_PER_MAP * TILES_PER_MAP]; if (!pmmerge) { - printf("%s alloc pmmerge FIALED! \r", tileString); + printf("%s alloc pmmerge FIALED!\n", tileString); return; } rcPolyMeshDetail** dmmerge = new rcPolyMeshDetail*[TILES_PER_MAP * TILES_PER_MAP]; if (!dmmerge) { - printf("%s alloc dmmerge FIALED! \r", tileString); + printf("%s alloc dmmerge FIALED!\n", tileString); return; } @@ -539,7 +557,7 @@ namespace MMAP tile.solid = rcAllocHeightfield(); if (!tile.solid || !rcCreateHeightfield(m_rcContext, *tile.solid, tileCfg.width, tileCfg.height, tileCfg.bmin, tileCfg.bmax, tileCfg.cs, tileCfg.ch)) { - printf("%sFailed building heightfield! \n", tileString); + printf("%s Failed building heightfield! \n", tileString); continue; } @@ -560,33 +578,33 @@ namespace MMAP tile.chf = rcAllocCompactHeightfield(); if (!tile.chf || !rcBuildCompactHeightfield(m_rcContext, tileCfg.walkableHeight, tileCfg.walkableClimb, *tile.solid, *tile.chf)) { - printf("%sFailed compacting heightfield! \n", tileString); + printf("%s Failed compacting heightfield! \n", tileString); continue; } // build polymesh intermediates if (!rcErodeWalkableArea(m_rcContext, config.walkableRadius, *tile.chf)) { - printf("%sFailed eroding area! \n", tileString); + printf("%s Failed eroding area! \n", tileString); continue; } if (!rcBuildDistanceField(m_rcContext, *tile.chf)) { - printf("%sFailed building distance field! \n", tileString); + printf("%s Failed building distance field! \n", tileString); continue; } if (!rcBuildRegions(m_rcContext, *tile.chf, tileCfg.borderSize, tileCfg.minRegionArea, tileCfg.mergeRegionArea)) { - printf("%sFailed building regions! \n", tileString); + printf("%s Failed building regions! \n", tileString); continue; } tile.cset = rcAllocContourSet(); if (!tile.cset || !rcBuildContours(m_rcContext, *tile.chf, tileCfg.maxSimplificationError, tileCfg.maxEdgeLen, *tile.cset)) { - printf("%sFailed building contours! \n", tileString); + printf("%s Failed building contours! \n", tileString); continue; } @@ -594,14 +612,14 @@ namespace MMAP tile.pmesh = rcAllocPolyMesh(); if (!tile.pmesh || !rcBuildPolyMesh(m_rcContext, *tile.cset, tileCfg.maxVertsPerPoly, *tile.pmesh)) { - printf("%sFailed building polymesh! \n", tileString); + printf("%s Failed building polymesh! \n", tileString); continue; } tile.dmesh = rcAllocPolyMeshDetail(); if (!tile.dmesh || !rcBuildPolyMeshDetail(m_rcContext, *tile.pmesh, *tile.chf, tileCfg.detailSampleDist, tileCfg .detailSampleMaxError, *tile.dmesh)) { - printf("%sFailed building polymesh detail! \n", tileString); + printf("%s Failed building polymesh detail! \n", tileString); continue; } @@ -627,7 +645,7 @@ namespace MMAP iv.polyMesh = rcAllocPolyMesh(); if (!iv.polyMesh) { - printf("%s alloc iv.polyMesh FIALED! \r", tileString); + printf("%s alloc iv.polyMesh FIALED!\n", tileString); return; } rcMergePolyMeshes(m_rcContext, pmmerge, nmerge, *iv.polyMesh); @@ -635,16 +653,16 @@ namespace MMAP iv.polyMeshDetail = rcAllocPolyMeshDetail(); if (!iv.polyMeshDetail) { - printf("%s alloc m_dmesh FIALED! \r", tileString); + printf("%s alloc m_dmesh FIALED!\n", tileString); return; } rcMergePolyMeshDetails(m_rcContext, dmmerge, nmerge, *iv.polyMeshDetail); // free things up - delete [] pmmerge; - delete [] dmmerge; + delete[] pmmerge; + delete[] dmmerge; - delete [] tiles; + delete[] tiles; // remove padding for extraction for (int i = 0; i < iv.polyMesh->nverts; ++i) @@ -736,7 +754,7 @@ namespace MMAP continue; } - printf("%s Building navmesh tile... \r", tileString); + printf("%s Building navmesh tile...\n", tileString); if (!dtCreateNavMeshData(¶ms, &navData, &navDataSize)) { printf("%s Failed building navmesh tile! \n", tileString); @@ -744,7 +762,7 @@ namespace MMAP } dtTileRef tileRef = 0; - printf("%s Adding tile to navmesh... \r", tileString); + printf("%s Adding tile to navmesh...\n", tileString); // DT_TILE_FREE_DATA tells detour to unallocate memory when the tile // is removed via removeTile() dtStatus dtResult = navMesh->addTile(navData, navDataSize, DT_TILE_FREE_DATA, 0, &tileRef); @@ -761,13 +779,13 @@ namespace MMAP if (!file) { char message[1024]; - sprintf(message, "Failed to open %s for writing!\n", fileName); + sprintf(message, "[Map %i] Failed to open %s for writing!\n", mapID, fileName); perror(message); navMesh->removeTile(tileRef, NULL, NULL); continue; } - printf("%s Writing to file... \r", tileString); + printf("%s Writing to file...\n", tileString); // write header MmapTileHeader header; diff --git a/src/tools/mmaps_generator/MapBuilder.h b/src/tools/mmaps_generator/MapBuilder.h index 20789bf9bff..0c9dce05992 100644 --- a/src/tools/mmaps_generator/MapBuilder.h +++ b/src/tools/mmaps_generator/MapBuilder.h @@ -32,6 +32,8 @@ #include "Recast.h" #include "DetourNavMesh.h" +#include "ace/Task.h" + using namespace std; using namespace VMAP; @@ -80,7 +82,7 @@ namespace MMAP void buildSingleTile(uint32 mapID, uint32 tileX, uint32 tileY); // builds list of maps, then builds all of mmap tiles (based on the skip settings) - void buildAllMaps(); + void buildAllMaps(int threads); private: // detect maps and tiles @@ -125,6 +127,22 @@ namespace MMAP // build performance - not really used for now rcContext* m_rcContext; }; + + class BuilderThread : public ACE_Task + { + private: + MapBuilder* _builder; + uint32 _mapId; + public: + BuilderThread(MapBuilder* builder, uint32 mapId) : _builder(builder), _mapId(mapId) {} + + int svc() + { + if (_builder) + _builder->buildMap(_mapId); + return 0; + } + }; } #endif diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp index 7d9f59ed138..45d0aff958c 100644 --- a/src/tools/mmaps_generator/PathGenerator.cpp +++ b/src/tools/mmaps_generator/PathGenerator.cpp @@ -71,7 +71,8 @@ bool handleArgs(int argc, char** argv, bool &silent, bool &bigBaseUnit, char* &offMeshInputPath, - char* &file) + char* &file, + int& threads) { char* param = NULL; for (int i = 1; i < argc; ++i) @@ -88,6 +89,14 @@ bool handleArgs(int argc, char** argv, else printf("invalid option for '--maxAngle', using default\n"); } + else if (strcmp(argv[i], "--threads") == 0) + { + param = argv[++i]; + if (!param) + return false; + threads = atoi(param); + printf("Using %i threads to extract mmaps\n", threads); + } else if (strcmp(argv[i], "--file") == 0) { param = argv[++i]; @@ -232,7 +241,7 @@ int finish(const char* message, int returnValue) int main(int argc, char** argv) { - int mapnum = -1; + int threads = 3, mapnum = -1; float maxAngle = 60.0f; int tileX = -1, tileY = -1; bool skipLiquid = false, @@ -248,7 +257,7 @@ int main(int argc, char** argv) bool validParam = handleArgs(argc, argv, mapnum, tileX, tileY, maxAngle, skipLiquid, skipContinents, skipJunkMaps, skipBattlegrounds, - debugOutput, silent, bigBaseUnit, offMeshInputPath, file); + debugOutput, silent, bigBaseUnit, offMeshInputPath, file, threads); if (!validParam) return silent ? -1 : finish("You have specified invalid parameters", -1); @@ -278,7 +287,7 @@ int main(int argc, char** argv) else if (mapnum >= 0) builder.buildMap(uint32(mapnum)); else - builder.buildAllMaps(); + builder.buildAllMaps(threads); return silent ? 1 : finish("Movemap build is complete!", 1); } From 35437149e210ed713b04e01bf7607aa1475e158f Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 25 Aug 2012 12:27:48 -0500 Subject: [PATCH 030/204] Core/Mmaps: Added some corrections to the logs in the mmaps_generator --- src/tools/mmaps_generator/MapBuilder.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index a0c40bc4392..3b7a3e8d99d 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -294,7 +294,7 @@ namespace MMAP /**************************************************************************/ void MapBuilder::buildMap(uint32 mapID) { - printf("Building map %03u:\n", mapID); + printf("[Thread %i] Building map %03u:\n", ACE_Thread::self(), mapID); set* tiles = getTileList(mapID); @@ -340,7 +340,7 @@ namespace MMAP dtFreeNavMesh(navMesh); - printf("Complete! \n\n"); + printf("[Map %i] Complete!\n", mapID); } /**************************************************************************/ From c44601379179ad368bb2c80d371232c48f366f90 Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 25 Aug 2012 12:40:04 -0500 Subject: [PATCH 031/204] Core/Mmaps: Added elapsed time to the mmaps_generator --- src/tools/mmaps_generator/PathGenerator.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp index 45d0aff958c..4da90fd153a 100644 --- a/src/tools/mmaps_generator/PathGenerator.cpp +++ b/src/tools/mmaps_generator/PathGenerator.cpp @@ -18,6 +18,7 @@ #include "PathCommon.h" #include "MapBuilder.h" +#include "Timer.h" using namespace MMAP; @@ -280,6 +281,7 @@ int main(int argc, char** argv) MapBuilder builder(maxAngle, skipLiquid, skipContinents, skipJunkMaps, skipBattlegrounds, debugOutput, bigBaseUnit, offMeshInputPath); + uint32 start = getMSTime(); if (file) builder.buildMeshFromFile(file); else if (tileX > -1 && tileY > -1 && mapnum >= 0) @@ -289,5 +291,7 @@ int main(int argc, char** argv) else builder.buildAllMaps(threads); - return silent ? 1 : finish("Movemap build is complete!", 1); + if (!silent) + printf("Finished. MMAPS were built in %u ms!", GetMSTimeDiffToNow(start)); + return 1; } From f0473777e2751ce53790d5b2628f00c287540691 Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 25 Aug 2012 14:32:52 -0500 Subject: [PATCH 032/204] Core/Mmaps: Fixed jump effects (like Death Grip ). They should not use a path --- src/server/game/Movement/MotionMaster.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index dd053534c8a..07d3760cf40 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -370,7 +370,7 @@ void MotionMaster::MoveJump(float x, float y, float z, float speedXY, float spee float max_height = -Movement::computeFallElevation(moveTimeHalf,false,-speedZ); Movement::MoveSplineInit init(*_owner); - init.MoveTo(x,y,z); + init.MoveTo(x, y, z, false); init.SetParabolic(max_height,0); init.SetVelocity(speedXY); init.Launch(); From 92e72b2a5cd79c82625ceb6cc83125c546e7f1ab Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 25 Aug 2012 17:37:15 -0500 Subject: [PATCH 033/204] Core/Mmaps: Fixed a few mistakes in the mmaps_generator, should be somewhat faster now --- src/tools/mmaps_generator/MapBuilder.cpp | 90 ++++++++++++++---------- src/tools/mmaps_generator/MapBuilder.h | 8 ++- 2 files changed, 60 insertions(+), 38 deletions(-) diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 3b7a3e8d99d..b04300994f9 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -160,30 +160,46 @@ namespace MMAP /**************************************************************************/ void MapBuilder::buildAllMaps(int threads) { - int running = 0; + std::vector _threads; + + for (int i = 0; i < threads; ++i) + _threads.push_back(new BuilderThread(this)); + for (TileList::iterator it = m_tiles.begin(); it != m_tiles.end(); ++it) { - uint32 mapID = (*it).first; + uint32 mapID = it->first; if (!shouldSkipMap(mapID)) { if (threads > 1) { - BuilderThread* thread = new BuilderThread(this, mapID); - thread->activate(); - ++running; - // Do not allow more than {threads} threads running at the same time - if (running == threads) + bool next = false; + while (!next) { - // Wait for previous threads to finish - ACE_Thread_Manager::instance()->wait(); - // Reset the number of running threads - running = 0; + for (std::vector::iterator _th = _threads.begin(); _th != _threads.end(); ++_th) + { + if ((*_th)->Free) + { + printf("Thread is free for map %03i\n", mapID); + (*_th)->SetMapId(mapID); + (*_th)->activate(); + next = true; + break; + } + } + // Wait for 20 seconds + ACE_OS::sleep(ACE_Time_Value (0, 20000)); } } else buildMap(mapID); } } + // Wait for all threads to finish before closing down + ACE_Thread_Manager::instance()->wait(); + + // Free memory + for (std::vector::iterator _th = _threads.begin(); _th != _threads.end(); ++_th) + delete *_th; } /**************************************************************************/ @@ -311,35 +327,35 @@ namespace MMAP tiles->insert(StaticMapTree::packTileID(i, j)); } - if (!tiles->size()) - return; - - // build navMesh - dtNavMesh* navMesh = NULL; - buildNavMesh(mapID, navMesh); - if (!navMesh) + if (!tiles->empty()) { - printf("Failed creating navmesh! \n"); - return; + // build navMesh + dtNavMesh* navMesh = NULL; + buildNavMesh(mapID, navMesh); + if (!navMesh) + { + printf("Failed creating navmesh! \n"); + return; + } + + // now start building mmtiles for each tile + printf("[Map %i] We have %u tiles. \n", mapID, (unsigned int)tiles->size()); + for (set::iterator it = tiles->begin(); it != tiles->end(); ++it) + { + uint32 tileX, tileY; + + // unpack tile coords + StaticMapTree::unpackTileID((*it), tileX, tileY); + + if (shouldSkipTile(mapID, tileX, tileY)) + continue; + + buildTile(mapID, tileX, tileY, navMesh); + } + + dtFreeNavMesh(navMesh); } - // now start building mmtiles for each tile - printf("[Map %i] We have %u tiles. \n", mapID, (unsigned int)tiles->size()); - for (set::iterator it = tiles->begin(); it != tiles->end(); ++it) - { - uint32 tileX, tileY; - - // unpack tile coords - StaticMapTree::unpackTileID((*it), tileX, tileY); - - if (shouldSkipTile(mapID, tileX, tileY)) - continue; - - buildTile(mapID, tileX, tileY, navMesh); - } - - dtFreeNavMesh(navMesh); - printf("[Map %i] Complete!\n", mapID); } diff --git a/src/tools/mmaps_generator/MapBuilder.h b/src/tools/mmaps_generator/MapBuilder.h index 0c9dce05992..61a71ff6d5b 100644 --- a/src/tools/mmaps_generator/MapBuilder.h +++ b/src/tools/mmaps_generator/MapBuilder.h @@ -134,14 +134,20 @@ namespace MMAP MapBuilder* _builder; uint32 _mapId; public: - BuilderThread(MapBuilder* builder, uint32 mapId) : _builder(builder), _mapId(mapId) {} + BuilderThread(MapBuilder* builder) : _builder(builder), Free(true) {} + + void SetMapId(uint32 mapId) { _mapId = mapId; } int svc() { + Free = false; if (_builder) _builder->buildMap(_mapId); + Free = true; return 0; } + + bool Free; }; } From e0abbfd86c3ce23daa9bccbb9c181bfe08c2d0c4 Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 25 Aug 2012 21:55:03 -0500 Subject: [PATCH 034/204] Core/MMaps: Renamed PathFinderMovementGenerator to PathGenerator, since its not a MovementGenerator, and moved out of the MovementGenerators folder --- .../ConfusedMovementGenerator.cpp | 4 +- .../FleeingMovementGenerator.cpp | 4 +- .../TargetedMovementGenerator.cpp | 2 +- .../TargetedMovementGenerator.h | 4 +- ...ovementGenerator.cpp => PathGenerator.cpp} | 54 +++++++++---------- ...derMovementGenerator.h => PathGenerator.h} | 6 +-- .../game/Movement/Spline/MoveSplineInit.cpp | 2 +- .../game/Movement/Spline/MoveSplineInit.h | 2 +- 8 files changed, 39 insertions(+), 39 deletions(-) rename src/server/game/Movement/{MovementGenerators/PathFinderMovementGenerator.cpp => PathGenerator.cpp} (91%) rename src/server/game/Movement/{MovementGenerators/PathFinderMovementGenerator.h => PathGenerator.h} (97%) diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index a4f57a43701..b9b69baf0f8 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -19,7 +19,7 @@ #include "Creature.h" #include "MapManager.h" #include "ConfusedMovementGenerator.h" -#include "PathFinderMovementGenerator.h" +#include "PathGenerator.h" #include "VMapFactory.h" #include "MoveSplineInit.h" #include "MoveSpline.h" @@ -76,7 +76,7 @@ bool ConfusedMovementGenerator::Update(T &unit, const uint32 &diff) unit.UpdateAllowedPositionZ(x, y, z); - PathFinderMovementGenerator path(&unit); + PathGenerator path(&unit); path.setPathLengthLimit(30.0f); path.CalculatePath(x, y, z); if (path.getPathType() & PATHFIND_NOPATH) diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index 4e96c641be7..ae1e89c8562 100755 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -20,7 +20,7 @@ #include "CreatureAI.h" #include "MapManager.h" #include "FleeingMovementGenerator.h" -#include "PathFinderMovementGenerator.h" +#include "PathGenerator.h" #include "ObjectAccessor.h" #include "MoveSplineInit.h" #include "MoveSpline.h" @@ -43,7 +43,7 @@ void FleeingMovementGenerator::_setTargetLocation(T &owner) owner.AddUnitState(UNIT_STATE_FLEEING_MOVE); - PathFinderMovementGenerator path(&owner); + PathGenerator path(&owner); path.setPathLengthLimit(30.0f); path.CalculatePath(x, y, z); if (path.getPathType() & PATHFIND_NOPATH) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 1b14cd385e8..6d322a56a80 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -64,7 +64,7 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T &owner) } if (!i_path) - i_path = new PathFinderMovementGenerator(&owner); + i_path = new PathGenerator(&owner); // allow pets following their master to cheat while generating paths bool forceDest = (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->isPet() diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h index d855dfa1875..db5e05c7b23 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h @@ -23,7 +23,7 @@ #include "FollowerReference.h" #include "Timer.h" #include "Unit.h" -#include "PathFinderMovementGenerator.h" +#include "PathGenerator.h" class TargetedMovementGeneratorBase { @@ -61,7 +61,7 @@ class TargetedMovementGeneratorMedium : public MovementGeneratorMedium< T, D >, float i_angle; bool i_recalculateTravel : 1; bool i_targetReached : 1; - PathFinderMovementGenerator* i_path; + PathGenerator* i_path; }; template diff --git a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp similarity index 91% rename from src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp rename to src/server/game/Movement/PathGenerator.cpp index adfd32c50b3..4d7707020e1 100644 --- a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "PathFinderMovementGenerator.h" +#include "PathGenerator.h" #include "Map.h" #include "Creature.h" #include "MMapFactory.h" @@ -26,13 +26,13 @@ #include "DetourCommon.h" #include "DetourNavMeshQuery.h" -////////////////// PathFinderMovementGenerator ////////////////// -PathFinderMovementGenerator::PathFinderMovementGenerator(const Unit* owner) : +////////////////// PathGenerator ////////////////// +PathGenerator::PathGenerator(const Unit* owner) : m_polyLength(0), m_type(PATHFIND_BLANK), m_useStraightPath(false), m_forceDestination(false), m_pointPathLimit(MAX_POINT_PATH_LENGTH), m_sourceUnit(owner), m_navMesh(NULL), m_navMeshQuery(NULL) { - sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::PathFinderMovementGenerator for %u \n", m_sourceUnit->GetGUIDLow()); + sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::PathGenerator for %u \n", m_sourceUnit->GetGUIDLow()); uint32 mapId = m_sourceUnit->GetMapId(); if (MMAP::MMapFactory::IsPathfindingEnabled(mapId)) @@ -45,12 +45,12 @@ PathFinderMovementGenerator::PathFinderMovementGenerator(const Unit* owner) : createFilter(); } -PathFinderMovementGenerator::~PathFinderMovementGenerator() +PathGenerator::~PathGenerator() { - sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::~PathFinderMovementGenerator() for %u \n", m_sourceUnit->GetGUIDLow()); + sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::~PathGenerator() for %u \n", m_sourceUnit->GetGUIDLow()); } -bool PathFinderMovementGenerator::CalculatePath(float destX, float destY, float destZ, bool forceDest) +bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool forceDest) { if (!Trinity::IsValidMapCoord(destX, destY, destZ) || !Trinity::IsValidMapCoord(m_sourceUnit->GetPositionX(), m_sourceUnit->GetPositionY(), m_sourceUnit->GetPositionZ())) @@ -67,7 +67,7 @@ bool PathFinderMovementGenerator::CalculatePath(float destX, float destY, float m_forceDestination = forceDest; - sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::CalculatePath() for %u \n", m_sourceUnit->GetGUIDLow()); + sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::CalculatePath() for %u \n", m_sourceUnit->GetGUIDLow()); // make sure navMesh works - we can run on map w/o mmap // check if the start and end point have a .mmtile loaded (can we pass via not loaded tile on the way?) @@ -88,7 +88,7 @@ bool PathFinderMovementGenerator::CalculatePath(float destX, float destY, float { // our target is not moving - we just coming closer // we are moving on precalculated path - enjoy the ride - sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::CalculatePath:: precalculated path\n"); + sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::CalculatePath:: precalculated path\n"); m_pathPoints.erase(m_pathPoints.begin()); return false; @@ -101,7 +101,7 @@ bool PathFinderMovementGenerator::CalculatePath(float destX, float destY, float } } -dtPolyRef PathFinderMovementGenerator::getPathPolyByPosition(const dtPolyRef *polyPath, uint32 polyPathSize, const float* point, float *distance) const +dtPolyRef PathGenerator::getPathPolyByPosition(const dtPolyRef *polyPath, uint32 polyPathSize, const float* point, float *distance) const { if (!polyPath || !polyPathSize) return INVALID_POLYREF; @@ -134,7 +134,7 @@ dtPolyRef PathFinderMovementGenerator::getPathPolyByPosition(const dtPolyRef *po return (minDist2d < 3.0f) ? nearestPoly : INVALID_POLYREF; } -dtPolyRef PathFinderMovementGenerator::getPolyByLocation(const float* point, float *distance) const +dtPolyRef PathGenerator::getPolyByLocation(const float* point, float *distance) const { // first we check the current path // if the current path doesn't contain the current poly, @@ -168,7 +168,7 @@ dtPolyRef PathFinderMovementGenerator::getPolyByLocation(const float* point, flo return INVALID_POLYREF; } -void PathFinderMovementGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos) +void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos) { // *** getting start/end poly logic *** @@ -416,7 +416,7 @@ void PathFinderMovementGenerator::BuildPolyPath(const Vector3 &startPos, const V BuildPointPath(startPoint, endPoint); } -void PathFinderMovementGenerator::BuildPointPath(const float *startPoint, const float *endPoint) +void PathGenerator::BuildPointPath(const float *startPoint, const float *endPoint) { float pathPoints[MAX_POINT_PATH_LENGTH*VERTEX_SIZE]; uint32 pointCount = 0; @@ -451,7 +451,7 @@ void PathFinderMovementGenerator::BuildPointPath(const float *startPoint, const // only happens if pass bad data to findStraightPath or navmesh is broken // single point paths can be generated here // TODO : check the exact cases - sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::BuildPointPath FAILED! path sized %d returned\n", pointCount); + sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::BuildPointPath FAILED! path sized %d returned\n", pointCount); BuildShortcut(); m_type = PATHFIND_NOPATH; return; @@ -486,16 +486,16 @@ void PathFinderMovementGenerator::BuildPointPath(const float *startPoint, const m_type = PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH); } - sLog->outDebug(LOG_FILTER_MAPS, "++ PathFinderMovementGenerator::BuildPointPath path type %d size %d poly-size %d\n", m_type, pointCount, m_polyLength); + sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::BuildPointPath path type %d size %d poly-size %d\n", m_type, pointCount, m_polyLength); } -void PathFinderMovementGenerator::NormalizePath() +void PathGenerator::NormalizePath() { for (uint32 i = 0; i < m_pathPoints.size(); ++i) m_sourceUnit->UpdateAllowedPositionZ(m_pathPoints[i].x, m_pathPoints[i].y, m_pathPoints[i].z); } -void PathFinderMovementGenerator::BuildShortcut() +void PathGenerator::BuildShortcut() { sLog->outDebug(LOG_FILTER_MAPS, "++ BuildShortcut :: making shortcut\n"); @@ -513,7 +513,7 @@ void PathFinderMovementGenerator::BuildShortcut() m_type = PATHFIND_SHORTCUT; } -void PathFinderMovementGenerator::createFilter() +void PathGenerator::createFilter() { uint16 includeFlags = 0; uint16 excludeFlags = 0; @@ -540,7 +540,7 @@ void PathFinderMovementGenerator::createFilter() updateFilter(); } -void PathFinderMovementGenerator::updateFilter() +void PathGenerator::updateFilter() { // allow creatures to cheat and use different movement types if they are moved // forcefully into terrain they can't normally move in @@ -555,7 +555,7 @@ void PathFinderMovementGenerator::updateFilter() } } -NavTerrain PathFinderMovementGenerator::getNavTerrain(float x, float y, float z) +NavTerrain PathGenerator::getNavTerrain(float x, float y, float z) { LiquidData data; m_sourceUnit->GetBaseMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &data); @@ -574,7 +574,7 @@ NavTerrain PathFinderMovementGenerator::getNavTerrain(float x, float y, float z) } } -bool PathFinderMovementGenerator::HaveTile(const Vector3 &p) const +bool PathGenerator::HaveTile(const Vector3 &p) const { int tx, ty; float point[VERTEX_SIZE] = {p.y, p.z, p.x}; @@ -583,7 +583,7 @@ bool PathFinderMovementGenerator::HaveTile(const Vector3 &p) const return (m_navMesh->getTileAt(tx, ty) != NULL); } -uint32 PathFinderMovementGenerator::fixupCorridor(dtPolyRef* path, uint32 npath, uint32 maxPath, +uint32 PathGenerator::fixupCorridor(dtPolyRef* path, uint32 npath, uint32 maxPath, const dtPolyRef* visited, uint32 nvisited) { int32 furthestPath = -1; @@ -629,7 +629,7 @@ uint32 PathFinderMovementGenerator::fixupCorridor(dtPolyRef* path, uint32 npath, return req+size; } -bool PathFinderMovementGenerator::getSteerTarget(const float* startPos, const float* endPos, +bool PathGenerator::getSteerTarget(const float* startPos, const float* endPos, float minTargetDist, const dtPolyRef* path, uint32 pathSize, float* steerPos, unsigned char& steerPosFlag, dtPolyRef& steerPosRef) { @@ -666,7 +666,7 @@ bool PathFinderMovementGenerator::getSteerTarget(const float* startPos, const fl return true; } -dtStatus PathFinderMovementGenerator::findSmoothPath(const float* startPos, const float* endPos, +dtStatus PathGenerator::findSmoothPath(const float* startPos, const float* endPos, const dtPolyRef* polyPath, uint32 polyPathSize, float* smoothPath, int* smoothPathSize, uint32 maxSmoothPathSize) { @@ -788,7 +788,7 @@ dtStatus PathFinderMovementGenerator::findSmoothPath(const float* startPos, cons return nsmoothPath < MAX_POINT_PATH_LENGTH ? DT_SUCCESS : DT_FAILURE; } -bool PathFinderMovementGenerator::inRangeYZX(const float* v1, const float* v2, float r, float h) const +bool PathGenerator::inRangeYZX(const float* v1, const float* v2, float r, float h) const { const float dx = v2[0] - v1[0]; const float dy = v2[1] - v1[1]; // elevation @@ -796,13 +796,13 @@ bool PathFinderMovementGenerator::inRangeYZX(const float* v1, const float* v2, f return (dx*dx + dz*dz) < r*r && fabsf(dy) < h; } -bool PathFinderMovementGenerator::inRange(const Vector3 &p1, const Vector3 &p2, float r, float h) const +bool PathGenerator::inRange(const Vector3 &p1, const Vector3 &p2, float r, float h) const { Vector3 d = p1-p2; return (d.x*d.x + d.y*d.y) < r*r && fabsf(d.z) < h; } -float PathFinderMovementGenerator::dist3DSqr(const Vector3 &p1, const Vector3 &p2) const +float PathGenerator::dist3DSqr(const Vector3 &p1, const Vector3 &p2) const { return (p1-p2).squaredLength(); } diff --git a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h b/src/server/game/Movement/PathGenerator.h similarity index 97% rename from src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h rename to src/server/game/Movement/PathGenerator.h index 9029fc1804e..a0d925cb11f 100644 --- a/src/server/game/Movement/MovementGenerators/PathFinderMovementGenerator.h +++ b/src/server/game/Movement/PathGenerator.h @@ -51,11 +51,11 @@ enum PathType PATHFIND_NOT_USING_PATH = 0x0010 // used when we are either flying/swiming or on map w/o mmaps }; -class PathFinderMovementGenerator +class PathGenerator { public: - PathFinderMovementGenerator(Unit const* owner); - ~PathFinderMovementGenerator(); + PathGenerator(Unit const* owner); + ~PathGenerator(); // Calculate the path from owner to given destination // return: true if new path was calculated, false otherwise (no change needed) diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index fa2197f815e..c5e314a8636 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -152,7 +152,7 @@ namespace Movement { if (generatePath) { - PathFinderMovementGenerator path(&unit); + PathGenerator path(&unit); path.CalculatePath(dest.x, dest.y, dest.z, forceDestination); MovebyPath(path.getPath()); } diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h index 9130d2827e6..759fc73d7fd 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.h +++ b/src/server/game/Movement/Spline/MoveSplineInit.h @@ -20,7 +20,7 @@ #define TRINITYSERVER_MOVESPLINEINIT_H #include "MoveSplineInitArgs.h" -#include "PathFinderMovementGenerator.h" +#include "PathGenerator.h" class Unit; From 97c3e2e6c105e3dd563ba1064e86f5503d3f22f6 Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 25 Aug 2012 22:57:55 -0500 Subject: [PATCH 035/204] Core/Movement: Make MovementGenerators use pointers instead of references. cleanup --- src/server/game/Entities/Unit/Unit.cpp | 8 +- src/server/game/Entities/Vehicle/Vehicle.cpp | 2 +- src/server/game/Handlers/MovementHandler.cpp | 2 +- src/server/game/Movement/MotionMaster.cpp | 40 ++--- src/server/game/Movement/MovementGenerator.h | 37 +++-- .../ConfusedMovementGenerator.cpp | 60 +++---- .../ConfusedMovementGenerator.h | 8 +- .../FleeingMovementGenerator.cpp | 106 ++++++------- .../FleeingMovementGenerator.h | 16 +- .../HomeMovementGenerator.cpp | 30 ++-- .../HomeMovementGenerator.h | 10 +- .../IdleMovementGenerator.cpp | 54 +++---- .../IdleMovementGenerator.h | 26 +-- .../PointMovementGenerator.cpp | 92 +++++------ .../PointMovementGenerator.h | 22 +-- .../RandomMovementGenerator.cpp | 52 +++--- .../RandomMovementGenerator.h | 12 +- .../TargetedMovementGenerator.cpp | 148 +++++++++--------- .../TargetedMovementGenerator.h | 52 +++--- .../WaypointMovementGenerator.cpp | 96 ++++++------ .../WaypointMovementGenerator.h | 32 ++-- .../game/Movement/Spline/MoveSplineInit.cpp | 48 +++--- .../game/Movement/Spline/MoveSplineInit.h | 10 +- .../Ulduar/boss_algalon_the_observer.cpp | 2 +- 24 files changed, 484 insertions(+), 481 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 183eddfcae4..b9396122bb1 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -372,7 +372,7 @@ bool Unit::haveOffhandWeapon() const void Unit::MonsterMoveWithSpeed(float x, float y, float z, float speed, bool generatePath, bool forceDestination) { - Movement::MoveSplineInit init(*this); + Movement::MoveSplineInit init(this); init.MoveTo(x, y, z, generatePath, forceDestination); init.SetVelocity(speed); init.Launch(); @@ -14750,7 +14750,7 @@ void Unit::StopMoving() if (!IsInWorld()) return; - Movement::MoveSplineInit init(*this); + Movement::MoveSplineInit init(this); init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZMinusOffset()); init.SetFacing(GetOrientation()); init.Launch(); @@ -17152,7 +17152,7 @@ void Unit::_ExitVehicle(Position const* exitPosition) SendMessageToSet(&data, false); } - Movement::MoveSplineInit init(*this); + Movement::MoveSplineInit init(this); init.MoveTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()); init.SetFacing(GetOrientation()); init.SetTransportExit(); @@ -17562,7 +17562,7 @@ void Unit::SetInFront(Unit const* target) void Unit::SetFacingTo(float ori) { - Movement::MoveSplineInit init(*this); + Movement::MoveSplineInit init(this); init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZMinusOffset()); init.SetFacing(ori); init.Launch(); diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 710821f2f24..61e3fd877b4 100755 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -365,7 +365,7 @@ bool Vehicle::AddPassenger(Unit* unit, int8 seatId) unit->SendClearTarget(); // SMSG_BREAK_TARGET unit->SetControlled(true, UNIT_STATE_ROOT); // SMSG_FORCE_ROOT - In some cases we send SMSG_SPLINE_MOVE_ROOT here (for creatures) // also adds MOVEMENTFLAG_ROOT - Movement::MoveSplineInit init(*unit); + Movement::MoveSplineInit init(unit); init.DisableTransportPathTransformations(); init.MoveTo(veSeat->m_attachmentOffsetX, veSeat->m_attachmentOffsetY, veSeat->m_attachmentOffsetZ); init.SetFacing(0.0f); diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 27b1f2eca3f..ca80921a7b2 100755 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -125,7 +125,7 @@ void WorldSession::HandleMoveWorldportAckOpcode() { // short preparations to continue flight FlightPathMovementGenerator* flight = (FlightPathMovementGenerator*)(GetPlayer()->GetMotionMaster()->top()); - flight->Initialize(*GetPlayer()); + flight->Initialize(GetPlayer()); return; } diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 07d3760cf40..2ad8028ca4f 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -86,7 +86,7 @@ void MotionMaster::UpdateMotion(uint32 diff) ASSERT(!empty()); _cleanFlag |= MMCF_UPDATE; - if (!top()->Update(*_owner, diff)) + if (!top()->Update(_owner, diff)) { _cleanFlag &= ~MMCF_UPDATE; MovementExpired(); @@ -110,7 +110,7 @@ void MotionMaster::UpdateMotion(uint32 diff) else if (needInitTop()) InitTop(); else if (_cleanFlag & MMCF_RESET) - top()->Reset(*_owner); + top()->Reset(_owner); _cleanFlag &= ~MMCF_RESET; } @@ -131,7 +131,7 @@ void MotionMaster::DirectClean(bool reset) if (needInitTop()) InitTop(); else if (reset) - top()->Reset(*_owner); + top()->Reset(_owner); } void MotionMaster::DelayedClean() @@ -162,7 +162,7 @@ void MotionMaster::DirectExpire(bool reset) else if (needInitTop()) InitTop(); else if (reset) - top()->Reset(*_owner); + top()->Reset(_owner); } void MotionMaster::DelayedExpire() @@ -198,19 +198,19 @@ void MotionMaster::MoveTargetedHome() { Clear(false); - if (_owner->GetTypeId()==TYPEID_UNIT && !((Creature*)_owner)->GetCharmerOrOwnerGUID()) + if (_owner->GetTypeId() == TYPEID_UNIT && !_owner->ToCreature()->GetCharmerOrOwnerGUID()) { sLog->outDebug(LOG_FILTER_GENERAL, "Creature (Entry: %u GUID: %u) targeted home", _owner->GetEntry(), _owner->GetGUIDLow()); Mutate(new HomeMovementGenerator(), MOTION_SLOT_ACTIVE); } - else if (_owner->GetTypeId()==TYPEID_UNIT && ((Creature*)_owner)->GetCharmerOrOwnerGUID()) + else if (_owner->GetTypeId() == TYPEID_UNIT && _owner->ToCreature()->GetCharmerOrOwnerGUID()) { sLog->outDebug(LOG_FILTER_GENERAL, "Pet or controlled creature (Entry: %u GUID: %u) targeting home", _owner->GetEntry(), _owner->GetGUIDLow()); - Unit *target = ((Creature*)_owner)->GetCharmerOrOwner(); + Unit* target = _owner->ToCreature()->GetCharmerOrOwner(); if (target) { sLog->outDebug(LOG_FILTER_GENERAL, "Following %s (GUID: %u)", target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : ((Creature*)target)->GetDBTableGUIDLow()); - Mutate(new FollowMovementGenerator(*target,PET_FOLLOW_DIST,PET_FOLLOW_ANGLE), MOTION_SLOT_ACTIVE); + Mutate(new FollowMovementGenerator(target, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE), MOTION_SLOT_ACTIVE); } } else @@ -247,7 +247,7 @@ void MotionMaster::MoveChase(Unit* target, float dist, float angle) _owner->GetGUIDLow(), target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : target->ToCreature()->GetDBTableGUIDLow()); - Mutate(new ChaseMovementGenerator(*target,dist,angle), MOTION_SLOT_ACTIVE); + Mutate(new ChaseMovementGenerator(target, dist, angle), MOTION_SLOT_ACTIVE); } else { @@ -255,7 +255,7 @@ void MotionMaster::MoveChase(Unit* target, float dist, float angle) _owner->GetEntry(), _owner->GetGUIDLow(), target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : target->ToCreature()->GetDBTableGUIDLow()); - Mutate(new ChaseMovementGenerator(*target,dist,angle), MOTION_SLOT_ACTIVE); + Mutate(new ChaseMovementGenerator(target, dist, angle), MOTION_SLOT_ACTIVE); } } @@ -271,7 +271,7 @@ void MotionMaster::MoveFollow(Unit* target, float dist, float angle, MovementSlo sLog->outDebug(LOG_FILTER_GENERAL, "Player (GUID: %u) follow to %s (GUID: %u)", _owner->GetGUIDLow(), target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : target->ToCreature()->GetDBTableGUIDLow()); - Mutate(new FollowMovementGenerator(*target,dist,angle), slot); + Mutate(new FollowMovementGenerator(target, dist, angle), slot); } else { @@ -279,7 +279,7 @@ void MotionMaster::MoveFollow(Unit* target, float dist, float angle, MovementSlo _owner->GetEntry(), _owner->GetGUIDLow(), target->GetTypeId() == TYPEID_PLAYER ? "player" : "creature", target->GetTypeId() == TYPEID_PLAYER ? target->GetGUIDLow() : target->ToCreature()->GetDBTableGUIDLow()); - Mutate(new FollowMovementGenerator(*target,dist,angle), slot); + Mutate(new FollowMovementGenerator(target, dist, angle), slot); } } @@ -305,7 +305,7 @@ void MotionMaster::MoveLand(uint32 id, Position const& pos) sLog->outDebug(LOG_FILTER_GENERAL, "Creature (Entry: %u) landing point (ID: %u X: %f Y: %f Z: %f)", _owner->GetEntry(), id, x, y, z); - Movement::MoveSplineInit init(*_owner); + Movement::MoveSplineInit init(_owner); init.MoveTo(x,y,z); init.SetAnimation(Movement::ToGround); init.Launch(); @@ -319,7 +319,7 @@ void MotionMaster::MoveTakeoff(uint32 id, Position const& pos) sLog->outDebug(LOG_FILTER_GENERAL, "Creature (Entry: %u) landing point (ID: %u X: %f Y: %f Z: %f)", _owner->GetEntry(), id, x, y, z); - Movement::MoveSplineInit init(*_owner); + Movement::MoveSplineInit init(_owner); init.MoveTo(x,y,z); init.SetAnimation(Movement::ToFly); init.Launch(); @@ -339,7 +339,7 @@ void MotionMaster::MoveKnockbackFrom(float srcX, float srcY, float speedXY, floa _owner->GetNearPoint(_owner, x, y, z, _owner->GetObjectSize(), dist, _owner->GetAngle(srcX, srcY) + M_PI); - Movement::MoveSplineInit init(*_owner); + Movement::MoveSplineInit init(_owner); init.MoveTo(x,y,z); init.SetParabolic(max_height,0); init.SetOrientationFixed(true); @@ -369,7 +369,7 @@ void MotionMaster::MoveJump(float x, float y, float z, float speedXY, float spee float moveTimeHalf = speedZ / Movement::gravity; float max_height = -Movement::computeFallElevation(moveTimeHalf,false,-speedZ); - Movement::MoveSplineInit init(*_owner); + Movement::MoveSplineInit init(_owner); init.MoveTo(x, y, z, false); init.SetParabolic(max_height,0); init.SetVelocity(speedXY); @@ -398,7 +398,7 @@ void MotionMaster::MoveFall(uint32 id/*=0*/) _owner->m_movementInfo.SetFallTime(0); } - Movement::MoveSplineInit init(*_owner); + Movement::MoveSplineInit init(_owner); init.MoveTo(_owner->GetPositionX(), _owner->GetPositionY(), tz); init.SetFall(); init.Launch(); @@ -545,7 +545,7 @@ void MotionMaster::Mutate(MovementGenerator *m, MovementSlot slot) else { _needInit[slot] = false; - m->Initialize(*_owner); + m->Initialize(_owner); } } @@ -613,7 +613,7 @@ MovementGeneratorType MotionMaster::GetMotionSlotType(int slot) const void MotionMaster::InitTop() { - top()->Initialize(*_owner); + top()->Initialize(_owner); _needInit[_top] = false; } @@ -621,7 +621,7 @@ void MotionMaster::DirectDelete(_Ty curr) { if (isStatic(curr)) return; - curr->Finalize(*_owner); + curr->Finalize(_owner); delete curr; } diff --git a/src/server/game/Movement/MovementGenerator.h b/src/server/game/Movement/MovementGenerator.h index 85e1fec0c2d..ee8dfb51cce 100755 --- a/src/server/game/Movement/MovementGenerator.h +++ b/src/server/game/Movement/MovementGenerator.h @@ -33,51 +33,54 @@ class MovementGenerator public: virtual ~MovementGenerator(); - virtual void Initialize(Unit &) = 0; - virtual void Finalize(Unit &) = 0; + virtual void Initialize(Unit*) = 0; + virtual void Finalize(Unit*) = 0; - virtual void Reset(Unit &) = 0; + virtual void Reset(Unit*) = 0; - virtual bool Update(Unit &, const uint32& time_diff) = 0; + virtual bool Update(Unit*, const uint32& time_diff) = 0; virtual MovementGeneratorType GetMovementGeneratorType() = 0; virtual void unitSpeedChanged() { } // used by Evade code for select point to evade with expected restart default movement - virtual bool GetResetPosition(Unit &, float& /*x*/, float& /*y*/, float& /*z*/) { return false; } + virtual bool GetResetPosition(Unit*, float& /*x*/, float& /*y*/, float& /*z*/) { return false; } }; template class MovementGeneratorMedium : public MovementGenerator { public: - void Initialize(Unit &u) + void Initialize(Unit* u) { //u->AssertIsType(); - (static_cast(this))->Initialize(*((T*)&u)); + (static_cast(this))->Initialize(static_cast(u)); } - void Finalize(Unit &u) + + void Finalize(Unit* u) { //u->AssertIsType(); - (static_cast(this))->Finalize(*((T*)&u)); + (static_cast(this))->Finalize(static_cast(u)); } - void Reset(Unit &u) + + void Reset(Unit* u) { //u->AssertIsType(); - (static_cast(this))->Reset(*((T*)&u)); + (static_cast(this))->Reset(static_cast(u)); } - bool Update(Unit &u, const uint32& time_diff) + + bool Update(Unit* u, const uint32& time_diff) { //u->AssertIsType(); - return (static_cast(this))->Update(*((T*)&u), time_diff); + return (static_cast(this))->Update(static_cast(u), time_diff); } public: // will not link if not overridden in the generators - void Initialize(T &u); - void Finalize(T &u); - void Reset(T &u); - bool Update(T &u, const uint32& time_diff); + void Initialize(T* u); + void Finalize(T* u); + void Reset(T* u); + bool Update(T* u, const uint32& time_diff); }; struct SelectableMovement : public FactoryHolder diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index b9b69baf0f8..f1d1d8cf04a 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -31,34 +31,34 @@ #endif template -void ConfusedMovementGenerator::Initialize(T &unit) +void ConfusedMovementGenerator::Initialize(T* unit) { - unit.GetPosition(i_x, i_y, i_z); - unit.StopMoving(); - unit.SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); - unit.AddUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); + unit->GetPosition(i_x, i_y, i_z); + unit->StopMoving(); + unit->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); + unit->AddUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); } template -void ConfusedMovementGenerator::Reset(T &unit) +void ConfusedMovementGenerator::Reset(T* unit) { i_nextMoveTime.Reset(0); - unit.StopMoving(); - unit.AddUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); + unit->StopMoving(); + unit->AddUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); } template -bool ConfusedMovementGenerator::Update(T &unit, const uint32 &diff) +bool ConfusedMovementGenerator::Update(T* unit, const uint32& diff) { - if (unit.HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED | UNIT_STATE_DISTRACTED)) + if (unit->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED | UNIT_STATE_DISTRACTED)) return true; if (i_nextMoveTime.Passed()) { // currently moving, update location - unit.AddUnitState(UNIT_STATE_CONFUSED_MOVE); + unit->AddUnitState(UNIT_STATE_CONFUSED_MOVE); - if (unit.movespline->Finalized()) + if (unit->movespline->Finalized()) i_nextMoveTime.Reset(urand(800, 1500)); } else @@ -68,15 +68,15 @@ bool ConfusedMovementGenerator::Update(T &unit, const uint32 &diff) if (i_nextMoveTime.Passed()) { // start moving - unit.AddUnitState(UNIT_STATE_CONFUSED_MOVE); + unit->AddUnitState(UNIT_STATE_CONFUSED_MOVE); float x = i_x + 10.0f*((float)rand_norm() - 0.5f); float y = i_y + 10.0f*((float)rand_norm() - 0.5f); float z = i_z; - unit.UpdateAllowedPositionZ(x, y, z); + unit->UpdateAllowedPositionZ(x, y, z); - PathGenerator path(&unit); + PathGenerator path(unit); path.setPathLengthLimit(30.0f); path.CalculatePath(x, y, z); if (path.getPathType() & PATHFIND_NOPATH) @@ -96,26 +96,26 @@ bool ConfusedMovementGenerator::Update(T &unit, const uint32 &diff) } template<> -void ConfusedMovementGenerator::Finalize(Player &unit) +void ConfusedMovementGenerator::Finalize(Player* unit) { - unit.RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); - unit.ClearUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); - unit.StopMoving(); + unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); + unit->ClearUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); + unit->StopMoving(); } template<> -void ConfusedMovementGenerator::Finalize(Creature &unit) +void ConfusedMovementGenerator::Finalize(Creature* unit) { - unit.RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); - unit.ClearUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); - if (unit.getVictim()) - unit.SetTarget(unit.getVictim()->GetGUID()); + unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); + unit->ClearUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); + if (unit->getVictim()) + unit->SetTarget(unit->getVictim()->GetGUID()); } -template void ConfusedMovementGenerator::Initialize(Player &player); -template void ConfusedMovementGenerator::Initialize(Creature &creature); -template void ConfusedMovementGenerator::Reset(Player &player); -template void ConfusedMovementGenerator::Reset(Creature &creature); -template bool ConfusedMovementGenerator::Update(Player &player, const uint32 &diff); -template bool ConfusedMovementGenerator::Update(Creature &creature, const uint32 &diff); +template void ConfusedMovementGenerator::Initialize(Player*); +template void ConfusedMovementGenerator::Initialize(Creature*); +template void ConfusedMovementGenerator::Reset(Player*); +template void ConfusedMovementGenerator::Reset(Creature*); +template bool ConfusedMovementGenerator::Update(Player*, const uint32&); +template bool ConfusedMovementGenerator::Update(Creature*, const uint32&); diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h index 72ffd7b734b..5b535e2d47d 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h @@ -28,10 +28,10 @@ class ConfusedMovementGenerator : public MovementGeneratorMedium< T, ConfusedMov public: explicit ConfusedMovementGenerator() : i_nextMoveTime(0) {} - void Initialize(T &); - void Finalize(T &); - void Reset(T &); - bool Update(T &, const uint32 &); + void Initialize(T*); + void Finalize(T*); + void Reset(T*); + bool Update(T*, const uint32&); MovementGeneratorType GetMovementGeneratorType() { return CONFUSED_MOTION_TYPE; } private: diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index ae1e89c8562..e04f7b6fcbc 100755 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -29,21 +29,21 @@ #define MAX_QUIET_DISTANCE 43.0f template -void FleeingMovementGenerator::_setTargetLocation(T &owner) +void FleeingMovementGenerator::_setTargetLocation(T* owner) { - if (!&owner) + if (!owner) return; - if (owner.HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED)) + if (owner->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED)) return; float x, y, z; if (!_getPoint(owner, x, y, z)) return; - owner.AddUnitState(UNIT_STATE_FLEEING_MOVE); + owner->AddUnitState(UNIT_STATE_FLEEING_MOVE); - PathGenerator path(&owner); + PathGenerator path(owner); path.setPathLengthLimit(30.0f); path.CalculatePath(x, y, z); if (path.getPathType() & PATHFIND_NOPATH) @@ -60,17 +60,17 @@ void FleeingMovementGenerator::_setTargetLocation(T &owner) } template -bool FleeingMovementGenerator::_getPoint(T &owner, float &x, float &y, float &z) +bool FleeingMovementGenerator::_getPoint(T* owner, float &x, float &y, float &z) { - if (!&owner) + if (!owner) return false; float dist_from_caster, angle_to_caster; - if (Unit* fright = ObjectAccessor::GetUnit(owner, i_frightGUID)) + if (Unit* fright = ObjectAccessor::GetUnit(*owner, i_frightGUID)) { - dist_from_caster = fright->GetDistance(&owner); + dist_from_caster = fright->GetDistance(owner); if (dist_from_caster > 0.2f) - angle_to_caster = fright->GetAngle(&owner); + angle_to_caster = fright->GetAngle(owner); else angle_to_caster = frand(0, 2 * static_cast(M_PI)); } @@ -98,106 +98,106 @@ bool FleeingMovementGenerator::_getPoint(T &owner, float &x, float &y, float } float curr_x, curr_y, curr_z; - owner.GetPosition(curr_x, curr_y, curr_z); + owner->GetPosition(curr_x, curr_y, curr_z); x = curr_x + dist*cos(angle); y = curr_y + dist*sin(angle); z = curr_z; - owner.UpdateAllowedPositionZ(x, y, z); + owner->UpdateAllowedPositionZ(x, y, z); return true; } template -void FleeingMovementGenerator::Initialize(T &owner) +void FleeingMovementGenerator::Initialize(T* owner) { - if (!&owner) + if (!owner) return; - owner.SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); - owner.AddUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE); + owner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); + owner->AddUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE); - if (owner.GetTypeId() == TYPEID_UNIT) + if (owner->GetTypeId() == TYPEID_UNIT) return; _setTargetLocation(owner); } template<> -void FleeingMovementGenerator::Finalize(Player &owner) +void FleeingMovementGenerator::Finalize(Player* owner) { - owner.RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); - owner.ClearUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE); - owner.StopMoving(); + owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); + owner->ClearUnitState(UNIT_STATE_FLEEING | UNIT_STATE_FLEEING_MOVE); + owner->StopMoving(); } template<> -void FleeingMovementGenerator::Finalize(Creature &owner) +void FleeingMovementGenerator::Finalize(Creature* owner) { - owner.RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); - owner.ClearUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE); - if (owner.getVictim()) - owner.SetTarget(owner.getVictim()->GetGUID()); + owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); + owner->ClearUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE); + if (owner->getVictim()) + owner->SetTarget(owner->getVictim()->GetGUID()); } template -void FleeingMovementGenerator::Reset(T &owner) +void FleeingMovementGenerator::Reset(T* owner) { Initialize(owner); } template -bool FleeingMovementGenerator::Update(T &owner, const uint32 &time_diff) +bool FleeingMovementGenerator::Update(T* owner, const uint32& time_diff) { - if (!&owner || !owner.isAlive()) + if (!owner || !owner->isAlive()) return false; - if (owner.HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED)) + if (owner->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED)) { - owner.ClearUnitState(UNIT_STATE_FLEEING_MOVE); + owner->ClearUnitState(UNIT_STATE_FLEEING_MOVE); return true; } i_nextCheckTime.Update(time_diff); - if (i_nextCheckTime.Passed() && owner.movespline->Finalized()) + if (i_nextCheckTime.Passed() && owner->movespline->Finalized()) _setTargetLocation(owner); return true; } -template void FleeingMovementGenerator::Initialize(Player &); -template void FleeingMovementGenerator::Initialize(Creature &); -template bool FleeingMovementGenerator::_getPoint(Player &, float &, float &, float &); -template bool FleeingMovementGenerator::_getPoint(Creature &, float &, float &, float &); -template void FleeingMovementGenerator::_setTargetLocation(Player &); -template void FleeingMovementGenerator::_setTargetLocation(Creature &); -template void FleeingMovementGenerator::Reset(Player &); -template void FleeingMovementGenerator::Reset(Creature &); -template bool FleeingMovementGenerator::Update(Player &, const uint32 &); -template bool FleeingMovementGenerator::Update(Creature &, const uint32 &); +template void FleeingMovementGenerator::Initialize(Player*); +template void FleeingMovementGenerator::Initialize(Creature*); +template bool FleeingMovementGenerator::_getPoint(Player*, float&, float&, float&); +template bool FleeingMovementGenerator::_getPoint(Creature*, float&, float&, float&); +template void FleeingMovementGenerator::_setTargetLocation(Player*); +template void FleeingMovementGenerator::_setTargetLocation(Creature*); +template void FleeingMovementGenerator::Reset(Player*); +template void FleeingMovementGenerator::Reset(Creature*); +template bool FleeingMovementGenerator::Update(Player*, const uint32&); +template bool FleeingMovementGenerator::Update(Creature*, const uint32&); -void TimedFleeingMovementGenerator::Finalize(Unit &owner) +void TimedFleeingMovementGenerator::Finalize(Unit* owner) { - owner.RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); - owner.ClearUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE); - if (Unit* victim = owner.getVictim()) + owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); + owner->ClearUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE); + if (Unit* victim = owner->getVictim()) { - if (owner.isAlive()) + if (owner->isAlive()) { - owner.AttackStop(); - owner.ToCreature()->AI()->AttackStart(victim); + owner->AttackStop(); + owner->ToCreature()->AI()->AttackStart(victim); } } } -bool TimedFleeingMovementGenerator::Update(Unit & owner, const uint32& time_diff) +bool TimedFleeingMovementGenerator::Update(Unit* owner, const uint32& time_diff) { - if (!owner.isAlive()) + if (!owner->isAlive()) return false; - if (owner.HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED)) + if (owner->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED)) { - owner.ClearUnitState(UNIT_STATE_FLEEING_MOVE); + owner->ClearUnitState(UNIT_STATE_FLEEING_MOVE); return true; } diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h index cb3bd1cb69a..88dedd31af6 100755 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h @@ -27,16 +27,16 @@ class FleeingMovementGenerator : public MovementGeneratorMedium< T, FleeingMovem public: FleeingMovementGenerator(uint64 fright) : i_frightGUID(fright), i_nextCheckTime(0) {} - void Initialize(T &); - void Finalize(T &); - void Reset(T &); - bool Update(T &, const uint32 &); + void Initialize(T*); + void Finalize(T*); + void Reset(T*); + bool Update(T*, const uint32&); MovementGeneratorType GetMovementGeneratorType() { return FLEEING_MOTION_TYPE; } private: - void _setTargetLocation(T &owner); - bool _getPoint(T &owner, float &x, float &y, float &z); + void _setTargetLocation(T*); + bool _getPoint(T*, float &x, float &y, float &z); uint64 i_frightGUID; TimeTracker i_nextCheckTime; @@ -50,8 +50,8 @@ class TimedFleeingMovementGenerator : public FleeingMovementGenerator i_totalFleeTime(time) {} MovementGeneratorType GetMovementGeneratorType() { return TIMED_FLEEING_MOTION_TYPE; } - bool Update(Unit &, const uint32&); - void Finalize(Unit &); + bool Update(Unit*, const uint32&); + void Finalize(Unit*); private: TimeTracker i_totalFleeTime; diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp index f122349a71c..78c1f80005c 100644 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp @@ -23,49 +23,49 @@ #include "MoveSplineInit.h" #include "MoveSpline.h" -void HomeMovementGenerator::Initialize(Creature& owner) +void HomeMovementGenerator::Initialize(Creature* owner) { _setTargetLocation(owner); } -void HomeMovementGenerator::Finalize(Creature& owner) +void HomeMovementGenerator::Finalize(Creature* owner) { if (arrived) { - owner.ClearUnitState(UNIT_STATE_EVADE); - owner.SetWalk(true); - owner.LoadCreaturesAddon(true); - owner.AI()->JustReachedHome(); + owner->ClearUnitState(UNIT_STATE_EVADE); + owner->SetWalk(true); + owner->LoadCreaturesAddon(true); + owner->AI()->JustReachedHome(); } } -void HomeMovementGenerator::Reset(Creature &) +void HomeMovementGenerator::Reset(Creature*) { } -void HomeMovementGenerator::_setTargetLocation(Creature & owner) +void HomeMovementGenerator::_setTargetLocation(Creature* owner) { - if (owner.HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED | UNIT_STATE_DISTRACTED)) + if (owner->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED | UNIT_STATE_DISTRACTED)) return; Movement::MoveSplineInit init(owner); float x, y, z, o; // at apply we can select more nice return points base at current movegen - if (owner.GetMotionMaster()->empty() || !owner.GetMotionMaster()->top()->GetResetPosition(owner,x,y,z)) + if (owner->GetMotionMaster()->empty() || !owner->GetMotionMaster()->top()->GetResetPosition(owner, x, y, z)) { - owner.GetHomePosition(x, y, z, o); + owner->GetHomePosition(x, y, z, o); init.SetFacing(o); } - init.MoveTo(x,y,z); + init.MoveTo(x, y, z); init.SetWalk(false); init.Launch(); arrived = false; - owner.ClearUnitState(UNIT_STATE_ALL_STATE & ~UNIT_STATE_EVADE); + owner->ClearUnitState(UNIT_STATE_ALL_STATE & ~UNIT_STATE_EVADE); } -bool HomeMovementGenerator::Update(Creature &owner, const uint32 /*time_diff*/) +bool HomeMovementGenerator::Update(Creature* owner, const uint32 /*time_diff*/) { - arrived = owner.movespline->Finalized(); + arrived = owner->movespline->Finalized(); return !arrived; } diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h index 95eb05f281c..dfbea60d353 100755 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h @@ -34,14 +34,14 @@ class HomeMovementGenerator : public MovementGeneratorMedium< Creature HomeMovementGenerator() : arrived(false) {} ~HomeMovementGenerator() {} - void Initialize(Creature &); - void Finalize(Creature &); - void Reset(Creature &); - bool Update(Creature &, const uint32); + void Initialize(Creature*); + void Finalize(Creature*); + void Reset(Creature*); + bool Update(Creature*, const uint32); MovementGeneratorType GetMovementGeneratorType() { return HOME_MOTION_TYPE; } private: - void _setTargetLocation(Creature &); + void _setTargetLocation(Creature*); bool arrived; }; #endif diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp index 5a2090cfe28..8ef9bd7697a 100755 --- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp @@ -24,33 +24,33 @@ IdleMovementGenerator si_idleMovement; // StopMoving is needed to make unit stop if its last movement generator expires // But it should not be sent otherwise there are many redundent packets -void IdleMovementGenerator::Initialize(Unit &owner) +void IdleMovementGenerator::Initialize(Unit* owner) { Reset(owner); } -void IdleMovementGenerator::Reset(Unit& owner) +void IdleMovementGenerator::Reset(Unit* owner) { - if (!owner.IsStopped()) - owner.StopMoving(); + if (!owner->IsStopped()) + owner->StopMoving(); } -void RotateMovementGenerator::Initialize(Unit& owner) +void RotateMovementGenerator::Initialize(Unit* owner) { - if (!owner.IsStopped()) - owner.StopMoving(); + if (!owner->IsStopped()) + owner->StopMoving(); - if (owner.getVictim()) - owner.SetInFront(owner.getVictim()); + if (owner->getVictim()) + owner->SetInFront(owner->getVictim()); - owner.AddUnitState(UNIT_STATE_ROTATING); + owner->AddUnitState(UNIT_STATE_ROTATING); - owner.AttackStop(); + owner->AttackStop(); } -bool RotateMovementGenerator::Update(Unit& owner, const uint32& diff) +bool RotateMovementGenerator::Update(Unit* owner, const uint32& diff) { - float angle = owner.GetOrientation(); + float angle = owner->GetOrientation(); if (m_direction == ROTATE_DIRECTION_LEFT) { angle += (float)diff * static_cast(M_PI * 2) / m_maxDuration; @@ -61,8 +61,8 @@ bool RotateMovementGenerator::Update(Unit& owner, const uint32& diff) angle -= (float)diff * static_cast(M_PI * 2) / m_maxDuration; while (angle < 0) angle += static_cast(M_PI * 2); } - owner.SetOrientation(angle); - owner.SendMovementFlagUpdate(); // this is a hack. we do not have anything correct to send in the beginning + owner->SetOrientation(angle); + owner->SendMovementFlagUpdate(); // this is a hack. we do not have anything correct to send in the beginning if (m_duration > diff) m_duration -= diff; @@ -72,24 +72,24 @@ bool RotateMovementGenerator::Update(Unit& owner, const uint32& diff) return true; } -void RotateMovementGenerator::Finalize(Unit &unit) +void RotateMovementGenerator::Finalize(Unit* unit) { - unit.ClearUnitState(UNIT_STATE_ROTATING); - if (unit.GetTypeId() == TYPEID_UNIT) - unit.ToCreature()->AI()->MovementInform(ROTATE_MOTION_TYPE, 0); + unit->ClearUnitState(UNIT_STATE_ROTATING); + if (unit->GetTypeId() == TYPEID_UNIT) + unit->ToCreature()->AI()->MovementInform(ROTATE_MOTION_TYPE, 0); } -void DistractMovementGenerator::Initialize(Unit& owner) +void DistractMovementGenerator::Initialize(Unit* owner) { - owner.AddUnitState(UNIT_STATE_DISTRACTED); + owner->AddUnitState(UNIT_STATE_DISTRACTED); } -void DistractMovementGenerator::Finalize(Unit& owner) +void DistractMovementGenerator::Finalize(Unit* owner) { - owner.ClearUnitState(UNIT_STATE_DISTRACTED); + owner->ClearUnitState(UNIT_STATE_DISTRACTED); } -bool DistractMovementGenerator::Update(Unit& /*owner*/, const uint32& time_diff) +bool DistractMovementGenerator::Update(Unit* /*owner*/, const uint32& time_diff) { if (time_diff > m_timer) return false; @@ -98,9 +98,9 @@ bool DistractMovementGenerator::Update(Unit& /*owner*/, const uint32& time_diff) return true; } -void AssistanceDistractMovementGenerator::Finalize(Unit &unit) +void AssistanceDistractMovementGenerator::Finalize(Unit* unit) { - unit.ClearUnitState(UNIT_STATE_DISTRACTED); - unit.ToCreature()->SetReactState(REACT_AGGRESSIVE); + unit->ClearUnitState(UNIT_STATE_DISTRACTED); + unit->ToCreature()->SetReactState(REACT_AGGRESSIVE); } diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h index 7acec82af98..14287d871c9 100755 --- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h @@ -25,10 +25,10 @@ class IdleMovementGenerator : public MovementGenerator { public: - void Initialize(Unit &); - void Finalize(Unit &) { } - void Reset(Unit &); - bool Update(Unit &, const uint32&) { return true; } + void Initialize(Unit*); + void Finalize(Unit*) { } + void Reset(Unit*); + bool Update(Unit*, const uint32&) { return true; } MovementGeneratorType GetMovementGeneratorType() { return IDLE_MOTION_TYPE; } }; @@ -39,10 +39,10 @@ class RotateMovementGenerator : public MovementGenerator public: explicit RotateMovementGenerator(uint32 time, RotateDirection direction) : m_duration(time), m_maxDuration(time), m_direction(direction) {} - void Initialize(Unit& owner); - void Finalize(Unit& owner); - void Reset(Unit& owner) { Initialize(owner); } - bool Update(Unit& owner, const uint32& time_diff); + void Initialize(Unit*); + void Finalize(Unit*); + void Reset(Unit* owner) { Initialize(owner); } + bool Update(Unit*, const uint32&); MovementGeneratorType GetMovementGeneratorType() { return ROTATE_MOTION_TYPE; } private: @@ -55,10 +55,10 @@ class DistractMovementGenerator : public MovementGenerator public: explicit DistractMovementGenerator(uint32 timer) : m_timer(timer) {} - void Initialize(Unit& owner); - void Finalize(Unit& owner); - void Reset(Unit& owner) { Initialize(owner); } - bool Update(Unit& owner, const uint32& time_diff); + void Initialize(Unit*); + void Finalize(Unit*); + void Reset(Unit* owner) { Initialize(owner); } + bool Update(Unit*, const uint32&); MovementGeneratorType GetMovementGeneratorType() { return DISTRACT_MOTION_TYPE; } private: @@ -72,7 +72,7 @@ class AssistanceDistractMovementGenerator : public DistractMovementGenerator DistractMovementGenerator(timer) {} MovementGeneratorType GetMovementGeneratorType() { return ASSISTANCE_DISTRACT_MOTION_TYPE; } - void Finalize(Unit& unit); + void Finalize(Unit*); }; #endif diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp index cdb8a0a2a05..c8a7c8f8f8d 100755 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp @@ -27,12 +27,12 @@ //----- Point Movement Generator template -void PointMovementGenerator::Initialize(T &unit) +void PointMovementGenerator::Initialize(T* unit) { - if (!unit.IsStopped()) - unit.StopMoving(); + if (!unit->IsStopped()) + unit->StopMoving(); - unit.AddUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); + unit->AddUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); i_recalculateSpeed = false; Movement::MoveSplineInit init(unit); init.MoveTo(i_x, i_y, i_z, m_generatePath); @@ -42,20 +42,20 @@ void PointMovementGenerator::Initialize(T &unit) } template -bool PointMovementGenerator::Update(T &unit, const uint32 & /*diff*/) +bool PointMovementGenerator::Update(T* unit, const uint32& /*diff*/) { - if (!&unit) + if (!unit) return false; - if (unit.HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED)) + if (unit->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED)) { - unit.ClearUnitState(UNIT_STATE_ROAMING_MOVE); + unit->ClearUnitState(UNIT_STATE_ROAMING_MOVE); return true; } - unit.AddUnitState(UNIT_STATE_ROAMING_MOVE); + unit->AddUnitState(UNIT_STATE_ROAMING_MOVE); - if (i_recalculateSpeed && !unit.movespline->Finalized()) + if (i_recalculateSpeed && !unit->movespline->Finalized()) { i_recalculateSpeed = false; Movement::MoveSplineInit init(unit); @@ -65,74 +65,74 @@ bool PointMovementGenerator::Update(T &unit, const uint32 & /*diff*/) init.Launch(); } - return !unit.movespline->Finalized(); + return !unit->movespline->Finalized(); } template -void PointMovementGenerator::Finalize(T &unit) +void PointMovementGenerator::Finalize(T* unit) { - if (unit.HasUnitState(UNIT_STATE_CHARGING)) - unit.ClearUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE); + if (unit->HasUnitState(UNIT_STATE_CHARGING)) + unit->ClearUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE); - if (unit.movespline->Finalized()) + if (unit->movespline->Finalized()) MovementInform(unit); } template -void PointMovementGenerator::Reset(T &unit) +void PointMovementGenerator::Reset(T* unit) { - if (!unit.IsStopped()) - unit.StopMoving(); + if (!unit->IsStopped()) + unit->StopMoving(); - unit.AddUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); + unit->AddUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); } template -void PointMovementGenerator::MovementInform(T & /*unit*/) +void PointMovementGenerator::MovementInform(T* /*unit*/) { } -template <> void PointMovementGenerator::MovementInform(Creature &unit) +template <> void PointMovementGenerator::MovementInform(Creature* unit) { - if (unit.AI()) - unit.AI()->MovementInform(POINT_MOTION_TYPE, id); + if (unit->AI()) + unit->AI()->MovementInform(POINT_MOTION_TYPE, id); } -template void PointMovementGenerator::Initialize(Player&); -template void PointMovementGenerator::Initialize(Creature&); -template void PointMovementGenerator::Finalize(Player&); -template void PointMovementGenerator::Finalize(Creature&); -template void PointMovementGenerator::Reset(Player&); -template void PointMovementGenerator::Reset(Creature&); -template bool PointMovementGenerator::Update(Player &, const uint32 &); -template bool PointMovementGenerator::Update(Creature&, const uint32 &); +template void PointMovementGenerator::Initialize(Player*); +template void PointMovementGenerator::Initialize(Creature*); +template void PointMovementGenerator::Finalize(Player*); +template void PointMovementGenerator::Finalize(Creature*); +template void PointMovementGenerator::Reset(Player*); +template void PointMovementGenerator::Reset(Creature*); +template bool PointMovementGenerator::Update(Player*, const uint32&); +template bool PointMovementGenerator::Update(Creature*, const uint32&); -void AssistanceMovementGenerator::Finalize(Unit &unit) +void AssistanceMovementGenerator::Finalize(Unit* unit) { - unit.ToCreature()->SetNoCallAssistance(false); - unit.ToCreature()->CallAssistance(); - if (unit.isAlive()) - unit.GetMotionMaster()->MoveSeekAssistanceDistract(sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_DELAY)); + unit->ToCreature()->SetNoCallAssistance(false); + unit->ToCreature()->CallAssistance(); + if (unit->isAlive()) + unit->GetMotionMaster()->MoveSeekAssistanceDistract(sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_DELAY)); } -bool EffectMovementGenerator::Update(Unit &unit, const uint32&) +bool EffectMovementGenerator::Update(Unit* unit, const uint32&) { - return !unit.movespline->Finalized(); + return !unit->movespline->Finalized(); } -void EffectMovementGenerator::Finalize(Unit &unit) +void EffectMovementGenerator::Finalize(Unit* unit) { - if (unit.GetTypeId() != TYPEID_UNIT) + if (unit->GetTypeId() != TYPEID_UNIT) return; - if (((Creature&)unit).AI()) - ((Creature&)unit).AI()->MovementInform(EFFECT_MOTION_TYPE, m_Id); + if (unit->ToCreature()->AI()) + unit->ToCreature()->AI()->MovementInform(EFFECT_MOTION_TYPE, m_Id); // Need restore previous movement since we have no proper states system - if (unit.isAlive() && !unit.HasUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_FLEEING)) + if (unit->isAlive() && !unit->HasUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_FLEEING)) { - if (Unit* victim = unit.getVictim()) - unit.GetMotionMaster()->MoveChase(victim); + if (Unit* victim = unit->getVictim()) + unit->GetMotionMaster()->MoveChase(victim); else - unit.GetMotionMaster()->Initialize(); + unit->GetMotionMaster()->Initialize(); } } diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h index 541cbdbc3a7..4111690627e 100644 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h @@ -29,18 +29,18 @@ class PointMovementGenerator : public MovementGeneratorMedium< T, PointMovementG PointMovementGenerator(uint32 _id, float _x, float _y, float _z, bool _generatePath, float _speed = 0.0f) : id(_id), i_x(_x), i_y(_y), i_z(_z), m_generatePath(_generatePath), speed(_speed) {} - void Initialize(T &); - void Finalize(T &); - void Reset(T &); - bool Update(T &, const uint32 &); + void Initialize(T*); + void Finalize(T*); + void Reset(T*); + bool Update(T*, const uint32 &); - void MovementInform(T &); + void MovementInform(T*); void unitSpeedChanged() { i_recalculateSpeed = true; } MovementGeneratorType GetMovementGeneratorType() { return POINT_MOTION_TYPE; } - bool GetDestination(float& x, float& y, float& z) const { x=i_x; y=i_y; z=i_z; return true; } + void GetDestination(float& x, float& y, float& z) const { x = i_x; y = i_y; z = i_z; } private: uint32 id; float i_x, i_y, i_z; @@ -56,7 +56,7 @@ class AssistanceMovementGenerator : public PointMovementGenerator PointMovementGenerator(0, _x, _y, _z, true) {} MovementGeneratorType GetMovementGeneratorType() { return ASSISTANCE_MOTION_TYPE; } - void Finalize(Unit &); + void Finalize(Unit*); }; // Does almost nothing - just doesn't allows previous movegen interrupt current effect. @@ -64,10 +64,10 @@ class EffectMovementGenerator : public MovementGenerator { public: explicit EffectMovementGenerator(uint32 Id) : m_Id(Id) {} - void Initialize(Unit &) {} - void Finalize(Unit &unit); - void Reset(Unit &) {} - bool Update(Unit &u, const uint32&); + void Initialize(Unit*) {} + void Finalize(Unit*); + void Reset(Unit*) {} + bool Update(Unit*, const uint32&); MovementGeneratorType GetMovementGeneratorType() { return EFFECT_MOTION_TYPE; } private: uint32 m_Id; diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp index 84cd9e88295..3e55b9679c6 100755 --- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp @@ -33,16 +33,16 @@ #endif template<> -void RandomMovementGenerator::_setRandomLocation(Creature& creature) +void RandomMovementGenerator::_setRandomLocation(Creature* creature) { float respX, respY, respZ, respO, destX, destY, destZ, travelDistZ; - creature.GetHomePosition(respX, respY, respZ, respO); - Map const* map = creature.GetBaseMap(); + creature->GetHomePosition(respX, respY, respZ, respO); + Map const* map = creature->GetBaseMap(); // For 2D/3D system selection //bool is_land_ok = creature.CanWalk(); // not used? //bool is_water_ok = creature.CanSwim(); // not used? - bool is_air_ok = creature.CanFly(); + bool is_air_ok = creature->CanFly(); const float angle = float(rand_norm()) * static_cast(M_PI*2.0f); const float range = float(rand_norm()) * wander_distance; @@ -77,17 +77,17 @@ void RandomMovementGenerator::_setRandomLocation(Creature& creature) // The fastest way to get an accurate result 90% of the time. // Better result can be obtained like 99% accuracy with a ray light, but the cost is too high and the code is too long. - destZ = map->GetHeight(creature.GetPhaseMask(), destX, destY, respZ+travelDistZ-2.0f, false); + destZ = map->GetHeight(creature->GetPhaseMask(), destX, destY, respZ+travelDistZ-2.0f, false); if (fabs(destZ - respZ) > travelDistZ) // Map check { // Vmap Horizontal or above - destZ = map->GetHeight(creature.GetPhaseMask(), destX, destY, respZ - 2.0f, true); + destZ = map->GetHeight(creature->GetPhaseMask(), destX, destY, respZ - 2.0f, true); if (fabs(destZ - respZ) > travelDistZ) { // Vmap Higher - destZ = map->GetHeight(creature.GetPhaseMask(), destX, destY, respZ+travelDistZ-2.0f, true); + destZ = map->GetHeight(creature->GetPhaseMask(), destX, destY, respZ+travelDistZ-2.0f, true); // let's forget this bad coords where a z cannot be find and retry at next tick if (fabs(destZ - respZ) > travelDistZ) @@ -101,7 +101,7 @@ void RandomMovementGenerator::_setRandomLocation(Creature& creature) else i_nextMoveTime.Reset(urand(500, 10000)); - creature.AddUnitState(UNIT_STATE_ROAMING_MOVE); + creature->AddUnitState(UNIT_STATE_ROAMING_MOVE); Movement::MoveSplineInit init(creature); init.MoveTo(destX, destY, destZ); @@ -109,47 +109,47 @@ void RandomMovementGenerator::_setRandomLocation(Creature& creature) init.Launch(); //Call for creature group update - if (creature.GetFormation() && creature.GetFormation()->getLeader() == &creature) - creature.GetFormation()->LeaderMoveTo(destX, destY, destZ); + if (creature->GetFormation() && creature->GetFormation()->getLeader() == creature) + creature->GetFormation()->LeaderMoveTo(destX, destY, destZ); } template<> -void RandomMovementGenerator::Initialize(Creature &creature) +void RandomMovementGenerator::Initialize(Creature* creature) { - if (!creature.isAlive()) + if (!creature->isAlive()) return; if (!wander_distance) - wander_distance = creature.GetRespawnRadius(); + wander_distance = creature->GetRespawnRadius(); - creature.AddUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); + creature->AddUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE); _setRandomLocation(creature); } template<> -void RandomMovementGenerator::Reset(Creature &creature) +void RandomMovementGenerator::Reset(Creature* creature) { Initialize(creature); } template<> -void RandomMovementGenerator::Finalize(Creature &creature) +void RandomMovementGenerator::Finalize(Creature* creature) { - creature.ClearUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); - creature.SetWalk(false); + creature->ClearUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); + creature->SetWalk(false); } template<> -bool RandomMovementGenerator::Update(Creature &creature, const uint32 diff) +bool RandomMovementGenerator::Update(Creature* creature, const uint32 diff) { - if (creature.HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED | UNIT_STATE_DISTRACTED)) + if (creature->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED | UNIT_STATE_DISTRACTED)) { i_nextMoveTime.Reset(0); // Expire the timer - creature.ClearUnitState(UNIT_STATE_ROAMING_MOVE); + creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE); return true; } - if (creature.movespline->Finalized()) + if (creature->movespline->Finalized()) { i_nextMoveTime.Update(diff); if (i_nextMoveTime.Passed()) @@ -159,14 +159,14 @@ bool RandomMovementGenerator::Update(Creature &creature, const uint32 } template<> -bool RandomMovementGenerator::GetResetPosition(Creature &creature, float& x, float& y, float& z) +bool RandomMovementGenerator::GetResetPosition(Creature* creature, float& x, float& y, float& z) { float radius; - creature.GetRespawnPosition(x, y, z, NULL, &radius); + creature->GetRespawnPosition(x, y, z, NULL, &radius); // use current if in range - if (creature.IsWithinDist2d(x,y,radius)) - creature.GetPosition(x,y,z); + if (creature->IsWithinDist2d(x,y,radius)) + creature->GetPosition(x,y,z); return true; } diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h index 07ec3647052..ca370de6ac3 100755 --- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h @@ -27,12 +27,12 @@ class RandomMovementGenerator : public MovementGeneratorMedium< T, RandomMovemen public: RandomMovementGenerator(float spawn_dist = 0.0f) : i_nextMoveTime(0), wander_distance(spawn_dist) {} - void _setRandomLocation(T &); - void Initialize(T &); - void Finalize(T &); - void Reset(T &); - bool Update(T &, const uint32); - bool GetResetPosition(T&, float& x, float& y, float& z); + void _setRandomLocation(T*); + void Initialize(T*); + void Finalize(T*); + void Reset(T*); + bool Update(T*, const uint32); + bool GetResetPosition(T*, float& x, float& y, float& z); MovementGeneratorType GetMovementGeneratorType() { return RANDOM_MOTION_TYPE; } private: TimeTrackerSmall i_nextMoveTime; diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 6d322a56a80..9784c19b4fd 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -27,12 +27,12 @@ #include "Player.h" template -void TargetedMovementGeneratorMedium::_setTargetLocation(T &owner) +void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner) { if (!i_target.isValid() || !i_target->IsInWorld()) return; - if (owner.HasUnitState(UNIT_STATE_NOT_MOVE)) + if (owner->HasUnitState(UNIT_STATE_NOT_MOVE)) return; float x, y, z; @@ -49,26 +49,26 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T &owner) // else if (!i_offset) { - if (i_target->IsWithinMeleeRange(&owner)) + if (i_target->IsWithinMeleeRange(owner)) return; // to nearest random contact position - i_target->GetRandomContactPoint(&owner, x, y, z, 0, MELEE_RANGE - 0.5f); + i_target->GetRandomContactPoint(owner, x, y, z, 0, MELEE_RANGE - 0.5f); } else { - if (i_target->IsWithinDistInMap(&owner, i_offset + 1.0f)) + if (i_target->IsWithinDistInMap(owner, i_offset + 1.0f)) return; // to at i_offset distance from target and i_angle from target facing - i_target->GetClosePoint(x, y, z, owner.GetObjectSize(), i_offset, i_angle); + i_target->GetClosePoint(x, y, z, owner->GetObjectSize(), i_offset, i_angle); } if (!i_path) - i_path = new PathGenerator(&owner); + i_path = new PathGenerator(owner); // allow pets following their master to cheat while generating paths - bool forceDest = (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->isPet() - && owner.HasUnitState(UNIT_STATE_FOLLOW)); + bool forceDest = (owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->isPet() + && owner->HasUnitState(UNIT_STATE_FOLLOW)); i_path->CalculatePath(x, y, z, forceDest); if (i_path->getPathType() & PATHFIND_NOPATH) return; @@ -76,7 +76,7 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T &owner) D::_addUnitStateMove(owner); i_targetReached = false; i_recalculateTravel = false; - owner.AddUnitState(UNIT_STATE_CHASE); + owner->AddUnitState(UNIT_STATE_CHASE); Movement::MoveSplineInit init(owner); init.MovebyPath(i_path->getPath()); @@ -111,25 +111,25 @@ void TargetedMovementGeneratorMedium } template -bool TargetedMovementGeneratorMedium::Update(T &owner, const uint32 & time_diff) +bool TargetedMovementGeneratorMedium::Update(T* owner, const uint32& time_diff) { if (!i_target.isValid() || !i_target->IsInWorld()) return false; - if (!&owner || !owner.isAlive()) + if (!owner || !owner->isAlive()) return true; - if (owner.HasUnitState(UNIT_STATE_NOT_MOVE)) + if (owner->HasUnitState(UNIT_STATE_NOT_MOVE)) { D::_clearUnitStateMove(owner); return true; } // prevent movement while casting spells with cast time or channel time - if (owner.HasUnitState(UNIT_STATE_CASTING)) + if (owner->HasUnitState(UNIT_STATE_CASTING)) { - if (!owner.IsStopped()) - owner.StopMoving(); + if (!owner->IsStopped()) + owner->StopMoving(); return true; } @@ -145,11 +145,11 @@ bool TargetedMovementGeneratorMedium::Update(T &owner, const uint32 & time_ { i_recheckDistance.Reset(100); //More distance let have better performance, less distance let have more sensitive reaction at target move. - float allowed_dist = owner.GetCombatReach() + sWorld->getRate(RATE_TARGET_POS_RECALCULATION_RANGE); - G3D::Vector3 dest = owner.movespline->FinalDestination(); + float allowed_dist = owner->GetCombatReach() + sWorld->getRate(RATE_TARGET_POS_RECALCULATION_RANGE); + G3D::Vector3 dest = owner->movespline->FinalDestination(); bool targetMoved = false; - if (owner.GetTypeId() == TYPEID_UNIT && ((Creature*)&owner)->CanFly()) + if (owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->CanFly()) targetMoved = !i_target->IsWithinDist3d(dest.x, dest.y, dest.z, allowed_dist); else targetMoved = !i_target->IsWithinDist2d(dest.x, dest.y, allowed_dist); @@ -158,11 +158,11 @@ bool TargetedMovementGeneratorMedium::Update(T &owner, const uint32 & time_ _setTargetLocation(owner); } - if (owner.movespline->Finalized()) + if (owner->movespline->Finalized()) { static_cast(this)->MovementInform(owner); - if (i_angle == 0.f && !owner.HasInArc(0.01f, i_target.getTarget())) - owner.SetInFront(i_target.getTarget()); + if (i_angle == 0.f && !owner->HasInArc(0.01f, i_target.getTarget())) + owner->SetInFront(i_target.getTarget()); if (!i_targetReached) { @@ -180,50 +180,50 @@ bool TargetedMovementGeneratorMedium::Update(T &owner, const uint32 & time_ //-----------------------------------------------// template -void ChaseMovementGenerator::_reachTarget(T &owner) +void ChaseMovementGenerator::_reachTarget(T* owner) { - if (owner.IsWithinMeleeRange(this->i_target.getTarget())) - owner.Attack(this->i_target.getTarget(),true); + if (owner->IsWithinMeleeRange(this->i_target.getTarget())) + owner->Attack(this->i_target.getTarget(),true); } template<> -void ChaseMovementGenerator::Initialize(Player &owner) +void ChaseMovementGenerator::Initialize(Player* owner) { - owner.AddUnitState(UNIT_STATE_CHASE|UNIT_STATE_CHASE_MOVE); + owner->AddUnitState(UNIT_STATE_CHASE | UNIT_STATE_CHASE_MOVE); _setTargetLocation(owner); } template<> -void ChaseMovementGenerator::Initialize(Creature &owner) +void ChaseMovementGenerator::Initialize(Creature* owner) { - owner.SetWalk(false); - owner.AddUnitState(UNIT_STATE_CHASE|UNIT_STATE_CHASE_MOVE); + owner->SetWalk(false); + owner->AddUnitState(UNIT_STATE_CHASE | UNIT_STATE_CHASE_MOVE); _setTargetLocation(owner); } template -void ChaseMovementGenerator::Finalize(T &owner) +void ChaseMovementGenerator::Finalize(T* owner) { - owner.ClearUnitState(UNIT_STATE_CHASE|UNIT_STATE_CHASE_MOVE); + owner->ClearUnitState(UNIT_STATE_CHASE | UNIT_STATE_CHASE_MOVE); } template -void ChaseMovementGenerator::Reset(T &owner) +void ChaseMovementGenerator::Reset(T* owner) { Initialize(owner); } template -void ChaseMovementGenerator::MovementInform(T & /*unit*/) +void ChaseMovementGenerator::MovementInform(T* /*unit*/) { } template<> -void ChaseMovementGenerator::MovementInform(Creature &unit) +void ChaseMovementGenerator::MovementInform(Creature* unit) { // Pass back the GUIDLow of the target. If it is pet's owner then PetAI will handle - if (unit.AI()) - unit.AI()->MovementInform(CHASE_MOTION_TYPE, i_target.getTarget()->GetGUIDLow()); + if (unit->AI()) + unit->AI()->MovementInform(CHASE_MOTION_TYPE, i_target.getTarget()->GetGUIDLow()); } //-----------------------------------------------// @@ -240,85 +240,85 @@ bool FollowMovementGenerator::EnableWalking() const } template<> -void FollowMovementGenerator::_updateSpeed(Player &/*u*/) +void FollowMovementGenerator::_updateSpeed(Player* /*u*/) { // nothing to do for Player } template<> -void FollowMovementGenerator::_updateSpeed(Creature &u) +void FollowMovementGenerator::_updateSpeed(Creature* u) { // pet only sync speed with owner - if (!((Creature&)u).isPet() || !i_target.isValid() || i_target->GetGUID() != u.GetOwnerGUID()) + if (!u->isPet() || !i_target.isValid() || i_target->GetGUID() != u->GetOwnerGUID()) return; - u.UpdateSpeed(MOVE_RUN,true); - u.UpdateSpeed(MOVE_WALK,true); - u.UpdateSpeed(MOVE_SWIM,true); + u->UpdateSpeed(MOVE_RUN,true); + u->UpdateSpeed(MOVE_WALK,true); + u->UpdateSpeed(MOVE_SWIM,true); } template<> -void FollowMovementGenerator::Initialize(Player &owner) +void FollowMovementGenerator::Initialize(Player* owner) { - owner.AddUnitState(UNIT_STATE_FOLLOW|UNIT_STATE_FOLLOW_MOVE); + owner->AddUnitState(UNIT_STATE_FOLLOW | UNIT_STATE_FOLLOW_MOVE); _updateSpeed(owner); _setTargetLocation(owner); } template<> -void FollowMovementGenerator::Initialize(Creature &owner) +void FollowMovementGenerator::Initialize(Creature* owner) { - owner.AddUnitState(UNIT_STATE_FOLLOW|UNIT_STATE_FOLLOW_MOVE); + owner->AddUnitState(UNIT_STATE_FOLLOW | UNIT_STATE_FOLLOW_MOVE); _updateSpeed(owner); _setTargetLocation(owner); } template -void FollowMovementGenerator::Finalize(T &owner) +void FollowMovementGenerator::Finalize(T* owner) { - owner.ClearUnitState(UNIT_STATE_FOLLOW|UNIT_STATE_FOLLOW_MOVE); + owner->ClearUnitState(UNIT_STATE_FOLLOW | UNIT_STATE_FOLLOW_MOVE); _updateSpeed(owner); } template -void FollowMovementGenerator::Reset(T &owner) +void FollowMovementGenerator::Reset(T* owner) { Initialize(owner); } template -void FollowMovementGenerator::MovementInform(T & /*unit*/) +void FollowMovementGenerator::MovementInform(T* /*unit*/) { } template<> -void FollowMovementGenerator::MovementInform(Creature &unit) +void FollowMovementGenerator::MovementInform(Creature* unit) { // Pass back the GUIDLow of the target. If it is pet's owner then PetAI will handle - if (unit.AI()) - unit.AI()->MovementInform(FOLLOW_MOTION_TYPE, i_target.getTarget()->GetGUIDLow()); + if (unit->AI()) + unit->AI()->MovementInform(FOLLOW_MOTION_TYPE, i_target.getTarget()->GetGUIDLow()); } //-----------------------------------------------// -template void TargetedMovementGeneratorMedium >::_setTargetLocation(Player &); -template void TargetedMovementGeneratorMedium >::_setTargetLocation(Player &); -template void TargetedMovementGeneratorMedium >::_setTargetLocation(Creature &); -template void TargetedMovementGeneratorMedium >::_setTargetLocation(Creature &); -template bool TargetedMovementGeneratorMedium >::Update(Player &, const uint32 &); -template bool TargetedMovementGeneratorMedium >::Update(Player &, const uint32 &); -template bool TargetedMovementGeneratorMedium >::Update(Creature &, const uint32 &); -template bool TargetedMovementGeneratorMedium >::Update(Creature &, const uint32 &); +template void TargetedMovementGeneratorMedium >::_setTargetLocation(Player*); +template void TargetedMovementGeneratorMedium >::_setTargetLocation(Player*); +template void TargetedMovementGeneratorMedium >::_setTargetLocation(Creature*); +template void TargetedMovementGeneratorMedium >::_setTargetLocation(Creature*); +template bool TargetedMovementGeneratorMedium >::Update(Player*, const uint32&); +template bool TargetedMovementGeneratorMedium >::Update(Player*, const uint32&); +template bool TargetedMovementGeneratorMedium >::Update(Creature*, const uint32&); +template bool TargetedMovementGeneratorMedium >::Update(Creature*, const uint32&); -template void ChaseMovementGenerator::_reachTarget(Player &); -template void ChaseMovementGenerator::_reachTarget(Creature &); -template void ChaseMovementGenerator::Finalize(Player &); -template void ChaseMovementGenerator::Finalize(Creature &); -template void ChaseMovementGenerator::Reset(Player &); -template void ChaseMovementGenerator::Reset(Creature &); -template void ChaseMovementGenerator::MovementInform(Player &unit); +template void ChaseMovementGenerator::_reachTarget(Player*); +template void ChaseMovementGenerator::_reachTarget(Creature*); +template void ChaseMovementGenerator::Finalize(Player*); +template void ChaseMovementGenerator::Finalize(Creature*); +template void ChaseMovementGenerator::Reset(Player*); +template void ChaseMovementGenerator::Reset(Creature*); +template void ChaseMovementGenerator::MovementInform(Player*); -template void FollowMovementGenerator::Finalize(Player &); -template void FollowMovementGenerator::Finalize(Creature &); -template void FollowMovementGenerator::Reset(Player &); -template void FollowMovementGenerator::Reset(Creature &); -template void FollowMovementGenerator::MovementInform(Player &unit); +template void FollowMovementGenerator::Finalize(Player*); +template void FollowMovementGenerator::Finalize(Creature*); +template void FollowMovementGenerator::Reset(Player*); +template void FollowMovementGenerator::Reset(Creature*); +template void FollowMovementGenerator::MovementInform(Player*); diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h index db5e05c7b23..688d236c3f8 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h @@ -28,7 +28,7 @@ class TargetedMovementGeneratorBase { public: - TargetedMovementGeneratorBase(Unit &target) { i_target.link(&target, this); } + TargetedMovementGeneratorBase(Unit* target) { i_target.link(target, this); } void stopFollowing() { } protected: FollowerReference i_target; @@ -38,7 +38,7 @@ template class TargetedMovementGeneratorMedium : public MovementGeneratorMedium< T, D >, public TargetedMovementGeneratorBase { protected: - TargetedMovementGeneratorMedium(Unit &target, float offset, float angle) : + TargetedMovementGeneratorMedium(Unit* target, float offset, float angle) : TargetedMovementGeneratorBase(target), i_recheckDistance(0), i_path(NULL), i_offset(offset), i_angle(angle), i_recalculateTravel(false), i_targetReached(false) @@ -47,14 +47,14 @@ class TargetedMovementGeneratorMedium : public MovementGeneratorMedium< T, D >, ~TargetedMovementGeneratorMedium() { delete i_path; } public: - bool Update(T &, const uint32 &); + bool Update(T*, const uint32 &); Unit* GetTarget() const { return i_target.getTarget(); } - void unitSpeedChanged() { i_recalculateTravel=true; } + void unitSpeedChanged() { i_recalculateTravel = true; } void UpdateFinalDistance(float fDistance); bool IsReachable() const { return (i_path) ? (i_path->getPathType() & PATHFIND_NORMAL) : true; } protected: - void _setTargetLocation(T &); + void _setTargetLocation(T*); TimeTrackerSmall i_recheckDistance; float i_offset; @@ -68,50 +68,50 @@ template class ChaseMovementGenerator : public TargetedMovementGeneratorMedium > { public: - ChaseMovementGenerator(Unit &target) + ChaseMovementGenerator(Unit* target) : TargetedMovementGeneratorMedium >(target) {} - ChaseMovementGenerator(Unit &target, float offset, float angle) + ChaseMovementGenerator(Unit* target, float offset, float angle) : TargetedMovementGeneratorMedium >(target, offset, angle) {} ~ChaseMovementGenerator() {} MovementGeneratorType GetMovementGeneratorType() { return CHASE_MOTION_TYPE; } - void Initialize(T &); - void Finalize(T &); - void Reset(T &); - void MovementInform(T &); + void Initialize(T*); + void Finalize(T*); + void Reset(T*); + void MovementInform(T*); - static void _clearUnitStateMove(T &u) { u.ClearUnitState(UNIT_STATE_CHASE_MOVE); } - static void _addUnitStateMove(T &u) { u.AddUnitState(UNIT_STATE_CHASE_MOVE); } + static void _clearUnitStateMove(T* u) { u->ClearUnitState(UNIT_STATE_CHASE_MOVE); } + static void _addUnitStateMove(T* u) { u->AddUnitState(UNIT_STATE_CHASE_MOVE); } bool EnableWalking() const { return false;} - bool _lostTarget(T &u) const { return u.getVictim() != this->GetTarget(); } - void _reachTarget(T &); + bool _lostTarget(T* u) const { return u->getVictim() != GetTarget(); } + void _reachTarget(T*); }; template class FollowMovementGenerator : public TargetedMovementGeneratorMedium > { public: - FollowMovementGenerator(Unit &target) + FollowMovementGenerator(Unit* target) : TargetedMovementGeneratorMedium >(target){} - FollowMovementGenerator(Unit &target, float offset, float angle) + FollowMovementGenerator(Unit* target, float offset, float angle) : TargetedMovementGeneratorMedium >(target, offset, angle) {} ~FollowMovementGenerator() {} MovementGeneratorType GetMovementGeneratorType() { return FOLLOW_MOTION_TYPE; } - void Initialize(T &); - void Finalize(T &); - void Reset(T &); - void MovementInform(T &); + void Initialize(T*); + void Finalize(T*); + void Reset(T*); + void MovementInform(T*); - static void _clearUnitStateMove(T &u) { u.ClearUnitState(UNIT_STATE_FOLLOW_MOVE); } - static void _addUnitStateMove(T &u) { u.AddUnitState(UNIT_STATE_FOLLOW_MOVE); } + static void _clearUnitStateMove(T* u) { u->ClearUnitState(UNIT_STATE_FOLLOW_MOVE); } + static void _addUnitStateMove(T* u) { u->AddUnitState(UNIT_STATE_FOLLOW_MOVE); } bool EnableWalking() const; - bool _lostTarget(T &) const { return false; } - void _reachTarget(T &) {} + bool _lostTarget(T*) const { return false; } + void _reachTarget(T*) {} private: - void _updateSpeed(T &u); + void _updateSpeed(T* u); }; #endif diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index 8c2db9ddbd6..c576d7389f3 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -31,64 +31,64 @@ #include "MoveSplineInit.h" #include "MoveSpline.h" -void WaypointMovementGenerator::LoadPath(Creature &creature) +void WaypointMovementGenerator::LoadPath(Creature* creature) { if (!path_id) - path_id = creature.GetWaypointPath(); + path_id = creature->GetWaypointPath(); i_path = sWaypointMgr->GetPath(path_id); if (!i_path) { // No movement found for entry - sLog->outError(LOG_FILTER_SQL, "WaypointMovementGenerator::LoadPath: creature %s (Entry: %u GUID: %u) doesn't have waypoint path id: %u", creature.GetName(), creature.GetEntry(), creature.GetGUIDLow(), path_id); + sLog->outError(LOG_FILTER_SQL, "WaypointMovementGenerator::LoadPath: creature %s (Entry: %u GUID: %u) doesn't have waypoint path id: %u", creature->GetName(), creature->GetEntry(), creature->GetGUIDLow(), path_id); return; } StartMoveNow(creature); } -void WaypointMovementGenerator::Initialize(Creature &creature) +void WaypointMovementGenerator::Initialize(Creature* creature) { LoadPath(creature); - creature.AddUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); + creature->AddUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); } -void WaypointMovementGenerator::Finalize(Creature &creature) +void WaypointMovementGenerator::Finalize(Creature* creature) { - creature.ClearUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); - creature.SetWalk(false); + creature->ClearUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); + creature->SetWalk(false); } -void WaypointMovementGenerator::Reset(Creature &creature) +void WaypointMovementGenerator::Reset(Creature* creature) { - creature.AddUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); + creature->AddUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); StartMoveNow(creature); } -void WaypointMovementGenerator::OnArrived(Creature& creature) +void WaypointMovementGenerator::OnArrived(Creature* creature) { if (!i_path || i_path->empty()) return; if (m_isArrivalDone) return; - creature.ClearUnitState(UNIT_STATE_ROAMING_MOVE); + creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE); m_isArrivalDone = true; if (i_path->at(i_currentNode)->event_id && urand(0, 99) < i_path->at(i_currentNode)->event_chance) { - sLog->outDebug(LOG_FILTER_MAPSCRIPTS, "Creature movement start script %u at point %u for "UI64FMTD".", i_path->at(i_currentNode)->event_id, i_currentNode, creature.GetGUID()); - creature.GetMap()->ScriptsStart(sWaypointScripts, i_path->at(i_currentNode)->event_id, &creature, NULL); + sLog->outDebug(LOG_FILTER_MAPSCRIPTS, "Creature movement start script %u at point %u for "UI64FMTD".", i_path->at(i_currentNode)->event_id, i_currentNode, creature->GetGUID()); + creature->GetMap()->ScriptsStart(sWaypointScripts, i_path->at(i_currentNode)->event_id, creature, NULL); } // Inform script MovementInform(creature); - creature.UpdateWaypointID(i_currentNode); + creature->UpdateWaypointID(i_currentNode); Stop(i_path->at(i_currentNode)->delay); } -bool WaypointMovementGenerator::StartMove(Creature &creature) +bool WaypointMovementGenerator::StartMove(Creature* creature) { if (!i_path || i_path->empty()) return false; @@ -99,8 +99,8 @@ bool WaypointMovementGenerator::StartMove(Creature &creature) { if ((i_currentNode == i_path->size() - 1) && !repeating) // If that's our last waypoint { - creature.SetHomePosition(i_path->at(i_currentNode)->x, i_path->at(i_currentNode)->y, i_path->at(i_currentNode)->z, creature.GetOrientation()); - creature.GetMotionMaster()->Initialize(); + creature->SetHomePosition(i_path->at(i_currentNode)->x, i_path->at(i_currentNode)->y, i_path->at(i_currentNode)->z, creature->GetOrientation()); + creature->GetMotionMaster()->Initialize(); return false; } @@ -111,7 +111,7 @@ bool WaypointMovementGenerator::StartMove(Creature &creature) m_isArrivalDone = false; - creature.AddUnitState(UNIT_STATE_ROAMING_MOVE); + creature->AddUnitState(UNIT_STATE_ROAMING_MOVE); Movement::MoveSplineInit init(creature); init.MoveTo(node->x, node->y, node->z); @@ -124,19 +124,19 @@ bool WaypointMovementGenerator::StartMove(Creature &creature) init.Launch(); //Call for creature group update - if (creature.GetFormation() && creature.GetFormation()->getLeader() == &creature) - creature.GetFormation()->LeaderMoveTo(node->x, node->y, node->z); + if (creature->GetFormation() && creature->GetFormation()->getLeader() == creature) + creature->GetFormation()->LeaderMoveTo(node->x, node->y, node->z); return true; } -bool WaypointMovementGenerator::Update(Creature &creature, const uint32 &diff) +bool WaypointMovementGenerator::Update(Creature* creature, const uint32& diff) { // Waypoint movement can be switched on/off // This is quite handy for escort quests and other stuff - if (creature.HasUnitState(UNIT_STATE_NOT_MOVE)) + if (creature->HasUnitState(UNIT_STATE_NOT_MOVE)) { - creature.ClearUnitState(UNIT_STATE_ROAMING_MOVE); + creature->ClearUnitState(UNIT_STATE_ROAMING_MOVE); return true; } // prevent a crash at empty waypoint path. @@ -150,9 +150,9 @@ bool WaypointMovementGenerator::Update(Creature &creature, const uint3 } else { - if (creature.IsStopped()) + if (creature->IsStopped()) Stop(STOP_TIME_FOR_PLAYER); - else if (creature.movespline->Finalized()) + else if (creature->movespline->Finalized()) { OnArrived(creature); return StartMove(creature); @@ -161,13 +161,13 @@ bool WaypointMovementGenerator::Update(Creature &creature, const uint3 return true; } -void WaypointMovementGenerator::MovementInform(Creature &creature) +void WaypointMovementGenerator::MovementInform(Creature* creature) { - if (creature.AI()) - creature.AI()->MovementInform(WAYPOINT_MOTION_TYPE, i_currentNode); + if (creature->AI()) + creature->AI()->MovementInform(WAYPOINT_MOTION_TYPE, i_currentNode); } -bool WaypointMovementGenerator::GetResetPosition(Creature&, float& x, float& y, float& z) +bool WaypointMovementGenerator::GetResetPosition(Creature*, float& x, float& y, float& z) { // prevent a crash at empty waypoint path. if (!i_path || i_path->empty()) @@ -196,37 +196,37 @@ uint32 FlightPathMovementGenerator::GetPathAtMapEnd() const return i_path->size(); } -void FlightPathMovementGenerator::Initialize(Player &player) +void FlightPathMovementGenerator::Initialize(Player* player) { Reset(player); InitEndGridInfo(); } -void FlightPathMovementGenerator::Finalize(Player& player) +void FlightPathMovementGenerator::Finalize(Player* player) { // remove flag to prevent send object build movement packets for flight state and crash (movement generator already not at top of stack) - player.ClearUnitState(UNIT_STATE_IN_FLIGHT); + player->ClearUnitState(UNIT_STATE_IN_FLIGHT); - player.Dismount(); - player.RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_TAXI_FLIGHT); + player->Dismount(); + player->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_TAXI_FLIGHT); - if (player.m_taxi.empty()) + if (player->m_taxi.empty()) { - player.getHostileRefManager().setOnlineOfflineState(true); + player->getHostileRefManager().setOnlineOfflineState(true); // update z position to ground and orientation for landing point // this prevent cheating with landing point at lags // when client side flight end early in comparison server side - player.StopMoving(); + player->StopMoving(); } } #define PLAYER_FLIGHT_SPEED 32.0f -void FlightPathMovementGenerator::Reset(Player & player) +void FlightPathMovementGenerator::Reset(Player* player) { - player.getHostileRefManager().setOnlineOfflineState(false); - player.AddUnitState(UNIT_STATE_IN_FLIGHT); - player.SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_TAXI_FLIGHT); + player->getHostileRefManager().setOnlineOfflineState(false); + player->AddUnitState(UNIT_STATE_IN_FLIGHT); + player->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_TAXI_FLIGHT); Movement::MoveSplineInit init(player); uint32 end = GetPathAtMapEnd(); @@ -241,9 +241,9 @@ void FlightPathMovementGenerator::Reset(Player & player) init.Launch(); } -bool FlightPathMovementGenerator::Update(Player &player, const uint32& /*diff*/) +bool FlightPathMovementGenerator::Update(Player* player, const uint32& /*diff*/) { - uint32 pointId = (uint32)player.movespline->currentPathIdx(); + uint32 pointId = (uint32)player->movespline->currentPathIdx(); if (pointId > i_currentNode) { bool departureEvent = true; @@ -279,16 +279,16 @@ void FlightPathMovementGenerator::SetCurrentNodeAfterTeleport() } } -void FlightPathMovementGenerator::DoEventIfAny(Player& player, TaxiPathNodeEntry const& node, bool departure) +void FlightPathMovementGenerator::DoEventIfAny(Player* player, TaxiPathNodeEntry const& node, bool departure) { if (uint32 eventid = departure ? node.departureEventID : node.arrivalEventID) { - sLog->outDebug(LOG_FILTER_MAPSCRIPTS, "Taxi %s event %u of node %u of path %u for player %s", departure ? "departure" : "arrival", eventid, node.index, node.path, player.GetName()); - player.GetMap()->ScriptsStart(sEventScripts, eventid, &player, &player); + sLog->outDebug(LOG_FILTER_MAPSCRIPTS, "Taxi %s event %u of node %u of path %u for player %s", departure ? "departure" : "arrival", eventid, node.index, node.path, player->GetName()); + player->GetMap()->ScriptsStart(sEventScripts, eventid, player, player); } } -bool FlightPathMovementGenerator::GetResetPosition(Player&, float& x, float& y, float& z) +bool FlightPathMovementGenerator::GetResetPosition(Player*, float& x, float& y, float& z) { const TaxiPathNodeEntry& node = (*i_path)[i_currentNode]; x = node.x; y = node.y; z = node.z; diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h index 0d8f047c83a..5230fe3b0e3 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h @@ -65,19 +65,19 @@ class WaypointMovementGenerator : public MovementGeneratorMedium< Crea WaypointMovementGenerator(uint32 _path_id = 0, bool _repeating = true) : i_nextMoveTime(0), m_isArrivalDone(false), path_id(_path_id), repeating(_repeating) {} ~WaypointMovementGenerator() { i_path = NULL; } - void Initialize(Creature &); - void Finalize(Creature &); - void Reset(Creature &); - bool Update(Creature &, const uint32 &diff); + void Initialize(Creature*); + void Finalize(Creature*); + void Reset(Creature*); + bool Update(Creature*, const uint32 &diff); - void MovementInform(Creature &); + void MovementInform(Creature*); MovementGeneratorType GetMovementGeneratorType() { return WAYPOINT_MOTION_TYPE; } // now path movement implmementation - void LoadPath(Creature &c); + void LoadPath(Creature*); - bool GetResetPosition(Creature&, float& x, float& y, float& z); + bool GetResetPosition(Creature*, float& x, float& y, float& z); private: @@ -91,10 +91,10 @@ class WaypointMovementGenerator : public MovementGeneratorMedium< Crea return i_nextMoveTime.Passed(); } - void OnArrived(Creature&); - bool StartMove(Creature&); + void OnArrived(Creature*); + bool StartMove(Creature*); - void StartMoveNow(Creature& creature) + void StartMoveNow(Creature* creature) { i_nextMoveTime.Reset(0); StartMove(creature); @@ -118,10 +118,10 @@ class FlightPathMovementGenerator : public MovementGeneratorMedium< Player, Flig i_path = &pathnodes; i_currentNode = startNode; } - void Initialize(Player &); - void Reset(Player &); - void Finalize(Player &); - bool Update(Player &, const uint32&); + void Initialize(Player*); + void Reset(Player*); + void Finalize(Player*); + bool Update(Player*, const uint32&); MovementGeneratorType GetMovementGeneratorType() { return FLIGHT_MOTION_TYPE; } TaxiPathNodeList const& GetPath() { return *i_path; } @@ -129,9 +129,9 @@ class FlightPathMovementGenerator : public MovementGeneratorMedium< Player, Flig bool HasArrived() const { return (i_currentNode >= i_path->size()); } void SetCurrentNodeAfterTeleport(); void SkipCurrentNode() { ++i_currentNode; } - void DoEventIfAny(Player& player, TaxiPathNodeEntry const& node, bool departure); + void DoEventIfAny(Player* player, TaxiPathNodeEntry const& node, bool departure); - bool GetResetPosition(Player&, float& x, float& y, float& z); + bool GetResetPosition(Player*, float& x, float& y, float& z); void InitEndGridInfo(); void PreloadEndGrid(); diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index c5e314a8636..8167ff36de2 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -58,18 +58,18 @@ namespace Movement int32 MoveSplineInit::Launch() { - MoveSpline& move_spline = *unit.movespline; + MoveSpline& move_spline = *unit->movespline; bool transport = false; - Location real_position(unit.GetPositionX(), unit.GetPositionY(), unit.GetPositionZMinusOffset(), unit.GetOrientation()); + Location real_position(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZMinusOffset(), unit->GetOrientation()); // Elevators also use MOVEMENTFLAG_ONTRANSPORT but we do not keep track of their position changes - if (unit.HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT) && unit.GetTransGUID()) + if (unit->HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT) && unit->GetTransGUID()) { transport = true; - real_position.x = unit.GetTransOffsetX(); - real_position.y = unit.GetTransOffsetY(); - real_position.z = unit.GetTransOffsetZ(); - real_position.orientation = unit.GetTransOffsetO(); + real_position.x = unit->GetTransOffsetX(); + real_position.y = unit->GetTransOffsetY(); + real_position.z = unit->GetTransOffsetZ(); + real_position.orientation = unit->GetTransOffsetO(); } // there is a big chance that current position is unknown if current state is not finalized, need compute it @@ -85,7 +85,7 @@ namespace Movement args.path[0] = real_position; args.initialOrientation = real_position.orientation; - uint32 moveFlags = unit.m_movementInfo.GetMovementFlags(); + uint32 moveFlags = unit->m_movementInfo.GetMovementFlags(); if (args.flags.walkmode) moveFlags |= MOVEMENTFLAG_WALKING; else @@ -94,7 +94,7 @@ namespace Movement moveFlags |= (MOVEMENTFLAG_SPLINE_ENABLED|MOVEMENTFLAG_FORWARD); if (!args.HasVelocity) - args.velocity = unit.GetSpeed(SelectSpeedType(moveFlags)); + args.velocity = unit->GetSpeed(SelectSpeedType(moveFlags)); if (!args.Validate()) return 0; @@ -102,33 +102,33 @@ namespace Movement if (moveFlags & MOVEMENTFLAG_ROOT) moveFlags &= ~MOVEMENTFLAG_MASK_MOVING; - unit.m_movementInfo.SetMovementFlags((MovementFlags)moveFlags); + unit->m_movementInfo.SetMovementFlags((MovementFlags)moveFlags); move_spline.Initialize(args); WorldPacket data(!transport ? SMSG_MONSTER_MOVE : SMSG_MONSTER_MOVE_TRANSPORT, 64); - data.append(unit.GetPackGUID()); + data.append(unit->GetPackGUID()); if (transport) { - data.appendPackGUID(unit.GetTransGUID()); - data << int8(unit.GetTransSeat()); + data.appendPackGUID(unit->GetTransGUID()); + data << int8(unit->GetTransSeat()); } PacketBuilder::WriteMonsterMove(move_spline, data); - unit.SendMessageToSet(&data,true); + unit->SendMessageToSet(&data,true); return move_spline.Duration(); } - MoveSplineInit::MoveSplineInit(Unit& m) : unit(m) + MoveSplineInit::MoveSplineInit(Unit* m) : unit(m) { // Elevators also use MOVEMENTFLAG_ONTRANSPORT but we do not keep track of their position changes - args.TransformForTransport = unit.HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT) && unit.GetTransGUID(); + args.TransformForTransport = unit->HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT) && unit->GetTransGUID(); // mix existing state into new - args.flags.walkmode = unit.m_movementInfo.HasMovementFlag(MOVEMENTFLAG_WALKING); - args.flags.flying = unit.m_movementInfo.HasMovementFlag((MovementFlags)(MOVEMENTFLAG_CAN_FLY|MOVEMENTFLAG_DISABLE_GRAVITY)); + args.flags.walkmode = unit->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_WALKING); + args.flags.flying = unit->m_movementInfo.HasMovementFlag((MovementFlags)(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_DISABLE_GRAVITY)); } - void MoveSplineInit::SetFacing(const Unit * target) + void MoveSplineInit::SetFacing(const Unit* target) { args.flags.EnableFacingTarget(); args.facing.target = target->GetGUID(); @@ -138,9 +138,9 @@ namespace Movement { if (args.TransformForTransport) { - if (Unit* vehicle = unit.GetVehicleBase()) + if (Unit* vehicle = unit->GetVehicleBase()) angle -= vehicle->GetOrientation(); - else if (Transport* transport = unit.GetTransport()) + else if (Transport* transport = unit->GetTransport()) angle -= transport->GetOrientation(); } @@ -152,7 +152,7 @@ namespace Movement { if (generatePath) { - PathGenerator path(&unit); + PathGenerator path(unit); path.CalculatePath(dest.x, dest.y, dest.z, forceDestination); MovebyPath(path.getPath()); } @@ -169,13 +169,13 @@ namespace Movement { if (_transformForTransport) { - if (Unit* vehicle = _owner.GetVehicleBase()) + if (Unit* vehicle = _owner->GetVehicleBase()) { input.x -= vehicle->GetPositionX(); input.y -= vehicle->GetPositionY(); input.z -= vehicle->GetPositionZMinusOffset(); } - else if (Transport* transport = _owner.GetTransport()) + else if (Transport* transport = _owner->GetTransport()) { float unused = 0.0f; transport->CalculatePassengerOffset(input.x, input.y, input.z, unused); diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h index 759fc73d7fd..53adec2e633 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.h +++ b/src/server/game/Movement/Spline/MoveSplineInit.h @@ -38,12 +38,12 @@ namespace Movement class TransportPathTransform { public: - TransportPathTransform(Unit& owner, bool transformForTransport) + TransportPathTransform(Unit* owner, bool transformForTransport) : _owner(owner), _transformForTransport(transformForTransport) { } Vector3 operator()(Vector3 input); private: - Unit& _owner; + Unit* _owner; bool _transformForTransport; }; @@ -53,7 +53,7 @@ namespace Movement { public: - explicit MoveSplineInit(Unit& m); + explicit MoveSplineInit(Unit* m); /* Final pass of initialization that launches spline movement. */ @@ -76,7 +76,7 @@ namespace Movement */ void SetFacing(float angle); void SetFacing(Vector3 const& point); - void SetFacing(const Unit * target); + void SetFacing(const Unit* target); /* Initializes movement by path * @param path - array of points, shouldn't be empty @@ -138,7 +138,7 @@ namespace Movement protected: MoveSplineInitArgs args; - Unit& unit; + Unit* unit; }; inline void MoveSplineInit::SetFly() { args.flags.EnableFlying(); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 7ee67060f97..c6b89d37878 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -342,7 +342,7 @@ class boss_algalon_the_observer : public CreatureScript DoCast(me, SPELL_RIDE_THE_LIGHTNING, true); me->GetMotionMaster()->MovePoint(POINT_ALGALON_LAND, AlgalonLandPos); me->SetHomePosition(AlgalonLandPos); - Movement::MoveSplineInit init(*me); + Movement::MoveSplineInit init(me); init.MoveTo(AlgalonLandPos.GetPositionX(), AlgalonLandPos.GetPositionY(), AlgalonLandPos.GetPositionZ()); init.SetOrientationFixed(true); init.Launch(); From a97cfbd2ebeaf8e39cef6802deb3139569505288 Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 26 Aug 2012 18:14:58 -0500 Subject: [PATCH 036/204] Core/MMaps: Fixed infinite wait in the generator --- src/tools/mmaps_generator/MapBuilder.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index b04300994f9..8cdbdf61909 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -194,12 +194,13 @@ namespace MMAP buildMap(mapID); } } - // Wait for all threads to finish before closing down - ACE_Thread_Manager::instance()->wait(); // Free memory for (std::vector::iterator _th = _threads.begin(); _th != _threads.end(); ++_th) + { + _th->wait(); delete *_th; + } } /**************************************************************************/ From 02bbd1154eb3e119fb095850e60e3dc11ee937b1 Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 27 Aug 2012 15:21:54 -0500 Subject: [PATCH 037/204] Core/Mmaps: Fixed build --- .../Movement/MovementGenerators/TargetedMovementGenerator.h | 2 +- src/tools/mmaps_generator/MapBuilder.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h index 688d236c3f8..0ca688fb0df 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h @@ -84,7 +84,7 @@ class ChaseMovementGenerator : public TargetedMovementGeneratorMediumClearUnitState(UNIT_STATE_CHASE_MOVE); } static void _addUnitStateMove(T* u) { u->AddUnitState(UNIT_STATE_CHASE_MOVE); } bool EnableWalking() const { return false;} - bool _lostTarget(T* u) const { return u->getVictim() != GetTarget(); } + bool _lostTarget(T* u) const { return u->getVictim() != this->GetTarget(); } void _reachTarget(T*); }; diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 8cdbdf61909..03a77c01d27 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -198,7 +198,7 @@ namespace MMAP // Free memory for (std::vector::iterator _th = _threads.begin(); _th != _threads.end(); ++_th) { - _th->wait(); + (*_th)->wait(); delete *_th; } } From 8f9dad3d7637a18a5e3cc96dfe32826c810f17b3 Mon Sep 17 00:00:00 2001 From: thesensei Date: Tue, 28 Aug 2012 20:58:03 +0300 Subject: [PATCH 038/204] Core/Spells: Destabilize Azure Dragonshrine *Spell script support for spell 49370 --- .../2012_08_28_00_world_spell_script_name.sql | 4 ++ src/server/scripts/Spells/spell_quest.cpp | 41 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 sql/updates/world/2012_08_28_00_world_spell_script_name.sql diff --git a/sql/updates/world/2012_08_28_00_world_spell_script_name.sql b/sql/updates/world/2012_08_28_00_world_spell_script_name.sql new file mode 100644 index 00000000000..9cc18a4fa5a --- /dev/null +++ b/sql/updates/world/2012_08_28_00_world_spell_script_name.sql @@ -0,0 +1,4 @@ +-- Spell script name linking for Defending Wyrmrest Temple: Destabilize Azure Dragonshrine Effect +DELETE FROM `spell_script_names` WHERE `spell_id`=49370 ; +INSERT INTO `spell_script_names` VALUES +(49370,'spell_q12372_destabilize_azure_dragonshrine_dummy'); \ No newline at end of file diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 8b67a52d300..759dbfe802d 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -1276,6 +1276,46 @@ class spell_q12372_cast_from_gossip_trigger : public SpellScriptLoader } }; +// http://www.wowhead.com/quest=12372 Defending Wyrmrest Temple +// 49370 - Wyrmrest Defender: Destabilize Azure Dragonshrine Effect +enum eQuest12372Data +{ + NPC_WYRMREST_TEMPLE_CREDIT = 27698, +}; + +class spell_q12372_destabilize_azure_dragonshrine_dummy : public SpellScriptLoader +{ + public: + spell_q12372_destabilize_azure_dragonshrine_dummy() : SpellScriptLoader("spell_q12372_destabilize_azure_dragonshrine_dummy") { } + + class spell_q12372_destabilize_azure_dragonshrine_dummy_SpellScript : public SpellScript + { + PrepareSpellScript(spell_q12372_destabilize_azure_dragonshrine_dummy_SpellScript); + + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (GetHitCreature()) + { + if (Unit* caster = GetOriginalCaster()) + if (Vehicle* vehicle = caster->GetVehicleKit()) + if (Unit* passenger = vehicle->GetPassenger(0)) + if (Player* player = passenger->ToPlayer()) + player->KilledMonsterCredit(NPC_WYRMREST_TEMPLE_CREDIT, 0); + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_q12372_destabilize_azure_dragonshrine_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_q12372_destabilize_azure_dragonshrine_dummy_SpellScript(); + } +}; + void AddSC_quest_spell_scripts() { new spell_q55_sacred_cleansing(); @@ -1306,4 +1346,5 @@ void AddSC_quest_spell_scripts() new spell_q12066_bunny_kill_credit(); new spell_q12735_song_of_cleansing(); new spell_q12372_cast_from_gossip_trigger(); + new spell_q12372_destabilize_azure_dragonshrine_dummy(); } From d6221fc4f7a08fe09e7c8bb9226b0168db358450 Mon Sep 17 00:00:00 2001 From: Nay Date: Tue, 28 Aug 2012 19:31:15 +0100 Subject: [PATCH 039/204] Scripts: Fix code style after PR --- .../2012_08_28_00_world_spell_script_name.sql | 2 +- src/server/scripts/Spells/spell_quest.cpp | 20 +++++++++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/sql/updates/world/2012_08_28_00_world_spell_script_name.sql b/sql/updates/world/2012_08_28_00_world_spell_script_name.sql index 9cc18a4fa5a..01cfeb35f1f 100644 --- a/sql/updates/world/2012_08_28_00_world_spell_script_name.sql +++ b/sql/updates/world/2012_08_28_00_world_spell_script_name.sql @@ -1,4 +1,4 @@ -- Spell script name linking for Defending Wyrmrest Temple: Destabilize Azure Dragonshrine Effect DELETE FROM `spell_script_names` WHERE `spell_id`=49370 ; INSERT INTO `spell_script_names` VALUES -(49370,'spell_q12372_destabilize_azure_dragonshrine_dummy'); \ No newline at end of file +(49370,'spell_q12372_destabilize_azure_dragonshrine_dummy'); diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 759dbfe802d..3cb2300cadf 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -1278,7 +1278,7 @@ class spell_q12372_cast_from_gossip_trigger : public SpellScriptLoader // http://www.wowhead.com/quest=12372 Defending Wyrmrest Temple // 49370 - Wyrmrest Defender: Destabilize Azure Dragonshrine Effect -enum eQuest12372Data +enum Quest12372Data { NPC_WYRMREST_TEMPLE_CREDIT = 27698, }; @@ -1294,16 +1294,14 @@ class spell_q12372_destabilize_azure_dragonshrine_dummy : public SpellScriptLoad void HandleDummy(SpellEffIndex /*effIndex*/) { - if (GetHitCreature()) - { - if (Unit* caster = GetOriginalCaster()) - if (Vehicle* vehicle = caster->GetVehicleKit()) - if (Unit* passenger = vehicle->GetPassenger(0)) - if (Player* player = passenger->ToPlayer()) - player->KilledMonsterCredit(NPC_WYRMREST_TEMPLE_CREDIT, 0); - } - } - + if (GetHitCreature()) + if (Unit* caster = GetOriginalCaster()) + if (Vehicle* vehicle = caster->GetVehicleKit()) + if (Unit* passenger = vehicle->GetPassenger(0)) + if (Player* player = passenger->ToPlayer()) + player->KilledMonsterCredit(NPC_WYRMREST_TEMPLE_CREDIT, 0); + } + void Register() { OnEffectHitTarget += SpellEffectFn(spell_q12372_destabilize_azure_dragonshrine_dummy_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); From 4225803587171b76ada439c5e27e3c410aa4fe02 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Tue, 28 Aug 2012 21:13:37 +0200 Subject: [PATCH 040/204] DB/Achievements: Fix achievements 'Koralon the Flame Watcher' / 'Toravon the Ice Watcher' --- .../world/2012_08_28_01_world_achievement_criteria_data.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sql/updates/world/2012_08_28_01_world_achievement_criteria_data.sql diff --git a/sql/updates/world/2012_08_28_01_world_achievement_criteria_data.sql b/sql/updates/world/2012_08_28_01_world_achievement_criteria_data.sql new file mode 100644 index 00000000000..bf247399553 --- /dev/null +++ b/sql/updates/world/2012_08_28_01_world_achievement_criteria_data.sql @@ -0,0 +1,6 @@ +DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (11478,11479,12827,12828); +INSERT INTO `achievement_criteria_data` (`criteria_id`, `type`, `value1`, `value2`, `ScriptName`) VALUES +(11478, 12, 0, 0, ''), -- Koralon the Flame Watcher (10 player) +(11479, 12, 1, 0, ''), -- Koralon the Flame Watcher (25 player) +(12827, 12, 0, 0, ''), -- Toravon the Ice Watcher (10 player) +(12828, 12, 1, 0, ''); -- Toravon the Ice Watcher (25 player) From fa590d006e9026e95cd666223eee68fae8a33a68 Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 28 Aug 2012 20:09:04 -0500 Subject: [PATCH 041/204] Core/MMaps: Made some cosmetic improvements to the mmaps generator --- src/tools/mmaps_generator/MapBuilder.cpp | 5 ++--- src/tools/mmaps_generator/PathGenerator.cpp | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 03a77c01d27..2a74233a1a7 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -179,7 +179,6 @@ namespace MMAP { if ((*_th)->Free) { - printf("Thread is free for map %03i\n", mapID); (*_th)->SetMapId(mapID); (*_th)->activate(); next = true; @@ -335,7 +334,7 @@ namespace MMAP buildNavMesh(mapID, navMesh); if (!navMesh) { - printf("Failed creating navmesh! \n"); + printf("[Map %i] Failed creating navmesh!\n", mapID); return; } @@ -363,7 +362,7 @@ namespace MMAP /**************************************************************************/ void MapBuilder::buildTile(uint32 mapID, uint32 tileX, uint32 tileY, dtNavMesh* navMesh) { - printf("Building map %03u, tile [%02u,%02u]\n", mapID, tileX, tileY); + printf("[Map %i] Building tile [%02u,%02u]\n", mapID, tileX, tileY); MeshData meshData; diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp index 4da90fd153a..026bf957ec4 100644 --- a/src/tools/mmaps_generator/PathGenerator.cpp +++ b/src/tools/mmaps_generator/PathGenerator.cpp @@ -292,6 +292,6 @@ int main(int argc, char** argv) builder.buildAllMaps(threads); if (!silent) - printf("Finished. MMAPS were built in %u ms!", GetMSTimeDiffToNow(start)); + printf("Finished. MMAPS were built in %u ms!\n", GetMSTimeDiffToNow(start)); return 1; } From 52389e8ef00646ce623e8d2eef39c12cd7d2faec Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 28 Aug 2012 20:22:50 -0500 Subject: [PATCH 042/204] CMake/BuildSystem: Add ACE to the VS solution also when only building tools (its needed by the mmaps_generator) --- dep/CMakeLists.txt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/dep/CMakeLists.txt b/dep/CMakeLists.txt index 48a2fd56ec0..c01a1e3426a 100644 --- a/dep/CMakeLists.txt +++ b/dep/CMakeLists.txt @@ -21,11 +21,9 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux") endif() if(CMAKE_SYSTEM_NAME MATCHES "Windows") - if(SERVERS) - add_subdirectory(acelite) - if(USE_MYSQL_SOURCES) + add_subdirectory(acelite) + if(SERVERS AND USE_MYSQL_SOURCES) add_subdirectory(mysqllite) - endif() endif() if(TOOLS) add_subdirectory(bzip2) From 58d250ce83245dfebf089dc7e8d8f2aa05a7a2ed Mon Sep 17 00:00:00 2001 From: kaelima Date: Fri, 31 Aug 2012 11:58:45 +0200 Subject: [PATCH 043/204] Core/Mmaps: Use mmaps if enabled when re-generating point-movement path after speed changes. (often used by pets) --- .../game/Movement/MovementGenerators/PointMovementGenerator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp index c8a7c8f8f8d..20f1c3a29e9 100755 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp @@ -59,7 +59,7 @@ bool PointMovementGenerator::Update(T* unit, const uint32& /*diff*/) { i_recalculateSpeed = false; Movement::MoveSplineInit init(unit); - init.MoveTo(i_x, i_y, i_z); + init.MoveTo(i_x, i_y, i_z, m_generatePath); if (speed > 0.0f) // Default value for point motion type is 0.0, if 0.0 spline will use GetSpeed on unit init.SetVelocity(speed); init.Launch(); From a5d977c90eaf48f0961bc7dfdee12c603963abf5 Mon Sep 17 00:00:00 2001 From: kaelima Date: Fri, 31 Aug 2012 12:06:12 +0200 Subject: [PATCH 044/204] Core/Config: Disable petlos by default --- src/server/worldserver/worldserver.conf.dist | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 1a237eac08a..e5b8f21da8e 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -305,10 +305,10 @@ vmap.ignoreSpellIds = "7720" # # vmap.petLOS # Description: Check line of sight for pets, to avoid them attacking through walls. -# Default: 1 - (Enabled, each pet attack will be checked for line of sight) +# Default: 1 - (Enabled, each pet attack will be checked for line of sight - not recommended if mmaps is enabled!) # 0 - (Disabled, somewhat less CPU usage) -vmap.petLOS = 1 +vmap.petLOS = 0 # # vmap.enableIndoorCheck From db7b750e0c33bf75ef6943a9da149cfbb8f6f2d1 Mon Sep 17 00:00:00 2001 From: Myran2 Date: Fri, 31 Aug 2012 01:26:21 +0100 Subject: [PATCH 045/204] Scripts/Commands: Create a new group of commands, .cheat, and add new and move old commands to it: Changes: - .explorecheat is now .cheat explore - .waterwalk is now .cheat waterwalk - .taxicheat is now .cheat taxi New commands: - .cheat god - .cheat casttime - .cheat cooldown - .cheat power (Descriptions available in the SQL file / in-game) Inspiration on ArcEmu commands Closes #7569 --- .../world/2012_8_29_00_world_command.sql | 14 + src/server/game/Entities/Player/Player.cpp | 2 + src/server/game/Entities/Player/Player.h | 17 ++ src/server/game/Scripting/ScriptLoader.cpp | 2 + src/server/game/Spells/Spell.cpp | 23 ++ src/server/scripts/Commands/CMakeLists.txt | 1 + src/server/scripts/Commands/cs_cheat.cpp | 281 ++++++++++++++++++ src/server/scripts/Commands/cs_misc.cpp | 118 -------- 8 files changed, 340 insertions(+), 118 deletions(-) create mode 100644 sql/updates/world/2012_8_29_00_world_command.sql create mode 100644 src/server/scripts/Commands/cs_cheat.cpp diff --git a/sql/updates/world/2012_8_29_00_world_command.sql b/sql/updates/world/2012_8_29_00_world_command.sql new file mode 100644 index 00000000000..c0686d6d907 --- /dev/null +++ b/sql/updates/world/2012_8_29_00_world_command.sql @@ -0,0 +1,14 @@ +DELETE FROM `command` WHERE `name`='explorecheat'; +DELETE FROM `command` WHERE `name`='taxicheat'; +DELETE FROM `command` WHERE `name`='waterwalk'; + +DELETE FROM `command` WHERE `name`='cheat' OR `name` LIKE 'cheat%'; +INSERT INTO `command` (`name`, `security`, `help`) VALUES +('cheat', 2, 'Syntax: .cheat $subcommand\r\nType .cheat to see the list of possible subcommands or .help cheat $subcommand to see info on subcommands'), +('cheat god', 2, 'Syntax: .cheat god [on/off]\r\nEnables or disables your character''s ability to take damage.'), +('cheat casttime', 2, 'Syntax: .cheat casttime [on/off]\r\nEnables or disables your character''s spell cast times.'), +('cheat cooldown', 2, 'Syntax: .cheat cooldown [on/off]\r\nEnables or disables your character''s spell cooldowns.'), +('cheat power', 2, 'Syntax: .cheat power [on/off]\r\nEnables or disables your character''s spell cost (e.g mana).'), +('cheat waterwalk', 2, 'Syntax: .cheat waterwalk on/off\r\nSet on/off waterwalk state for selected player or self if no player selected.'), +('cheat explore', 2, 'Syntax: .cheat explore #flag\r\nReveal or hide all maps for the selected player. If no player is selected, hide or reveal maps to you.\r\nUse a #flag of value 1 to reveal, use a #flag value of 0 to hide all maps.'), +('cheat taxi', 2, 'Syntax: .cheat taxi on/off\r\nTemporary grant access or remove to all taxi routes for the selected character.\r\n If no character is selected, hide or reveal all routes to you.Visited taxi nodes sill accessible after removing access.'); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 936788f484e..65f6588f80e 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -861,6 +861,8 @@ Player::Player(WorldSession* session): Unit(true), m_achievementMgr(this), m_rep m_SeasonalQuestChanged = false; SetPendingBind(0, 0); + + _activeCheats = CHEAT_NONE; } Player::~Player() diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 1758b915ebf..71915f42784 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -896,6 +896,16 @@ enum PlayerRestState REST_STATE_RAF_LINKED = 0x06 }; +enum PlayerCommandStates +{ + CHEAT_NONE = 0x00, + CHEAT_GOD = 0x01, + CHEAT_CASTTIME = 0x02, + CHEAT_COOLDOWN = 0x04, + CHEAT_POWER = 0x08, + CHEAT_WATERWALK = 0x10 +}; + class PlayerTaxi { public: @@ -1148,6 +1158,11 @@ class Player : public Unit, public GridObject void InitStatsForLevel(bool reapplyMods = false); + // .cheat command related + bool GetCommandStatus(uint32 command) const { return _activeCheats & command; } + void SetCommandStatusOn(uint32 command) { _activeCheats |= command; } + void SetCommandStatusOff(uint32 command) { _activeCheats &= ~command; } + // Played Time Stuff time_t m_logintime; time_t m_Last_tick; @@ -2854,6 +2869,8 @@ class Player : public Unit, public GridObject InstanceTimeMap _instanceResetTimes; uint32 _pendingBindId; uint32 _pendingBindTimer; + + uint32 _activeCheats; }; void AddItemsSetItem(Player*player, Item* item); diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 9d983542fea..1848250ec8e 100755 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -50,6 +50,7 @@ void AddSC_ban_commandscript(); void AddSC_bf_commandscript(); void AddSC_cast_commandscript(); void AddSC_character_commandscript(); +void AddSC_cheat_commandscript(); void AddSC_debug_commandscript(); void AddSC_disable_commandscript(); void AddSC_event_commandscript(); @@ -666,6 +667,7 @@ void AddCommandScripts() AddSC_bf_commandscript(); AddSC_cast_commandscript(); AddSC_character_commandscript(); + AddSC_cheat_commandscript(); AddSC_debug_commandscript(); AddSC_disable_commandscript(); AddSC_event_commandscript(); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 19741ea7854..95345ed8b93 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -3023,7 +3023,13 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered // calculate cast time (calculated after first CheckCast check to prevent charge counting for first CheckCast fail) m_casttime = m_spellInfo->CalcCastTime(m_caster, this); if (m_caster->GetTypeId() == TYPEID_PLAYER) + { m_caster->ToPlayer()->SetSpellModTakingSpell(this, false); + + // Set casttime to 0 if .cheat casttime is enabled. + if (m_caster->ToPlayer()->GetCommandStatus(CHEAT_CASTTIME)) + m_casttime = 0; + } // don't allow channeled spells / spells with cast time to be casted while moving // (even if they are interrupted on moving, spells with almost immediate effect get to have their effect processed before movement interrupter kicks in) @@ -3315,7 +3321,13 @@ void Spell::cast(bool skipCheck) } if (m_caster->GetTypeId() == TYPEID_PLAYER) + { m_caster->ToPlayer()->SetSpellModTakingSpell(this, false); + + //Clear spell cooldowns after every spell is cast if .cheat cooldown is enabled. + if (m_caster->ToPlayer()->GetCommandStatus(CHEAT_COOLDOWN)) + m_caster->ToPlayer()->RemoveSpellCooldown(m_spellInfo->Id, true); + } SetExecutedCurrently(false); } @@ -4358,6 +4370,13 @@ void Spell::TakePower() if (m_CastItem || m_triggeredByAuraSpell) return; + //Don't take power if the spell is cast while .cheat power is enabled. + if (m_caster->GetTypeId() == TYPEID_PLAYER) + { + if (m_caster->ToPlayer()->GetCommandStatus(CHEAT_POWER)) + return; + } + Powers powerType = Powers(m_spellInfo->PowerType); bool hit = true; if (m_caster->GetTypeId() == TYPEID_PLAYER) @@ -7193,6 +7212,10 @@ void Spell::TriggerGlobalCooldown() if (!gcd) return; + if (m_caster->GetTypeId() == TYPEID_PLAYER) + if (m_caster->ToPlayer()->GetCommandStatus(CHEAT_COOLDOWN)) + return; + // Global cooldown can't leave range 1..1.5 secs // There are some spells (mostly not casted directly by player) that have < 1 sec and > 1.5 sec global cooldowns // but as tests show are not affected by any spell mods. diff --git a/src/server/scripts/Commands/CMakeLists.txt b/src/server/scripts/Commands/CMakeLists.txt index d5ebeab3b8a..177b3a479f5 100644 --- a/src/server/scripts/Commands/CMakeLists.txt +++ b/src/server/scripts/Commands/CMakeLists.txt @@ -16,6 +16,7 @@ set(scripts_STAT_SRCS Commands/cs_bf.cpp Commands/cs_cast.cpp Commands/cs_character.cpp + Commands/cs_cheat.cpp Commands/cs_debug.cpp Commands/cs_disable.cpp Commands/cs_event.cpp diff --git a/src/server/scripts/Commands/cs_cheat.cpp b/src/server/scripts/Commands/cs_cheat.cpp new file mode 100644 index 00000000000..ade1b9fae02 --- /dev/null +++ b/src/server/scripts/Commands/cs_cheat.cpp @@ -0,0 +1,281 @@ +/* + * Copyright (C) 2008-2012 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +/* ScriptData +Name: cheat_commandscript +%Complete: 100 +Comment: All cheat related commands +Category: commandscripts +EndScriptData */ + +#include "ScriptMgr.h" +#include "ObjectMgr.h" +#include "Chat.h" + +class cheat_commandscript : public CommandScript +{ +public: + cheat_commandscript() : CommandScript("cheat_commandscript") { } + + ChatCommand* GetCommands() const + { + + static ChatCommand cheatCommandTable[] = + { + { "god", SEC_GAMEMASTER, false, &HandleGodModeCheatCommand, "", NULL }, + { "casttime", SEC_GAMEMASTER, false, &HandleCasttimeCheatCommand, "", NULL }, + { "cooldown", SEC_GAMEMASTER, false, &HandleCoolDownCheatCommand, "", NULL }, + { "power", SEC_GAMEMASTER, false, &HandlePowerCheatCommand, "", NULL }, + { "waterwalk", SEC_GAMEMASTER, false, &HandleWaterWalkCheatCommand, "", NULL }, + { "taxi", SEC_GAMEMASTER, false, &HandleTaxiCheatCommand, "", NULL }, + { "explore", SEC_GAMEMASTER, false, &HandleExploreCheatCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } + + }; + + static ChatCommand commandTable[] = + { + { "cheat", SEC_GAMEMASTER, false, NULL, "", cheatCommandTable }, + { NULL, 0, false, NULL, "", NULL } + }; + return commandTable; + } + + static bool HandleGodModeCheatCommand(ChatHandler* handler, const char* args) + { + if (!handler->GetSession() && !handler->GetSession()->GetPlayer()) + return false; + + std::string argstr = (char*)args; + + if (!*args) + argstr = (handler->GetSession()->GetPlayer()->GetCommandStatus(CHEAT_GOD)) ? "off" : "on"; + + if (argstr == "off") + { + handler->GetSession()->GetPlayer()->SetCommandStatusOff(CHEAT_GOD); + handler->SendSysMessage("Godmode is OFF. You can take damage."); + return true; + } + else if (argstr == "on") + { + handler->GetSession()->GetPlayer()->SetCommandStatusOn(CHEAT_GOD); + handler->SendSysMessage("Godmode is ON. You won't take damage."); + return true; + } + + return false; + } + + static bool HandleCasttimeCheatCommand(ChatHandler* handler, const char* args) + { + if (!handler->GetSession() && !handler->GetSession()->GetPlayer()) + return false; + + std::string argstr = (char*)args; + + if (!*args) + argstr = (handler->GetSession()->GetPlayer()->GetCommandStatus(CHEAT_CASTTIME)) ? "off" : "on"; + + if (argstr == "off") + { + handler->GetSession()->GetPlayer()->SetCommandStatusOff(CHEAT_CASTTIME); + handler->SendSysMessage("CastTime Cheat is OFF. Your spells will have a casttime."); + return true; + } + else if (argstr == "on") + { + handler->GetSession()->GetPlayer()->SetCommandStatusOn(CHEAT_CASTTIME); + handler->SendSysMessage("CastTime Cheat is ON. Your spells won't have a casttime."); + return true; + } + + return false; + } + + static bool HandleCoolDownCheatCommand(ChatHandler* handler, const char* args) + { + if (!handler->GetSession() && !handler->GetSession()->GetPlayer()) + return false; + + std::string argstr = (char*)args; + + if (!*args) + argstr = (handler->GetSession()->GetPlayer()->GetCommandStatus(CHEAT_COOLDOWN)) ? "off" : "on"; + + if (argstr == "off") + { + handler->GetSession()->GetPlayer()->SetCommandStatusOff(CHEAT_COOLDOWN); + handler->SendSysMessage("Cooldown Cheat is OFF. You are on the global cooldown."); + return true; + } + else if (argstr == "on") + { + handler->GetSession()->GetPlayer()->SetCommandStatusOn(CHEAT_COOLDOWN); + handler->SendSysMessage("Cooldown Cheat is ON. You are not on the global cooldown."); + return true; + } + + return false; + } + + static bool HandlePowerCheatCommand(ChatHandler* handler, const char* args) + { + if (!handler->GetSession() && !handler->GetSession()->GetPlayer()) + return false; + + std::string argstr = (char*)args; + + if (!*args) + argstr = (handler->GetSession()->GetPlayer()->GetCommandStatus(CHEAT_POWER)) ? "off" : "on"; + + if (argstr == "off") + { + handler->GetSession()->GetPlayer()->SetCommandStatusOff(CHEAT_POWER); + handler->SendSysMessage("Power Cheat is OFF. You need mana/rage/energy to use spells."); + return true; + } + else if (argstr == "on") + { + handler->GetSession()->GetPlayer()->SetCommandStatusOn(CHEAT_POWER); + handler->SendSysMessage("Power Cheat is ON. You don't need mana/rage/energy to use spells."); + return true; + } + + return false; + } + + static bool HandleWaterWalkCheatCommand(ChatHandler* handler, const char* args) + { + if (!handler->GetSession() && !handler->GetSession()->GetPlayer()) + return false; + + std::string argstr = (char*)args; + + if (!*args) + { + argstr = (handler->GetSession()->GetPlayer()->GetCommandStatus(CHEAT_WATERWALK)) ? "off" : "on"; + if (handler->GetSession()->GetPlayer()->GetCommandStatus(CHEAT_WATERWALK)) + argstr = "off"; + else + argstr = "on"; + } + + if (argstr == "off") + { + handler->GetSession()->GetPlayer()->SetCommandStatusOff(CHEAT_WATERWALK); + handler->GetSession()->GetPlayer()->SetMovement(MOVE_LAND_WALK); // OFF + handler->SendSysMessage("Waterwalking is OFF. You can't walk on water."); + return true; + } + else if (argstr == "on") + { + handler->GetSession()->GetPlayer()->SetCommandStatusOn(CHEAT_WATERWALK); + handler->GetSession()->GetPlayer()->SetMovement(MOVE_WATER_WALK); // ON + handler->SendSysMessage("Waterwalking is ON. You can walk on water."); + return true; + } + + return false; + } + + static bool HandleTaxiCheatCommand(ChatHandler* handler, const char* args) + { + if (!*args) + { + handler->SendSysMessage(LANG_USE_BOL); + handler->SetSentErrorMessage(true); + return false; + } + + std::string argstr = (char*)args; + + Player* chr = handler->getSelectedPlayer(); + + if (!chr) + chr = handler->GetSession()->GetPlayer(); + else if (handler->HasLowerSecurity(chr, 0)) // check online security + return false; + + if (argstr == "on") + { + chr->SetTaxiCheater(true); + handler->PSendSysMessage(LANG_YOU_GIVE_TAXIS, handler->GetNameLink(chr).c_str()); + if (handler->needReportToTarget(chr)) + ChatHandler(chr).PSendSysMessage(LANG_YOURS_TAXIS_ADDED, handler->GetNameLink().c_str()); + return true; + } + + if (argstr == "off") + { + chr->SetTaxiCheater(false); + handler->PSendSysMessage(LANG_YOU_REMOVE_TAXIS, handler->GetNameLink(chr).c_str()); + if (handler->needReportToTarget(chr)) + ChatHandler(chr).PSendSysMessage(LANG_YOURS_TAXIS_REMOVED, handler->GetNameLink().c_str()); + + return true; + } + + handler->SendSysMessage(LANG_USE_BOL); + handler->SetSentErrorMessage(true); + return false; + } + + static bool HandleExploreCheatCommand(ChatHandler* handler, const char *args) + { + if (!*args) + return false; + + int flag = atoi((char*)args); + + Player* chr = handler->getSelectedPlayer(); + if (chr == NULL) + { + handler->SendSysMessage(LANG_NO_CHAR_SELECTED); + handler->SetSentErrorMessage(true); + return false; + } + + if (flag != 0) + { + handler->PSendSysMessage(LANG_YOU_SET_EXPLORE_ALL, handler->GetNameLink(chr).c_str()); + if (handler->needReportToTarget(chr)) + ChatHandler(chr).PSendSysMessage(LANG_YOURS_EXPLORE_SET_ALL, handler->GetNameLink().c_str()); + } + else + { + handler->PSendSysMessage(LANG_YOU_SET_EXPLORE_NOTHING, handler->GetNameLink(chr).c_str()); + if (handler->needReportToTarget(chr)) + ChatHandler(chr).PSendSysMessage(LANG_YOURS_EXPLORE_SET_NOTHING, handler->GetNameLink().c_str()); + } + + for (uint8 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i) + { + if (flag != 0) + handler->GetSession()->GetPlayer()->SetFlag(PLAYER_EXPLORED_ZONES_1+i, 0xFFFFFFFF); + else + handler->GetSession()->GetPlayer()->SetFlag(PLAYER_EXPLORED_ZONES_1+i, 0); + } + + return true; + } +}; + +void AddSC_cheat_commandscript() +{ + new cheat_commandscript(); +} diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 1edaaf5bcbf..fa4b0ce3957 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -82,10 +82,8 @@ public: { "saveall", SEC_MODERATOR, true, &HandleSaveAllCommand, "", NULL }, { "kick", SEC_GAMEMASTER, true, &HandleKickPlayerCommand, "", NULL }, { "start", SEC_PLAYER, false, &HandleStartCommand, "", NULL }, - { "taxicheat", SEC_MODERATOR, false, &HandleTaxiCheatCommand, "", NULL }, { "linkgrave", SEC_ADMINISTRATOR, false, &HandleLinkGraveCommand, "", NULL }, { "neargrave", SEC_ADMINISTRATOR, false, &HandleNearGraveCommand, "", NULL }, - { "explorecheat", SEC_ADMINISTRATOR, false, &HandleExploreCheatCommand, "", NULL }, { "showarea", SEC_ADMINISTRATOR, false, &HandleShowAreaCommand, "", NULL }, { "hidearea", SEC_ADMINISTRATOR, false, &HandleHideAreaCommand, "", NULL }, { "additem", SEC_ADMINISTRATOR, false, &HandleAddItemCommand, "", NULL }, @@ -106,7 +104,6 @@ public: { "combatstop", SEC_GAMEMASTER, true, &HandleCombatStopCommand, "", NULL }, { "flusharenapoints", SEC_ADMINISTRATOR, false, &HandleFlushArenaPointsCommand, "", NULL }, { "repairitems", SEC_GAMEMASTER, true, &HandleRepairitemsCommand, "", NULL }, - { "waterwalk", SEC_GAMEMASTER, false, &HandleWaterwalkCommand, "", NULL }, { "freeze", SEC_MODERATOR, false, &HandleFreezeCommand, "", NULL }, { "unfreeze", SEC_MODERATOR, false, &HandleUnFreezeCommand, "", NULL }, { "listfreeze", SEC_MODERATOR, false, &HandleListFreezeCommand, "", NULL }, @@ -960,49 +957,6 @@ public: player->CastSpell(player, 7355, false); return true; } - // Enable on\off all taxi paths - static bool HandleTaxiCheatCommand(ChatHandler* handler, char const* args) - { - if (!*args) - { - handler->SendSysMessage(LANG_USE_BOL); - handler->SetSentErrorMessage(true); - return false; - } - - std::string argStr = (char*)args; - - Player* chr = handler->getSelectedPlayer(); - - if (!chr) - chr = handler->GetSession()->GetPlayer(); - else if (handler->HasLowerSecurity(chr, 0)) // check online security - return false; - - if (argStr == "on") - { - chr->SetTaxiCheater(true); - handler->PSendSysMessage(LANG_YOU_GIVE_TAXIS, handler->GetNameLink(chr).c_str()); - if (handler->needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_TAXIS_ADDED, handler->GetNameLink().c_str()); - return true; - } - - if (argStr == "off") - { - chr->SetTaxiCheater(false); - handler->PSendSysMessage(LANG_YOU_REMOVE_TAXIS, handler->GetNameLink(chr).c_str()); - if (handler->needReportToTarget(chr)) - ChatHandler(chr).PSendSysMessage(LANG_YOURS_TAXIS_REMOVED, handler->GetNameLink().c_str()); - - return true; - } - - handler->SendSysMessage(LANG_USE_BOL); - handler->SetSentErrorMessage(true); - - return false; - } static bool HandleLinkGraveCommand(ChatHandler* handler, char const* args) { @@ -1123,45 +1077,6 @@ public: return true; } - static bool HandleExploreCheatCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - int32 flag = int32(atoi((char*)args)); - - Player* playerTarget = handler->getSelectedPlayer(); - if (!playerTarget) - { - handler->SendSysMessage(LANG_NO_CHAR_SELECTED); - handler->SetSentErrorMessage(true); - return false; - } - - if (flag != 0) - { - handler->PSendSysMessage(LANG_YOU_SET_EXPLORE_ALL, handler->GetNameLink(playerTarget).c_str()); - if (handler->needReportToTarget(playerTarget)) - ChatHandler(playerTarget).PSendSysMessage(LANG_YOURS_EXPLORE_SET_ALL, handler->GetNameLink().c_str()); - } - else - { - handler->PSendSysMessage(LANG_YOU_SET_EXPLORE_NOTHING, handler->GetNameLink(playerTarget).c_str()); - if (handler->needReportToTarget(playerTarget)) - ChatHandler(playerTarget).PSendSysMessage(LANG_YOURS_EXPLORE_SET_NOTHING, handler->GetNameLink().c_str()); - } - - for (uint8 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i) - { - if (flag != 0) - handler->GetSession()->GetPlayer()->SetFlag(PLAYER_EXPLORED_ZONES_1+i, 0xFFFFFFFF); - else - handler->GetSession()->GetPlayer()->SetFlag(PLAYER_EXPLORED_ZONES_1+i, 0); - } - - return true; - } - static bool HandleShowAreaCommand(ChatHandler* handler, char const* args) { if (!*args) @@ -2194,39 +2109,6 @@ public: return true; } - static bool HandleWaterwalkCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - Player* player = handler->getSelectedPlayer(); - if (!player) - { - handler->PSendSysMessage(LANG_NO_CHAR_SELECTED); - handler->SetSentErrorMessage(true); - return false; - } - - // check online security - if (handler->HasLowerSecurity(player, 0)) - return false; - - if (strncmp(args, "on", 3) == 0) - player->SetMovement(MOVE_WATER_WALK); // ON - else if (strncmp(args, "off", 4) == 0) - player->SetMovement(MOVE_LAND_WALK); // OFF - else - { - handler->SendSysMessage(LANG_USE_BOL); - return false; - } - - handler->PSendSysMessage(LANG_YOU_SET_WATERWALK, args, handler->GetNameLink(player).c_str()); - if (handler->needReportToTarget(player)) - ChatHandler(player).PSendSysMessage(LANG_YOUR_WATERWALK_SET, args, handler->GetNameLink().c_str()); - return true; - } - // Send mail by command static bool HandleSendMailCommand(ChatHandler* handler, char const* args) { From 147c698a303438d3804781745da7d954965958e4 Mon Sep 17 00:00:00 2001 From: Nay Date: Fri, 31 Aug 2012 01:29:18 +0100 Subject: [PATCH 046/204] SQL: Rename SQL --- ..._8_29_00_world_command.sql => 2012_08_31_00_world_command.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename sql/updates/world/{2012_8_29_00_world_command.sql => 2012_08_31_00_world_command.sql} (100%) diff --git a/sql/updates/world/2012_8_29_00_world_command.sql b/sql/updates/world/2012_08_31_00_world_command.sql similarity index 100% rename from sql/updates/world/2012_8_29_00_world_command.sql rename to sql/updates/world/2012_08_31_00_world_command.sql From 6fbe3a11ecc92a9a3acd4e2b05a784a57051f425 Mon Sep 17 00:00:00 2001 From: w1sht0l1v3 Date: Fri, 31 Aug 2012 04:15:04 +0300 Subject: [PATCH 047/204] DB/SAI: Taking on All Challengers & Defending Your Title --- sql/updates/world/2012_08_31_00_world_sai.sql | 50 ++++++++++ src/server/scripts/Northrend/storm_peaks.cpp | 98 ------------------- 2 files changed, 50 insertions(+), 98 deletions(-) create mode 100644 sql/updates/world/2012_08_31_00_world_sai.sql diff --git a/sql/updates/world/2012_08_31_00_world_sai.sql b/sql/updates/world/2012_08_31_00_world_sai.sql new file mode 100644 index 00000000000..fd7e0d7810f --- /dev/null +++ b/sql/updates/world/2012_08_31_00_world_sai.sql @@ -0,0 +1,50 @@ +-- Defending Your Title (13423) +-- Taking on All Challengers (12971) + +SET @NPC_CHALLENGER := 30012; -- Victorious Challenger +SET @QUEST1 := 12971; +SET @QUEST2 := 13423; +SET @GOSSIP_MENUID := 9865; +SET @SPELL_SUNDER := 11971; -- Sunder Armor +SET @SPELL_REND := 11977; -- Rend + +UPDATE `creature_template` SET `faction_A`=2109,`faction_H`=2109,`unit_flags`=0x8000,`npcflag`=0x1,`gossip_menu_id`=@GOSSIP_MENUID,`AIName`='SmartAI',`ScriptName`='' WHERE `entry`=@NPC_CHALLENGER; + +DELETE FROM `creature_template_addon` WHERE `entry`=@NPC_CHALLENGER; +INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`auras`) VALUES +(@NPC_CHALLENGER,0,0x0,0x1,''); + +DELETE FROM `creature_text` WHERE `entry`=@NPC_CHALLENGER; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@NPC_CHALLENGER,0,0,'You will not defeat me!',12,0,100,0,0,0,'Victorious Challenger'), +(@NPC_CHALLENGER,0,1,'You''re not worthy of Thorim!',12,0,100,0,0,0,'Victorious Challenger'), +(@NPC_CHALLENGER,0,2,'Good luck... You''ll need it!',12,0,100,0,0,0,'Victorious Challenger'), +(@NPC_CHALLENGER,0,3,'May the best win!',12,0,100,0,0,0,'Victorious Challenger'); + +DELETE FROM `gossip_menu` WHERE `entry`=@GOSSIP_MENUID; +INSERT INTO `gossip_menu` (`entry`,`text_id`) VALUES +(@GOSSIP_MENUID,13660); + +DELETE FROM `gossip_menu_option` WHERE `menu_id`=@GOSSIP_MENUID; +INSERT INTO `gossip_menu_option` (`menu_id`,`id`,`option_icon`,`option_text`,`option_id`,`npc_option_npcflag`,`action_menu_id`,`action_poi_id`,`box_coded`,`box_money`,`box_text`) VALUES +(@GOSSIP_MENUID,0,0,'Let''s do this, sister.',1,1,0,0,0,0,''); + +DELETE FROM `creature_equip_template` WHERE `entry`=@NPC_CHALLENGER; +INSERT INTO `creature_equip_template` (`entry`,`itemEntry1`,`itemEntry2`,`itemEntry3`) VALUES +(@NPC_CHALLENGER,40542,39288,0); + +DELETE FROM `smart_scripts` WHERE (`source_type`=0 AND `entryorguid`=@NPC_CHALLENGER) OR (`source_type`=9 AND `entryorguid`=@NPC_CHALLENGER*100); +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(@NPC_CHALLENGER,0,0,0,25,0,100,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Victorious Challenger - On Reset - Set Default Faction'), +(@NPC_CHALLENGER,0,1,2,62,0,100,0,@GOSSIP_MENUID,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Victorious Challenger - On Gossip - Close Gossip'), +(@NPC_CHALLENGER,0,2,0,61,0,100,0,0,0,0,0,80,@NPC_CHALLENGER*100,0,0,0,0,0,1,0,0,0,0,0,0,0,'Victorious Challenger - On Gossip - Run Timed Script'), +(@NPC_CHALLENGER,0,3,0,9,0,100,0,0,5,5000,10000,11,@SPELL_SUNDER,0,0,0,0,0,2,0,0,0,0,0,0,0,'Victorious Challenger - On Range - Cast Sunder Armor'), +(@NPC_CHALLENGER,0,4,0,0,0,100,0,10000,15000,15000,20000,11,@SPELL_REND,0,0,0,0,0,2,0,0,0,0,0,0,0,'Victorious Challenger - IC - Cast Rend'), +(@NPC_CHALLENGER*100,9,0,0,0,0,100,0,1000,1000,1000,1000,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,'Victorious Challenger - Timed - Talk'), +(@NPC_CHALLENGER*100,9,1,0,0,0,100,0,3000,3000,3000,3000,2,14,0,0,0,0,0,1,0,0,0,0,0,0,0,'Victorious Challenger - Timed - Set Faction Hostile'), +(@NPC_CHALLENGER*100,9,2,0,0,0,100,0,0,0,0,0,49,0,0,0,0,0,0,7,0,0,0,0,0,0,0,'Victorious Challenger - Timed - Attack Invoker'); + +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup`=@GOSSIP_MENUID; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`SourceId`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionTarget`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES +(15,@GOSSIP_MENUID,0,0,0,9,0,@QUEST1,0,0,0,0,'','Show gossip option 0 if player has quest Taking on All Challengers'), +(15,@GOSSIP_MENUID,0,0,1,9,0,@QUEST2,0,0,0,0,'','Show gossip option 0 if player has quest Defending Your Title'); diff --git a/src/server/scripts/Northrend/storm_peaks.cpp b/src/server/scripts/Northrend/storm_peaks.cpp index 6bf342e4643..60c289dc8de 100644 --- a/src/server/scripts/Northrend/storm_peaks.cpp +++ b/src/server/scripts/Northrend/storm_peaks.cpp @@ -194,103 +194,6 @@ public: } }; -/*###### -## npc_victorious_challenger -######*/ - -#define GOSSIP_CHALLENGER "Let's do this, sister." - -enum eVictoriousChallenger -{ - QUEST_TAKING_ALL_CHALLENGERS = 12971, - QUEST_DEFENDING_YOUR_TITLE = 13423, - - SPELL_SUNDER_ARMOR = 11971, - SPELL_REND_VC = 11977 -}; - -class npc_victorious_challenger : public CreatureScript -{ -public: - npc_victorious_challenger() : CreatureScript("npc_victorious_challenger") { } - - struct npc_victorious_challengerAI : public ScriptedAI - { - npc_victorious_challengerAI(Creature* creature) : ScriptedAI(creature) {} - - uint32 SunderArmorTimer; - uint32 RendTimer; - - void Reset() - { - me->RestoreFaction(); - - SunderArmorTimer = 10000; - RendTimer = 15000; - } - - void UpdateAI(const uint32 diff) - { - //Return since we have no target - if (!UpdateVictim()) - return; - - if (RendTimer < diff) - { - DoCast(me->getVictim(), SPELL_REND_VC, true); - RendTimer = 15000; - }else RendTimer -= diff; - - if (SunderArmorTimer < diff) - { - DoCast(me->getVictim(), SPELL_SUNDER_ARMOR, true); - SunderArmorTimer = 10000; - }else SunderArmorTimer -= diff; - - DoMeleeAttackIfReady(); - } - - void KilledUnit(Unit* /*victim*/) - { - me->RestoreFaction(); - } - - }; - - bool OnGossipHello(Player* player, Creature* creature) - { - if (creature->isQuestGiver()) - player->PrepareQuestMenu(creature->GetGUID()); - - if (player->GetQuestStatus(QUEST_TAKING_ALL_CHALLENGERS) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(QUEST_DEFENDING_YOUR_TITLE) == QUEST_STATUS_INCOMPLETE) - { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_CHALLENGER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); - return true; - } - - return false; - } - - bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) - { - player->PlayerTalkClass->ClearMenus(); - if (action == GOSSIP_ACTION_INFO_DEF+1) - { - player->CLOSE_GOSSIP_MENU(); - creature->setFaction(14); - creature->AI()->AttackStart(player); - } - - return true; - } - - CreatureAI* GetAI(Creature* creature) const - { - return new npc_victorious_challengerAI(creature); - } -}; - /*###### ## npc_loklira_crone ######*/ @@ -753,7 +656,6 @@ void AddSC_storm_peaks() new npc_agnetta_tyrsdottar(); new npc_frostborn_scout(); new npc_thorim(); - new npc_victorious_challenger(); new npc_loklira_crone(); new npc_injured_goblin(); new npc_roxi_ramrocket(); From a8d514914be2e88dbae5013a17013adabefcfe74 Mon Sep 17 00:00:00 2001 From: Trista Date: Fri, 31 Aug 2012 14:20:11 +0100 Subject: [PATCH 048/204] Core/Scripts: Improve Wyrmrest Defender gossip * Added conditions to only show default gossip, if not on quest 12372 * Else show other gossip text * Add second gossip text on gossip select * Remove close gossip - after a lot of videos turns out character close it by moving or clicking "goodbye" Ref #1861 Closes #7594 --- src/server/scripts/Northrend/dragonblight.cpp | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/server/scripts/Northrend/dragonblight.cpp b/src/server/scripts/Northrend/dragonblight.cpp index b915f4c6304..1f1d24453ee 100644 --- a/src/server/scripts/Northrend/dragonblight.cpp +++ b/src/server/scripts/Northrend/dragonblight.cpp @@ -174,9 +174,12 @@ public: ## wyrmrest_defender ######*/ -enum Spells +enum WyrmDefenderEnum { - SPELL_CHARACTER_SCRIPT = 49213 + QUEST_DEFENDING_WYRMREST_TEMPLE = 12372, + GOSSIP_TEXTID_DEF1 = 12899, + GOSSIP_TEXTID_DEF2 = 12900, + SPELL_CHARACTER_SCRIPT = 49213 }; #define GOSSIP_ITEM_1 "We need to get into the fight. Are you ready?" @@ -187,19 +190,24 @@ class npc_wyrmrest_defender : public CreatureScript npc_wyrmrest_defender() : CreatureScript("npc_wyrmrest_defender") { } bool OnGossipHello(Player* player, Creature* creature) - { - player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); + { + if (player->GetQuestStatus(QUEST_DEFENDING_WYRMREST_TEMPLE) == QUEST_STATUS_INCOMPLETE) + { + player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); + player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_DEF1, creature->GetGUID()); + } + else + player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID()); return true; } - bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) + bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) { player->PlayerTalkClass->ClearMenus(); if (action == GOSSIP_ACTION_INFO_DEF+1) { - player->CLOSE_GOSSIP_MENU(); + player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_DEF2, creature->GetGUID()); // Makes player cast trigger spell for 49207 on self player->CastSpell(player, SPELL_CHARACTER_SCRIPT, true); } From d7eeebe0f3b9c1256bce900c39e0abcbf9641168 Mon Sep 17 00:00:00 2001 From: kaelima Date: Mon, 3 Sep 2012 20:30:30 +0200 Subject: [PATCH 049/204] Core/MMaps: Implement pathed charge effect --- src/server/game/Movement/MotionMaster.cpp | 14 +++++++++- src/server/game/Movement/MotionMaster.h | 2 ++ .../PointMovementGenerator.cpp | 7 +++-- .../PointMovementGenerator.h | 2 +- src/server/game/Movement/PathGenerator.cpp | 7 +++++ src/server/game/Movement/PathGenerator.h | 13 +++++----- src/server/game/Spells/Spell.cpp | 20 +++++++++++++- src/server/game/Spells/Spell.h | 2 ++ src/server/game/Spells/SpellEffects.cpp | 26 +++++++++---------- 9 files changed, 69 insertions(+), 24 deletions(-) diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 2ad8028ca4f..d7bf433677c 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -340,7 +340,7 @@ void MotionMaster::MoveKnockbackFrom(float srcX, float srcY, float speedXY, floa _owner->GetNearPoint(_owner, x, y, z, _owner->GetObjectSize(), dist, _owner->GetAngle(srcX, srcY) + M_PI); Movement::MoveSplineInit init(_owner); - init.MoveTo(x,y,z); + init.MoveTo(x, y, z); init.SetParabolic(max_height,0); init.SetOrientationFixed(true); init.SetVelocity(speedXY); @@ -423,6 +423,18 @@ void MotionMaster::MoveCharge(float x, float y, float z, float speed, uint32 id, } } +void MotionMaster::MoveCharge(PathGenerator path, float speed, uint32 id) +{ + Vector3 dest = path.getActualEndPosition(); + + MoveCharge(dest.x, dest.y, dest.z); + + Movement::MoveSplineInit init(_owner); + init.MovebyPath(path.getPath()); + init.SetVelocity(speed); + init.Launch(); +} + void MotionMaster::MoveSeekAssistance(float x, float y, float z) { if (_owner->GetTypeId() == TYPEID_PLAYER) diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 16accff2ab4..d59ec83e615 100755 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -26,6 +26,7 @@ class MovementGenerator; class Unit; +class PathGenerator; // Creature Entry ID used for waypoints show, visible only for GMs #define VISUAL_WAYPOINT 1 @@ -161,6 +162,7 @@ class MotionMaster //: private std::stack void MoveTakeoff(uint32 id, Position const& pos); void MoveCharge(float x, float y, float z, float speed = SPEED_CHARGE, uint32 id = EVENT_CHARGE, bool generatePath = false); + void MoveCharge(PathGenerator path, float speed = SPEED_CHARGE, uint32 id = EVENT_CHARGE); void MoveKnockbackFrom(float srcX, float srcY, float speedXY, float speedZ); void MoveJumpTo(float angle, float speedXY, float speedZ); void MoveJump(float x, float y, float z, float speedXY, float speedZ, uint32 id = 0); diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp index 20f1c3a29e9..c022de31869 100755 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp @@ -33,7 +33,10 @@ void PointMovementGenerator::Initialize(T* unit) unit->StopMoving(); unit->AddUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); - i_recalculateSpeed = false; + + if (id == EVENT_CHARGE) + return; + Movement::MoveSplineInit init(unit); init.MoveTo(i_x, i_y, i_z, m_generatePath); if (speed > 0.0f) @@ -55,7 +58,7 @@ bool PointMovementGenerator::Update(T* unit, const uint32& /*diff*/) unit->AddUnitState(UNIT_STATE_ROAMING_MOVE); - if (i_recalculateSpeed && !unit->movespline->Finalized()) + if (id != EVENT_CHARGE && i_recalculateSpeed && !unit->movespline->Finalized()) { i_recalculateSpeed = false; Movement::MoveSplineInit init(unit); diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h index 4111690627e..e01ced758a3 100644 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h @@ -27,7 +27,7 @@ class PointMovementGenerator : public MovementGeneratorMedium< T, PointMovementG { public: PointMovementGenerator(uint32 _id, float _x, float _y, float _z, bool _generatePath, float _speed = 0.0f) : id(_id), - i_x(_x), i_y(_y), i_z(_z), m_generatePath(_generatePath), speed(_speed) {} + i_x(_x), i_y(_y), i_z(_z), m_generatePath(_generatePath), speed(_speed), i_recalculateSpeed(false) {} void Initialize(T*); void Finalize(T*); diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index 4d7707020e1..a02eb0a9a84 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -456,6 +456,13 @@ void PathGenerator::BuildPointPath(const float *startPoint, const float *endPoin m_type = PATHFIND_NOPATH; return; } + else if (pointCount == m_pointPathLimit) + { + sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::BuildPointPath FAILED! path sized %d returned, lower than limit set to %d\n", pointCount, m_pointPathLimit); + BuildShortcut(); + m_type = PATHFIND_SHORT; + return; + } m_pathPoints.resize(pointCount); for (uint32 i = 0; i < pointCount; ++i) diff --git a/src/server/game/Movement/PathGenerator.h b/src/server/game/Movement/PathGenerator.h index a0d925cb11f..ac163f43be5 100644 --- a/src/server/game/Movement/PathGenerator.h +++ b/src/server/game/Movement/PathGenerator.h @@ -43,12 +43,13 @@ class Unit; enum PathType { - PATHFIND_BLANK = 0x0000, // path not built yet - PATHFIND_NORMAL = 0x0001, // normal path - PATHFIND_SHORTCUT = 0x0002, // travel through obstacles, terrain, air, etc (old behavior) - PATHFIND_INCOMPLETE = 0x0004, // we have partial path to follow - getting closer to target - PATHFIND_NOPATH = 0x0008, // no valid path at all or error in generating one - PATHFIND_NOT_USING_PATH = 0x0010 // used when we are either flying/swiming or on map w/o mmaps + PATHFIND_BLANK = 0x00, // path not built yet + PATHFIND_NORMAL = 0x01, // normal path + PATHFIND_SHORTCUT = 0x02, // travel through obstacles, terrain, air, etc (old behavior) + PATHFIND_INCOMPLETE = 0x04, // we have partial path to follow - getting closer to target + PATHFIND_NOPATH = 0x08, // no valid path at all or error in generating one + PATHFIND_NOT_USING_PATH = 0x10, // used when we are either flying/swiming or on map w/o mmaps + PATHFIND_SHORT = 0x20, // path is longer or equal to its limited path length }; class PathGenerator diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 79e6404f73e..6e056bf59f8 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -490,7 +490,7 @@ SpellValue::SpellValue(SpellInfo const* proto) Spell::Spell(Unit* caster, SpellInfo const* info, TriggerCastFlags triggerFlags, uint64 originalCasterGUID, bool skipCheck) : m_spellInfo(sSpellMgr->GetSpellForDifficultyFromSpell(info, caster)), m_caster((info->AttributesEx6 & SPELL_ATTR6_CAST_BY_CHARMER && caster->GetCharmerOrOwner()) ? caster->GetCharmerOrOwner() : caster) -, m_spellValue(new SpellValue(m_spellInfo)) +, m_spellValue(new SpellValue(m_spellInfo)), m_preGeneratedPath(PathGenerator(m_caster)) { m_customError = SPELL_CUSTOM_ERROR_NONE; m_skipCheck = skipCheck; @@ -610,6 +610,7 @@ Spell::~Spell() if (m_caster && m_caster->GetTypeId() == TYPEID_PLAYER) ASSERT(m_caster->ToPlayer()->m_spellModTakingSpell != this); + delete m_spellValue; CheckEffectExecuteData(); @@ -5143,8 +5144,25 @@ SpellCastResult Spell::CheckCast(bool strict) if (strict && m_caster->IsScriptOverriden(m_spellInfo, 6953)) m_caster->RemoveMovementImpairingAuras(); } + if (m_caster->HasUnitState(UNIT_STATE_ROOT)) return SPELL_FAILED_ROOTED; + + Unit* target = m_targets.GetUnitTarget(); + + if (!target) + return SPELL_FAILED_DONT_REPORT; + + Position pos; + target->GetContactPoint(m_caster, pos.m_positionX, pos.m_positionY, pos.m_positionZ); + target->GetFirstCollisionPosition(pos, CONTACT_DISTANCE, target->GetRelativeAngle(m_caster)); + + m_preGeneratedPath.setPathLengthLimit(m_spellInfo->GetMaxRange(true) * 1.5f); + m_preGeneratedPath.CalculatePath(pos.m_positionX, pos.m_positionY, pos.m_positionZ + target->GetObjectSize()); + + if (m_preGeneratedPath.getPathType() & PATHFIND_SHORT) + return SPELL_FAILED_OUT_OF_RANGE; + break; } case SPELL_EFFECT_SKINNING: diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 1376b0fbd40..22495b3f1f0 100755 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -23,6 +23,7 @@ #include "SharedDefines.h" #include "ObjectMgr.h" #include "SpellInfo.h" +#include "PathGenerator.h" class Unit; class Player; @@ -666,6 +667,7 @@ class Spell bool m_skipCheck; uint8 m_auraScaleMask; + PathGenerator m_preGeneratedPath; ByteBuffer * m_effectExecuteData[MAX_SPELL_EFFECTS]; diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 3637bb18049..1aa2ca0176b 100755 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -63,6 +63,7 @@ #include "GameObjectAI.h" #include "AccountMgr.h" #include "InstanceScript.h" +#include "PathGenerator.h" pEffect SpellEffects[TOTAL_SPELL_EFFECTS]= { @@ -5133,25 +5134,24 @@ void Spell::EffectSkinning(SpellEffIndex /*effIndex*/) void Spell::EffectCharge(SpellEffIndex /*effIndex*/) { + if (!unitTarget) + return; + if (effectHandleMode == SPELL_EFFECT_HANDLE_LAUNCH_TARGET) { - if (!unitTarget) - return; - - float angle = unitTarget->GetRelativeAngle(m_caster); - Position pos; - - unitTarget->GetContactPoint(m_caster, pos.m_positionX, pos.m_positionY, pos.m_positionZ); - unitTarget->GetFirstCollisionPosition(pos, unitTarget->GetObjectSize(), angle); - - m_caster->GetMotionMaster()->MoveCharge(pos.m_positionX, pos.m_positionY, pos.m_positionZ + unitTarget->GetObjectSize()); + if (m_preGeneratedPath.getPathType() & PATHFIND_NOPATH) + { + Position pos; + unitTarget->GetContactPoint(m_caster, pos.m_positionX, pos.m_positionY, pos.m_positionZ); + unitTarget->GetFirstCollisionPosition(pos, unitTarget->GetObjectSize(), unitTarget->GetRelativeAngle(m_caster)); + m_caster->GetMotionMaster()->MoveCharge(pos.m_positionX, pos.m_positionY, pos.m_positionZ); + } + else + m_caster->GetMotionMaster()->MoveCharge(m_preGeneratedPath); } if (effectHandleMode == SPELL_EFFECT_HANDLE_HIT_TARGET) { - if (!unitTarget) - return; - // not all charge effects used in negative spells if (!m_spellInfo->IsPositive() && m_caster->GetTypeId() == TYPEID_PLAYER) m_caster->Attack(unitTarget, true); From a9e672ab1d33a3502381d4b33f679a9d1f1f2087 Mon Sep 17 00:00:00 2001 From: kaelima Date: Mon, 3 Sep 2012 20:34:07 +0200 Subject: [PATCH 050/204] Core/MMaps: Prevent path generation when falling or exiting vehicle --- src/server/game/Entities/Unit/Unit.cpp | 2 +- src/server/game/Movement/MotionMaster.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index ca8cb4763d7..d610c2e0fb9 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -17158,7 +17158,7 @@ void Unit::_ExitVehicle(Position const* exitPosition) } Movement::MoveSplineInit init(this); - init.MoveTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()); + init.MoveTo(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), false); init.SetFacing(GetOrientation()); init.SetTransportExit(); init.Launch(); diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index d7bf433677c..bf938c3af6c 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -399,7 +399,7 @@ void MotionMaster::MoveFall(uint32 id/*=0*/) } Movement::MoveSplineInit init(_owner); - init.MoveTo(_owner->GetPositionX(), _owner->GetPositionY(), tz); + init.MoveTo(_owner->GetPositionX(), _owner->GetPositionY(), tz, false); init.SetFall(); init.Launch(); Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED); From 306e4c173c2a2c050af61f8eb511c67496621a60 Mon Sep 17 00:00:00 2001 From: Nay Date: Tue, 4 Sep 2012 19:58:39 +0100 Subject: [PATCH 051/204] Fix a merge failure --- .../Movement/MovementGenerators/FleeingMovementGenerator.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index 029bc55ab58..acb1a57a9ba 100755 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -47,11 +47,6 @@ void FleeingMovementGenerator::_setTargetLocation(T* owner) path.setPathLengthLimit(30.0f); path.CalculatePath(x, y, z); if (path.getPathType() & PATHFIND_NOPATH) - default: - angle = 0.0f; - distance = 0.0f; - break; - { i_nextCheckTime.Reset(urand(1000, 1500)); return; From 69602df83388e89dc473936f08992c48022a73f0 Mon Sep 17 00:00:00 2001 From: kaelima Date: Tue, 4 Sep 2012 23:33:11 +0200 Subject: [PATCH 052/204] Core/MMaps: Fix some uninitialized variable complaints in PathGenerator --- src/server/game/Movement/PathGenerator.cpp | 19 ++++++++++--------- src/tools/mmaps_generator/PathGenerator.cpp | 4 ++-- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index a02eb0a9a84..62ab0be4630 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -30,7 +30,7 @@ PathGenerator::PathGenerator(const Unit* owner) : m_polyLength(0), m_type(PATHFIND_BLANK), m_useStraightPath(false), m_forceDestination(false), m_pointPathLimit(MAX_POINT_PATH_LENGTH), - m_sourceUnit(owner), m_navMesh(NULL), m_navMeshQuery(NULL) + m_sourceUnit(owner), m_navMesh(NULL), m_navMeshQuery(NULL), m_endPosition(Vector3::zero()) { sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::PathGenerator for %u \n", m_sourceUnit->GetGUIDLow()); @@ -52,16 +52,16 @@ PathGenerator::~PathGenerator() bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool forceDest) { - if (!Trinity::IsValidMapCoord(destX, destY, destZ) || - !Trinity::IsValidMapCoord(m_sourceUnit->GetPositionX(), m_sourceUnit->GetPositionY(), m_sourceUnit->GetPositionZ())) + float x, y, z; + m_sourceUnit->GetPosition(x, y, z); + + if (!Trinity::IsValidMapCoord(destX, destY, destZ) || !Trinity::IsValidMapCoord(x, y, z)) return false; Vector3 oldDest = getEndPosition(); Vector3 dest(destX, destY, destZ); setEndPosition(dest); - float x, y, z; - m_sourceUnit->GetPosition(x, y, z); Vector3 start(x, y, z); setStartPosition(start); @@ -84,7 +84,7 @@ bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool fo // check if destination moved - if not we can optimize something here // we are following old, precalculated path? float dist = m_sourceUnit->GetObjectSize(); - if (inRange(oldDest, dest, dist, dist) && m_pathPoints.size() > 2) + if (oldDest != Vector3::zero() && inRange(oldDest, dest, dist, dist) && m_pathPoints.size() > 2) { // our target is not moving - we just coming closer // we are moving on precalculated path - enjoy the ride @@ -192,7 +192,7 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos if (waterPath) { // Check both start and end points, if they're both in water, then we can *safely* let the creature move - for (int i = 0; i < m_pathPoints.size(); ++i) + for (uint32 i = 0; i < m_pathPoints.size(); ++i) { LiquidData data; m_sourceUnit->GetBaseMap()->getLiquidStatus(m_pathPoints[i].x, m_pathPoints[i].y, m_pathPoints[i].z, MAP_ALL_LIQUIDS, &data); @@ -277,11 +277,12 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos // TODO: we can merge it with getPathPolyByPosition() loop bool startPolyFound = false; bool endPolyFound = false; - uint32 pathStartIndex, pathEndIndex; + uint32 pathStartIndex = 0; + uint32 pathEndIndex = 0; if (m_polyLength) { - for (pathStartIndex = 0; pathStartIndex < m_polyLength; ++pathStartIndex) + for (; pathStartIndex < m_polyLength; ++pathStartIndex) { // here to carch few bugs ASSERT(m_pathPolyRefs[pathStartIndex] != INVALID_POLYREF); diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp index 026bf957ec4..9707cb4160a 100644 --- a/src/tools/mmaps_generator/PathGenerator.cpp +++ b/src/tools/mmaps_generator/PathGenerator.cpp @@ -26,14 +26,14 @@ bool checkDirectories(bool debugOutput) { vector dirFiles; - if (getDirContents(dirFiles, "maps") == LISTFILE_DIRECTORY_NOT_FOUND || !dirFiles.size()) + if (getDirContents(dirFiles, "maps") == LISTFILE_DIRECTORY_NOT_FOUND || dirFiles.empty()) { printf("'maps' directory is empty or does not exist\n"); return false; } dirFiles.clear(); - if (getDirContents(dirFiles, "vmaps", "*.vmtree") == LISTFILE_DIRECTORY_NOT_FOUND || !dirFiles.size()) + if (getDirContents(dirFiles, "vmaps", "*.vmtree") == LISTFILE_DIRECTORY_NOT_FOUND || dirFiles.empty()) { printf("'vmaps' directory is empty or does not exist\n"); return false; From c2f446ded917efed58c8054693858b3c4b4c4a8f Mon Sep 17 00:00:00 2001 From: kaelima Date: Wed, 5 Sep 2012 17:07:47 +0200 Subject: [PATCH 053/204] Core/MMaps: Minor warning fix --- src/server/game/Movement/PathGenerator.cpp | 13 ++++++------- src/tools/mmaps_generator/MapBuilder.cpp | 10 +++++----- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index 62ab0be4630..c9cfff08ede 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -591,8 +591,7 @@ bool PathGenerator::HaveTile(const Vector3 &p) const return (m_navMesh->getTileAt(tx, ty) != NULL); } -uint32 PathGenerator::fixupCorridor(dtPolyRef* path, uint32 npath, uint32 maxPath, - const dtPolyRef* visited, uint32 nvisited) +uint32 PathGenerator::fixupCorridor(dtPolyRef* path, uint32 npath, uint32 maxPath, dtPolyRef const* visited, uint32 nvisited) { int32 furthestPath = -1; int32 furthestVisited = -1; @@ -622,17 +621,17 @@ uint32 PathGenerator::fixupCorridor(dtPolyRef* path, uint32 npath, uint32 maxPat // Adjust beginning of the buffer to include the visited. uint32 req = nvisited - furthestVisited; - uint32 orig = uint32(furthestPath+1) < npath ? furthestPath+1 : npath; - uint32 size = npath-orig > 0 ? npath-orig : 0; - if (req+size > maxPath) + uint32 orig = uint32(furthestPath + 1) < npath ? furthestPath + 1 : npath; + uint32 size = npath > orig ? npath - orig : 0; + if (req + size > maxPath) size = maxPath-req; if (size) - memmove(path+req, path+orig, size*sizeof(dtPolyRef)); + memmove(path + req, path + orig, size * sizeof(dtPolyRef)); // Store visited for (uint32 i = 0; i < req; ++i) - path[i] = visited[(nvisited-1)-i]; + path[i] = visited[(nvisited - 1) - i]; return req+size; } diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 2a74233a1a7..69ffad94eb7 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -564,10 +564,10 @@ namespace MMAP Tile& tile = tiles[x + y * TILES_PER_MAP]; // Calculate the per tile bounding box. - tileCfg.bmin[0] = config.bmin[0] + (x*config.tileSize - config.borderSize)*config.cs; - tileCfg.bmin[2] = config.bmin[2] + (y*config.tileSize - config.borderSize)*config.cs; - tileCfg.bmax[0] = config.bmin[0] + ((x+1)*config.tileSize + config.borderSize)*config.cs; - tileCfg.bmax[2] = config.bmin[2] + ((y+1)*config.tileSize + config.borderSize)*config.cs; + tileCfg.bmin[0] = config.bmin[0] + float(x*config.tileSize - config.borderSize)*config.cs; + tileCfg.bmin[2] = config.bmin[2] + float(y*config.tileSize - config.borderSize)*config.cs; + tileCfg.bmax[0] = config.bmin[0] + float((x+1)*config.tileSize + config.borderSize)*config.cs; + tileCfg.bmax[2] = config.bmin[2] + float((y+1)*config.tileSize + config.borderSize)*config.cs; // build heightfield tile.solid = rcAllocHeightfield(); @@ -633,7 +633,7 @@ namespace MMAP } tile.dmesh = rcAllocPolyMeshDetail(); - if (!tile.dmesh || !rcBuildPolyMeshDetail(m_rcContext, *tile.pmesh, *tile.chf, tileCfg.detailSampleDist, tileCfg .detailSampleMaxError, *tile.dmesh)) + if (!tile.dmesh || !rcBuildPolyMeshDetail(m_rcContext, *tile.pmesh, *tile.chf, tileCfg.detailSampleDist, tileCfg.detailSampleMaxError, *tile.dmesh)) { printf("%s Failed building polymesh detail! \n", tileString); continue; From 593f08609fa474c9aa881898e23e256e6e55c06e Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 5 Sep 2012 15:32:35 -0500 Subject: [PATCH 054/204] Core/Mmaps: Fixed a mistake in BuildPolyPath which could cause swimming creatures to bug in the navmesh generation. --- src/server/game/Movement/PathGenerator.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index c9cfff08ede..00aa8043312 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -194,10 +194,9 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos // Check both start and end points, if they're both in water, then we can *safely* let the creature move for (uint32 i = 0; i < m_pathPoints.size(); ++i) { - LiquidData data; - m_sourceUnit->GetBaseMap()->getLiquidStatus(m_pathPoints[i].x, m_pathPoints[i].y, m_pathPoints[i].z, MAP_ALL_LIQUIDS, &data); + ZLiquidStatus status = m_sourceUnit->GetBaseMap()->getLiquidStatus(m_pathPoints[i].x, m_pathPoints[i].y, m_pathPoints[i].z, MAP_ALL_LIQUIDS, NULL); // One of the points is not in the water, cancel movement. - if (data.type_flags == MAP_LIQUID_TYPE_NO_WATER) + if (status == LIQUID_MAP_NO_WATER) { waterPath = false; break; From ccdca7774023e7570f17cf15456384b316322420 Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 5 Sep 2012 16:05:26 -0500 Subject: [PATCH 055/204] Core/Mmaps: Fixed unloading mmap tiles, the x and y were swapped. thanks to MaNGOS for original implementation, and thanks to @Chevron for noticing. --- .../collision/Management/MMapManager.cpp | 24 +++++++++---------- src/server/game/Maps/Map.cpp | 4 +--- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/server/collision/Management/MMapManager.cpp b/src/server/collision/Management/MMapManager.cpp index 0222f1a5995..8e6e2a3b6b4 100644 --- a/src/server/collision/Management/MMapManager.cpp +++ b/src/server/collision/Management/MMapManager.cpp @@ -100,8 +100,8 @@ namespace MMAP // load this tile :: mmaps/MMMXXYY.mmtile uint32 pathLen = sWorld->GetDataPath().length() + strlen("mmaps/%03i%02i%02i.mmtile")+1; char *fileName = new char[pathLen]; - // this change of y and x is needed because of mapbuilder.cpp (x and y are swapped there) so change it here so we dont need to re-extract. All swappes are done in other files. DONT CHANGE THIS! - snprintf(fileName, pathLen, (sWorld->GetDataPath()+"mmaps/%03i%02i%02i.mmtile").c_str(), mapId, y, x); + + snprintf(fileName, pathLen, (sWorld->GetDataPath()+"mmaps/%03i%02i%02i.mmtile").c_str(), mapId, x, y); FILE *file = fopen(fileName, "rb"); if (!file) @@ -118,7 +118,7 @@ namespace MMAP if (fileHeader.mmapMagic != MMAP_MAGIC) { - sLog->outError(LOG_FILTER_MAPS, "MMAP:loadMap: Bad header in mmap %03u%02i%02i.mmtile", mapId, y, x); + sLog->outError(LOG_FILTER_MAPS, "MMAP:loadMap: Bad header in mmap %03u%02i%02i.mmtile", mapId, x, y); return false; } @@ -135,7 +135,7 @@ namespace MMAP size_t result = fread(data, fileHeader.size, 1, file); if (!result) { - sLog->outError(LOG_FILTER_MAPS, "MMAP:loadMap: Bad header or data in mmap %03u%02i%02i.mmtile", mapId, y, x); + sLog->outError(LOG_FILTER_MAPS, "MMAP:loadMap: Bad header or data in mmap %03u%02i%02i.mmtile", mapId, x, y); fclose(file); return false; } @@ -150,12 +150,12 @@ namespace MMAP { mmap->mmapLoadedTiles.insert(std::pair(packedGridPos, tileRef)); ++loadedTiles; - sLog->outInfo(LOG_FILTER_MAPS, "MMAP:loadMap: Loaded mmtile %03i[%02i,%02i] into %03i[%02i,%02i]", mapId, y, x, mapId, header->x, header->y); + sLog->outInfo(LOG_FILTER_MAPS, "MMAP:loadMap: Loaded mmtile %03i[%02i,%02i] into %03i[%02i,%02i]", mapId, x, y, mapId, header->x, header->y); return true; } else { - sLog->outError(LOG_FILTER_MAPS, "MMAP:loadMap: Could not load %03u%02i%02i.mmtile into navmesh", mapId, y, x); + sLog->outError(LOG_FILTER_MAPS, "MMAP:loadMap: Could not load %03u%02i%02i.mmtile into navmesh", mapId, x, y); dtFree(data); return false; } @@ -169,7 +169,7 @@ namespace MMAP if (loadedMMaps.find(mapId) == loadedMMaps.end()) { // file may not exist, therefore not loaded - sLog->outDebug(LOG_FILTER_MAPS, "MMAP:unloadMap: Asked to unload not loaded navmesh map. %03u%02i%02i.mmtile", mapId, y, x); + sLog->outDebug(LOG_FILTER_MAPS, "MMAP:unloadMap: Asked to unload not loaded navmesh map. %03u%02i%02i.mmtile", mapId, x, y); return false; } @@ -180,7 +180,7 @@ namespace MMAP if (mmap->mmapLoadedTiles.find(packedGridPos) == mmap->mmapLoadedTiles.end()) { // file may not exist, therefore not loaded - sLog->outDebug(LOG_FILTER_MAPS, "MMAP:unloadMap: Asked to unload not loaded navmesh tile. %03u%02i%02i.mmtile", mapId, y, x); + sLog->outDebug(LOG_FILTER_MAPS, "MMAP:unloadMap: Asked to unload not loaded navmesh tile. %03u%02i%02i.mmtile", mapId, x, y); return false; } @@ -192,14 +192,14 @@ namespace MMAP // this is technically a memory leak // if the grid is later reloaded, dtNavMesh::addTile will return error but no extra memory is used // we cannot recover from this error - assert out - sLog->outError(LOG_FILTER_MAPS, "MMAP:unloadMap: Could not unload %03u%02i%02i.mmtile from navmesh", mapId, y, x); + sLog->outError(LOG_FILTER_MAPS, "MMAP:unloadMap: Could not unload %03u%02i%02i.mmtile from navmesh", mapId, x, y); ASSERT(false); } else { mmap->mmapLoadedTiles.erase(packedGridPos); --loadedTiles; - sLog->outInfo(LOG_FILTER_MAPS, "MMAP:unloadMap: Unloaded mmtile %03i[%02i,%02i] from %03i", mapId, y, x, mapId); + sLog->outInfo(LOG_FILTER_MAPS, "MMAP:unloadMap: Unloaded mmtile %03i[%02i,%02i] from %03i", mapId, x, y, mapId); return true; } @@ -222,11 +222,11 @@ namespace MMAP uint32 x = (i->first >> 16); uint32 y = (i->first & 0x0000FFFF); if (DT_SUCCESS != mmap->navMesh->removeTile(i->second, NULL, NULL)) - sLog->outError(LOG_FILTER_MAPS, "MMAP:unloadMap: Could not unload %03u%02i%02i.mmtile from navmesh", mapId, y, x); + sLog->outError(LOG_FILTER_MAPS, "MMAP:unloadMap: Could not unload %03u%02i%02i.mmtile from navmesh", mapId, x, y); else { --loadedTiles; - sLog->outInfo(LOG_FILTER_MAPS, "MMAP:unloadMap: Unloaded mmtile %03i[%02i,%02i] from %03i", mapId, y, x, mapId); + sLog->outInfo(LOG_FILTER_MAPS, "MMAP:unloadMap: Unloaded mmtile %03i[%02i,%02i] from %03i", mapId, x, y, mapId); } } diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index af139568ece..7e5a2ebb220 100755 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -123,8 +123,7 @@ bool Map::ExistVMap(uint32 mapid, int gx, int gy) void Map::LoadMMap(int gx, int gy) { - // DONT CHANGE "gy" and "gx" - Its necessary ! - bool mmapLoadResult = MMAP::MMapFactory::createOrGetMMapManager()->loadMap((sWorld->GetDataPath() + "mmaps").c_str(), GetId(), gy, gx); + bool mmapLoadResult = MMAP::MMapFactory::createOrGetMMapManager()->loadMap((sWorld->GetDataPath() + "mmaps").c_str(), GetId(), gx, gy); if (mmapLoadResult) sLog->outInfo(LOG_FILTER_MAPS, "MMAP loaded name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); @@ -1011,7 +1010,6 @@ bool Map::UnloadGrid(NGridType& ngrid, bool unloadAll) GridMaps[gx][gy]->unloadData(); delete GridMaps[gx][gy]; } - // x and y are swapped VMAP::VMapFactory::createOrGetVMapManager()->unloadMap(GetId(), gx, gy); MMAP::MMapFactory::createOrGetMMapManager()->unloadMap(GetId(), gx, gy); } From e7c0d8bef023a0b948602e2fc6b31fc68a120ac4 Mon Sep 17 00:00:00 2001 From: Venugh Date: Wed, 5 Sep 2012 23:47:02 +0200 Subject: [PATCH 056/204] Core/MMaps: Applied Trinity Codestyle to PathGenerator. --- src/server/game/Movement/MotionMaster.cpp | 4 +- .../ConfusedMovementGenerator.cpp | 6 +- .../FleeingMovementGenerator.cpp | 6 +- .../TargetedMovementGenerator.cpp | 4 +- src/server/game/Movement/PathGenerator.cpp | 307 +++++++++--------- src/server/game/Movement/PathGenerator.h | 91 +++--- .../game/Movement/Spline/MoveSplineInit.cpp | 2 +- src/server/game/Spells/Spell.cpp | 4 +- src/server/game/Spells/SpellEffects.cpp | 2 +- 9 files changed, 211 insertions(+), 215 deletions(-) diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index bf938c3af6c..34be779a8b7 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -425,12 +425,12 @@ void MotionMaster::MoveCharge(float x, float y, float z, float speed, uint32 id, void MotionMaster::MoveCharge(PathGenerator path, float speed, uint32 id) { - Vector3 dest = path.getActualEndPosition(); + Vector3 dest = path.GetActualEndPosition(); MoveCharge(dest.x, dest.y, dest.z); Movement::MoveSplineInit init(_owner); - init.MovebyPath(path.getPath()); + init.MovebyPath(path.GetPath()); init.SetVelocity(speed); init.Launch(); } diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index f1d1d8cf04a..32c6ec3858d 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -77,16 +77,16 @@ bool ConfusedMovementGenerator::Update(T* unit, const uint32& diff) unit->UpdateAllowedPositionZ(x, y, z); PathGenerator path(unit); - path.setPathLengthLimit(30.0f); + path.SetPathLengthLimit(30.0f); path.CalculatePath(x, y, z); - if (path.getPathType() & PATHFIND_NOPATH) + if (path.GetPathType() & PATHFIND_NOPATH) { i_nextMoveTime.Reset(urand(800, 1000)); return true; } Movement::MoveSplineInit init(unit); - init.MovebyPath(path.getPath()); + init.MovebyPath(path.GetPath()); init.SetWalk(true); init.Launch(); } diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index acb1a57a9ba..8f4d78b34b1 100755 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -44,16 +44,16 @@ void FleeingMovementGenerator::_setTargetLocation(T* owner) owner->AddUnitState(UNIT_STATE_FLEEING_MOVE); PathGenerator path(owner); - path.setPathLengthLimit(30.0f); + path.SetPathLengthLimit(30.0f); path.CalculatePath(x, y, z); - if (path.getPathType() & PATHFIND_NOPATH) + if (path.GetPathType() & PATHFIND_NOPATH) { i_nextCheckTime.Reset(urand(1000, 1500)); return; } Movement::MoveSplineInit init(owner); - init.MovebyPath(path.getPath()); + init.MovebyPath(path.GetPath()); init.SetWalk(false); int32 traveltime = init.Launch(); i_nextCheckTime.Reset(traveltime + urand(800, 1500)); diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 9784c19b4fd..4a8d15b8079 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -70,7 +70,7 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner) bool forceDest = (owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->isPet() && owner->HasUnitState(UNIT_STATE_FOLLOW)); i_path->CalculatePath(x, y, z, forceDest); - if (i_path->getPathType() & PATHFIND_NOPATH) + if (i_path->GetPathType() & PATHFIND_NOPATH) return; D::_addUnitStateMove(owner); @@ -79,7 +79,7 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner) owner->AddUnitState(UNIT_STATE_CHASE); Movement::MoveSplineInit init(owner); - init.MovebyPath(i_path->getPath()); + init.MovebyPath(i_path->GetPath()); init.SetWalk(((D*)this)->EnableWalking()); init.Launch(); } diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index 00aa8043312..165cc282e3a 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -28,69 +28,69 @@ ////////////////// PathGenerator ////////////////// PathGenerator::PathGenerator(const Unit* owner) : - m_polyLength(0), m_type(PATHFIND_BLANK), - m_useStraightPath(false), m_forceDestination(false), m_pointPathLimit(MAX_POINT_PATH_LENGTH), - m_sourceUnit(owner), m_navMesh(NULL), m_navMeshQuery(NULL), m_endPosition(Vector3::zero()) + _polyLength(0), _type(PATHFIND_BLANK), + _useStraightPath(false), _forceDestination(false), _pointPathLimit(MAX_POINT_PATH_LENGTH), + _sourceUnit(owner), _navMesh(NULL), _navMeshQuery(NULL), _endPosition(Vector3::zero()) { - sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::PathGenerator for %u \n", m_sourceUnit->GetGUIDLow()); + sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::PathGenerator for %u \n", _sourceUnit->GetGUIDLow()); - uint32 mapId = m_sourceUnit->GetMapId(); + uint32 mapId = _sourceUnit->GetMapId(); if (MMAP::MMapFactory::IsPathfindingEnabled(mapId)) { MMAP::MMapManager* mmap = MMAP::MMapFactory::createOrGetMMapManager(); - m_navMesh = mmap->GetNavMesh(mapId); - m_navMeshQuery = mmap->GetNavMeshQuery(mapId, m_sourceUnit->GetInstanceId()); + _navMesh = mmap->GetNavMesh(mapId); + _navMeshQuery = mmap->GetNavMeshQuery(mapId, _sourceUnit->GetInstanceId()); } - createFilter(); + CreateFilter(); } PathGenerator::~PathGenerator() { - sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::~PathGenerator() for %u \n", m_sourceUnit->GetGUIDLow()); + sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::~PathGenerator() for %u \n", _sourceUnit->GetGUIDLow()); } bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool forceDest) { float x, y, z; - m_sourceUnit->GetPosition(x, y, z); + _sourceUnit->GetPosition(x, y, z); if (!Trinity::IsValidMapCoord(destX, destY, destZ) || !Trinity::IsValidMapCoord(x, y, z)) return false; - Vector3 oldDest = getEndPosition(); + Vector3 oldDest = GetEndPosition(); Vector3 dest(destX, destY, destZ); - setEndPosition(dest); + SetEndPosition(dest); Vector3 start(x, y, z); - setStartPosition(start); + SetStartPosition(start); - m_forceDestination = forceDest; + _forceDestination = forceDest; - sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::CalculatePath() for %u \n", m_sourceUnit->GetGUIDLow()); + sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::CalculatePath() for %u \n", _sourceUnit->GetGUIDLow()); // make sure navMesh works - we can run on map w/o mmap // check if the start and end point have a .mmtile loaded (can we pass via not loaded tile on the way?) - if (!m_navMesh || !m_navMeshQuery || m_sourceUnit->HasUnitState(UNIT_STATE_IGNORE_PATHFINDING) || + if (!_navMesh || !_navMeshQuery || _sourceUnit->HasUnitState(UNIT_STATE_IGNORE_PATHFINDING) || !HaveTile(start) || !HaveTile(dest)) { BuildShortcut(); - m_type = PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH); + _type = PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH); return true; } - updateFilter(); + UpdateFilter(); // check if destination moved - if not we can optimize something here // we are following old, precalculated path? - float dist = m_sourceUnit->GetObjectSize(); - if (oldDest != Vector3::zero() && inRange(oldDest, dest, dist, dist) && m_pathPoints.size() > 2) + float dist = _sourceUnit->GetObjectSize(); + if (oldDest != Vector3::zero() && InRange(oldDest, dest, dist, dist) && _pathPoints.size() > 2) { // our target is not moving - we just coming closer // we are moving on precalculated path - enjoy the ride sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::CalculatePath:: precalculated path\n"); - m_pathPoints.erase(m_pathPoints.begin()); + _pathPoints.erase(_pathPoints.begin()); return false; } else @@ -101,7 +101,7 @@ bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool fo } } -dtPolyRef PathGenerator::getPathPolyByPosition(const dtPolyRef *polyPath, uint32 polyPathSize, const float* point, float *distance) const +dtPolyRef PathGenerator::GetPathPolyByPosition(dtPolyRef const* polyPath, uint32 polyPathSize, float const* point, float* distance) const { if (!polyPath || !polyPathSize) return INVALID_POLYREF; @@ -113,7 +113,7 @@ dtPolyRef PathGenerator::getPathPolyByPosition(const dtPolyRef *polyPath, uint32 for (uint32 i = 0; i < polyPathSize; ++i) { float closestPoint[VERTEX_SIZE]; - if (DT_SUCCESS != m_navMeshQuery->closestPointOnPoly(polyPath[i], point, closestPoint)) + if (DT_SUCCESS != _navMeshQuery->closestPointOnPoly(polyPath[i], point, closestPoint)) continue; float d = dtVdist2DSqr(point, closestPoint); @@ -134,12 +134,12 @@ dtPolyRef PathGenerator::getPathPolyByPosition(const dtPolyRef *polyPath, uint32 return (minDist2d < 3.0f) ? nearestPoly : INVALID_POLYREF; } -dtPolyRef PathGenerator::getPolyByLocation(const float* point, float *distance) const +dtPolyRef PathGenerator::GetPolyByLocation(float const* point, float* distance) const { // first we check the current path // if the current path doesn't contain the current poly, // we need to use the expensive navMesh.findNearestPoly - dtPolyRef polyRef = getPathPolyByPosition(m_pathPolyRefs, m_polyLength, point, distance); + dtPolyRef polyRef = GetPathPolyByPosition(_pathPolyRefs, _polyLength, point, distance); if (polyRef != INVALID_POLYREF) return polyRef; @@ -148,7 +148,7 @@ dtPolyRef PathGenerator::getPolyByLocation(const float* point, float *distance) // first try with low search box float extents[VERTEX_SIZE] = {3.0f, 5.0f, 3.0f}; // bounds of poly search area float closestPoint[VERTEX_SIZE] = {0.0f, 0.0f, 0.0f}; - dtStatus result = m_navMeshQuery->findNearestPoly(point, extents, &m_filter, &polyRef, closestPoint); + dtStatus result = _navMeshQuery->findNearestPoly(point, extents, &_filter, &polyRef, closestPoint); if (DT_SUCCESS == result && polyRef != INVALID_POLYREF) { *distance = dtVdist(closestPoint, point); @@ -158,7 +158,7 @@ dtPolyRef PathGenerator::getPolyByLocation(const float* point, float *distance) // still nothing .. // try with bigger search box extents[1] = 200.0f; - result = m_navMeshQuery->findNearestPoly(point, extents, &m_filter, &polyRef, closestPoint); + result = _navMeshQuery->findNearestPoly(point, extents, &_filter, &polyRef, closestPoint); if (DT_SUCCESS == result && polyRef != INVALID_POLYREF) { *distance = dtVdist(closestPoint, point); @@ -168,7 +168,7 @@ dtPolyRef PathGenerator::getPolyByLocation(const float* point, float *distance) return INVALID_POLYREF; } -void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos) +void PathGenerator::BuildPolyPath(Vector3 const& startPos, Vector3 const& endPos) { // *** getting start/end poly logic *** @@ -176,8 +176,8 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos float startPoint[VERTEX_SIZE] = {startPos.y, startPos.z, startPos.x}; float endPoint[VERTEX_SIZE] = {endPos.y, endPos.z, endPos.x}; - dtPolyRef startPoly = getPolyByLocation(startPoint, &distToStartPoly); - dtPolyRef endPoly = getPolyByLocation(endPoint, &distToEndPoly); + dtPolyRef startPoly = GetPolyByLocation(startPoint, &distToStartPoly); + dtPolyRef endPoly = GetPolyByLocation(endPoint, &distToEndPoly); // we have a hole in our mesh // make shortcut path and mark it as NOPATH ( with flying and swimming exception ) @@ -186,15 +186,15 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos { sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: (startPoly == 0 || endPoly == 0)\n"); BuildShortcut(); - bool path = m_sourceUnit->GetTypeId() == TYPEID_UNIT && m_sourceUnit->ToCreature()->CanFly(); + bool path = _sourceUnit->GetTypeId() == TYPEID_UNIT && _sourceUnit->ToCreature()->CanFly(); - bool waterPath = m_sourceUnit->GetTypeId() == TYPEID_UNIT && m_sourceUnit->ToCreature()->canSwim(); + bool waterPath = _sourceUnit->GetTypeId() == TYPEID_UNIT && _sourceUnit->ToCreature()->canSwim(); if (waterPath) { // Check both start and end points, if they're both in water, then we can *safely* let the creature move - for (uint32 i = 0; i < m_pathPoints.size(); ++i) + for (uint32 i = 0; i < _pathPoints.size(); ++i) { - ZLiquidStatus status = m_sourceUnit->GetBaseMap()->getLiquidStatus(m_pathPoints[i].x, m_pathPoints[i].y, m_pathPoints[i].z, MAP_ALL_LIQUIDS, NULL); + ZLiquidStatus status = _sourceUnit->GetBaseMap()->getLiquidStatus(_pathPoints[i].x, _pathPoints[i].y, _pathPoints[i].z, MAP_ALL_LIQUIDS, NULL); // One of the points is not in the water, cancel movement. if (status == LIQUID_MAP_NO_WATER) { @@ -204,7 +204,7 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos } } - m_type = (path || waterPath) ? PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH) : PATHFIND_NOPATH; + _type = (path || waterPath) ? PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH) : PATHFIND_NOPATH; return; } @@ -215,12 +215,12 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: farFromPoly distToStartPoly=%.3f distToEndPoly=%.3f\n", distToStartPoly, distToEndPoly); bool buildShotrcut = false; - if (m_sourceUnit->GetTypeId() == TYPEID_UNIT) + if (_sourceUnit->GetTypeId() == TYPEID_UNIT) { - Creature* owner = (Creature*)m_sourceUnit; + Creature* owner = (Creature*)_sourceUnit; Vector3 p = (distToStartPoly > 7.0f) ? startPos : endPos; - if (m_sourceUnit->GetBaseMap()->IsUnderWater(p.x, p.y, p.z)) + if (_sourceUnit->GetBaseMap()->IsUnderWater(p.x, p.y, p.z)) { sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: underWater case\n"); if (owner->canSwim()) @@ -237,20 +237,20 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos if (buildShotrcut) { BuildShortcut(); - m_type = PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH); + _type = PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH); return; } else { float closestPoint[VERTEX_SIZE]; // we may want to use closestPointOnPolyBoundary instead - if (DT_SUCCESS == m_navMeshQuery->closestPointOnPoly(endPoly, endPoint, closestPoint)) + if (DT_SUCCESS == _navMeshQuery->closestPointOnPoly(endPoly, endPoint, closestPoint)) { dtVcopy(endPoint, closestPoint); - setActualEndPosition(Vector3(endPoint[2],endPoint[0],endPoint[1])); + SetActualEndPosition(Vector3(endPoint[2], endPoint[0], endPoint[1])); } - m_type = PATHFIND_INCOMPLETE; + _type = PATHFIND_INCOMPLETE; } } @@ -264,11 +264,11 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos BuildShortcut(); - m_pathPolyRefs[0] = startPoly; - m_polyLength = 1; + _pathPolyRefs[0] = startPoly; + _polyLength = 1; - m_type = farFromPoly ? PATHFIND_INCOMPLETE : PATHFIND_NORMAL; - sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: path type %d\n", m_type); + _type = farFromPoly ? PATHFIND_INCOMPLETE : PATHFIND_NORMAL; + sLog->outDebug(LOG_FILTER_MAPS, "++ BuildPolyPath :: path type %d\n", _type); return; } @@ -279,22 +279,22 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos uint32 pathStartIndex = 0; uint32 pathEndIndex = 0; - if (m_polyLength) + if (_polyLength) { - for (; pathStartIndex < m_polyLength; ++pathStartIndex) + for (; pathStartIndex < _polyLength; ++pathStartIndex) { // here to carch few bugs - ASSERT(m_pathPolyRefs[pathStartIndex] != INVALID_POLYREF); + ASSERT(_pathPolyRefs[pathStartIndex] != INVALID_POLYREF); - if (m_pathPolyRefs[pathStartIndex] == startPoly) + if (_pathPolyRefs[pathStartIndex] == startPoly) { startPolyFound = true; break; } } - for (pathEndIndex = m_polyLength-1; pathEndIndex > pathStartIndex; --pathEndIndex) - if (m_pathPolyRefs[pathEndIndex] == endPoly) + for (pathEndIndex = _polyLength-1; pathEndIndex > pathStartIndex; --pathEndIndex) + if (_pathPolyRefs[pathEndIndex] == endPoly) { endPolyFound = true; break; @@ -309,8 +309,8 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos // our path is a simple subpath case, we have all the data we need // just "cut" it out - m_polyLength = pathEndIndex - pathStartIndex + 1; - memmove(m_pathPolyRefs, m_pathPolyRefs+pathStartIndex, m_polyLength*sizeof(dtPolyRef)); + _polyLength = pathEndIndex - pathStartIndex + 1; + memmove(_pathPolyRefs, _pathPolyRefs + pathStartIndex, _polyLength * sizeof(dtPolyRef)); } else if (startPolyFound && !endPolyFound) { @@ -319,7 +319,7 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos // we are moving on the old path but target moved out // so we have atleast part of poly-path ready - m_polyLength -= pathStartIndex; + _polyLength -= pathStartIndex; // try to adjust the suffix of the path instead of recalculating entire length // at given interval the target cannot get too far from its last location @@ -328,37 +328,37 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos // take ~80% of the original length // TODO : play with the values here - uint32 prefixPolyLength = uint32(m_polyLength*0.8f + 0.5f); - memmove(m_pathPolyRefs, m_pathPolyRefs+pathStartIndex, prefixPolyLength*sizeof(dtPolyRef)); + uint32 prefixPolyLength = uint32(_polyLength * 0.8f + 0.5f); + memmove(_pathPolyRefs, _pathPolyRefs+pathStartIndex, prefixPolyLength * sizeof(dtPolyRef)); - dtPolyRef suffixStartPoly = m_pathPolyRefs[prefixPolyLength-1]; + dtPolyRef suffixStartPoly = _pathPolyRefs[prefixPolyLength-1]; // we need any point on our suffix start poly to generate poly-path, so we need last poly in prefix data float suffixEndPoint[VERTEX_SIZE]; - if (DT_SUCCESS != m_navMeshQuery->closestPointOnPoly(suffixStartPoly, endPoint, suffixEndPoint)) + if (DT_SUCCESS != _navMeshQuery->closestPointOnPoly(suffixStartPoly, endPoint, suffixEndPoint)) { // we can hit offmesh connection as last poly - closestPointOnPoly() don't like that // try to recover by using prev polyref --prefixPolyLength; - suffixStartPoly = m_pathPolyRefs[prefixPolyLength-1]; - if (DT_SUCCESS != m_navMeshQuery->closestPointOnPoly(suffixStartPoly, endPoint, suffixEndPoint)) + suffixStartPoly = _pathPolyRefs[prefixPolyLength-1]; + if (DT_SUCCESS != _navMeshQuery->closestPointOnPoly(suffixStartPoly, endPoint, suffixEndPoint)) { // suffixStartPoly is still invalid, error state BuildShortcut(); - m_type = PATHFIND_NOPATH; + _type = PATHFIND_NOPATH; return; } } // generate suffix uint32 suffixPolyLength = 0; - dtStatus dtResult = m_navMeshQuery->findPath( + dtStatus dtResult = _navMeshQuery->findPath( suffixStartPoly, // start polygon endPoly, // end polygon suffixEndPoint, // start position endPoint, // end position - &m_filter, // polygon search filter - m_pathPolyRefs + prefixPolyLength - 1, // [out] path + &_filter, // polygon search filter + _pathPolyRefs + prefixPolyLength - 1, // [out] path (int*)&suffixPolyLength, MAX_PATH_LENGTH-prefixPolyLength); // max number of polygons in output path @@ -367,13 +367,13 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos // this is probably an error state, but we'll leave it // and hopefully recover on the next Update // we still need to copy our preffix - sLog->outError(LOG_FILTER_MAPS, "%u's Path Build failed: 0 length path", m_sourceUnit->GetGUIDLow()); + sLog->outError(LOG_FILTER_MAPS, "%u's Path Build failed: 0 length path", _sourceUnit->GetGUIDLow()); } - sLog->outDebug(LOG_FILTER_MAPS, "++ m_polyLength=%u prefixPolyLength=%u suffixPolyLength=%u \n",m_polyLength, prefixPolyLength, suffixPolyLength); + sLog->outDebug(LOG_FILTER_MAPS, "++ m_polyLength=%u prefixPolyLength=%u suffixPolyLength=%u \n", _polyLength, prefixPolyLength, suffixPolyLength); // new path = prefix + suffix - overlap - m_polyLength = prefixPolyLength + suffixPolyLength - 1; + _polyLength = prefixPolyLength + suffixPolyLength - 1; } else { @@ -384,33 +384,33 @@ void PathGenerator::BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos // just generate new path // free and invalidate old path data - clear(); + Clear(); - dtStatus dtResult = m_navMeshQuery->findPath( + dtStatus dtResult = _navMeshQuery->findPath( startPoly, // start polygon endPoly, // end polygon startPoint, // start position endPoint, // end position - &m_filter, // polygon search filter - m_pathPolyRefs, // [out] path - (int*)&m_polyLength, + &_filter, // polygon search filter + _pathPolyRefs, // [out] path + (int*)&_polyLength, MAX_PATH_LENGTH); // max number of polygons in output path - if (!m_polyLength || dtResult != DT_SUCCESS) + if (!_polyLength || dtResult != DT_SUCCESS) { // only happens if we passed bad data to findPath(), or navmesh is messed up - sLog->outError(LOG_FILTER_MAPS, "%u's Path Build failed: 0 length path", m_sourceUnit->GetGUIDLow()); + sLog->outError(LOG_FILTER_MAPS, "%u's Path Build failed: 0 length path", _sourceUnit->GetGUIDLow()); BuildShortcut(); - m_type = PATHFIND_NOPATH; + _type = PATHFIND_NOPATH; return; } } // by now we know what type of path we can get - if (m_pathPolyRefs[m_polyLength - 1] == endPoly && !(m_type & PATHFIND_INCOMPLETE)) - m_type = PATHFIND_NORMAL; + if (_pathPolyRefs[_polyLength - 1] == endPoly && !(_type & PATHFIND_INCOMPLETE)) + _type = PATHFIND_NORMAL; else - m_type = PATHFIND_INCOMPLETE; + _type = PATHFIND_INCOMPLETE; // generate the point-path out of our up-to-date poly-path BuildPointPath(startPoint, endPoint); @@ -421,29 +421,29 @@ void PathGenerator::BuildPointPath(const float *startPoint, const float *endPoin float pathPoints[MAX_POINT_PATH_LENGTH*VERTEX_SIZE]; uint32 pointCount = 0; dtStatus dtResult = DT_FAILURE; - if (m_useStraightPath) + if (_useStraightPath) { - dtResult = m_navMeshQuery->findStraightPath( + dtResult = _navMeshQuery->findStraightPath( startPoint, // start position endPoint, // end position - m_pathPolyRefs, // current path - m_polyLength, // lenth of current path + _pathPolyRefs, // current path + _polyLength, // lenth of current path pathPoints, // [out] path corner points NULL, // [out] flags NULL, // [out] shortened path (int*)&pointCount, - m_pointPathLimit); // maximum number of points/polygons to use + _pointPathLimit); // maximum number of points/polygons to use } else { - dtResult = findSmoothPath( + dtResult = FindSmoothPath( startPoint, // start position endPoint, // end position - m_pathPolyRefs, // current path - m_polyLength, // length of current path + _pathPolyRefs, // current path + _polyLength, // length of current path pathPoints, // [out] path corner points (int*)&pointCount, - m_pointPathLimit); // maximum number of points + _pointPathLimit); // maximum number of points } if (pointCount < 2 || dtResult != DT_SUCCESS) @@ -453,81 +453,80 @@ void PathGenerator::BuildPointPath(const float *startPoint, const float *endPoin // TODO : check the exact cases sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::BuildPointPath FAILED! path sized %d returned\n", pointCount); BuildShortcut(); - m_type = PATHFIND_NOPATH; + _type = PATHFIND_NOPATH; return; } - else if (pointCount == m_pointPathLimit) + else if (pointCount == _pointPathLimit) { - sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::BuildPointPath FAILED! path sized %d returned, lower than limit set to %d\n", pointCount, m_pointPathLimit); + sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::BuildPointPath FAILED! path sized %d returned, lower than limit set to %d\n", pointCount, _pointPathLimit); BuildShortcut(); - m_type = PATHFIND_SHORT; + _type = PATHFIND_SHORT; return; } - m_pathPoints.resize(pointCount); + _pathPoints.resize(pointCount); for (uint32 i = 0; i < pointCount; ++i) - m_pathPoints[i] = Vector3(pathPoints[i*VERTEX_SIZE+2], pathPoints[i*VERTEX_SIZE], pathPoints[i*VERTEX_SIZE+1]); + _pathPoints[i] = Vector3(pathPoints[i*VERTEX_SIZE+2], pathPoints[i*VERTEX_SIZE], pathPoints[i*VERTEX_SIZE+1]); NormalizePath(); // first point is always our current location - we need the next one - setActualEndPosition(m_pathPoints[pointCount-1]); + SetActualEndPosition(_pathPoints[pointCount-1]); // force the given destination, if needed - if(m_forceDestination && - (!(m_type & PATHFIND_NORMAL) || !inRange(getEndPosition(), getActualEndPosition(), 1.0f, 1.0f))) + if (_forceDestination && + (!(_type & PATHFIND_NORMAL) || !InRange(GetEndPosition(), GetActualEndPosition(), 1.0f, 1.0f))) { // we may want to keep partial subpath - if(dist3DSqr(getActualEndPosition(), getEndPosition()) < - 0.3f * dist3DSqr(getStartPosition(), getEndPosition())) + if (Dist3DSqr(GetActualEndPosition(), GetEndPosition()) < 0.3f * Dist3DSqr(GetStartPosition(), GetEndPosition())) { - setActualEndPosition(getEndPosition()); - m_pathPoints[m_pathPoints.size()-1] = getEndPosition(); + SetActualEndPosition(GetEndPosition()); + _pathPoints[_pathPoints.size()-1] = GetEndPosition(); } else { - setActualEndPosition(getEndPosition()); + SetActualEndPosition(GetEndPosition()); BuildShortcut(); } - m_type = PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH); + _type = PathType(PATHFIND_NORMAL | PATHFIND_NOT_USING_PATH); } - sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::BuildPointPath path type %d size %d poly-size %d\n", m_type, pointCount, m_polyLength); + sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::BuildPointPath path type %d size %d poly-size %d\n", _type, pointCount, _polyLength); } void PathGenerator::NormalizePath() { - for (uint32 i = 0; i < m_pathPoints.size(); ++i) - m_sourceUnit->UpdateAllowedPositionZ(m_pathPoints[i].x, m_pathPoints[i].y, m_pathPoints[i].z); + for (uint32 i = 0; i < _pathPoints.size(); ++i) + _sourceUnit->UpdateAllowedPositionZ(_pathPoints[i].x, _pathPoints[i].y, _pathPoints[i].z); } void PathGenerator::BuildShortcut() { sLog->outDebug(LOG_FILTER_MAPS, "++ BuildShortcut :: making shortcut\n"); - clear(); + Clear(); // make two point path, our curr pos is the start, and dest is the end - m_pathPoints.resize(2); + _pathPoints.resize(2); // set start and a default next position - m_pathPoints[0] = getStartPosition(); - m_pathPoints[1] = getActualEndPosition(); + _pathPoints[0] = GetStartPosition(); + _pathPoints[1] = GetActualEndPosition(); NormalizePath(); - m_type = PATHFIND_SHORTCUT; + _type = PATHFIND_SHORTCUT; } -void PathGenerator::createFilter() +void PathGenerator::CreateFilter() { uint16 includeFlags = 0; uint16 excludeFlags = 0; - if (m_sourceUnit->GetTypeId() == TYPEID_UNIT) + if (_sourceUnit->GetTypeId() == TYPEID_UNIT) { - Creature* creature = (Creature*)m_sourceUnit; + Creature* creature = (Creature*)_sourceUnit; if (creature->canWalk()) includeFlags |= NAV_GROUND; // walk @@ -535,37 +534,37 @@ void PathGenerator::createFilter() if (creature->canSwim()) includeFlags |= (NAV_WATER | NAV_MAGMA | NAV_SLIME); // swim } - else if (m_sourceUnit->GetTypeId() == TYPEID_PLAYER) + else if (_sourceUnit->GetTypeId() == TYPEID_PLAYER) { // perfect support not possible, just stay 'safe' includeFlags |= (NAV_GROUND | NAV_WATER); } - m_filter.setIncludeFlags(includeFlags); - m_filter.setExcludeFlags(excludeFlags); + _filter.setIncludeFlags(includeFlags); + _filter.setExcludeFlags(excludeFlags); - updateFilter(); + UpdateFilter(); } -void PathGenerator::updateFilter() +void PathGenerator::UpdateFilter() { // allow creatures to cheat and use different movement types if they are moved // forcefully into terrain they can't normally move in - if (m_sourceUnit->IsInWater() || m_sourceUnit->IsUnderWater()) + if (_sourceUnit->IsInWater() || _sourceUnit->IsUnderWater()) { - uint16 includedFlags = m_filter.getIncludeFlags(); - includedFlags |= getNavTerrain(m_sourceUnit->GetPositionX(), - m_sourceUnit->GetPositionY(), - m_sourceUnit->GetPositionZ()); + uint16 includedFlags = _filter.getIncludeFlags(); + includedFlags |= GetNavTerrain(_sourceUnit->GetPositionX(), + _sourceUnit->GetPositionY(), + _sourceUnit->GetPositionZ()); - m_filter.setIncludeFlags(includedFlags); + _filter.setIncludeFlags(includedFlags); } } -NavTerrain PathGenerator::getNavTerrain(float x, float y, float z) +NavTerrain PathGenerator::GetNavTerrain(float x, float y, float z) { LiquidData data; - m_sourceUnit->GetBaseMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &data); + _sourceUnit->GetBaseMap()->getLiquidStatus(x, y, z, MAP_ALL_LIQUIDS, &data); switch (data.type_flags) { @@ -581,16 +580,16 @@ NavTerrain PathGenerator::getNavTerrain(float x, float y, float z) } } -bool PathGenerator::HaveTile(const Vector3 &p) const +bool PathGenerator::HaveTile(Vector3 const& p) const { int tx, ty; float point[VERTEX_SIZE] = {p.y, p.z, p.x}; - m_navMesh->calcTileLoc(point, &tx, &ty); - return (m_navMesh->getTileAt(tx, ty) != NULL); + _navMesh->calcTileLoc(point, &tx, &ty); + return (_navMesh->getTileAt(tx, ty) != NULL); } -uint32 PathGenerator::fixupCorridor(dtPolyRef* path, uint32 npath, uint32 maxPath, dtPolyRef const* visited, uint32 nvisited) +uint32 PathGenerator::FixupCorridor(dtPolyRef* path, uint32 npath, uint32 maxPath, dtPolyRef const* visited, uint32 nvisited) { int32 furthestPath = -1; int32 furthestVisited = -1; @@ -635,8 +634,8 @@ uint32 PathGenerator::fixupCorridor(dtPolyRef* path, uint32 npath, uint32 maxPat return req+size; } -bool PathGenerator::getSteerTarget(const float* startPos, const float* endPos, - float minTargetDist, const dtPolyRef* path, uint32 pathSize, +bool PathGenerator::GetSteerTarget(float const* startPos, float const* endPos, + float minTargetDist, dtPolyRef const* path, uint32 pathSize, float* steerPos, unsigned char& steerPosFlag, dtPolyRef& steerPosRef) { // Find steer target. @@ -645,7 +644,7 @@ bool PathGenerator::getSteerTarget(const float* startPos, const float* endPos, unsigned char steerPathFlags[MAX_STEER_POINTS]; dtPolyRef steerPathPolys[MAX_STEER_POINTS]; uint32 nsteerPath = 0; - dtStatus dtResult = m_navMeshQuery->findStraightPath(startPos, endPos, path, pathSize, + dtStatus dtResult = _navMeshQuery->findStraightPath(startPos, endPos, path, pathSize, steerPath, steerPathFlags, steerPathPolys, (int*)&nsteerPath, MAX_STEER_POINTS); if (!nsteerPath || DT_SUCCESS != dtResult) return false; @@ -656,7 +655,7 @@ bool PathGenerator::getSteerTarget(const float* startPos, const float* endPos, { // Stop at Off-Mesh link or when point is further than slop away. if ((steerPathFlags[ns] & DT_STRAIGHTPATH_OFFMESH_CONNECTION) || - !inRangeYZX(&steerPath[ns*VERTEX_SIZE], startPos, minTargetDist, 1000.0f)) + !InRangeYZX(&steerPath[ns*VERTEX_SIZE], startPos, minTargetDist, 1000.0f)) break; ns++; } @@ -672,8 +671,8 @@ bool PathGenerator::getSteerTarget(const float* startPos, const float* endPos, return true; } -dtStatus PathGenerator::findSmoothPath(const float* startPos, const float* endPos, - const dtPolyRef* polyPath, uint32 polyPathSize, +dtStatus PathGenerator::FindSmoothPath(float const* startPos, float const* endPos, + dtPolyRef const* polyPath, uint32 polyPathSize, float* smoothPath, int* smoothPathSize, uint32 maxSmoothPathSize) { *smoothPathSize = 0; @@ -684,10 +683,10 @@ dtStatus PathGenerator::findSmoothPath(const float* startPos, const float* endPo uint32 npolys = polyPathSize; float iterPos[VERTEX_SIZE], targetPos[VERTEX_SIZE]; - if (DT_SUCCESS != m_navMeshQuery->closestPointOnPolyBoundary(polys[0], startPos, iterPos)) + if (DT_SUCCESS != _navMeshQuery->closestPointOnPolyBoundary(polys[0], startPos, iterPos)) return DT_FAILURE; - if (DT_SUCCESS != m_navMeshQuery->closestPointOnPolyBoundary(polys[npolys-1], endPos, targetPos)) + if (DT_SUCCESS != _navMeshQuery->closestPointOnPolyBoundary(polys[npolys-1], endPos, targetPos)) return DT_FAILURE; dtVcopy(&smoothPath[nsmoothPath*VERTEX_SIZE], iterPos); @@ -702,7 +701,7 @@ dtStatus PathGenerator::findSmoothPath(const float* startPos, const float* endPo unsigned char steerPosFlag; dtPolyRef steerPosRef = INVALID_POLYREF; - if (!getSteerTarget(iterPos, targetPos, SMOOTH_PATH_SLOP, polys, npolys, steerPos, steerPosFlag, steerPosRef)) + if (!GetSteerTarget(iterPos, targetPos, SMOOTH_PATH_SLOP, polys, npolys, steerPos, steerPosFlag, steerPosRef)) break; bool endOfPath = (steerPosFlag & DT_STRAIGHTPATH_END); @@ -727,15 +726,15 @@ dtStatus PathGenerator::findSmoothPath(const float* startPos, const float* endPo dtPolyRef visited[MAX_VISIT_POLY]; uint32 nvisited = 0; - m_navMeshQuery->moveAlongSurface(polys[0], iterPos, moveTgt, &m_filter, result, visited, (int*)&nvisited, MAX_VISIT_POLY); - npolys = fixupCorridor(polys, npolys, MAX_PATH_LENGTH, visited, nvisited); + _navMeshQuery->moveAlongSurface(polys[0], iterPos, moveTgt, &_filter, result, visited, (int*)&nvisited, MAX_VISIT_POLY); + npolys = FixupCorridor(polys, npolys, MAX_PATH_LENGTH, visited, nvisited); - m_navMeshQuery->getPolyHeight(polys[0], result, &result[1]); + _navMeshQuery->getPolyHeight(polys[0], result, &result[1]); result[1] += 0.5f; dtVcopy(iterPos, result); // Handle end of path and off-mesh links when close enough. - if (endOfPath && inRangeYZX(iterPos, steerPos, SMOOTH_PATH_SLOP, 1.0f)) + if (endOfPath && InRangeYZX(iterPos, steerPos, SMOOTH_PATH_SLOP, 1.0f)) { // Reached end of path. dtVcopy(iterPos, targetPos); @@ -746,7 +745,7 @@ dtStatus PathGenerator::findSmoothPath(const float* startPos, const float* endPo } break; } - else if (offMeshConnection && inRangeYZX(iterPos, steerPos, SMOOTH_PATH_SLOP, 1.0f)) + else if (offMeshConnection && InRangeYZX(iterPos, steerPos, SMOOTH_PATH_SLOP, 1.0f)) { // Advance the path up to and over the off-mesh connection. dtPolyRef prevRef = INVALID_POLYREF; @@ -766,7 +765,7 @@ dtStatus PathGenerator::findSmoothPath(const float* startPos, const float* endPo // Handle the connection. float startPos[VERTEX_SIZE], endPos[VERTEX_SIZE]; - if (DT_SUCCESS == m_navMesh->getOffMeshConnectionPolyEndPoints(prevRef, polyRef, startPos, endPos)) + if (DT_SUCCESS == _navMesh->getOffMeshConnectionPolyEndPoints(prevRef, polyRef, startPos, endPos)) { if (nsmoothPath < maxSmoothPathSize) { @@ -775,7 +774,7 @@ dtStatus PathGenerator::findSmoothPath(const float* startPos, const float* endPo } // Move position at the other side of the off-mesh link. dtVcopy(iterPos, endPos); - m_navMeshQuery->getPolyHeight(polys[0], iterPos, &iterPos[1]); + _navMeshQuery->getPolyHeight(polys[0], iterPos, &iterPos[1]); iterPos[1] += 0.5f; } } @@ -794,21 +793,21 @@ dtStatus PathGenerator::findSmoothPath(const float* startPos, const float* endPo return nsmoothPath < MAX_POINT_PATH_LENGTH ? DT_SUCCESS : DT_FAILURE; } -bool PathGenerator::inRangeYZX(const float* v1, const float* v2, float r, float h) const +bool PathGenerator::InRangeYZX(const float* v1, const float* v2, float r, float h) const { const float dx = v2[0] - v1[0]; const float dy = v2[1] - v1[1]; // elevation const float dz = v2[2] - v1[2]; - return (dx*dx + dz*dz) < r*r && fabsf(dy) < h; + return (dx * dx + dz * dz) < r * r && fabsf(dy) < h; } -bool PathGenerator::inRange(const Vector3 &p1, const Vector3 &p2, float r, float h) const +bool PathGenerator::InRange(Vector3 const& p1, Vector3 const& p2, float r, float h) const { - Vector3 d = p1-p2; - return (d.x*d.x + d.y*d.y) < r*r && fabsf(d.z) < h; + Vector3 d = p1 - p2; + return (d.x * d.x + d.y * d.y) < r * r && fabsf(d.z) < h; } -float PathGenerator::dist3DSqr(const Vector3 &p1, const Vector3 &p2) const +float PathGenerator::Dist3DSqr(Vector3 const& p1, Vector3 const& p2) const { - return (p1-p2).squaredLength(); + return (p1 - p2).squaredLength(); } diff --git a/src/server/game/Movement/PathGenerator.h b/src/server/game/Movement/PathGenerator.h index ac163f43be5..a20f900b584 100644 --- a/src/server/game/Movement/PathGenerator.h +++ b/src/server/game/Movement/PathGenerator.h @@ -16,8 +16,8 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef _PATH_INFO_H -#define _PATH_INFO_H +#ifndef _PATH_GENERATOR_H +#define _PATH_GENERATOR_H #include "SharedDefines.h" #include "DetourNavMesh.h" @@ -63,75 +63,72 @@ class PathGenerator bool CalculatePath(float destX, float destY, float destZ, bool forceDest = false); // option setters - use optional - void SetUseStraightPath(bool useStraightPath) { m_useStraightPath = useStraightPath; }; - void setPathLengthLimit(float distance) { m_pointPathLimit = std::min(uint32(distance/SMOOTH_PATH_STEP_SIZE), MAX_POINT_PATH_LENGTH); }; + void SetUseStraightPath(bool useStraightPath) { _useStraightPath = useStraightPath; }; + void SetPathLengthLimit(float distance) { _pointPathLimit = std::min(uint32(distance/SMOOTH_PATH_STEP_SIZE), MAX_POINT_PATH_LENGTH); }; // result getters - Vector3 getStartPosition() const { return m_startPosition; } - Vector3 getEndPosition() const { return m_endPosition; } - Vector3 getActualEndPosition() const { return m_actualEndPosition; } + Vector3 const& GetStartPosition() const { return _startPosition; } + Vector3 const& GetEndPosition() const { return _endPosition; } + Vector3 const& GetActualEndPosition() const { return _actualEndPosition; } - PointsArray& getPath() { return m_pathPoints; } - PathType getPathType() const { return m_type; } + PointsArray& GetPath() { return _pathPoints; } + PathType GetPathType() const { return _type; } private: - dtPolyRef m_pathPolyRefs[MAX_PATH_LENGTH]; // array of detour polygon references - uint32 m_polyLength; // number of polygons in the path + dtPolyRef _pathPolyRefs[MAX_PATH_LENGTH]; // array of detour polygon references + uint32 _polyLength; // number of polygons in the path - PointsArray m_pathPoints; // our actual (x,y,z) path to the target - PathType m_type; // tells what kind of path this is + PointsArray _pathPoints; // our actual (x,y,z) path to the target + PathType _type; // tells what kind of path this is - bool m_useStraightPath; // type of path will be generated - bool m_forceDestination; // when set, we will always arrive at given point - uint32 m_pointPathLimit; // limit point path size; min(this, MAX_POINT_PATH_LENGTH) + bool _useStraightPath; // type of path will be generated + bool _forceDestination; // when set, we will always arrive at given point + uint32 _pointPathLimit; // limit point path size; min(this, MAX_POINT_PATH_LENGTH) - Vector3 m_startPosition; // {x, y, z} of current location - Vector3 m_endPosition; // {x, y, z} of the destination - Vector3 m_actualEndPosition;// {x, y, z} of the closest possible point to given destination + Vector3 _startPosition; // {x, y, z} of current location + Vector3 _endPosition; // {x, y, z} of the destination + Vector3 _actualEndPosition;// {x, y, z} of the closest possible point to given destination - const Unit* const m_sourceUnit; // the unit that is moving - const dtNavMesh* m_navMesh; // the nav mesh - const dtNavMeshQuery* m_navMeshQuery; // the nav mesh query used to find the path + Unit const* const _sourceUnit; // the unit that is moving + dtNavMesh const* _navMesh; // the nav mesh + dtNavMeshQuery const* _navMeshQuery; // the nav mesh query used to find the path - dtQueryFilter m_filter; // use single filter for all movements, update it when needed + dtQueryFilter _filter; // use single filter for all movements, update it when needed - void setStartPosition(Vector3 point) { m_startPosition = point; } - void setEndPosition(Vector3 point) { m_actualEndPosition = point; m_endPosition = point; } - void setActualEndPosition(Vector3 point) { m_actualEndPosition = point; } - + void SetStartPosition(Vector3 Point) { _startPosition = Point; } + void SetEndPosition(Vector3 Point) { _actualEndPosition = Point; _endPosition = Point; } + void SetActualEndPosition(Vector3 Point) { _actualEndPosition = Point; } void NormalizePath(); - void clear() + void Clear() { - m_polyLength = 0; - m_pathPoints.clear(); + _polyLength = 0; + _pathPoints.clear(); } - bool inRange(const Vector3 &p1, const Vector3 &p2, float r, float h) const; - float dist3DSqr(const Vector3 &p1, const Vector3 &p2) const; - bool inRangeYZX(const float* v1, const float* v2, float r, float h) const; + bool InRange(Vector3 const& p1, Vector3 const& p2, float r, float h) const; + float Dist3DSqr(Vector3 const& p1, Vector3 const& p2) const; + bool InRangeYZX(float const* v1, float const* v2, float r, float h) const; - dtPolyRef getPathPolyByPosition(const dtPolyRef *polyPath, uint32 polyPathSize, const float* point, float *distance = NULL) const; - dtPolyRef getPolyByLocation(const float* point, float *distance) const; - bool HaveTile(const Vector3 &p) const; + dtPolyRef GetPathPolyByPosition(dtPolyRef const* polyPath, uint32 polyPathSize, float const* Point, float* Distance = NULL) const; + dtPolyRef GetPolyByLocation(float const* Point, float* Distance) const; + bool HaveTile(Vector3 const& p) const; - void BuildPolyPath(const Vector3 &startPos, const Vector3 &endPos); - void BuildPointPath(const float *startPoint, const float *endPoint); + void BuildPolyPath(Vector3 const& startPos, Vector3 const& endPos); + void BuildPointPath(float const* startPoint, float const* endPoint); void BuildShortcut(); - NavTerrain getNavTerrain(float x, float y, float z); - void createFilter(); - void updateFilter(); + NavTerrain GetNavTerrain(float x, float y, float z); + void CreateFilter(); + void UpdateFilter(); // smooth path aux functions - uint32 fixupCorridor(dtPolyRef* path, uint32 npath, uint32 maxPath, - const dtPolyRef* visited, uint32 nvisited); - bool getSteerTarget(const float* startPos, const float* endPos, float minTargetDist, - const dtPolyRef* path, uint32 pathSize, float* steerPos, + uint32 FixupCorridor(dtPolyRef* path, uint32 npath, uint32 maxPath, dtPolyRef const* visited, uint32 nvisited); + bool GetSteerTarget(float const* startPos, float const* endPos, float minTargetDist, dtPolyRef const* path, uint32 pathSize, float* steerPos, unsigned char& steerPosFlag, dtPolyRef& steerPosRef); - dtStatus findSmoothPath(const float* startPos, const float* endPos, - const dtPolyRef* polyPath, uint32 polyPathSize, + dtStatus FindSmoothPath(float const* startPos, float const* endPos, + dtPolyRef const* polyPath, uint32 polyPathSize, float* smoothPath, int* smoothPathSize, uint32 smoothPathMaxSize); }; diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index 8167ff36de2..2796e208e34 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -154,7 +154,7 @@ namespace Movement { PathGenerator path(unit); path.CalculatePath(dest.x, dest.y, dest.z, forceDestination); - MovebyPath(path.getPath()); + MovebyPath(path.GetPath()); } else { diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 081056c1c79..0cbae416271 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -5157,10 +5157,10 @@ SpellCastResult Spell::CheckCast(bool strict) target->GetContactPoint(m_caster, pos.m_positionX, pos.m_positionY, pos.m_positionZ); target->GetFirstCollisionPosition(pos, CONTACT_DISTANCE, target->GetRelativeAngle(m_caster)); - m_preGeneratedPath.setPathLengthLimit(m_spellInfo->GetMaxRange(true) * 1.5f); + m_preGeneratedPath.SetPathLengthLimit(m_spellInfo->GetMaxRange(true) * 1.5f); m_preGeneratedPath.CalculatePath(pos.m_positionX, pos.m_positionY, pos.m_positionZ + target->GetObjectSize()); - if (m_preGeneratedPath.getPathType() & PATHFIND_SHORT) + if (m_preGeneratedPath.GetPathType() & PATHFIND_SHORT) return SPELL_FAILED_OUT_OF_RANGE; break; diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 1aa2ca0176b..d3b21395725 100755 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -5139,7 +5139,7 @@ void Spell::EffectCharge(SpellEffIndex /*effIndex*/) if (effectHandleMode == SPELL_EFFECT_HANDLE_LAUNCH_TARGET) { - if (m_preGeneratedPath.getPathType() & PATHFIND_NOPATH) + if (m_preGeneratedPath.GetPathType() & PATHFIND_NOPATH) { Position pos; unitTarget->GetContactPoint(m_caster, pos.m_positionX, pos.m_positionY, pos.m_positionZ); From c9eb42f2465e607c5e13425cc913b792a15e937e Mon Sep 17 00:00:00 2001 From: Venugh Date: Thu, 6 Sep 2012 00:36:24 +0200 Subject: [PATCH 057/204] Core/Commands: Implemented mmaps commands. --- .../world/2012_09_06_00_world_command.sql | 9 + src/server/game/Scripting/ScriptLoader.cpp | 2 + src/server/scripts/Commands/CMakeLists.txt | 1 + src/server/scripts/Commands/cs_mmaps.cpp | 293 ++++++++++++++++++ 4 files changed, 305 insertions(+) create mode 100644 sql/updates/world/2012_09_06_00_world_command.sql create mode 100644 src/server/scripts/Commands/cs_mmaps.cpp diff --git a/sql/updates/world/2012_09_06_00_world_command.sql b/sql/updates/world/2012_09_06_00_world_command.sql new file mode 100644 index 00000000000..e60c1644e05 --- /dev/null +++ b/sql/updates/world/2012_09_06_00_world_command.sql @@ -0,0 +1,9 @@ +DELETE FROM `command` WHERE `name`='mmap' OR `name` LIKE 'mmap%'; +INSERT INTO `command` (`name`, `security`, `help`) VALUES +('mmap', 3, 'Syntax: Syntax: .mmaps $subcommand Type .mmaps to see the list of possible subcommands or .help mmaps $subcommand to see info on subcommands'), +('mmap path', 3, 'Syntax: .mmap path to calculate and show a path to current select unit'), +('mmap loc', 3, 'Syntax: .mmap loc to print on which tile one is'), +('mmap loadedtiles', 3, 'Syntax: .mmap loadedtiles to show which tiles are currently loaded'), +('mmap stats', 3, 'Syntax: .mmap stats to show information about current state of mmaps'), +('mmap testarea', 3, 'Syntax: .mmap testarea to calculate paths for all nearby npcs to player'); + diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index fc56106ab6f..6442a35f0c3 100755 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -75,6 +75,7 @@ void AddSC_tele_commandscript(); void AddSC_ticket_commandscript(); void AddSC_titles_commandscript(); void AddSC_wp_commandscript(); +void AddSC_mmaps_commandscript(); #ifdef SCRIPTS //world @@ -693,6 +694,7 @@ void AddCommandScripts() AddSC_ticket_commandscript(); AddSC_titles_commandscript(); AddSC_wp_commandscript(); + AddSC_mmaps_commandscript(); } void AddWorldScripts() diff --git a/src/server/scripts/Commands/CMakeLists.txt b/src/server/scripts/Commands/CMakeLists.txt index 177b3a479f5..e799cf20633 100644 --- a/src/server/scripts/Commands/CMakeLists.txt +++ b/src/server/scripts/Commands/CMakeLists.txt @@ -41,6 +41,7 @@ set(scripts_STAT_SRCS Commands/cs_server.cpp Commands/cs_titles.cpp Commands/cs_wp.cpp + Commands/cs_mmaps.cpp # Commands/cs_pdump.cpp # Commands/cs_channel.cpp # Commands/cs_pet.cpp diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp new file mode 100644 index 00000000000..c1fc4d1a5e9 --- /dev/null +++ b/src/server/scripts/Commands/cs_mmaps.cpp @@ -0,0 +1,293 @@ +/* + * Copyright (C) 2008-2012 TrinityCore + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +/** +* @file cs_mmaps.cpp +* @brief .mmap related commands +* +* This file contains the CommandScripts for all +* mmap sub-commands +*/ + +#include "ScriptMgr.h" +#include "Chat.h" +#include "ObjectMgr.h" +#include "Player.h" +#include "PointMovementGenerator.h" +#include "PathGenerator.h" +#include "MMapFactory.h" +#include "Map.h" +#include "TargetedMovementGenerator.h" + +class mmaps_commandscript : public CommandScript +{ +public: + mmaps_commandscript() : CommandScript("mmaps_commandscript") { } + + ChatCommand* GetCommands() const + { + static ChatCommand mmapCommandTable[] = + { + { "path", SEC_ADMINISTRATOR, false, &HandleMmapPathCommand, "", NULL }, + { "loc", SEC_ADMINISTRATOR, false, &HandleMmapLocCommand, "", NULL }, + { "loadedtiles", SEC_ADMINISTRATOR, false, &HandleMmapLoadedTilesCommand, "", NULL }, + { "stats", SEC_ADMINISTRATOR, false, &HandleMmapStatsCommand, "", NULL }, + { "testarea", SEC_ADMINISTRATOR, false, &HandleMmapTestArea, "", NULL }, + { NULL, 0, false, NULL, "", NULL } + }; + + static ChatCommand commandTable[] = + { + { "mmap", SEC_ADMINISTRATOR, true, NULL, "", mmapCommandTable }, + { NULL, 0, false, NULL, "", NULL } + }; + return commandTable; + } + + static bool HandleMmapPathCommand(ChatHandler* handler, char const* args) + { + if (!MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(handler->GetSession()->GetPlayer()->GetMapId())) + { + handler->PSendSysMessage("NavMesh not loaded for current map."); + return true; + } + + handler->PSendSysMessage("mmap path:"); + + // units + Player* player = handler->GetSession()->GetPlayer(); + Unit* target = handler->getSelectedUnit(); + if (!player || !target) + { + handler->PSendSysMessage("Invalid target/source selection."); + return true; + } + + char* para = strtok((char*)args, " "); + + bool useStraightPath = false; + if (para && strcmp(para, "true") == 0) + useStraightPath = true; + + // unit locations + float x, y, z; + player->GetPosition(x, y, z); + + // path + PathGenerator path(target); + path.SetUseStraightPath(useStraightPath); + path.CalculatePath(x, y, z); + + PointsArray pointPath = path.GetPath(); + handler->PSendSysMessage("%s's path to %s:", target->GetName(), player->GetName()); + handler->PSendSysMessage("Building %s", useStraightPath ? "StraightPath" : "SmoothPath"); + handler->PSendSysMessage("length %i type %u", pointPath.size(), path.GetPathType()); + + Vector3 start = path.GetStartPosition(); + Vector3 end = path.GetEndPosition(); + Vector3 actualEnd = path.GetActualEndPosition(); + + handler->PSendSysMessage("start (%.3f, %.3f, %.3f)", start.x, start.y, start.z); + handler->PSendSysMessage("end (%.3f, %.3f, %.3f)", end.x, end.y, end.z); + handler->PSendSysMessage("actual end (%.3f, %.3f, %.3f)", actualEnd.x, actualEnd.y, actualEnd.z); + + if (!player->isGameMaster()) + handler->PSendSysMessage("Enable GM mode to see the path points."); + + // this entry visible only to GM's with "gm on" + static const uint32 WAYPOINT_NPC_ENTRY = 1; + for (uint32 i = 0; i < pointPath.size(); ++i) + player->SummonCreature(WAYPOINT_NPC_ENTRY, pointPath[i].x, pointPath[i].y, pointPath[i].z, 0, TEMPSUMMON_TIMED_DESPAWN, 9000); + + return true; + } + + static bool HandleMmapLocCommand(ChatHandler* handler, const char* args) + { + handler->PSendSysMessage("mmap tileloc:"); + + // grid tile location + Player* player = handler->GetSession()->GetPlayer(); + + int32 gx = 32 - player->GetPositionX() / SIZE_OF_GRIDS; + int32 gy = 32 - player->GetPositionY() / SIZE_OF_GRIDS; + + handler->PSendSysMessage("%03u%02i%02i.mmtile", player->GetMapId(), gy, gx); + handler->PSendSysMessage("gridloc [%i,%i]", gx, gy); + + // calculate navmesh tile location + dtNavMesh const* navmesh = MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(handler->GetSession()->GetPlayer()->GetMapId()); + dtNavMeshQuery const* navmeshquery = MMAP::MMapFactory::createOrGetMMapManager()->GetNavMeshQuery(handler->GetSession()->GetPlayer()->GetMapId(), player->GetInstanceId()); + if (!navmesh || !navmeshquery) + { + handler->PSendSysMessage("NavMesh not loaded for current map."); + return true; + } + + float const* min = navmesh->getParams()->orig; + float x, y, z; + player->GetPosition(x, y, z); + float location[VERTEX_SIZE] = {y, z, x}; + float extents[VERTEX_SIZE] = {3.0f, 5.0f, 3.0f}; + + int32 tilex = int32((y - min[0]) / SIZE_OF_GRIDS); + int32 tiley = int32((x - min[2]) / SIZE_OF_GRIDS); + + handler->PSendSysMessage("Calc [%02i,%02i]", tilex, tiley); + + // navmesh poly -> navmesh tile location + dtQueryFilter filter = dtQueryFilter(); + dtPolyRef polyRef = INVALID_POLYREF; + navmeshquery->findNearestPoly(location, extents, &filter, &polyRef, NULL); + + if (polyRef == INVALID_POLYREF) + handler->PSendSysMessage("Dt [??,??] (invalid poly, probably no tile loaded)"); + else + { + dtMeshTile const* tile; + dtPoly const* poly; + navmesh->getTileAndPolyByRef(polyRef, &tile, &poly); + if (tile) + handler->PSendSysMessage("Dt [%02i,%02i]", tile->header->x, tile->header->y); + else + handler->PSendSysMessage("Dt [??,??] (no tile loaded)"); + } + + return true; + } + + static bool HandleMmapLoadedTilesCommand(ChatHandler* handler, const char* args) + { + uint32 mapid = handler->GetSession()->GetPlayer()->GetMapId(); + dtNavMesh const* navmesh = MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(mapid); + dtNavMeshQuery const* navmeshquery = MMAP::MMapFactory::createOrGetMMapManager()->GetNavMeshQuery(mapid, handler->GetSession()->GetPlayer()->GetInstanceId()); + if (!navmesh || !navmeshquery) + { + handler->PSendSysMessage("NavMesh not loaded for current map."); + return true; + } + + handler->PSendSysMessage("mmap loadedtiles:"); + + for (int32 i = 0; i < navmesh->getMaxTiles(); ++i) + { + dtMeshTile const* tile = navmesh->getTile(i); + if (!tile || !tile->header) + continue; + + handler->PSendSysMessage("[%02i,%02i]", tile->header->x, tile->header->y); + } + + return true; + } + + static bool HandleMmapStatsCommand(ChatHandler* handler, const char* args) + { + uint32 mapId = handler->GetSession()->GetPlayer()->GetMapId(); + handler->PSendSysMessage("mmap stats:"); + handler->PSendSysMessage(" global mmap pathfinding is %sabled", MMAP::MMapFactory::IsPathfindingEnabled(mapId) ? "en" : "dis"); + + MMAP::MMapManager* manager = MMAP::MMapFactory::createOrGetMMapManager(); + handler->PSendSysMessage(" %u maps loaded with %u tiles overall", manager->getLoadedMapsCount(), manager->getLoadedTilesCount()); + + dtNavMesh const* navmesh = manager->GetNavMesh(handler->GetSession()->GetPlayer()->GetMapId()); + if (!navmesh) + { + handler->PSendSysMessage("NavMesh not loaded for current map."); + return true; + } + + uint32 tileCount = 0; + uint32 nodeCount = 0; + uint32 polyCount = 0; + uint32 vertCount = 0; + uint32 triCount = 0; + uint32 triVertCount = 0; + uint32 dataSize = 0; + for (int32 i = 0; i < navmesh->getMaxTiles(); ++i) + { + dtMeshTile const* tile = navmesh->getTile(i); + if (!tile || !tile->header) + continue; + + tileCount++; + nodeCount += tile->header->bvNodeCount; + polyCount += tile->header->polyCount; + vertCount += tile->header->vertCount; + triCount += tile->header->detailTriCount; + triVertCount += tile->header->detailVertCount; + dataSize += tile->dataSize; + } + + handler->PSendSysMessage("Navmesh stats:"); + handler->PSendSysMessage(" %u tiles loaded", tileCount); + handler->PSendSysMessage(" %u BVTree nodes", nodeCount); + handler->PSendSysMessage(" %u polygons (%u vertices)", polyCount, vertCount); + handler->PSendSysMessage(" %u triangles (%u vertices)", triCount, triVertCount); + handler->PSendSysMessage(" %.2f MB of data (not including pointers)", ((float)dataSize / sizeof(unsigned char)) / 1048576); + + return true; + } + + static bool HandleMmapTestArea(ChatHandler* handler, const char* args) + { + float radius = 40.0f; + WorldObject* object = handler->GetSession()->GetPlayer(); + + CellCoord pair(Trinity::ComputeCellCoord(object->GetPositionX(), object->GetPositionY()) ); + Cell cell(pair); + cell.SetNoCreate(); + + std::list creatureList; + + Trinity::AnyUnitInObjectRangeCheck go_check(object, radius); + Trinity::CreatureListSearcher go_search(object, creatureList, go_check); + TypeContainerVisitor, GridTypeMapContainer> go_visit(go_search); + + // Get Creatures + cell.Visit(pair, go_visit, *(object->GetMap()), *object, radius); + + if (!creatureList.empty()) + { + handler->PSendSysMessage("Found %i Creatures.", creatureList.size()); + + uint32 paths = 0; + uint32 uStartTime = getMSTime(); + + float gx, gy, gz; + object->GetPosition(gx, gy, gz); + for (std::list::iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr) + { + PathGenerator path(*itr); + path.CalculatePath(gx, gy, gz); + ++paths; + } + + uint32 uPathLoadTime = getMSTimeDiff(uStartTime, getMSTime()); + handler->PSendSysMessage("Generated %i paths in %i ms", paths, uPathLoadTime); + } + else + handler->PSendSysMessage("No creatures in %f yard range.", radius); + + return true; + } +}; + +void AddSC_mmaps_commandscript() +{ + new mmaps_commandscript(); +} \ No newline at end of file From 5617921a55973018e1c5fd9c3307be875cf321b6 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Thu, 6 Sep 2012 05:27:14 +0300 Subject: [PATCH 058/204] compile fix --- .../Movement/MovementGenerators/TargetedMovementGenerator.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h index 0ca688fb0df..064e5bfa1a2 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h @@ -52,7 +52,7 @@ class TargetedMovementGeneratorMedium : public MovementGeneratorMedium< T, D >, void unitSpeedChanged() { i_recalculateTravel = true; } void UpdateFinalDistance(float fDistance); - bool IsReachable() const { return (i_path) ? (i_path->getPathType() & PATHFIND_NORMAL) : true; } + bool IsReachable() const { return (i_path) ? (i_path->GetPathType() & PATHFIND_NORMAL) : true; } protected: void _setTargetLocation(T*); From a2d533752c447a2bf4ef7b784e8abdbe3f6d6904 Mon Sep 17 00:00:00 2001 From: kaelima Date: Fri, 7 Sep 2012 04:21:11 +0200 Subject: [PATCH 059/204] Core/MMaps: Add several safety checks to confirm a valid path generation. - Address some issues in TargetMovementGenerator. Thanks Chevron --- .../collision/Management/MMapManager.cpp | 2 +- src/server/game/Entities/Object/Object.cpp | 2 +- .../ConfusedMovementGenerator.cpp | 4 +- .../FleeingMovementGenerator.cpp | 4 +- .../TargetedMovementGenerator.cpp | 41 +++++++++---------- src/server/game/Movement/PathGenerator.cpp | 8 +++- .../game/Movement/Spline/MoveSplineInit.cpp | 20 +++++---- src/server/game/Spells/Spell.cpp | 5 ++- 8 files changed, 46 insertions(+), 40 deletions(-) diff --git a/src/server/collision/Management/MMapManager.cpp b/src/server/collision/Management/MMapManager.cpp index 8e6e2a3b6b4..c7dea358d92 100644 --- a/src/server/collision/Management/MMapManager.cpp +++ b/src/server/collision/Management/MMapManager.cpp @@ -295,4 +295,4 @@ namespace MMAP return mmap->navMeshQueries[instanceId]; } -} \ No newline at end of file +} diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index fe5d32b9b95..2205efa8724 100755 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2780,7 +2780,7 @@ void WorldObject::MovePosition(Position &pos, float dist, float angle) desty = pos.m_positionY + dist * sin(angle); // Prevent invalid coordinates here, position is unchanged - if (!Trinity::IsValidMapCoord(destx, desty)) + if (!Trinity::IsValidMapCoord(destx, desty, pos.m_positionZ)) { sLog->outFatal(LOG_FILTER_GENERAL, "WorldObject::MovePosition invalid coordinates X: %f and Y: %f were passed!", destx, desty); return; diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index 32c6ec3858d..4c269a1024a 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -78,8 +78,8 @@ bool ConfusedMovementGenerator::Update(T* unit, const uint32& diff) PathGenerator path(unit); path.SetPathLengthLimit(30.0f); - path.CalculatePath(x, y, z); - if (path.GetPathType() & PATHFIND_NOPATH) + bool result = path.CalculatePath(x, y, z); + if (!result || path.GetPathType() & PATHFIND_NOPATH) { i_nextMoveTime.Reset(urand(800, 1000)); return true; diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index 8f4d78b34b1..29466ab9670 100755 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -45,8 +45,8 @@ void FleeingMovementGenerator::_setTargetLocation(T* owner) PathGenerator path(owner); path.SetPathLengthLimit(30.0f); - path.CalculatePath(x, y, z); - if (path.GetPathType() & PATHFIND_NOPATH) + bool result = path.CalculatePath(x, y, z); + if (!result || path.GetPathType() & PATHFIND_NOPATH) { i_nextCheckTime.Reset(urand(1000, 1500)); return; diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 4a8d15b8079..145251ec4aa 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -35,30 +35,28 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner) if (owner->HasUnitState(UNIT_STATE_NOT_MOVE)) return; + if (owner->GetTypeId() == TYPEID_UNIT && !i_target->isInAccessiblePlaceFor(owner->ToCreature())) + return; + float x, y, z; - //! Following block of code deleted by MrSmite in issue 4891 - //! Code kept for learning and diagnostical purposes -// -// if (i_offset && i_target->IsWithinDistInMap(&owner,2*i_offset)) -// { -// if (!owner.movespline->Finalized()) -// return; -// -// owner.GetPosition(x, y, z); -// } -// else + if (!i_offset) { - if (i_target->IsWithinMeleeRange(owner)) - return; + float dist = 0.0f; - // to nearest random contact position - i_target->GetRandomContactPoint(owner, x, y, z, 0, MELEE_RANGE - 0.5f); + if (owner->getVictim() && owner->getVictim()->GetGUID() == i_target->GetGUID()) + dist = owner->GetFloatValue(UNIT_FIELD_COMBATREACH) + i_target->GetFloatValue(UNIT_FIELD_COMBATREACH) - i_target->GetObjectSize() - owner->GetObjectSize() - 1.0f; + + if (dist < 0.5f) + dist = 0.5f; + + if (owner->IsWithinLOSInMap(owner->getVictim())) + i_target->GetContactPoint(owner, x, y, z, dist); + else + i_target->GetPosition(x, y, z); } else { - if (i_target->IsWithinDistInMap(owner, i_offset + 1.0f)) - return; // to at i_offset distance from target and i_angle from target facing i_target->GetClosePoint(x, y, z, owner->GetObjectSize(), i_offset, i_angle); } @@ -69,8 +67,9 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner) // allow pets following their master to cheat while generating paths bool forceDest = (owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->isPet() && owner->HasUnitState(UNIT_STATE_FOLLOW)); - i_path->CalculatePath(x, y, z, forceDest); - if (i_path->GetPathType() & PATHFIND_NOPATH) + + bool result = i_path->CalculatePath(x, y, z, forceDest); + if (!result || i_path->GetPathType() & PATHFIND_NOPATH) return; D::_addUnitStateMove(owner); @@ -117,7 +116,7 @@ bool TargetedMovementGeneratorMedium::Update(T* owner, const uint32& time_d return false; if (!owner || !owner->isAlive()) - return true; + return false; if (owner->HasUnitState(UNIT_STATE_NOT_MOVE)) { @@ -154,7 +153,7 @@ bool TargetedMovementGeneratorMedium::Update(T* owner, const uint32& time_d else targetMoved = !i_target->IsWithinDist2d(dest.x, dest.y, allowed_dist); - if (targetMoved) + if (targetMoved || !owner->IsWithinLOSInMap(owner->getVictim())) _setTargetLocation(owner); } diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index 165cc282e3a..68dd8f4057d 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -58,8 +58,12 @@ bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool fo if (!Trinity::IsValidMapCoord(destX, destY, destZ) || !Trinity::IsValidMapCoord(x, y, z)) return false; + float newDestZ = _sourceUnit->GetBaseMap()->GetHeight(_sourceUnit->GetPhaseMask(), x, y, z, true, MAX_FALL_DISTANCE); + if (newDestZ >= INVALID_HEIGHT) + return false; + Vector3 oldDest = GetEndPosition(); - Vector3 dest(destX, destY, destZ); + Vector3 dest(destX, destY, newDestZ); SetEndPosition(dest); Vector3 start(x, y, z); @@ -124,7 +128,7 @@ dtPolyRef PathGenerator::GetPathPolyByPosition(dtPolyRef const* polyPath, uint32 minDist3d = dtVdistSqr(point, closestPoint); } - if(minDist2d < 1.0f) // shortcut out - close enough for us + if (minDist2d < 1.0f) // shortcut out - close enough for us break; } diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index 2796e208e34..68201fcf275 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -153,16 +153,18 @@ namespace Movement if (generatePath) { PathGenerator path(unit); - path.CalculatePath(dest.x, dest.y, dest.z, forceDestination); - MovebyPath(path.GetPath()); - } - else - { - args.path_Idx_offset = 0; - args.path.resize(2); - TransportPathTransform transform(unit, args.TransformForTransport); - args.path[1] = transform(dest); + bool result = path.CalculatePath(dest.x, dest.y, dest.z, forceDestination); + if (result && path.GetPathType() & ~PATHFIND_NOPATH) + { + MovebyPath(path.GetPath()); + return; + } } + + args.path_Idx_offset = 0; + args.path.resize(2); + TransportPathTransform transform(unit, args.TransformForTransport); + args.path[1] = transform(dest); } Vector3 TransportPathTransform::operator()(Vector3 input) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index d9a3e6a4b3c..a701b9d143e 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -5162,10 +5162,11 @@ SpellCastResult Spell::CheckCast(bool strict) target->GetFirstCollisionPosition(pos, CONTACT_DISTANCE, target->GetRelativeAngle(m_caster)); m_preGeneratedPath.SetPathLengthLimit(m_spellInfo->GetMaxRange(true) * 1.5f); - m_preGeneratedPath.CalculatePath(pos.m_positionX, pos.m_positionY, pos.m_positionZ + target->GetObjectSize()); - + bool result = m_preGeneratedPath.CalculatePath(pos.m_positionX, pos.m_positionY, pos.m_positionZ + target->GetObjectSize()); if (m_preGeneratedPath.GetPathType() & PATHFIND_SHORT) return SPELL_FAILED_OUT_OF_RANGE; + else if (!result) + return SPELL_FAILED_NOPATH; break; } From 2e80503283b8cb15f95dda6bd6a6da973e0b8501 Mon Sep 17 00:00:00 2001 From: kaelima Date: Fri, 7 Sep 2012 12:54:38 +0200 Subject: [PATCH 060/204] Typo --- src/server/game/Movement/PathGenerator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index 68dd8f4057d..6f505de25cd 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -59,7 +59,7 @@ bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool fo return false; float newDestZ = _sourceUnit->GetBaseMap()->GetHeight(_sourceUnit->GetPhaseMask(), x, y, z, true, MAX_FALL_DISTANCE); - if (newDestZ >= INVALID_HEIGHT) + if (newDestZ <= INVALID_HEIGHT) return false; Vector3 oldDest = GetEndPosition(); From 8966347a416b9e2fba43bc3ff7043d946cfe10c4 Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 9 Sep 2012 15:14:02 -0500 Subject: [PATCH 061/204] Core/MMaps: Added a little workaround to prevent the crash. ref issue #7631 --- src/server/game/Movement/PathGenerator.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index 6f505de25cd..9635399e71f 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -584,12 +584,19 @@ NavTerrain PathGenerator::GetNavTerrain(float x, float y, float z) } } -bool PathGenerator::HaveTile(Vector3 const& p) const +bool PathGenerator::HaveTile(const Vector3& p) const { - int tx, ty; + int tx = -1, ty = -1; float point[VERTEX_SIZE] = {p.y, p.z, p.x}; _navMesh->calcTileLoc(point, &tx, &ty); + + /// Workaround + /// For some reason, often the tx and ty variables wont get a valid value + /// Use this check to prevent getting negative tile coords and crashing on getTileAt + if (tx < 0 || ty < 0) + return false; + return (_navMesh->getTileAt(tx, ty) != NULL); } From f237a57f51c0473bda90bae7a06bd5b9c187754b Mon Sep 17 00:00:00 2001 From: kaelima Date: Mon, 10 Sep 2012 13:24:01 +0200 Subject: [PATCH 062/204] Fix compile. Closes #7718 --- src/server/game/Movement/Spline/MoveSplineInit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index 4f6865405ae..edef9cfed43 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -174,7 +174,7 @@ namespace Movement if (_transformForTransport) { float unused = 0.0f; - if (TransportBase* transport = _owner.GetDirectTransport()) + if (TransportBase* transport = _owner->GetDirectTransport()) transport->CalculatePassengerOffset(input.x, input.y, input.z, unused); } From 33994351fff5f7ebad7ae75a5dbadd70c6f26413 Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 25 Sep 2012 12:22:02 -0500 Subject: [PATCH 063/204] Core/Configs: Removed vmap.petLOS option in the worldserver config, it was intended to somewhat fix the lack of pathfinding, its not needed anymore. Closes #7817 --- src/server/game/Handlers/PetHandler.cpp | 7 ------- src/server/game/World/World.cpp | 4 +--- src/server/game/World/World.h | 1 - src/server/worldserver/worldserver.conf.dist | 8 -------- 4 files changed, 1 insertion(+), 19 deletions(-) diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index 3501b3bc068..f8cb0344a96 100755 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -194,13 +194,6 @@ void WorldSession::HandlePetActionHelper(Unit* pet, uint64 guid1, uint16 spellid if (!owner->IsValidAttackTarget(TargetUnit)) return; - // Not let attack through obstructions - if (sWorld->getBoolConfig(CONFIG_PET_LOS)) - { - if (!pet->IsWithinLOSInMap(TargetUnit)) - return; - } - pet->ClearUnitState(UNIT_STATE_FOLLOW); // This is true if pet has no target or has target but targets differs. if (pet->getVictim() != TargetUnit || (pet->getVictim() == TargetUnit && !pet->GetCharmInfo()->IsCommandAttack())) diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 72b81b671b0..e9d727e072a 100755 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1133,7 +1133,6 @@ void World::LoadConfigSettings(bool reload) bool enableIndoor = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", true); bool enableLOS = ConfigMgr::GetBoolDefault("vmap.enableLOS", true); bool enableHeight = ConfigMgr::GetBoolDefault("vmap.enableHeight", true); - bool enablePetLOS = ConfigMgr::GetBoolDefault("vmap.petLOS", true); std::string ignoreSpellIds = ConfigMgr::GetStringDefault("vmap.ignoreSpellIds", ""); if (!enableHeight) @@ -1142,11 +1141,10 @@ void World::LoadConfigSettings(bool reload) VMAP::VMapFactory::createOrGetVMapManager()->setEnableLineOfSightCalc(enableLOS); VMAP::VMapFactory::createOrGetVMapManager()->setEnableHeightCalc(enableHeight); VMAP::VMapFactory::preventSpellsFromBeingTestedForLoS(ignoreSpellIds.c_str()); - sLog->outInfo(LOG_FILTER_SERVER_LOADING, "VMap support included. LineOfSight:%i, getHeight:%i, indoorCheck:%i PetLOS:%i", enableLOS, enableHeight, enableIndoor, enablePetLOS); + sLog->outInfo(LOG_FILTER_SERVER_LOADING, "VMap support included. LineOfSight:%i, getHeight:%i, indoorCheck:%i", enableLOS, enableHeight, enableIndoor); sLog->outInfo(LOG_FILTER_SERVER_LOADING, "VMap data directory is: %svmaps", m_dataPath.c_str()); m_int_configs[CONFIG_MAX_WHO] = ConfigMgr::GetIntDefault("MaxWhoListReturns", 49); - m_bool_configs[CONFIG_PET_LOS] = ConfigMgr::GetBoolDefault("vmap.petLOS", true); m_bool_configs[CONFIG_START_ALL_SPELLS] = ConfigMgr::GetBoolDefault("PlayerStart.AllSpells", false); if (m_bool_configs[CONFIG_START_ALL_SPELLS]) sLog->outWarn(LOG_FILTER_SERVER_LOADING, "PlayerStart.AllSpells enabled - may not function as intended!"); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index f75745dac9b..e63ffa878ce 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -138,7 +138,6 @@ enum WorldBoolConfigs CONFIG_ARENA_LOG_EXTENDED_INFO, CONFIG_OFFHAND_CHECK_AT_SPELL_UNLEARN, CONFIG_VMAP_INDOOR_CHECK, - CONFIG_PET_LOS, CONFIG_START_ALL_SPELLS, CONFIG_START_ALL_EXPLORED, CONFIG_START_ALL_REP, diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index e70ef00e94c..14d772aa79a 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -303,14 +303,6 @@ vmap.enableHeight = 1 vmap.ignoreSpellIds = "7720" -# -# vmap.petLOS -# Description: Check line of sight for pets, to avoid them attacking through walls. -# Default: 1 - (Enabled, each pet attack will be checked for line of sight - not recommended if mmaps is enabled!) -# 0 - (Disabled, somewhat less CPU usage) - -vmap.petLOS = 0 - # # vmap.enableIndoorCheck # Description: VMap based indoor check to remove outdoor-only auras (mounts etc.). From bb6ce2b2c9018873127a352a39737ed4df7f7d46 Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 25 Sep 2012 12:37:25 -0500 Subject: [PATCH 064/204] Core/MMaps: Only unload the navMeshQuery when instances are unloaded, suggestion by @Vlad852 closes #7631 --- src/server/game/Maps/Map.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 50218c8ba83..ae192f16080 100755 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -72,7 +72,6 @@ Map::~Map() sScriptMgr->DecreaseScheduledScriptCount(m_scriptSchedule.size()); MMAP::MMapFactory::createOrGetMMapManager()->unloadMapInstance(GetId(), i_InstanceId); - MMAP::MMapFactory::createOrGetMMapManager()->unloadMap(GetId()); } bool Map::ExistMap(uint32 mapid, int gx, int gy) From 50f833a0086c9f7f80152b907c77acb19d352896 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 28 Sep 2012 06:59:31 -0500 Subject: [PATCH 065/204] Tools: Added an experimental tool (still WIP) to replace the current mmaps generator --- cmake/options.cmake | 2 +- src/tools/CMakeLists.txt | 1 + src/tools/mesh_extractor/ADT.h | 26 + src/tools/mesh_extractor/CMakeLists.txt | 62 +++ src/tools/mesh_extractor/Cache.h | 44 ++ src/tools/mesh_extractor/Chunk.cpp | 31 ++ src/tools/mesh_extractor/Chunk.h | 20 + src/tools/mesh_extractor/ChunkedData.cpp | 63 +++ src/tools/mesh_extractor/ChunkedData.h | 20 + src/tools/mesh_extractor/Constants.h | 33 ++ src/tools/mesh_extractor/ContinentBuilder.cpp | 11 + src/tools/mesh_extractor/ContinentBuilder.h | 15 + src/tools/mesh_extractor/DoodadHandler.cpp | 99 ++++ src/tools/mesh_extractor/DoodadHandler.h | 51 ++ src/tools/mesh_extractor/Geometry.cpp | 102 ++++ src/tools/mesh_extractor/Geometry.h | 21 + src/tools/mesh_extractor/LiquidHandler.cpp | 1 + src/tools/mesh_extractor/LiquidHandler.h | 17 + src/tools/mesh_extractor/MPQ.cpp | 117 +++++ src/tools/mesh_extractor/MPQ.h | 88 ++++ src/tools/mesh_extractor/MPQManager.cpp | 58 ++ src/tools/mesh_extractor/MPQManager.h | 24 + src/tools/mesh_extractor/MapChunk.cpp | 77 +++ src/tools/mesh_extractor/MapChunk.h | 25 + src/tools/mesh_extractor/MeshExtractor.cpp | 34 ++ src/tools/mesh_extractor/Model.cpp | 49 ++ src/tools/mesh_extractor/Model.h | 21 + .../mesh_extractor/ObjectDataHandler.cpp | 21 + src/tools/mesh_extractor/ObjectDataHandler.h | 15 + src/tools/mesh_extractor/TileBuilder.cpp | 37 ++ src/tools/mesh_extractor/TileBuilder.h | 22 + src/tools/mesh_extractor/Utils.cpp | 163 ++++++ src/tools/mesh_extractor/Utils.h | 497 ++++++++++++++++++ src/tools/mesh_extractor/WDT.cpp | 55 ++ src/tools/mesh_extractor/WDT.h | 27 + src/tools/mesh_extractor/WorldModelGroup.cpp | 122 +++++ src/tools/mesh_extractor/WorldModelGroup.h | 33 ++ .../mesh_extractor/WorldModelHandler.cpp | 190 +++++++ src/tools/mesh_extractor/WorldModelHandler.h | 42 ++ src/tools/mesh_extractor/WorldModelRoot.cpp | 74 +++ src/tools/mesh_extractor/WorldModelRoot.h | 26 + src/tools/mesh_extractor/readme | 6 + 42 files changed, 2441 insertions(+), 1 deletion(-) create mode 100644 src/tools/mesh_extractor/ADT.h create mode 100644 src/tools/mesh_extractor/CMakeLists.txt create mode 100644 src/tools/mesh_extractor/Cache.h create mode 100644 src/tools/mesh_extractor/Chunk.cpp create mode 100644 src/tools/mesh_extractor/Chunk.h create mode 100644 src/tools/mesh_extractor/ChunkedData.cpp create mode 100644 src/tools/mesh_extractor/ChunkedData.h create mode 100644 src/tools/mesh_extractor/Constants.h create mode 100644 src/tools/mesh_extractor/ContinentBuilder.cpp create mode 100644 src/tools/mesh_extractor/ContinentBuilder.h create mode 100644 src/tools/mesh_extractor/DoodadHandler.cpp create mode 100644 src/tools/mesh_extractor/DoodadHandler.h create mode 100644 src/tools/mesh_extractor/Geometry.cpp create mode 100644 src/tools/mesh_extractor/Geometry.h create mode 100644 src/tools/mesh_extractor/LiquidHandler.cpp create mode 100644 src/tools/mesh_extractor/LiquidHandler.h create mode 100644 src/tools/mesh_extractor/MPQ.cpp create mode 100644 src/tools/mesh_extractor/MPQ.h create mode 100644 src/tools/mesh_extractor/MPQManager.cpp create mode 100644 src/tools/mesh_extractor/MPQManager.h create mode 100644 src/tools/mesh_extractor/MapChunk.cpp create mode 100644 src/tools/mesh_extractor/MapChunk.h create mode 100644 src/tools/mesh_extractor/MeshExtractor.cpp create mode 100644 src/tools/mesh_extractor/Model.cpp create mode 100644 src/tools/mesh_extractor/Model.h create mode 100644 src/tools/mesh_extractor/ObjectDataHandler.cpp create mode 100644 src/tools/mesh_extractor/ObjectDataHandler.h create mode 100644 src/tools/mesh_extractor/TileBuilder.cpp create mode 100644 src/tools/mesh_extractor/TileBuilder.h create mode 100644 src/tools/mesh_extractor/Utils.cpp create mode 100644 src/tools/mesh_extractor/Utils.h create mode 100644 src/tools/mesh_extractor/WDT.cpp create mode 100644 src/tools/mesh_extractor/WDT.h create mode 100644 src/tools/mesh_extractor/WorldModelGroup.cpp create mode 100644 src/tools/mesh_extractor/WorldModelGroup.h create mode 100644 src/tools/mesh_extractor/WorldModelHandler.cpp create mode 100644 src/tools/mesh_extractor/WorldModelHandler.h create mode 100644 src/tools/mesh_extractor/WorldModelRoot.cpp create mode 100644 src/tools/mesh_extractor/WorldModelRoot.h create mode 100644 src/tools/mesh_extractor/readme diff --git a/cmake/options.cmake b/cmake/options.cmake index 11ebe6ddd12..5802ab86f43 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -10,7 +10,7 @@ option(SERVERS "Build worldserver and authserver" 1) option(SCRIPTS "Build core with scripts included" 1) -option(TOOLS "Build map/vmap extraction/assembler tools" 0) +option(TOOLS "Build map/vmap/mmap extraction/assembler tools" 0) option(USE_SCRIPTPCH "Use precompiled headers when compiling scripts" 1) option(USE_COREPCH "Use precompiled headers when compiling servers" 1) option(WITH_WARNINGS "Show all warnings during compile" 0) diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt index 2d378966aff..bbff6f85751 100644 --- a/src/tools/CMakeLists.txt +++ b/src/tools/CMakeLists.txt @@ -12,3 +12,4 @@ add_subdirectory(map_extractor) add_subdirectory(vmap4_assembler) add_subdirectory(vmap4_extractor) add_subdirectory(mmaps_generator) +add_subdirectory(mesh_extractor) diff --git a/src/tools/mesh_extractor/ADT.h b/src/tools/mesh_extractor/ADT.h new file mode 100644 index 00000000000..18b811a4e4c --- /dev/null +++ b/src/tools/mesh_extractor/ADT.h @@ -0,0 +1,26 @@ +#ifndef ADT_H +#define ADT_H +#include "ChunkedData.h" +#include "MapChunk.h" +#include "DoodadHandler.h" +#include "WorldModelHandler.h" + +class ADT +{ +public: + ADT(); + ~ADT() { delete[] MapChunks; delete ObjectData; delete Data; } + + ChunkedData* ObjectData; + ChunkedData* Data; + // This here is not a pointer, is an array of objects ( made this way to allow the dynamic allocation ) + MapChunk* MapChunks; + MHDR Header; + // Can we dispose of this? + bool HasObjectData; + + DoodadHandler* _DoodadHandler; + WorldModelHandler* _WorldModelHandler; + LiquidHandler* _LiquidHandler; +}; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/CMakeLists.txt b/src/tools/mesh_extractor/CMakeLists.txt new file mode 100644 index 00000000000..3f5b5526dd4 --- /dev/null +++ b/src/tools/mesh_extractor/CMakeLists.txt @@ -0,0 +1,62 @@ +# Copyright (C) 2005-2009 MaNGOS project +# Copyright (C) 2008-2012 TrinityCore +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +file(GLOB_RECURSE sources *.cpp *.h) + +if( UNIX ) + include_directories ( + ${CMAKE_SOURCE_DIR}/src/server/shared + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour + ${CMAKE_SOURCE_DIR}/dep/libmpq + ${CMAKE_SOURCE_DIR}/dep/g3dlite/include + ${CMAKE_CURRENT_SOURCE_DIR} + ) +elseif( WIN32 ) + include_directories ( + ${CMAKE_SOURCE_DIR}/src/server/shared + ${CMAKE_SOURCE_DIR}/src/server/shared/Database + ${CMAKE_SOURCE_DIR}/src/server/shared/Database/Implementation + ${CMAKE_SOURCE_DIR}/src/server/shared/Threading + ${CMAKE_SOURCE_DIR}/src/server/shared/Logging + ${CMAKE_SOURCE_DIR}/src/server/shared/Utilities + ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic + ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic/LinkedReference + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour + ${CMAKE_SOURCE_DIR}/dep/libmpq + ${CMAKE_SOURCE_DIR}/dep/libmpq/win + ${CMAKE_SOURCE_DIR}/dep/g3dlite/include + ${ACE_INCLUDE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + ) +endif() + +add_executable(MeshExtractor + ${sources} +) + +target_link_libraries(MeshExtractor + mpq + Recast + Detour + ${BZIP2_LIBRARIES} + ${ZLIB_LIBRARIES} + ${ACE_LIBRARY} +) + +add_dependencies(MeshExtractor mpq Recast Detour) + +if( UNIX ) + install(TARGETS MeshExtractor DESTINATION bin) +elseif( WIN32 ) + install(TARGETS MeshExtractor DESTINATION "${CMAKE_INSTALL_PREFIX}") +endif() \ No newline at end of file diff --git a/src/tools/mesh_extractor/Cache.h b/src/tools/mesh_extractor/Cache.h new file mode 100644 index 00000000000..186a7870af1 --- /dev/null +++ b/src/tools/mesh_extractor/Cache.h @@ -0,0 +1,44 @@ +#ifndef CACHE_H +#define CACHE_H +#include +#include "Common.h" + +class WorldModelRoot; +class Model; + +template +class GenericCache +{ +public: + GenericCache() {} + const int32 FlushLimit = 1000; + + void Insert(std::string key, T* val) + { + if (_items.size() > FlushLimit) + Clear(); + _items.insert(key, val); + } + + T* Get(std::string key) + { + UNORDERED_MAP::iterator itr = _items.find(key); + if (itr != _items.end()) + return itr->second; + return NULL; + } + + void Clear() { _items.clear(); } +private: + UNORDERED_MAP _items; +}; + +class CacheClass +{ + CacheClass() {} + GenericCache ModelCache; + GenericCache WorldModelCache; +}; + +extern CacheClass* Cache; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/Chunk.cpp b/src/tools/mesh_extractor/Chunk.cpp new file mode 100644 index 00000000000..b41fa7d07d4 --- /dev/null +++ b/src/tools/mesh_extractor/Chunk.cpp @@ -0,0 +1,31 @@ +#include "Chunk.h" +#include "Utils.h" + +int32 Chunk::FindSubChunkOffset(std::string name) +{ + // Reverse the name + name = std::string(name.rbegin(), name.rend()); + if (name.size() != 4) + return -1; + + FILE* stream = GetStream(); + uint32 matched = 0; + while (ftell(stream) < Utils::Size(stream)) + { + char b; + fread(&b, sizeof(char), 1, stream); + if (b == name[matched]) + ++matched; + else + matched = 0; + if (matched == 4) + return ftell(stream) - 4; + } + return -1; +} + +FILE* Chunk::GetStream() +{ + fseek(Stream, Offset, SEEK_SET); + return Stream; +} diff --git a/src/tools/mesh_extractor/Chunk.h b/src/tools/mesh_extractor/Chunk.h new file mode 100644 index 00000000000..2eea36f69b6 --- /dev/null +++ b/src/tools/mesh_extractor/Chunk.h @@ -0,0 +1,20 @@ +#ifndef CHUNK_H +#define CHUNK_H +#include "Common.h" +#include +class ChunkedData; + +class Chunk +{ +public: + Chunk(const char* name, uint32 length, uint32 offset, FILE* stream) : Name(name), Length(length), Offset(offset), Stream(stream) {} + + int32 FindSubChunkOffset(std::string name); + FILE* GetStream(); + std::string Name; + uint32 Length; + uint32 Offset; + FILE* Stream; +}; + +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/ChunkedData.cpp b/src/tools/mesh_extractor/ChunkedData.cpp new file mode 100644 index 00000000000..470b8b94f39 --- /dev/null +++ b/src/tools/mesh_extractor/ChunkedData.cpp @@ -0,0 +1,63 @@ +#include "ChunkedData.h" +#include "MPQManager.h" +#include "Utils.h" + +#include + +ChunkedData::ChunkedData( FILE* stream, uint32 maxLength, uint32 chunksHint /*= 300*/ ) : +Stream(stream) +{ + if (!Stream) + return; + Load(maxLength, chunksHint); +} + +ChunkedData::ChunkedData( std::string file, uint32 chunksHint /*= 300*/ ) +{ + Stream = MPQHandler->GetFile(file); + if (!Stream) + return; + Load(0, chunksHint); +} + +void ChunkedData::Load( uint32 maxLength, uint32 chunksHint ) +{ + if (!maxLength) + maxLength = Utils::Size(Stream); + Chunks.reserve(chunksHint); + uint32 baseOffset = ftell(Stream); + uint32 calcOffset = 0; + while ((calcOffset + baseOffset) < Utils::Size(Stream) && (calcOffset < maxLength)) + { + char nameBytes[5]; + uint32 read = fread(&nameBytes, sizeof(char), 4, Stream); + nameBytes[read] = '\0'; + std::string name = std::string(nameBytes); + // Utils::Reverse(nameBytes); + name = std::string(name.rbegin(), name.rend()); + uint32 length; + fread(&length, sizeof(uint32), 1, Stream); + calcOffset += 8; + Chunks.push_back(new Chunk(name.c_str(), length, calcOffset + baseOffset, Stream)); + calcOffset += length; + // save an extra seek at the end + if ((calcOffset + baseOffset) < Utils::Size(Stream) && calcOffset < maxLength) + fseek(Stream, length, SEEK_CUR); + } +} + +int ChunkedData::GetFirstIndex( std::string name ) +{ + for (int i = 0; i < Chunks.size(); ++i) + if (Chunks[i]->Name == name) + return i; + return -1; +} + +Chunk* ChunkedData::GetChunkByName( std::string name ) +{ + for (int i = 0; i < Chunks.size(); ++i) + if (Chunks[i]->Name == name) + return Chunks[i]; + return NULL; +} diff --git a/src/tools/mesh_extractor/ChunkedData.h b/src/tools/mesh_extractor/ChunkedData.h new file mode 100644 index 00000000000..6e102828222 --- /dev/null +++ b/src/tools/mesh_extractor/ChunkedData.h @@ -0,0 +1,20 @@ +#ifndef CHNK_H +#define CHNK_H + +#include +#include "Chunk.h" + +class ChunkedData +{ +public: + ChunkedData(FILE* stream, uint32 maxLength, uint32 chunksHint = 300); + ChunkedData(std::string file, uint32 chunksHint = 300); + + int GetFirstIndex(std::string name); + Chunk* GetChunkByName(std::string name); + + void Load(uint32 maxLength, uint32 chunksHint); + std::vector Chunks; + FILE* Stream; +}; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/Constants.h b/src/tools/mesh_extractor/Constants.h new file mode 100644 index 00000000000..885761f1687 --- /dev/null +++ b/src/tools/mesh_extractor/Constants.h @@ -0,0 +1,33 @@ +#ifndef CONSTANTS_H +#define CONSTANTS_H + +#include "Common.h" + +class Constants +{ +public: + enum TriangleType + { + TRIANGLE_TYPE_UNKNOWN, + TRIANGLE_TYPE_TERRAIN, + TRIANGLE_TYPE_WATER, + TRIANGLE_TYPE_DOODAD, + TRIANGLE_TYPE_WMO + }; + + enum PolyArea + { + POLY_AREA_TERRAIN = 1, + POLY_AREA_WATER = 2, + POLY_AREA_ROAD = 3, + POLY_AREA_DANGER = 4, + }; + static const float TileSize; + static const float MaxXY; + static const float ChunkSize; + static const float UnitSize; + static const float Origin[]; + static const float PI; +}; + +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp new file mode 100644 index 00000000000..8af6f3a02e8 --- /dev/null +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -0,0 +1,11 @@ +#include "ContinentBuilder.h" +#include "WDT.h" +#include "Utils.h" + +void ContinentBuilder::Build() +{ + for (std::vector::iterator itr = TileMap->TileTable.begin(); itr != TileMap->TileTable.end(); ++itr) + { + + } +} diff --git a/src/tools/mesh_extractor/ContinentBuilder.h b/src/tools/mesh_extractor/ContinentBuilder.h new file mode 100644 index 00000000000..7db141ddcf1 --- /dev/null +++ b/src/tools/mesh_extractor/ContinentBuilder.h @@ -0,0 +1,15 @@ +#ifndef CONT_BUILDER_H +#define CONT_BUILDER_H +#include +#include "WDT.h" + +class ContinentBuilder +{ +public: + ContinentBuilder(std::string continent, WDT* wdt) : Continent(continent), TileMap(wdt) {} + void Build(); +private: + std::string Continent; + WDT* TileMap; +}; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/DoodadHandler.cpp b/src/tools/mesh_extractor/DoodadHandler.cpp new file mode 100644 index 00000000000..4a7707753c4 --- /dev/null +++ b/src/tools/mesh_extractor/DoodadHandler.cpp @@ -0,0 +1,99 @@ +#include "DoodadHandler.h" +#include "Chunk.h" +#include "Cache.h" +#include "Model.h" +#include "g3d/Matrix4.h" + +DoodadHandler::DoodadHandler( ADT* adt ) : ObjectDataHandler(adt), _definitions(NULL), _paths(NULL) +{ + if (!adt->HasObjectData) + return; + Chunk* mddf = adt->ObjectData->GetChunkByName("MDDF"); + if (mddf) + ReadDoodadDefinitions(mddf); + + Chunk* mmid = adt->ObjectData->GetChunkByName("MMID"); + Chunk* mmdx = adt->ObjectData->GetChunkByName("MMDX"); + if (mmid && mmdx) + ReadDoodadPaths(mmid, mmdx); +} + +void DoodadHandler::ProcessInternal( ChunkedData* subChunks ) +{ + if (!IsSane()) + return; + Chunk* doodadReferencesChunk = subChunks->GetChunkByName("MCRD"); + if (!doodadReferencesChunk) + return; + FILE* stream = doodadReferencesChunk->GetStream(); + uint32 refCount = doodadReferencesChunk->Length / 4; + for (int i = 0; i < refCount; i++) + { + int32 index; + fread(&index, sizeof(int32), 1, stream); + if (index < 0 || index >= _definitions->size()) + continue; + DoodadDefinition doodad = (*_definitions)[index]; + if (_drawn.find(doodad.UniqueId) != _drawn.end()) + continue; + _drawn.insert(doodad.UniqueId); + if (doodad.MmidIndex >= _paths->size()) + continue; + + std::string path = (*_paths)[doodad.MmidIndex]; + Model* model = Cache.ModelCache.Get(path); + if (!model) + { + model = new Model(path); + Cache.ModelCache.Insert(path, model); + } + if (!model->IsCollidable) + continue; + + Vertices.reserve(refCount * model->Vertices.size() * 0.2); + Triangles.reserve(refCount * model->Triangles.size() * 0.2); + + InsertModelGeometry(doodad, model); + } +} + +void DoodadHandler::ReadDoodadDefinitions( Chunk* chunk ) +{ + int32 count = chunk->Length / 36; + _definitions = new std::vector; + _definitions->reserve(count); + FILE* stream = chunk->GetStream(); + for (int i = 0; i < count; i++) + { + DoodadDefinition def; + def.Read(stream); + _definitions->push_back(def); + } +} + +void DoodadHandler::ReadDoodadPaths( Chunk* id, Chunk* data ) +{ + int paths = id->Length / 4; + _paths = new std::vector(); + _paths->reserve(paths); + for (int i = 0; i < paths; i++) + { + FILE* idStream = id->GetStream(); + fseek(idStream, i * 4, SEEK_CUR); + uint32 offset; + fread(&offset, sizeof(uint32), 1, idStream); + FILE* dataStream = data->GetStream(); + fseek(dataStream, offset + data->Offset, SEEK_SET); + _paths->push_back(Utils::ReadString(dataStream)); + } +} + +void DoodadHandler::InsertModelGeometry(DoodadDefinition def, Model* model) +{ + G3D::Matrix4 transformation = Utils::GetTransformation(def); + uint32 vertOffset = Vertices.size(); + for (std::vector::iterator itr = model->Vertices.begin(); itr != model->Vertices.end(); ++itr) + Vertices.push_back(Utils::VectorTransform(*itr, transformation)); + for (std::vector >::iterator itr = model->Triangles.begin(); itr != model->Triangles.end(); ++itr) + Triangles.push_back(Triangle(Constants::TRIANGLE_TYPE_DOODAD, itr->V0 + vertOffset, itr->V1 + vertOffset, itr->V2 + vertOffset)); +} \ No newline at end of file diff --git a/src/tools/mesh_extractor/DoodadHandler.h b/src/tools/mesh_extractor/DoodadHandler.h new file mode 100644 index 00000000000..c62584ca1f1 --- /dev/null +++ b/src/tools/mesh_extractor/DoodadHandler.h @@ -0,0 +1,51 @@ +#ifndef DOOADHNDL_H +#define DOOADHNDL_H +#include "ObjectDataHandler.h" +#include "Utils.h" +#include "Chunk.h" +#include "Model.h" +#include +#include + +class DoodadDefinition : IDefinition +{ +public: + uint32 MmidIndex; + uint32 UniqueId; + uint16 DecimalScale; + uint16 Flags; + + float Scale() { return DecimalScale / 1024.0f; } + + void Read(FILE* stream) + { + fread(&MmidIndex, sizeof(uint32), 1, stream); + fread(&UniqueId, sizeof(uint32), 1, stream); + Position = Vector3::Read(stream); + Rotation = Vector3::Read(stream); + fread(&DecimalScale, sizeof(uint16), 1, stream); + fread(&Flags, sizeof(uint16), 1, stream); + } +}; + +class DoodadHandler : public ObjectDataHandler +{ +public: + DoodadHandler(ADT* adt); + std::vector Vertices; + std::vector > Triangles; + bool IsSane() { return _definitions && _paths; } + + +protected: + void ProcessInternal(ChunkedData* chunk); + +private: + void ReadDoodadDefinitions(Chunk* chunk); + void ReadDoodadPaths(Chunk* id, Chunk* data); + void InsertModelGeometry(DoodadDefinition def, Model* model); + std::set _drawn; + std::vector* _definitions; + std::vector* _paths; +}; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/Geometry.cpp b/src/tools/mesh_extractor/Geometry.cpp new file mode 100644 index 00000000000..8e417af4c73 --- /dev/null +++ b/src/tools/mesh_extractor/Geometry.cpp @@ -0,0 +1,102 @@ +#include "Geometry.h" +#include "Constants.h" + +Geometry::Geometry() : Transform(false) +{ + Vertices.reserve(10000); + Triangles.reserve(10000); +} + +void Geometry::CalculateBoundingBox( float*& min, float*& max ) +{ + min = new float[3]; + max = new float[3]; + + for (std::vector::iterator itr = Vertices.begin(); itr != Vertices.end(); ++itr) + { + if (itr->x > max[0]) + max[0] = itr->x; + if (itr->x < min[0]) + min[0] = itr->x; + + if (itr->y > max[1]) + max[1] = itr->y; + if (itr->y < min[1]) + min[1] = itr->y; + + if (itr->z > max[2]) + max[2] = itr->z; + if (itr->z < min[2]) + min[2] = itr->z; + } +} + +void Geometry::CalculateMinMaxHeight( float& min, float& max ) +{ + min = 0.0f; + max = 0.0f; + + for (std::vector::iterator itr = Vertices.begin(); itr != Vertices.end(); ++itr) + { + if (Transform) + { + if (itr->y < min) + min = itr->y; + if (itr->y > max) + max = itr->y; + } + else + { + if (itr->z < min) + min = itr->z; + if (itr->z > max) + max = itr->z; + } + } +} + +void Geometry::AddData( std::vector& verts, std::vector >& tris ) +{ + uint32 vertOffset = Vertices.size(); + for (std::vector::iterator itr = verts.begin(); itr != verts.end(); ++itr) + Vertices.push_back(Transform ? Utils::ToRecast(*itr) : *itr); + + for (std::vector >::iterator itr = tris.begin(); itr != tris.end(); ++itr) + Triangles.push_back(Triangle(itr->Type, itr->V0 + vertOffset, itr->V1 + vertOffset, itr->V2 + vertOffset)); +} + +void Geometry::GetRawData( float*& verts, int*& tris, uint8*& areas ) +{ + verts = new float[Vertices.size() * 3]; + for (int i = 0; i < Vertices.size(); ++i) + { + Vector3& vert = Vertices[i]; + verts[(i * 3) + 0] = vert.x; + verts[(i * 3) + 1] = vert.y; + verts[(i * 3) + 2] = vert.z; + } + + tris = new int[Triangles.size() * 3]; + for (int i = 0; i < Triangles.size(); ++i) + { + Triangle& tri = Triangles[i]; + tris[(i * 3) + 0] = (int)tri.V0; + tris[(i * 3) + 1] = (int)tri.V1; + tris[(i * 3) + 2] = (int)tri.V2; + } + + areas = new uint8[Triangles.size()]; + for (int i = 0; i < Triangles.size(); i++) + { + switch (Triangles[i].Type) + { + case Constants::TRIANGLE_TYPE_WATER: + areas[i] = Constants::POLY_AREA_WATER; + break; + default: + areas[i] = Constants::POLY_AREA_TERRAIN; + break; + } + } +} + diff --git a/src/tools/mesh_extractor/Geometry.h b/src/tools/mesh_extractor/Geometry.h new file mode 100644 index 00000000000..048d9fde578 --- /dev/null +++ b/src/tools/mesh_extractor/Geometry.h @@ -0,0 +1,21 @@ +#ifndef GEOMETRY_H +#define GEOMETRY_H +#include + +#include "Utils.h" + +class Geometry +{ +public: + Geometry(); + + void CalculateBoundingBox(float*& min, float*& max); + void CalculateMinMaxHeight(float& min, float& max); + void AddData(std::vector& verts, std::vector >& tris); + void GetRawData(float*& verts, int*& tris, uint8*& areas); + + std::vector Vertices; + std::vector > Triangles; + bool Transform; +}; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/LiquidHandler.cpp b/src/tools/mesh_extractor/LiquidHandler.cpp new file mode 100644 index 00000000000..5924c693196 --- /dev/null +++ b/src/tools/mesh_extractor/LiquidHandler.cpp @@ -0,0 +1 @@ +#include "LiquidHandler.h" \ No newline at end of file diff --git a/src/tools/mesh_extractor/LiquidHandler.h b/src/tools/mesh_extractor/LiquidHandler.h new file mode 100644 index 00000000000..ba89be33e08 --- /dev/null +++ b/src/tools/mesh_extractor/LiquidHandler.h @@ -0,0 +1,17 @@ +#ifndef LIQUID_H +#define LIQUID_H +#include "ADT.h" +#include "Utils.h" +#include "Common.h" + +#include + +class LiquidHandler +{ +public: + ADT* Source; + std::vector Vertices; + std::vector > Triangles; + std::vector MCNKData; +}; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/MPQ.cpp b/src/tools/mesh_extractor/MPQ.cpp new file mode 100644 index 00000000000..fbae56cd7a0 --- /dev/null +++ b/src/tools/mesh_extractor/MPQ.cpp @@ -0,0 +1,117 @@ +#include "MPQ.h" +#include "MPQManager.h" +#include +#include + +MPQArchive::MPQArchive(const char* filename) +{ + int result = libmpq__archive_open(&mpq_a, filename, -1); + printf("Opening %s\n", filename); + if (result) + { + switch (result) + { + case LIBMPQ_ERROR_OPEN : + printf("Error opening archive '%s': Does file really exist?\n", filename); + break; + case LIBMPQ_ERROR_FORMAT : /* bad file format */ + printf("Error opening archive '%s': Bad file format\n", filename); + break; + case LIBMPQ_ERROR_SEEK : /* seeking in file failed */ + printf("Error opening archive '%s': Seeking in file failed\n", filename); + break; + case LIBMPQ_ERROR_READ : /* Read error in archive */ + printf("Error opening archive '%s': Read error in archive\n", filename); + break; + case LIBMPQ_ERROR_MALLOC : /* maybe not enough memory? :) */ + printf("Error opening archive '%s': Maybe not enough memory\n", filename); + break; + default: + printf("Error opening archive '%s': Unknown error\n", filename); + break; + } + } +} + +void MPQArchive::close() +{ + libmpq__archive_close(mpq_a); +} + +MPQFile::MPQFile(const char* filename): +eof(false), buffer(0), pointer(0), size(0) +{ + for (std::deque::iterator i = MPQHandler->Archives.begin(); i != MPQHandler->Archives.end();++i) + { + mpq_archive* mpq_a = (*i)->mpq_a; + + uint32_t filenum; + if(libmpq__file_number(mpq_a, filename, &filenum)) + continue; + libmpq__off_t transferred; + libmpq__file_unpacked_size(mpq_a, filenum, &size); + + // HACK: in patch.mpq some files don't want to open and give 1 for filesize + if (size<=1) { + // printf("warning: file %s has size %d; cannot Read.\n", filename, size); + eof = true; + buffer = 0; + return; + } + buffer = new char[size]; + + //libmpq_file_getdata + libmpq__file_read(mpq_a, filenum, (unsigned char*)buffer, size, &transferred); + /*libmpq_file_getdata(&mpq_a, hash, fileno, (unsigned char*)buffer);*/ + return; + + } + eof = true; + buffer = 0; +} + +size_t MPQFile::Read(void* dest, size_t bytes) +{ + if (eof) + return 0; + + size_t rpos = pointer + bytes; + if (rpos > size) { + bytes = size - pointer; + eof = true; + } + + memcpy(dest, &(buffer[pointer]), bytes); + + pointer = rpos; + + return bytes; +} + +void MPQFile::seek(int offset) +{ + pointer = offset; + eof = (pointer >= size); +} + +void MPQFile::seekRelative(int offset) +{ + pointer += offset; + eof = (pointer >= size); +} + +void MPQFile::close() +{ + if (buffer) + delete[] buffer; + buffer = 0; + eof = true; +} + +FILE* MPQFile::GetFileStream() +{ + FILE* file = tmpfile(); + fwrite(buffer, sizeof(char), size, file); + fseek(file, 0, SEEK_SET); + return file; +} diff --git a/src/tools/mesh_extractor/MPQ.h b/src/tools/mesh_extractor/MPQ.h new file mode 100644 index 00000000000..dd566bccff5 --- /dev/null +++ b/src/tools/mesh_extractor/MPQ.h @@ -0,0 +1,88 @@ +#ifndef MPQ_H +#define MPQ_H + +#include "libmpq/mpq.h" +#include "Common.h" +#include +#include +#include +#include +#include + +using namespace std; + +class MPQArchive +{ + +public: + mpq_archive_s *mpq_a; + + MPQArchive(const char* filename); + void close(); + + void GetFileListTo(vector& filelist) { + uint32_t filenum; + if(libmpq__file_number(mpq_a, "(listfile)", &filenum)) return; + libmpq__off_t size, transferred; + libmpq__file_unpacked_size(mpq_a, filenum, &size); + + char *buffer = new char[size]; + + libmpq__file_read(mpq_a, filenum, (unsigned char*)buffer, size, &transferred); + + char seps[] = "\n"; + char* token; + + token = strtok( buffer, seps ); + uint32 counter = 0; + while ((token != NULL) && (counter < size)) { + //cout << token << endl; + token[strlen(token) - 1] = 0; + string s = token; + filelist.push_back(s); + counter += strlen(token) + 2; + token = strtok(NULL, seps); + } + + delete[] buffer; + } +}; + +class MPQFile +{ + //MPQHANDLE handle; + bool eof; + char *buffer; + libmpq__off_t pointer,size; + + // disable copying + MPQFile(const MPQFile& /*f*/) {} + void operator=(const MPQFile& /*f*/) {} + +public: + MPQFile(const char* filename); // filenames are not case sensitive + ~MPQFile() { close(); } + size_t Read(void* dest, size_t bytes); + FILE* GetFileStream(); + size_t getSize() { return size; } + size_t getPos() { return pointer; } + char* getBuffer() { return buffer; } + char* getPointer() { return buffer + pointer; } + bool isEof() { return eof; } + void seek(int offset); + void seekRelative(int offset); + void close(); +}; + +inline void flipcc(char *fcc) +{ + char t; + t=fcc[0]; + fcc[0]=fcc[3]; + fcc[3]=t; + t=fcc[1]; + fcc[1]=fcc[2]; + fcc[2]=t; +} + +#endif diff --git a/src/tools/mesh_extractor/MPQManager.cpp b/src/tools/mesh_extractor/MPQManager.cpp new file mode 100644 index 00000000000..429b09ffe02 --- /dev/null +++ b/src/tools/mesh_extractor/MPQManager.cpp @@ -0,0 +1,58 @@ +#include "MPQManager.h" +#include "MPQ.h" + +char* MPQManager::Files[] = { + "common.MPQ", + "common-2.MPQ", + "expansion.MPQ", + "lichking.MPQ", + "patch.MPQ", + "patch-2.MPQ", + "patch-3.MPQ" +}; + +void MPQManager::Initialize() +{ + LoadMPQs(); +} + +void MPQManager::LoadMaps() +{ + +} + +void MPQManager::LoadMPQs() +{ + // Load the locale MPQ files first + char filename[512]; + + /*sprintf(filename,"Data/%s/locale-%s.MPQ", langs[locale], langs[locale]);*/ + Archives.push_front(new MPQArchive("Data/enUS/locale-enUS.MPQ")); + + for(int i = 0; i < 3; ++i) + { + char ext[3] = ""; + if (i) + sprintf(ext, "-%i", i + 1); + + sprintf(filename, "Data/enUS/patch-enUS%s.MPQ", ext); + Archives.push_front(new MPQArchive(filename)); + } + + // Now load the common MPQ files + int count = sizeof(Files) / sizeof(char*); + for (int i = 0; i < count; ++i) + { + sprintf(filename, "Data/%s", Files[i]); + Archives.push_front(new MPQArchive(filename)); + } + printf("Loaded %u MPQ files succesfully", Archives.size()); +} + +FILE* MPQManager::GetFile( std::string path ) +{ + MPQFile file(path.c_str()); + if (file.isEof()) + return NULL; + return file.GetFileStream(); +} diff --git a/src/tools/mesh_extractor/MPQManager.h b/src/tools/mesh_extractor/MPQManager.h new file mode 100644 index 00000000000..e10066ae4a6 --- /dev/null +++ b/src/tools/mesh_extractor/MPQManager.h @@ -0,0 +1,24 @@ +#ifndef MPQ_MANAGER_H +#define MPQ_MANAGER_H + +#include "MPQ.h" + +class MPQManager +{ +public: + MPQManager() {} + ~MPQManager() {} + + void Initialize(); + void LoadMaps(); + FILE* GetFile(std::string path); + + std::deque Archives; + + static char* Files[]; +protected: + void LoadMPQs(); +}; + +extern MPQManager* MPQHandler; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/MapChunk.cpp b/src/tools/mesh_extractor/MapChunk.cpp new file mode 100644 index 00000000000..95f8c2e56c0 --- /dev/null +++ b/src/tools/mesh_extractor/MapChunk.cpp @@ -0,0 +1,77 @@ +#include "MapChunk.h" +#include "ADT.h" + +MapChunk::MapChunk( ADT* _adt, Chunk* chunk ) : adt(_adt), Source(chunk), Vertices(NULL) +{ + FILE* stream = chunk->GetStream(); + Header.Read(stream); + fseek(stream, chunk->Offset, SEEK_SET); + GenerateVertices(stream); +} + +void MapChunk::GenerateTriangles() +{ + Triangles.reserve(256); + for (int y = 0; y < 8; y++) + { + for (int x = 0; x < 8; x++) + { + if (HasHole(Header.Holes, x / 2, y / 2)) + continue; + + uint32 topLeft = (17 * y) + x; + uint32 topRight = (17 * y) + x + 1; + uint32 bottomLeft = (17 * (y + 1)) + x; + uint32 bottomRight = (17 * (y + 1)) + x + 1; + uint32 center = (17 * y) + 9 + x; + + uint8 triangleType = Constants::TRIANGLE_TYPE_TERRAIN; + if (ADT.LiquidHandler && ADT.LiquidHandler.MCNKData) + { + var data = ADT.LiquidHandler.MCNKData[Index]; + uint32 maxHeight = std::max( + std::max( + std::max(std::max(Vertices[topLeft].z, Vertices[topRight].z), Vertices[bottomLeft].z), + Vertices[bottomRight].z), Vertices[center].z); + if (data && data->IsWater(x, y, maxHeight)) + triangleType = Constants::TRIANGLE_TYPE_WATER; + } + + Triangles.push_back(new Triangle(triangleType, topRight, topLeft, center)); + Triangles.push_back(new Triangle(triangleType, topLeft, bottomLeft, center)); + Triangles.push_back(new Triangle(triangleType, bottomLeft, bottomRight, center)); + Triangles.push_back(new Triangle(triangleType, bottomRight, topRight, center)); + } + } +} + +MapChunk::~MapChunk() +{ + delete[] Vertices; +} + +void MapChunk::GenerateVertices( FILE* stream ) +{ + fseek(stream, Header.OffsetMCVT, SEEK_CUR); + int32 vertIndex = 0; + Vertices = new Vector3[125]; + + for (int j = 0; j < 17; j++) + { + int values = j % 2 ? 8 : 9; + for (int i = 0; i < values; i++) + { + float tmp; + fread(&tmp, sizeof(float), 1, stream); + Vector3 vert(Header.Position.x - (j * (Constants::UnitSize * 0.5f)), Header.Position.y - (i * Constants::UnitSize), Header.Position.z + tmp); + if (values == 8) + vert.y -= Constants::UnitSize * 0.5f; + Vertices[vertIndex++] = vert; + } + } +} + +bool MapChunk::HasHole( uint32 map, int x, int y ) +{ + return (map & 0x0000FFFF) & ((1 << x) << (y << 2)); +} diff --git a/src/tools/mesh_extractor/MapChunk.h b/src/tools/mesh_extractor/MapChunk.h new file mode 100644 index 00000000000..034429a81ec --- /dev/null +++ b/src/tools/mesh_extractor/MapChunk.h @@ -0,0 +1,25 @@ +#ifndef MAPCHUNK_H +#define MAPCHUNK_H +#include "Chunk.h" +#include "Utils.h" +#include "Constants.h" +#include +class ADT; + +class MapChunk +{ +public: + MapChunk(ADT* _adt, Chunk* chunk); + ~MapChunk(); + + void GenerateTriangles(); + void GenerateVertices(FILE* stream); + static bool HasHole(uint32 map, int x, int y); + ADT* adt; + Chunk* Source; + MapChunkHeader Header; + Vector3* Vertices; + std::vector > Triangles; + int32 Index; +}; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp new file mode 100644 index 00000000000..0220627cbcc --- /dev/null +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -0,0 +1,34 @@ +#include "MPQManager.h" +#include "WDT.h" +#include "ContinentBuilder.h" +#include "Cache.h" + +MPQManager* MPQHandler; +CacheClass* Cache; + +void ExtractAllMaps() +{ + WDT wdt("World\\maps\\DalaranPrison\\DalaranPrison.wdt"); + if (!wdt.IsValid) + return; + printf("Model valid!"); + if (wdt.IsGlobalModel) + { + printf("Unsupported"); + return; + } + ContinentBuilder builder("DalaranPrison", &wdt); + builder.Build(); +} + +int main(int argc, char* argv[]) +{ + system("pause"); + Cache = new CacheClass(); + MPQHandler = new MPQManager(); + MPQHandler->Initialize(); + MPQHandler->LoadMaps(); + ExtractAllMaps(); + return 0; +} + diff --git a/src/tools/mesh_extractor/Model.cpp b/src/tools/mesh_extractor/Model.cpp new file mode 100644 index 00000000000..a1c67d23f28 --- /dev/null +++ b/src/tools/mesh_extractor/Model.cpp @@ -0,0 +1,49 @@ +#include "Model.h" +#include "MPQManager.h" +#include "Utils.h" + +Model::Model( std::string path ) +{ + Stream = MPQHandler->GetFile(Utils::FixModelPath(path)); + Header.Read(Stream); + if (Header.OffsetBoundingNormals > 0 && Header.OffsetBoundingVertices > 0 && + Header.OffsetBoundingTriangles > 0 && Header.BoundingRadius > 0.0f) + { + IsCollidable = true; + ReadVertices(Stream); + ReadBoundingNormals(Stream); + ReadBoundingTriangles(Stream); + } +} + +void Model::ReadVertices( FILE* stream ) +{ + fseek(stream, Header.OffsetBoundingVertices, SEEK_SET); + Vertices.reserve(Header.CountBoundingVertices); + for (int i = 0; i < Header.CountBoundingVertices; ++i) + Vertices[i] = Vector3::Read(stream); +} + +void Model::ReadBoundingTriangles( FILE* stream ) +{ + fseek(stream, Header.OffsetBoundingTriangles, SEEK_SET); + Triangles.reserve(Header.CountBoundingTriangles / 3); + for (int i = 0; i < Header.CountBoundingTriangles / 3; i++) + { + Triangle tri; + tri.Type = Constants::TRIANGLE_TYPE_DOODAD; + fread(&tri.V0, sizeof(uint16), 1, stream); + fread(&tri.V1, sizeof(uint16), 1, stream); + fread(&tri.V2, sizeof(uint16), 1, stream); + Triangles[i] = tri; + } +} + +void Model::ReadBoundingNormals( FILE* stream ) +{ + fseek(stream, Header.OffsetBoundingNormals, SEEK_SET); + Normals.reserve(Header.CountBoundingNormals); + for (int i = 0; i < Header.CountBoundingNormals; i++) + Normals[i] = Vector3::Read(stream); +} + diff --git a/src/tools/mesh_extractor/Model.h b/src/tools/mesh_extractor/Model.h new file mode 100644 index 00000000000..a5b8338461d --- /dev/null +++ b/src/tools/mesh_extractor/Model.h @@ -0,0 +1,21 @@ +#ifndef MODEL_H +#define MODEL_H +#include +#include "Utils.h" + +class Model +{ +public: + Model(std::string path); + + void ReadVertices(FILE* stream); + void ReadBoundingTriangles(FILE* stream); + void ReadBoundingNormals(FILE* stream); + ModelHeader Header; + std::vector Vertices; + std::vector Normals; + std::vector > Triangles; + bool IsCollidable; + FILE* Stream; +}; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/ObjectDataHandler.cpp b/src/tools/mesh_extractor/ObjectDataHandler.cpp new file mode 100644 index 00000000000..3ed2ee49604 --- /dev/null +++ b/src/tools/mesh_extractor/ObjectDataHandler.cpp @@ -0,0 +1,21 @@ +#include "ObjectDataHandler.h" +#include "Chunk.h" +#include "ADT.h" +#include "ChunkedData.h" + +void ObjectDataHandler::ProcessMapChunk( MapChunk* chunk ) +{ + if (!Source->HasObjectData) + return; + // fuck it blizzard, why is this crap necessary? + int32 firstIndex = Source->ObjectData->GetFirstIndex("MCNK"); + if (firstIndex == -1) + return; + if (firstIndex + chunk->Index > Source->ObjectData->Chunks.size()) + return; + Chunk* ourChunk = Source->ObjectData->Chunks[firstIndex + chunk->Index]; + if (ourChunk->Length == 0) + return; + ChunkedData* subChunks = new ChunkedData(ourChunk->GetStream(), ourChunk->Length, 2); + ProcessInternal(subChunks); +} diff --git a/src/tools/mesh_extractor/ObjectDataHandler.h b/src/tools/mesh_extractor/ObjectDataHandler.h new file mode 100644 index 00000000000..834bf66bcfb --- /dev/null +++ b/src/tools/mesh_extractor/ObjectDataHandler.h @@ -0,0 +1,15 @@ +#ifndef ODATA_HNDL_H +#define ODATA_HNDL_H +#include "ADT.h" +#include "MapChunk.h" + +class ObjectDataHandler +{ +public: + ObjectDataHandler(ADT* _adt) : Source(_adt) {} + + void ProcessMapChunk(MapChunk* chunk); + virtual void ProcessInternal(ChunkedData* data) = 0; + ADT* Source; +}; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp new file mode 100644 index 00000000000..070b9d70050 --- /dev/null +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -0,0 +1,37 @@ +#include "TileBuilder.h" +#include "Constants.h" + +TileBuilder::TileBuilder(std::string world, int x, int y) : _Geometry(NULL), World(world), X(x), Y(y), MapId(608) +{ + // Cell Size = TileSize / TileVoxelSize + // 1800 = TileVoxelSize + Config.cs = Constants::TileSize / 1800; + // Cell Height + Config.ch = 0.3f; + // Min Region Area = 6^2 + Config.minRegionArea = 36; + // Merge Region Area = 12^2 + Config.mergeRegionArea = 144; + Config.walkableSlopeAngle = 50.0f; + Config.detailSampleDist = 3.0f; + Config.detailSampleMaxError = 1.25f; + Config.walkableClimb = 1.0f / Config.ch; + Config.walkableHeight = 2.1f / Config.ch; + Config.walkableRadius = 0.6f / Config.cs; + Config.maxEdgeLen = Config.walkableRadius * 8; + Config.borderSize = Config.walkableRadius + 8; + Config.width = 1800; + Config.maxVertsPerPoly = 6; + Config.maxSimplificationError = 1.3f; +} + +void TileBuilder::CalculateTileBounds( float*& bmin, float*& bmax ) +{ + float origin[3] = Constants::Origin; + bmin = new float[3]; + bmax = new float[3]; + bmin[0] = origin[0] + (Constants::TileSize * X); + bmin[2] = origin[2] + (Constants::TileSize * Y); + bmax[0] = origin[0] + (Constants::TileSize * (X + 1)); + bmax[2] = origin[2] + (Constants::TileSize * (Y + 1)); +} \ No newline at end of file diff --git a/src/tools/mesh_extractor/TileBuilder.h b/src/tools/mesh_extractor/TileBuilder.h new file mode 100644 index 00000000000..badb05295e5 --- /dev/null +++ b/src/tools/mesh_extractor/TileBuilder.h @@ -0,0 +1,22 @@ +#ifndef TILE_BUILD_H +#define TILE_BUILD_H +#include +#include "Recast.h" + +#include "Geometry.h" + +class TileBuilder +{ +public: + TileBuilder(std::string world, int x, int y); + void CalculateTileBounds(float*& bmin, float*& bmax); + uint8* Build(); + + std::string World; + int X; + int Y; + int MapId; + rcConfig Config; + Geometry* _Geometry; +}; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp new file mode 100644 index 00000000000..03473eb0794 --- /dev/null +++ b/src/tools/mesh_extractor/Utils.cpp @@ -0,0 +1,163 @@ +#include "Utils.h" +#include "Constants.h" +#include +#include "g3d/Matrix4.h" + +const float Constants::TileSize = 533.0f + (1/3.0f); +const float Constants::MaxXY = 32.0f * Constants::TileSize; +const float Constants::ChunkSize = Constants::TileSize / 16.0f; +const float Constants::UnitSize = Constants::ChunkSize / 8.0f; +const float Constants::Origin[] = { -Constants::MaxXY, 0.0f, -Constants::MaxXY }; +const float Constants::PI = 3.1415926f; + +void Utils::Reverse(char word[]) +{ + int len = strlen(word); + for (int i = 0;i < len / 2; i++) + { + word[i] ^= word[len-i-1]; + word[len-i-1] ^= word[i]; + word[i] ^= word[len-i-1]; + } +} + +std::string Utils::ReadString( FILE* file ) +{ + std::string ret; + int i = 0; + while (true) + { + char b; + fread(&b, sizeof(char), 1, file); + if (b == 0) + break; + ret[i++] = b; + } + return ret; +} + +uint32 Utils::Size( FILE* file ) +{ + // store the old position + uint32 offset = ftell(file); + // Get file size + fseek(file, 0, SEEK_END); + uint32 size = ftell(file); + // reset back to the old position + fseek(file, offset, SEEK_SET); + return size; +} + +Vector3 Utils::ToRecast( Vector3 val ) +{ + return Vector3(-val.y, val.z, -val.x); +} + +std::string Utils::GetAdtPath( std::string world, int x, int y ) +{ + return "World\\Maps\\" + world + "\\" + world + "_" + Utils::ToString(x) + "_" + Utils::ToString(y) + ".adt"; +} + +std::string Utils::FixModelPath( std::string path ) +{ + std::string::size_type idx = path.rfind("."); + // Bizarre way of changing extension but... + if (idx != std::string::npos) + { + path[idx + 1] = "M"; + path[idx + 2] = "2"; + } + return path; +} + +G3D::Matrix4 Utils::RotationX(float angle) +{ + float _cos = cos(angle); + float _sin = sin(angle); + Matrix4 ret = G3D::Matrix4::identity(); + ret[2][2] = _cos; + ret[2][3] = _sin; + ret[3][2] = -_sin; + ret[3][3] = _cos; + return ret; +} + +G3D::Matrix4 Utils::GetTransformation( IDefinition def ) +{ + G3D::Matrix4 translation; + if (def.Position.x == 0.0f && def.Position.y == 0.0f && def.Position.z == 0.0f) + translation = G3D::Matrix4::identity(); + else + translation = G3D::Matrix4::translation(-(def.Position.z - Constants::MaxXY), + -(def.Position.x - Constants::MaxXY), def.Position.y); + + G3D::Matrix4 rotation = RotationX(ToRadians(def.Rotation.z)) * RotationY(ToRadians(def.Rotation.x)) * RotationZ(ToRadians(def.Rotation.y + 180)); + if (def.Scale() < 1.0f || def.Scale() > 1.0f) + return G3D::Matrix4::scale(def.Scale()) * rotation * translation; + return rotation * translation; +} + +G3D::Matrix4 Utils::RotationY( float angle ) +{ + float _cos = cos(angle); + float _sin = sin(angle); + Matrix4 ret = G3D::Matrix4::identity(); + ret[1][1] = _cos; + ret[1][3] = -_sin; + ret[3][1] = _sin; + ret[3][3] = _cos; + return ret; +} + +G3D::Matrix4 Utils::RotationZ( float angle ) +{ + float _cos = cos(angle); + float _sin = sin(angle); + Matrix4 ret = G3D::Matrix4::identity(); + ret[1][1] = _cos; + ret[1][2] = _sin; + ret[2][1] = -_sin; + ret[2][2] = _cos; + return ret; +} + +float Utils::ToRadians( float degrees ) +{ + return Constants::PI * degrees / 180.0f; +} + +Vector3 Utils::VectorTransform( Vector3 vec, G3D::Matrix matrix ) +{ + Vector3 ret; + ret.x = vec.x * matrix[1][1] + vec.y * matrix[2][1] + vec.z * matrix[3][1] + matrix[4][1]; + ret.y = vec.x * matrix[1][2] + vec.y * matrix[2][2] + vec.z * matrix[3][2] + matrix[4][2]; + ret.z = vec.x * matrix[1][3] + vec.y * matrix[2][3] + vec.z * matrix[3][3] + matrix[4][3]; + return ret; +} + +std::string Utils::GetPathBase( std::string path ) +{ + int lastIndex = path.find_last_of("."); + if (lastIndex != std::string::npos) + return path.substr(0, lastindex); + return path; +} + +Vector3 Vector3::Read( FILE* file ) +{ + Vector3 ret; + fread(&ret, sizeof(Vector3), 1, file); + return ret; +} + +Vector3 Utils::GetLiquidVert(G3D::Matrix4 transformation, Vector3 basePosition, float height, int x, int y) +{ + if (Utils::Distance(height, 0.0f) > 0.5f) + basePosition.z = 0.0f; + return Utils::VectorTransform(basePosition + Vector3(basePosition.x * Constants::UnitSize, basePosition.y * Constants::UnitSize, height), transformation); +} + +float Utils::Distance( float x, float y ) +{ + return sqrt(x*x + y*y); +} diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h new file mode 100644 index 00000000000..cda5f4c7cd8 --- /dev/null +++ b/src/tools/mesh_extractor/Utils.h @@ -0,0 +1,497 @@ +#ifndef UTILS_H +#define UTILS_H +#include +#include +#include + +#include "g3d/Matrix4.h" + +#include "Common.h" +#include "Constants.h" + +struct Vector3 +{ + Vector3() {} + Vector3(float X, float Y, float Z) : x(X), y(Y), z(Z) {} + float x; + float y; + float z; + Vector3 operator+(Vector3 right, Vector3 left) + { + return Vector3(right.x+left.x, right.y+left.y, right.z+left.z); + } + static Vector3 Read(FILE* file); +}; + +struct TilePos +{ + TilePos(int x, int y) : X(x), Y(y) {} + int X; + int Y; +}; + +template +struct Triangle +{ + Triangle(Constants::TriangleType type, T v0, T v1, T v2) : Type(type), V0(v0), V1(v1), V2(v2) {} + T V0; + T V1; + T V2; + Constants::TriangleType Type; +}; + +class MapChunkHeader +{ +public: + MapChunkHeader() {} + uint32 Flags; + uint32 IndexX; + uint32 IndexY; + uint32 Layers; + uint32 DoodadRefs; + uint32 OffsetMCVT; + uint32 OffsetMCNR; + uint32 OffsetMCLY; + uint32 OffsetMCRF; + uint32 OffsetMCAL; + uint32 SizeMCAL; + uint32 OffsetMCSH; + uint32 SizeMCSH; + uint32 AreaId; + uint32 MapObjectRefs; + uint32 Holes; + uint32* LowQualityTextureMap; + uint32 PredTex; + uint32 NumberEffectDoodad; + uint32 OffsetMCSE; + uint32 SoundEmitters; + uint32 OffsetMCLQ; + uint32 SizeMCLQ; + Vector3 Position; + uint32 OffsetMCCV; + + void Read(FILE* stream) + { + fread(&Flags, sizeof(uint32), 1, stream); + fread(&IndexX, sizeof(uint32), 1, stream); + fread(&IndexY, sizeof(uint32), 1, stream); + fread(&Layers, sizeof(uint32), 1, stream); + fread(&DoodadRefs, sizeof(uint32), 1, stream); + fread(&OffsetMCVT, sizeof(uint32), 1, stream); + fread(&OffsetMCNR, sizeof(uint32), 1, stream); + fread(&OffsetMCLY, sizeof(uint32), 1, stream); + fread(&OffsetMCRF, sizeof(uint32), 1, stream); + fread(&OffsetMCAL, sizeof(uint32), 1, stream); + fread(&SizeMCAL, sizeof(uint32), 1, stream); + fread(&OffsetMCSH, sizeof(uint32), 1, stream); + fread(&SizeMCSH, sizeof(uint32), 1, stream); + fread(&AreaId, sizeof(uint32), 1, stream); + fread(&MapObjectRefs, sizeof(uint32), 1, stream); + fread(&Holes, sizeof(uint32), 1, stream); + LowQualityTextureMap = new uint32[4]; + fread(LowQualityTextureMap, sizeof(uint32), 4, stream); + fread(&PredTex, sizeof(uint32), 1, stream); + fread(&NumberEffectDoodad, sizeof(uint32), 1, stream); + fread(&OffsetMCSE, sizeof(uint32), 1, stream); + fread(&SoundEmitters, sizeof(uint32), 1, stream); + fread(&OffsetMCLQ, sizeof(uint32), 1, stream); + fread(&SizeMCLQ, sizeof(uint32), 1, stream); + Position = Vector3::Read(stream); + fread(&OffsetMCCV, sizeof(uint32), 1, stream); + } +}; + +class MHDR +{ +public: + MHDR() {} + uint32 Flags; + uint32 OffsetMCIN; + uint32 OffsetMTEX; + uint32 OffsetMMDX; + uint32 OffsetMMID; + uint32 OffsetMWMO; + uint32 OffsetMWID; + uint32 OffsetMDDF; + uint32 OffsetMODF; + uint32 OffsetMFBO; + uint32 OffsetMH2O; + uint32 OffsetMTFX; + + void Read(FILE* stream) + { + fread(&Flags, sizeof(uint32), 1, stream); + fread(&OffsetMCIN, sizeof(uint32), 1, stream); + fread(&OffsetMTEX, sizeof(uint32), 1, stream); + fread(&OffsetMMDX, sizeof(uint32), 1, stream); + fread(&OffsetMMID, sizeof(uint32), 1, stream); + fread(&OffsetMWMO, sizeof(uint32), 1, stream); + fread(&OffsetMWID, sizeof(uint32), 1, stream); + fread(&OffsetMDDF, sizeof(uint32), 1, stream); + fread(&OffsetMODF, sizeof(uint32), 1, stream); + fread(&OffsetMFBO, sizeof(uint32), 1, stream); + fread(&OffsetMH2O, sizeof(uint32), 1, stream); + fread(&OffsetMTFX, sizeof(uint32), 1, stream); + } +}; + +class ModelHeader +{ +public: + char Magic[5]; + uint32 Version; + uint32 LengthModelName; + uint32 OffsetName; + uint32 ModelFlags; + uint32 CountGlobalSequences; + uint32 OffsetGlobalSequences; + uint32 CountAnimations; + uint32 OffsetAnimations; + uint32 CountAnimationLookup; + uint32 OffsetAnimationLookup; + uint32 CountBones; + uint32 OffsetBones; + uint32 CountKeyBoneLookup; + uint32 OffsetKeyBoneLookup; + uint32 CountVertices; + uint32 OffsetVertices; + uint32 CountViews; + uint32 CountColors; + uint32 OffsetColors; + uint32 CountTextures; + uint32 OffsetTextures; + uint32 CountTransparency; + uint32 OffsetTransparency; + uint32 CountUvAnimation; + uint32 OffsetUvAnimation; + uint32 CountTexReplace; + uint32 OffsetTexReplace; + uint32 CountRenderFlags; + uint32 OffsetRenderFlags; + uint32 CountBoneLookup; + uint32 OffsetBoneLookup; + uint32 CountTexLookup; + uint32 OffsetTexLookup; + uint32 CountTexUnits; + uint32 OffsetTexUnits; + uint32 CountTransLookup; + uint32 OffsetTransLookup; + uint32 CountUvAnimLookup; + uint32 OffsetUvAnimLookup; + Vector3 VertexBox[2]; + float VertexRadius; + Vector3 BoundingBox[2]; + float BoundingRadius; + uint32 CountBoundingTriangles; + uint32 OffsetBoundingTriangles; + uint32 CountBoundingVertices; + uint32 OffsetBoundingVertices; + uint32 CountBoundingNormals; + uint32 OffsetBoundingNormals; + + void Read(FILE* stream) + { + fread(&Magic, sizeof(char), 4, stream); + Magic[4] = '\0'; // null-terminate it. + fread(&Version, sizeof(uint32), 1, stream); + fread(&LengthModelName, sizeof(uint32), 1, stream); + fread(&OffsetName, sizeof(uint32), 1, stream); + fread(&ModelFlags, sizeof(uint32), 1, stream); + fread(&CountGlobalSequences, sizeof(uint32), 1, stream); + fread(&OffsetGlobalSequences, sizeof(uint32), 1, stream); + fread(&CountAnimations, sizeof(uint32), 1, stream); + fread(&OffsetAnimations, sizeof(uint32), 1, stream); + fread(&CountAnimationLookup, sizeof(uint32), 1, stream); + fread(&OffsetAnimationLookup, sizeof(uint32), 1, stream); + fread(&CountBones, sizeof(uint32), 1, stream); + fread(&OffsetBones, sizeof(uint32), 1, stream); + fread(&CountKeyBoneLookup, sizeof(uint32), 1, stream); + fread(&OffsetKeyBoneLookup, sizeof(uint32), 1, stream); + fread(&CountVertices, sizeof(uint32), 1, stream); + fread(&OffsetVertices, sizeof(uint32), 1, stream); + fread(&CountViews, sizeof(uint32), 1, stream); + fread(&CountColors, sizeof(uint32), 1, stream); + fread(&OffsetColors, sizeof(uint32), 1, stream); + fread(&CountTextures, sizeof(uint32), 1, stream); + fread(&OffsetTextures, sizeof(uint32), 1, stream); + fread(&CountTransparency, sizeof(uint32), 1, stream); + fread(&OffsetTransparency, sizeof(uint32), 1, stream); + fread(&CountUvAnimation, sizeof(uint32), 1, stream); + fread(&OffsetUvAnimation, sizeof(uint32), 1, stream); + fread(&CountTexReplace, sizeof(uint32), 1, stream); + fread(&OffsetTexReplace, sizeof(uint32), 1, stream); + fread(&CountRenderFlags, sizeof(uint32), 1, stream); + fread(&OffsetRenderFlags, sizeof(uint32), 1, stream); + fread(&CountBoneLookup, sizeof(uint32), 1, stream); + fread(&OffsetBoneLookup, sizeof(uint32), 1, stream); + fread(&CountTexLookup, sizeof(uint32), 1, stream); + fread(&OffsetTexLookup, sizeof(uint32), 1, stream); + fread(&CountTexUnits, sizeof(uint32), 1, stream); + fread(&OffsetTexUnits, sizeof(uint32), 1, stream); + fread(&CountTransLookup, sizeof(uint32), 1, stream); + fread(&OffsetTransLookup, sizeof(uint32), 1, stream); + fread(&CountUvAnimLookup, sizeof(uint32), 1, stream); + fread(&OffsetUvAnimLookup, sizeof(uint32), 1, stream); + fread(&CountColors, sizeof(uint32), 1, stream); + fread(&OffsetColors, sizeof(uint32), 1, stream); + fread(&CountTextures, sizeof(uint32), 1, stream); + fread(&OffsetTextures, sizeof(uint32), 1, stream); + fread(&CountTransparency, sizeof(uint32), 1, stream); + fread(&OffsetTransparency, sizeof(uint32), 1, stream); + fread(&CountUvAnimation, sizeof(uint32), 1, stream); + fread(&OffsetUvAnimation, sizeof(uint32), 1, stream); + fread(&CountTexReplace, sizeof(uint32), 1, stream); + fread(&OffsetTexReplace, sizeof(uint32), 1, stream); + VertexBox[0] = Vector3::Read(stream); + VertexBox[1] = Vector3::Read(stream); + fread(&VertexRadius, sizeof(float), 1, stream); + BoundingBox[0] = Vector3::Read(stream); + BoundingBox[1] = Vector3::Read(stream); + fread(&BoundingRadius, sizeof(float), 1, stream); + fread(&CountBoundingTriangles, sizeof(uint32), 1, stream); + fread(&OffsetBoundingTriangles, sizeof(uint32), 1, stream); + fread(&CountBoundingVertices, sizeof(uint32), 1, stream); + fread(&OffsetBoundingVertices, sizeof(uint32), 1, stream); + fread(&CountBoundingNormals, sizeof(uint32), 1, stream); + fread(&OffsetBoundingNormals, sizeof(uint32), 1, stream); + } +}; + +class WorldModelHeader +{ +public: + WorldModelHeader() {} + uint32 CountMaterials; + uint32 CountGroups; + uint32 CountPortals; + uint32 CountLights; + uint32 CountModels; + uint32 CountDoodads; + uint32 CountSets; + uint32 AmbientColorUnk; + uint32 WmoId; + Vector3 BoundingBox[2]; + uint32 LiquidTypeRelated; + + static WorldModelHeader Read(FILE* stream) + { + WorldModelHeader ret; + fread(&ret.CountMaterials, sizeof(uint32), 1, stream); + fread(&ret.CountGroups, sizeof(uint32), 1, stream); + fread(&ret.CountPortals, sizeof(uint32), 1, stream); + fread(&ret.CountLights, sizeof(uint32), 1, stream); + fread(&ret.CountModels, sizeof(uint32), 1, stream); + fread(&ret.CountDoodads, sizeof(uint32), 1, stream); + fread(&ret.CountSets, sizeof(uint32), 1, stream); + fread(&ret.AmbientColorUnk, sizeof(uint32), 1, stream); + fread(&ret.WmoId, sizeof(uint32), 1, stream); + ret.BoundingBox[0] = Vector3::Read(stream); + ret.BoundingBox[1] = Vector3::Read(stream); + fread(&ret.LiquidTypeRelated, sizeof(uint32), 1, stream); + return ret; + } +}; + +class DoodadInstance +{ +public: + DoodadInstance() {} + uint32 FileOffset; + std::string File; + Vector3 Position; + float QuatW; + float QuatX; + float QuatY; + float QuatZ; + float Scale; + uint32 LightColor; + + static DoodadInstance Read(FILE* stream) + { + DoodadInstance ret; + fread(&ret.FileOffset, sizeof(uint32), 1, stream); + ret.Position = Vector3::Read(stream); + fread(&ret.QuatW, sizeof(float), 1, stream); + fread(&ret.QuatX, sizeof(float), 1, stream); + fread(&ret.QuatY, sizeof(float), 1, stream); + fread(&ret.QuatZ, sizeof(float), 1, stream); + fread(&ret.Scale, sizeof(float), 1, stream); + fread(&ret.LightColor, sizeof(uint32), 1, stream); + return ret; + } +}; + +class DoodadSet +{ +public: + DoodadSet() {} + std::string Name; + uint32 FirstInstanceIndex; + uint32 CountInstances; + uint32 UnknownZero; + + static DoodadSet Read(FILE* stream) + { + DoodadSet ret; + char name[21]; + fread(&name, sizeof(char), 20, stream); + name[20] = '\0'; + ret.Name = name; + fread(&ret.FirstInstanceIndex, sizeof(uint32), 1, stream); + fread(&ret.CountInstances, sizeof(uint32), 1, stream); + fread(&ret.UnknownZero, sizeof(uint32), 1, stream); + return ret; + } +} + +class LiquidHeader +{ +public: + LiquidHeader() {} + uint32 CountXVertices; + uint32 CountYVertices; + uint32 Width; + uint32 Height; + Vector3 BaseLocation; + uint16 MaterialId; + + static LiquidHeader Read(FILE* stream) + { + LiquidHeader ret; + fread(&ret.CountXVertices, sizeof(uint32), 1, stream); + fread(&ret.CountYVertices, sizeof(uint32), 1, stream); + fread(&ret.Width, sizeof(uint32), 1, stream); + fread(&ret.Height, sizeof(uint32), 1, stream); + ret.BaseLocation = Vector3::Read(stream); + fread(&ret.MaterialId, sizeof(uint16), 1, stream); + return ret; + } +}; + +class LiquidData +{ +public: + LiquidData() {} + float** HeightMap; + uint8** RenderFlags; + + bool ShouldRender(int x, int y) + { + return RenderFlags[x][y] != 0x0F; + } + + public static LiquidData Read(FILE* stream, LiquidHeader header) + { + LiquidData ret; + ret.HeightMap = new float*[header.CountXVertices]; + for (int i = 0; i < header.CountXVertices; ++i) + ret.HeightMap[i] = new float[header.CountYVertices]; + + ret.RenderFlags = new uint8*[header.Width]; + for (int i = 0; i < header.Width; ++i) + ret.RenderFlags[i] = new uint8[header.Height]; + + for (int y = 0; y < header.CountYVertices; y++) + { + for (int x = 0; x < header.CountXVertices; x++) + { + uint32 discard; + fread(&discard, sizeof(uint32), 1, stream); + float tmp; + fread(&tmp, sizeof(float), 1, stream); + ret.HeightMap[x][y] = tmp; + } + } + + for (int y = 0; y < header.Height; y++) + { + for (int x = 0; x < header.Width; x++) + { + uint8 tmp; + fread(&tmp, sizeof(uint8), 1, stream); + ret.RenderFlags[x][y] = tmp; + } + } + + return ret; + } +}; + +class H2ORenderMask +{ +public: + H2ORenderMask() {} + uint8 Mask[8]; + + bool ShouldRender(int x, int y) + { + return (Mask[y] >> x & 1) != 0; + } + + static H2ORenderMask Read(FILE* stream) + { + H2ORenderMask ret; + fread(&ret.Mask, sizeof(uint8), 8, stream); + return ret; + } +}; + +class MCNKLiquidData +{ +public: + MCNKLiquidData() {} + const float MaxStandableHeight = 1.5f; + + float** Heights; + H2ORenderMask* Mask; + + bool IsWater(int x, int y, float height) + { + if (!Heights || !Mask) + return false; + if (!Mask->ShouldRender(x, y)) + return false; + float diff = Heights[x][y] - height; + if (diff > MaxStandableHeight) + return true; + return false; + } +}; + +// Dummy class to act as an interface. +class IDefinition +{ +public: + Vector3 Position; + Vector3 Rotation; + virtual float Scale() = 0; +}; + +class Utils +{ +public: + static void Reverse(char word[]); + static std::string ReadString(FILE* file); + static uint32 Size(FILE* file); + static Vector3 ToRecast( Vector3 val ); + static std::string GetAdtPath(std::string world, int x, int y); + static std::string FixModelPath(std::string path); + static G3D::Matrix4 GetTransformation(IDefinition def); + /// They say its better to declare template functions in the header files. + template + static std::string ToString(T val) + { + std::stringstream ss; + ss << val; + return ss.str(); + } + static G3D::Matrix4 RotationX(float angle); + static G3D::Matrix4 RotationY(float angle); + static G3D::Matrix4 RotationZ(float angle); + static float ToRadians(float degrees); + static Vector3 VectorTransform(Vector3 vec, G3D::Matrix matrix); + static std::string GetPathBase(std::string path); + static Vector3 GetLiquidVert(G3D::Matrix4 transformation, Vector3 basePosition, float height, int x, int y); + static float Distance(float x, float y); +}; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/WDT.cpp b/src/tools/mesh_extractor/WDT.cpp new file mode 100644 index 00000000000..c06d8ac9677 --- /dev/null +++ b/src/tools/mesh_extractor/WDT.cpp @@ -0,0 +1,55 @@ +#include "WDT.h" +#include "Chunk.h" +#include "ChunkedData.h" +#include "Utils.h" +#include "WorldModelHandler.h" + +WDT::WDT(std::string file) : IsValid(false), IsGlobalModel(false) +{ + Data = new ChunkedData(file, 2); + ReadTileTable(); + ReadGlobalModel(); +} + +void WDT::ReadGlobalModel() +{ + Chunk* fileChunk = Data->GetChunkByName("MWMO"); + Chunk* defChunk = Data->GetChunkByName("MODF"); + if (!fileChunk || !defChunk) + return; + + IsGlobalModel = true; + ModelDefinition = WorldModelDefinition::Read(defChunk->GetStream()); + ModelFile = Utils::ReadString(fileChunk->GetStream()); +} + +void WDT::ReadTileTable() +{ + Chunk* chunk = Data->GetChunkByName("MAIN"); + if (!chunk) + return; + IsValid = true; + FILE* stream = chunk->GetStream(); + for (int y = 0; y < 64; ++y) + { + for (int x = 0; x < 64; ++x) + { + const uint32 hasTileFlag = 0x1; + uint32 flags; + uint32 discard; + fread(&flags, sizeof(uint32), 1, stream); + fread(&discard, sizeof(uint32), 1, stream); + if (flags & hasTileFlag) + TileTable.push_back(TilePos(x, y)); + + } + } +} + +bool WDT::HasTile( int x, int y ) +{ + for (std::vector::iterator itr = TileTable.begin(); itr != TileTable.end(); ++itr) + if (itr->X == x && itr->Y == y) + return true; + return false; +} diff --git a/src/tools/mesh_extractor/WDT.h b/src/tools/mesh_extractor/WDT.h new file mode 100644 index 00000000000..a12aa65218b --- /dev/null +++ b/src/tools/mesh_extractor/WDT.h @@ -0,0 +1,27 @@ +#ifndef WDT_H +#define WDT_H +#include +#include + +#include "ChunkedData.h" +#include "WorldModelHandler.h" +#include "Utils.h" + +class WDT +{ +public: + WDT(std::string file); + + ChunkedData* Data; + std::vector TileTable; + bool IsGlobalModel; + bool IsValid; + std::string ModelFile; + WorldModelDefinition ModelDefinition; + bool HasTile(int x, int y); +private: + void ReadGlobalModel(); + void ReadTileTable(); +}; + +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/WorldModelGroup.cpp b/src/tools/mesh_extractor/WorldModelGroup.cpp new file mode 100644 index 00000000000..308c7ff7b86 --- /dev/null +++ b/src/tools/mesh_extractor/WorldModelGroup.cpp @@ -0,0 +1,122 @@ +#include "WorldModelGroup.h" +#include "ChunkedData.h" +#include "Chunk.h" + +WorldModelGroup::WorldModelGroup( std::string path, int groupIndex ) : GroupIndex(groupIndex), IsBad(false) +{ + Data = new ChunkedData(path); + if (!Data->Stream) + { + IsBad = true; + return; + } + Chunk* mainChunk = Data->GetChunkByName("MOGP"); + int32 firstSub = mainChunk->FindSubChunkOffset("MOPY"); + if (firstSub == -1) + return; + FILE* stream = mainChunk->GetStream(); + fseek(stream, firstSub, SEEK_SET); + SubData = new ChunkedData(stream, mainChunk->Length - firstSub); + + ReadBoundingBox(); + ReadMaterials(); + ReadTriangles(); + ReadVertices(); + ReadNormals(); + ReadLiquid(); +} + +void WorldModelGroup::ReadNormals() +{ + Chunk* chunk = SubData->GetChunkByName("MONR"); + if (!chunk) + return; + + uint32 normalCount = chunk->Length / 12; + Assert(normalCount == Vertices.size(), "normalCount is different than the Vertices count"); + Normals.reserve(normalCount); + FILE* stream = chunk->GetStream(); + for (int i = 0; i < normalCount; i++) + Normals[i] = Vector3::Read(stream); +} + +void WorldModelGroup::ReadLiquid() +{ + Chunk* chunk = SubData->GetChunkByName("MLIQ"); + if (!chunk) + return; + + HasLiquidData = true; + FILE* stream = chunk->GetStream(); + LiquidDataHeader = LiquidHeader.Read(stream); + LiquidDataGeometry = LiquidData.Read(stream, LiquidDataHeader); +} + +void WorldModelGroup::ReadVertices() +{ + Chunk* chunk = SubData->GetChunkByName("MOVT"); + if (!chunk) + return; + + uint32 verticeCount = chunk.Length / 12; + Vertices.reserve(verticeCount); + FILE* stream = chunk->GetStream(); + for (int i = 0; i < verticeCount; i++) + Vertices.push_back(Vector3::Read(stream)); +} + +void WorldModelGroup::ReadTriangles() +{ + Chunk* chunk = SubData->GetChunkByName("MOVI"); + if (!chunk) + return; + + uint32 triangleCount = chunk.Length / 6; + Assert(triangleCount == TriangleFlags.size(), "triangleCount != TriangleFlags.size()"); + FILE* stream = chunk.GetStream(); + Triangles.reserve(triangleCount); + for (int i = 0; i < triangleCount; i++) + { + uint16 v0; + uint16 v1; + uint16 v2; + fread(&v0, sizeof(uint16), 1, stream); + fread(&v1, sizeof(uint16), 1, stream); + fread(&v2, sizeof(uint16), 1, stream); + Triangles.push_back(Triangle(Constants::TRIANGLE_TYPE_WMO, v0, v1, v2)); + } +} + +void WorldModelGroup::ReadMaterials() +{ + Chunk* chunk = SubData->GetChunkByName("MOPY"); + if (!chunk) + return; + + FILE* stream = chunk->GetStream(); + uint32 triangleCount = chunk.Length / 2; + TriangleFlags.reserve(triangleCount); + TriangleMaterials.reserve(triangleCount); + for (int i = 0; i < triangleCount; i++) + { + uint8 tmp; + fread(&tmp, sizeof(uint8), 1, stream); + TriangleFlags.push_back(tmp); + // Read again for material. + fread(&tmp, sizeof(uint8), 1, stream); + TriangleMaterials.push_back(tmp); + } +} + +void WorldModelGroup::ReadBoundingBox() +{ + Chunk* chunk = Data->GetChunkByName("MOGP"); + if (!chunk) + return; + + FILE* stream = chunk->GetStream(); + fseek(stream, 8, SEEK_CUR): + fread(&Flags, sizeof(uint32), 1, stream); + BoundingBox[0] = Vector3::Read(stream); + BoundingBox[1] = Vector3::Read(stream); +} diff --git a/src/tools/mesh_extractor/WorldModelGroup.h b/src/tools/mesh_extractor/WorldModelGroup.h new file mode 100644 index 00000000000..1dc754d0221 --- /dev/null +++ b/src/tools/mesh_extractor/WorldModelGroup.h @@ -0,0 +1,33 @@ +#ifndef WMOGROUP_H +#define WMOGROUP_H +#include "ChunkedData.h" +#include "Utils.h" + +class WorldModelGroup +{ +public: + WorldModelGroup(std::string path, int groupIndex); + ChunkedData* Data; + ChunkedData* SubData; + int GroupIndex; + Vector3 BoundingBox[2]; + uint32 Flags; + std::vector TriangleFlags; + std::vector TriangleMaterials; + std::vector > Triangles; + std::vector Vertices; + std::vector Normals; + + bool HasLiquidData; + bool IsBad; + LiquidHeader LiquidDataHeader; + LiquidData LiquidDataGeometry; +private: + void ReadNormals(); + void ReadLiquid(); + void ReadVertices(); + void ReadTriangles(); + void ReadMaterials(); + void ReadBoundingBox(); +}; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp new file mode 100644 index 00000000000..e895e2bfde8 --- /dev/null +++ b/src/tools/mesh_extractor/WorldModelHandler.cpp @@ -0,0 +1,190 @@ +#include "WorldModelHandler.h" +#include "Chunk.h" +#include "Cache.h" +#include "Common.h" +#include "g3d/Matrix4.h" +#include + +WorldModelDefinition WorldModelDefinition::Read( FILE* file ) +{ + WorldModelDefinition ret; + fread(&ret.MwidIndex, sizeof(uint32), 1, file); + fread(&ret.UniqueId, sizeof(uint32), 1, file); + ret.Position = Vector3::Read(file); + ret.Rotation = Vector3::Read(file); + ret.UpperExtents = Vector3::Read(file); + ret.LowerExtents = Vector3::Read(file); + fread(&ret.Flags, sizeof(uint16), 1, file); + fread(&ret.DooadSet, sizeof(uint16), 1, file); + uint32 discard; + fread(&discard, sizeof(uint32), 1, file); + return ret; +} + + +WorldModelHandler::WorldModelHandler( ADT* adt ) : ObjectDataHandler(adt) +{ + if (!adt->HasObjectData) + return; + ReadModelPaths(); + ReadDefinitions(); +} + +void WorldModelHandler::ProcessInternal( ChunkedData* subChunks ) +{ + if (!IsSane()) + return; + Chunk* wmoReferencesChunk = subChunks->GetChunkByName("MCRW"); + if (!wmoReferencesChunk) + return; + FILE* stream = wmoReferencesChunk->GetStream(); + uint32 refCount = wmoReferencesChunk->Length / 4; + for (int i = 0; i < refCount; i++) + { + int32 index; + fread(&index, sizeof(int32), 1, stream); + + if (index < 0 || index >= _definitions->size()) + continue; + + WorldModelDefinition wmo = (*_definitions)[index]; + + if (_drawn.find(wmo.UniqueId) != _drawn.end()) + continue; + _drawn.insert(wmo.UniqueId); + + if (wmo.MwidIndex >= _paths->size()) + continue; + + std::string path = _paths[(int) wmo.MwidIndex]; + WorldModelRoot* model = Cache->WorldModelCache.Get(path); + if (!model) + { + model = new WorldModelRoot(path); + Cache->WorldModelCache.Insert(path, model); + } + + Vertices.reserve(1000); + Triangles.reserve(1000); + + InsertModelGeometry(Vertices, Triangles, wmo, model); + } +} + +void WorldModelHandler::InsertModelGeometry( std::vector verts, std::vector > tris, WorldModelDefinition& def, WorldModelRoot* root ) +{ + G3D::Matrix4 transformation = Utils::GetTransformation(); + for (std::vector::iterator group = root->Groups.begin(); group != root->Groups.end(); ++group) + { + uint32 vertOffset = verts.size(); + for (std::vector::iterator itr2 = group->Vertices.begin(); itr2 != group->Vertices.end(); ++itr2) + verts.push_back(Utils::VectorTransform(*itr2, transformation)); + + for (int i = 0; i < group->Triangles.size(); ++i) + { + // only include collidable tris + if ((group->TriangleFlags[i] & 0x04) != 0 && group->TriangleMaterials[i] != 0xFF) + continue; + Triangle tri = group->Triangles[i]; + tris.push_back(Triangle(Constants::TRIANGLE_TYPE_WMO, tri.V0 + vertOffset, tri.V1 + vertOffset, tri.V2 + vertOffset)); + } + } + + if (def.DoodadSet >= 0 && def.DoodadSet < root->DoodadSets.size()) + { + DoodadSet set = root->DoodadSets[def.DoodadSet]; + std::vector instances = new std::vector; + instances.reserve(set.CountInstances); + for (uint32 i = set.FirstInstanceIndex; i < (set.CountInstances + set.FirstInstanceIndex); i++) + { + if (i >= root->DoodadInstances.size()) + break; + instances.push_back(root->DoodadInstances[i]); + } + + for (std::vector::iterator instance = instances.begin(); instance != instances.end(); ++instance) + { + Model* model = Cache.ModelCache.Get(instance->File); + if (!model) + { + model = new Model(instance->File); + Cache.ModelCache.Insert(instance->File, model); + } + + if (!model.IsCollidable) + continue; + G3D::Matrix4 doodadTransformation = Utils::GetWmoDoodadTransformation(instance, def); + int vertOffset = verts.size(); + for (std::vector::iterator itr2 = model->Vertices.begin(); itr2 != model->Vertices.end(); ++itr2) + verts.push_back(Utils::VectorTransform(*itr2, doodadTransformation)); + for (std::vector >::iterator itr2 = model->Triangles.begin(); itr2 != model->Triangles.end(); ++itr2) + tris.push_back(Triangle(Constants::TRIANGLE_TYPE_WMO, itr2->V0 + vertOffset, itr2->V1 + vertOffset, itr2->V2 + vertOffset)); + } + + for (std::vector::iterator group = root->Groups.begin(); group != root->Groups.end(); ++group) + { + if (!group->HasLiquidData) + continue; + + for (int y = 0; y < group->LiquidDataHeader.Height; y++) + { + for (int x = 0; x < group->LiquidDataHeader.Width; x++) + { + if (!group->LiquidDataGeometry.ShouldRender(x, y)) + continue; + + uint32 vertOffset = verts.size(); + verts.push_back(Utils::GetLiquidVert(transformation, group->LiquidDataHeader.BaseLocation, + group->LiquidDataGeometry.HeightMap[x][y], x, y)); + verts.push_back(Utils::GetLiquidVert(transformation, group->LiquidDataHeader.BaseLocation, + group->LiquidDataGeometry.HeightMap[x + 1][y], x + 1, y)); + verts.push_back(Utils::GetLiquidVert(transformation, group->LiquidDataHeader.BaseLocation, + group->LiquidDataGeometry.HeightMap[x][y + 1], x, y + 1)); + verts.push_back(Utils::GetLiquidVert(transformation, group->LiquidDataHeader.BaseLocation, + group->LiquidDataGeometry.HeightMap[x + 1][y + 1], x + 1, y + 1)); + + tris.push_back(Triangle(Constants::TRIANGLE_TYPE_WATER, vertOffset, vertOffset + 2, vertOffset + 1)); + tris.push_back(new Triangle(Constants::TRIANGLE_TYPE_WATER, vertOffset + 2, vertOffset + 3, vertOffset + 1)); + + } + } + } + } +} + +void WorldModelHandler::ReadDefinitions() +{ + Chunk* chunk = Source->ObjectData->GetChunkByName("MODF"); + if (!chunk) + return; + + const int32 definitionSize = 64; + uint32 definitionCount = chunk.Length / definitionSize; + _definitions = new new std::vector; + _definitions->reserve(definitionCount); + FILE* stream = chunk->GetStream(); + for (int i = 0; i < definitionCount; i++) + _definitions->push_back(WorldModelDefinition::Read(stream)); +} + +void WorldModelHandler::ReadModelPaths() +{ + Chunk* mwid = Source->ObjectData->GetChunkByName("MWID"); + Chunk* mwmo = Source->ObjectData->GetChunkByName("MWMO"); + if (!mwid || !mwmo) + return; + + uint32 paths = mwid.Length / 4; + _paths = new std::vector; + _paths->reserve(paths); + for (int i = 0; i < paths; i++) + { + FILE* stream = mwid->GetStream(); + fseek(stream, i * 4, SEEK_CUR); + uint32 offset; + fread(&offset, sizeof(uint32), 1, stream); + FILE* dataStream = mwmo->GetStream(); + fseek(dataStream, offset + mwmo->Offset, SEEK_SET); + _paths->push_back(Utils::ReadString(dataStream)); + } +} diff --git a/src/tools/mesh_extractor/WorldModelHandler.h b/src/tools/mesh_extractor/WorldModelHandler.h new file mode 100644 index 00000000000..2236339de9d --- /dev/null +++ b/src/tools/mesh_extractor/WorldModelHandler.h @@ -0,0 +1,42 @@ +#ifndef WMODEL_HNDL_H +#define WMODEL_HNDL_H +#include "Common.h" +#include "Utils.h" +#include "ObjectDataHandler.h" +#include "ADT.h" + +#include +#include + +struct WorldModelDefinition : IDefinition +{ + WorldModelDefinition() {} + uint32 MwidIndex; + uint32 UniqueId; + Vector3 UpperExtents; + Vector3 LowerExtents; + uint16 Flags; + uint16 DoodadSet; + float Scale() { return 1.0f; } + static WorldModelDefinition Read(FILE* file); +}; + +class WorldModelHandler : public ObjectDataHandler +{ +public: + WorldModelHandler(ADT* adt); + + std::vector Vertices; + std::vector > Triangles; + bool IsSane() { return _definitions && _paths; } + void InsertModelGeometry(std::vector verts, std::vector > tris, WorldModelDefinition& def, WorldModelRoot* root); +protected: + void ProcessInternal(ChunkedData* data); +private: + void ReadDefinitions(); + void ReadModelPaths(); + std::set _drawn; + std::vector* _definitions; + std::vector* _paths; +}; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/WorldModelRoot.cpp b/src/tools/mesh_extractor/WorldModelRoot.cpp new file mode 100644 index 00000000000..9764e339242 --- /dev/null +++ b/src/tools/mesh_extractor/WorldModelRoot.cpp @@ -0,0 +1,74 @@ +#include "WorldModelRoot.h" +#include "ChunkedData.h" +#include "Utils.h" + +WorldModelRoot::WorldModelRoot( std::string path ) +{ + Data = new ChunkedData(path); + Path = path; + ReadHeader(); + ReadGroups(); + ReadDoodadInstances(); + ReadDoodadSets(); +} + +void WorldModelRoot::ReadGroups() +{ + std::string pathBase = Utils::GetPathBase(Path); + Groups.reserve(Header.CountGroups); + for (int i = 0; i < Header.CountGroups; i++) + { + char name[200]; + sprintf(name, "%s_%03u.wmo", pathBase.c_str(), i); + WorldModelGroup group(name, i); + if (!group.IsBad) + Groups.push_back(group); + } +} + +void WorldModelRoot::ReadDoodadSets() +{ + Chunk* chunk = Data->GetChunkByName("MODS"); + if (!chunk) + return; + + FILE* stream = chunk->GetStream(); + Assert(chunk.Length / 32 == Header.CountSets, "chunk.Length / 32 == Header.CountSets"); + DoodadSets.reserve(Header.CountSets); + for (int i = 0; i < Header.CountSets; i++) + DoodadSets.push_back(DoodadSet::Read(stream)); +} + +void WorldModelRoot::ReadDoodadInstances() +{ + Chunk* chunk = Data->GetChunkByName("MODD"); + Chunk* nameChunk = Data->GetChunkByName("MODN"); + if (!chunk || !nameChunk) + return; + + const uint32 instanceSize = 40; + uint32 countInstances = chunk->Length / instanceSize; + DoodadInstances.reserve(countInstances); + for (int i = 0; i < countInstances; i++) + { + FILE* stream = chunk->GetStream(); + fseek(stream, instanceSize * i, SEEK_CUR); + DoodadInstance instance = DoodadInstance::Read(stream); + FILE* nameStream = nameChunk->GetStream(); + if (instance.FileOffset >= nameChunk->Length) + continue; + fseek(nameStream, instance.FileOffset, SEEK_CUR); + instance.File = Utils::ReadString(nameStream); + DoodadInstances.push_back(instance); + } +} + +void WorldModelRoot::ReadHeader() +{ + Chunk* chunk = Data->GetChunkByName("MOHD"); + if (!chunk) + return; + + FILE* stream = chunk->GetStream(); + Header = WorldModelHeader::Read(stream); +} diff --git a/src/tools/mesh_extractor/WorldModelRoot.h b/src/tools/mesh_extractor/WorldModelRoot.h new file mode 100644 index 00000000000..c06ff3d5d2b --- /dev/null +++ b/src/tools/mesh_extractor/WorldModelRoot.h @@ -0,0 +1,26 @@ +#ifndef WMOROOT_H +#define WMOROOT_H +#include +#include + +#include "ChunkedData.h" +#include "Utils.h" +#include "WorldModelGroup.h" + +class WorldModelRoot +{ +public: + WorldModelRoot(std::string path); + std::string Path; + ChunkedData* Data; + WorldModelHeader Header; + std::vector DoodadInstances; + std::vector DoodadSets; + std::vector Groups; +private: + void ReadGroups(); + void ReadDoodadSets(); + void ReadDoodadInstances(); + void ReadHeader(); +}; +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/readme b/src/tools/mesh_extractor/readme new file mode 100644 index 00000000000..85cd7cfc975 --- /dev/null +++ b/src/tools/mesh_extractor/readme @@ -0,0 +1,6 @@ +Experimental mesh extractor. +Original work in C# by stschake +Thanks to: +Subv +~ +For helping in the porting to C++ \ No newline at end of file From ad0cd9f40acff1ff6d7571426b4acb1ea675d7a6 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 28 Sep 2012 07:59:22 -0500 Subject: [PATCH 066/204] Tools: Made more updates to the MeshExtractor --- src/tools/mesh_extractor/ADT.h | 10 ++- src/tools/mesh_extractor/LiquidHandler.cpp | 96 +++++++++++++++++++++- src/tools/mesh_extractor/LiquidHandler.h | 3 + src/tools/mesh_extractor/MapChunk.cpp | 8 +- src/tools/mesh_extractor/MapChunk.h | 2 +- src/tools/mesh_extractor/Utils.cpp | 11 +++ src/tools/mesh_extractor/Utils.h | 71 ++++++++++++++-- 7 files changed, 186 insertions(+), 15 deletions(-) diff --git a/src/tools/mesh_extractor/ADT.h b/src/tools/mesh_extractor/ADT.h index 18b811a4e4c..43984d0902c 100644 --- a/src/tools/mesh_extractor/ADT.h +++ b/src/tools/mesh_extractor/ADT.h @@ -4,17 +4,19 @@ #include "MapChunk.h" #include "DoodadHandler.h" #include "WorldModelHandler.h" +#include "LiquidHandler.h" class ADT { public: - ADT(); - ~ADT() { delete[] MapChunks; delete ObjectData; delete Data; } + ADT(std::string file); + ~ADT(); + + void Read(); ChunkedData* ObjectData; ChunkedData* Data; - // This here is not a pointer, is an array of objects ( made this way to allow the dynamic allocation ) - MapChunk* MapChunks; + std::vector MapChunks; MHDR Header; // Can we dispose of this? bool HasObjectData; diff --git a/src/tools/mesh_extractor/LiquidHandler.cpp b/src/tools/mesh_extractor/LiquidHandler.cpp index 5924c693196..3217bb2cbc6 100644 --- a/src/tools/mesh_extractor/LiquidHandler.cpp +++ b/src/tools/mesh_extractor/LiquidHandler.cpp @@ -1 +1,95 @@ -#include "LiquidHandler.h" \ No newline at end of file +#include "LiquidHandler.h" +#include "Utils.h" + +LiquidHandler::LiquidHandler( ADT* adt ) : Source(adt) +{ + HandleNewLiquid(); +} + +void LiquidHandler::HandleNewLiquid() +{ + Chunk* chunk = Source->Data->GetChunkByName("MH2O"); + if (!chunk) + return; + + Vertices.reserve(1000); + Triangles.reserve(1000); + + FILE* stream = chunk->GetStream(); + H2OHeader header[256]; + MCNKData.reserve(256); + for (int i = 0; i < 256; i++) + header[i] = H2OHeader::Read(stream); + + for (int i = 0; i < 256; i++) + { + H2OHeader h = header[i]; + if (h.LayerCount == 0) + continue; + fseek(stream, chunk->Offset + h.OffsetInformation, SEEK_SET); + H2OInformation information = H2OInformation::Read(stream); + + float** heights = new float*[9]; + for (int i = 0; i < 9; ++i) + heights[i] = new float[9]; + + H2ORenderMask renderMask; + if (information.LiquidType != 2) + { + fseek(stream, chunk->Offset + h.OffsetRender, SEEK_SET); + renderMask = H2ORenderMask::Read(stream); + if ((Utils::IsAllZero(renderMask.Mask, 8) || (information.Width == 8 && information.Height == 8)) && information.OffsetMask2) + { + fseek(stream, chunk->Offset + information.OffsetMask2, SEEK_SET); + uint32 size = ceil(information.Width * information.Height / 8.0f); + uint8* altMask = new uint8[size]; + fread(altMax, sizeof(uint8), size, stream); + + for (int mi = 0; mi < size; mi++) + renderMask.Mask[mi + information.OffsetY] |= altMask[mi]; + delete[] altMask; + } + fseek(stream, chunk->Offset + information.OffsetHeightmap, SEEK_SET); + + for (int y = information.OffsetY; y < (information.OffsetY + information.Height); y++) + for (int x = information.OffsetX; x < (information.OffsetX + information.Width); x++) + fread(&heights[x][y], sizeof(float), 1, stream); + } + else + { + // Fill with ocean data + for (uint32 i = 0; i < 8; ++i) + renderMask.Mask[i] = 0xFF; + + for (uint32 y = 0; y < 9; ++y) + for (uint32 x = 0; x < 9; ++x) + heights[x][y] = information.HeightLevel1; + } + + MCNKData.push_back(MCNKLiquidData(heights, renderMask)); + + for (int y = information.OffsetY; y < (information.OffsetY + information.Height); y++) + { + for (int x = information.OffsetX; x < (information.OffsetX + information.Width); x++) + { + if (!renderMask.ShouldRender(x, y)) + continue; + + MapChunk* mapChunk = Source->MapChunks[i]; + Vector3 location = mapChunk->Header.Position; + location.y = location.y - (x * Constants::UnitSize); + location.x = location.x - (y * Constants::UnitSize); + location.z = heights[x][y]; + + uint32 vertOffset = Vertices.size(); + Vertices.push_back(location); + Vertices.push_back(Vector3(location.x - Constants::UnitSize, location.y, location.z)); + Vertices.push_back(new Vector3(location.x, location.y - Constants::UnitSize, location.z)); + Vertices.push_back(new Vector3(location.x - Constants::UnitSize, location.y - Constants::UnitSize, location.z)); + + Triangles.push_back(Triangle(Constants::TRIANGLE_TYPE_WATER, vertOffset, vertOffset+2, vertOffset + 1)); + Triangles.push_back(Triangle(Constants::TRIANGLE_TYPE_WATER, vertOffset + 2, vertOffset + 3, vertOffset + 1)); + } + } + } +} diff --git a/src/tools/mesh_extractor/LiquidHandler.h b/src/tools/mesh_extractor/LiquidHandler.h index ba89be33e08..138b2da2ad9 100644 --- a/src/tools/mesh_extractor/LiquidHandler.h +++ b/src/tools/mesh_extractor/LiquidHandler.h @@ -9,9 +9,12 @@ class LiquidHandler { public: + LiquidHandler(ADT* adt); ADT* Source; std::vector Vertices; std::vector > Triangles; std::vector MCNKData; +private: + void HandleNewLiquid(); }; #endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/MapChunk.cpp b/src/tools/mesh_extractor/MapChunk.cpp index 95f8c2e56c0..4cb5dc04d2d 100644 --- a/src/tools/mesh_extractor/MapChunk.cpp +++ b/src/tools/mesh_extractor/MapChunk.cpp @@ -1,7 +1,7 @@ #include "MapChunk.h" #include "ADT.h" -MapChunk::MapChunk( ADT* _adt, Chunk* chunk ) : adt(_adt), Source(chunk), Vertices(NULL) +MapChunk::MapChunk( ADT* _adt, Chunk* chunk ) : Adt(_adt), Source(chunk), Vertices(NULL) { FILE* stream = chunk->GetStream(); Header.Read(stream); @@ -26,14 +26,14 @@ void MapChunk::GenerateTriangles() uint32 center = (17 * y) + 9 + x; uint8 triangleType = Constants::TRIANGLE_TYPE_TERRAIN; - if (ADT.LiquidHandler && ADT.LiquidHandler.MCNKData) + if (Adt->_LiquidHandler && !Adt->_LiquidHandler->MCNKData.empty()) { - var data = ADT.LiquidHandler.MCNKData[Index]; + MCNKLiquidData& data = Adt->_LiquidHandler->MCNKData[Index]; uint32 maxHeight = std::max( std::max( std::max(std::max(Vertices[topLeft].z, Vertices[topRight].z), Vertices[bottomLeft].z), Vertices[bottomRight].z), Vertices[center].z); - if (data && data->IsWater(x, y, maxHeight)) + if (data.IsWater(x, y, maxHeight)) triangleType = Constants::TRIANGLE_TYPE_WATER; } diff --git a/src/tools/mesh_extractor/MapChunk.h b/src/tools/mesh_extractor/MapChunk.h index 034429a81ec..9d7b02bbfe5 100644 --- a/src/tools/mesh_extractor/MapChunk.h +++ b/src/tools/mesh_extractor/MapChunk.h @@ -15,7 +15,7 @@ public: void GenerateTriangles(); void GenerateVertices(FILE* stream); static bool HasHole(uint32 map, int x, int y); - ADT* adt; + ADT* Adt; Chunk* Source; MapChunkHeader Header; Vector3* Vertices; diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp index 03473eb0794..0b92dab267f 100644 --- a/src/tools/mesh_extractor/Utils.cpp +++ b/src/tools/mesh_extractor/Utils.cpp @@ -161,3 +161,14 @@ float Utils::Distance( float x, float y ) { return sqrt(x*x + y*y); } + +std::string Utils::Replace( std::string str, const std::string& oldStr, const std::string& newStr ) +{ + size_t pos = 0; + while((pos = str.find(oldStr, pos)) != std::string::npos) + { + str.replace(pos, oldStr.length(), newStr); + pos += newStr.length(); + } + return str; +} diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index cda5f4c7cd8..aa73db173a7 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -16,9 +16,9 @@ struct Vector3 float x; float y; float z; - Vector3 operator+(Vector3 right, Vector3 left) + Vector3 operator +(Vector3 const& other) { - return Vector3(right.x+left.x, right.y+left.y, right.z+left.z); + return Vector3(x + other.x, y + other.y, z + other.z); } static Vector3 Read(FILE* file); }; @@ -380,7 +380,7 @@ public: return RenderFlags[x][y] != 0x0F; } - public static LiquidData Read(FILE* stream, LiquidHeader header) + static LiquidData Read(FILE* stream, LiquidHeader header) { LiquidData ret; ret.HeightMap = new float*[header.CountXVertices]; @@ -440,14 +440,15 @@ class MCNKLiquidData { public: MCNKLiquidData() {} + MCNKLiquidData(float** heights, H2ORenderMask mask) : Heights(heights), Mask(mask) {} const float MaxStandableHeight = 1.5f; float** Heights; - H2ORenderMask* Mask; + H2ORenderMask Mask; bool IsWater(int x, int y, float height) { - if (!Heights || !Mask) + if (!Heights) return false; if (!Mask->ShouldRender(x, y)) return false; @@ -458,6 +459,56 @@ public: } }; +class H2OHeader +{ +public: + H2OHeader() {} + uint32 OffsetInformation; + uint32 LayerCount; + uint32 OffsetRender; + + static H2OHeader Read(FILE* stream) + { + H2OHeader ret; + fread(&ret.OffsetInformation, sizeof(uint32), 1, stream); + fread(&ret.LayerCount, sizeof(uint32), 1, stream); + fread(&ret.OffsetRender, sizeof(uint32), 1, stream); + return ret; + } +}; + +class H2OInformation +{ +public: + H2OInformation() {} + uint16 LiquidType; + uint16 Flags; + float HeightLevel1; + float HeightLevel2; + uint8 OffsetX; + uint8 OffsetY; + uint8 Width; + uint8 Height; + uint32 OffsetMask2; + uint32 OffsetHeightmap; + + static H2OInformation Read(FILE* stream) + { + H2OInformation ret; + fread(&ret.LiquidType, sizeof(uint16), 1, stream); + fread(&ret.Flags, sizeof(uint16), 1, stream); + fread(&ret.HeightLevel1, sizeof(float), 1, stream); + fread(&ret.HeightLevel2, sizeof(float), 1, stream); + fread(&ret.OffsetX, sizeof(uint8), 1, stream); + fread(&ret.OffsetY, sizeof(uint8), 1, stream); + fread(&ret.Width, sizeof(uint8), 1, stream); + fread(&ret.Height, sizeof(uint8), 1, stream); + fread(&ret.OffsetMask2, sizeof(uint32), 1, stream); + fread(&ret.OffsetHeightmap, sizeof(uint32), 1, stream); + return ret; + } +}; + // Dummy class to act as an interface. class IDefinition { @@ -493,5 +544,15 @@ public: static std::string GetPathBase(std::string path); static Vector3 GetLiquidVert(G3D::Matrix4 transformation, Vector3 basePosition, float height, int x, int y); static float Distance(float x, float y); + template + static bool IsAllZero(T* arr, uint32 size) + { + for (uint32 i = 0; i < size; ++i) + if (arr[i]) + return false; + return true; + } + static std::string Utils::Replace( std::string str, const std::string& oldStr, const std::string& newStr ); + }; #endif \ No newline at end of file From 753f43718e59d4bf94b35e25a335e845e2277002 Mon Sep 17 00:00:00 2001 From: kaelima Date: Fri, 28 Sep 2012 15:04:47 +0200 Subject: [PATCH 067/204] Address a few compile errors. Correct spacing in HandleMmapPathCommand. --- src/server/scripts/Commands/cs_mmaps.cpp | 84 +++++++++---------- src/tools/mesh_extractor/Cache.h | 4 +- src/tools/mesh_extractor/DoodadHandler.cpp | 12 +-- src/tools/mesh_extractor/DoodadHandler.h | 2 +- src/tools/mesh_extractor/Geometry.cpp | 6 +- src/tools/mesh_extractor/TileBuilder.cpp | 2 +- src/tools/mesh_extractor/Utils.cpp | 10 +-- src/tools/mesh_extractor/Utils.h | 22 ++--- src/tools/mesh_extractor/WorldModelGroup.cpp | 14 ++-- .../mesh_extractor/WorldModelHandler.cpp | 6 +- src/tools/mesh_extractor/WorldModelHandler.h | 6 +- src/tools/mesh_extractor/WorldModelRoot.cpp | 2 +- 12 files changed, 89 insertions(+), 81 deletions(-) diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp index c1fc4d1a5e9..e4a0ebf7f24 100644 --- a/src/server/scripts/Commands/cs_mmaps.cpp +++ b/src/server/scripts/Commands/cs_mmaps.cpp @@ -60,60 +60,58 @@ public: static bool HandleMmapPathCommand(ChatHandler* handler, char const* args) { - if (!MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(handler->GetSession()->GetPlayer()->GetMapId())) - { - handler->PSendSysMessage("NavMesh not loaded for current map."); - return true; - } + if (!MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(handler->GetSession()->GetPlayer()->GetMapId())) + { + handler->PSendSysMessage("NavMesh not loaded for current map."); + return true; + } - handler->PSendSysMessage("mmap path:"); + handler->PSendSysMessage("mmap path:"); - // units - Player* player = handler->GetSession()->GetPlayer(); - Unit* target = handler->getSelectedUnit(); - if (!player || !target) - { - handler->PSendSysMessage("Invalid target/source selection."); - return true; - } + // units + Player* player = handler->GetSession()->GetPlayer(); + Unit* target = handler->getSelectedUnit(); + if (!player || !target) + { + handler->PSendSysMessage("Invalid target/source selection."); + return true; + } - char* para = strtok((char*)args, " "); + char* para = strtok((char*)args, " "); - bool useStraightPath = false; - if (para && strcmp(para, "true") == 0) - useStraightPath = true; + bool useStraightPath = false; + if (para && strcmp(para, "true") == 0) + useStraightPath = true; - // unit locations - float x, y, z; - player->GetPosition(x, y, z); + // unit locations + float x, y, z; + player->GetPosition(x, y, z); - // path - PathGenerator path(target); - path.SetUseStraightPath(useStraightPath); - path.CalculatePath(x, y, z); + // path + PathGenerator path(target); + path.SetUseStraightPath(useStraightPath); + bool result = path.CalculatePath(x, y, z); - PointsArray pointPath = path.GetPath(); - handler->PSendSysMessage("%s's path to %s:", target->GetName(), player->GetName()); - handler->PSendSysMessage("Building %s", useStraightPath ? "StraightPath" : "SmoothPath"); - handler->PSendSysMessage("length %i type %u", pointPath.size(), path.GetPathType()); + PointsArray pointPath = path.GetPath(); + handler->PSendSysMessage("%s's path to %s:", target->GetName(), player->GetName()); + handler->PSendSysMessage("Building: %s", useStraightPath ? "StraightPath" : "SmoothPath"); + handler->PSendSysMessage("Result: %s - Length: %i - Type: %u", (result ? "true" : "false"), pointPath.size(), path.GetPathType()); - Vector3 start = path.GetStartPosition(); - Vector3 end = path.GetEndPosition(); - Vector3 actualEnd = path.GetActualEndPosition(); + Vector3 start = path.GetStartPosition(); + Vector3 end = path.GetEndPosition(); + Vector3 actualEnd = path.GetActualEndPosition(); - handler->PSendSysMessage("start (%.3f, %.3f, %.3f)", start.x, start.y, start.z); - handler->PSendSysMessage("end (%.3f, %.3f, %.3f)", end.x, end.y, end.z); - handler->PSendSysMessage("actual end (%.3f, %.3f, %.3f)", actualEnd.x, actualEnd.y, actualEnd.z); + handler->PSendSysMessage("StartPosition (%.3f, %.3f, %.3f)", start.x, start.y, start.z); + handler->PSendSysMessage("EndPosition (%.3f, %.3f, %.3f)", end.x, end.y, end.z); + handler->PSendSysMessage("ActualEndPosition (%.3f, %.3f, %.3f)", actualEnd.x, actualEnd.y, actualEnd.z); - if (!player->isGameMaster()) - handler->PSendSysMessage("Enable GM mode to see the path points."); + if (!player->isGameMaster()) + handler->PSendSysMessage("Enable GM mode to see the path points."); - // this entry visible only to GM's with "gm on" - static const uint32 WAYPOINT_NPC_ENTRY = 1; - for (uint32 i = 0; i < pointPath.size(); ++i) - player->SummonCreature(WAYPOINT_NPC_ENTRY, pointPath[i].x, pointPath[i].y, pointPath[i].z, 0, TEMPSUMMON_TIMED_DESPAWN, 9000); + for (uint32 i = 0; i < pointPath.size(); ++i) + player->SummonCreature(VISUAL_WAYPOINT, pointPath[i].x, pointPath[i].y, pointPath[i].z, 0, TEMPSUMMON_TIMED_DESPAWN, 9000); - return true; + return true; } static bool HandleMmapLocCommand(ChatHandler* handler, const char* args) @@ -290,4 +288,4 @@ public: void AddSC_mmaps_commandscript() { new mmaps_commandscript(); -} \ No newline at end of file +} diff --git a/src/tools/mesh_extractor/Cache.h b/src/tools/mesh_extractor/Cache.h index 186a7870af1..bc2ea6a2883 100644 --- a/src/tools/mesh_extractor/Cache.h +++ b/src/tools/mesh_extractor/Cache.h @@ -11,7 +11,8 @@ class GenericCache { public: GenericCache() {} - const int32 FlushLimit = 1000; + + static const int32 FlushLimit = 1000; void Insert(std::string key, T* val) { @@ -35,6 +36,7 @@ private: class CacheClass { +public: CacheClass() {} GenericCache ModelCache; GenericCache WorldModelCache; diff --git a/src/tools/mesh_extractor/DoodadHandler.cpp b/src/tools/mesh_extractor/DoodadHandler.cpp index 4a7707753c4..71ca1974b81 100644 --- a/src/tools/mesh_extractor/DoodadHandler.cpp +++ b/src/tools/mesh_extractor/DoodadHandler.cpp @@ -27,7 +27,7 @@ void DoodadHandler::ProcessInternal( ChunkedData* subChunks ) return; FILE* stream = doodadReferencesChunk->GetStream(); uint32 refCount = doodadReferencesChunk->Length / 4; - for (int i = 0; i < refCount; i++) + for (uint32 i = 0; i < refCount; i++) { int32 index; fread(&index, sizeof(int32), 1, stream); @@ -41,11 +41,11 @@ void DoodadHandler::ProcessInternal( ChunkedData* subChunks ) continue; std::string path = (*_paths)[doodad.MmidIndex]; - Model* model = Cache.ModelCache.Get(path); + Model* model = Cache->ModelCache.Get(path); if (!model) { model = new Model(path); - Cache.ModelCache.Insert(path, model); + Cache->ModelCache.Insert(path, model); } if (!model->IsCollidable) continue; @@ -92,8 +92,10 @@ void DoodadHandler::InsertModelGeometry(DoodadDefinition def, Model* model) { G3D::Matrix4 transformation = Utils::GetTransformation(def); uint32 vertOffset = Vertices.size(); + for (std::vector::iterator itr = model->Vertices.begin(); itr != model->Vertices.end(); ++itr) Vertices.push_back(Utils::VectorTransform(*itr, transformation)); + for (std::vector >::iterator itr = model->Triangles.begin(); itr != model->Triangles.end(); ++itr) - Triangles.push_back(Triangle(Constants::TRIANGLE_TYPE_DOODAD, itr->V0 + vertOffset, itr->V1 + vertOffset, itr->V2 + vertOffset)); -} \ No newline at end of file + Triangles.push_back(Triangle(Constants::TRIANGLE_TYPE_DOODAD, itr->V0 + vertOffset, itr->V1 + vertOffset, itr->V2 + vertOffset)); +} diff --git a/src/tools/mesh_extractor/DoodadHandler.h b/src/tools/mesh_extractor/DoodadHandler.h index c62584ca1f1..d38ee723bef 100644 --- a/src/tools/mesh_extractor/DoodadHandler.h +++ b/src/tools/mesh_extractor/DoodadHandler.h @@ -15,7 +15,7 @@ public: uint16 DecimalScale; uint16 Flags; - float Scale() { return DecimalScale / 1024.0f; } + virtual float Scale() const { return DecimalScale / 1024.0f; } void Read(FILE* stream) { diff --git a/src/tools/mesh_extractor/Geometry.cpp b/src/tools/mesh_extractor/Geometry.cpp index 8e417af4c73..130258b6908 100644 --- a/src/tools/mesh_extractor/Geometry.cpp +++ b/src/tools/mesh_extractor/Geometry.cpp @@ -68,7 +68,7 @@ void Geometry::AddData( std::vector& verts, std::vector& tri = Triangles[i]; tris[(i * 3) + 0] = (int)tri.V0; @@ -86,7 +86,7 @@ void Geometry::GetRawData( float*& verts, int*& tris, uint8*& areas ) } areas = new uint8[Triangles.size()]; - for (int i = 0; i < Triangles.size(); i++) + for (uint32 i = 0; i < Triangles.size(); i++) { switch (Triangles[i].Type) { diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 070b9d70050..36e71730c34 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -34,4 +34,4 @@ void TileBuilder::CalculateTileBounds( float*& bmin, float*& bmax ) bmin[2] = origin[2] + (Constants::TileSize * Y); bmax[0] = origin[0] + (Constants::TileSize * (X + 1)); bmax[2] = origin[2] + (Constants::TileSize * (Y + 1)); -} \ No newline at end of file +} diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp index 0b92dab267f..ef24a8017bd 100644 --- a/src/tools/mesh_extractor/Utils.cpp +++ b/src/tools/mesh_extractor/Utils.cpp @@ -74,7 +74,7 @@ G3D::Matrix4 Utils::RotationX(float angle) { float _cos = cos(angle); float _sin = sin(angle); - Matrix4 ret = G3D::Matrix4::identity(); + G3D::Matrix4 ret = G3D::Matrix4::identity(); ret[2][2] = _cos; ret[2][3] = _sin; ret[3][2] = -_sin; @@ -82,7 +82,7 @@ G3D::Matrix4 Utils::RotationX(float angle) return ret; } -G3D::Matrix4 Utils::GetTransformation( IDefinition def ) +G3D::Matrix4 Utils::GetTransformation(IDefinition def) { G3D::Matrix4 translation; if (def.Position.x == 0.0f && def.Position.y == 0.0f && def.Position.z == 0.0f) @@ -101,7 +101,7 @@ G3D::Matrix4 Utils::RotationY( float angle ) { float _cos = cos(angle); float _sin = sin(angle); - Matrix4 ret = G3D::Matrix4::identity(); + G3D::Matrix4 ret = G3D::Matrix4::identity(); ret[1][1] = _cos; ret[1][3] = -_sin; ret[3][1] = _sin; @@ -113,7 +113,7 @@ G3D::Matrix4 Utils::RotationZ( float angle ) { float _cos = cos(angle); float _sin = sin(angle); - Matrix4 ret = G3D::Matrix4::identity(); + G3D::Matrix4 ret = G3D::Matrix4::identity(); ret[1][1] = _cos; ret[1][2] = _sin; ret[2][1] = -_sin; @@ -126,7 +126,7 @@ float Utils::ToRadians( float degrees ) return Constants::PI * degrees / 180.0f; } -Vector3 Utils::VectorTransform( Vector3 vec, G3D::Matrix matrix ) +Vector3 Utils::VectorTransform( Vector3 vec, G3D::Matrix4 matrix ) { Vector3 ret; ret.x = vec.x * matrix[1][1] + vec.y * matrix[2][1] + vec.z * matrix[3][1] + matrix[4][1]; diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index aa73db173a7..ec333d80f8c 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -16,10 +16,12 @@ struct Vector3 float x; float y; float z; + Vector3 operator +(Vector3 const& other) { return Vector3(x + other.x, y + other.y, z + other.z); } + static Vector3 Read(FILE* file); }; @@ -342,7 +344,7 @@ public: fread(&ret.UnknownZero, sizeof(uint32), 1, stream); return ret; } -} +}; class LiquidHeader { @@ -384,16 +386,16 @@ public: { LiquidData ret; ret.HeightMap = new float*[header.CountXVertices]; - for (int i = 0; i < header.CountXVertices; ++i) + for (uint32 i = 0; i < header.CountXVertices; ++i) ret.HeightMap[i] = new float[header.CountYVertices]; ret.RenderFlags = new uint8*[header.Width]; - for (int i = 0; i < header.Width; ++i) + for (uint32 i = 0; i < header.Width; ++i) ret.RenderFlags[i] = new uint8[header.Height]; - for (int y = 0; y < header.CountYVertices; y++) + for (uint32 y = 0; y < header.CountYVertices; y++) { - for (int x = 0; x < header.CountXVertices; x++) + for (uint32 x = 0; x < header.CountXVertices; x++) { uint32 discard; fread(&discard, sizeof(uint32), 1, stream); @@ -403,9 +405,9 @@ public: } } - for (int y = 0; y < header.Height; y++) + for (uint32 y = 0; y < header.Height; y++) { - for (int x = 0; x < header.Width; x++) + for (uint32 x = 0; x < header.Width; x++) { uint8 tmp; fread(&tmp, sizeof(uint8), 1, stream); @@ -441,8 +443,8 @@ class MCNKLiquidData public: MCNKLiquidData() {} MCNKLiquidData(float** heights, H2ORenderMask mask) : Heights(heights), Mask(mask) {} - const float MaxStandableHeight = 1.5f; + static const float MaxStandableHeight = 1.5f; float** Heights; H2ORenderMask Mask; @@ -515,7 +517,7 @@ class IDefinition public: Vector3 Position; Vector3 Rotation; - virtual float Scale() = 0; + virtual float Scale() const = 0; }; class Utils @@ -540,7 +542,7 @@ public: static G3D::Matrix4 RotationY(float angle); static G3D::Matrix4 RotationZ(float angle); static float ToRadians(float degrees); - static Vector3 VectorTransform(Vector3 vec, G3D::Matrix matrix); + static Vector3 VectorTransform(Vector3 vec, G3D::Matrix4 matrix); static std::string GetPathBase(std::string path); static Vector3 GetLiquidVert(G3D::Matrix4 transformation, Vector3 basePosition, float height, int x, int y); static float Distance(float x, float y); diff --git a/src/tools/mesh_extractor/WorldModelGroup.cpp b/src/tools/mesh_extractor/WorldModelGroup.cpp index 308c7ff7b86..5039eb56381 100644 --- a/src/tools/mesh_extractor/WorldModelGroup.cpp +++ b/src/tools/mesh_extractor/WorldModelGroup.cpp @@ -33,7 +33,7 @@ void WorldModelGroup::ReadNormals() return; uint32 normalCount = chunk->Length / 12; - Assert(normalCount == Vertices.size(), "normalCount is different than the Vertices count"); + ASSERT(normalCount == Vertices.size(), "normalCount is different than the Vertices count"); Normals.reserve(normalCount); FILE* stream = chunk->GetStream(); for (int i = 0; i < normalCount; i++) @@ -58,7 +58,7 @@ void WorldModelGroup::ReadVertices() if (!chunk) return; - uint32 verticeCount = chunk.Length / 12; + uint32 verticeCount = chunk->Length / 12; Vertices.reserve(verticeCount); FILE* stream = chunk->GetStream(); for (int i = 0; i < verticeCount; i++) @@ -71,9 +71,9 @@ void WorldModelGroup::ReadTriangles() if (!chunk) return; - uint32 triangleCount = chunk.Length / 6; - Assert(triangleCount == TriangleFlags.size(), "triangleCount != TriangleFlags.size()"); - FILE* stream = chunk.GetStream(); + uint32 triangleCount = chunk->Length / 6; + ASSERT(triangleCount == TriangleFlags.size(), "triangleCount != TriangleFlags.size()"); + FILE* stream = chunk->GetStream(); Triangles.reserve(triangleCount); for (int i = 0; i < triangleCount; i++) { @@ -94,7 +94,7 @@ void WorldModelGroup::ReadMaterials() return; FILE* stream = chunk->GetStream(); - uint32 triangleCount = chunk.Length / 2; + uint32 triangleCount = chunk->Length / 2; TriangleFlags.reserve(triangleCount); TriangleMaterials.reserve(triangleCount); for (int i = 0; i < triangleCount; i++) @@ -115,7 +115,7 @@ void WorldModelGroup::ReadBoundingBox() return; FILE* stream = chunk->GetStream(); - fseek(stream, 8, SEEK_CUR): + fseek(stream, 8, SEEK_CUR); fread(&Flags, sizeof(uint32), 1, stream); BoundingBox[0] = Vector3::Read(stream); BoundingBox[1] = Vector3::Read(stream); diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp index e895e2bfde8..cb8ac6d8e5d 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.cpp +++ b/src/tools/mesh_extractor/WorldModelHandler.cpp @@ -159,8 +159,8 @@ void WorldModelHandler::ReadDefinitions() return; const int32 definitionSize = 64; - uint32 definitionCount = chunk.Length / definitionSize; - _definitions = new new std::vector; + uint32 definitionCount = chunk->Length / definitionSize; + _definitions = new std::vector; _definitions->reserve(definitionCount); FILE* stream = chunk->GetStream(); for (int i = 0; i < definitionCount; i++) @@ -174,7 +174,7 @@ void WorldModelHandler::ReadModelPaths() if (!mwid || !mwmo) return; - uint32 paths = mwid.Length / 4; + uint32 paths = mwid->Length / 4; _paths = new std::vector; _paths->reserve(paths); for (int i = 0; i < paths; i++) diff --git a/src/tools/mesh_extractor/WorldModelHandler.h b/src/tools/mesh_extractor/WorldModelHandler.h index 2236339de9d..81e6eab1c4b 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.h +++ b/src/tools/mesh_extractor/WorldModelHandler.h @@ -10,14 +10,18 @@ struct WorldModelDefinition : IDefinition { +public: WorldModelDefinition() {} + uint32 MwidIndex; uint32 UniqueId; Vector3 UpperExtents; Vector3 LowerExtents; uint16 Flags; uint16 DoodadSet; - float Scale() { return 1.0f; } + + virtual float Scale() const { return 1.0f; } + static WorldModelDefinition Read(FILE* file); }; diff --git a/src/tools/mesh_extractor/WorldModelRoot.cpp b/src/tools/mesh_extractor/WorldModelRoot.cpp index 9764e339242..18b3fd8586d 100644 --- a/src/tools/mesh_extractor/WorldModelRoot.cpp +++ b/src/tools/mesh_extractor/WorldModelRoot.cpp @@ -33,7 +33,7 @@ void WorldModelRoot::ReadDoodadSets() return; FILE* stream = chunk->GetStream(); - Assert(chunk.Length / 32 == Header.CountSets, "chunk.Length / 32 == Header.CountSets"); + ASSERT(chunk->Length / 32 == Header.CountSets, "chunk.Length / 32 == Header.CountSets"); DoodadSets.reserve(Header.CountSets); for (int i = 0; i < Header.CountSets; i++) DoodadSets.push_back(DoodadSet::Read(stream)); From e12f7ed3e89bc137ed8e893a6bbda8f3a5d9c63d Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 28 Sep 2012 09:01:13 -0500 Subject: [PATCH 068/204] Tools: Fixed build in MeshExtractor (almost) --- dep/CMakeLists.txt | 2 +- src/server/CMakeLists.txt | 1 + src/tools/mesh_extractor/ADT.cpp | 53 +++++++++++++++++++ src/tools/mesh_extractor/ADT.h | 7 +-- src/tools/mesh_extractor/CMakeLists.txt | 5 ++ src/tools/mesh_extractor/Cache.h | 2 +- src/tools/mesh_extractor/Constants.h | 1 + src/tools/mesh_extractor/DoodadHandler.cpp | 2 +- src/tools/mesh_extractor/DoodadHandler.h | 4 +- src/tools/mesh_extractor/LiquidHandler.cpp | 6 +-- src/tools/mesh_extractor/MapChunk.cpp | 11 ++-- src/tools/mesh_extractor/TileBuilder.cpp | 9 ++-- src/tools/mesh_extractor/Utils.cpp | 26 +++++---- src/tools/mesh_extractor/Utils.h | 13 +++-- src/tools/mesh_extractor/WorldModelGroup.cpp | 8 +-- .../mesh_extractor/WorldModelHandler.cpp | 34 ++++++------ src/tools/mesh_extractor/WorldModelHandler.h | 10 ++-- src/tools/mesh_extractor/WorldModelRoot.cpp | 2 +- 18 files changed, 135 insertions(+), 61 deletions(-) create mode 100644 src/tools/mesh_extractor/ADT.cpp diff --git a/dep/CMakeLists.txt b/dep/CMakeLists.txt index c01a1e3426a..f6db7ca22b7 100644 --- a/dep/CMakeLists.txt +++ b/dep/CMakeLists.txt @@ -22,7 +22,7 @@ endif() if(CMAKE_SYSTEM_NAME MATCHES "Windows") add_subdirectory(acelite) - if(SERVERS AND USE_MYSQL_SOURCES) + if(USE_MYSQL_SOURCES) add_subdirectory(mysqllite) endif() if(TOOLS) diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt index 2b6c553e10b..e038f36fd47 100644 --- a/src/server/CMakeLists.txt +++ b/src/server/CMakeLists.txt @@ -30,5 +30,6 @@ if( SERVERS ) else() if( TOOLS ) add_subdirectory(collision) + add_subdirectory(shared) endif() endif() diff --git a/src/tools/mesh_extractor/ADT.cpp b/src/tools/mesh_extractor/ADT.cpp new file mode 100644 index 00000000000..c564d7193cf --- /dev/null +++ b/src/tools/mesh_extractor/ADT.cpp @@ -0,0 +1,53 @@ +#include "ADT.h" +#include "DoodadHandler.h" +#include "LiquidHandler.h" +#include "WorldModelHandler.h" + +ADT::ADT( std::string file ) : ObjectData(NULL), Data(NULL), _DoodadHandler(NULL), _WorldModelHandler(NULL), _LiquidHandler(NULL), HasObjectData(false) +{ + Data = new ChunkedData(file); + ObjectData = new ChunkedData(Utils::Replace(file, ".adt", "_obj0.adt")); + if (ObjectData->Stream) + HasObjectData = true; + else + ObjectData = NULL; +} + +ADT::~ADT() +{ + delete ObjectData; + delete Data; + + for (std::vector::iterator itr = MapChunks.begin(); itr != MapChunks.end(); ++itr) + delete *itr; + + MapChunks.clear(); + delete _DoodadHandler; + delete _WorldModelHandler; + delete _LiquidHandler; +} + +void ADT::Read() +{ + Header.Read(Data->GetChunkByName("MHDR")->GetStream()); + MapChunks.reserve(16 * 16); + int mapChunkIndex = 0; + + for (std::vector::iterator itr = Data->Chunks.begin(); itr != Data->Chunks.end(); ++itr) + if ((*itr)->Name == "MCNK") + MapChunks.push_back(new MapChunk(this, *itr)); + + _LiquidHandler = new LiquidHandler(this); + + // do this separate from map chunk initialization to access liquid data + for (std::vector::iterator itr = MapChunks.begin(); itr != MapChunks.end(); ++itr) + (*itr)->GenerateTriangles(); + + _DoodadHandler = new DoodadHandler(this); + for (std::vector::iterator itr = MapChunks.begin(); itr != MapChunks.end(); ++itr) + _DoodadHandler->ProcessMapChunk(*itr); + + _WorldModelHandler = new WorldModelHandler(this); + for (std::vector::iterator itr = MapChunks.begin(); itr != MapChunks.end(); ++itr) + _WorldModelHandler->ProcessMapChunk(*itr); +} diff --git a/src/tools/mesh_extractor/ADT.h b/src/tools/mesh_extractor/ADT.h index 43984d0902c..096f491eed8 100644 --- a/src/tools/mesh_extractor/ADT.h +++ b/src/tools/mesh_extractor/ADT.h @@ -2,9 +2,10 @@ #define ADT_H #include "ChunkedData.h" #include "MapChunk.h" -#include "DoodadHandler.h" -#include "WorldModelHandler.h" -#include "LiquidHandler.h" + +class DoodadHandler; +class WorldModelHandler; +class LiquidHandler; class ADT { diff --git a/src/tools/mesh_extractor/CMakeLists.txt b/src/tools/mesh_extractor/CMakeLists.txt index 3f5b5526dd4..0469590a201 100644 --- a/src/tools/mesh_extractor/CMakeLists.txt +++ b/src/tools/mesh_extractor/CMakeLists.txt @@ -45,9 +45,14 @@ add_executable(MeshExtractor ) target_link_libraries(MeshExtractor + shared + g3dlib mpq Recast Detour + ${MYSQL_LIBRARY} + ${OPENSSL_LIBRARIES} + ${OPENSSL_EXTRA_LIBRARIES} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} ${ACE_LIBRARY} diff --git a/src/tools/mesh_extractor/Cache.h b/src/tools/mesh_extractor/Cache.h index bc2ea6a2883..2693ce4e1e1 100644 --- a/src/tools/mesh_extractor/Cache.h +++ b/src/tools/mesh_extractor/Cache.h @@ -18,7 +18,7 @@ public: { if (_items.size() > FlushLimit) Clear(); - _items.insert(key, val); + _items[key] = val; } T* Get(std::string key) diff --git a/src/tools/mesh_extractor/Constants.h b/src/tools/mesh_extractor/Constants.h index 885761f1687..38fa0b2e35b 100644 --- a/src/tools/mesh_extractor/Constants.h +++ b/src/tools/mesh_extractor/Constants.h @@ -28,6 +28,7 @@ public: static const float UnitSize; static const float Origin[]; static const float PI; + static const float MaxStandableHeight; }; #endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/DoodadHandler.cpp b/src/tools/mesh_extractor/DoodadHandler.cpp index 71ca1974b81..89fcaba5601 100644 --- a/src/tools/mesh_extractor/DoodadHandler.cpp +++ b/src/tools/mesh_extractor/DoodadHandler.cpp @@ -88,7 +88,7 @@ void DoodadHandler::ReadDoodadPaths( Chunk* id, Chunk* data ) } } -void DoodadHandler::InsertModelGeometry(DoodadDefinition def, Model* model) +void DoodadHandler::InsertModelGeometry(const DoodadDefinition def, Model* model) { G3D::Matrix4 transformation = Utils::GetTransformation(def); uint32 vertOffset = Vertices.size(); diff --git a/src/tools/mesh_extractor/DoodadHandler.h b/src/tools/mesh_extractor/DoodadHandler.h index d38ee723bef..c426504da32 100644 --- a/src/tools/mesh_extractor/DoodadHandler.h +++ b/src/tools/mesh_extractor/DoodadHandler.h @@ -7,7 +7,7 @@ #include #include -class DoodadDefinition : IDefinition +class DoodadDefinition : public IDefinition { public: uint32 MmidIndex; @@ -43,7 +43,7 @@ protected: private: void ReadDoodadDefinitions(Chunk* chunk); void ReadDoodadPaths(Chunk* id, Chunk* data); - void InsertModelGeometry(DoodadDefinition def, Model* model); + void InsertModelGeometry(const DoodadDefinition def, Model* model); std::set _drawn; std::vector* _definitions; std::vector* _paths; diff --git a/src/tools/mesh_extractor/LiquidHandler.cpp b/src/tools/mesh_extractor/LiquidHandler.cpp index 3217bb2cbc6..3d0876aeb74 100644 --- a/src/tools/mesh_extractor/LiquidHandler.cpp +++ b/src/tools/mesh_extractor/LiquidHandler.cpp @@ -43,7 +43,7 @@ void LiquidHandler::HandleNewLiquid() fseek(stream, chunk->Offset + information.OffsetMask2, SEEK_SET); uint32 size = ceil(information.Width * information.Height / 8.0f); uint8* altMask = new uint8[size]; - fread(altMax, sizeof(uint8), size, stream); + fread(altMask, sizeof(uint8), size, stream); for (int mi = 0; mi < size; mi++) renderMask.Mask[mi + information.OffsetY] |= altMask[mi]; @@ -84,8 +84,8 @@ void LiquidHandler::HandleNewLiquid() uint32 vertOffset = Vertices.size(); Vertices.push_back(location); Vertices.push_back(Vector3(location.x - Constants::UnitSize, location.y, location.z)); - Vertices.push_back(new Vector3(location.x, location.y - Constants::UnitSize, location.z)); - Vertices.push_back(new Vector3(location.x - Constants::UnitSize, location.y - Constants::UnitSize, location.z)); + Vertices.push_back(Vector3(location.x, location.y - Constants::UnitSize, location.z)); + Vertices.push_back(Vector3(location.x - Constants::UnitSize, location.y - Constants::UnitSize, location.z)); Triangles.push_back(Triangle(Constants::TRIANGLE_TYPE_WATER, vertOffset, vertOffset+2, vertOffset + 1)); Triangles.push_back(Triangle(Constants::TRIANGLE_TYPE_WATER, vertOffset + 2, vertOffset + 3, vertOffset + 1)); diff --git a/src/tools/mesh_extractor/MapChunk.cpp b/src/tools/mesh_extractor/MapChunk.cpp index 4cb5dc04d2d..0b02a2a4a14 100644 --- a/src/tools/mesh_extractor/MapChunk.cpp +++ b/src/tools/mesh_extractor/MapChunk.cpp @@ -1,5 +1,6 @@ #include "MapChunk.h" #include "ADT.h" +#include "LiquidHandler.h" MapChunk::MapChunk( ADT* _adt, Chunk* chunk ) : Adt(_adt), Source(chunk), Vertices(NULL) { @@ -25,7 +26,7 @@ void MapChunk::GenerateTriangles() uint32 bottomRight = (17 * (y + 1)) + x + 1; uint32 center = (17 * y) + 9 + x; - uint8 triangleType = Constants::TRIANGLE_TYPE_TERRAIN; + Constants::TriangleType triangleType = Constants::TRIANGLE_TYPE_TERRAIN; if (Adt->_LiquidHandler && !Adt->_LiquidHandler->MCNKData.empty()) { MCNKLiquidData& data = Adt->_LiquidHandler->MCNKData[Index]; @@ -37,10 +38,10 @@ void MapChunk::GenerateTriangles() triangleType = Constants::TRIANGLE_TYPE_WATER; } - Triangles.push_back(new Triangle(triangleType, topRight, topLeft, center)); - Triangles.push_back(new Triangle(triangleType, topLeft, bottomLeft, center)); - Triangles.push_back(new Triangle(triangleType, bottomLeft, bottomRight, center)); - Triangles.push_back(new Triangle(triangleType, bottomRight, topRight, center)); + Triangles.push_back(Triangle(triangleType, topRight, topLeft, center)); + Triangles.push_back(Triangle(triangleType, topLeft, bottomLeft, center)); + Triangles.push_back(Triangle(triangleType, bottomLeft, bottomRight, center)); + Triangles.push_back(Triangle(triangleType, bottomRight, topRight, center)); } } } diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 36e71730c34..190607493fa 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -27,11 +27,10 @@ TileBuilder::TileBuilder(std::string world, int x, int y) : _Geometry(NULL), Wor void TileBuilder::CalculateTileBounds( float*& bmin, float*& bmax ) { - float origin[3] = Constants::Origin; bmin = new float[3]; bmax = new float[3]; - bmin[0] = origin[0] + (Constants::TileSize * X); - bmin[2] = origin[2] + (Constants::TileSize * Y); - bmax[0] = origin[0] + (Constants::TileSize * (X + 1)); - bmax[2] = origin[2] + (Constants::TileSize * (Y + 1)); + bmin[0] = Constants::Origin[0] + (Constants::TileSize * X); + bmin[2] = Constants::Origin[2] + (Constants::TileSize * Y); + bmax[0] = Constants::Origin[0] + (Constants::TileSize * (X + 1)); + bmax[2] = Constants::Origin[2] + (Constants::TileSize * (Y + 1)); } diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp index ef24a8017bd..c7c0cff0d42 100644 --- a/src/tools/mesh_extractor/Utils.cpp +++ b/src/tools/mesh_extractor/Utils.cpp @@ -1,7 +1,9 @@ #include "Utils.h" +#include "WorldModelHandler.h" #include "Constants.h" #include #include "g3d/Matrix4.h" +#include "g3d/Quat.h" const float Constants::TileSize = 533.0f + (1/3.0f); const float Constants::MaxXY = 32.0f * Constants::TileSize; @@ -9,6 +11,7 @@ const float Constants::ChunkSize = Constants::TileSize / 16.0f; const float Constants::UnitSize = Constants::ChunkSize / 8.0f; const float Constants::Origin[] = { -Constants::MaxXY, 0.0f, -Constants::MaxXY }; const float Constants::PI = 3.1415926f; +const float Constants::MaxStandableHeight = 1.5f; void Utils::Reverse(char word[]) { @@ -60,14 +63,7 @@ std::string Utils::GetAdtPath( std::string world, int x, int y ) std::string Utils::FixModelPath( std::string path ) { - std::string::size_type idx = path.rfind("."); - // Bizarre way of changing extension but... - if (idx != std::string::npos) - { - path[idx + 1] = "M"; - path[idx + 2] = "2"; - } - return path; + return Utils::GetPathBase(path) + ".M2"; } G3D::Matrix4 Utils::RotationX(float angle) @@ -139,7 +135,7 @@ std::string Utils::GetPathBase( std::string path ) { int lastIndex = path.find_last_of("."); if (lastIndex != std::string::npos) - return path.substr(0, lastindex); + return path.substr(0, lastIndex); return path; } @@ -172,3 +168,15 @@ std::string Utils::Replace( std::string str, const std::string& oldStr, const st } return str; } + +G3D::Matrix4 Utils::GetWmoDoodadTransformation( DoodadInstance inst, WorldModelDefinition root ) +{ + G3D::Matrix4 rootTransformation = Utils::GetTransformation(root); + G3D::Matrix4 translation = G3D::Matrix4::translation(inst.Position.x, inst.Position.y, inst.Position.z); + G3D::Matrix4 scale = G3D::Matrix4::scale(inst.Scale); + G3D::Matrix4 rotation = Utils::RotationY(Constants::PI); + G3D::Quat quat(-inst.QuatY, inst.QuatZ, -inst.QuatX, inst.QuatW); + G3D::Matrix4 quatRotation = quat.toRotationMatrix(); + + return scale * rotation * quatRotation ** translation * rootTransformation; +} diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index ec333d80f8c..ac14b9eca69 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -9,6 +9,9 @@ #include "Common.h" #include "Constants.h" +struct WorldModelDefinition; +class DoodadInstance; + struct Vector3 { Vector3() {} @@ -35,6 +38,7 @@ struct TilePos template struct Triangle { + Triangle() {} Triangle(Constants::TriangleType type, T v0, T v1, T v2) : Type(type), V0(v0), V1(v1), V2(v2) {} T V0; T V1; @@ -444,7 +448,6 @@ public: MCNKLiquidData() {} MCNKLiquidData(float** heights, H2ORenderMask mask) : Heights(heights), Mask(mask) {} - static const float MaxStandableHeight = 1.5f; float** Heights; H2ORenderMask Mask; @@ -452,10 +455,10 @@ public: { if (!Heights) return false; - if (!Mask->ShouldRender(x, y)) + if (!Mask.ShouldRender(x, y)) return false; float diff = Heights[x][y] - height; - if (diff > MaxStandableHeight) + if (diff > Constants::MaxStandableHeight) return true; return false; } @@ -517,7 +520,7 @@ class IDefinition public: Vector3 Position; Vector3 Rotation; - virtual float Scale() const = 0; + virtual float Scale() const { return 1.0f; }; }; class Utils @@ -555,6 +558,6 @@ public: return true; } static std::string Utils::Replace( std::string str, const std::string& oldStr, const std::string& newStr ); - + static G3D::Matrix4 GetWmoDoodadTransformation( DoodadInstance inst, WorldModelDefinition root ); }; #endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/WorldModelGroup.cpp b/src/tools/mesh_extractor/WorldModelGroup.cpp index 5039eb56381..b4c963020c7 100644 --- a/src/tools/mesh_extractor/WorldModelGroup.cpp +++ b/src/tools/mesh_extractor/WorldModelGroup.cpp @@ -33,7 +33,7 @@ void WorldModelGroup::ReadNormals() return; uint32 normalCount = chunk->Length / 12; - ASSERT(normalCount == Vertices.size(), "normalCount is different than the Vertices count"); + ASSERT(normalCount == Vertices.size() && "normalCount is different than the Vertices count"); Normals.reserve(normalCount); FILE* stream = chunk->GetStream(); for (int i = 0; i < normalCount; i++) @@ -48,8 +48,8 @@ void WorldModelGroup::ReadLiquid() HasLiquidData = true; FILE* stream = chunk->GetStream(); - LiquidDataHeader = LiquidHeader.Read(stream); - LiquidDataGeometry = LiquidData.Read(stream, LiquidDataHeader); + LiquidDataHeader = LiquidHeader::Read(stream); + LiquidDataGeometry = LiquidData::Read(stream, LiquidDataHeader); } void WorldModelGroup::ReadVertices() @@ -72,7 +72,7 @@ void WorldModelGroup::ReadTriangles() return; uint32 triangleCount = chunk->Length / 6; - ASSERT(triangleCount == TriangleFlags.size(), "triangleCount != TriangleFlags.size()"); + ASSERT(triangleCount == TriangleFlags.size() && "triangleCount != TriangleFlags.size()"); FILE* stream = chunk->GetStream(); Triangles.reserve(triangleCount); for (int i = 0; i < triangleCount; i++) diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp index cb8ac6d8e5d..e5a14d55c0c 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.cpp +++ b/src/tools/mesh_extractor/WorldModelHandler.cpp @@ -1,6 +1,8 @@ #include "WorldModelHandler.h" +#include "WorldModelRoot.h" #include "Chunk.h" #include "Cache.h" +#include "Model.h" #include "Common.h" #include "g3d/Matrix4.h" #include @@ -15,7 +17,7 @@ WorldModelDefinition WorldModelDefinition::Read( FILE* file ) ret.UpperExtents = Vector3::Read(file); ret.LowerExtents = Vector3::Read(file); fread(&ret.Flags, sizeof(uint16), 1, file); - fread(&ret.DooadSet, sizeof(uint16), 1, file); + fread(&ret.DoodadSet, sizeof(uint16), 1, file); uint32 discard; fread(&discard, sizeof(uint32), 1, file); return ret; @@ -39,7 +41,7 @@ void WorldModelHandler::ProcessInternal( ChunkedData* subChunks ) return; FILE* stream = wmoReferencesChunk->GetStream(); uint32 refCount = wmoReferencesChunk->Length / 4; - for (int i = 0; i < refCount; i++) + for (uint32 i = 0; i < refCount; i++) { int32 index; fread(&index, sizeof(int32), 1, stream); @@ -56,7 +58,7 @@ void WorldModelHandler::ProcessInternal( ChunkedData* subChunks ) if (wmo.MwidIndex >= _paths->size()) continue; - std::string path = _paths[(int) wmo.MwidIndex]; + std::string path = (*_paths)[wmo.MwidIndex]; WorldModelRoot* model = Cache->WorldModelCache.Get(path); if (!model) { @@ -71,16 +73,16 @@ void WorldModelHandler::ProcessInternal( ChunkedData* subChunks ) } } -void WorldModelHandler::InsertModelGeometry( std::vector verts, std::vector > tris, WorldModelDefinition& def, WorldModelRoot* root ) +void WorldModelHandler::InsertModelGeometry( std::vector& verts, std::vector >& tris, WorldModelDefinition& def, WorldModelRoot* root ) { - G3D::Matrix4 transformation = Utils::GetTransformation(); + G3D::Matrix4 transformation = Utils::GetTransformation(def); for (std::vector::iterator group = root->Groups.begin(); group != root->Groups.end(); ++group) { uint32 vertOffset = verts.size(); for (std::vector::iterator itr2 = group->Vertices.begin(); itr2 != group->Vertices.end(); ++itr2) verts.push_back(Utils::VectorTransform(*itr2, transformation)); - for (int i = 0; i < group->Triangles.size(); ++i) + for (uint32 i = 0; i < group->Triangles.size(); ++i) { // only include collidable tris if ((group->TriangleFlags[i] & 0x04) != 0 && group->TriangleMaterials[i] != 0xFF) @@ -93,7 +95,7 @@ void WorldModelHandler::InsertModelGeometry( std::vector verts, std::ve if (def.DoodadSet >= 0 && def.DoodadSet < root->DoodadSets.size()) { DoodadSet set = root->DoodadSets[def.DoodadSet]; - std::vector instances = new std::vector; + std::vector instances; instances.reserve(set.CountInstances); for (uint32 i = set.FirstInstanceIndex; i < (set.CountInstances + set.FirstInstanceIndex); i++) { @@ -104,16 +106,16 @@ void WorldModelHandler::InsertModelGeometry( std::vector verts, std::ve for (std::vector::iterator instance = instances.begin(); instance != instances.end(); ++instance) { - Model* model = Cache.ModelCache.Get(instance->File); + Model* model = Cache->ModelCache.Get(instance->File); if (!model) { model = new Model(instance->File); - Cache.ModelCache.Insert(instance->File, model); + Cache->ModelCache.Insert(instance->File, model); } - if (!model.IsCollidable) + if (!model->IsCollidable) continue; - G3D::Matrix4 doodadTransformation = Utils::GetWmoDoodadTransformation(instance, def); + G3D::Matrix4 doodadTransformation = Utils::GetWmoDoodadTransformation(*instance, def); int vertOffset = verts.size(); for (std::vector::iterator itr2 = model->Vertices.begin(); itr2 != model->Vertices.end(); ++itr2) verts.push_back(Utils::VectorTransform(*itr2, doodadTransformation)); @@ -126,9 +128,9 @@ void WorldModelHandler::InsertModelGeometry( std::vector verts, std::ve if (!group->HasLiquidData) continue; - for (int y = 0; y < group->LiquidDataHeader.Height; y++) + for (uint32 y = 0; y < group->LiquidDataHeader.Height; y++) { - for (int x = 0; x < group->LiquidDataHeader.Width; x++) + for (uint32 x = 0; x < group->LiquidDataHeader.Width; x++) { if (!group->LiquidDataGeometry.ShouldRender(x, y)) continue; @@ -144,7 +146,7 @@ void WorldModelHandler::InsertModelGeometry( std::vector verts, std::ve group->LiquidDataGeometry.HeightMap[x + 1][y + 1], x + 1, y + 1)); tris.push_back(Triangle(Constants::TRIANGLE_TYPE_WATER, vertOffset, vertOffset + 2, vertOffset + 1)); - tris.push_back(new Triangle(Constants::TRIANGLE_TYPE_WATER, vertOffset + 2, vertOffset + 3, vertOffset + 1)); + tris.push_back(Triangle(Constants::TRIANGLE_TYPE_WATER, vertOffset + 2, vertOffset + 3, vertOffset + 1)); } } @@ -163,7 +165,7 @@ void WorldModelHandler::ReadDefinitions() _definitions = new std::vector; _definitions->reserve(definitionCount); FILE* stream = chunk->GetStream(); - for (int i = 0; i < definitionCount; i++) + for (uint32 i = 0; i < definitionCount; i++) _definitions->push_back(WorldModelDefinition::Read(stream)); } @@ -177,7 +179,7 @@ void WorldModelHandler::ReadModelPaths() uint32 paths = mwid->Length / 4; _paths = new std::vector; _paths->reserve(paths); - for (int i = 0; i < paths; i++) + for (uint32 i = 0; i < paths; i++) { FILE* stream = mwid->GetStream(); fseek(stream, i * 4, SEEK_CUR); diff --git a/src/tools/mesh_extractor/WorldModelHandler.h b/src/tools/mesh_extractor/WorldModelHandler.h index 81e6eab1c4b..daf0713ecd2 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.h +++ b/src/tools/mesh_extractor/WorldModelHandler.h @@ -2,13 +2,15 @@ #define WMODEL_HNDL_H #include "Common.h" #include "Utils.h" +#include "WorldModelRoot.h" #include "ObjectDataHandler.h" -#include "ADT.h" #include #include -struct WorldModelDefinition : IDefinition +class ADT; + +struct WorldModelDefinition : public IDefinition { public: WorldModelDefinition() {} @@ -20,8 +22,6 @@ public: uint16 Flags; uint16 DoodadSet; - virtual float Scale() const { return 1.0f; } - static WorldModelDefinition Read(FILE* file); }; @@ -33,7 +33,7 @@ public: std::vector Vertices; std::vector > Triangles; bool IsSane() { return _definitions && _paths; } - void InsertModelGeometry(std::vector verts, std::vector > tris, WorldModelDefinition& def, WorldModelRoot* root); + void InsertModelGeometry(std::vector& verts, std::vector >& tris, WorldModelDefinition& def, WorldModelRoot* root); protected: void ProcessInternal(ChunkedData* data); private: diff --git a/src/tools/mesh_extractor/WorldModelRoot.cpp b/src/tools/mesh_extractor/WorldModelRoot.cpp index 18b3fd8586d..3457a35f761 100644 --- a/src/tools/mesh_extractor/WorldModelRoot.cpp +++ b/src/tools/mesh_extractor/WorldModelRoot.cpp @@ -33,7 +33,7 @@ void WorldModelRoot::ReadDoodadSets() return; FILE* stream = chunk->GetStream(); - ASSERT(chunk->Length / 32 == Header.CountSets, "chunk.Length / 32 == Header.CountSets"); + ASSERT(chunk->Length / 32 == Header.CountSets && "chunk.Length / 32 == Header.CountSets"); DoodadSets.reserve(Header.CountSets); for (int i = 0; i < Header.CountSets; i++) DoodadSets.push_back(DoodadSet::Read(stream)); From 1c6a44e4c5516b5e81acf858733114e61d332e3f Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 28 Sep 2012 09:30:23 -0500 Subject: [PATCH 069/204] Tools: Fixed build in MeshExtractor --- src/tools/mesh_extractor/CMakeLists.txt | 6 ++++++ src/tools/mesh_extractor/MeshExtractor.cpp | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/src/tools/mesh_extractor/CMakeLists.txt b/src/tools/mesh_extractor/CMakeLists.txt index 0469590a201..09bd2982213 100644 --- a/src/tools/mesh_extractor/CMakeLists.txt +++ b/src/tools/mesh_extractor/CMakeLists.txt @@ -13,15 +13,19 @@ file(GLOB_RECURSE sources *.cpp *.h) if( UNIX ) include_directories ( + ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src/server/shared ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour ${CMAKE_SOURCE_DIR}/dep/libmpq ${CMAKE_SOURCE_DIR}/dep/g3dlite/include + ${MYSQL_INCLUDE_DIR} + ${OPENSSL_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) elseif( WIN32 ) include_directories ( + ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src/server/shared ${CMAKE_SOURCE_DIR}/src/server/shared/Database ${CMAKE_SOURCE_DIR}/src/server/shared/Database/Implementation @@ -36,6 +40,8 @@ elseif( WIN32 ) ${CMAKE_SOURCE_DIR}/dep/libmpq/win ${CMAKE_SOURCE_DIR}/dep/g3dlite/include ${ACE_INCLUDE_DIR} + ${MYSQL_INCLUDE_DIR} + ${OPENSSL_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) endif() diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index 0220627cbcc..0611c9c2d58 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -3,6 +3,10 @@ #include "ContinentBuilder.h" #include "Cache.h" +#include "Common.h" +#include "LoginDatabase.h" +LoginDatabaseWorkerPool LoginDatabase; + MPQManager* MPQHandler; CacheClass* Cache; From 3eda479e2970a72a8fcf7731d94b962ff9874e38 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 28 Sep 2012 13:30:43 -0500 Subject: [PATCH 070/204] Tools: MeshExtractor is working now. Please note that this is not yet finished --- src/tools/mesh_extractor/Cache.h | 28 ++- src/tools/mesh_extractor/Constants.h | 7 + src/tools/mesh_extractor/ContinentBuilder.cpp | 29 ++- src/tools/mesh_extractor/Geometry.cpp | 21 ++ src/tools/mesh_extractor/Geometry.h | 2 + src/tools/mesh_extractor/MPQManager.cpp | 2 +- src/tools/mesh_extractor/MapChunk.cpp | 12 +- src/tools/mesh_extractor/MapChunk.h | 3 +- src/tools/mesh_extractor/MeshExtractor.cpp | 4 +- src/tools/mesh_extractor/TileBuilder.cpp | 201 +++++++++++++++++- src/tools/mesh_extractor/TileBuilder.h | 7 +- src/tools/mesh_extractor/Utils.h | 16 ++ .../mesh_extractor/WorldModelHandler.cpp | 2 +- 13 files changed, 308 insertions(+), 26 deletions(-) diff --git a/src/tools/mesh_extractor/Cache.h b/src/tools/mesh_extractor/Cache.h index 2693ce4e1e1..799878bdd3b 100644 --- a/src/tools/mesh_extractor/Cache.h +++ b/src/tools/mesh_extractor/Cache.h @@ -1,12 +1,14 @@ #ifndef CACHE_H #define CACHE_H #include +#include #include "Common.h" class WorldModelRoot; class Model; +class ADT; -template +template class GenericCache { public: @@ -14,32 +16,42 @@ public: static const int32 FlushLimit = 1000; - void Insert(std::string key, T* val) + void Insert(K key, T* val) { if (_items.size() > FlushLimit) Clear(); _items[key] = val; } - T* Get(std::string key) + T* Get(K key) { - UNORDERED_MAP::iterator itr = _items.find(key); + std::map::iterator itr = _items.find(key); if (itr != _items.end()) return itr->second; return NULL; } - void Clear() { _items.clear(); } + void Clear() + { + for (std::map::iterator itr = _items.begin(); itr != _items.end(); ++itr) + delete itr->second; + _items.clear(); + } private: - UNORDERED_MAP _items; + std::map _items; }; class CacheClass { public: CacheClass() {} - GenericCache ModelCache; - GenericCache WorldModelCache; + GenericCache ModelCache; + GenericCache WorldModelCache; + GenericCache, ADT> AdtCache; + void Clear() + { + AdtCache.Clear(); + } }; extern CacheClass* Cache; diff --git a/src/tools/mesh_extractor/Constants.h b/src/tools/mesh_extractor/Constants.h index 38fa0b2e35b..f44d5f16797 100644 --- a/src/tools/mesh_extractor/Constants.h +++ b/src/tools/mesh_extractor/Constants.h @@ -22,6 +22,13 @@ public: POLY_AREA_ROAD = 3, POLY_AREA_DANGER = 4, }; + + enum PolyFlag + { + POLY_FLAG_WALK = 1, + POLY_FLAG_SWIM = 2, + POLY_FLAG_FLIGHTMASTER = 4 + }; static const float TileSize; static const float MaxXY; static const float ChunkSize; diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp index 8af6f3a02e8..f861dff1648 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.cpp +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -1,11 +1,38 @@ #include "ContinentBuilder.h" +#include "TileBuilder.h" #include "WDT.h" #include "Utils.h" +#include "DetourNavMesh.h" void ContinentBuilder::Build() { + FILE* mmap = fopen("608.mmap", "wb"); + dtNavMeshParams params; + params.maxPolys = 32768; + params.maxTiles = 4096; + params.orig[0] = -17066.666f; + params.orig[1] = 0.0f; + params.orig[2] = -17066.666f; + params.tileHeight = 533.33333f; + params.tileWidth = 533.33333f; + fwrite(¶ms, sizeof(dtNavMeshParams), 1, mmap); + fclose(mmap); for (std::vector::iterator itr = TileMap->TileTable.begin(); itr != TileMap->TileTable.end(); ++itr) { - + TileBuilder builder(Continent, itr->X, itr->Y, TileMap); + char buff[100]; + sprintf(buff, "%03u%02u%02u.mmtile", builder.MapId, itr->X, itr->Y); + FILE* f = fopen(buff, "wb"); + uint8* nav = builder.Build(); + if (nav) + { + MmapTileHeader header; + header.size = builder.DataSize; + fwrite(&header, sizeof(MmapTileHeader), 1, f); + fwrite(nav, sizeof(uint8), builder.DataSize, f); + } + fclose(f); + dtFree(nav); + printf("[%02u,%02u] Tile Built!\n", itr->X, itr->Y); } } diff --git a/src/tools/mesh_extractor/Geometry.cpp b/src/tools/mesh_extractor/Geometry.cpp index 130258b6908..2fbe99e3211 100644 --- a/src/tools/mesh_extractor/Geometry.cpp +++ b/src/tools/mesh_extractor/Geometry.cpp @@ -1,5 +1,8 @@ #include "Geometry.h" #include "Constants.h" +#include "ADT.h" +#include "WorldModelHandler.h" +#include "DoodadHandler.h" Geometry::Geometry() : Transform(false) { @@ -100,3 +103,21 @@ void Geometry::GetRawData( float*& verts, int*& tris, uint8*& areas ) } } +void Geometry::AddAdt( ADT* adt ) +{ + for (std::vector::iterator itr = adt->MapChunks.begin(); itr != adt->MapChunks.end(); ++itr) + { + std::vector > tmp; + tmp.reserve((*itr)->Triangles.size()); + for (std::vector >::iterator itr2 = (*itr)->Triangles.begin(); itr2 != (*itr)->Triangles.end(); ++itr2) + tmp.push_back(Triangle(itr2->Type, itr2->V0, itr2->V1, itr2->V2)); + AddData((*itr)->Vertices, tmp); + } + + if (!adt->_DoodadHandler->Triangles.empty()) + AddData(adt->_DoodadHandler->Vertices, adt->_DoodadHandler->Triangles); + + if (!adt->_WorldModelHandler->Triangles.empty()) + AddData(adt->_WorldModelHandler->Vertices, adt->_WorldModelHandler->Triangles); +} + diff --git a/src/tools/mesh_extractor/Geometry.h b/src/tools/mesh_extractor/Geometry.h index 048d9fde578..9593c98044e 100644 --- a/src/tools/mesh_extractor/Geometry.h +++ b/src/tools/mesh_extractor/Geometry.h @@ -4,6 +4,7 @@ #include "Utils.h" +class ADT; class Geometry { public: @@ -12,6 +13,7 @@ public: void CalculateBoundingBox(float*& min, float*& max); void CalculateMinMaxHeight(float& min, float& max); void AddData(std::vector& verts, std::vector >& tris); + void AddAdt(ADT* adt); void GetRawData(float*& verts, int*& tris, uint8*& areas); std::vector Vertices; diff --git a/src/tools/mesh_extractor/MPQManager.cpp b/src/tools/mesh_extractor/MPQManager.cpp index 429b09ffe02..35d4c91fc14 100644 --- a/src/tools/mesh_extractor/MPQManager.cpp +++ b/src/tools/mesh_extractor/MPQManager.cpp @@ -46,7 +46,7 @@ void MPQManager::LoadMPQs() sprintf(filename, "Data/%s", Files[i]); Archives.push_front(new MPQArchive(filename)); } - printf("Loaded %u MPQ files succesfully", Archives.size()); + printf("Loaded %u MPQ files succesfully\n", Archives.size()); } FILE* MPQManager::GetFile( std::string path ) diff --git a/src/tools/mesh_extractor/MapChunk.cpp b/src/tools/mesh_extractor/MapChunk.cpp index 0b02a2a4a14..61c106f9766 100644 --- a/src/tools/mesh_extractor/MapChunk.cpp +++ b/src/tools/mesh_extractor/MapChunk.cpp @@ -2,7 +2,7 @@ #include "ADT.h" #include "LiquidHandler.h" -MapChunk::MapChunk( ADT* _adt, Chunk* chunk ) : Adt(_adt), Source(chunk), Vertices(NULL) +MapChunk::MapChunk( ADT* _adt, Chunk* chunk ) : Adt(_adt), Source(chunk) { FILE* stream = chunk->GetStream(); Header.Read(stream); @@ -46,16 +46,10 @@ void MapChunk::GenerateTriangles() } } -MapChunk::~MapChunk() -{ - delete[] Vertices; -} - void MapChunk::GenerateVertices( FILE* stream ) { fseek(stream, Header.OffsetMCVT, SEEK_CUR); - int32 vertIndex = 0; - Vertices = new Vector3[125]; + Vertices.reserve(125); for (int j = 0; j < 17; j++) { @@ -67,7 +61,7 @@ void MapChunk::GenerateVertices( FILE* stream ) Vector3 vert(Header.Position.x - (j * (Constants::UnitSize * 0.5f)), Header.Position.y - (i * Constants::UnitSize), Header.Position.z + tmp); if (values == 8) vert.y -= Constants::UnitSize * 0.5f; - Vertices[vertIndex++] = vert; + Vertices.push_back(vert); } } } diff --git a/src/tools/mesh_extractor/MapChunk.h b/src/tools/mesh_extractor/MapChunk.h index 9d7b02bbfe5..61dcabac9b0 100644 --- a/src/tools/mesh_extractor/MapChunk.h +++ b/src/tools/mesh_extractor/MapChunk.h @@ -10,7 +10,6 @@ class MapChunk { public: MapChunk(ADT* _adt, Chunk* chunk); - ~MapChunk(); void GenerateTriangles(); void GenerateVertices(FILE* stream); @@ -18,7 +17,7 @@ public: ADT* Adt; Chunk* Source; MapChunkHeader Header; - Vector3* Vertices; + std::vector Vertices; std::vector > Triangles; int32 Index; }; diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index 0611c9c2d58..38a120449bc 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -15,10 +15,10 @@ void ExtractAllMaps() WDT wdt("World\\maps\\DalaranPrison\\DalaranPrison.wdt"); if (!wdt.IsValid) return; - printf("Model valid!"); + printf("Model valid!\n"); if (wdt.IsGlobalModel) { - printf("Unsupported"); + printf("Unsupported\n"); return; } ContinentBuilder builder("DalaranPrison", &wdt); diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 190607493fa..4736274706d 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -1,7 +1,15 @@ #include "TileBuilder.h" +#include "Geometry.h" #include "Constants.h" +#include "Utils.h" +#include "Cache.h" +#include "ADT.h" +#include "WDT.h" +#include "Recast.h" +#include "RecastAlloc.h" +#include "DetourNavMeshBuilder.h" -TileBuilder::TileBuilder(std::string world, int x, int y) : _Geometry(NULL), World(world), X(x), Y(y), MapId(608) +TileBuilder::TileBuilder(std::string world, int x, int y, WDT* wdt) : _Geometry(NULL), World(world), X(x), Y(y), MapId(608), DataSize(0), Wdt(wdt) { // Cell Size = TileSize / TileVoxelSize // 1800 = TileVoxelSize @@ -23,6 +31,8 @@ TileBuilder::TileBuilder(std::string world, int x, int y) : _Geometry(NULL), Wor Config.width = 1800; Config.maxVertsPerPoly = 6; Config.maxSimplificationError = 1.3f; + + Context = new rcContext; } void TileBuilder::CalculateTileBounds( float*& bmin, float*& bmax ) @@ -34,3 +44,192 @@ void TileBuilder::CalculateTileBounds( float*& bmin, float*& bmax ) bmax[0] = Constants::Origin[0] + (Constants::TileSize * (X + 1)); bmax[2] = Constants::Origin[2] + (Constants::TileSize * (Y + 1)); } + +uint8* TileBuilder::Build() +{ + _Geometry = new Geometry(); + _Geometry->Transform = true; + ADT* adt = Cache->AdtCache.Get(std::make_pair(X, Y)); + if (!adt) + { + adt = new ADT(Utils::GetAdtPath(World, X, Y)); + adt->Read(); + Cache->AdtCache.Insert(std::make_pair(X, Y), adt); + } + _Geometry->AddAdt(adt); + + if (_Geometry->Vertices.empty() && _Geometry->Triangles.empty()) + return NULL; + + float* bbMin; + float* bbMax; + CalculateTileBounds(bbMin, bbMax); + _Geometry->CalculateMinMaxHeight(bbMin[1], bbMax[1]); + + // again, we load everything - wasteful but who cares + for (int ty = Y - 1; ty <= Y + 1; ty++) + { + for (int tx = X - 1; tx <= X + 1; tx++) + { + // don't load main tile again + if (tx == X && ty == Y) + continue; + + ADT* _adt = Cache->AdtCache.Get(std::make_pair(tx, ty)); + if (!_adt) + { + _adt = new ADT(Utils::GetAdtPath(World, tx, ty)); + // If this condition is met, it means that this wdt does not contain the ADT + if (!_adt->Data->Stream) + { + delete _adt; + continue; + } + _adt->Read(); + Cache->AdtCache.Insert(std::make_pair(tx, ty), _adt); + } + _Geometry->AddAdt(adt); + } + } + uint32 numVerts = _Geometry->Vertices.size(); + uint32 numTris = _Geometry->Triangles.size(); + float* vertices; + int* triangles; + uint8* areas; + _Geometry->GetRawData(vertices, triangles, areas); + _Geometry->Vertices.clear(); + _Geometry->Triangles.clear(); + + bbMin[0] -= Config.borderSize * Config.cs; + bbMin[2] -= Config.borderSize * Config.cs; + bbMax[0] += Config.borderSize * Config.cs; + bbMax[0] += Config.borderSize * Config.cs; + + rcHeightfield* hf = rcAllocHeightfield(); + int width = Config.width + (Config.borderSize * 2); + rcCreateHeightfield(Context, *hf, width, width, bbMin, bbMax, Config.cs, Config.ch); + rcClearUnwalkableTriangles(Context, Config.walkableSlopeAngle, vertices, numVerts, triangles, numTris, areas); + rcRasterizeTriangles(Context, vertices, numVerts, triangles, areas, numTris, *hf, Config.walkableClimb); + + printf("[%02u,%02u] Triangles rasterized!\n", X, Y); + + // Once all geometry is rasterized, we do initial pass of filtering to + // remove unwanted overhangs caused by the conservative rasterization + // as well as filter spans where the character cannot possibly stand. + rcFilterLowHangingWalkableObstacles(Context, Config.walkableClimb, *hf); + rcFilterLedgeSpans(Context, Config.walkableHeight, Config.walkableClimb, *hf); + rcFilterWalkableLowHeightSpans(Context, Config.walkableHeight, *hf); + + printf("[%02u,%02u] Filtering done!\n", X, Y); + + // Compact the heightfield so that it is faster to handle from now on. + // This will result in more cache coherent data as well as the neighbours + // between walkable cells will be calculated. + rcCompactHeightfield* chf = rcAllocCompactHeightfield(); + rcBuildCompactHeightfield(Context, Config.walkableHeight, Config.walkableClimb, *hf, *chf); + + rcFreeHeightField(hf); + + printf("[%02u,%02u] Heightfield compressed!\n", X, Y); + + // Erode the walkable area by agent radius. + rcErodeWalkableArea(Context, Config.walkableRadius, *chf); + // Prepare for region partitioning, by calculating distance field along the walkable surface. + rcBuildDistanceField(Context, *chf); + // Partition the walkable surface into simple regions without holes. + rcBuildRegions(Context, *chf, Config.borderSize, Config.minRegionArea, Config.mergeRegionArea); + + printf("[%02u,%02u] Regions built!\n", X, Y); + + // Create contours. + rcContourSet* cset = rcAllocContourSet(); + rcBuildContours(Context, *chf, Config.maxSimplificationError, Config.maxEdgeLen, *cset); + + // Build polygon navmesh from the contours. + rcPolyMesh* pmesh = rcAllocPolyMesh(); + rcBuildPolyMesh(Context, *cset, Config.maxVertsPerPoly, *pmesh); + + printf("[%02u,%02u] Polymesh built!\n", X, Y); + + // Build detail mesh. + rcPolyMeshDetail* dmesh = rcAllocPolyMeshDetail(); + rcBuildPolyMeshDetail(Context, *pmesh, *chf, Config.detailSampleDist, Config.detailSampleMaxError, *dmesh); + + printf("[%02u,%02u] Polymesh detail built!\n", X, Y); + + rcFreeCompactHeightfield(chf); + rcFreeContourSet(cset); + + // Remove padding from the polymesh data. (Remove this odditity) + for (int i = 0; i < pmesh->nverts; ++i) + { + unsigned short* v = &pmesh->verts[i * 3]; + v[0] -= (unsigned short)Config.borderSize; + v[2] -= (unsigned short)Config.borderSize; + } + + // Set flags according to area types (e.g. Swim for Water) + for (int i = 0; i < pmesh->npolys; i++) + { + if (pmesh->areas[i] == Constants::POLY_AREA_ROAD || pmesh->areas[i] == Constants::POLY_AREA_TERRAIN) + pmesh->flags[i] = Constants::POLY_FLAG_WALK; + else if (pmesh->areas[i] == (int)Constants::POLY_AREA_WATER) + pmesh->flags[i] = Constants::POLY_FLAG_SWIM; + } + + // get original bounds + float* tilebMin; + float* tilebMax; + CalculateTileBounds(tilebMin, tilebMax); + tilebMin[1] = bbMin[1]; + tilebMax[1] = bbMax[1]; + + dtNavMeshCreateParams params; + // PolyMesh data + params.verts = pmesh->verts; + params.vertCount = pmesh->nverts; + params.polys = pmesh->polys; + params.polyAreas = pmesh->areas; + params.polyFlags = pmesh->flags; + params.polyCount = pmesh->npolys; + params.nvp = pmesh->nvp; + // PolyMeshDetail data + params.detailMeshes = dmesh->meshes; + params.detailVerts = dmesh->verts; + params.detailVertsCount = dmesh->nverts; + params.detailTris = dmesh->tris; + params.detailTriCount = dmesh->ntris; + // Copy bounding box + params.bmin[0] = tilebMin[0]; + params.bmin[1] = tilebMin[1]; + params.bmin[2] = tilebMin[2]; + params.bmax[0] = tilebMax[0]; + params.bmax[1] = tilebMax[1]; + params.bmax[2] = tilebMax[2]; + // General settings + params.ch = Config.ch; + params.cs = Config.cs; + params.walkableClimb = Config.walkableClimb; + params.walkableHeight = Config.walkableHeight; + params.walkableRadius = Config.walkableRadius; + params.tileX = X; + params.tileY = Y; + params.tileSize = Config.width; + int navDataSize; + uint8* navData; + printf("[%02u,%02u] Creating the navmesh!\n", X, Y); + bool result = dtCreateNavMeshData(¶ms, &navData, &navDataSize); + if (result) + { + printf("[%02u,%02u] NavMesh created, size %u!\n", X, Y, navDataSize); + DataSize = navDataSize; + rcFreePolyMesh(pmesh); + rcFreePolyMeshDetail(dmesh); + Cache->Clear(); + return navData; + } + + rcFreePolyMesh(pmesh); + rcFreePolyMeshDetail(dmesh); + return NULL; +} diff --git a/src/tools/mesh_extractor/TileBuilder.h b/src/tools/mesh_extractor/TileBuilder.h index badb05295e5..7dff363cabe 100644 --- a/src/tools/mesh_extractor/TileBuilder.h +++ b/src/tools/mesh_extractor/TileBuilder.h @@ -5,10 +5,12 @@ #include "Geometry.h" +class WDT; + class TileBuilder { public: - TileBuilder(std::string world, int x, int y); + TileBuilder(std::string world, int x, int y, WDT* wdt); void CalculateTileBounds(float*& bmin, float*& bmax); uint8* Build(); @@ -17,6 +19,9 @@ public: int Y; int MapId; rcConfig Config; + rcContext* Context; Geometry* _Geometry; + uint32 DataSize; + WDT* Wdt; }; #endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index ac14b9eca69..4cf20a4cf9d 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -5,6 +5,7 @@ #include #include "g3d/Matrix4.h" +#include "DetourNavMesh.h" #include "Common.h" #include "Constants.h" @@ -523,6 +524,21 @@ public: virtual float Scale() const { return 1.0f; }; }; +#define MMAP_MAGIC 0x4d4d4150 // 'MMAP' +#define MMAP_VERSION 3 + +struct MmapTileHeader +{ + uint32 mmapMagic; + uint32 dtVersion; + uint32 mmapVersion; + uint32 size; + bool usesLiquids : 1; + + MmapTileHeader() : mmapMagic(MMAP_MAGIC), dtVersion(DT_NAVMESH_VERSION), + mmapVersion(MMAP_VERSION), size(0), usesLiquids(true) {} +}; + class Utils { public: diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp index e5a14d55c0c..1a772a36558 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.cpp +++ b/src/tools/mesh_extractor/WorldModelHandler.cpp @@ -92,7 +92,7 @@ void WorldModelHandler::InsertModelGeometry( std::vector& verts, std::v } } - if (def.DoodadSet >= 0 && def.DoodadSet < root->DoodadSets.size()) + if (def.DoodadSet < root->DoodadSets.size()) { DoodadSet set = root->DoodadSets[def.DoodadSet]; std::vector instances; From 5725b068d22a22b3e77f8887b2a1736854d85027 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 28 Sep 2012 14:28:50 -0500 Subject: [PATCH 071/204] Tools/MeshExtractor: Fixed an uninitialized variable error. --- src/tools/mesh_extractor/ContinentBuilder.cpp | 2 +- src/tools/mesh_extractor/DoodadHandler.cpp | 2 +- src/tools/mesh_extractor/DoodadHandler.h | 2 +- src/tools/mesh_extractor/TileBuilder.cpp | 20 +++++++++++-------- src/tools/mesh_extractor/Utils.h | 2 +- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp index f861dff1648..c63445b2287 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.cpp +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -29,7 +29,7 @@ void ContinentBuilder::Build() MmapTileHeader header; header.size = builder.DataSize; fwrite(&header, sizeof(MmapTileHeader), 1, f); - fwrite(nav, sizeof(uint8), builder.DataSize, f); + fwrite(nav, sizeof(unsigned char), builder.DataSize, f); } fclose(f); dtFree(nav); diff --git a/src/tools/mesh_extractor/DoodadHandler.cpp b/src/tools/mesh_extractor/DoodadHandler.cpp index 89fcaba5601..aa298cea698 100644 --- a/src/tools/mesh_extractor/DoodadHandler.cpp +++ b/src/tools/mesh_extractor/DoodadHandler.cpp @@ -88,7 +88,7 @@ void DoodadHandler::ReadDoodadPaths( Chunk* id, Chunk* data ) } } -void DoodadHandler::InsertModelGeometry(const DoodadDefinition def, Model* model) +void DoodadHandler::InsertModelGeometry(const DoodadDefinition& def, Model* model) { G3D::Matrix4 transformation = Utils::GetTransformation(def); uint32 vertOffset = Vertices.size(); diff --git a/src/tools/mesh_extractor/DoodadHandler.h b/src/tools/mesh_extractor/DoodadHandler.h index c426504da32..aa7e3cac20d 100644 --- a/src/tools/mesh_extractor/DoodadHandler.h +++ b/src/tools/mesh_extractor/DoodadHandler.h @@ -43,7 +43,7 @@ protected: private: void ReadDoodadDefinitions(Chunk* chunk); void ReadDoodadPaths(Chunk* id, Chunk* data); - void InsertModelGeometry(const DoodadDefinition def, Model* model); + void InsertModelGeometry(const DoodadDefinition& def, Model* model); std::set _drawn; std::vector* _definitions; std::vector* _paths; diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 4736274706d..445641fc009 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -111,7 +111,7 @@ uint8* TileBuilder::Build() rcClearUnwalkableTriangles(Context, Config.walkableSlopeAngle, vertices, numVerts, triangles, numTris, areas); rcRasterizeTriangles(Context, vertices, numVerts, triangles, areas, numTris, *hf, Config.walkableClimb); - printf("[%02u,%02u] Triangles rasterized!\n", X, Y); + printf("[%02i,%02i] Triangles rasterized!\n", X, Y); // Once all geometry is rasterized, we do initial pass of filtering to // remove unwanted overhangs caused by the conservative rasterization @@ -120,7 +120,7 @@ uint8* TileBuilder::Build() rcFilterLedgeSpans(Context, Config.walkableHeight, Config.walkableClimb, *hf); rcFilterWalkableLowHeightSpans(Context, Config.walkableHeight, *hf); - printf("[%02u,%02u] Filtering done!\n", X, Y); + printf("[%02i,%02i] Filtering done!\n", X, Y); // Compact the heightfield so that it is faster to handle from now on. // This will result in more cache coherent data as well as the neighbours @@ -130,7 +130,7 @@ uint8* TileBuilder::Build() rcFreeHeightField(hf); - printf("[%02u,%02u] Heightfield compressed!\n", X, Y); + printf("[%02i,%02i] Heightfield compressed!\n", X, Y); // Erode the walkable area by agent radius. rcErodeWalkableArea(Context, Config.walkableRadius, *chf); @@ -139,7 +139,7 @@ uint8* TileBuilder::Build() // Partition the walkable surface into simple regions without holes. rcBuildRegions(Context, *chf, Config.borderSize, Config.minRegionArea, Config.mergeRegionArea); - printf("[%02u,%02u] Regions built!\n", X, Y); + printf("[%02i,%02i] Regions built!\n", X, Y); // Create contours. rcContourSet* cset = rcAllocContourSet(); @@ -149,13 +149,13 @@ uint8* TileBuilder::Build() rcPolyMesh* pmesh = rcAllocPolyMesh(); rcBuildPolyMesh(Context, *cset, Config.maxVertsPerPoly, *pmesh); - printf("[%02u,%02u] Polymesh built!\n", X, Y); + printf("[%02i,%02i] Polymesh built!\n", X, Y); // Build detail mesh. rcPolyMeshDetail* dmesh = rcAllocPolyMeshDetail(); rcBuildPolyMeshDetail(Context, *pmesh, *chf, Config.detailSampleDist, Config.detailSampleMaxError, *dmesh); - printf("[%02u,%02u] Polymesh detail built!\n", X, Y); + printf("[%02i,%02i] Polymesh detail built!\n", X, Y); rcFreeCompactHeightfield(chf); rcFreeContourSet(cset); @@ -215,13 +215,17 @@ uint8* TileBuilder::Build() params.tileX = X; params.tileY = Y; params.tileSize = Config.width; + + // Offmesh-connection settings + params.offMeshConCount = 0; // none for now + int navDataSize; uint8* navData; - printf("[%02u,%02u] Creating the navmesh!\n", X, Y); + printf("[%02i,%02i] Creating the navmesh!\n", X, Y); bool result = dtCreateNavMeshData(¶ms, &navData, &navDataSize); if (result) { - printf("[%02u,%02u] NavMesh created, size %u!\n", X, Y, navDataSize); + printf("[%02i,%02i] NavMesh created, size %i!\n", X, Y, navDataSize); DataSize = navDataSize; rcFreePolyMesh(pmesh); rcFreePolyMeshDetail(dmesh); diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index 4cf20a4cf9d..188d47a88ce 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -533,7 +533,7 @@ struct MmapTileHeader uint32 dtVersion; uint32 mmapVersion; uint32 size; - bool usesLiquids : 1; + bool usesLiquids; MmapTileHeader() : mmapMagic(MMAP_MAGIC), dtVersion(DT_NAVMESH_VERSION), mmapVersion(MMAP_VERSION), size(0), usesLiquids(true) {} From 886f71df72a751abf1b742e67e7707cb623fd854 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 28 Sep 2012 16:21:35 -0500 Subject: [PATCH 072/204] Tools/MeshExtract: Fixed linux build, thanks Dev[Acho]. Added a DBC class It will now autodetect your locale and start extracting mmaps as soon as started. --- src/tools/mesh_extractor/ADT.cpp | 9 ++- src/tools/mesh_extractor/CMakeLists.txt | 7 ++ src/tools/mesh_extractor/Cache.h | 4 +- src/tools/mesh_extractor/ContinentBuilder.cpp | 19 ++++-- src/tools/mesh_extractor/ContinentBuilder.h | 4 +- src/tools/mesh_extractor/DBC.cpp | 64 +++++++++++++++++++ src/tools/mesh_extractor/DBC.h | 51 +++++++++++++++ src/tools/mesh_extractor/DoodadHandler.cpp | 2 +- src/tools/mesh_extractor/MPQManager.cpp | 59 +++++++++-------- src/tools/mesh_extractor/MPQManager.h | 6 +- src/tools/mesh_extractor/MeshExtractor.cpp | 13 ++++ src/tools/mesh_extractor/TileBuilder.cpp | 7 +- src/tools/mesh_extractor/TileBuilder.h | 2 +- src/tools/mesh_extractor/Utils.cpp | 4 +- src/tools/mesh_extractor/Utils.h | 4 +- .../mesh_extractor/WorldModelHandler.cpp | 2 +- 16 files changed, 214 insertions(+), 43 deletions(-) create mode 100644 src/tools/mesh_extractor/DBC.cpp create mode 100644 src/tools/mesh_extractor/DBC.h diff --git a/src/tools/mesh_extractor/ADT.cpp b/src/tools/mesh_extractor/ADT.cpp index c564d7193cf..98bce8b2057 100644 --- a/src/tools/mesh_extractor/ADT.cpp +++ b/src/tools/mesh_extractor/ADT.cpp @@ -29,7 +29,14 @@ ADT::~ADT() void ADT::Read() { - Header.Read(Data->GetChunkByName("MHDR")->GetStream()); + Chunk* mhdr = Data->GetChunkByName("MHDR"); + if (!mhdr) + { + delete Data; + Data = NULL; + return; + } + Header.Read(mhdr->GetStream()); MapChunks.reserve(16 * 16); int mapChunkIndex = 0; diff --git a/src/tools/mesh_extractor/CMakeLists.txt b/src/tools/mesh_extractor/CMakeLists.txt index 09bd2982213..8ef48a90742 100644 --- a/src/tools/mesh_extractor/CMakeLists.txt +++ b/src/tools/mesh_extractor/CMakeLists.txt @@ -15,6 +15,13 @@ if( UNIX ) include_directories ( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src/server/shared + ${CMAKE_SOURCE_DIR}/src/server/shared/Database + ${CMAKE_SOURCE_DIR}/src/server/shared/Database/Implementation + ${CMAKE_SOURCE_DIR}/src/server/shared/Threading + ${CMAKE_SOURCE_DIR}/src/server/shared/Logging + ${CMAKE_SOURCE_DIR}/src/server/shared/Utilities + ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic + ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic/LinkedReference ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour ${CMAKE_SOURCE_DIR}/dep/libmpq diff --git a/src/tools/mesh_extractor/Cache.h b/src/tools/mesh_extractor/Cache.h index 799878bdd3b..83b6ba6ca7a 100644 --- a/src/tools/mesh_extractor/Cache.h +++ b/src/tools/mesh_extractor/Cache.h @@ -25,7 +25,7 @@ public: T* Get(K key) { - std::map::iterator itr = _items.find(key); + typename std::map::iterator itr = _items.find(key); if (itr != _items.end()) return itr->second; return NULL; @@ -33,7 +33,7 @@ public: void Clear() { - for (std::map::iterator itr = _items.begin(); itr != _items.end(); ++itr) + for (typename std::map::iterator itr = _items.begin(); itr != _items.end(); ++itr) delete itr->second; _items.clear(); } diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp index c63445b2287..7391ebb8767 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.cpp +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -6,7 +6,9 @@ void ContinentBuilder::Build() { - FILE* mmap = fopen("608.mmap", "wb"); + char buff[50]; + sprintf(buff, "%03u.mmap", MapId); + FILE* mmap = fopen(buff, "wb"); dtNavMeshParams params; params.maxPolys = 32768; params.maxTiles = 4096; @@ -19,19 +21,26 @@ void ContinentBuilder::Build() fclose(mmap); for (std::vector::iterator itr = TileMap->TileTable.begin(); itr != TileMap->TileTable.end(); ++itr) { - TileBuilder builder(Continent, itr->X, itr->Y, TileMap); + TileBuilder builder(Continent, itr->X, itr->Y, TileMap, MapId); char buff[100]; - sprintf(buff, "%03u%02u%02u.mmtile", builder.MapId, itr->X, itr->Y); - FILE* f = fopen(buff, "wb"); + sprintf(buff, "%03u%02u%02u.mmtile", MapId, itr->X, itr->Y); + FILE* f = fopen(buff, "r"); + if (f) // Check if file already exists. + { + fclose(f); + continue; + } uint8* nav = builder.Build(); if (nav) { + fclose(f); + f = fopen(buff, "wb"); MmapTileHeader header; header.size = builder.DataSize; fwrite(&header, sizeof(MmapTileHeader), 1, f); fwrite(nav, sizeof(unsigned char), builder.DataSize, f); + fclose(f); } - fclose(f); dtFree(nav); printf("[%02u,%02u] Tile Built!\n", itr->X, itr->Y); } diff --git a/src/tools/mesh_extractor/ContinentBuilder.h b/src/tools/mesh_extractor/ContinentBuilder.h index 7db141ddcf1..92c97c5f7e0 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.h +++ b/src/tools/mesh_extractor/ContinentBuilder.h @@ -2,14 +2,16 @@ #define CONT_BUILDER_H #include #include "WDT.h" +#include "Common.h" class ContinentBuilder { public: - ContinentBuilder(std::string continent, WDT* wdt) : Continent(continent), TileMap(wdt) {} + ContinentBuilder(std::string continent, uint32 mapId, WDT* wdt) : MapId(mapId), Continent(continent), TileMap(wdt) {} void Build(); private: std::string Continent; WDT* TileMap; + uint32 MapId; }; #endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/DBC.cpp b/src/tools/mesh_extractor/DBC.cpp new file mode 100644 index 00000000000..be04ce070ee --- /dev/null +++ b/src/tools/mesh_extractor/DBC.cpp @@ -0,0 +1,64 @@ +#include +#include "DBC.h" +#include "Common.h" + +DBC::DBC( FILE* stream ) : StringBlock(NULL), IsFaulty(true), StringBlockSize(0) +{ + char magic[5]; + fread(&magic, sizeof(char), 4, stream); + magic[4] = '\0'; + fread(&RecordCount, sizeof(uint32), 1, stream); + Records.reserve(RecordCount); + fread(&Fields, sizeof(uint32), 1, stream); + fread(&RecordSize, sizeof(uint32), 1, stream); + fread(&StringBlockSize, sizeof(uint32), 1, stream); + + for (int i = 0; i < RecordCount; i++) + { + Record* rec = new Record(this); + Records.push_back(rec); + int size = 0; + for (int f = 0; f < Fields; f++) + { + if (size + 4 > RecordSize) + { + IsFaulty = true; + break; + } + uint32 tmp; + fread(&tmp, sizeof(uint32), 1, stream); + rec->Values.push_back(tmp); + size += 4; + } + } + StringBlock = new uint8[StringBlockSize]; + fread(StringBlock, sizeof(uint8), StringBlockSize, stream); +} + +std::string DBC::GetStringByOffset( int offset ) +{ + int len = 0; + for (int i = offset; i < StringBlockSize; i++) + { + if (!StringBlock[i]) + { + len = (i - offset); + break; + } + } + char* d = new char[len+1]; + strcpy(d, (const char*)(StringBlock + offset)); + d[len] = '\0'; + std::string val = std::string(d); + delete d; + return val; +} + +Record* DBC::GetRecordById( int id ) +{ + // we assume Id is index 0 + for (std::vector::iterator itr = Records.begin(); itr != Records.end(); ++itr) + if ((*itr)->Values[0] == id) + return *itr; + return NULL; +} diff --git a/src/tools/mesh_extractor/DBC.h b/src/tools/mesh_extractor/DBC.h new file mode 100644 index 00000000000..6c86c1391dd --- /dev/null +++ b/src/tools/mesh_extractor/DBC.h @@ -0,0 +1,51 @@ +#ifndef DBC_H +#define DBC_H +#include +#include "Common.h" + +class Record; + +class DBC +{ +public: + DBC(FILE* stream); + + std::string GetStringByOffset(int offset); + + Record* GetRecordById(int id); + + std::string Name; + std::vector Records; + int RecordCount; + int Fields; + int RecordSize; + uint8* StringBlock; + uint32 StringBlockSize; + bool IsFaulty; +}; + +class Record +{ +public: + Record(DBC* dbc) : Source(dbc) {} + + DBC* Source; + std::vector Values; + + int operator[](int index) + { + return Values[index]; + } + + float GetFloat(int index) + { + return *(float*)(&Values[index]); + } + + std::string GetString(int index) + { + return Source->GetStringByOffset(Values[index]); + } +}; + +#endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/DoodadHandler.cpp b/src/tools/mesh_extractor/DoodadHandler.cpp index aa298cea698..28bb9da5f21 100644 --- a/src/tools/mesh_extractor/DoodadHandler.cpp +++ b/src/tools/mesh_extractor/DoodadHandler.cpp @@ -2,7 +2,7 @@ #include "Chunk.h" #include "Cache.h" #include "Model.h" -#include "g3d/Matrix4.h" +#include "G3D/Matrix4.h" DoodadHandler::DoodadHandler( ADT* adt ) : ObjectDataHandler(adt), _definitions(NULL), _paths(NULL) { diff --git a/src/tools/mesh_extractor/MPQManager.cpp b/src/tools/mesh_extractor/MPQManager.cpp index 35d4c91fc14..24e7e827548 100644 --- a/src/tools/mesh_extractor/MPQManager.cpp +++ b/src/tools/mesh_extractor/MPQManager.cpp @@ -1,5 +1,7 @@ #include "MPQManager.h" #include "MPQ.h" +#include "DBC.h" +#include "Utils.h" char* MPQManager::Files[] = { "common.MPQ", @@ -11,42 +13,43 @@ char* MPQManager::Files[] = { "patch-3.MPQ" }; +char* MPQManager::Languages[] = { "esES", "enUS", "enGB", "esMX", "deDE" }; + void MPQManager::Initialize() { - LoadMPQs(); + InitializeDBC(); + uint32 size = sizeof(Files) / sizeof(char*); + for (uint32 i = 0; i < size; ++i) + { + MPQArchive* arc = new MPQArchive(std::string("Data/" + std::string(Files[i])).c_str()); + Archives.push_front(arc); + printf("Opened %s\n", Files[i]); + } } void MPQManager::LoadMaps() { - + DBC* file = GetDBC("Map"); + printf("NAME %s\n", file->GetRecordById(608)->GetString(1).c_str()); } -void MPQManager::LoadMPQs() +void MPQManager::InitializeDBC() { - // Load the locale MPQ files first - char filename[512]; - - /*sprintf(filename,"Data/%s/locale-%s.MPQ", langs[locale], langs[locale]);*/ - Archives.push_front(new MPQArchive("Data/enUS/locale-enUS.MPQ")); - - for(int i = 0; i < 3; ++i) + CurLocale = 0; + std::string fileName; + uint32 size = sizeof(Languages) / sizeof(char*); + for (uint32 i = 0; i < size; ++i) { - char ext[3] = ""; - if (i) - sprintf(ext, "-%i", i + 1); - - sprintf(filename, "Data/enUS/patch-enUS%s.MPQ", ext); - Archives.push_front(new MPQArchive(filename)); + fileName = "Data/" + std::string(Languages[i]) + "/locale-" + std::string(Languages[i]) + ".MPQ"; + FILE* file = fopen(fileName.c_str(), "rb"); + if (file) + { + CurLocale = i; + break; + } } - - // Now load the common MPQ files - int count = sizeof(Files) / sizeof(char*); - for (int i = 0; i < count; ++i) - { - sprintf(filename, "Data/%s", Files[i]); - Archives.push_front(new MPQArchive(filename)); - } - printf("Loaded %u MPQ files succesfully\n", Archives.size()); + Archives.push_front(new MPQArchive(fileName.c_str())); + printf("Using locale: %s\n", Languages[CurLocale]); } FILE* MPQManager::GetFile( std::string path ) @@ -56,3 +59,9 @@ FILE* MPQManager::GetFile( std::string path ) return NULL; return file.GetFileStream(); } + +DBC* MPQManager::GetDBC( std::string name ) +{ + std::string path = "DBFilesClient\\" + name + ".dbc"; + return new DBC(GetFile(path)); +} diff --git a/src/tools/mesh_extractor/MPQManager.h b/src/tools/mesh_extractor/MPQManager.h index e10066ae4a6..725e0168237 100644 --- a/src/tools/mesh_extractor/MPQManager.h +++ b/src/tools/mesh_extractor/MPQManager.h @@ -3,6 +3,7 @@ #include "MPQ.h" +class DBC; class MPQManager { public: @@ -12,12 +13,15 @@ public: void Initialize(); void LoadMaps(); FILE* GetFile(std::string path); + DBC* GetDBC(std::string name); std::deque Archives; + uint32 CurLocale; static char* Files[]; + static char* Languages[]; protected: - void LoadMPQs(); + void InitializeDBC(); }; extern MPQManager* MPQHandler; diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index 38a120449bc..77b5a8e8c3d 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -2,6 +2,7 @@ #include "WDT.h" #include "ContinentBuilder.h" #include "Cache.h" +#include "DBC.h" #include "Common.h" #include "LoginDatabase.h" @@ -12,6 +13,17 @@ CacheClass* Cache; void ExtractAllMaps() { + DBC* dbc = MPQHandler->GetDBC("Map"); + for (std::vector::iterator itr = dbc->Records.begin(); itr != dbc->Records.end(); ++itr) + { + std::string name = (*itr)->GetString(1); + WDT wdt("World\\maps\\" + name + "\\" + name + ".wdt"); + if (!wdt.IsValid || wdt.IsGlobalModel) + continue; + ContinentBuilder builder(name, (*itr)->Values[0], &wdt); + builder.Build(); + } + /* WDT wdt("World\\maps\\DalaranPrison\\DalaranPrison.wdt"); if (!wdt.IsValid) return; @@ -23,6 +35,7 @@ void ExtractAllMaps() } ContinentBuilder builder("DalaranPrison", &wdt); builder.Build(); + */ } int main(int argc, char* argv[]) diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 445641fc009..8bbfd5afb69 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -9,7 +9,7 @@ #include "RecastAlloc.h" #include "DetourNavMeshBuilder.h" -TileBuilder::TileBuilder(std::string world, int x, int y, WDT* wdt) : _Geometry(NULL), World(world), X(x), Y(y), MapId(608), DataSize(0), Wdt(wdt) +TileBuilder::TileBuilder(std::string world, int x, int y, WDT* wdt, uint32 mapId) : _Geometry(NULL), World(world), X(x), Y(y), MapId(mapId), DataSize(0), Wdt(wdt) { // Cell Size = TileSize / TileVoxelSize // 1800 = TileVoxelSize @@ -54,6 +54,11 @@ uint8* TileBuilder::Build() { adt = new ADT(Utils::GetAdtPath(World, X, Y)); adt->Read(); + if (!adt->Data) + { + delete adt; + return NULL; + } Cache->AdtCache.Insert(std::make_pair(X, Y), adt); } _Geometry->AddAdt(adt); diff --git a/src/tools/mesh_extractor/TileBuilder.h b/src/tools/mesh_extractor/TileBuilder.h index 7dff363cabe..261675af7e2 100644 --- a/src/tools/mesh_extractor/TileBuilder.h +++ b/src/tools/mesh_extractor/TileBuilder.h @@ -10,7 +10,7 @@ class WDT; class TileBuilder { public: - TileBuilder(std::string world, int x, int y, WDT* wdt); + TileBuilder(std::string world, int x, int y, WDT* wdt, uint32 mapId); void CalculateTileBounds(float*& bmin, float*& bmax); uint8* Build(); diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp index c7c0cff0d42..2f07bd20080 100644 --- a/src/tools/mesh_extractor/Utils.cpp +++ b/src/tools/mesh_extractor/Utils.cpp @@ -2,8 +2,8 @@ #include "WorldModelHandler.h" #include "Constants.h" #include -#include "g3d/Matrix4.h" -#include "g3d/Quat.h" +#include "G3D/Matrix4.h" +#include "G3D/Quat.h" const float Constants::TileSize = 533.0f + (1/3.0f); const float Constants::MaxXY = 32.0f * Constants::TileSize; diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index 188d47a88ce..c247169df73 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -4,7 +4,7 @@ #include #include -#include "g3d/Matrix4.h" +#include "G3D/Matrix4.h" #include "DetourNavMesh.h" #include "Common.h" @@ -573,7 +573,7 @@ public: return false; return true; } - static std::string Utils::Replace( std::string str, const std::string& oldStr, const std::string& newStr ); + static std::string Replace( std::string str, const std::string& oldStr, const std::string& newStr ); static G3D::Matrix4 GetWmoDoodadTransformation( DoodadInstance inst, WorldModelDefinition root ); }; #endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp index 1a772a36558..636b06f6f73 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.cpp +++ b/src/tools/mesh_extractor/WorldModelHandler.cpp @@ -4,7 +4,7 @@ #include "Cache.h" #include "Model.h" #include "Common.h" -#include "g3d/Matrix4.h" +#include "G3D/Matrix4.h" #include WorldModelDefinition WorldModelDefinition::Read( FILE* file ) From eba6980b9a52f55859cb3bd93235e14866769514 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 28 Sep 2012 16:26:43 -0500 Subject: [PATCH 073/204] Tools/MeshExtractor: Allow to extract only 1 map ( via command line ) --- src/tools/mesh_extractor/MeshExtractor.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index 77b5a8e8c3d..a99cc4475a0 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -11,16 +11,20 @@ LoginDatabaseWorkerPool LoginDatabase; MPQManager* MPQHandler; CacheClass* Cache; -void ExtractAllMaps() +void ExtractAllMaps(uint32 onlyMap) { DBC* dbc = MPQHandler->GetDBC("Map"); for (std::vector::iterator itr = dbc->Records.begin(); itr != dbc->Records.end(); ++itr) { + uint32 mapId = (*itr)->Values[0]; + if (onlyMap && mapId != onlyMap) + continue; std::string name = (*itr)->GetString(1); WDT wdt("World\\maps\\" + name + "\\" + name + ".wdt"); if (!wdt.IsValid || wdt.IsGlobalModel) continue; - ContinentBuilder builder(name, (*itr)->Values[0], &wdt); + printf("Building %s MapId %u\n", name, mapId); + ContinentBuilder builder(name, mapId, &wdt); builder.Build(); } /* @@ -45,7 +49,10 @@ int main(int argc, char* argv[]) MPQHandler = new MPQManager(); MPQHandler->Initialize(); MPQHandler->LoadMaps(); - ExtractAllMaps(); + uint32 onlyMap = 0; + if (argc == 2) + onlyMap = uint32(atoi(argv[1])); + ExtractAllMaps(onlyMap); return 0; } From 9b97a89ef8e1dd1694985d1fc8e88808da1550cd Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 28 Sep 2012 17:09:44 -0500 Subject: [PATCH 074/204] Tools/MeshExtractor: Fixed a crash and some other mistakes. First glances of multithreading ( need to figure out a way around StormLib ) --- src/tools/mesh_extractor/ContinentBuilder.cpp | 92 ++++++++++++++----- src/tools/mesh_extractor/MapChunk.cpp | 1 + src/tools/mesh_extractor/MeshExtractor.cpp | 2 +- src/tools/mesh_extractor/TileBuilder.cpp | 2 +- src/tools/mesh_extractor/TileBuilder.h | 3 +- 5 files changed, 75 insertions(+), 25 deletions(-) diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp index 7391ebb8767..02a4d3626b7 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.cpp +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -3,6 +3,49 @@ #include "WDT.h" #include "Utils.h" #include "DetourNavMesh.h" +#include "ace/Task.h" + +class BuilderThread : public ACE_Task +{ +private: + int X, Y, MapId; + std::string Continent; +public: + BuilderThread() : Free(true) {} + void SetData(int x, int y, int map, std::string cont) { X = x; Y = y; MapId = map; Continent = cont; } + + int svc() + { + Free = false; + TileBuilder builder(Continent, X, Y, MapId); + char buff[100]; + sprintf(buff, "%03u%02u%02u.mmtile", MapId, X, Y); + FILE* f = fopen(buff, "r"); + if (f) // Check if file already exists. + { + fclose(f); + Free = true; + return 0; + } + uint8* nav = builder.Build(); + if (nav) + { + fclose(f); + f = fopen(buff, "wb"); + MmapTileHeader header; + header.size = builder.DataSize; + fwrite(&header, sizeof(MmapTileHeader), 1, f); + fwrite(nav, sizeof(unsigned char), builder.DataSize, f); + fclose(f); + } + dtFree(nav); + printf("[%02u,%02u] Tile Built!\n", X, Y); + Free = true; + return 0; + } + + bool Free; +}; void ContinentBuilder::Build() { @@ -19,29 +62,36 @@ void ContinentBuilder::Build() params.tileWidth = 533.33333f; fwrite(¶ms, sizeof(dtNavMeshParams), 1, mmap); fclose(mmap); + std::vector Threads; + /*for (uint32 i = 0; i < 1; ++i) + Threads.push_back(new BuilderThread());*/ for (std::vector::iterator itr = TileMap->TileTable.begin(); itr != TileMap->TileTable.end(); ++itr) { - TileBuilder builder(Continent, itr->X, itr->Y, TileMap, MapId); - char buff[100]; - sprintf(buff, "%03u%02u%02u.mmtile", MapId, itr->X, itr->Y); - FILE* f = fopen(buff, "r"); - if (f) // Check if file already exists. + BuilderThread th; + th.SetData(itr->X, itr->Y, MapId, Continent); + th.svc(); + /*bool next = false; + while (!next) { - fclose(f); - continue; - } - uint8* nav = builder.Build(); - if (nav) - { - fclose(f); - f = fopen(buff, "wb"); - MmapTileHeader header; - header.size = builder.DataSize; - fwrite(&header, sizeof(MmapTileHeader), 1, f); - fwrite(nav, sizeof(unsigned char), builder.DataSize, f); - fclose(f); - } - dtFree(nav); - printf("[%02u,%02u] Tile Built!\n", itr->X, itr->Y); + for (std::vector::iterator _th = Threads.begin(); _th != Threads.end(); ++_th) + { + if ((*_th)->Free) + { + (*_th)->SetData(itr->X, itr->Y, MapId, Continent); + (*_th)->activate(); + next = true; + break; + } + } + // Wait for 20 seconds + ACE_OS::sleep(ACE_Time_Value (0, 20000)); + }*/ } + + /*// Free memory + for (std::vector::iterator _th = Threads.begin(); _th != Threads.end(); ++_th) + { + (*_th)->wait(); + delete *_th; + }*/ } diff --git a/src/tools/mesh_extractor/MapChunk.cpp b/src/tools/mesh_extractor/MapChunk.cpp index 61c106f9766..debde08cda8 100644 --- a/src/tools/mesh_extractor/MapChunk.cpp +++ b/src/tools/mesh_extractor/MapChunk.cpp @@ -7,6 +7,7 @@ MapChunk::MapChunk( ADT* _adt, Chunk* chunk ) : Adt(_adt), Source(chunk) FILE* stream = chunk->GetStream(); Header.Read(stream); fseek(stream, chunk->Offset, SEEK_SET); + Index = Header.IndexX + Header.IndexY * 16; GenerateVertices(stream); } diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index a99cc4475a0..7ae6afadb84 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -23,7 +23,7 @@ void ExtractAllMaps(uint32 onlyMap) WDT wdt("World\\maps\\" + name + "\\" + name + ".wdt"); if (!wdt.IsValid || wdt.IsGlobalModel) continue; - printf("Building %s MapId %u\n", name, mapId); + printf("Building %s MapId %u\n", name.c_str(), mapId); ContinentBuilder builder(name, mapId, &wdt); builder.Build(); } diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 8bbfd5afb69..baf1fa0375c 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -9,7 +9,7 @@ #include "RecastAlloc.h" #include "DetourNavMeshBuilder.h" -TileBuilder::TileBuilder(std::string world, int x, int y, WDT* wdt, uint32 mapId) : _Geometry(NULL), World(world), X(x), Y(y), MapId(mapId), DataSize(0), Wdt(wdt) +TileBuilder::TileBuilder(std::string world, int x, int y, uint32 mapId) : _Geometry(NULL), World(world), X(x), Y(y), MapId(mapId), DataSize(0) { // Cell Size = TileSize / TileVoxelSize // 1800 = TileVoxelSize diff --git a/src/tools/mesh_extractor/TileBuilder.h b/src/tools/mesh_extractor/TileBuilder.h index 261675af7e2..f91a732f70c 100644 --- a/src/tools/mesh_extractor/TileBuilder.h +++ b/src/tools/mesh_extractor/TileBuilder.h @@ -10,7 +10,7 @@ class WDT; class TileBuilder { public: - TileBuilder(std::string world, int x, int y, WDT* wdt, uint32 mapId); + TileBuilder(std::string world, int x, int y, uint32 mapId); void CalculateTileBounds(float*& bmin, float*& bmax); uint8* Build(); @@ -22,6 +22,5 @@ public: rcContext* Context; Geometry* _Geometry; uint32 DataSize; - WDT* Wdt; }; #endif \ No newline at end of file From 95db9605ce227403eb4ea7fa46c91f47eb51a3ac Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 28 Sep 2012 17:28:20 -0500 Subject: [PATCH 075/204] Tools/MeshExtractor: Removed extra fclose --- src/tools/mesh_extractor/ContinentBuilder.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp index 02a4d3626b7..29541da508c 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.cpp +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -30,7 +30,6 @@ public: uint8* nav = builder.Build(); if (nav) { - fclose(f); f = fopen(buff, "wb"); MmapTileHeader header; header.size = builder.DataSize; From 6b23d2f7710a7b1e39ec7d43c9a3b04345caa988 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 28 Sep 2012 19:08:01 -0500 Subject: [PATCH 076/204] Core/Build: Fixed build --- src/server/scripts/Commands/cs_mmaps.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp index e4a0ebf7f24..be2d52b5925 100644 --- a/src/server/scripts/Commands/cs_mmaps.cpp +++ b/src/server/scripts/Commands/cs_mmaps.cpp @@ -32,6 +32,9 @@ #include "MMapFactory.h" #include "Map.h" #include "TargetedMovementGenerator.h" +#include "GridNotifiers.h" +#include "GridNotifiersImpl.h" +#include "CellImpl.h" class mmaps_commandscript : public CommandScript { From 3bea28e62c00a5f73e4b58cd554db28666b1d54b Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 29 Sep 2012 06:24:35 -0500 Subject: [PATCH 077/204] Tools/MeshExtractor: Fixed a crash and bad data for liquids --- src/tools/mesh_extractor/ContinentBuilder.cpp | 1 + src/tools/mesh_extractor/LiquidHandler.cpp | 3 +++ src/tools/mesh_extractor/MapChunk.cpp | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp index 29541da508c..9d3b18491f1 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.cpp +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -17,6 +17,7 @@ public: int svc() { Free = false; + printf("[%02i,%02i] Building tile", X, Y); TileBuilder builder(Continent, X, Y, MapId); char buff[100]; sprintf(buff, "%03u%02u%02u.mmtile", MapId, X, Y); diff --git a/src/tools/mesh_extractor/LiquidHandler.cpp b/src/tools/mesh_extractor/LiquidHandler.cpp index 3d0876aeb74..f6f8e5678c6 100644 --- a/src/tools/mesh_extractor/LiquidHandler.cpp +++ b/src/tools/mesh_extractor/LiquidHandler.cpp @@ -31,7 +31,10 @@ void LiquidHandler::HandleNewLiquid() float** heights = new float*[9]; for (int i = 0; i < 9; ++i) + { heights[i] = new float[9]; + memset(heights[i], 0, sizeof(float) * 9); + } H2ORenderMask renderMask; if (information.LiquidType != 2) diff --git a/src/tools/mesh_extractor/MapChunk.cpp b/src/tools/mesh_extractor/MapChunk.cpp index debde08cda8..67f4061035e 100644 --- a/src/tools/mesh_extractor/MapChunk.cpp +++ b/src/tools/mesh_extractor/MapChunk.cpp @@ -31,7 +31,7 @@ void MapChunk::GenerateTriangles() if (Adt->_LiquidHandler && !Adt->_LiquidHandler->MCNKData.empty()) { MCNKLiquidData& data = Adt->_LiquidHandler->MCNKData[Index]; - uint32 maxHeight = std::max( + float maxHeight = std::max( std::max( std::max(std::max(Vertices[topLeft].z, Vertices[topRight].z), Vertices[bottomLeft].z), Vertices[bottomRight].z), Vertices[center].z); From 1a7f0658b2a78a2c082b5f648548375b5d0f29e9 Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 29 Sep 2012 12:49:14 -0500 Subject: [PATCH 078/204] Tools/MeshExtractor: * Fixed some crashes * Added multithreading support, default to 4 threads. * Added some command line arguments --- src/tools/mesh_extractor/ADT.cpp | 9 +-- src/tools/mesh_extractor/Cache.h | 3 + src/tools/mesh_extractor/ContinentBuilder.cpp | 19 +++-- src/tools/mesh_extractor/ContinentBuilder.h | 3 +- src/tools/mesh_extractor/LiquidHandler.cpp | 4 + src/tools/mesh_extractor/MPQManager.cpp | 9 +-- src/tools/mesh_extractor/MPQManager.h | 4 +- src/tools/mesh_extractor/MeshExtractor.cpp | 74 ++++++++++++++----- src/tools/mesh_extractor/TileBuilder.cpp | 8 +- 9 files changed, 82 insertions(+), 51 deletions(-) diff --git a/src/tools/mesh_extractor/ADT.cpp b/src/tools/mesh_extractor/ADT.cpp index 98bce8b2057..c564d7193cf 100644 --- a/src/tools/mesh_extractor/ADT.cpp +++ b/src/tools/mesh_extractor/ADT.cpp @@ -29,14 +29,7 @@ ADT::~ADT() void ADT::Read() { - Chunk* mhdr = Data->GetChunkByName("MHDR"); - if (!mhdr) - { - delete Data; - Data = NULL; - return; - } - Header.Read(mhdr->GetStream()); + Header.Read(Data->GetChunkByName("MHDR")->GetStream()); MapChunks.reserve(16 * 16); int mapChunkIndex = 0; diff --git a/src/tools/mesh_extractor/Cache.h b/src/tools/mesh_extractor/Cache.h index 83b6ba6ca7a..49e268ec507 100644 --- a/src/tools/mesh_extractor/Cache.h +++ b/src/tools/mesh_extractor/Cache.h @@ -3,6 +3,7 @@ #include #include #include "Common.h" +#include "ace/Synch.h" class WorldModelRoot; class Model; @@ -20,6 +21,7 @@ public: { if (_items.size() > FlushLimit) Clear(); + ACE_GUARD(ACE_Thread_Mutex, g, mutex); _items[key] = val; } @@ -39,6 +41,7 @@ public: } private: std::map _items; + ACE_Thread_Mutex mutex; }; class CacheClass diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp index 9d3b18491f1..96f9085de8c 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.cpp +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -3,6 +3,7 @@ #include "WDT.h" #include "Utils.h" #include "DetourNavMesh.h" +#include "Cache.h" #include "ace/Task.h" class BuilderThread : public ACE_Task @@ -17,7 +18,7 @@ public: int svc() { Free = false; - printf("[%02i,%02i] Building tile", X, Y); + printf("[%02i,%02i] Building tile\n", X, Y); TileBuilder builder(Continent, X, Y, MapId); char buff[100]; sprintf(buff, "%03u%02u%02u.mmtile", MapId, X, Y); @@ -63,14 +64,11 @@ void ContinentBuilder::Build() fwrite(¶ms, sizeof(dtNavMeshParams), 1, mmap); fclose(mmap); std::vector Threads; - /*for (uint32 i = 0; i < 1; ++i) - Threads.push_back(new BuilderThread());*/ + for (uint32 i = 0; i < NumberOfThreads; ++i) + Threads.push_back(new BuilderThread()); for (std::vector::iterator itr = TileMap->TileTable.begin(); itr != TileMap->TileTable.end(); ++itr) { - BuilderThread th; - th.SetData(itr->X, itr->Y, MapId, Continent); - th.svc(); - /*bool next = false; + bool next = false; while (!next) { for (std::vector::iterator _th = Threads.begin(); _th != Threads.end(); ++_th) @@ -85,13 +83,14 @@ void ContinentBuilder::Build() } // Wait for 20 seconds ACE_OS::sleep(ACE_Time_Value (0, 20000)); - }*/ + } } + Cache->Clear(); - /*// Free memory + // Free memory for (std::vector::iterator _th = Threads.begin(); _th != Threads.end(); ++_th) { (*_th)->wait(); delete *_th; - }*/ + } } diff --git a/src/tools/mesh_extractor/ContinentBuilder.h b/src/tools/mesh_extractor/ContinentBuilder.h index 92c97c5f7e0..d3da984595d 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.h +++ b/src/tools/mesh_extractor/ContinentBuilder.h @@ -7,11 +7,12 @@ class ContinentBuilder { public: - ContinentBuilder(std::string continent, uint32 mapId, WDT* wdt) : MapId(mapId), Continent(continent), TileMap(wdt) {} + ContinentBuilder(std::string continent, uint32 mapId, WDT* wdt, uint32 tn) : MapId(mapId), Continent(continent), TileMap(wdt), NumberOfThreads(tn) {} void Build(); private: std::string Continent; WDT* TileMap; uint32 MapId; + uint32 NumberOfThreads; }; #endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/LiquidHandler.cpp b/src/tools/mesh_extractor/LiquidHandler.cpp index f6f8e5678c6..9a40e08b73a 100644 --- a/src/tools/mesh_extractor/LiquidHandler.cpp +++ b/src/tools/mesh_extractor/LiquidHandler.cpp @@ -25,7 +25,11 @@ void LiquidHandler::HandleNewLiquid() { H2OHeader h = header[i]; if (h.LayerCount == 0) + { + // Need to fill in missing data with dummies. + MCNKData.push_back(MCNKLiquidData(NULL, H2ORenderMask())); continue; + } fseek(stream, chunk->Offset + h.OffsetInformation, SEEK_SET); H2OInformation information = H2OInformation::Read(stream); diff --git a/src/tools/mesh_extractor/MPQManager.cpp b/src/tools/mesh_extractor/MPQManager.cpp index 24e7e827548..5ea6198e76d 100644 --- a/src/tools/mesh_extractor/MPQManager.cpp +++ b/src/tools/mesh_extractor/MPQManager.cpp @@ -3,6 +3,8 @@ #include "DBC.h" #include "Utils.h" +#include "ace/Synch.h" + char* MPQManager::Files[] = { "common.MPQ", "common-2.MPQ", @@ -27,12 +29,6 @@ void MPQManager::Initialize() } } -void MPQManager::LoadMaps() -{ - DBC* file = GetDBC("Map"); - printf("NAME %s\n", file->GetRecordById(608)->GetString(1).c_str()); -} - void MPQManager::InitializeDBC() { CurLocale = 0; @@ -54,6 +50,7 @@ void MPQManager::InitializeDBC() FILE* MPQManager::GetFile( std::string path ) { + ACE_GUARD_RETURN(ACE_Thread_Mutex, g, mutex, NULL); MPQFile file(path.c_str()); if (file.isEof()) return NULL; diff --git a/src/tools/mesh_extractor/MPQManager.h b/src/tools/mesh_extractor/MPQManager.h index 725e0168237..634c70cedeb 100644 --- a/src/tools/mesh_extractor/MPQManager.h +++ b/src/tools/mesh_extractor/MPQManager.h @@ -2,6 +2,7 @@ #define MPQ_MANAGER_H #include "MPQ.h" +#include "ace/Synch.h" class DBC; class MPQManager @@ -11,7 +12,6 @@ public: ~MPQManager() {} void Initialize(); - void LoadMaps(); FILE* GetFile(std::string path); DBC* GetDBC(std::string name); @@ -22,6 +22,8 @@ public: static char* Languages[]; protected: void InitializeDBC(); +private: + ACE_Thread_Mutex mutex; }; extern MPQManager* MPQHandler; diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index 7ae6afadb84..2884b998ac8 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -4,42 +4,73 @@ #include "Cache.h" #include "DBC.h" +#include + #include "Common.h" #include "LoginDatabase.h" +#include "Util.h" LoginDatabaseWorkerPool LoginDatabase; MPQManager* MPQHandler; CacheClass* Cache; -void ExtractAllMaps(uint32 onlyMap) +void ExtractAllMaps(std::set& mapIds, uint32 threads) { DBC* dbc = MPQHandler->GetDBC("Map"); for (std::vector::iterator itr = dbc->Records.begin(); itr != dbc->Records.end(); ++itr) { uint32 mapId = (*itr)->Values[0]; - if (onlyMap && mapId != onlyMap) + + // Skip this map if a list of specific maps was provided and this one is not contained in it. + if (!mapIds.empty() && mapIds.find(mapId) == mapIds.end()) continue; + std::string name = (*itr)->GetString(1); WDT wdt("World\\maps\\" + name + "\\" + name + ".wdt"); if (!wdt.IsValid || wdt.IsGlobalModel) continue; printf("Building %s MapId %u\n", name.c_str(), mapId); - ContinentBuilder builder(name, mapId, &wdt); + ContinentBuilder builder(name, mapId, &wdt, threads); builder.Build(); } - /* - WDT wdt("World\\maps\\DalaranPrison\\DalaranPrison.wdt"); - if (!wdt.IsValid) - return; - printf("Model valid!\n"); - if (wdt.IsGlobalModel) +} + +bool HandleArgs(int argc, char** argv, uint32& threads, std::set& mapList) +{ + char* param = NULL; + for (int i = 1; i < argc; ++i) { - printf("Unsupported\n"); - return; + if (strcmp(argv[i], "--threads") == 0) + { + param = argv[++i]; + if (!param) + return false; + + threads = atoi(param); + printf("Using %i threads\n", threads); + } + if (strcmp(argv[i], "--maps") == 0) + { + param = argv[++i]; + if (!param) + return false; + std::string maps = std::string(param); + Tokens tokens(maps, ','); + + for (Tokens::iterator itr = tokens.begin(); itr != tokens.end(); ++itr) + mapList.insert(atoi(*itr)); + + printf("Extracting only provided list of maps (%u).\n", mapList.size()); + } } - ContinentBuilder builder("DalaranPrison", &wdt); - builder.Build(); - */ + return true; +} + +void PrintUsage() +{ + printf("MeshExtractor help.\n"); + printf("* Use \"--threads \" to specify threads, default to 4\n"); + printf("* Use \"--maps a,b,c,d,e\" to extract only the maps specified ( do not use spaces )\n"); } int main(int argc, char* argv[]) @@ -48,11 +79,16 @@ int main(int argc, char* argv[]) Cache = new CacheClass(); MPQHandler = new MPQManager(); MPQHandler->Initialize(); - MPQHandler->LoadMaps(); - uint32 onlyMap = 0; - if (argc == 2) - onlyMap = uint32(atoi(argv[1])); - ExtractAllMaps(onlyMap); + uint32 threads = 4; + std::set mapIds; + + if (!HandleArgs(argc, argv, threads, mapIds)) + { + PrintUsage(); + return -1; + } + + ExtractAllMaps(mapIds, threads); return 0; } diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index baf1fa0375c..926d2591f1a 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -9,6 +9,8 @@ #include "RecastAlloc.h" #include "DetourNavMeshBuilder.h" +#include "ace/Synch.h" + TileBuilder::TileBuilder(std::string world, int x, int y, uint32 mapId) : _Geometry(NULL), World(world), X(x), Y(y), MapId(mapId), DataSize(0) { // Cell Size = TileSize / TileVoxelSize @@ -54,11 +56,6 @@ uint8* TileBuilder::Build() { adt = new ADT(Utils::GetAdtPath(World, X, Y)); adt->Read(); - if (!adt->Data) - { - delete adt; - return NULL; - } Cache->AdtCache.Insert(std::make_pair(X, Y), adt); } _Geometry->AddAdt(adt); @@ -234,7 +231,6 @@ uint8* TileBuilder::Build() DataSize = navDataSize; rcFreePolyMesh(pmesh); rcFreePolyMeshDetail(dmesh); - Cache->Clear(); return navData; } From 987436ceeac3c463a81d3b2cab05ff3c532dbbf8 Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 29 Sep 2012 15:38:31 -0500 Subject: [PATCH 079/204] Tools/MeshExtractor: Get rid of some memory leaks --- src/tools/mesh_extractor/ChunkedData.cpp | 9 +++++++ src/tools/mesh_extractor/ChunkedData.h | 1 + src/tools/mesh_extractor/DoodadHandler.cpp | 6 +++++ src/tools/mesh_extractor/DoodadHandler.h | 2 ++ src/tools/mesh_extractor/LiquidHandler.h | 1 + src/tools/mesh_extractor/TileBuilder.cpp | 24 +++++++++++++++---- src/tools/mesh_extractor/TileBuilder.h | 2 ++ .../mesh_extractor/WorldModelHandler.cpp | 8 ++++++- src/tools/mesh_extractor/WorldModelHandler.h | 1 + 9 files changed, 48 insertions(+), 6 deletions(-) diff --git a/src/tools/mesh_extractor/ChunkedData.cpp b/src/tools/mesh_extractor/ChunkedData.cpp index 470b8b94f39..35b1bcd5af0 100644 --- a/src/tools/mesh_extractor/ChunkedData.cpp +++ b/src/tools/mesh_extractor/ChunkedData.cpp @@ -61,3 +61,12 @@ Chunk* ChunkedData::GetChunkByName( std::string name ) return Chunks[i]; return NULL; } + +ChunkedData::~ChunkedData() +{ + for (std::vector::iterator itr = Chunks.begin(); itr != Chunks.end(); ++itr) + delete *itr; + + Chunks.clear(); + fclose(Stream); +} diff --git a/src/tools/mesh_extractor/ChunkedData.h b/src/tools/mesh_extractor/ChunkedData.h index 6e102828222..d36d0868859 100644 --- a/src/tools/mesh_extractor/ChunkedData.h +++ b/src/tools/mesh_extractor/ChunkedData.h @@ -9,6 +9,7 @@ class ChunkedData public: ChunkedData(FILE* stream, uint32 maxLength, uint32 chunksHint = 300); ChunkedData(std::string file, uint32 chunksHint = 300); + ~ChunkedData(); int GetFirstIndex(std::string name); Chunk* GetChunkByName(std::string name); diff --git a/src/tools/mesh_extractor/DoodadHandler.cpp b/src/tools/mesh_extractor/DoodadHandler.cpp index 28bb9da5f21..6604aebe73a 100644 --- a/src/tools/mesh_extractor/DoodadHandler.cpp +++ b/src/tools/mesh_extractor/DoodadHandler.cpp @@ -99,3 +99,9 @@ void DoodadHandler::InsertModelGeometry(const DoodadDefinition& def, Model* mode for (std::vector >::iterator itr = model->Triangles.begin(); itr != model->Triangles.end(); ++itr) Triangles.push_back(Triangle(Constants::TRIANGLE_TYPE_DOODAD, itr->V0 + vertOffset, itr->V1 + vertOffset, itr->V2 + vertOffset)); } + +DoodadHandler::~DoodadHandler() +{ + delete _definitions; + delete _paths; +} diff --git a/src/tools/mesh_extractor/DoodadHandler.h b/src/tools/mesh_extractor/DoodadHandler.h index aa7e3cac20d..2e00696f7e5 100644 --- a/src/tools/mesh_extractor/DoodadHandler.h +++ b/src/tools/mesh_extractor/DoodadHandler.h @@ -32,6 +32,8 @@ class DoodadHandler : public ObjectDataHandler { public: DoodadHandler(ADT* adt); + ~DoodadHandler(); + std::vector Vertices; std::vector > Triangles; bool IsSane() { return _definitions && _paths; } diff --git a/src/tools/mesh_extractor/LiquidHandler.h b/src/tools/mesh_extractor/LiquidHandler.h index 138b2da2ad9..6e8d0081adb 100644 --- a/src/tools/mesh_extractor/LiquidHandler.h +++ b/src/tools/mesh_extractor/LiquidHandler.h @@ -10,6 +10,7 @@ class LiquidHandler { public: LiquidHandler(ADT* adt); + ADT* Source; std::vector Vertices; std::vector > Triangles; diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 926d2591f1a..5c2c4faab80 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -225,16 +225,30 @@ uint8* TileBuilder::Build() uint8* navData; printf("[%02i,%02i] Creating the navmesh!\n", X, Y); bool result = dtCreateNavMeshData(¶ms, &navData, &navDataSize); - if (result) + + // Free some memory + rcFreePolyMesh(pmesh); + rcFreePolyMeshDetail(dmesh); + delete tilebMax; + delete tilebMin; + delete areas; + delete triangles; + delete vertices; + delete bbMax; + delete bbMin; + + if (result) { printf("[%02i,%02i] NavMesh created, size %i!\n", X, Y, navDataSize); DataSize = navDataSize; - rcFreePolyMesh(pmesh); - rcFreePolyMeshDetail(dmesh); return navData; } - rcFreePolyMesh(pmesh); - rcFreePolyMeshDetail(dmesh); return NULL; } + +TileBuilder::~TileBuilder() +{ + delete Context; + delete _Geometry; +} diff --git a/src/tools/mesh_extractor/TileBuilder.h b/src/tools/mesh_extractor/TileBuilder.h index f91a732f70c..e56b926e5a5 100644 --- a/src/tools/mesh_extractor/TileBuilder.h +++ b/src/tools/mesh_extractor/TileBuilder.h @@ -11,6 +11,8 @@ class TileBuilder { public: TileBuilder(std::string world, int x, int y, uint32 mapId); + ~TileBuilder(); + void CalculateTileBounds(float*& bmin, float*& bmax); uint8* Build(); diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp index 636b06f6f73..edad6d1b6d8 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.cpp +++ b/src/tools/mesh_extractor/WorldModelHandler.cpp @@ -24,7 +24,7 @@ WorldModelDefinition WorldModelDefinition::Read( FILE* file ) } -WorldModelHandler::WorldModelHandler( ADT* adt ) : ObjectDataHandler(adt) +WorldModelHandler::WorldModelHandler( ADT* adt ) : ObjectDataHandler(adt), _definitions(NULL), _paths(NULL) { if (!adt->HasObjectData) return; @@ -190,3 +190,9 @@ void WorldModelHandler::ReadModelPaths() _paths->push_back(Utils::ReadString(dataStream)); } } + +WorldModelHandler::~WorldModelHandler() +{ + delete _definitions; + delete _paths; +} diff --git a/src/tools/mesh_extractor/WorldModelHandler.h b/src/tools/mesh_extractor/WorldModelHandler.h index daf0713ecd2..df5e3764eb5 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.h +++ b/src/tools/mesh_extractor/WorldModelHandler.h @@ -29,6 +29,7 @@ class WorldModelHandler : public ObjectDataHandler { public: WorldModelHandler(ADT* adt); + ~WorldModelHandler(); std::vector Vertices; std::vector > Triangles; From 5c9e917e5e2a4c934aaa7d061624a46ff4269c8f Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 29 Sep 2012 16:19:33 -0500 Subject: [PATCH 080/204] Core/MMaps: Removed an incorrect call to GetHeight Tools/MeshExtractor: Fixed a crash caused by calling fclose in a NULL stream --- src/server/game/Movement/PathGenerator.cpp | 6 +----- src/tools/mesh_extractor/ChunkedData.cpp | 3 ++- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index 9635399e71f..6e765b1ee27 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -58,12 +58,8 @@ bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool fo if (!Trinity::IsValidMapCoord(destX, destY, destZ) || !Trinity::IsValidMapCoord(x, y, z)) return false; - float newDestZ = _sourceUnit->GetBaseMap()->GetHeight(_sourceUnit->GetPhaseMask(), x, y, z, true, MAX_FALL_DISTANCE); - if (newDestZ <= INVALID_HEIGHT) - return false; - Vector3 oldDest = GetEndPosition(); - Vector3 dest(destX, destY, newDestZ); + Vector3 dest(destX, destY, destZ); SetEndPosition(dest); Vector3 start(x, y, z); diff --git a/src/tools/mesh_extractor/ChunkedData.cpp b/src/tools/mesh_extractor/ChunkedData.cpp index 35b1bcd5af0..4c59217ed33 100644 --- a/src/tools/mesh_extractor/ChunkedData.cpp +++ b/src/tools/mesh_extractor/ChunkedData.cpp @@ -68,5 +68,6 @@ ChunkedData::~ChunkedData() delete *itr; Chunks.clear(); - fclose(Stream); + if (Stream) + fclose(Stream); } From 14b304d4f726aeaf5f48fdac4cd9ce8aad66c5c9 Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 30 Sep 2012 08:27:56 -0500 Subject: [PATCH 081/204] Tools/MeshExtractor: * Removed the cache of ADTs * Add the correct geometry for neighbor ADTs * Fixes more crashes * Calculate the correct bounds for the map tiles. --- src/tools/mesh_extractor/ADT.cpp | 1 + src/tools/mesh_extractor/Cache.h | 11 ++-- src/tools/mesh_extractor/ContinentBuilder.cpp | 57 ++++++++++++++++--- src/tools/mesh_extractor/TileBuilder.cpp | 30 ++++------ 4 files changed, 68 insertions(+), 31 deletions(-) diff --git a/src/tools/mesh_extractor/ADT.cpp b/src/tools/mesh_extractor/ADT.cpp index c564d7193cf..1684d0636f4 100644 --- a/src/tools/mesh_extractor/ADT.cpp +++ b/src/tools/mesh_extractor/ADT.cpp @@ -2,6 +2,7 @@ #include "DoodadHandler.h" #include "LiquidHandler.h" #include "WorldModelHandler.h" +#include "Cache.h" ADT::ADT( std::string file ) : ObjectData(NULL), Data(NULL), _DoodadHandler(NULL), _WorldModelHandler(NULL), _LiquidHandler(NULL), HasObjectData(false) { diff --git a/src/tools/mesh_extractor/Cache.h b/src/tools/mesh_extractor/Cache.h index 49e268ec507..36bf4a7a693 100644 --- a/src/tools/mesh_extractor/Cache.h +++ b/src/tools/mesh_extractor/Cache.h @@ -7,7 +7,6 @@ class WorldModelRoot; class Model; -class ADT; template class GenericCache @@ -19,21 +18,23 @@ public: void Insert(K key, T* val) { + ACE_GUARD(ACE_Thread_Mutex, g, mutex); + if (_items.size() > FlushLimit) Clear(); - ACE_GUARD(ACE_Thread_Mutex, g, mutex); _items[key] = val; } T* Get(K key) { + ACE_GUARD_RETURN(ACE_Thread_Mutex, g, mutex, NULL); typename std::map::iterator itr = _items.find(key); if (itr != _items.end()) return itr->second; return NULL; } - void Clear() + void Clear() { for (typename std::map::iterator itr = _items.begin(); itr != _items.end(); ++itr) delete itr->second; @@ -50,10 +51,10 @@ public: CacheClass() {} GenericCache ModelCache; GenericCache WorldModelCache; - GenericCache, ADT> AdtCache; + void Clear() { - AdtCache.Clear(); + } }; diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp index 96f9085de8c..cdfe0ca050a 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.cpp +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -5,6 +5,7 @@ #include "DetourNavMesh.h" #include "Cache.h" #include "ace/Task.h" +#include "Recast.h" class BuilderThread : public ACE_Task { @@ -21,18 +22,24 @@ public: printf("[%02i,%02i] Building tile\n", X, Y); TileBuilder builder(Continent, X, Y, MapId); char buff[100]; - sprintf(buff, "%03u%02u%02u.mmtile", MapId, X, Y); + sprintf(buff, "mmaps/%03u%02u%02u.mmtile", MapId, X, Y); FILE* f = fopen(buff, "r"); if (f) // Check if file already exists. { + printf("[%02i,%02i] Tile skipped, file already exists\n", X, Y); fclose(f); Free = true; - return 0; + return 1; } uint8* nav = builder.Build(); if (nav) { f = fopen(buff, "wb"); + if (!f) + { + printf("Could not create file %s. Check that you have write permissions to the destination folder and try again\n", buff); + return -1; + } MmapTileHeader header; header.size = builder.DataSize; fwrite(&header, sizeof(MmapTileHeader), 1, f); @@ -48,17 +55,52 @@ public: bool Free; }; +void getTileBounds(uint32 tileX, uint32 tileY, float* verts, int vertCount, float* bmin, float* bmax) +{ + // this is for elevation + if (verts && vertCount) + rcCalcBounds(verts, vertCount, bmin, bmax); + else + { + bmin[1] = FLT_MIN; + bmax[1] = FLT_MAX; + } + + // this is for width and depth + bmax[0] = (32 - int(tileX)) * Constants::TileSize; + bmax[2] = (32 - int(tileY)) * Constants::TileSize; + bmin[0] = bmax[0] - Constants::TileSize; + bmin[2] = bmax[2] - Constants::TileSize; +} + void ContinentBuilder::Build() { char buff[50]; - sprintf(buff, "%03u.mmap", MapId); + sprintf(buff, "mmaps/%03u.mmap", MapId); FILE* mmap = fopen(buff, "wb"); + if (!mmap) + { + printf("Could not create file %s. Check that you have write permissions to the destination folder and try again\n", buff); + return; + } + + int tileXMin = 64, tileYMin = 64, tileXMax = 0, tileYMax = 0; + for (std::vector::iterator itr = TileMap->TileTable.begin(); itr != TileMap->TileTable.end(); ++itr) + { + tileXMax = std::max(itr->X, tileXMax); + tileXMin = std::min(itr->X, tileXMin); + + tileYMax = std::max(itr->Y, tileYMax); + tileYMin = std::min(itr->Y, tileYMin); + } + + float bmin[3], bmax[3]; + getTileBounds(tileXMax, tileYMax, NULL, 0, bmin, bmax); + dtNavMeshParams params; params.maxPolys = 32768; - params.maxTiles = 4096; - params.orig[0] = -17066.666f; - params.orig[1] = 0.0f; - params.orig[2] = -17066.666f; + params.maxTiles = TileMap->TileTable.size(); + rcVcopy(params.orig, bmin); params.tileHeight = 533.33333f; params.tileWidth = 533.33333f; fwrite(¶ms, sizeof(dtNavMeshParams), 1, mmap); @@ -66,6 +108,7 @@ void ContinentBuilder::Build() std::vector Threads; for (uint32 i = 0; i < NumberOfThreads; ++i) Threads.push_back(new BuilderThread()); + printf("Map %s ( %i ) has %i tiles. Building them with %i threads\n", Continent.c_str(), MapId, TileMap->TileTable.size(), NumberOfThreads); for (std::vector::iterator itr = TileMap->TileTable.begin(); itr != TileMap->TileTable.end(); ++itr) { bool next = false; diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 5c2c4faab80..83137258710 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -51,14 +51,10 @@ uint8* TileBuilder::Build() { _Geometry = new Geometry(); _Geometry->Transform = true; - ADT* adt = Cache->AdtCache.Get(std::make_pair(X, Y)); - if (!adt) - { - adt = new ADT(Utils::GetAdtPath(World, X, Y)); - adt->Read(); - Cache->AdtCache.Insert(std::make_pair(X, Y), adt); - } + ADT* adt = new ADT(Utils::GetAdtPath(World, X, Y)); + adt->Read(); _Geometry->AddAdt(adt); + delete adt; if (_Geometry->Vertices.empty() && _Geometry->Triangles.empty()) return NULL; @@ -77,20 +73,16 @@ uint8* TileBuilder::Build() if (tx == X && ty == Y) continue; - ADT* _adt = Cache->AdtCache.Get(std::make_pair(tx, ty)); - if (!_adt) + ADT* _adt = new ADT(Utils::GetAdtPath(World, tx, ty)); + // If this condition is met, it means that this wdt does not contain the ADT + if (!_adt->Data->Stream) { - _adt = new ADT(Utils::GetAdtPath(World, tx, ty)); - // If this condition is met, it means that this wdt does not contain the ADT - if (!_adt->Data->Stream) - { - delete _adt; - continue; - } - _adt->Read(); - Cache->AdtCache.Insert(std::make_pair(tx, ty), _adt); + delete _adt; + continue; } - _Geometry->AddAdt(adt); + _adt->Read(); + _Geometry->AddAdt(_adt); + delete _adt; } } uint32 numVerts = _Geometry->Vertices.size(); From d63e1276d602b0172f2d32abe85ec718a7bc7912 Mon Sep 17 00:00:00 2001 From: Nay Date: Sun, 30 Sep 2012 15:38:03 +0100 Subject: [PATCH 082/204] Tools/MeshExtractor: tabs2spaces --- src/tools/mesh_extractor/ChunkedData.cpp | 12 ++++---- src/tools/mesh_extractor/ChunkedData.h | 2 +- src/tools/mesh_extractor/DoodadHandler.cpp | 4 +-- src/tools/mesh_extractor/DoodadHandler.h | 2 +- src/tools/mesh_extractor/MeshExtractor.cpp | 2 +- src/tools/mesh_extractor/TileBuilder.cpp | 28 +++++++++---------- src/tools/mesh_extractor/TileBuilder.h | 2 +- .../mesh_extractor/WorldModelHandler.cpp | 4 +-- src/tools/mesh_extractor/WorldModelHandler.h | 2 +- 9 files changed, 29 insertions(+), 29 deletions(-) diff --git a/src/tools/mesh_extractor/ChunkedData.cpp b/src/tools/mesh_extractor/ChunkedData.cpp index 4c59217ed33..725a6f45637 100644 --- a/src/tools/mesh_extractor/ChunkedData.cpp +++ b/src/tools/mesh_extractor/ChunkedData.cpp @@ -64,10 +64,10 @@ Chunk* ChunkedData::GetChunkByName( std::string name ) ChunkedData::~ChunkedData() { - for (std::vector::iterator itr = Chunks.begin(); itr != Chunks.end(); ++itr) - delete *itr; - - Chunks.clear(); - if (Stream) - fclose(Stream); + for (std::vector::iterator itr = Chunks.begin(); itr != Chunks.end(); ++itr) + delete *itr; + + Chunks.clear(); + if (Stream) + fclose(Stream); } diff --git a/src/tools/mesh_extractor/ChunkedData.h b/src/tools/mesh_extractor/ChunkedData.h index d36d0868859..e23648c845e 100644 --- a/src/tools/mesh_extractor/ChunkedData.h +++ b/src/tools/mesh_extractor/ChunkedData.h @@ -9,7 +9,7 @@ class ChunkedData public: ChunkedData(FILE* stream, uint32 maxLength, uint32 chunksHint = 300); ChunkedData(std::string file, uint32 chunksHint = 300); - ~ChunkedData(); + ~ChunkedData(); int GetFirstIndex(std::string name); Chunk* GetChunkByName(std::string name); diff --git a/src/tools/mesh_extractor/DoodadHandler.cpp b/src/tools/mesh_extractor/DoodadHandler.cpp index 6604aebe73a..363f07b4578 100644 --- a/src/tools/mesh_extractor/DoodadHandler.cpp +++ b/src/tools/mesh_extractor/DoodadHandler.cpp @@ -102,6 +102,6 @@ void DoodadHandler::InsertModelGeometry(const DoodadDefinition& def, Model* mode DoodadHandler::~DoodadHandler() { - delete _definitions; - delete _paths; + delete _definitions; + delete _paths; } diff --git a/src/tools/mesh_extractor/DoodadHandler.h b/src/tools/mesh_extractor/DoodadHandler.h index 2e00696f7e5..a212b032d1d 100644 --- a/src/tools/mesh_extractor/DoodadHandler.h +++ b/src/tools/mesh_extractor/DoodadHandler.h @@ -32,7 +32,7 @@ class DoodadHandler : public ObjectDataHandler { public: DoodadHandler(ADT* adt); - ~DoodadHandler(); + ~DoodadHandler(); std::vector Vertices; std::vector > Triangles; diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index 2884b998ac8..3dde9ac36f5 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -89,6 +89,6 @@ int main(int argc, char* argv[]) } ExtractAllMaps(mapIds, threads); - return 0; + return 0; } diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 83137258710..e3694541be8 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -217,19 +217,19 @@ uint8* TileBuilder::Build() uint8* navData; printf("[%02i,%02i] Creating the navmesh!\n", X, Y); bool result = dtCreateNavMeshData(¶ms, &navData, &navDataSize); - - // Free some memory - rcFreePolyMesh(pmesh); - rcFreePolyMeshDetail(dmesh); - delete tilebMax; - delete tilebMin; - delete areas; - delete triangles; - delete vertices; - delete bbMax; - delete bbMin; + + // Free some memory + rcFreePolyMesh(pmesh); + rcFreePolyMeshDetail(dmesh); + delete tilebMax; + delete tilebMin; + delete areas; + delete triangles; + delete vertices; + delete bbMax; + delete bbMin; - if (result) + if (result) { printf("[%02i,%02i] NavMesh created, size %i!\n", X, Y, navDataSize); DataSize = navDataSize; @@ -241,6 +241,6 @@ uint8* TileBuilder::Build() TileBuilder::~TileBuilder() { - delete Context; - delete _Geometry; + delete Context; + delete _Geometry; } diff --git a/src/tools/mesh_extractor/TileBuilder.h b/src/tools/mesh_extractor/TileBuilder.h index e56b926e5a5..2ec45811676 100644 --- a/src/tools/mesh_extractor/TileBuilder.h +++ b/src/tools/mesh_extractor/TileBuilder.h @@ -11,7 +11,7 @@ class TileBuilder { public: TileBuilder(std::string world, int x, int y, uint32 mapId); - ~TileBuilder(); + ~TileBuilder(); void CalculateTileBounds(float*& bmin, float*& bmax); uint8* Build(); diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp index edad6d1b6d8..a0977c398c4 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.cpp +++ b/src/tools/mesh_extractor/WorldModelHandler.cpp @@ -193,6 +193,6 @@ void WorldModelHandler::ReadModelPaths() WorldModelHandler::~WorldModelHandler() { - delete _definitions; - delete _paths; + delete _definitions; + delete _paths; } diff --git a/src/tools/mesh_extractor/WorldModelHandler.h b/src/tools/mesh_extractor/WorldModelHandler.h index df5e3764eb5..cccedfa60fb 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.h +++ b/src/tools/mesh_extractor/WorldModelHandler.h @@ -29,7 +29,7 @@ class WorldModelHandler : public ObjectDataHandler { public: WorldModelHandler(ADT* adt); - ~WorldModelHandler(); + ~WorldModelHandler(); std::vector Vertices; std::vector > Triangles; From 4c3266c7af5f5840a212d46bf068a793150b34fc Mon Sep 17 00:00:00 2001 From: Nay Date: Sun, 30 Sep 2012 15:52:10 +0100 Subject: [PATCH 083/204] Tools&Core: Whitespace cleanup No one likes whitespace, right? --- src/server/game/Maps/Map.cpp | 2 +- src/server/game/Movement/MotionMaster.cpp | 2 +- .../TargetedMovementGenerator.cpp | 2 +- src/server/game/Movement/PathGenerator.cpp | 4 ++-- src/server/scripts/Commands/cs_mmaps.cpp | 4 ++-- src/tools/map_extractor/System.cpp | 2 +- src/tools/mesh_extractor/ADT.cpp | 2 +- src/tools/mesh_extractor/ADT.h | 2 +- src/tools/mesh_extractor/Cache.h | 10 +++++----- src/tools/mesh_extractor/ChunkedData.cpp | 4 ++-- src/tools/mesh_extractor/Geometry.cpp | 4 ++-- src/tools/mesh_extractor/Geometry.h | 2 +- src/tools/mesh_extractor/LiquidHandler.cpp | 2 +- src/tools/mesh_extractor/MPQ.cpp | 10 +++++----- src/tools/mesh_extractor/MPQManager.cpp | 2 +- src/tools/mesh_extractor/MPQManager.h | 2 +- src/tools/mesh_extractor/MapChunk.h | 2 +- src/tools/mesh_extractor/MeshExtractor.cpp | 2 +- src/tools/mesh_extractor/ObjectDataHandler.h | 2 +- src/tools/mesh_extractor/TileBuilder.cpp | 14 +++++++------- src/tools/mesh_extractor/Utils.cpp | 2 +- src/tools/mesh_extractor/Utils.h | 4 ++-- src/tools/mesh_extractor/WDT.cpp | 2 +- src/tools/mesh_extractor/WorldModelHandler.cpp | 2 +- src/tools/mmaps_generator/MapBuilder.cpp | 10 +++++----- src/tools/mmaps_generator/TerrainBuilder.cpp | 2 +- 26 files changed, 49 insertions(+), 49 deletions(-) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index ae192f16080..25ffc1d19f2 100755 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -123,7 +123,7 @@ bool Map::ExistVMap(uint32 mapid, int gx, int gy) void Map::LoadMMap(int gx, int gy) { bool mmapLoadResult = MMAP::MMapFactory::createOrGetMMapManager()->loadMap((sWorld->GetDataPath() + "mmaps").c_str(), GetId(), gx, gy); - + if (mmapLoadResult) sLog->outInfo(LOG_FILTER_MAPS, "MMAP loaded name:%s, id:%d, x:%d, y:%d (mmap rep.: x:%d, y:%d)", GetMapName(), GetId(), gx, gy, gx, gy); else diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 34be779a8b7..386a95fa838 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -428,7 +428,7 @@ void MotionMaster::MoveCharge(PathGenerator path, float speed, uint32 id) Vector3 dest = path.GetActualEndPosition(); MoveCharge(dest.x, dest.y, dest.z); - + Movement::MoveSplineInit init(_owner); init.MovebyPath(path.GetPath()); init.SetVelocity(speed); diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index c275c33032f..7a6611ed2ca 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -124,7 +124,7 @@ bool TargetedMovementGeneratorMedium::Update(T* owner, const uint32& time_d D::_clearUnitStateMove(owner); return true; } - + // prevent movement while casting spells with cast time or channel time if (owner->HasUnitState(UNIT_STATE_CASTING)) { diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index 6e765b1ee27..3495c4d1218 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -469,7 +469,7 @@ void PathGenerator::BuildPointPath(const float *startPoint, const float *endPoin _pathPoints[i] = Vector3(pathPoints[i*VERTEX_SIZE+2], pathPoints[i*VERTEX_SIZE], pathPoints[i*VERTEX_SIZE+1]); NormalizePath(); - + // first point is always our current location - we need the next one SetActualEndPosition(_pathPoints[pointCount-1]); @@ -515,7 +515,7 @@ void PathGenerator::BuildShortcut() _pathPoints[1] = GetActualEndPosition(); NormalizePath(); - + _type = PATHFIND_SHORTCUT; } diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp index be2d52b5925..c3f757614e2 100644 --- a/src/server/scripts/Commands/cs_mmaps.cpp +++ b/src/server/scripts/Commands/cs_mmaps.cpp @@ -152,7 +152,7 @@ public: // navmesh poly -> navmesh tile location dtQueryFilter filter = dtQueryFilter(); - dtPolyRef polyRef = INVALID_POLYREF; + dtPolyRef polyRef = INVALID_POLYREF; navmeshquery->findNearestPoly(location, extents, &filter, &polyRef, NULL); if (polyRef == INVALID_POLYREF) @@ -252,7 +252,7 @@ public: CellCoord pair(Trinity::ComputeCellCoord(object->GetPositionX(), object->GetPositionY()) ); Cell cell(pair); cell.SetNoCreate(); - + std::list creatureList; Trinity::AnyUnitInObjectRangeCheck go_check(object, radius); diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index 552bab30d50..2e117934679 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -852,7 +852,7 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, hasHoles = true; } } - + if (hasHoles) map.holesSize = sizeof(holes); else diff --git a/src/tools/mesh_extractor/ADT.cpp b/src/tools/mesh_extractor/ADT.cpp index 1684d0636f4..a6c080cf0b0 100644 --- a/src/tools/mesh_extractor/ADT.cpp +++ b/src/tools/mesh_extractor/ADT.cpp @@ -18,7 +18,7 @@ ADT::~ADT() { delete ObjectData; delete Data; - + for (std::vector::iterator itr = MapChunks.begin(); itr != MapChunks.end(); ++itr) delete *itr; diff --git a/src/tools/mesh_extractor/ADT.h b/src/tools/mesh_extractor/ADT.h index 096f491eed8..133596eb024 100644 --- a/src/tools/mesh_extractor/ADT.h +++ b/src/tools/mesh_extractor/ADT.h @@ -12,7 +12,7 @@ class ADT public: ADT(std::string file); ~ADT(); - + void Read(); ChunkedData* ObjectData; diff --git a/src/tools/mesh_extractor/Cache.h b/src/tools/mesh_extractor/Cache.h index 36bf4a7a693..90e2c138376 100644 --- a/src/tools/mesh_extractor/Cache.h +++ b/src/tools/mesh_extractor/Cache.h @@ -15,7 +15,7 @@ public: GenericCache() {} static const int32 FlushLimit = 1000; - + void Insert(K key, T* val) { ACE_GUARD(ACE_Thread_Mutex, g, mutex); @@ -35,10 +35,10 @@ public: } void Clear() - { - for (typename std::map::iterator itr = _items.begin(); itr != _items.end(); ++itr) + { + for (typename std::map::iterator itr = _items.begin(); itr != _items.end(); ++itr) delete itr->second; - _items.clear(); + _items.clear(); } private: std::map _items; @@ -54,7 +54,7 @@ public: void Clear() { - + } }; diff --git a/src/tools/mesh_extractor/ChunkedData.cpp b/src/tools/mesh_extractor/ChunkedData.cpp index 725a6f45637..4431993e3d1 100644 --- a/src/tools/mesh_extractor/ChunkedData.cpp +++ b/src/tools/mesh_extractor/ChunkedData.cpp @@ -4,7 +4,7 @@ #include -ChunkedData::ChunkedData( FILE* stream, uint32 maxLength, uint32 chunksHint /*= 300*/ ) : +ChunkedData::ChunkedData( FILE* stream, uint32 maxLength, uint32 chunksHint /*= 300*/ ) : Stream(stream) { if (!Stream) @@ -66,7 +66,7 @@ ChunkedData::~ChunkedData() { for (std::vector::iterator itr = Chunks.begin(); itr != Chunks.end(); ++itr) delete *itr; - + Chunks.clear(); if (Stream) fclose(Stream); diff --git a/src/tools/mesh_extractor/Geometry.cpp b/src/tools/mesh_extractor/Geometry.cpp index 2fbe99e3211..2fc470e8e9f 100644 --- a/src/tools/mesh_extractor/Geometry.cpp +++ b/src/tools/mesh_extractor/Geometry.cpp @@ -63,7 +63,7 @@ void Geometry::AddData( std::vector& verts, std::vector::iterator itr = verts.begin(); itr != verts.end(); ++itr) Vertices.push_back(Transform ? Utils::ToRecast(*itr) : *itr); - + for (std::vector >::iterator itr = tris.begin(); itr != tris.end(); ++itr) Triangles.push_back(Triangle(itr->Type, itr->V0 + vertOffset, itr->V1 + vertOffset, itr->V2 + vertOffset)); } @@ -116,7 +116,7 @@ void Geometry::AddAdt( ADT* adt ) if (!adt->_DoodadHandler->Triangles.empty()) AddData(adt->_DoodadHandler->Vertices, adt->_DoodadHandler->Triangles); - + if (!adt->_WorldModelHandler->Triangles.empty()) AddData(adt->_WorldModelHandler->Vertices, adt->_WorldModelHandler->Triangles); } diff --git a/src/tools/mesh_extractor/Geometry.h b/src/tools/mesh_extractor/Geometry.h index 9593c98044e..e445234dd12 100644 --- a/src/tools/mesh_extractor/Geometry.h +++ b/src/tools/mesh_extractor/Geometry.h @@ -9,7 +9,7 @@ class Geometry { public: Geometry(); - + void CalculateBoundingBox(float*& min, float*& max); void CalculateMinMaxHeight(float& min, float& max); void AddData(std::vector& verts, std::vector >& tris); diff --git a/src/tools/mesh_extractor/LiquidHandler.cpp b/src/tools/mesh_extractor/LiquidHandler.cpp index 9a40e08b73a..5b998d75db9 100644 --- a/src/tools/mesh_extractor/LiquidHandler.cpp +++ b/src/tools/mesh_extractor/LiquidHandler.cpp @@ -20,7 +20,7 @@ void LiquidHandler::HandleNewLiquid() MCNKData.reserve(256); for (int i = 0; i < 256; i++) header[i] = H2OHeader::Read(stream); - + for (int i = 0; i < 256; i++) { H2OHeader h = header[i]; diff --git a/src/tools/mesh_extractor/MPQ.cpp b/src/tools/mesh_extractor/MPQ.cpp index fbae56cd7a0..699b0a5014c 100644 --- a/src/tools/mesh_extractor/MPQ.cpp +++ b/src/tools/mesh_extractor/MPQ.cpp @@ -7,9 +7,9 @@ MPQArchive::MPQArchive(const char* filename) { int result = libmpq__archive_open(&mpq_a, filename, -1); printf("Opening %s\n", filename); - if (result) + if (result) { - switch (result) + switch (result) { case LIBMPQ_ERROR_OPEN : printf("Error opening archive '%s': Does file really exist?\n", filename); @@ -46,7 +46,7 @@ eof(false), buffer(0), pointer(0), size(0) mpq_archive* mpq_a = (*i)->mpq_a; uint32_t filenum; - if(libmpq__file_number(mpq_a, filename, &filenum)) + if(libmpq__file_number(mpq_a, filename, &filenum)) continue; libmpq__off_t transferred; libmpq__file_unpacked_size(mpq_a, filenum, &size); @@ -72,7 +72,7 @@ eof(false), buffer(0), pointer(0), size(0) size_t MPQFile::Read(void* dest, size_t bytes) { - if (eof) + if (eof) return 0; size_t rpos = pointer + bytes; @@ -102,7 +102,7 @@ void MPQFile::seekRelative(int offset) void MPQFile::close() { - if (buffer) + if (buffer) delete[] buffer; buffer = 0; eof = true; diff --git a/src/tools/mesh_extractor/MPQManager.cpp b/src/tools/mesh_extractor/MPQManager.cpp index 5ea6198e76d..608eef1547a 100644 --- a/src/tools/mesh_extractor/MPQManager.cpp +++ b/src/tools/mesh_extractor/MPQManager.cpp @@ -5,7 +5,7 @@ #include "ace/Synch.h" -char* MPQManager::Files[] = { +char* MPQManager::Files[] = { "common.MPQ", "common-2.MPQ", "expansion.MPQ", diff --git a/src/tools/mesh_extractor/MPQManager.h b/src/tools/mesh_extractor/MPQManager.h index 634c70cedeb..0050dc5218a 100644 --- a/src/tools/mesh_extractor/MPQManager.h +++ b/src/tools/mesh_extractor/MPQManager.h @@ -10,7 +10,7 @@ class MPQManager public: MPQManager() {} ~MPQManager() {} - + void Initialize(); FILE* GetFile(std::string path); DBC* GetDBC(std::string name); diff --git a/src/tools/mesh_extractor/MapChunk.h b/src/tools/mesh_extractor/MapChunk.h index 61dcabac9b0..e7d835ae0e3 100644 --- a/src/tools/mesh_extractor/MapChunk.h +++ b/src/tools/mesh_extractor/MapChunk.h @@ -10,7 +10,7 @@ class MapChunk { public: MapChunk(ADT* _adt, Chunk* chunk); - + void GenerateTriangles(); void GenerateVertices(FILE* stream); static bool HasHole(uint32 map, int x, int y); diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index 3dde9ac36f5..423095b22ca 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -56,7 +56,7 @@ bool HandleArgs(int argc, char** argv, uint32& threads, std::set& mapLis return false; std::string maps = std::string(param); Tokens tokens(maps, ','); - + for (Tokens::iterator itr = tokens.begin(); itr != tokens.end(); ++itr) mapList.insert(atoi(*itr)); diff --git a/src/tools/mesh_extractor/ObjectDataHandler.h b/src/tools/mesh_extractor/ObjectDataHandler.h index 834bf66bcfb..75b4e45700c 100644 --- a/src/tools/mesh_extractor/ObjectDataHandler.h +++ b/src/tools/mesh_extractor/ObjectDataHandler.h @@ -7,7 +7,7 @@ class ObjectDataHandler { public: ObjectDataHandler(ADT* _adt) : Source(_adt) {} - + void ProcessMapChunk(MapChunk* chunk); virtual void ProcessInternal(ChunkedData* data) = 0; ADT* Source; diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index e3694541be8..0c775b9b8c9 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -15,7 +15,7 @@ TileBuilder::TileBuilder(std::string world, int x, int y, uint32 mapId) : _Geome { // Cell Size = TileSize / TileVoxelSize // 1800 = TileVoxelSize - Config.cs = Constants::TileSize / 1800; + Config.cs = Constants::TileSize / 1800; // Cell Height Config.ch = 0.3f; // Min Region Area = 6^2 @@ -72,7 +72,7 @@ uint8* TileBuilder::Build() // don't load main tile again if (tx == X && ty == Y) continue; - + ADT* _adt = new ADT(Utils::GetAdtPath(World, tx, ty)); // If this condition is met, it means that this wdt does not contain the ADT if (!_adt->Data->Stream) @@ -104,7 +104,7 @@ uint8* TileBuilder::Build() rcCreateHeightfield(Context, *hf, width, width, bbMin, bbMax, Config.cs, Config.ch); rcClearUnwalkableTriangles(Context, Config.walkableSlopeAngle, vertices, numVerts, triangles, numTris, areas); rcRasterizeTriangles(Context, vertices, numVerts, triangles, areas, numTris, *hf, Config.walkableClimb); - + printf("[%02i,%02i] Triangles rasterized!\n", X, Y); // Once all geometry is rasterized, we do initial pass of filtering to @@ -113,7 +113,7 @@ uint8* TileBuilder::Build() rcFilterLowHangingWalkableObstacles(Context, Config.walkableClimb, *hf); rcFilterLedgeSpans(Context, Config.walkableHeight, Config.walkableClimb, *hf); rcFilterWalkableLowHeightSpans(Context, Config.walkableHeight, *hf); - + printf("[%02i,%02i] Filtering done!\n", X, Y); // Compact the heightfield so that it is faster to handle from now on. @@ -132,13 +132,13 @@ uint8* TileBuilder::Build() rcBuildDistanceField(Context, *chf); // Partition the walkable surface into simple regions without holes. rcBuildRegions(Context, *chf, Config.borderSize, Config.minRegionArea, Config.mergeRegionArea); - + printf("[%02i,%02i] Regions built!\n", X, Y); // Create contours. rcContourSet* cset = rcAllocContourSet(); rcBuildContours(Context, *chf, Config.maxSimplificationError, Config.maxEdgeLen, *cset); - + // Build polygon navmesh from the contours. rcPolyMesh* pmesh = rcAllocPolyMesh(); rcBuildPolyMesh(Context, *cset, Config.maxVertsPerPoly, *pmesh); @@ -217,7 +217,7 @@ uint8* TileBuilder::Build() uint8* navData; printf("[%02i,%02i] Creating the navmesh!\n", X, Y); bool result = dtCreateNavMeshData(¶ms, &navData, &navDataSize); - + // Free some memory rcFreePolyMesh(pmesh); rcFreePolyMeshDetail(dmesh); diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp index 2f07bd20080..3db387bc81a 100644 --- a/src/tools/mesh_extractor/Utils.cpp +++ b/src/tools/mesh_extractor/Utils.cpp @@ -133,7 +133,7 @@ Vector3 Utils::VectorTransform( Vector3 vec, G3D::Matrix4 matrix ) std::string Utils::GetPathBase( std::string path ) { - int lastIndex = path.find_last_of("."); + int lastIndex = path.find_last_of("."); if (lastIndex != std::string::npos) return path.substr(0, lastIndex); return path; diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index c247169df73..c9d2746b7d8 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -551,8 +551,8 @@ public: static G3D::Matrix4 GetTransformation(IDefinition def); /// They say its better to declare template functions in the header files. template - static std::string ToString(T val) - { + static std::string ToString(T val) + { std::stringstream ss; ss << val; return ss.str(); diff --git a/src/tools/mesh_extractor/WDT.cpp b/src/tools/mesh_extractor/WDT.cpp index c06d8ac9677..f0c3091c04e 100644 --- a/src/tools/mesh_extractor/WDT.cpp +++ b/src/tools/mesh_extractor/WDT.cpp @@ -17,7 +17,7 @@ void WDT::ReadGlobalModel() Chunk* defChunk = Data->GetChunkByName("MODF"); if (!fileChunk || !defChunk) return; - + IsGlobalModel = true; ModelDefinition = WorldModelDefinition::Read(defChunk->GetStream()); ModelFile = Utils::ReadString(fileChunk->GetStream()); diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp index a0977c398c4..b98a7aae826 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.cpp +++ b/src/tools/mesh_extractor/WorldModelHandler.cpp @@ -103,7 +103,7 @@ void WorldModelHandler::InsertModelGeometry( std::vector& verts, std::v break; instances.push_back(root->DoodadInstances[i]); } - + for (std::vector::iterator instance = instances.begin(); instance != instances.end(); ++instance) { Model* model = Cache->ModelCache.Get(instance->File); diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 69ffad94eb7..754bced903c 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -161,7 +161,7 @@ namespace MMAP void MapBuilder::buildAllMaps(int threads) { std::vector _threads; - + for (int i = 0; i < threads; ++i) _threads.push_back(new BuilderThread(this)); @@ -241,7 +241,7 @@ namespace MMAP minX = 32 - bmax[0] / GRID_SIZE; minY = 32 - bmax[2] / GRID_SIZE; } - + void MapBuilder::buildMeshFromFile(char* name) { FILE* file = fopen(name, "rb"); @@ -253,7 +253,7 @@ namespace MMAP fread(&mapId, sizeof(int), 1, file); fread(&tileX, sizeof(int), 1, file); fread(&tileY, sizeof(int), 1, file); - + dtNavMesh* navMesh = NULL; buildNavMesh(mapId, navMesh); if (!navMesh) @@ -270,7 +270,7 @@ namespace MMAP float* verts = new float[verticesCount]; int* inds = new int[indicesCount]; - + fread(verts, sizeof(float), verticesCount, file); fread(inds, sizeof(int), indicesCount, file); @@ -648,7 +648,7 @@ namespace MMAP tile.chf = NULL; rcFreeContourSet(tile.cset); tile.cset = NULL; - + if (tile.pmesh) { pmmerge[nmerge] = tile.pmesh; diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index 7ee4dc7f46c..0159219c110 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -779,7 +779,7 @@ namespace MMAP continue; std::pair val; val.first = t[i]; - + index = val.first; val.second = count; From fa57ecddac2409307375a01c4214080c3ca1d44a Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 30 Sep 2012 15:47:39 -0500 Subject: [PATCH 084/204] Tools/MeshExtractor: * Added the option to output debug information on ADTs. * Tweaked rcConfig options and fixed some mistakes about it. * Generate 64 tiles per ADT, this should give us a more accurate mesh on large maps. * Speedup compilation time by moving function bodies from Utils.h to Utils.cpp --- src/tools/mesh_extractor/ADT.cpp | 1 - src/tools/mesh_extractor/ContinentBuilder.cpp | 17 +- src/tools/mesh_extractor/ContinentBuilder.h | 2 +- src/tools/mesh_extractor/MeshExtractor.cpp | 23 +- src/tools/mesh_extractor/TileBuilder.cpp | 46 ++-- src/tools/mesh_extractor/TileBuilder.h | 2 +- src/tools/mesh_extractor/Utils.cpp | 250 ++++++++++++++++++ src/tools/mesh_extractor/Utils.h | 250 +----------------- 8 files changed, 319 insertions(+), 272 deletions(-) diff --git a/src/tools/mesh_extractor/ADT.cpp b/src/tools/mesh_extractor/ADT.cpp index a6c080cf0b0..8d7dce9ae11 100644 --- a/src/tools/mesh_extractor/ADT.cpp +++ b/src/tools/mesh_extractor/ADT.cpp @@ -2,7 +2,6 @@ #include "DoodadHandler.h" #include "LiquidHandler.h" #include "WorldModelHandler.h" -#include "Cache.h" ADT::ADT( std::string file ) : ObjectData(NULL), Data(NULL), _DoodadHandler(NULL), _WorldModelHandler(NULL), _LiquidHandler(NULL), HasObjectData(false) { diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp index cdfe0ca050a..984f6170357 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.cpp +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -7,13 +7,14 @@ #include "ace/Task.h" #include "Recast.h" -class BuilderThread : public ACE_Task +class BuilderThread : public ACE_Task_Base { private: int X, Y, MapId; std::string Continent; + bool debug; public: - BuilderThread() : Free(true) {} + BuilderThread(bool deb) : Free(true), debug(deb) {} void SetData(int x, int y, int map, std::string cont) { X = x; Y = y; MapId = map; Continent = cont; } int svc() @@ -22,23 +23,23 @@ public: printf("[%02i,%02i] Building tile\n", X, Y); TileBuilder builder(Continent, X, Y, MapId); char buff[100]; - sprintf(buff, "mmaps/%03u%02u%02u.mmtile", MapId, X, Y); + sprintf(buff, "mmaps/%03u%02u%02u.mmtile", MapId, Y, X); FILE* f = fopen(buff, "r"); if (f) // Check if file already exists. { printf("[%02i,%02i] Tile skipped, file already exists\n", X, Y); fclose(f); Free = true; - return 1; + return 0; } - uint8* nav = builder.Build(); + uint8* nav = builder.Build(debug); if (nav) { f = fopen(buff, "wb"); if (!f) { printf("Could not create file %s. Check that you have write permissions to the destination folder and try again\n", buff); - return -1; + return 0; } MmapTileHeader header; header.size = builder.DataSize; @@ -73,7 +74,7 @@ void getTileBounds(uint32 tileX, uint32 tileY, float* verts, int vertCount, floa bmin[2] = bmax[2] - Constants::TileSize; } -void ContinentBuilder::Build() +void ContinentBuilder::Build(bool debug) { char buff[50]; sprintf(buff, "mmaps/%03u.mmap", MapId); @@ -107,7 +108,7 @@ void ContinentBuilder::Build() fclose(mmap); std::vector Threads; for (uint32 i = 0; i < NumberOfThreads; ++i) - Threads.push_back(new BuilderThread()); + Threads.push_back(new BuilderThread(debug)); printf("Map %s ( %i ) has %i tiles. Building them with %i threads\n", Continent.c_str(), MapId, TileMap->TileTable.size(), NumberOfThreads); for (std::vector::iterator itr = TileMap->TileTable.begin(); itr != TileMap->TileTable.end(); ++itr) { diff --git a/src/tools/mesh_extractor/ContinentBuilder.h b/src/tools/mesh_extractor/ContinentBuilder.h index d3da984595d..c923498fc5e 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.h +++ b/src/tools/mesh_extractor/ContinentBuilder.h @@ -8,7 +8,7 @@ class ContinentBuilder { public: ContinentBuilder(std::string continent, uint32 mapId, WDT* wdt, uint32 tn) : MapId(mapId), Continent(continent), TileMap(wdt), NumberOfThreads(tn) {} - void Build(); + void Build(bool debug); private: std::string Continent; WDT* TileMap; diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index 423095b22ca..9d88fcdcdfc 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -14,7 +14,7 @@ LoginDatabaseWorkerPool LoginDatabase; MPQManager* MPQHandler; CacheClass* Cache; -void ExtractAllMaps(std::set& mapIds, uint32 threads) +void ExtractAllMaps(std::set& mapIds, uint32 threads, bool debug) { DBC* dbc = MPQHandler->GetDBC("Map"); for (std::vector::iterator itr = dbc->Records.begin(); itr != dbc->Records.end(); ++itr) @@ -31,11 +31,11 @@ void ExtractAllMaps(std::set& mapIds, uint32 threads) continue; printf("Building %s MapId %u\n", name.c_str(), mapId); ContinentBuilder builder(name, mapId, &wdt, threads); - builder.Build(); + builder.Build(debug); } } -bool HandleArgs(int argc, char** argv, uint32& threads, std::set& mapList) +bool HandleArgs(int argc, char** argv, uint32& threads, std::set& mapList, bool& debugOutput) { char* param = NULL; for (int i = 1; i < argc; ++i) @@ -62,6 +62,14 @@ bool HandleArgs(int argc, char** argv, uint32& threads, std::set& mapLis printf("Extracting only provided list of maps (%u).\n", mapList.size()); } + if (strcmp(argv[i], "--debug") == 0) + { + param = argv[++i]; + if (!param) + return false; + debugOutput = atoi(param); + printf("Output will contain debug information (.obj files)\n"); + } } return true; } @@ -71,6 +79,7 @@ void PrintUsage() printf("MeshExtractor help.\n"); printf("* Use \"--threads \" to specify threads, default to 4\n"); printf("* Use \"--maps a,b,c,d,e\" to extract only the maps specified ( do not use spaces )\n"); + printf("* Use \"--debug 1\" to generate debug information of the tiles.\n"); } int main(int argc, char* argv[]) @@ -81,14 +90,14 @@ int main(int argc, char* argv[]) MPQHandler->Initialize(); uint32 threads = 4; std::set mapIds; + bool debug = false; - if (!HandleArgs(argc, argv, threads, mapIds)) + if (!HandleArgs(argc, argv, threads, mapIds, debug)) { PrintUsage(); return -1; } - ExtractAllMaps(mapIds, threads); + ExtractAllMaps(mapIds, threads, debug); return 0; -} - +} \ No newline at end of file diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 0c775b9b8c9..54b9e4865cd 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -17,20 +17,22 @@ TileBuilder::TileBuilder(std::string world, int x, int y, uint32 mapId) : _Geome // 1800 = TileVoxelSize Config.cs = Constants::TileSize / 1800; // Cell Height - Config.ch = 0.3f; - // Min Region Area = 6^2 - Config.minRegionArea = 36; - // Merge Region Area = 12^2 - Config.mergeRegionArea = 144; + Config.ch = 0.4f; + // Min Region Area = 20^2 + Config.minRegionArea = 20*20; + // Merge Region Area = 40^2 + Config.mergeRegionArea = 40*40; + Config.tileSize = Constants::TileSize / 4; Config.walkableSlopeAngle = 50.0f; Config.detailSampleDist = 3.0f; Config.detailSampleMaxError = 1.25f; Config.walkableClimb = 1.0f / Config.ch; - Config.walkableHeight = 2.1f / Config.ch; - Config.walkableRadius = 0.6f / Config.cs; + Config.walkableHeight = 1.652778f / Config.ch; + Config.walkableRadius = 0.2951389f / Config.cs; Config.maxEdgeLen = Config.walkableRadius * 8; - Config.borderSize = Config.walkableRadius + 8; - Config.width = 1800; + Config.borderSize = Config.walkableRadius + 4; + Config.width = 1800 + Config.borderSize * 2; + Config.height = 1800 + Config.borderSize * 2; Config.maxVertsPerPoly = 6; Config.maxSimplificationError = 1.3f; @@ -47,7 +49,7 @@ void TileBuilder::CalculateTileBounds( float*& bmin, float*& bmax ) bmax[2] = Constants::Origin[2] + (Constants::TileSize * (Y + 1)); } -uint8* TileBuilder::Build() +uint8* TileBuilder::Build(bool dbg) { _Geometry = new Geometry(); _Geometry->Transform = true; @@ -65,9 +67,9 @@ uint8* TileBuilder::Build() _Geometry->CalculateMinMaxHeight(bbMin[1], bbMax[1]); // again, we load everything - wasteful but who cares - for (int ty = Y - 1; ty <= Y + 1; ty++) + for (int ty = Y - 4; ty <= Y + 4; ty++) { - for (int tx = X - 1; tx <= X + 1; tx++) + for (int tx = X - 4; tx <= X + 4; tx++) { // don't load main tile again if (tx == X && ty == Y) @@ -85,6 +87,19 @@ uint8* TileBuilder::Build() delete _adt; } } + + if (dbg) + { + char buff[100]; + sprintf(buff, "mmaps/%s_%02u%02u.obj", World.c_str(), Y, X); + FILE* debug = fopen(buff, "wb"); + for (int i = 0; i < _Geometry->Vertices.size(); ++i) + fprintf(debug, "v %f %f %f\n", _Geometry->Vertices[i].x, _Geometry->Vertices[i].y, _Geometry->Vertices[i].z); + for (int i = 0; i < _Geometry->Triangles.size(); ++i) + fprintf(debug, "f %i %i %i\n", _Geometry->Triangles[i].V0 + 1, _Geometry->Triangles[i].V1 + 1, _Geometry->Triangles[i].V2 + 1); + fclose(debug); + } + uint32 numVerts = _Geometry->Vertices.size(); uint32 numTris = _Geometry->Triangles.size(); float* vertices; @@ -100,8 +115,7 @@ uint8* TileBuilder::Build() bbMax[0] += Config.borderSize * Config.cs; rcHeightfield* hf = rcAllocHeightfield(); - int width = Config.width + (Config.borderSize * 2); - rcCreateHeightfield(Context, *hf, width, width, bbMin, bbMax, Config.cs, Config.ch); + rcCreateHeightfield(Context, *hf, Config.width, Config.height, bbMin, bbMax, Config.cs, Config.ch); rcClearUnwalkableTriangles(Context, Config.walkableSlopeAngle, vertices, numVerts, triangles, numTris, areas); rcRasterizeTriangles(Context, vertices, numVerts, triangles, areas, numTris, *hf, Config.walkableClimb); @@ -208,14 +222,14 @@ uint8* TileBuilder::Build() params.walkableRadius = Config.walkableRadius; params.tileX = X; params.tileY = Y; - params.tileSize = Config.width; + params.tileSize = 1800; // Offmesh-connection settings params.offMeshConCount = 0; // none for now int navDataSize; uint8* navData; - printf("[%02i,%02i] Creating the navmesh!\n", X, Y); + printf("[%02i,%02i] Creating the navmesh with %i vertices, %i polys, %i triangles!\n", X, Y, pmesh->nverts, pmesh->npolys, dmesh->ntris); bool result = dtCreateNavMeshData(¶ms, &navData, &navDataSize); // Free some memory diff --git a/src/tools/mesh_extractor/TileBuilder.h b/src/tools/mesh_extractor/TileBuilder.h index 2ec45811676..72e275c75b7 100644 --- a/src/tools/mesh_extractor/TileBuilder.h +++ b/src/tools/mesh_extractor/TileBuilder.h @@ -14,7 +14,7 @@ public: ~TileBuilder(); void CalculateTileBounds(float*& bmin, float*& bmax); - uint8* Build(); + uint8* Build(bool dbg); std::string World; int X; diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp index 3db387bc81a..6389e0aa66e 100644 --- a/src/tools/mesh_extractor/Utils.cpp +++ b/src/tools/mesh_extractor/Utils.cpp @@ -180,3 +180,253 @@ G3D::Matrix4 Utils::GetWmoDoodadTransformation( DoodadInstance inst, WorldModelD return scale * rotation * quatRotation ** translation * rootTransformation; } + +void MapChunkHeader::Read(FILE* stream) +{ + fread(&Flags, sizeof(uint32), 1, stream); + fread(&IndexX, sizeof(uint32), 1, stream); + fread(&IndexY, sizeof(uint32), 1, stream); + fread(&Layers, sizeof(uint32), 1, stream); + fread(&DoodadRefs, sizeof(uint32), 1, stream); + fread(&OffsetMCVT, sizeof(uint32), 1, stream); + fread(&OffsetMCNR, sizeof(uint32), 1, stream); + fread(&OffsetMCLY, sizeof(uint32), 1, stream); + fread(&OffsetMCRF, sizeof(uint32), 1, stream); + fread(&OffsetMCAL, sizeof(uint32), 1, stream); + fread(&SizeMCAL, sizeof(uint32), 1, stream); + fread(&OffsetMCSH, sizeof(uint32), 1, stream); + fread(&SizeMCSH, sizeof(uint32), 1, stream); + fread(&AreaId, sizeof(uint32), 1, stream); + fread(&MapObjectRefs, sizeof(uint32), 1, stream); + fread(&Holes, sizeof(uint32), 1, stream); + LowQualityTextureMap = new uint32[4]; + fread(LowQualityTextureMap, sizeof(uint32), 4, stream); + fread(&PredTex, sizeof(uint32), 1, stream); + fread(&NumberEffectDoodad, sizeof(uint32), 1, stream); + fread(&OffsetMCSE, sizeof(uint32), 1, stream); + fread(&SoundEmitters, sizeof(uint32), 1, stream); + fread(&OffsetMCLQ, sizeof(uint32), 1, stream); + fread(&SizeMCLQ, sizeof(uint32), 1, stream); + Position = Vector3::Read(stream); + fread(&OffsetMCCV, sizeof(uint32), 1, stream); +} + +void MHDR::Read(FILE* stream) +{ + fread(&Flags, sizeof(uint32), 1, stream); + fread(&OffsetMCIN, sizeof(uint32), 1, stream); + fread(&OffsetMTEX, sizeof(uint32), 1, stream); + fread(&OffsetMMDX, sizeof(uint32), 1, stream); + fread(&OffsetMMID, sizeof(uint32), 1, stream); + fread(&OffsetMWMO, sizeof(uint32), 1, stream); + fread(&OffsetMWID, sizeof(uint32), 1, stream); + fread(&OffsetMDDF, sizeof(uint32), 1, stream); + fread(&OffsetMODF, sizeof(uint32), 1, stream); + fread(&OffsetMFBO, sizeof(uint32), 1, stream); + fread(&OffsetMH2O, sizeof(uint32), 1, stream); + fread(&OffsetMTFX, sizeof(uint32), 1, stream); +} + +void ModelHeader::Read(FILE* stream) +{ + fread(&Magic, sizeof(char), 4, stream); + Magic[4] = '\0'; // null-terminate it. + fread(&Version, sizeof(uint32), 1, stream); + fread(&LengthModelName, sizeof(uint32), 1, stream); + fread(&OffsetName, sizeof(uint32), 1, stream); + fread(&ModelFlags, sizeof(uint32), 1, stream); + fread(&CountGlobalSequences, sizeof(uint32), 1, stream); + fread(&OffsetGlobalSequences, sizeof(uint32), 1, stream); + fread(&CountAnimations, sizeof(uint32), 1, stream); + fread(&OffsetAnimations, sizeof(uint32), 1, stream); + fread(&CountAnimationLookup, sizeof(uint32), 1, stream); + fread(&OffsetAnimationLookup, sizeof(uint32), 1, stream); + fread(&CountBones, sizeof(uint32), 1, stream); + fread(&OffsetBones, sizeof(uint32), 1, stream); + fread(&CountKeyBoneLookup, sizeof(uint32), 1, stream); + fread(&OffsetKeyBoneLookup, sizeof(uint32), 1, stream); + fread(&CountVertices, sizeof(uint32), 1, stream); + fread(&OffsetVertices, sizeof(uint32), 1, stream); + fread(&CountViews, sizeof(uint32), 1, stream); + fread(&CountColors, sizeof(uint32), 1, stream); + fread(&OffsetColors, sizeof(uint32), 1, stream); + fread(&CountTextures, sizeof(uint32), 1, stream); + fread(&OffsetTextures, sizeof(uint32), 1, stream); + fread(&CountTransparency, sizeof(uint32), 1, stream); + fread(&OffsetTransparency, sizeof(uint32), 1, stream); + fread(&CountUvAnimation, sizeof(uint32), 1, stream); + fread(&OffsetUvAnimation, sizeof(uint32), 1, stream); + fread(&CountTexReplace, sizeof(uint32), 1, stream); + fread(&OffsetTexReplace, sizeof(uint32), 1, stream); + fread(&CountRenderFlags, sizeof(uint32), 1, stream); + fread(&OffsetRenderFlags, sizeof(uint32), 1, stream); + fread(&CountBoneLookup, sizeof(uint32), 1, stream); + fread(&OffsetBoneLookup, sizeof(uint32), 1, stream); + fread(&CountTexLookup, sizeof(uint32), 1, stream); + fread(&OffsetTexLookup, sizeof(uint32), 1, stream); + fread(&CountTexUnits, sizeof(uint32), 1, stream); + fread(&OffsetTexUnits, sizeof(uint32), 1, stream); + fread(&CountTransLookup, sizeof(uint32), 1, stream); + fread(&OffsetTransLookup, sizeof(uint32), 1, stream); + fread(&CountUvAnimLookup, sizeof(uint32), 1, stream); + fread(&OffsetUvAnimLookup, sizeof(uint32), 1, stream); + fread(&CountColors, sizeof(uint32), 1, stream); + fread(&OffsetColors, sizeof(uint32), 1, stream); + fread(&CountTextures, sizeof(uint32), 1, stream); + fread(&OffsetTextures, sizeof(uint32), 1, stream); + fread(&CountTransparency, sizeof(uint32), 1, stream); + fread(&OffsetTransparency, sizeof(uint32), 1, stream); + fread(&CountUvAnimation, sizeof(uint32), 1, stream); + fread(&OffsetUvAnimation, sizeof(uint32), 1, stream); + fread(&CountTexReplace, sizeof(uint32), 1, stream); + fread(&OffsetTexReplace, sizeof(uint32), 1, stream); + VertexBox[0] = Vector3::Read(stream); + VertexBox[1] = Vector3::Read(stream); + fread(&VertexRadius, sizeof(float), 1, stream); + BoundingBox[0] = Vector3::Read(stream); + BoundingBox[1] = Vector3::Read(stream); + fread(&BoundingRadius, sizeof(float), 1, stream); + fread(&CountBoundingTriangles, sizeof(uint32), 1, stream); + fread(&OffsetBoundingTriangles, sizeof(uint32), 1, stream); + fread(&CountBoundingVertices, sizeof(uint32), 1, stream); + fread(&OffsetBoundingVertices, sizeof(uint32), 1, stream); + fread(&CountBoundingNormals, sizeof(uint32), 1, stream); + fread(&OffsetBoundingNormals, sizeof(uint32), 1, stream); +} + +WorldModelHeader WorldModelHeader::Read(FILE* stream) +{ + WorldModelHeader ret; + fread(&ret.CountMaterials, sizeof(uint32), 1, stream); + fread(&ret.CountGroups, sizeof(uint32), 1, stream); + fread(&ret.CountPortals, sizeof(uint32), 1, stream); + fread(&ret.CountLights, sizeof(uint32), 1, stream); + fread(&ret.CountModels, sizeof(uint32), 1, stream); + fread(&ret.CountDoodads, sizeof(uint32), 1, stream); + fread(&ret.CountSets, sizeof(uint32), 1, stream); + fread(&ret.AmbientColorUnk, sizeof(uint32), 1, stream); + fread(&ret.WmoId, sizeof(uint32), 1, stream); + ret.BoundingBox[0] = Vector3::Read(stream); + ret.BoundingBox[1] = Vector3::Read(stream); + fread(&ret.LiquidTypeRelated, sizeof(uint32), 1, stream); + return ret; +} + +DoodadInstance DoodadInstance::Read(FILE* stream) +{ + DoodadInstance ret; + fread(&ret.FileOffset, sizeof(uint32), 1, stream); + ret.Position = Vector3::Read(stream); + fread(&ret.QuatW, sizeof(float), 1, stream); + fread(&ret.QuatX, sizeof(float), 1, stream); + fread(&ret.QuatY, sizeof(float), 1, stream); + fread(&ret.QuatZ, sizeof(float), 1, stream); + fread(&ret.Scale, sizeof(float), 1, stream); + fread(&ret.LightColor, sizeof(uint32), 1, stream); + return ret; +} + +DoodadSet DoodadSet::Read(FILE* stream) +{ + DoodadSet ret; + char name[21]; + fread(&name, sizeof(char), 20, stream); + name[20] = '\0'; + ret.Name = name; + fread(&ret.FirstInstanceIndex, sizeof(uint32), 1, stream); + fread(&ret.CountInstances, sizeof(uint32), 1, stream); + fread(&ret.UnknownZero, sizeof(uint32), 1, stream); + return ret; +} + +LiquidHeader LiquidHeader::Read(FILE* stream) +{ + LiquidHeader ret; + fread(&ret.CountXVertices, sizeof(uint32), 1, stream); + fread(&ret.CountYVertices, sizeof(uint32), 1, stream); + fread(&ret.Width, sizeof(uint32), 1, stream); + fread(&ret.Height, sizeof(uint32), 1, stream); + ret.BaseLocation = Vector3::Read(stream); + fread(&ret.MaterialId, sizeof(uint16), 1, stream); + return ret; +} + +LiquidData LiquidData::Read(FILE* stream, LiquidHeader& header) +{ + LiquidData ret; + ret.HeightMap = new float*[header.CountXVertices]; + for (uint32 i = 0; i < header.CountXVertices; ++i) + ret.HeightMap[i] = new float[header.CountYVertices]; + + ret.RenderFlags = new uint8*[header.Width]; + for (uint32 i = 0; i < header.Width; ++i) + ret.RenderFlags[i] = new uint8[header.Height]; + + for (uint32 y = 0; y < header.CountYVertices; y++) + { + for (uint32 x = 0; x < header.CountXVertices; x++) + { + uint32 discard; + fread(&discard, sizeof(uint32), 1, stream); + float tmp; + fread(&tmp, sizeof(float), 1, stream); + ret.HeightMap[x][y] = tmp; + } + } + + for (uint32 y = 0; y < header.Height; y++) + { + for (uint32 x = 0; x < header.Width; x++) + { + uint8 tmp; + fread(&tmp, sizeof(uint8), 1, stream); + ret.RenderFlags[x][y] = tmp; + } + } + + return ret; +} + +H2ORenderMask H2ORenderMask::Read(FILE* stream) +{ + H2ORenderMask ret; + fread(&ret.Mask, sizeof(uint8), 8, stream); + return ret; +} + +bool MCNKLiquidData::IsWater(int x, int y, float height) +{ + if (!Heights) + return false; + if (!Mask.ShouldRender(x, y)) + return false; + float diff = Heights[x][y] - height; + if (diff > Constants::MaxStandableHeight) + return true; + return false; +} + +H2OHeader H2OHeader::Read(FILE* stream) +{ + H2OHeader ret; + fread(&ret.OffsetInformation, sizeof(uint32), 1, stream); + fread(&ret.LayerCount, sizeof(uint32), 1, stream); + fread(&ret.OffsetRender, sizeof(uint32), 1, stream); + return ret; +} + +H2OInformation H2OInformation::Read(FILE* stream) +{ + H2OInformation ret; + fread(&ret.LiquidType, sizeof(uint16), 1, stream); + fread(&ret.Flags, sizeof(uint16), 1, stream); + fread(&ret.HeightLevel1, sizeof(float), 1, stream); + fread(&ret.HeightLevel2, sizeof(float), 1, stream); + fread(&ret.OffsetX, sizeof(uint8), 1, stream); + fread(&ret.OffsetY, sizeof(uint8), 1, stream); + fread(&ret.Width, sizeof(uint8), 1, stream); + fread(&ret.Height, sizeof(uint8), 1, stream); + fread(&ret.OffsetMask2, sizeof(uint32), 1, stream); + fread(&ret.OffsetHeightmap, sizeof(uint32), 1, stream); + return ret; +} diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index c9d2746b7d8..a45c3659240 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -77,35 +77,7 @@ public: Vector3 Position; uint32 OffsetMCCV; - void Read(FILE* stream) - { - fread(&Flags, sizeof(uint32), 1, stream); - fread(&IndexX, sizeof(uint32), 1, stream); - fread(&IndexY, sizeof(uint32), 1, stream); - fread(&Layers, sizeof(uint32), 1, stream); - fread(&DoodadRefs, sizeof(uint32), 1, stream); - fread(&OffsetMCVT, sizeof(uint32), 1, stream); - fread(&OffsetMCNR, sizeof(uint32), 1, stream); - fread(&OffsetMCLY, sizeof(uint32), 1, stream); - fread(&OffsetMCRF, sizeof(uint32), 1, stream); - fread(&OffsetMCAL, sizeof(uint32), 1, stream); - fread(&SizeMCAL, sizeof(uint32), 1, stream); - fread(&OffsetMCSH, sizeof(uint32), 1, stream); - fread(&SizeMCSH, sizeof(uint32), 1, stream); - fread(&AreaId, sizeof(uint32), 1, stream); - fread(&MapObjectRefs, sizeof(uint32), 1, stream); - fread(&Holes, sizeof(uint32), 1, stream); - LowQualityTextureMap = new uint32[4]; - fread(LowQualityTextureMap, sizeof(uint32), 4, stream); - fread(&PredTex, sizeof(uint32), 1, stream); - fread(&NumberEffectDoodad, sizeof(uint32), 1, stream); - fread(&OffsetMCSE, sizeof(uint32), 1, stream); - fread(&SoundEmitters, sizeof(uint32), 1, stream); - fread(&OffsetMCLQ, sizeof(uint32), 1, stream); - fread(&SizeMCLQ, sizeof(uint32), 1, stream); - Position = Vector3::Read(stream); - fread(&OffsetMCCV, sizeof(uint32), 1, stream); - } + void Read(FILE* stream); }; class MHDR @@ -125,21 +97,7 @@ public: uint32 OffsetMH2O; uint32 OffsetMTFX; - void Read(FILE* stream) - { - fread(&Flags, sizeof(uint32), 1, stream); - fread(&OffsetMCIN, sizeof(uint32), 1, stream); - fread(&OffsetMTEX, sizeof(uint32), 1, stream); - fread(&OffsetMMDX, sizeof(uint32), 1, stream); - fread(&OffsetMMID, sizeof(uint32), 1, stream); - fread(&OffsetMWMO, sizeof(uint32), 1, stream); - fread(&OffsetMWID, sizeof(uint32), 1, stream); - fread(&OffsetMDDF, sizeof(uint32), 1, stream); - fread(&OffsetMODF, sizeof(uint32), 1, stream); - fread(&OffsetMFBO, sizeof(uint32), 1, stream); - fread(&OffsetMH2O, sizeof(uint32), 1, stream); - fread(&OffsetMTFX, sizeof(uint32), 1, stream); - } + void Read(FILE* stream); }; class ModelHeader @@ -196,72 +154,7 @@ public: uint32 CountBoundingNormals; uint32 OffsetBoundingNormals; - void Read(FILE* stream) - { - fread(&Magic, sizeof(char), 4, stream); - Magic[4] = '\0'; // null-terminate it. - fread(&Version, sizeof(uint32), 1, stream); - fread(&LengthModelName, sizeof(uint32), 1, stream); - fread(&OffsetName, sizeof(uint32), 1, stream); - fread(&ModelFlags, sizeof(uint32), 1, stream); - fread(&CountGlobalSequences, sizeof(uint32), 1, stream); - fread(&OffsetGlobalSequences, sizeof(uint32), 1, stream); - fread(&CountAnimations, sizeof(uint32), 1, stream); - fread(&OffsetAnimations, sizeof(uint32), 1, stream); - fread(&CountAnimationLookup, sizeof(uint32), 1, stream); - fread(&OffsetAnimationLookup, sizeof(uint32), 1, stream); - fread(&CountBones, sizeof(uint32), 1, stream); - fread(&OffsetBones, sizeof(uint32), 1, stream); - fread(&CountKeyBoneLookup, sizeof(uint32), 1, stream); - fread(&OffsetKeyBoneLookup, sizeof(uint32), 1, stream); - fread(&CountVertices, sizeof(uint32), 1, stream); - fread(&OffsetVertices, sizeof(uint32), 1, stream); - fread(&CountViews, sizeof(uint32), 1, stream); - fread(&CountColors, sizeof(uint32), 1, stream); - fread(&OffsetColors, sizeof(uint32), 1, stream); - fread(&CountTextures, sizeof(uint32), 1, stream); - fread(&OffsetTextures, sizeof(uint32), 1, stream); - fread(&CountTransparency, sizeof(uint32), 1, stream); - fread(&OffsetTransparency, sizeof(uint32), 1, stream); - fread(&CountUvAnimation, sizeof(uint32), 1, stream); - fread(&OffsetUvAnimation, sizeof(uint32), 1, stream); - fread(&CountTexReplace, sizeof(uint32), 1, stream); - fread(&OffsetTexReplace, sizeof(uint32), 1, stream); - fread(&CountRenderFlags, sizeof(uint32), 1, stream); - fread(&OffsetRenderFlags, sizeof(uint32), 1, stream); - fread(&CountBoneLookup, sizeof(uint32), 1, stream); - fread(&OffsetBoneLookup, sizeof(uint32), 1, stream); - fread(&CountTexLookup, sizeof(uint32), 1, stream); - fread(&OffsetTexLookup, sizeof(uint32), 1, stream); - fread(&CountTexUnits, sizeof(uint32), 1, stream); - fread(&OffsetTexUnits, sizeof(uint32), 1, stream); - fread(&CountTransLookup, sizeof(uint32), 1, stream); - fread(&OffsetTransLookup, sizeof(uint32), 1, stream); - fread(&CountUvAnimLookup, sizeof(uint32), 1, stream); - fread(&OffsetUvAnimLookup, sizeof(uint32), 1, stream); - fread(&CountColors, sizeof(uint32), 1, stream); - fread(&OffsetColors, sizeof(uint32), 1, stream); - fread(&CountTextures, sizeof(uint32), 1, stream); - fread(&OffsetTextures, sizeof(uint32), 1, stream); - fread(&CountTransparency, sizeof(uint32), 1, stream); - fread(&OffsetTransparency, sizeof(uint32), 1, stream); - fread(&CountUvAnimation, sizeof(uint32), 1, stream); - fread(&OffsetUvAnimation, sizeof(uint32), 1, stream); - fread(&CountTexReplace, sizeof(uint32), 1, stream); - fread(&OffsetTexReplace, sizeof(uint32), 1, stream); - VertexBox[0] = Vector3::Read(stream); - VertexBox[1] = Vector3::Read(stream); - fread(&VertexRadius, sizeof(float), 1, stream); - BoundingBox[0] = Vector3::Read(stream); - BoundingBox[1] = Vector3::Read(stream); - fread(&BoundingRadius, sizeof(float), 1, stream); - fread(&CountBoundingTriangles, sizeof(uint32), 1, stream); - fread(&OffsetBoundingTriangles, sizeof(uint32), 1, stream); - fread(&CountBoundingVertices, sizeof(uint32), 1, stream); - fread(&OffsetBoundingVertices, sizeof(uint32), 1, stream); - fread(&CountBoundingNormals, sizeof(uint32), 1, stream); - fread(&OffsetBoundingNormals, sizeof(uint32), 1, stream); - } + void Read(FILE* stream); }; class WorldModelHeader @@ -280,23 +173,7 @@ public: Vector3 BoundingBox[2]; uint32 LiquidTypeRelated; - static WorldModelHeader Read(FILE* stream) - { - WorldModelHeader ret; - fread(&ret.CountMaterials, sizeof(uint32), 1, stream); - fread(&ret.CountGroups, sizeof(uint32), 1, stream); - fread(&ret.CountPortals, sizeof(uint32), 1, stream); - fread(&ret.CountLights, sizeof(uint32), 1, stream); - fread(&ret.CountModels, sizeof(uint32), 1, stream); - fread(&ret.CountDoodads, sizeof(uint32), 1, stream); - fread(&ret.CountSets, sizeof(uint32), 1, stream); - fread(&ret.AmbientColorUnk, sizeof(uint32), 1, stream); - fread(&ret.WmoId, sizeof(uint32), 1, stream); - ret.BoundingBox[0] = Vector3::Read(stream); - ret.BoundingBox[1] = Vector3::Read(stream); - fread(&ret.LiquidTypeRelated, sizeof(uint32), 1, stream); - return ret; - } + static WorldModelHeader Read(FILE* stream); }; class DoodadInstance @@ -313,19 +190,7 @@ public: float Scale; uint32 LightColor; - static DoodadInstance Read(FILE* stream) - { - DoodadInstance ret; - fread(&ret.FileOffset, sizeof(uint32), 1, stream); - ret.Position = Vector3::Read(stream); - fread(&ret.QuatW, sizeof(float), 1, stream); - fread(&ret.QuatX, sizeof(float), 1, stream); - fread(&ret.QuatY, sizeof(float), 1, stream); - fread(&ret.QuatZ, sizeof(float), 1, stream); - fread(&ret.Scale, sizeof(float), 1, stream); - fread(&ret.LightColor, sizeof(uint32), 1, stream); - return ret; - } + static DoodadInstance Read(FILE* stream); }; class DoodadSet @@ -337,18 +202,7 @@ public: uint32 CountInstances; uint32 UnknownZero; - static DoodadSet Read(FILE* stream) - { - DoodadSet ret; - char name[21]; - fread(&name, sizeof(char), 20, stream); - name[20] = '\0'; - ret.Name = name; - fread(&ret.FirstInstanceIndex, sizeof(uint32), 1, stream); - fread(&ret.CountInstances, sizeof(uint32), 1, stream); - fread(&ret.UnknownZero, sizeof(uint32), 1, stream); - return ret; - } + static DoodadSet Read(FILE* stream); }; class LiquidHeader @@ -362,17 +216,7 @@ public: Vector3 BaseLocation; uint16 MaterialId; - static LiquidHeader Read(FILE* stream) - { - LiquidHeader ret; - fread(&ret.CountXVertices, sizeof(uint32), 1, stream); - fread(&ret.CountYVertices, sizeof(uint32), 1, stream); - fread(&ret.Width, sizeof(uint32), 1, stream); - fread(&ret.Height, sizeof(uint32), 1, stream); - ret.BaseLocation = Vector3::Read(stream); - fread(&ret.MaterialId, sizeof(uint16), 1, stream); - return ret; - } + static LiquidHeader Read(FILE* stream); }; class LiquidData @@ -387,41 +231,7 @@ public: return RenderFlags[x][y] != 0x0F; } - static LiquidData Read(FILE* stream, LiquidHeader header) - { - LiquidData ret; - ret.HeightMap = new float*[header.CountXVertices]; - for (uint32 i = 0; i < header.CountXVertices; ++i) - ret.HeightMap[i] = new float[header.CountYVertices]; - - ret.RenderFlags = new uint8*[header.Width]; - for (uint32 i = 0; i < header.Width; ++i) - ret.RenderFlags[i] = new uint8[header.Height]; - - for (uint32 y = 0; y < header.CountYVertices; y++) - { - for (uint32 x = 0; x < header.CountXVertices; x++) - { - uint32 discard; - fread(&discard, sizeof(uint32), 1, stream); - float tmp; - fread(&tmp, sizeof(float), 1, stream); - ret.HeightMap[x][y] = tmp; - } - } - - for (uint32 y = 0; y < header.Height; y++) - { - for (uint32 x = 0; x < header.Width; x++) - { - uint8 tmp; - fread(&tmp, sizeof(uint8), 1, stream); - ret.RenderFlags[x][y] = tmp; - } - } - - return ret; - } + static LiquidData Read(FILE* stream, LiquidHeader& header); }; class H2ORenderMask @@ -435,12 +245,7 @@ public: return (Mask[y] >> x & 1) != 0; } - static H2ORenderMask Read(FILE* stream) - { - H2ORenderMask ret; - fread(&ret.Mask, sizeof(uint8), 8, stream); - return ret; - } + static H2ORenderMask Read(FILE* stream); }; class MCNKLiquidData @@ -452,17 +257,7 @@ public: float** Heights; H2ORenderMask Mask; - bool IsWater(int x, int y, float height) - { - if (!Heights) - return false; - if (!Mask.ShouldRender(x, y)) - return false; - float diff = Heights[x][y] - height; - if (diff > Constants::MaxStandableHeight) - return true; - return false; - } + bool IsWater(int x, int y, float height); }; class H2OHeader @@ -473,14 +268,7 @@ public: uint32 LayerCount; uint32 OffsetRender; - static H2OHeader Read(FILE* stream) - { - H2OHeader ret; - fread(&ret.OffsetInformation, sizeof(uint32), 1, stream); - fread(&ret.LayerCount, sizeof(uint32), 1, stream); - fread(&ret.OffsetRender, sizeof(uint32), 1, stream); - return ret; - } + static H2OHeader Read(FILE* stream); }; class H2OInformation @@ -498,21 +286,7 @@ public: uint32 OffsetMask2; uint32 OffsetHeightmap; - static H2OInformation Read(FILE* stream) - { - H2OInformation ret; - fread(&ret.LiquidType, sizeof(uint16), 1, stream); - fread(&ret.Flags, sizeof(uint16), 1, stream); - fread(&ret.HeightLevel1, sizeof(float), 1, stream); - fread(&ret.HeightLevel2, sizeof(float), 1, stream); - fread(&ret.OffsetX, sizeof(uint8), 1, stream); - fread(&ret.OffsetY, sizeof(uint8), 1, stream); - fread(&ret.Width, sizeof(uint8), 1, stream); - fread(&ret.Height, sizeof(uint8), 1, stream); - fread(&ret.OffsetMask2, sizeof(uint32), 1, stream); - fread(&ret.OffsetHeightmap, sizeof(uint32), 1, stream); - return ret; - } + static H2OInformation Read(FILE* stream); }; // Dummy class to act as an interface. From e32ddea96a017c7d5ad22eca16764d74501b90f3 Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 3 Oct 2012 18:02:18 -0500 Subject: [PATCH 085/204] Tools/MeshExtractor: * Added the capability of extracting DBCs. * Fixed most compile warnings * Some work on the navigation mesh generation process (still not ready) --- src/tools/mesh_extractor/ChunkedData.cpp | 4 +- src/tools/mesh_extractor/Constants.h | 11 +++ src/tools/mesh_extractor/ContinentBuilder.cpp | 16 ++-- src/tools/mesh_extractor/DoodadHandler.cpp | 2 +- src/tools/mesh_extractor/LiquidHandler.cpp | 8 +- src/tools/mesh_extractor/MPQ.cpp | 1 + src/tools/mesh_extractor/MPQ.h | 2 + src/tools/mesh_extractor/MPQManager.cpp | 61 ++++++++++-- src/tools/mesh_extractor/MPQManager.h | 6 +- src/tools/mesh_extractor/MeshExtractor.cpp | 93 ++++++++++++++++--- src/tools/mesh_extractor/TileBuilder.cpp | 75 ++++++++------- src/tools/mesh_extractor/TileBuilder.h | 4 +- src/tools/mesh_extractor/Utils.cpp | 38 ++++++++ src/tools/mesh_extractor/Utils.h | 2 + src/tools/mesh_extractor/WorldModelGroup.cpp | 8 +- .../mesh_extractor/WorldModelHandler.cpp | 2 +- src/tools/mesh_extractor/WorldModelRoot.cpp | 6 +- 17 files changed, 264 insertions(+), 75 deletions(-) diff --git a/src/tools/mesh_extractor/ChunkedData.cpp b/src/tools/mesh_extractor/ChunkedData.cpp index 4431993e3d1..4d609d8f6b2 100644 --- a/src/tools/mesh_extractor/ChunkedData.cpp +++ b/src/tools/mesh_extractor/ChunkedData.cpp @@ -48,7 +48,7 @@ void ChunkedData::Load( uint32 maxLength, uint32 chunksHint ) int ChunkedData::GetFirstIndex( std::string name ) { - for (int i = 0; i < Chunks.size(); ++i) + for (uint32 i = 0; i < Chunks.size(); ++i) if (Chunks[i]->Name == name) return i; return -1; @@ -56,7 +56,7 @@ int ChunkedData::GetFirstIndex( std::string name ) Chunk* ChunkedData::GetChunkByName( std::string name ) { - for (int i = 0; i < Chunks.size(); ++i) + for (uint32 i = 0; i < Chunks.size(); ++i) if (Chunks[i]->Name == name) return Chunks[i]; return NULL; diff --git a/src/tools/mesh_extractor/Constants.h b/src/tools/mesh_extractor/Constants.h index f44d5f16797..f3b71812155 100644 --- a/src/tools/mesh_extractor/Constants.h +++ b/src/tools/mesh_extractor/Constants.h @@ -29,6 +29,17 @@ public: POLY_FLAG_SWIM = 2, POLY_FLAG_FLIGHTMASTER = 4 }; + + enum ExtractFlags + { + EXTRACT_FLAG_DBC = 1, + EXTRACT_FLAG_MAPS = 2, + EXTRACT_FLAG_VMAPS = 4, + EXTRACT_FLAG_GOB_MODELS = 8, + EXTRACT_FLAG_MMAPS = 16, + EXTRACT_FLAG_ALLOWED = EXTRACT_FLAG_DBC | EXTRACT_FLAG_MAPS | EXTRACT_FLAG_VMAPS | EXTRACT_FLAG_GOB_MODELS | EXTRACT_FLAG_MMAPS + }; + static const float TileSize; static const float MaxXY; static const float ChunkSize; diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp index 984f6170357..e4a1d2ca9f4 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.cpp +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -13,8 +13,9 @@ private: int X, Y, MapId; std::string Continent; bool debug; + dtNavMeshParams Params; public: - BuilderThread(bool deb) : Free(true), debug(deb) {} + BuilderThread(bool deb, dtNavMeshParams& params) : Free(true), debug(deb), Params(params) {} void SetData(int x, int y, int map, std::string cont) { X = x; Y = y; MapId = map; Continent = cont; } int svc() @@ -32,7 +33,7 @@ public: Free = true; return 0; } - uint8* nav = builder.Build(debug); + uint8* nav = builder.Build(debug, Params); if (nav) { f = fopen(buff, "wb"); @@ -101,14 +102,17 @@ void ContinentBuilder::Build(bool debug) dtNavMeshParams params; params.maxPolys = 32768; params.maxTiles = TileMap->TileTable.size(); - rcVcopy(params.orig, bmin); - params.tileHeight = 533.33333f; - params.tileWidth = 533.33333f; + // rcVcopy(params.orig, bmin); + params.orig[0] = Constants::Origin[0]; + params.orig[1] = 0; + params.orig[2] = Constants::Origin[2]; + params.tileHeight = Constants::TileSize; + params.tileWidth = Constants::TileSize; fwrite(¶ms, sizeof(dtNavMeshParams), 1, mmap); fclose(mmap); std::vector Threads; for (uint32 i = 0; i < NumberOfThreads; ++i) - Threads.push_back(new BuilderThread(debug)); + Threads.push_back(new BuilderThread(debug, params)); printf("Map %s ( %i ) has %i tiles. Building them with %i threads\n", Continent.c_str(), MapId, TileMap->TileTable.size(), NumberOfThreads); for (std::vector::iterator itr = TileMap->TileTable.begin(); itr != TileMap->TileTable.end(); ++itr) { diff --git a/src/tools/mesh_extractor/DoodadHandler.cpp b/src/tools/mesh_extractor/DoodadHandler.cpp index 363f07b4578..4e8028b3dff 100644 --- a/src/tools/mesh_extractor/DoodadHandler.cpp +++ b/src/tools/mesh_extractor/DoodadHandler.cpp @@ -31,7 +31,7 @@ void DoodadHandler::ProcessInternal( ChunkedData* subChunks ) { int32 index; fread(&index, sizeof(int32), 1, stream); - if (index < 0 || index >= _definitions->size()) + if (index < 0 || uint32(index) >= _definitions->size()) continue; DoodadDefinition doodad = (*_definitions)[index]; if (_drawn.find(doodad.UniqueId) != _drawn.end()) diff --git a/src/tools/mesh_extractor/LiquidHandler.cpp b/src/tools/mesh_extractor/LiquidHandler.cpp index 5b998d75db9..7844130ab34 100644 --- a/src/tools/mesh_extractor/LiquidHandler.cpp +++ b/src/tools/mesh_extractor/LiquidHandler.cpp @@ -34,10 +34,10 @@ void LiquidHandler::HandleNewLiquid() H2OInformation information = H2OInformation::Read(stream); float** heights = new float*[9]; - for (int i = 0; i < 9; ++i) + for (int j = 0; j < 9; ++i) { - heights[i] = new float[9]; - memset(heights[i], 0, sizeof(float) * 9); + heights[j] = new float[9]; + memset(heights[j], 0, sizeof(float) * 9); } H2ORenderMask renderMask; @@ -52,7 +52,7 @@ void LiquidHandler::HandleNewLiquid() uint8* altMask = new uint8[size]; fread(altMask, sizeof(uint8), size, stream); - for (int mi = 0; mi < size; mi++) + for (uint32 mi = 0; mi < size; mi++) renderMask.Mask[mi + information.OffsetY] |= altMask[mi]; delete[] altMask; } diff --git a/src/tools/mesh_extractor/MPQ.cpp b/src/tools/mesh_extractor/MPQ.cpp index 699b0a5014c..b7be181594d 100644 --- a/src/tools/mesh_extractor/MPQ.cpp +++ b/src/tools/mesh_extractor/MPQ.cpp @@ -31,6 +31,7 @@ MPQArchive::MPQArchive(const char* filename) break; } } + GetFileListTo(Files); } void MPQArchive::close() diff --git a/src/tools/mesh_extractor/MPQ.h b/src/tools/mesh_extractor/MPQ.h index dd566bccff5..15fce452726 100644 --- a/src/tools/mesh_extractor/MPQ.h +++ b/src/tools/mesh_extractor/MPQ.h @@ -16,6 +16,8 @@ class MPQArchive public: mpq_archive_s *mpq_a; + + vector Files; MPQArchive(const char* filename); void close(); diff --git a/src/tools/mesh_extractor/MPQManager.cpp b/src/tools/mesh_extractor/MPQManager.cpp index 608eef1547a..90491dfb945 100644 --- a/src/tools/mesh_extractor/MPQManager.cpp +++ b/src/tools/mesh_extractor/MPQManager.cpp @@ -15,7 +15,7 @@ char* MPQManager::Files[] = { "patch-3.MPQ" }; -char* MPQManager::Languages[] = { "esES", "enUS", "enGB", "esMX", "deDE" }; +char* MPQManager::Languages[] = { "enGB", "enUS", "deDE", "esES", "frFR", "koKR", "zhCN", "zhTW", "enCN", "enTW", "esMX", "ruRU" }; void MPQManager::Initialize() { @@ -31,21 +31,38 @@ void MPQManager::Initialize() void MPQManager::InitializeDBC() { - CurLocale = 0; + BaseLocale = -1; std::string fileName; uint32 size = sizeof(Languages) / sizeof(char*); + MPQArchive* _baseLocale = NULL; for (uint32 i = 0; i < size; ++i) { - fileName = "Data/" + std::string(Languages[i]) + "/locale-" + std::string(Languages[i]) + ".MPQ"; - FILE* file = fopen(fileName.c_str(), "rb"); + std::string _fileName = "Data/" + std::string(Languages[i]) + "/locale-" + std::string(Languages[i]) + ".MPQ"; + FILE* file = fopen(_fileName.c_str(), "rb"); if (file) { - CurLocale = i; - break; + if (BaseLocale == -1) + { + BaseLocale = i; + _baseLocale = new MPQArchive(_fileName.c_str()); + fileName = _fileName; + LocaleFiles[i] = _baseLocale; + } + else + LocaleFiles[i] = new MPQArchive(_fileName.c_str()); + + AvailableLocales.insert(i); + printf("Detected locale: %s\n", Languages[i]); } } - Archives.push_front(new MPQArchive(fileName.c_str())); - printf("Using locale: %s\n", Languages[CurLocale]); + Archives.push_front(_baseLocale); + if (BaseLocale == -1) + { + printf("No locale data detected\n"); + ASSERT(false); + } + else + printf("Using default locale: %s\n", Languages[BaseLocale]); } FILE* MPQManager::GetFile( std::string path ) @@ -62,3 +79,31 @@ DBC* MPQManager::GetDBC( std::string name ) std::string path = "DBFilesClient\\" + name + ".dbc"; return new DBC(GetFile(path)); } + +FILE* MPQManager::GetFileFrom( std::string path, MPQArchive* file ) +{ + ACE_GUARD_RETURN(ACE_Thread_Mutex, g, mutex, NULL); + mpq_archive* mpq_a = file->mpq_a; + + uint32_t filenum; + if(libmpq__file_number(mpq_a, path.c_str(), &filenum)) + return NULL; + + libmpq__off_t transferred; + libmpq__off_t size = 0; + libmpq__file_unpacked_size(mpq_a, filenum, &size); + + // HACK: in patch.mpq some files don't want to open and give 1 for filesize + if (size <= 1) + return NULL; + + uint8* buffer = new uint8[size]; + + //libmpq_file_getdata + libmpq__file_read(mpq_a, filenum, (unsigned char*)buffer, size, &transferred); + + // Pack the return into a FILE stream + FILE* ret = tmpfile(); + fwrite(buffer, sizeof(uint8), size, ret); + return ret; +} diff --git a/src/tools/mesh_extractor/MPQManager.h b/src/tools/mesh_extractor/MPQManager.h index 0050dc5218a..c23d7177825 100644 --- a/src/tools/mesh_extractor/MPQManager.h +++ b/src/tools/mesh_extractor/MPQManager.h @@ -13,10 +13,14 @@ public: void Initialize(); FILE* GetFile(std::string path); + FILE* GetFileFrom(std::string path, MPQArchive* file); DBC* GetDBC(std::string name); + std::vector GetAllFiles(std::string extension); std::deque Archives; - uint32 CurLocale; + int32 BaseLocale; + std::set AvailableLocales; + std::map LocaleFiles; static char* Files[]; static char* Languages[]; diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index 9d88fcdcdfc..d6b701607ba 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -3,6 +3,7 @@ #include "ContinentBuilder.h" #include "Cache.h" #include "DBC.h" +#include "Constants.h" #include @@ -14,7 +15,7 @@ LoginDatabaseWorkerPool LoginDatabase; MPQManager* MPQHandler; CacheClass* Cache; -void ExtractAllMaps(std::set& mapIds, uint32 threads, bool debug) +void ExtractMMaps(std::set& mapIds, uint32 threads, bool debug) { DBC* dbc = MPQHandler->GetDBC("Map"); for (std::vector::iterator itr = dbc->Records.begin(); itr != dbc->Records.end(); ++itr) @@ -35,9 +36,45 @@ void ExtractAllMaps(std::set& mapIds, uint32 threads, bool debug) } } -bool HandleArgs(int argc, char** argv, uint32& threads, std::set& mapList, bool& debugOutput) +void ExtractDBCs() +{ + printf("Extracting DBCs\n"); + // Create the filesystem structure + std::string baseDBCPath = "dbc/"; + Utils::CreateDir(baseDBCPath); + + // Populate list of DBC files + std::set DBCFiles; + for (std::vector::iterator itr = MPQHandler->LocaleFiles[MPQHandler->BaseLocale]->Files.begin(); itr != MPQHandler->LocaleFiles[MPQHandler->BaseLocale]->Files.end(); ++itr) + if (itr->rfind(".dbc") == itr->length() - strlen(".dbc")) + DBCFiles.insert(*itr); + + // Iterate over all available locales + for (std::set::iterator itr = MPQHandler->AvailableLocales.begin(); itr != MPQHandler->AvailableLocales.end(); ++itr) + { + printf("Extracting DBCs for locale %s\n", MPQManager::Languages[*itr]); + std::string path = baseDBCPath; + if (*itr != MPQHandler->BaseLocale) + { + path += std::string(MPQManager::Languages[*itr]) + "/"; + Utils::CreateDir(path); + } + + std::string component = "component.wow-" + std::string(MPQManager::Languages[*itr]) + ".txt"; + // Extract the component file + Utils::SaveToDisk(MPQHandler->GetFile(component), path + component); + // Extract the DBC files for the given locale + for (std::set::iterator itr2 = DBCFiles.begin(); itr2 != DBCFiles.end(); ++itr2) + Utils::SaveToDisk(MPQHandler->GetFileFrom(*itr2, MPQHandler->LocaleFiles[*itr]), path + (itr2->c_str() + strlen("DBFilesClient\\"))); + } + printf("DBC extraction finished!\n"); +} + +bool HandleArgs(int argc, char** argv, uint32& threads, std::set& mapList, bool& debugOutput, uint32& extractFlags) { char* param = NULL; + extractFlags = 0; + for (int i = 1; i < argc; ++i) { if (strcmp(argv[i], "--threads") == 0) @@ -49,7 +86,7 @@ bool HandleArgs(int argc, char** argv, uint32& threads, std::set& mapLis threads = atoi(param); printf("Using %i threads\n", threads); } - if (strcmp(argv[i], "--maps") == 0) + else if (strcmp(argv[i], "--maps") == 0) { param = argv[++i]; if (!param) @@ -62,13 +99,32 @@ bool HandleArgs(int argc, char** argv, uint32& threads, std::set& mapLis printf("Extracting only provided list of maps (%u).\n", mapList.size()); } - if (strcmp(argv[i], "--debug") == 0) + else if (strcmp(argv[i], "--debug") == 0) { param = argv[++i]; if (!param) return false; debugOutput = atoi(param); - printf("Output will contain debug information (.obj files)\n"); + if (debugOutput) + printf("Output will contain debug information (.obj files)\n"); + } + else if (strcmp(argv[i], "--extract") == 0) + { + param = argv[++i]; + if (!param) + return false; + + extractFlags = atoi(param); + + if (!(extractFlags & Constants::EXTRACT_FLAG_ALLOWED)) // Tried to use an invalid flag + return false; + + printf("Detected flags: \n"); + printf("* Extract DBCs: %s\n", (extractFlags & Constants::EXTRACT_FLAG_DBC) ? "Yes" : "No"); + printf("* Extract Maps: %s\n", (extractFlags & Constants::EXTRACT_FLAG_MAPS) ? "Yes" : "No"); + printf("* Extract VMaps: %s\n", (extractFlags & Constants::EXTRACT_FLAG_VMAPS) ? "Yes" : "No"); + printf("* Extract GameObject Models: %s\n", (extractFlags & Constants::EXTRACT_FLAG_GOB_MODELS) ? "Yes" : "No"); + printf("* Extract MMaps: %s\n", (extractFlags & Constants::EXTRACT_FLAG_MMAPS) ? "Yes" : "No"); } } return true; @@ -77,9 +133,17 @@ bool HandleArgs(int argc, char** argv, uint32& threads, std::set& mapLis void PrintUsage() { printf("MeshExtractor help.\n"); - printf("* Use \"--threads \" to specify threads, default to 4\n"); - printf("* Use \"--maps a,b,c,d,e\" to extract only the maps specified ( do not use spaces )\n"); - printf("* Use \"--debug 1\" to generate debug information of the tiles.\n"); + printf("* Use \"--threads \" to specify threads, default to 4 (Only available when extracting MMaps)\n"); + printf("* Use \"--maps a,b,c,d,e\" to extract only the maps specified (Do not use spaces)\n"); + printf("* Use \"--debug 1\" to generate debug information of the tiles (Only available when extracting MMaps)\n"); + printf("* Use \"--extract X\" to extract the data specified by the flag X (Note: You can combine the flags with the bitwise OR operator |). Available flags are: \n"); + { + printf("- %u to extract DBCs\n", Constants::EXTRACT_FLAG_DBC); + printf("- %u to extract Maps (Not yet implemented)\n", Constants::EXTRACT_FLAG_MAPS); + printf("- %u to extract VMaps (Not yet implemented)\n", Constants::EXTRACT_FLAG_VMAPS); + printf("- %u to extract GameObject models (Not yet implemented)\n", Constants::EXTRACT_FLAG_GOB_MODELS); + printf("- %u to extract MMaps (Not yet finished)\n", Constants::EXTRACT_FLAG_MMAPS); + } } int main(int argc, char* argv[]) @@ -88,16 +152,21 @@ int main(int argc, char* argv[]) Cache = new CacheClass(); MPQHandler = new MPQManager(); MPQHandler->Initialize(); - uint32 threads = 4; + uint32 threads = 4, extractFlags = 0; std::set mapIds; bool debug = false; - - if (!HandleArgs(argc, argv, threads, mapIds, debug)) + + if (!HandleArgs(argc, argv, threads, mapIds, debug, extractFlags)) { PrintUsage(); return -1; } - ExtractAllMaps(mapIds, threads, debug); + if (extractFlags & Constants::EXTRACT_FLAG_DBC) + ExtractDBCs(); + + if (extractFlags & Constants::EXTRACT_FLAG_MMAPS) + ExtractMMaps(mapIds, threads, debug); + return 0; } \ No newline at end of file diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 54b9e4865cd..5b3e181713e 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -26,9 +26,9 @@ TileBuilder::TileBuilder(std::string world, int x, int y, uint32 mapId) : _Geome Config.walkableSlopeAngle = 50.0f; Config.detailSampleDist = 3.0f; Config.detailSampleMaxError = 1.25f; - Config.walkableClimb = 1.0f / Config.ch; - Config.walkableHeight = 1.652778f / Config.ch; - Config.walkableRadius = 0.2951389f / Config.cs; + Config.walkableClimb = floorf(1.0f / Config.ch); + Config.walkableHeight = ceilf(1.652778f / Config.ch); + Config.walkableRadius = ceilf(0.2951389f / Config.cs); Config.maxEdgeLen = Config.walkableRadius * 8; Config.borderSize = Config.walkableRadius + 4; Config.width = 1800 + Config.borderSize * 2; @@ -39,17 +39,17 @@ TileBuilder::TileBuilder(std::string world, int x, int y, uint32 mapId) : _Geome Context = new rcContext; } -void TileBuilder::CalculateTileBounds( float*& bmin, float*& bmax ) +void TileBuilder::CalculateTileBounds( float*& bmin, float*& bmax, dtNavMeshParams& navMeshParams ) { bmin = new float[3]; bmax = new float[3]; - bmin[0] = Constants::Origin[0] + (Constants::TileSize * X); - bmin[2] = Constants::Origin[2] + (Constants::TileSize * Y); - bmax[0] = Constants::Origin[0] + (Constants::TileSize * (X + 1)); - bmax[2] = Constants::Origin[2] + (Constants::TileSize * (Y + 1)); + bmin[0] = Constants::Origin[0] /*navMeshParams.orig[0]*/ + (Constants::TileSize * X); + bmin[2] = Constants::Origin[2] /*navMeshParams.orig[2]*/ + (Constants::TileSize * Y); + bmax[0] = Constants::Origin[0] /*navMeshParams.orig[0]*/ + (Constants::TileSize * (X + 1)); + bmax[2] = Constants::Origin[2] /*navMeshParams.orig[2]*/ + (Constants::TileSize * (Y + 1)); } -uint8* TileBuilder::Build(bool dbg) +uint8* TileBuilder::Build(bool dbg, dtNavMeshParams& navMeshParams) { _Geometry = new Geometry(); _Geometry->Transform = true; @@ -61,15 +61,10 @@ uint8* TileBuilder::Build(bool dbg) if (_Geometry->Vertices.empty() && _Geometry->Triangles.empty()) return NULL; - float* bbMin; - float* bbMax; - CalculateTileBounds(bbMin, bbMax); - _Geometry->CalculateMinMaxHeight(bbMin[1], bbMax[1]); - // again, we load everything - wasteful but who cares - for (int ty = Y - 4; ty <= Y + 4; ty++) + for (int ty = Y - 2; ty <= Y + 2; ty++) { - for (int tx = X - 4; tx <= X + 4; tx++) + for (int tx = X - 2; tx <= X + 2; tx++) { // don't load main tile again if (tx == X && ty == Y) @@ -109,13 +104,23 @@ uint8* TileBuilder::Build(bool dbg) _Geometry->Vertices.clear(); _Geometry->Triangles.clear(); - bbMin[0] -= Config.borderSize * Config.cs; + float bbMin[3]; + float bbMax[3]; + // CalculateTileBounds(bbMin, bbMax, navMeshParams); + rcCalcBounds(vertices, numVerts, bbMin, bbMax); + // _Geometry->CalculateMinMaxHeight(bbMin[1], bbMax[1]); + + /*bbMin[0] -= Config.borderSize * Config.cs; bbMin[2] -= Config.borderSize * Config.cs; bbMax[0] += Config.borderSize * Config.cs; - bbMax[0] += Config.borderSize * Config.cs; + bbMax[0] += Config.borderSize * Config.cs;*/ + rcHeightfield* hf = rcAllocHeightfield(); - rcCreateHeightfield(Context, *hf, Config.width, Config.height, bbMin, bbMax, Config.cs, Config.ch); + int height, width; + rcCalcGridSize(bbMin, bbMax, Config.cs, &width, &height); + printf("Config values: Height: %i, Width: %i. Calculated values: Height: %i, Width: %i\n", Config.height, Config.width, height, width); + rcCreateHeightfield(Context, *hf, width, height, bbMin, bbMax, Config.cs, Config.ch); rcClearUnwalkableTriangles(Context, Config.walkableSlopeAngle, vertices, numVerts, triangles, numTris, areas); rcRasterizeTriangles(Context, vertices, numVerts, triangles, areas, numTris, *hf, Config.walkableClimb); @@ -168,29 +173,31 @@ uint8* TileBuilder::Build(bool dbg) rcFreeCompactHeightfield(chf); rcFreeContourSet(cset); + /* + * Removed with RecastNavigation v292 // Remove padding from the polymesh data. (Remove this odditity) for (int i = 0; i < pmesh->nverts; ++i) { unsigned short* v = &pmesh->verts[i * 3]; v[0] -= (unsigned short)Config.borderSize; v[2] -= (unsigned short)Config.borderSize; - } + }*/ // Set flags according to area types (e.g. Swim for Water) for (int i = 0; i < pmesh->npolys; i++) { if (pmesh->areas[i] == Constants::POLY_AREA_ROAD || pmesh->areas[i] == Constants::POLY_AREA_TERRAIN) pmesh->flags[i] = Constants::POLY_FLAG_WALK; - else if (pmesh->areas[i] == (int)Constants::POLY_AREA_WATER) + else if (pmesh->areas[i] == Constants::POLY_AREA_WATER) pmesh->flags[i] = Constants::POLY_FLAG_SWIM; } // get original bounds - float* tilebMin; + /*float* tilebMin; float* tilebMax; - CalculateTileBounds(tilebMin, tilebMax); + CalculateTileBounds(tilebMin, tilebMax, navMeshParams); tilebMin[1] = bbMin[1]; - tilebMax[1] = bbMax[1]; + tilebMax[1] = bbMax[1];*/ dtNavMeshCreateParams params; // PolyMesh data @@ -208,12 +215,14 @@ uint8* TileBuilder::Build(bool dbg) params.detailTris = dmesh->tris; params.detailTriCount = dmesh->ntris; // Copy bounding box - params.bmin[0] = tilebMin[0]; + /*params.bmin[0] = tilebMin[0]; params.bmin[1] = tilebMin[1]; params.bmin[2] = tilebMin[2]; params.bmax[0] = tilebMax[0]; params.bmax[1] = tilebMax[1]; - params.bmax[2] = tilebMax[2]; + params.bmax[2] = tilebMax[2];*/ + rcVcopy(params.bmin, pmesh->bmin); + rcVcopy(params.bmax, pmesh->bmax); // General settings params.ch = Config.ch; params.cs = Config.cs; @@ -222,7 +231,11 @@ uint8* TileBuilder::Build(bool dbg) params.walkableRadius = Config.walkableRadius; params.tileX = X; params.tileY = Y; - params.tileSize = 1800; + int _x = (((pmesh->bmin[0] + pmesh->bmax[0]) / 2) - Constants::Origin[0]) / Constants::TileSize; + int _y = (((pmesh->bmin[2] + pmesh->bmax[2]) / 2) - Constants::Origin[2]) / Constants::TileSize; + printf("[%02i,%02i] Generated with TileX: %i and TileY: %i\nbmin[0] %f bmin[1] %f bmin[2] %f bmax[0] %f bmax[1] %f bmax[2] %f\n", X, Y, _x, _y, params.bmin[0], params.bmin[1], params.bmin[2], params.bmax[0], params.bmax[1], params.bmax[2]); + params.buildBvTree = true; + params.tileLayer = 0; // Offmesh-connection settings params.offMeshConCount = 0; // none for now @@ -235,13 +248,13 @@ uint8* TileBuilder::Build(bool dbg) // Free some memory rcFreePolyMesh(pmesh); rcFreePolyMeshDetail(dmesh); - delete tilebMax; - delete tilebMin; + //delete tilebMax; + //delete tilebMin; delete areas; delete triangles; delete vertices; - delete bbMax; - delete bbMin; + //delete bbMax; + //delete bbMin; if (result) { diff --git a/src/tools/mesh_extractor/TileBuilder.h b/src/tools/mesh_extractor/TileBuilder.h index 72e275c75b7..17d6e48095a 100644 --- a/src/tools/mesh_extractor/TileBuilder.h +++ b/src/tools/mesh_extractor/TileBuilder.h @@ -13,8 +13,8 @@ public: TileBuilder(std::string world, int x, int y, uint32 mapId); ~TileBuilder(); - void CalculateTileBounds(float*& bmin, float*& bmax); - uint8* Build(bool dbg); + void CalculateTileBounds(float*& bmin, float*& bmax, dtNavMeshParams& navMeshParams); + uint8* Build(bool dbg, dtNavMeshParams& navMeshParams); std::string World; int X; diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp index 6389e0aa66e..5b752885d17 100644 --- a/src/tools/mesh_extractor/Utils.cpp +++ b/src/tools/mesh_extractor/Utils.cpp @@ -5,6 +5,13 @@ #include "G3D/Matrix4.h" #include "G3D/Quat.h" +#ifdef _WIN32 + #include "direct.h" +#else + #include + #include +#endif + const float Constants::TileSize = 533.0f + (1/3.0f); const float Constants::MaxXY = 32.0f * Constants::TileSize; const float Constants::ChunkSize = Constants::TileSize / 16.0f; @@ -13,6 +20,15 @@ const float Constants::Origin[] = { -Constants::MaxXY, 0.0f, -Constants::MaxXY } const float Constants::PI = 3.1415926f; const float Constants::MaxStandableHeight = 1.5f; +void Utils::CreateDir( const std::string& Path ) +{ +#ifdef _WIN32 + _mkdir( Path.c_str()); +#else + mkdir( Path.c_str(), 0777 ); +#endif +} + void Utils::Reverse(char word[]) { int len = strlen(word); @@ -181,6 +197,28 @@ G3D::Matrix4 Utils::GetWmoDoodadTransformation( DoodadInstance inst, WorldModelD return scale * rotation * quatRotation ** translation * rootTransformation; } +void Utils::SaveToDisk( FILE* stream, std::string path ) +{ + FILE* disk = fopen(path.c_str(), "wb"); + if (!disk) + { + printf("Could not save file %s to disk, please verify that you have write permissions on that directory\n", path.c_str()); + return; + } + + uint32 size = Utils::Size(stream); + uint8* data = new uint8[size]; + // Read the data to an array + fread(data, 1, size, stream); + // And write it in the file + fwrite(data, 1, size, disk); + + // Close the filestream + fclose(disk); + // Free the used memory + delete data; +} + void MapChunkHeader::Read(FILE* stream) { fread(&Flags, sizeof(uint32), 1, stream); diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index a45c3659240..c19bc1bb29c 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -349,5 +349,7 @@ public: } static std::string Replace( std::string str, const std::string& oldStr, const std::string& newStr ); static G3D::Matrix4 GetWmoDoodadTransformation( DoodadInstance inst, WorldModelDefinition root ); + static void CreateDir( const std::string& Path ); + static void SaveToDisk(FILE* stream, std::string path); }; #endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/WorldModelGroup.cpp b/src/tools/mesh_extractor/WorldModelGroup.cpp index b4c963020c7..bd0d106dabb 100644 --- a/src/tools/mesh_extractor/WorldModelGroup.cpp +++ b/src/tools/mesh_extractor/WorldModelGroup.cpp @@ -36,7 +36,7 @@ void WorldModelGroup::ReadNormals() ASSERT(normalCount == Vertices.size() && "normalCount is different than the Vertices count"); Normals.reserve(normalCount); FILE* stream = chunk->GetStream(); - for (int i = 0; i < normalCount; i++) + for (uint32 i = 0; i < normalCount; i++) Normals[i] = Vector3::Read(stream); } @@ -61,7 +61,7 @@ void WorldModelGroup::ReadVertices() uint32 verticeCount = chunk->Length / 12; Vertices.reserve(verticeCount); FILE* stream = chunk->GetStream(); - for (int i = 0; i < verticeCount; i++) + for (uint32 i = 0; i < verticeCount; i++) Vertices.push_back(Vector3::Read(stream)); } @@ -75,7 +75,7 @@ void WorldModelGroup::ReadTriangles() ASSERT(triangleCount == TriangleFlags.size() && "triangleCount != TriangleFlags.size()"); FILE* stream = chunk->GetStream(); Triangles.reserve(triangleCount); - for (int i = 0; i < triangleCount; i++) + for (uint32 i = 0; i < triangleCount; i++) { uint16 v0; uint16 v1; @@ -97,7 +97,7 @@ void WorldModelGroup::ReadMaterials() uint32 triangleCount = chunk->Length / 2; TriangleFlags.reserve(triangleCount); TriangleMaterials.reserve(triangleCount); - for (int i = 0; i < triangleCount; i++) + for (uint32 i = 0; i < triangleCount; i++) { uint8 tmp; fread(&tmp, sizeof(uint8), 1, stream); diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp index b98a7aae826..7b60b9b2151 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.cpp +++ b/src/tools/mesh_extractor/WorldModelHandler.cpp @@ -46,7 +46,7 @@ void WorldModelHandler::ProcessInternal( ChunkedData* subChunks ) int32 index; fread(&index, sizeof(int32), 1, stream); - if (index < 0 || index >= _definitions->size()) + if (index < 0 || uint32(index) >= _definitions->size()) continue; WorldModelDefinition wmo = (*_definitions)[index]; diff --git a/src/tools/mesh_extractor/WorldModelRoot.cpp b/src/tools/mesh_extractor/WorldModelRoot.cpp index 3457a35f761..c34a77e4531 100644 --- a/src/tools/mesh_extractor/WorldModelRoot.cpp +++ b/src/tools/mesh_extractor/WorldModelRoot.cpp @@ -16,7 +16,7 @@ void WorldModelRoot::ReadGroups() { std::string pathBase = Utils::GetPathBase(Path); Groups.reserve(Header.CountGroups); - for (int i = 0; i < Header.CountGroups; i++) + for (uint32 i = 0; i < Header.CountGroups; i++) { char name[200]; sprintf(name, "%s_%03u.wmo", pathBase.c_str(), i); @@ -35,7 +35,7 @@ void WorldModelRoot::ReadDoodadSets() FILE* stream = chunk->GetStream(); ASSERT(chunk->Length / 32 == Header.CountSets && "chunk.Length / 32 == Header.CountSets"); DoodadSets.reserve(Header.CountSets); - for (int i = 0; i < Header.CountSets; i++) + for (uint32 i = 0; i < Header.CountSets; i++) DoodadSets.push_back(DoodadSet::Read(stream)); } @@ -49,7 +49,7 @@ void WorldModelRoot::ReadDoodadInstances() const uint32 instanceSize = 40; uint32 countInstances = chunk->Length / instanceSize; DoodadInstances.reserve(countInstances); - for (int i = 0; i < countInstances; i++) + for (uint32 i = 0; i < countInstances; i++) { FILE* stream = chunk->GetStream(); fseek(stream, instanceSize * i, SEEK_CUR); From d2437407f4f7ad1af3baeb351626b41bd700065c Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 3 Oct 2012 21:09:05 -0500 Subject: [PATCH 086/204] Tools/MeshExtractor: * Fixed a bunch of errors * Allow to extract m2 and mdx models, WMOs are still not being extracted. --- src/tools/mesh_extractor/Chunk.cpp | 2 +- src/tools/mesh_extractor/Constants.h | 2 + src/tools/mesh_extractor/DBC.cpp | 2 +- src/tools/mesh_extractor/DBC.h | 5 +- src/tools/mesh_extractor/MeshExtractor.cpp | 123 +++++++++++++++++- src/tools/mesh_extractor/Model.cpp | 29 ++++- src/tools/mesh_extractor/Model.h | 2 + .../mesh_extractor/ObjectDataHandler.cpp | 2 +- src/tools/mesh_extractor/TileBuilder.cpp | 4 +- src/tools/mesh_extractor/Utils.cpp | 36 +++-- src/tools/mesh_extractor/Utils.h | 3 + src/tools/mesh_extractor/WorldModelGroup.cpp | 2 +- 12 files changed, 183 insertions(+), 29 deletions(-) diff --git a/src/tools/mesh_extractor/Chunk.cpp b/src/tools/mesh_extractor/Chunk.cpp index b41fa7d07d4..2f521f1badd 100644 --- a/src/tools/mesh_extractor/Chunk.cpp +++ b/src/tools/mesh_extractor/Chunk.cpp @@ -10,7 +10,7 @@ int32 Chunk::FindSubChunkOffset(std::string name) FILE* stream = GetStream(); uint32 matched = 0; - while (ftell(stream) < Utils::Size(stream)) + while (uint32(ftell(stream)) < Utils::Size(stream)) { char b; fread(&b, sizeof(char), 1, stream); diff --git a/src/tools/mesh_extractor/Constants.h b/src/tools/mesh_extractor/Constants.h index f3b71812155..89cd6da20a2 100644 --- a/src/tools/mesh_extractor/Constants.h +++ b/src/tools/mesh_extractor/Constants.h @@ -47,6 +47,8 @@ public: static const float Origin[]; static const float PI; static const float MaxStandableHeight; + static bool ToWoWCoords; + static const char* VMAPMagic; }; #endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/DBC.cpp b/src/tools/mesh_extractor/DBC.cpp index be04ce070ee..c50e02014da 100644 --- a/src/tools/mesh_extractor/DBC.cpp +++ b/src/tools/mesh_extractor/DBC.cpp @@ -38,7 +38,7 @@ DBC::DBC( FILE* stream ) : StringBlock(NULL), IsFaulty(true), StringBlockSize(0) std::string DBC::GetStringByOffset( int offset ) { int len = 0; - for (int i = offset; i < StringBlockSize; i++) + for (uint32 i = offset; i < StringBlockSize; i++) { if (!StringBlock[i]) { diff --git a/src/tools/mesh_extractor/DBC.h b/src/tools/mesh_extractor/DBC.h index 6c86c1391dd..0c857bd40ed 100644 --- a/src/tools/mesh_extractor/DBC.h +++ b/src/tools/mesh_extractor/DBC.h @@ -37,9 +37,10 @@ public: return Values[index]; } - float GetFloat(int index) + template + T GetValue(int index) { - return *(float*)(&Values[index]); + return *(T*)(&Values[index]); } std::string GetString(int index) diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index d6b701607ba..8eb6ba5cb6e 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -4,6 +4,7 @@ #include "Cache.h" #include "DBC.h" #include "Constants.h" +#include "Model.h" #include @@ -70,6 +71,116 @@ void ExtractDBCs() printf("DBC extraction finished!\n"); } +void ExtractGameobjectModels() +{ + Constants::ToWoWCoords = true; + printf("Extracting GameObject models\n"); + + std::string baseBuildingsPath = "Buildings/"; + std::string baseVmapsPath = "vmaps/"; + Utils::CreateDir(baseVmapsPath); + Utils::CreateDir(baseBuildingsPath); + + FILE* modelList = fopen((baseVmapsPath + "GameObjectModels.list").c_str(), "wb"); + if (!modelList) + { + printf("Could not create file vmaps/GameObjectModels.list, please make sure that you have the write permissions in the folder\n"); + return; + } + + DBC* dbc = MPQHandler->GetDBC("GameObjectDisplayInfo"); + for (std::vector::iterator itr = dbc->Records.begin(); itr != dbc->Records.end(); ++itr) + { + std::string path = (*itr)->GetString(1); + std::string fileName = Utils::GetPlainName(path.c_str()); + std::string extension = Utils::GetExtension(fileName); + // Convert the extension to lowercase + std::transform(extension.begin(), extension.end(), extension.begin(), ::tolower); + if (extension == "mdx" || extension == "m2") + { + fileName = Utils::FixModelPath(fileName); + Model model(path); + + if (model.IsBad) + continue; + + FILE* output = fopen((baseBuildingsPath + fileName).c_str(), "wb"); + if (!output) + { + printf("Could not create file %s, please check that you have write permissions\n", (baseBuildingsPath + fileName).c_str()); + continue; + } + // Placeholder for 0 values + int Nop[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; + + fwrite(Constants::VMAPMagic, 8, 1, output); + uint32 numVerts = model.Header.CountBoundingVertices; + fwrite(&numVerts, sizeof(uint32), 1, output); + uint32 numGroups = 1; + fwrite(&numGroups, sizeof(uint32), 1, output); + fwrite(Nop, 4 * 3 , 1, output); // rootwmoid, flags, groupid + fwrite(Nop, sizeof(float), 3 * 2, output);//bbox, only needed for WMO currently + fwrite(Nop, 4, 1, output);// liquidflags + fwrite("GRP ", 4, 1, output); + + uint32 branches = 1; + uint32 wsize = sizeof(branches) + sizeof(uint32) * branches; + fwrite(&wsize, sizeof(uint32), 1, output); + fwrite(&branches, sizeof(branches), 1, output); + uint32 numTris = model.Header.CountBoundingTriangles; + fwrite(&numTris, sizeof(uint32), 1, output); + fwrite("INDX", 4, 1, output); + wsize = sizeof(uint32) + sizeof(unsigned short) * numTris; + fwrite(&wsize, sizeof(int), 1, output); + fwrite(&numTris, sizeof(uint32), 1, output); + uint16* indices = new uint16[numTris]; + + if (numTris > 0) + { + uint32 i = 0; + for (std::vector >::iterator itr2 = model.Triangles.begin(); itr2 != model.Triangles.end(); ++itr2, ++i) + { + indices[i * 3 + 0] = itr2->V0; + indices[i * 3 + 1] = itr2->V1; + indices[i * 3 + 2] = itr2->V2; + } + fwrite(indices, sizeof(uint16), numTris, output); + } + + + fwrite("VERT", 4, 1, output); + wsize = sizeof(int) + sizeof(float) * 3 * numVerts; + fwrite(&wsize, sizeof(int), 1, output); + fwrite(&numVerts, sizeof(int), 1, output); + float* vertices = new float[numVerts*3]; + + if (numVerts > 0) + { + uint32 i = 0; + for (std::vector::iterator itr2 = model.Vertices.begin(); itr2 != model.Vertices.end(); ++itr2, ++i) + { + vertices[i * 3 + 0] = itr2->x; + vertices[i * 3 + 1] = itr2->y; + vertices[i * 3 + 2] = itr2->z; + } + + fwrite(vertices, sizeof(float), numVerts * 3, output); + } + + fclose(output); + delete[] indices; + delete[] vertices; + } + else if (extension == "wmo") + { + //WorldModelRoot model(path); + } + } + + printf("GameObject models extraction finished!"); + Constants::ToWoWCoords = false; +} + bool HandleArgs(int argc, char** argv, uint32& threads, std::set& mapList, bool& debugOutput, uint32& extractFlags) { char* param = NULL; @@ -141,7 +252,7 @@ void PrintUsage() printf("- %u to extract DBCs\n", Constants::EXTRACT_FLAG_DBC); printf("- %u to extract Maps (Not yet implemented)\n", Constants::EXTRACT_FLAG_MAPS); printf("- %u to extract VMaps (Not yet implemented)\n", Constants::EXTRACT_FLAG_VMAPS); - printf("- %u to extract GameObject models (Not yet implemented)\n", Constants::EXTRACT_FLAG_GOB_MODELS); + printf("- %u to extract GameObject models (Not yet finished)\n", Constants::EXTRACT_FLAG_GOB_MODELS); printf("- %u to extract MMaps (Not yet finished)\n", Constants::EXTRACT_FLAG_MMAPS); } } @@ -149,9 +260,6 @@ void PrintUsage() int main(int argc, char* argv[]) { system("pause"); - Cache = new CacheClass(); - MPQHandler = new MPQManager(); - MPQHandler->Initialize(); uint32 threads = 4, extractFlags = 0; std::set mapIds; bool debug = false; @@ -162,11 +270,18 @@ int main(int argc, char* argv[]) return -1; } + Cache = new CacheClass(); + MPQHandler = new MPQManager(); + MPQHandler->Initialize(); + if (extractFlags & Constants::EXTRACT_FLAG_DBC) ExtractDBCs(); if (extractFlags & Constants::EXTRACT_FLAG_MMAPS) ExtractMMaps(mapIds, threads, debug); + + if (extractFlags & Constants::EXTRACT_FLAG_GOB_MODELS) + ExtractGameobjectModels(); return 0; } \ No newline at end of file diff --git a/src/tools/mesh_extractor/Model.cpp b/src/tools/mesh_extractor/Model.cpp index a1c67d23f28..10fde0ebc2d 100644 --- a/src/tools/mesh_extractor/Model.cpp +++ b/src/tools/mesh_extractor/Model.cpp @@ -2,9 +2,14 @@ #include "MPQManager.h" #include "Utils.h" -Model::Model( std::string path ) +Model::Model( std::string path ) : IsCollidable(false), IsBad(false) { Stream = MPQHandler->GetFile(Utils::FixModelPath(path)); + if (!Stream) + { + IsBad = true; + return; + } Header.Read(Stream); if (Header.OffsetBoundingNormals > 0 && Header.OffsetBoundingVertices > 0 && Header.OffsetBoundingTriangles > 0 && Header.BoundingRadius > 0.0f) @@ -16,26 +21,36 @@ Model::Model( std::string path ) } } +Model::~Model() +{ + if (Stream) + fclose(Stream); +} + void Model::ReadVertices( FILE* stream ) { fseek(stream, Header.OffsetBoundingVertices, SEEK_SET); Vertices.reserve(Header.CountBoundingVertices); - for (int i = 0; i < Header.CountBoundingVertices; ++i) - Vertices[i] = Vector3::Read(stream); + for (uint32 i = 0; i < Header.CountBoundingVertices; ++i) + { + Vertices.push_back(Vector3::Read(stream)); + if (Constants::ToWoWCoords) + Vertices[i] = Utils::ToWoWCoords(Vertices[i]); + } } void Model::ReadBoundingTriangles( FILE* stream ) { fseek(stream, Header.OffsetBoundingTriangles, SEEK_SET); Triangles.reserve(Header.CountBoundingTriangles / 3); - for (int i = 0; i < Header.CountBoundingTriangles / 3; i++) + for (uint32 i = 0; i < Header.CountBoundingTriangles / 3; i++) { Triangle tri; tri.Type = Constants::TRIANGLE_TYPE_DOODAD; fread(&tri.V0, sizeof(uint16), 1, stream); fread(&tri.V1, sizeof(uint16), 1, stream); fread(&tri.V2, sizeof(uint16), 1, stream); - Triangles[i] = tri; + Triangles.push_back(tri); } } @@ -43,7 +58,7 @@ void Model::ReadBoundingNormals( FILE* stream ) { fseek(stream, Header.OffsetBoundingNormals, SEEK_SET); Normals.reserve(Header.CountBoundingNormals); - for (int i = 0; i < Header.CountBoundingNormals; i++) - Normals[i] = Vector3::Read(stream); + for (uint32 i = 0; i < Header.CountBoundingNormals; i++) + Normals.push_back(Vector3::Read(stream)); } diff --git a/src/tools/mesh_extractor/Model.h b/src/tools/mesh_extractor/Model.h index a5b8338461d..ea9331e7c30 100644 --- a/src/tools/mesh_extractor/Model.h +++ b/src/tools/mesh_extractor/Model.h @@ -7,6 +7,7 @@ class Model { public: Model(std::string path); + ~Model(); void ReadVertices(FILE* stream); void ReadBoundingTriangles(FILE* stream); @@ -17,5 +18,6 @@ public: std::vector > Triangles; bool IsCollidable; FILE* Stream; + bool IsBad; }; #endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/ObjectDataHandler.cpp b/src/tools/mesh_extractor/ObjectDataHandler.cpp index 3ed2ee49604..789efc6d62c 100644 --- a/src/tools/mesh_extractor/ObjectDataHandler.cpp +++ b/src/tools/mesh_extractor/ObjectDataHandler.cpp @@ -11,7 +11,7 @@ void ObjectDataHandler::ProcessMapChunk( MapChunk* chunk ) int32 firstIndex = Source->ObjectData->GetFirstIndex("MCNK"); if (firstIndex == -1) return; - if (firstIndex + chunk->Index > Source->ObjectData->Chunks.size()) + if (uint32(firstIndex + chunk->Index) > Source->ObjectData->Chunks.size()) return; Chunk* ourChunk = Source->ObjectData->Chunks[firstIndex + chunk->Index]; if (ourChunk->Length == 0) diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 5b3e181713e..12213b16373 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -88,9 +88,9 @@ uint8* TileBuilder::Build(bool dbg, dtNavMeshParams& navMeshParams) char buff[100]; sprintf(buff, "mmaps/%s_%02u%02u.obj", World.c_str(), Y, X); FILE* debug = fopen(buff, "wb"); - for (int i = 0; i < _Geometry->Vertices.size(); ++i) + for (uint32 i = 0; i < _Geometry->Vertices.size(); ++i) fprintf(debug, "v %f %f %f\n", _Geometry->Vertices[i].x, _Geometry->Vertices[i].y, _Geometry->Vertices[i].z); - for (int i = 0; i < _Geometry->Triangles.size(); ++i) + for (uint32 i = 0; i < _Geometry->Triangles.size(); ++i) fprintf(debug, "f %i %i %i\n", _Geometry->Triangles[i].V0 + 1, _Geometry->Triangles[i].V1 + 1, _Geometry->Triangles[i].V2 + 1); fclose(debug); } diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp index 5b752885d17..5fccd319554 100644 --- a/src/tools/mesh_extractor/Utils.cpp +++ b/src/tools/mesh_extractor/Utils.cpp @@ -19,6 +19,8 @@ const float Constants::UnitSize = Constants::ChunkSize / 8.0f; const float Constants::Origin[] = { -Constants::MaxXY, 0.0f, -Constants::MaxXY }; const float Constants::PI = 3.1415926f; const float Constants::MaxStandableHeight = 1.5f; +const char* Constants::VMAPMagic = "VMAP042"; +bool Constants::ToWoWCoords = false; void Utils::CreateDir( const std::string& Path ) { @@ -219,6 +221,21 @@ void Utils::SaveToDisk( FILE* stream, std::string path ) delete data; } +Vector3 Utils::ToWoWCoords( Vector3 vec ) +{ + return Vector3(vec.x, -vec.z, vec.y); +} + +std::string Utils::GetExtension( std::string path ) +{ + std::string::size_type idx = path.rfind('.'); + std::string extension = ""; + + if(idx != std::string::npos) + extension = path.substr(idx+1); + return extension; +} + void MapChunkHeader::Read(FILE* stream) { fread(&Flags, sizeof(uint32), 1, stream); @@ -308,16 +325,6 @@ void ModelHeader::Read(FILE* stream) fread(&OffsetTransLookup, sizeof(uint32), 1, stream); fread(&CountUvAnimLookup, sizeof(uint32), 1, stream); fread(&OffsetUvAnimLookup, sizeof(uint32), 1, stream); - fread(&CountColors, sizeof(uint32), 1, stream); - fread(&OffsetColors, sizeof(uint32), 1, stream); - fread(&CountTextures, sizeof(uint32), 1, stream); - fread(&OffsetTextures, sizeof(uint32), 1, stream); - fread(&CountTransparency, sizeof(uint32), 1, stream); - fread(&OffsetTransparency, sizeof(uint32), 1, stream); - fread(&CountUvAnimation, sizeof(uint32), 1, stream); - fread(&OffsetUvAnimation, sizeof(uint32), 1, stream); - fread(&CountTexReplace, sizeof(uint32), 1, stream); - fread(&OffsetTexReplace, sizeof(uint32), 1, stream); VertexBox[0] = Vector3::Read(stream); VertexBox[1] = Vector3::Read(stream); fread(&VertexRadius, sizeof(float), 1, stream); @@ -468,3 +475,12 @@ H2OInformation H2OInformation::Read(FILE* stream) fread(&ret.OffsetHeightmap, sizeof(uint32), 1, stream); return ret; } + +char* Utils::GetPlainName(const char* FileName) +{ + char* temp; + + if((temp = (char*)strrchr(FileName, '\\')) != NULL) + FileName = temp + 1; + return (char*)FileName; +} \ No newline at end of file diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index c19bc1bb29c..47a6354d3b2 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -351,5 +351,8 @@ public: static G3D::Matrix4 GetWmoDoodadTransformation( DoodadInstance inst, WorldModelDefinition root ); static void CreateDir( const std::string& Path ); static void SaveToDisk(FILE* stream, std::string path); + static Vector3 ToWoWCoords( Vector3 vec ); + static std::string GetExtension( std::string path ); + static char* GetPlainName(const char* FileName); }; #endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/WorldModelGroup.cpp b/src/tools/mesh_extractor/WorldModelGroup.cpp index bd0d106dabb..c7e6f0c525e 100644 --- a/src/tools/mesh_extractor/WorldModelGroup.cpp +++ b/src/tools/mesh_extractor/WorldModelGroup.cpp @@ -37,7 +37,7 @@ void WorldModelGroup::ReadNormals() Normals.reserve(normalCount); FILE* stream = chunk->GetStream(); for (uint32 i = 0; i < normalCount; i++) - Normals[i] = Vector3::Read(stream); + Normals.push_back(Vector3::Read(stream)); } void WorldModelGroup::ReadLiquid() From e31e251fda42f97844ad74892d364deb424a10b7 Mon Sep 17 00:00:00 2001 From: Subv Date: Thu, 4 Oct 2012 20:53:54 -0500 Subject: [PATCH 087/204] Tools/MeshExtractor: More progress on extracting GameObject models --- src/tools/mesh_extractor/MeshExtractor.cpp | 53 +++++++++++++++++++- src/tools/mesh_extractor/Utils.cpp | 20 +++++++- src/tools/mesh_extractor/Utils.h | 19 +++++++ src/tools/mesh_extractor/WorldModelGroup.cpp | 27 +++++++--- src/tools/mesh_extractor/WorldModelGroup.h | 11 ++-- 5 files changed, 117 insertions(+), 13 deletions(-) diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index 8eb6ba5cb6e..117a398d5cf 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -170,13 +170,62 @@ void ExtractGameobjectModels() fclose(output); delete[] indices; delete[] vertices; + + uint32 displayId = (*itr)->Values[0]; + uint32 pathLength = fileName.size(); + fwrite(&displayId, sizeof(uint32), 1, modelList); + fwrite(&pathLength, sizeof(uint32), 1, modelList); + fwrite(fileName.c_str(), sizeof(char), pathLength, modelList); } else if (extension == "wmo") { - //WorldModelRoot model(path); + WorldModelRoot model(path); + + FILE* output = fopen((baseBuildingsPath + fileName).c_str(), "wb"); + if (!output) + { + printf("Could not create file %s, please check that you have write permissions\n", (baseBuildingsPath + fileName).c_str()); + continue; + } + + fwrite(Constants::VMAPMagic, 1, 8, output); + uint32 numVertices = 0; + fwrite(&numVertices, sizeof(uint32), 1, output); // will be filled later + fwrite(&model.Header.CountGroups, sizeof(uint32), 1, output); + fwrite(&model.Header.WmoId, sizeof(uint32), 1, output); + + uint32 i = 0; + for (std::vector::iterator itr2 = model.Groups.begin(); itr2 != model.Groups.end(); ++itr2) + { + fwrite(&itr2->Header.Flags, sizeof(uint32), 1, output); + fwrite(&itr2->Header.WmoId, sizeof(uint32), 1, output); + fwrite(&itr2->Header.BoundingBox[0], sizeof(uint32), 1, output); + fwrite(&itr2->Header.BoundingBox[1], sizeof(uint32), 1, output); + uint32 LiquidFlags = itr2->HasLiquidData ? 1 : 0; + fwrite(&LiquidFlags, sizeof(uint32), 1, output); + + fwrite("GRP ", sizeof(char), 4, output); + uint32 k = 0; + uint32 mobaBatch = itr2->MOBALength / 12; + uint32* MobaEx = new uint32[mobaBatch*4]; + + for(uint32 i = 8; i < itr2->MOBALength; i += 12) + MobaEx[k++] = itr2->MOBA[i]; + + int mobaSizeGrp = mobaBatch * 4 + 4; + fwrite(&mobaSizeGrp, 4, 1, output); + fwrite(&mobaBatch, 4, 1, output); + fwrite(MobaEx, 4, k, output); + delete[] MobaEx; + + // Note: still not finished + } + + fclose(output); } } + fclose(modelList); printf("GameObject models extraction finished!"); Constants::ToWoWCoords = false; } @@ -252,7 +301,7 @@ void PrintUsage() printf("- %u to extract DBCs\n", Constants::EXTRACT_FLAG_DBC); printf("- %u to extract Maps (Not yet implemented)\n", Constants::EXTRACT_FLAG_MAPS); printf("- %u to extract VMaps (Not yet implemented)\n", Constants::EXTRACT_FLAG_VMAPS); - printf("- %u to extract GameObject models (Not yet finished)\n", Constants::EXTRACT_FLAG_GOB_MODELS); + printf("- %u to extract GameObject models (Not yet finished, you need to run VMapAssembler on the extracted files)\n", Constants::EXTRACT_FLAG_GOB_MODELS); printf("- %u to extract MMaps (Not yet finished)\n", Constants::EXTRACT_FLAG_MMAPS); } } diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp index 4414a02d681..b1b054e942e 100644 --- a/src/tools/mesh_extractor/Utils.cpp +++ b/src/tools/mesh_extractor/Utils.cpp @@ -483,4 +483,22 @@ char* Utils::GetPlainName(const char* FileName) if((temp = (char*)strrchr(FileName, '\\')) != NULL) FileName = temp + 1; return (char*)FileName; -} \ No newline at end of file +} + +WMOGroupHeader WMOGroupHeader::Read( FILE* stream ) +{ + WMOGroupHeader ret; + fread(&ret.OffsetGroupName, sizeof(uint32), 1, stream); + fread(&ret.OffsetDescriptiveName, sizeof(uint32), 1, stream); + fread(&ret.Flags, sizeof(uint32), 1, stream); + ret.BoundingBox[0] = Vector3::Read(stream); + ret.BoundingBox[1] = Vector3::Read(stream); + fread(&ret.OffsetPortals, sizeof(uint32), 1, stream); + fread(&ret.CountPortals, sizeof(uint32), 1, stream); + fread(&ret.CountBatches, sizeof(uint16), 4, stream); + fread(&ret.Fogs, sizeof(uint8), 4, stream); + fread(&ret.LiquidTypeRelated, sizeof(uint32), 1, stream); + fread(&ret.WmoId, sizeof(uint32), 1, stream); + + return ret; +} diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index 47a6354d3b2..c5dd04fde06 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -289,6 +289,25 @@ public: static H2OInformation Read(FILE* stream); }; +class WMOGroupHeader +{ +public: + WMOGroupHeader() {} + + uint32 OffsetGroupName; + uint32 OffsetDescriptiveName; + uint32 Flags; + Vector3 BoundingBox[2]; + uint32 OffsetPortals; + uint32 CountPortals; + uint16 CountBatches[4]; + uint8 Fogs[4]; + uint32 LiquidTypeRelated; + uint32 WmoId; + + static WMOGroupHeader Read(FILE* stream); +}; + // Dummy class to act as an interface. class IDefinition { diff --git a/src/tools/mesh_extractor/WorldModelGroup.cpp b/src/tools/mesh_extractor/WorldModelGroup.cpp index c7e6f0c525e..35a5ba69782 100644 --- a/src/tools/mesh_extractor/WorldModelGroup.cpp +++ b/src/tools/mesh_extractor/WorldModelGroup.cpp @@ -1,8 +1,9 @@ #include "WorldModelGroup.h" #include "ChunkedData.h" #include "Chunk.h" +#include "Utils.h" -WorldModelGroup::WorldModelGroup( std::string path, int groupIndex ) : GroupIndex(groupIndex), IsBad(false) +WorldModelGroup::WorldModelGroup( std::string path, int groupIndex ) : GroupIndex(groupIndex), IsBad(false), MOBA(NULL) { Data = new ChunkedData(path); if (!Data->Stream) @@ -14,16 +15,20 @@ WorldModelGroup::WorldModelGroup( std::string path, int groupIndex ) : GroupInde int32 firstSub = mainChunk->FindSubChunkOffset("MOPY"); if (firstSub == -1) return; + + Name = Utils::GetPlainName(path.c_str()); + FILE* stream = mainChunk->GetStream(); fseek(stream, firstSub, SEEK_SET); SubData = new ChunkedData(stream, mainChunk->Length - firstSub); - ReadBoundingBox(); + ReadHeader(); ReadMaterials(); ReadTriangles(); ReadVertices(); ReadNormals(); ReadLiquid(); + ReadBatches(); } void WorldModelGroup::ReadNormals() @@ -108,15 +113,23 @@ void WorldModelGroup::ReadMaterials() } } -void WorldModelGroup::ReadBoundingBox() +void WorldModelGroup::ReadHeader() { Chunk* chunk = Data->GetChunkByName("MOGP"); if (!chunk) return; FILE* stream = chunk->GetStream(); - fseek(stream, 8, SEEK_CUR); - fread(&Flags, sizeof(uint32), 1, stream); - BoundingBox[0] = Vector3::Read(stream); - BoundingBox[1] = Vector3::Read(stream); + Header = WMOGroupHeader::Read(stream); +} + +void WorldModelGroup::ReadBatches() +{ + Chunk* chunk = Data->GetChunkByName("MOBA"); + if (!chunk) + return; + + MOBALength = chunk->Length / 2; + MOBA = new uint16[MOBALength]; + fread(MOBA, sizeof(uint16), MOBALength, chunk->GetStream()); } diff --git a/src/tools/mesh_extractor/WorldModelGroup.h b/src/tools/mesh_extractor/WorldModelGroup.h index 1dc754d0221..e4fe34cbc75 100644 --- a/src/tools/mesh_extractor/WorldModelGroup.h +++ b/src/tools/mesh_extractor/WorldModelGroup.h @@ -10,13 +10,17 @@ public: ChunkedData* Data; ChunkedData* SubData; int GroupIndex; - Vector3 BoundingBox[2]; - uint32 Flags; + std::string Name; + WMOGroupHeader Header; + std::vector TriangleFlags; std::vector TriangleMaterials; std::vector > Triangles; std::vector Vertices; std::vector Normals; + // @ToDo: Research. + uint16* MOBA; + uint32 MOBALength; bool HasLiquidData; bool IsBad; @@ -28,6 +32,7 @@ private: void ReadVertices(); void ReadTriangles(); void ReadMaterials(); - void ReadBoundingBox(); + void ReadHeader(); + void ReadBatches(); }; #endif \ No newline at end of file From 509c8d0baefa7d8e0edbca5c9f1bb2c0d81149a4 Mon Sep 17 00:00:00 2001 From: Subv Date: Thu, 4 Oct 2012 20:59:59 -0500 Subject: [PATCH 088/204] Tools/MeshExtractor: Fixed build --- src/tools/mesh_extractor/MeshExtractor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index 117a398d5cf..accccf4460f 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -252,9 +252,9 @@ bool HandleArgs(int argc, char** argv, uint32& threads, std::set& mapLis if (!param) return false; std::string maps = std::string(param); - Tokens tokens(maps, ','); + Tokenizer tokens(maps, ','); - for (Tokens::iterator itr = tokens.begin(); itr != tokens.end(); ++itr) + for (Tokenizer::const_iterator itr = tokens.begin(); itr != tokens.end(); ++itr) mapList.insert(atoi(*itr)); printf("Extracting only provided list of maps (%u).\n", mapList.size()); From 19d7f68592d653067c3b84c3d409e59b2724a85d Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 20 Oct 2012 07:17:11 -0500 Subject: [PATCH 089/204] Tools/MeshExtractor: Changed some things, lots of thanks to Faramir. --- src/tools/mesh_extractor/Constants.h | 17 +- src/tools/mesh_extractor/ContinentBuilder.cpp | 44 ++-- src/tools/mesh_extractor/ContinentBuilder.h | 10 +- src/tools/mesh_extractor/MeshExtractor.cpp | 82 +++++++ src/tools/mesh_extractor/TileBuilder.cpp | 213 ++++++++++-------- src/tools/mesh_extractor/TileBuilder.h | 4 +- src/tools/mesh_extractor/Utils.cpp | 4 + 7 files changed, 256 insertions(+), 118 deletions(-) diff --git a/src/tools/mesh_extractor/Constants.h b/src/tools/mesh_extractor/Constants.h index 89cd6da20a2..54fa073fbef 100644 --- a/src/tools/mesh_extractor/Constants.h +++ b/src/tools/mesh_extractor/Constants.h @@ -32,12 +32,13 @@ public: enum ExtractFlags { - EXTRACT_FLAG_DBC = 1, - EXTRACT_FLAG_MAPS = 2, - EXTRACT_FLAG_VMAPS = 4, - EXTRACT_FLAG_GOB_MODELS = 8, - EXTRACT_FLAG_MMAPS = 16, - EXTRACT_FLAG_ALLOWED = EXTRACT_FLAG_DBC | EXTRACT_FLAG_MAPS | EXTRACT_FLAG_VMAPS | EXTRACT_FLAG_GOB_MODELS | EXTRACT_FLAG_MMAPS + EXTRACT_FLAG_DBC = 0x01, + EXTRACT_FLAG_MAPS = 0x02, + EXTRACT_FLAG_VMAPS = 0x04, + EXTRACT_FLAG_GOB_MODELS = 0x08, + EXTRACT_FLAG_MMAPS = 0x10, + EXTRACT_FLAG_TEST = 0x20, + EXTRACT_FLAG_ALLOWED = EXTRACT_FLAG_DBC | EXTRACT_FLAG_MAPS | EXTRACT_FLAG_VMAPS | EXTRACT_FLAG_GOB_MODELS | EXTRACT_FLAG_MMAPS | EXTRACT_FLAG_TEST }; static const float TileSize; @@ -49,6 +50,10 @@ public: static const float MaxStandableHeight; static bool ToWoWCoords; static const char* VMAPMagic; + static const float BaseUnitDim; + static const int VertexPerMap; + static const int VertexPerTile; + static const int TilesPerMap; }; #endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp index e4a1d2ca9f4..013c0ff256a 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.cpp +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -14,15 +14,16 @@ private: std::string Continent; bool debug; dtNavMeshParams Params; + ContinentBuilder* cBuilder; public: - BuilderThread(bool deb, dtNavMeshParams& params) : Free(true), debug(deb), Params(params) {} + BuilderThread(ContinentBuilder* _cBuilder, bool deb, dtNavMeshParams& params) : Free(true), debug(deb), Params(params), cBuilder(_cBuilder) {} void SetData(int x, int y, int map, std::string cont) { X = x; Y = y; MapId = map; Continent = cont; } int svc() { Free = false; printf("[%02i,%02i] Building tile\n", X, Y); - TileBuilder builder(Continent, X, Y, MapId); + TileBuilder builder(cBuilder, Continent, X, Y, MapId); char buff[100]; sprintf(buff, "mmaps/%03u%02u%02u.mmtile", MapId, Y, X); FILE* f = fopen(buff, "r"); @@ -57,7 +58,7 @@ public: bool Free; }; -void getTileBounds(uint32 tileX, uint32 tileY, float* verts, int vertCount, float* bmin, float* bmax) +void ContinentBuilder::getTileBounds(uint32 tileX, uint32 tileY, float* verts, int vertCount, float* bmin, float* bmax) { // this is for elevation if (verts && vertCount) @@ -75,6 +76,19 @@ void getTileBounds(uint32 tileX, uint32 tileY, float* verts, int vertCount, floa bmin[2] = bmax[2] - Constants::TileSize; } +void ContinentBuilder::CalculateTileBounds() +{ + for (std::vector::iterator itr = TileMap->TileTable.begin(); itr != TileMap->TileTable.end(); ++itr) + { + tileXMax = std::max(itr->X, tileXMax); + tileXMin = std::min(itr->X, tileXMin); + + tileYMax = std::max(itr->Y, tileYMax); + tileYMin = std::min(itr->Y, tileYMin); + } + getTileBounds(tileXMax, tileYMax, NULL, 0, bmin, bmax); +} + void ContinentBuilder::Build(bool debug) { char buff[50]; @@ -86,33 +100,19 @@ void ContinentBuilder::Build(bool debug) return; } - int tileXMin = 64, tileYMin = 64, tileXMax = 0, tileYMax = 0; - for (std::vector::iterator itr = TileMap->TileTable.begin(); itr != TileMap->TileTable.end(); ++itr) - { - tileXMax = std::max(itr->X, tileXMax); - tileXMin = std::min(itr->X, tileXMin); - - tileYMax = std::max(itr->Y, tileYMax); - tileYMin = std::min(itr->Y, tileYMin); - } - - float bmin[3], bmax[3]; - getTileBounds(tileXMax, tileYMax, NULL, 0, bmin, bmax); - + CalculateTileBounds(); + dtNavMeshParams params; - params.maxPolys = 32768; + params.maxPolys = 1 << STATIC_POLY_BITS; params.maxTiles = TileMap->TileTable.size(); - // rcVcopy(params.orig, bmin); - params.orig[0] = Constants::Origin[0]; - params.orig[1] = 0; - params.orig[2] = Constants::Origin[2]; + rcVcopy(params.orig, bmin); params.tileHeight = Constants::TileSize; params.tileWidth = Constants::TileSize; fwrite(¶ms, sizeof(dtNavMeshParams), 1, mmap); fclose(mmap); std::vector Threads; for (uint32 i = 0; i < NumberOfThreads; ++i) - Threads.push_back(new BuilderThread(debug, params)); + Threads.push_back(new BuilderThread(this, debug, params)); printf("Map %s ( %i ) has %i tiles. Building them with %i threads\n", Continent.c_str(), MapId, TileMap->TileTable.size(), NumberOfThreads); for (std::vector::iterator itr = TileMap->TileTable.begin(); itr != TileMap->TileTable.end(); ++itr) { diff --git a/src/tools/mesh_extractor/ContinentBuilder.h b/src/tools/mesh_extractor/ContinentBuilder.h index c923498fc5e..4c16fa0727e 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.h +++ b/src/tools/mesh_extractor/ContinentBuilder.h @@ -7,12 +7,20 @@ class ContinentBuilder { public: - ContinentBuilder(std::string continent, uint32 mapId, WDT* wdt, uint32 tn) : MapId(mapId), Continent(continent), TileMap(wdt), NumberOfThreads(tn) {} + ContinentBuilder(std::string continent, uint32 mapId, WDT* wdt, uint32 tn) : MapId(mapId), Continent(continent), TileMap(wdt), NumberOfThreads(tn), tileXMin(64), tileYMin(64), tileXMax(0), tileYMax(0) {} void Build(bool debug); + void getTileBounds(uint32 tileX, uint32 tileY, float* verts, int vertCount, float* bmin, float* bmax); + void CalculateTileBounds(); + float bmin[3]; + float bmax[3]; private: std::string Continent; WDT* TileMap; uint32 MapId; uint32 NumberOfThreads; + int tileXMin; + int tileYMin; + int tileXMax; + int tileYMax; }; #endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index accccf4460f..7379ba87117 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -6,6 +6,10 @@ #include "Constants.h" #include "Model.h" +#include "Recast.h" +#include "DetourNavMesh.h" +#include "DetourNavMeshQuery.h" + #include #include "Common.h" @@ -306,6 +310,19 @@ void PrintUsage() } } +void LoadTile(dtNavMesh*& navMesh, const char* tile) +{ + FILE* f = fopen(tile, "rb"); + MmapTileHeader header; + fread(&header, sizeof(MmapTileHeader), 1, f); + uint8* nav = new uint8[header.size]; + fread(nav, header.size, 1, f); + + dtStatus res = navMesh->addTile(nav, header.size, DT_TILE_FREE_DATA, 0, NULL); + + fclose(f); +} + int main(int argc, char* argv[]) { system("pause"); @@ -331,6 +348,71 @@ int main(int argc, char* argv[]) if (extractFlags & Constants::EXTRACT_FLAG_GOB_MODELS) ExtractGameobjectModels(); + + if (extractFlags & Constants::EXTRACT_FLAG_TEST) + { + float start[] = { 0.0f, 0.0f, 0.0f }; + float end[] = { 0.0f, 0.0f, 0.0f }; + + // + float m_spos[3]; + m_spos[0] = -1.0f * start[1]; + m_spos[1] = start[2]; + m_spos[2] = -1.0f * start[0]; + + // + float m_epos[3]; + m_epos[0] = -1.0f * end[1]; + m_epos[1] = end[2]; + m_epos[2] = -1.0f * end[0]; + + // + dtQueryFilter m_filter; + m_filter.setIncludeFlags(0xffff) ; + m_filter.setExcludeFlags(0); + + // + float m_polyPickExt[3]; + m_polyPickExt[0] = 2; + m_polyPickExt[1] = 4; + m_polyPickExt[2] = 2; + + // + dtPolyRef m_startRef; + dtPolyRef m_endRef; + + FILE* mmap = fopen(".mmap", "rb"); + dtNavMeshParams params; + fread(¶ms, sizeof(dtNavMeshParams), 1, mmap); + fclose(mmap); + + dtNavMesh* navMesh = new dtNavMesh(); + dtNavMeshQuery* navMeshQuery = new dtNavMeshQuery(); + + navMesh->init(¶ms); + LoadTile(navMesh, ".mmtile"); + LoadTile(navMesh, ".mmtile"); + LoadTile(navMesh, ".mmtile"); + LoadTile(navMesh, ".mmtile"); + LoadTile(navMesh, ".mmtile"); + LoadTile(navMesh, ".mmtile"); + + navMeshQuery->init(navMesh, 2048); + + float nearestPt[3]; + + dtStatus status = navMeshQuery->findNearestPoly(m_spos, m_polyPickExt, &m_filter, &m_startRef, nearestPt); + status = navMeshQuery->findNearestPoly(m_epos, m_polyPickExt, &m_filter, &m_endRef, nearestPt); + + // + if ( !m_startRef || !m_endRef ) + { + std::cerr << "Could not find any nearby poly's (" << m_startRef << "," << m_endRef << ")" << std::endl; + return 0; + } + + printf("Found!"); + } return 0; } \ No newline at end of file diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 12213b16373..2a02bc50cd4 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -1,3 +1,4 @@ +#include "ContinentBuilder.h" #include "TileBuilder.h" #include "Geometry.h" #include "Constants.h" @@ -11,8 +12,10 @@ #include "ace/Synch.h" -TileBuilder::TileBuilder(std::string world, int x, int y, uint32 mapId) : _Geometry(NULL), World(world), X(x), Y(y), MapId(mapId), DataSize(0) +TileBuilder::TileBuilder(ContinentBuilder* _cBuilder, std::string world, int x, int y, uint32 mapId) : _Geometry(NULL), World(world), X(x), Y(y), MapId(mapId), DataSize(0), cBuilder(_cBuilder) { + /* + Test, non-working values // Cell Size = TileSize / TileVoxelSize // 1800 = TileVoxelSize Config.cs = Constants::TileSize / 1800; @@ -35,6 +38,26 @@ TileBuilder::TileBuilder(std::string world, int x, int y, uint32 mapId) : _Geome Config.height = 1800 + Config.borderSize * 2; Config.maxVertsPerPoly = 6; Config.maxSimplificationError = 1.3f; + */ + + // All are in UNIT metrics! + memset(&Config, 0, sizeof(rcConfig)); + + Config.maxVertsPerPoly = DT_VERTS_PER_POLYGON; + Config.cs = Constants::BaseUnitDim; + Config.ch = Constants::BaseUnitDim; + Config.walkableSlopeAngle = 60.0f; + Config.tileSize = Constants::VertexPerTile; + Config.walkableRadius = 1; + Config.borderSize = Config.walkableRadius + 3; + Config.maxEdgeLen = Constants::VertexPerTile + 1; //anything bigger than tileSize + Config.walkableHeight = 3; + Config.walkableClimb = 2; // keep less than walkableHeight + Config.minRegionArea = rcSqr(60); + Config.mergeRegionArea = rcSqr(50); + Config.maxSimplificationError = 2.0f; // eliminates most jagged edges (tinny polygons) + Config.detailSampleDist = Config.cs * 64; + Config.detailSampleMaxError = Config.ch * 2; Context = new rcContext; } @@ -104,84 +127,101 @@ uint8* TileBuilder::Build(bool dbg, dtNavMeshParams& navMeshParams) _Geometry->Vertices.clear(); _Geometry->Triangles.clear(); - float bbMin[3]; - float bbMax[3]; - // CalculateTileBounds(bbMin, bbMax, navMeshParams); - rcCalcBounds(vertices, numVerts, bbMin, bbMax); - // _Geometry->CalculateMinMaxHeight(bbMin[1], bbMax[1]); + + rcVcopy(Config.bmin, cBuilder->bmin); + rcVcopy(Config.bmax, cBuilder->bmax); + + // this sets the dimensions of the heightfield - should maybe happen before border padding + rcCalcGridSize(Config.bmin, Config.bmax, Config.cs, &Config.width, &Config.height); + + // Initialize per tile config. + rcConfig tileCfg = Config; + tileCfg.width = Config.tileSize + Config.borderSize * 2; + tileCfg.height = Config.tileSize + Config.borderSize * 2; - /*bbMin[0] -= Config.borderSize * Config.cs; - bbMin[2] -= Config.borderSize * Config.cs; - bbMax[0] += Config.borderSize * Config.cs; - bbMax[0] += Config.borderSize * Config.cs;*/ + // merge per tile poly and detail meshes + rcPolyMesh** pmmerge = new rcPolyMesh*[Constants::TilesPerMap * Constants::TilesPerMap]; + rcPolyMeshDetail** dmmerge = new rcPolyMeshDetail*[Constants::TilesPerMap * Constants::TilesPerMap]; + int nmerge = 0; + for (int y = 0; y < Constants::TilesPerMap; ++y) + { + for (int x = 0; x < Constants::TilesPerMap; ++x) + { + // Calculate the per tile bounding box. + tileCfg.bmin[0] = Config.bmin[0] + float(x * Config.tileSize - Config.borderSize) * Config.cs; + tileCfg.bmin[2] = Config.bmin[2] + float(y * Config.tileSize - Config.borderSize) * Config.cs; + tileCfg.bmax[0] = Config.bmin[0] + float((x + 1) * Config.tileSize + Config.borderSize) * Config.cs; + tileCfg.bmax[2] = Config.bmin[2] + float((y + 1) * Config.tileSize + Config.borderSize) * Config.cs; + + + rcHeightfield* hf = rcAllocHeightfield(); + rcCreateHeightfield(Context, *hf, tileCfg.width, tileCfg.height, tileCfg.bmin, tileCfg.bmax, tileCfg.cs, tileCfg.ch); + rcClearUnwalkableTriangles(Context, tileCfg.walkableSlopeAngle, vertices, numVerts, triangles, numTris, areas); + rcRasterizeTriangles(Context, vertices, numVerts, triangles, areas, numTris, *hf, Config.walkableClimb); - rcHeightfield* hf = rcAllocHeightfield(); - int height, width; - rcCalcGridSize(bbMin, bbMax, Config.cs, &width, &height); - printf("Config values: Height: %i, Width: %i. Calculated values: Height: %i, Width: %i\n", Config.height, Config.width, height, width); - rcCreateHeightfield(Context, *hf, width, height, bbMin, bbMax, Config.cs, Config.ch); - rcClearUnwalkableTriangles(Context, Config.walkableSlopeAngle, vertices, numVerts, triangles, numTris, areas); - rcRasterizeTriangles(Context, vertices, numVerts, triangles, areas, numTris, *hf, Config.walkableClimb); + // Once all geometry is rasterized, we do initial pass of filtering to + // remove unwanted overhangs caused by the conservative rasterization + // as well as filter spans where the character cannot possibly stand. + rcFilterLowHangingWalkableObstacles(Context, Config.walkableClimb, *hf); + rcFilterLedgeSpans(Context, tileCfg.walkableHeight, tileCfg.walkableClimb, *hf); + rcFilterWalkableLowHeightSpans(Context, tileCfg.walkableHeight, *hf); - printf("[%02i,%02i] Triangles rasterized!\n", X, Y); + // Compact the heightfield so that it is faster to handle from now on. + // This will result in more cache coherent data as well as the neighbours + // between walkable cells will be calculated. + rcCompactHeightfield* chf = rcAllocCompactHeightfield(); + rcBuildCompactHeightfield(Context, tileCfg.walkableHeight, tileCfg.walkableClimb, *hf, *chf); - // Once all geometry is rasterized, we do initial pass of filtering to - // remove unwanted overhangs caused by the conservative rasterization - // as well as filter spans where the character cannot possibly stand. - rcFilterLowHangingWalkableObstacles(Context, Config.walkableClimb, *hf); - rcFilterLedgeSpans(Context, Config.walkableHeight, Config.walkableClimb, *hf); - rcFilterWalkableLowHeightSpans(Context, Config.walkableHeight, *hf); + rcFreeHeightField(hf); - printf("[%02i,%02i] Filtering done!\n", X, Y); + // Erode the walkable area by agent radius. + rcErodeWalkableArea(Context, Config.walkableRadius, *chf); + // Prepare for region partitioning, by calculating distance field along the walkable surface. + rcBuildDistanceField(Context, *chf); + // Partition the walkable surface into simple regions without holes. + rcBuildRegions(Context, *chf, tileCfg.borderSize, tileCfg.minRegionArea, tileCfg.mergeRegionArea); - // Compact the heightfield so that it is faster to handle from now on. - // This will result in more cache coherent data as well as the neighbours - // between walkable cells will be calculated. - rcCompactHeightfield* chf = rcAllocCompactHeightfield(); - rcBuildCompactHeightfield(Context, Config.walkableHeight, Config.walkableClimb, *hf, *chf); + // Create contours. + rcContourSet* cset = rcAllocContourSet(); + rcBuildContours(Context, *chf, tileCfg.maxSimplificationError, tileCfg.maxEdgeLen, *cset); - rcFreeHeightField(hf); + // Build polygon navmesh from the contours. + rcPolyMesh* pmesh = rcAllocPolyMesh(); + rcBuildPolyMesh(Context, *cset, tileCfg.maxVertsPerPoly, *pmesh); - printf("[%02i,%02i] Heightfield compressed!\n", X, Y); + // Build detail mesh. + rcPolyMeshDetail* dmesh = rcAllocPolyMeshDetail(); + rcBuildPolyMeshDetail(Context, *pmesh, *chf, tileCfg.detailSampleDist, tileCfg.detailSampleMaxError, *dmesh); - // Erode the walkable area by agent radius. - rcErodeWalkableArea(Context, Config.walkableRadius, *chf); - // Prepare for region partitioning, by calculating distance field along the walkable surface. - rcBuildDistanceField(Context, *chf); - // Partition the walkable surface into simple regions without holes. - rcBuildRegions(Context, *chf, Config.borderSize, Config.minRegionArea, Config.mergeRegionArea); + // Free memory + rcFreeCompactHeightfield(chf); + rcFreeContourSet(cset); + + pmmerge[nmerge] = pmesh; + dmmerge[nmerge] = dmesh; + ++nmerge; + } + } - printf("[%02i,%02i] Regions built!\n", X, Y); - - // Create contours. - rcContourSet* cset = rcAllocContourSet(); - rcBuildContours(Context, *chf, Config.maxSimplificationError, Config.maxEdgeLen, *cset); - - // Build polygon navmesh from the contours. rcPolyMesh* pmesh = rcAllocPolyMesh(); - rcBuildPolyMesh(Context, *cset, Config.maxVertsPerPoly, *pmesh); - - printf("[%02i,%02i] Polymesh built!\n", X, Y); - - // Build detail mesh. + rcMergePolyMeshes(Context, pmmerge, nmerge, *pmesh); + rcPolyMeshDetail* dmesh = rcAllocPolyMeshDetail(); - rcBuildPolyMeshDetail(Context, *pmesh, *chf, Config.detailSampleDist, Config.detailSampleMaxError, *dmesh); - - printf("[%02i,%02i] Polymesh detail built!\n", X, Y); - - rcFreeCompactHeightfield(chf); - rcFreeContourSet(cset); - - /* - * Removed with RecastNavigation v292 + rcMergePolyMeshDetails(Context, dmmerge, nmerge, *dmesh); + + delete[] pmmerge; + delete[] dmmerge; + + printf("[%02i,%02i] Meshes merged!\n", X, Y); + // Remove padding from the polymesh data. (Remove this odditity) for (int i = 0; i < pmesh->nverts; ++i) { unsigned short* v = &pmesh->verts[i * 3]; v[0] -= (unsigned short)Config.borderSize; v[2] -= (unsigned short)Config.borderSize; - }*/ + } // Set flags according to area types (e.g. Swim for Water) for (int i = 0; i < pmesh->npolys; i++) @@ -192,14 +232,8 @@ uint8* TileBuilder::Build(bool dbg, dtNavMeshParams& navMeshParams) pmesh->flags[i] = Constants::POLY_FLAG_SWIM; } - // get original bounds - /*float* tilebMin; - float* tilebMax; - CalculateTileBounds(tilebMin, tilebMax, navMeshParams); - tilebMin[1] = bbMin[1]; - tilebMax[1] = bbMax[1];*/ - dtNavMeshCreateParams params; + memset(¶ms, 0, sizeof(params)); // PolyMesh data params.verts = pmesh->verts; params.vertCount = pmesh->nverts; @@ -214,32 +248,39 @@ uint8* TileBuilder::Build(bool dbg, dtNavMeshParams& navMeshParams) params.detailVertsCount = dmesh->nverts; params.detailTris = dmesh->tris; params.detailTriCount = dmesh->ntris; - // Copy bounding box - /*params.bmin[0] = tilebMin[0]; - params.bmin[1] = tilebMin[1]; - params.bmin[2] = tilebMin[2]; - params.bmax[0] = tilebMax[0]; - params.bmax[1] = tilebMax[1]; - params.bmax[2] = tilebMax[2];*/ rcVcopy(params.bmin, pmesh->bmin); rcVcopy(params.bmax, pmesh->bmax); // General settings params.ch = Config.ch; params.cs = Config.cs; - params.walkableClimb = Config.walkableClimb; - params.walkableHeight = Config.walkableHeight; - params.walkableRadius = Config.walkableRadius; - params.tileX = X; - params.tileY = Y; - int _x = (((pmesh->bmin[0] + pmesh->bmax[0]) / 2) - Constants::Origin[0]) / Constants::TileSize; - int _y = (((pmesh->bmin[2] + pmesh->bmax[2]) / 2) - Constants::Origin[2]) / Constants::TileSize; - printf("[%02i,%02i] Generated with TileX: %i and TileY: %i\nbmin[0] %f bmin[1] %f bmin[2] %f bmax[0] %f bmax[1] %f bmax[2] %f\n", X, Y, _x, _y, params.bmin[0], params.bmin[1], params.bmin[2], params.bmax[0], params.bmax[1], params.bmax[2]); - params.buildBvTree = true; - params.tileLayer = 0; + params.walkableClimb = Constants::BaseUnitDim * Config.walkableClimb; + params.walkableHeight = Constants::BaseUnitDim * Config.walkableHeight; + params.walkableRadius = Constants::BaseUnitDim * Config.walkableRadius; + params.tileX = (((cBuilder->bmin[0] + cBuilder->bmax[0]) / 2) - navMeshParams.orig[0]) / Constants::TileSize; + params.tileY = (((cBuilder->bmin[2] + cBuilder->bmax[2]) / 2) - navMeshParams.orig[2]) / Constants::TileSize; + rcVcopy(params.bmin, cBuilder->bmin); + rcVcopy(params.bmax, cBuilder->bmax); + // Offmesh-connection settings params.offMeshConCount = 0; // none for now + + params.tileSize = Constants::VertexPerMap; + if (!params.polyCount || !params.polys || Constants::TilesPerMap * Constants::TilesPerMap == params.polyCount) + { + // we have flat tiles with no actual geometry - don't build those, its useless + // keep in mind that we do output those into debug info + // drop tiles with only exact count - some tiles may have geometry while having less tiles + printf("[%02i,%02i] No polygons to build on tile, skipping.\n", X, Y); + rcFreePolyMesh(pmesh); + rcFreePolyMeshDetail(dmesh); + delete areas; + delete triangles; + delete vertices; + return NULL; + } + int navDataSize; uint8* navData; printf("[%02i,%02i] Creating the navmesh with %i vertices, %i polys, %i triangles!\n", X, Y, pmesh->nverts, pmesh->npolys, dmesh->ntris); @@ -248,13 +289,9 @@ uint8* TileBuilder::Build(bool dbg, dtNavMeshParams& navMeshParams) // Free some memory rcFreePolyMesh(pmesh); rcFreePolyMeshDetail(dmesh); - //delete tilebMax; - //delete tilebMin; delete areas; delete triangles; delete vertices; - //delete bbMax; - //delete bbMin; if (result) { diff --git a/src/tools/mesh_extractor/TileBuilder.h b/src/tools/mesh_extractor/TileBuilder.h index 17d6e48095a..40c96f6ec42 100644 --- a/src/tools/mesh_extractor/TileBuilder.h +++ b/src/tools/mesh_extractor/TileBuilder.h @@ -5,12 +5,13 @@ #include "Geometry.h" +class ContinentBuilder; class WDT; class TileBuilder { public: - TileBuilder(std::string world, int x, int y, uint32 mapId); + TileBuilder(ContinentBuilder* _cBuilder, std::string world, int x, int y, uint32 mapId); ~TileBuilder(); void CalculateTileBounds(float*& bmin, float*& bmax, dtNavMeshParams& navMeshParams); @@ -24,5 +25,6 @@ public: rcContext* Context; Geometry* _Geometry; uint32 DataSize; + ContinentBuilder* cBuilder; }; #endif \ No newline at end of file diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp index b1b054e942e..3639cb88acf 100644 --- a/src/tools/mesh_extractor/Utils.cpp +++ b/src/tools/mesh_extractor/Utils.cpp @@ -21,6 +21,10 @@ const float Constants::PI = 3.1415926f; const float Constants::MaxStandableHeight = 1.5f; const char* Constants::VMAPMagic = "VMAP041"; bool Constants::ToWoWCoords = false; +const float Constants::BaseUnitDim = 0.533333f; +const int Constants::VertexPerMap = (Constants::TileSize / Constants::BaseUnitDim) + 0.5f; +const int Constants::VertexPerTile = 40; +const int Constants::TilesPerMap = Constants::VertexPerMap / Constants::VertexPerTile; void Utils::CreateDir( const std::string& Path ) { From 677ee02b8ea32aad12bce60db7527c60ef76f164 Mon Sep 17 00:00:00 2001 From: kaelima Date: Wed, 7 Nov 2012 16:42:22 +0100 Subject: [PATCH 090/204] Core/Movement: MovementGenerator fixes. - vmap height search in FleeingMovementGenerator and ConfusedMovementGenerator (until we can search for a nearby position properly) Should solve #7704, needs testing - Removed some unused code in CalculatePath and TargetedMovementGenerator. Ty faramir118 - Allow players to charge through slime and lava liquids. Closes #7967 --- .../ConfusedMovementGenerator.cpp | 22 ++-- .../FleeingMovementGenerator.cpp | 26 +++-- .../TargetedMovementGenerator.cpp | 100 +++++++----------- .../TargetedMovementGenerator.h | 3 +- src/server/game/Movement/PathGenerator.cpp | 25 +---- .../game/Movement/Spline/MoveSplineInit.cpp | 2 +- 6 files changed, 79 insertions(+), 99 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index 4c269a1024a..4af5f7b4acb 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -70,18 +70,26 @@ bool ConfusedMovementGenerator::Update(T* unit, const uint32& diff) // start moving unit->AddUnitState(UNIT_STATE_CONFUSED_MOVE); - float x = i_x + 10.0f*((float)rand_norm() - 0.5f); - float y = i_y + 10.0f*((float)rand_norm() - 0.5f); - float z = i_z; + float x = i_x + (4.0f * (float)rand_norm() - 2.0f); + float y = i_y + (4.0f * (float)rand_norm() - 2.0f); - unit->UpdateAllowedPositionZ(x, y, z); + Trinity::NormalizeMapCoord(x); + Trinity::NormalizeMapCoord(y); + + float z = unit->GetBaseMap()->GetHeight(unit->GetPhaseMask(), x, y, 10.0f, true); + + if (z <= INVALID_HEIGHT || fabs(i_z - z) > 10.0f || !unit->IsWithinLOS(x, y, z)) + { + i_nextMoveTime.Reset(100); + return true; + } PathGenerator path(unit); - path.SetPathLengthLimit(30.0f); + path.SetPathLengthLimit(20.0f); bool result = path.CalculatePath(x, y, z); - if (!result || path.GetPathType() & PATHFIND_NOPATH) + if (!result || (path.GetPathType() & PATHFIND_NOPATH)) { - i_nextMoveTime.Reset(urand(800, 1000)); + i_nextMoveTime.Reset(100); // short reset return true; } diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index b8764bd5042..5cdbdb24341 100644 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -39,16 +39,19 @@ void FleeingMovementGenerator::_setTargetLocation(T* owner) float x, y, z; if (!_getPoint(owner, x, y, z)) + { + i_nextCheckTime.Reset(100); return; + } owner->AddUnitState(UNIT_STATE_FLEEING_MOVE); PathGenerator path(owner); - path.SetPathLengthLimit(30.0f); + path.SetPathLengthLimit(20.0f); bool result = path.CalculatePath(x, y, z); - if (!result || path.GetPathType() & PATHFIND_NOPATH) + if (!result || (path.GetPathType() & PATHFIND_NOPATH)) { - i_nextCheckTime.Reset(urand(1000, 1500)); + i_nextCheckTime.Reset(100); return; } @@ -86,7 +89,7 @@ bool FleeingMovementGenerator::_getPoint(T* owner, float &x, float &y, float dist = frand(0.4f, 1.3f)*(MIN_QUIET_DISTANCE - dist_from_caster); angle = angle_to_caster + frand(-static_cast(M_PI)/8, static_cast(M_PI)/8); } - else if(dist_from_caster > MAX_QUIET_DISTANCE) + else if (dist_from_caster > MAX_QUIET_DISTANCE) { dist = frand(0.4f, 1.0f)*(MAX_QUIET_DISTANCE - MIN_QUIET_DISTANCE); angle = -angle_to_caster + frand(-static_cast(M_PI)/4, static_cast(M_PI)/4); @@ -102,9 +105,17 @@ bool FleeingMovementGenerator::_getPoint(T* owner, float &x, float &y, float x = curr_x + dist * std::cos(angle); y = curr_y + dist * std::sin(angle); - z = curr_z; - owner->UpdateAllowedPositionZ(x, y, z); + Trinity::NormalizeMapCoord(x); + Trinity::NormalizeMapCoord(y); + + z = owner->GetBaseMap()->GetHeight(owner->GetPhaseMask(), x, y, 10.0f, true); + + if (z <= INVALID_HEIGHT) + return false; + + if (fabs(curr_z - z) > 10.0f || !owner->IsWithinLOS(x, y, z)) + return false; return true; } @@ -152,6 +163,7 @@ bool FleeingMovementGenerator::Update(T* owner, const uint32& time_diff) { if (!owner || !owner->isAlive()) return false; + if (owner->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED)) { owner->ClearUnitState(UNIT_STATE_FLEEING_MOVE); @@ -159,7 +171,7 @@ bool FleeingMovementGenerator::Update(T* owner, const uint32& time_diff) } i_nextCheckTime.Update(time_diff); - if (i_nextCheckTime.Passed() && owner->movespline->Finalized()) + if (i_nextCheckTime.Passed()) _setTargetLocation(owner); return true; diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 7a6611ed2ca..dc6cc55b855 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -27,7 +27,7 @@ #include "Player.h" template -void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner) +void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner, bool updateDestination) { if (!i_target.isValid() || !i_target->IsInWorld()) return; @@ -40,37 +40,42 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner) float x, y, z; - if (!i_offset) + if (updateDestination || !i_path) { - float dist = 0.0f; - - if (owner->getVictim() && owner->getVictim()->GetGUID() == i_target->GetGUID()) - dist = owner->GetFloatValue(UNIT_FIELD_COMBATREACH) + i_target->GetFloatValue(UNIT_FIELD_COMBATREACH) - i_target->GetObjectSize() - owner->GetObjectSize() - 1.0f; - - if (dist < 0.5f) - dist = 0.5f; - - if (owner->IsWithinLOSInMap(owner->getVictim())) - i_target->GetContactPoint(owner, x, y, z, dist); + if (!i_offset) + { + // to nearest contact position + i_target->GetContactPoint(owner, x, y, z); + } else - i_target->GetPosition(x, y, z); + { + // to at i_offset distance from target and i_angle from target facing + i_target->GetClosePoint(x, y, z, owner->GetObjectSize(), i_offset, i_angle); + } } else { - // to at i_offset distance from target and i_angle from target facing - i_target->GetClosePoint(x, y, z, owner->GetObjectSize(), i_offset, i_angle); + // the destination has not changed, we just need to refresh the path (usually speed change) + G3D::Vector3 end = i_path->GetEndPosition(); + x = end.x; + y = end.y; + z = end.z; } if (!i_path) i_path = new PathGenerator(owner); - // allow pets following their master to cheat while generating paths + // allow pets to use shortcut if no path found when following their master bool forceDest = (owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->isPet() && owner->HasUnitState(UNIT_STATE_FOLLOW)); bool result = i_path->CalculatePath(x, y, z, forceDest); - if (!result || i_path->GetPathType() & PATHFIND_NOPATH) + if (!result || (i_path->GetPathType() & PATHFIND_NOPATH)) + { + // Cant reach target + i_recalculateTravel = true; return; + } D::_addUnitStateMove(owner); i_targetReached = false; @@ -79,37 +84,14 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner) Movement::MoveSplineInit init(owner); init.MovebyPath(i_path->GetPath()); - init.SetFacing(i_target.getTarget()); + if (forceDest && updateDestination) + init.SetFacing(i_target.getTarget()->GetOrientation()); + else + init.SetFacing(i_target.getTarget()); init.SetWalk(((D*)this)->EnableWalking()); init.Launch(); } -template<> -void TargetedMovementGeneratorMedium >::UpdateFinalDistance(float /*fDistance*/) -{ - // nothing to do for Player -} - -template<> -void TargetedMovementGeneratorMedium >::UpdateFinalDistance(float /*fDistance*/) -{ - // nothing to do for Player -} - -template<> -void TargetedMovementGeneratorMedium >::UpdateFinalDistance(float fDistance) -{ - i_offset = fDistance; - i_recalculateTravel = true; -} - -template<> -void TargetedMovementGeneratorMedium >::UpdateFinalDistance(float fDistance) -{ - i_offset = fDistance; - i_recalculateTravel = true; -} - template bool TargetedMovementGeneratorMedium::Update(T* owner, const uint32& time_diff) { @@ -140,6 +122,7 @@ bool TargetedMovementGeneratorMedium::Update(T* owner, const uint32& time_d return true; } + bool targetMoved = false; i_recheckDistance.Update(time_diff); if (i_recheckDistance.Passed()) { @@ -148,16 +131,15 @@ bool TargetedMovementGeneratorMedium::Update(T* owner, const uint32& time_d float allowed_dist = owner->GetCombatReach() + sWorld->getRate(RATE_TARGET_POS_RECALCULATION_RANGE); G3D::Vector3 dest = owner->movespline->FinalDestination(); - bool targetMoved = false; if (owner->GetTypeId() == TYPEID_UNIT && owner->ToCreature()->CanFly()) targetMoved = !i_target->IsWithinDist3d(dest.x, dest.y, dest.z, allowed_dist); else targetMoved = !i_target->IsWithinDist2d(dest.x, dest.y, allowed_dist); - - if (targetMoved || !owner->IsWithinLOSInMap(owner->getVictim())) - _setTargetLocation(owner); } + if (i_recalculateTravel || targetMoved) + _setTargetLocation(owner, targetMoved); + if (owner->movespline->Finalized()) { static_cast(this)->MovementInform(owner); @@ -170,11 +152,7 @@ bool TargetedMovementGeneratorMedium::Update(T* owner, const uint32& time_d static_cast(this)->_reachTarget(owner); } } - else - { - if (i_recalculateTravel) - _setTargetLocation(owner); - } + return true; } @@ -190,7 +168,7 @@ template<> void ChaseMovementGenerator::Initialize(Player* owner) { owner->AddUnitState(UNIT_STATE_CHASE | UNIT_STATE_CHASE_MOVE); - _setTargetLocation(owner); + _setTargetLocation(owner, true); } template<> @@ -198,7 +176,7 @@ void ChaseMovementGenerator::Initialize(Creature* owner) { owner->SetWalk(false); owner->AddUnitState(UNIT_STATE_CHASE | UNIT_STATE_CHASE_MOVE); - _setTargetLocation(owner); + _setTargetLocation(owner, true); } template @@ -262,7 +240,7 @@ void FollowMovementGenerator::Initialize(Player* owner) { owner->AddUnitState(UNIT_STATE_FOLLOW | UNIT_STATE_FOLLOW_MOVE); _updateSpeed(owner); - _setTargetLocation(owner); + _setTargetLocation(owner, true); } template<> @@ -270,7 +248,7 @@ void FollowMovementGenerator::Initialize(Creature* owner) { owner->AddUnitState(UNIT_STATE_FOLLOW | UNIT_STATE_FOLLOW_MOVE); _updateSpeed(owner); - _setTargetLocation(owner); + _setTargetLocation(owner, true); } template @@ -300,10 +278,10 @@ void FollowMovementGenerator::MovementInform(Creature* unit) } //-----------------------------------------------// -template void TargetedMovementGeneratorMedium >::_setTargetLocation(Player*); -template void TargetedMovementGeneratorMedium >::_setTargetLocation(Player*); -template void TargetedMovementGeneratorMedium >::_setTargetLocation(Creature*); -template void TargetedMovementGeneratorMedium >::_setTargetLocation(Creature*); +template void TargetedMovementGeneratorMedium >::_setTargetLocation(Player*, bool); +template void TargetedMovementGeneratorMedium >::_setTargetLocation(Player*, bool); +template void TargetedMovementGeneratorMedium >::_setTargetLocation(Creature*, bool); +template void TargetedMovementGeneratorMedium >::_setTargetLocation(Creature*, bool); template bool TargetedMovementGeneratorMedium >::Update(Player*, const uint32&); template bool TargetedMovementGeneratorMedium >::Update(Player*, const uint32&); template bool TargetedMovementGeneratorMedium >::Update(Creature*, const uint32&); diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h index 064e5bfa1a2..f293d5976af 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h @@ -51,10 +51,9 @@ class TargetedMovementGeneratorMedium : public MovementGeneratorMedium< T, D >, Unit* GetTarget() const { return i_target.getTarget(); } void unitSpeedChanged() { i_recalculateTravel = true; } - void UpdateFinalDistance(float fDistance); bool IsReachable() const { return (i_path) ? (i_path->GetPathType() & PATHFIND_NORMAL) : true; } protected: - void _setTargetLocation(T*); + void _setTargetLocation(T* owner, bool updateDestination); TimeTrackerSmall i_recheckDistance; float i_offset; diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index 3495c4d1218..71617f6a6ab 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -58,7 +58,6 @@ bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool fo if (!Trinity::IsValidMapCoord(destX, destY, destZ) || !Trinity::IsValidMapCoord(x, y, z)) return false; - Vector3 oldDest = GetEndPosition(); Vector3 dest(destX, destY, destZ); SetEndPosition(dest); @@ -81,24 +80,8 @@ bool PathGenerator::CalculatePath(float destX, float destY, float destZ, bool fo UpdateFilter(); - // check if destination moved - if not we can optimize something here - // we are following old, precalculated path? - float dist = _sourceUnit->GetObjectSize(); - if (oldDest != Vector3::zero() && InRange(oldDest, dest, dist, dist) && _pathPoints.size() > 2) - { - // our target is not moving - we just coming closer - // we are moving on precalculated path - enjoy the ride - sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::CalculatePath:: precalculated path\n"); - - _pathPoints.erase(_pathPoints.begin()); - return false; - } - else - { - // target moved, so we need to update the poly path - BuildPolyPath(start, dest); - return true; - } + BuildPolyPath(start, dest); + return true; } dtPolyRef PathGenerator::GetPathPolyByPosition(dtPolyRef const* polyPath, uint32 polyPathSize, float const* point, float* distance) const @@ -534,10 +517,10 @@ void PathGenerator::CreateFilter() if (creature->canSwim()) includeFlags |= (NAV_WATER | NAV_MAGMA | NAV_SLIME); // swim } - else if (_sourceUnit->GetTypeId() == TYPEID_PLAYER) + else // assume Player { // perfect support not possible, just stay 'safe' - includeFlags |= (NAV_GROUND | NAV_WATER); + includeFlags |= (NAV_GROUND | NAV_WATER | NAV_MAGMA | NAV_SLIME); } _filter.setIncludeFlags(includeFlags); diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index 67b019b93f7..b6cd1391ca3 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -98,7 +98,7 @@ namespace Movement if (!args.HasVelocity) args.velocity = unit->GetSpeed(SelectSpeedType(moveFlags)); - if (!args.Validate(&unit)) + if (!args.Validate(unit)) return 0; if (moveFlags & MOVEMENTFLAG_ROOT) From 7249865a12e6483b925fae468bd899b73c190e39 Mon Sep 17 00:00:00 2001 From: rocky517 Date: Mon, 12 Nov 2012 14:43:51 +0200 Subject: [PATCH 091/204] Update src/server/scripts/Commands/cs_mmaps.cpp --- src/server/scripts/Commands/cs_mmaps.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp index c3f757614e2..c17c01adc33 100644 --- a/src/server/scripts/Commands/cs_mmaps.cpp +++ b/src/server/scripts/Commands/cs_mmaps.cpp @@ -96,7 +96,7 @@ public: bool result = path.CalculatePath(x, y, z); PointsArray pointPath = path.GetPath(); - handler->PSendSysMessage("%s's path to %s:", target->GetName(), player->GetName()); + handler->PSendSysMessage("%s's path to %s:", target->GetName().c_str(), player->GetName().c_str()); handler->PSendSysMessage("Building: %s", useStraightPath ? "StraightPath" : "SmoothPath"); handler->PSendSysMessage("Result: %s - Length: %i - Type: %u", (result ? "true" : "false"), pointPath.size(), path.GetPathType()); From 94cca94017d8652ce8efebed15894ea09dedf598 Mon Sep 17 00:00:00 2001 From: kaelima Date: Tue, 13 Nov 2012 15:44:42 +0100 Subject: [PATCH 092/204] Core/Movement: General improvements for confused/fleeing movement --- src/server/game/Movement/MotionMaster.cpp | 4 +- .../ConfusedMovementGenerator.cpp | 37 ++++++------- .../FleeingMovementGenerator.cpp | 52 +++++-------------- .../FleeingMovementGenerator.h | 2 +- 4 files changed, 36 insertions(+), 59 deletions(-) diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index b9cfbdf024f..48f17a0d0c6 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -651,9 +651,9 @@ void MotionMaster::DelayedDelete(_Ty curr) bool MotionMaster::GetDestination(float &x, float &y, float &z) { if (_owner->movespline->Finalized()) - return false; + return false; - const G3D::Vector3& dest = _owner->movespline->FinalDestination(); + G3D::Vector3 const& dest = _owner->movespline->FinalDestination(); x = dest.x; y = dest.y; z = dest.z; diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index 4af5f7b4acb..a8b4d68c802 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -33,16 +33,25 @@ template void ConfusedMovementGenerator::Initialize(T* unit) { - unit->GetPosition(i_x, i_y, i_z); - unit->StopMoving(); + unit->AddUnitState(UNIT_STATE_CONFUSED); unit->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); - unit->AddUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); + unit->GetPosition(i_x, i_y, i_z); + + if (!unit->isAlive() || unit->IsStopped()) + return; + + unit->StopMoving(); + unit->AddUnitState(UNIT_STATE_CONFUSED_MOVE); } template void ConfusedMovementGenerator::Reset(T* unit) { i_nextMoveTime.Reset(0); + + if (!unit->isAlive() || unit->IsStopped()) + return; + unit->StopMoving(); unit->AddUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); } @@ -70,26 +79,18 @@ bool ConfusedMovementGenerator::Update(T* unit, const uint32& diff) // start moving unit->AddUnitState(UNIT_STATE_CONFUSED_MOVE); - float x = i_x + (4.0f * (float)rand_norm() - 2.0f); - float y = i_y + (4.0f * (float)rand_norm() - 2.0f); + float dest = 4.0f * (float)rand_norm() - 2.0f; - Trinity::NormalizeMapCoord(x); - Trinity::NormalizeMapCoord(y); - - float z = unit->GetBaseMap()->GetHeight(unit->GetPhaseMask(), x, y, 10.0f, true); - - if (z <= INVALID_HEIGHT || fabs(i_z - z) > 10.0f || !unit->IsWithinLOS(x, y, z)) - { - i_nextMoveTime.Reset(100); - return true; - } + Position pos; + pos.Relocate(i_x, i_y, i_z); + unit->MovePositionToFirstCollision(pos, dest, 0.0f); PathGenerator path(unit); - path.SetPathLengthLimit(20.0f); - bool result = path.CalculatePath(x, y, z); + path.SetPathLengthLimit(30.0f); + bool result = path.CalculatePath(pos.m_positionX, pos.m_positionY, pos.m_positionZ); if (!result || (path.GetPathType() & PATHFIND_NOPATH)) { - i_nextMoveTime.Reset(100); // short reset + i_nextMoveTime.Reset(100); return true; } diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index 5cdbdb24341..578654ca162 100644 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -37,17 +37,13 @@ void FleeingMovementGenerator::_setTargetLocation(T* owner) if (owner->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED)) return; - float x, y, z; - if (!_getPoint(owner, x, y, z)) - { - i_nextCheckTime.Reset(100); - return; - } - owner->AddUnitState(UNIT_STATE_FLEEING_MOVE); + float x, y, z; + _getPoint(owner, x, y, z); + PathGenerator path(owner); - path.SetPathLengthLimit(20.0f); + path.SetPathLengthLimit(30.0f); bool result = path.CalculatePath(x, y, z); if (!result || (path.GetPathType() & PATHFIND_NOPATH)) { @@ -63,11 +59,8 @@ void FleeingMovementGenerator::_setTargetLocation(T* owner) } template -bool FleeingMovementGenerator::_getPoint(T* owner, float &x, float &y, float &z) +void FleeingMovementGenerator::_getPoint(T* owner, float &x, float &y, float &z) { - if (!owner) - return false; - float dist_from_caster, angle_to_caster; if (Unit* fright = ObjectAccessor::GetUnit(*owner, i_frightGUID)) { @@ -100,24 +93,11 @@ bool FleeingMovementGenerator::_getPoint(T* owner, float &x, float &y, float angle = frand(0, 2*static_cast(M_PI)); } - float curr_x, curr_y, curr_z; - owner->GetPosition(curr_x, curr_y, curr_z); - - x = curr_x + dist * std::cos(angle); - y = curr_y + dist * std::sin(angle); - - Trinity::NormalizeMapCoord(x); - Trinity::NormalizeMapCoord(y); - - z = owner->GetBaseMap()->GetHeight(owner->GetPhaseMask(), x, y, 10.0f, true); - - if (z <= INVALID_HEIGHT) - return false; - - if (fabs(curr_z - z) > 10.0f || !owner->IsWithinLOS(x, y, z)) - return false; - - return true; + Position pos; + owner->GetFirstCollisionPosition(pos, dist, angle); + x = pos.m_positionX; + y = pos.m_positionY; + z = pos.m_positionZ; } template @@ -127,11 +107,7 @@ void FleeingMovementGenerator::Initialize(T* owner) return; owner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); - owner->AddUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE); - - if (owner->GetTypeId() == TYPEID_UNIT) - return; - + owner->AddUnitState(UNIT_STATE_FLEEING | UNIT_STATE_FLEEING_MOVE); _setTargetLocation(owner); } @@ -171,7 +147,7 @@ bool FleeingMovementGenerator::Update(T* owner, const uint32& time_diff) } i_nextCheckTime.Update(time_diff); - if (i_nextCheckTime.Passed()) + if (i_nextCheckTime.Passed() && owner->movespline->Finalized()) _setTargetLocation(owner); return true; @@ -179,8 +155,8 @@ bool FleeingMovementGenerator::Update(T* owner, const uint32& time_diff) template void FleeingMovementGenerator::Initialize(Player*); template void FleeingMovementGenerator::Initialize(Creature*); -template bool FleeingMovementGenerator::_getPoint(Player*, float&, float&, float&); -template bool FleeingMovementGenerator::_getPoint(Creature*, float&, float&, float&); +template void FleeingMovementGenerator::_getPoint(Player*, float&, float&, float&); +template void FleeingMovementGenerator::_getPoint(Creature*, float&, float&, float&); template void FleeingMovementGenerator::_setTargetLocation(Player*); template void FleeingMovementGenerator::_setTargetLocation(Creature*); template void FleeingMovementGenerator::Reset(Player*); diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h index 88dedd31af6..ed1fe85a314 100755 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h @@ -36,7 +36,7 @@ class FleeingMovementGenerator : public MovementGeneratorMedium< T, FleeingMovem private: void _setTargetLocation(T*); - bool _getPoint(T*, float &x, float &y, float &z); + void _getPoint(T*, float &x, float &y, float &z); uint64 i_frightGUID; TimeTracker i_nextCheckTime; From 0fa484793acb1f6b556569ebfc9ce472372d5d78 Mon Sep 17 00:00:00 2001 From: Nay Date: Fri, 23 Nov 2012 23:44:43 +0000 Subject: [PATCH 093/204] Fix a typo in previous merge --- .../Movement/MovementGenerators/TargetedMovementGenerator.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 554e38d7efd..45c7c7c9ab2 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -55,10 +55,10 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner, bool upd // We need to subtract GetObjectSize() because it gets added back further down the chain // and that makes pets too far away. Subtracting it allows pets to properly // be (GetCombatReach() + i_offset) away. - if (owner.isPet()) + if (owner->isPet()) size = i_target->GetCombatReach() - i_target->GetObjectSize(); else - size = owner.GetObjectSize(); + size = owner->GetObjectSize(); // to at i_offset distance from target and i_angle from target facing i_target->GetClosePoint(x, y, z, size, i_offset, i_angle); From 8f27dfda627903997b67cab9ebb4c5b365da201e Mon Sep 17 00:00:00 2001 From: Nay Date: Sat, 24 Nov 2012 23:48:30 +0000 Subject: [PATCH 094/204] Core/SAI: Add more details to an error log --- src/server/game/Conditions/ConditionMgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 2f3cb0fbaaf..5fe81bcf89c 100755 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -1410,7 +1410,7 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) if (cond->ConditionTarget >= cond->GetMaxAvailableConditionTargets()) { - sLog->outError(LOG_FILTER_SQL, "SourceType %u, SourceEntry %u in `condition` table, has incorrect ConditionTarget set, ignoring.", cond->SourceType, cond->SourceEntry); + sLog->outError(LOG_FILTER_SQL, "SourceType %u, SourceEntry %u, SourceGroup %u in `condition` table, has incorrect ConditionTarget set, ignoring.", cond->SourceType, cond->SourceEntry, cond->SourceGroup); return false; } From a0239c2210a49a3b41a764d41d75098e8bb8ffeb Mon Sep 17 00:00:00 2001 From: kaelima Date: Sat, 22 Dec 2012 02:22:44 +0100 Subject: [PATCH 095/204] Fix last merge --- .../TargetedMovementGenerator.cpp | 14 +++++++++++++- src/server/game/Movement/Spline/MoveSpline.h | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 0cb46a11e2e..88eacccd0aa 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -49,16 +49,28 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner, bool upd } else { + float dist; float size; // Pets need special handling. // We need to subtract GetObjectSize() because it gets added back further down the chain // and that makes pets too far away. Subtracting it allows pets to properly // be (GetCombatReach() + i_offset) away. - if (owner->isPet()) + // Only applies when i_target is pet's owner otherwise pets and mobs end up + // doing a "dance" while fighting + if (owner->isPet() && i_target->GetTypeId() == TYPEID_PLAYER) + { + dist = i_target->GetCombatReach(); size = i_target->GetCombatReach() - i_target->GetObjectSize(); + } else + { + dist = i_offset + 1.0f; size = owner->GetObjectSize(); + } + + if (i_target->IsWithinDistInMap(owner, dist)) + return; // to at i_offset distance from target and i_angle from target facing i_target->GetClosePoint(x, y, z, size, i_offset, i_angle); diff --git a/src/server/game/Movement/Spline/MoveSpline.h b/src/server/game/Movement/Spline/MoveSpline.h index edeff668e0c..938466cd475 100644 --- a/src/server/game/Movement/Spline/MoveSpline.h +++ b/src/server/game/Movement/Spline/MoveSpline.h @@ -78,11 +78,11 @@ namespace Movement UpdateResult _updateState(int32& ms_time_diff); int32 next_timestamp() const { return spline.length(point_Idx+1); } int32 segment_time_elapsed() const { return next_timestamp()-time_passed; } - int32 Duration() const { return spline.length(); } int32 timeElapsed() const { return Duration() - time_passed; } int32 timePassed() const { return time_passed; } public: + int32 Duration() const { return spline.length(); } const MySpline& _Spline() const { return spline; } int32 _currentSplineIdx() const { return point_Idx; } void _Finalize(); From 08f62d8313e05ed6eb1767eed07a7e31533e9bb6 Mon Sep 17 00:00:00 2001 From: joschiwald Date: Sun, 30 Dec 2012 21:09:21 +0100 Subject: [PATCH 096/204] Core/MMaps: use DisableMgr to disable pathfinding on a specific map --- .../world/2012_12_30_00_world_commands.sql | 4 +++ .../collision/Management/MMapFactory.cpp | 32 ++----------------- src/server/collision/Management/MMapFactory.h | 1 - src/server/game/Conditions/DisableMgr.cpp | 31 +++++++++++++++++- src/server/game/Conditions/DisableMgr.h | 8 ++++- src/server/game/World/World.cpp | 1 - src/server/scripts/Commands/cs_disable.cpp | 32 +++++++++++++++++++ src/server/worldserver/worldserver.conf.dist | 7 ---- 8 files changed, 75 insertions(+), 41 deletions(-) create mode 100644 sql/updates/world/2012_12_30_00_world_commands.sql diff --git a/sql/updates/world/2012_12_30_00_world_commands.sql b/sql/updates/world/2012_12_30_00_world_commands.sql new file mode 100644 index 00000000000..fffd1a95cb5 --- /dev/null +++ b/sql/updates/world/2012_12_30_00_world_commands.sql @@ -0,0 +1,4 @@ +DELETE FROM `command` WHERE `name` LIKE 'disable add mmap' OR `name` LIKE 'disable remove mmap'; +INSERT INTO `command` (`name`, `security`, `help`) VALUES +('disable add mmap', '3', 'Syntax: .disable add mmap $entry $flag $comment'), +('disable remove mmap', '3', 'Syntax: .disable remove mmap $entry'); diff --git a/src/server/collision/Management/MMapFactory.cpp b/src/server/collision/Management/MMapFactory.cpp index f4b2f3d47e4..0b292b56dca 100644 --- a/src/server/collision/Management/MMapFactory.cpp +++ b/src/server/collision/Management/MMapFactory.cpp @@ -19,7 +19,7 @@ #include "MMapFactory.h" #include "World.h" #include "Config.h" -#include +#include "DisableMgr.h" namespace MMAP { @@ -27,9 +27,6 @@ namespace MMAP // our global singleton copy MMapManager *g_MMapManager = NULL; - // stores list of mapids which do not use pathfinding - std::set* g_mmapDisabledIds = NULL; - MMapManager* MMapFactory::createOrGetMMapManager() { if (g_MMapManager == NULL) @@ -38,39 +35,14 @@ namespace MMAP return g_MMapManager; } - void MMapFactory::preventPathfindingOnMaps(const char* ignoreMapIds) - { - if (!g_mmapDisabledIds) - g_mmapDisabledIds = new std::set(); - - uint32 strLenght = strlen(ignoreMapIds)+1; - char* mapList = new char[strLenght]; - memcpy(mapList, ignoreMapIds, sizeof(char)*strLenght); - - char* idstr = strtok(mapList, ","); - while (idstr) - { - g_mmapDisabledIds->insert(uint32(atoi(idstr))); - idstr = strtok(NULL, ","); - } - - delete[] mapList; - } - bool MMapFactory::IsPathfindingEnabled(uint32 mapId) { return sWorld->getBoolConfig(CONFIG_ENABLE_MMAPS) - && g_mmapDisabledIds->find(mapId) == g_mmapDisabledIds->end(); + && !DisableMgr::IsDisabledFor(DISABLE_TYPE_MMAP, mapId, NULL, MMAP_DISABLE_PATHFINDING); } void MMapFactory::clear() { - if (g_mmapDisabledIds) - { - delete g_mmapDisabledIds; - g_mmapDisabledIds = NULL; - } - if (g_MMapManager) { delete g_MMapManager; diff --git a/src/server/collision/Management/MMapFactory.h b/src/server/collision/Management/MMapFactory.h index ab047333a19..a006aedfa6d 100644 --- a/src/server/collision/Management/MMapFactory.h +++ b/src/server/collision/Management/MMapFactory.h @@ -42,7 +42,6 @@ namespace MMAP public: static MMapManager* createOrGetMMapManager(); static void clear(); - static void preventPathfindingOnMaps(const char* ignoreMapIds); static bool IsPathfindingEnabled(uint32 mapId); }; } diff --git a/src/server/game/Conditions/DisableMgr.cpp b/src/server/game/Conditions/DisableMgr.cpp index b544e966084..c9cef63907e 100644 --- a/src/server/game/Conditions/DisableMgr.cpp +++ b/src/server/game/Conditions/DisableMgr.cpp @@ -42,7 +42,7 @@ namespace DisableMap m_DisableMap; - uint8 MAX_DISABLE_TYPES = 7; + uint8 MAX_DISABLE_TYPES = 8; } void LoadDisables() @@ -222,6 +222,34 @@ void LoadDisables() } break; } + case DISABLE_TYPE_MMAP: + { + MapEntry const* mapEntry = sMapStore.LookupEntry(entry); + if (!mapEntry) + { + sLog->outError(LOG_FILTER_SQL, "Map entry %u from `disables` doesn't exist in dbc, skipped.", entry); + continue; + } + switch (mapEntry->map_type) + { + case MAP_COMMON: + sLog->outInfo(LOG_FILTER_GENERAL, "Pathfinding disabled for world map %u.", entry); + break; + case MAP_INSTANCE: + case MAP_RAID: + sLog->outInfo(LOG_FILTER_GENERAL, "Pathfinding disabled for instance map %u.", entry); + break; + case MAP_BATTLEGROUND: + sLog->outInfo(LOG_FILTER_GENERAL, "Pathfinding disabled for battleground map %u.", entry); + break; + case MAP_ARENA: + sLog->outInfo(LOG_FILTER_GENERAL, "Pathfinding disabled for arena map %u.", entry); + break; + default: + break; + } + break; + } default: break; } @@ -348,6 +376,7 @@ bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags case DISABLE_TYPE_BATTLEGROUND: case DISABLE_TYPE_OUTDOORPVP: case DISABLE_TYPE_ACHIEVEMENT_CRITERIA: + case DISABLE_TYPE_MMAP: return true; case DISABLE_TYPE_VMAP: return flags & itr->second.flags; diff --git a/src/server/game/Conditions/DisableMgr.h b/src/server/game/Conditions/DisableMgr.h index b1bb43315bd..379f0ac967b 100644 --- a/src/server/game/Conditions/DisableMgr.h +++ b/src/server/game/Conditions/DisableMgr.h @@ -31,7 +31,8 @@ enum DisableType DISABLE_TYPE_BATTLEGROUND = 3, DISABLE_TYPE_ACHIEVEMENT_CRITERIA = 4, DISABLE_TYPE_OUTDOORPVP = 5, - DISABLE_TYPE_VMAP = 6 + DISABLE_TYPE_VMAP = 6, + DISABLE_TYPE_MMAP = 7 }; enum SpellDisableTypes @@ -54,6 +55,11 @@ enum VmapDisableTypes VMAP_DISABLE_LIQUIDSTATUS = 0x8 }; +enum MMapDisableTypes +{ + MMAP_DISABLE_PATHFINDING = 0x0 +}; + namespace DisableMgr { void LoadDisables(); diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 81261138957..d09bea8b9a6 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1134,7 +1134,6 @@ void World::LoadConfigSettings(bool reload) m_bool_configs[CONFIG_ENABLE_MMAPS] = ConfigMgr::GetBoolDefault("mmap.enablePathFinding", true); sLog->outInfo(LOG_FILTER_SERVER_LOADING, "WORLD: MMap data directory is: %smmaps", m_dataPath.c_str()); - MMAP::MMapFactory::preventPathfindingOnMaps(ConfigMgr::GetStringDefault("mmap.ignoreMapIds", "").c_str()); m_bool_configs[CONFIG_VMAP_INDOOR_CHECK] = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", 0); bool enableIndoor = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", true); diff --git a/src/server/scripts/Commands/cs_disable.cpp b/src/server/scripts/Commands/cs_disable.cpp index cf0b1f08e53..e17cd35b329 100644 --- a/src/server/scripts/Commands/cs_disable.cpp +++ b/src/server/scripts/Commands/cs_disable.cpp @@ -48,6 +48,7 @@ public: { "achievement_criteria", SEC_ADMINISTRATOR, true, &HandleRemoveDisableAchievementCriteriaCommand, "", NULL }, { "outdoorpvp", SEC_ADMINISTRATOR, true, &HandleRemoveDisableOutdoorPvPCommand, "", NULL }, { "vmap", SEC_ADMINISTRATOR, true, &HandleRemoveDisableVmapCommand, "", NULL }, + { "mmap", SEC_ADMINISTRATOR, true, &HandleRemoveDisableMMapCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; static ChatCommand addDisableCommandTable[] = @@ -59,6 +60,7 @@ public: { "achievement_criteria", SEC_ADMINISTRATOR, true, &HandleAddDisableAchievementCriteriaCommand, "", NULL }, { "outdoorpvp", SEC_ADMINISTRATOR, true, &HandleAddDisableOutdoorPvPCommand, "", NULL }, { "vmap", SEC_ADMINISTRATOR, true, &HandleAddDisableVmapCommand, "", NULL }, + { "mmap", SEC_ADMINISTRATOR, true, &HandleAddDisableMMapCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; static ChatCommand disableCommandTable[] = @@ -172,6 +174,17 @@ public: disableTypeStr = "vmap"; break; } + case DISABLE_TYPE_MMAP: + { + if (!sMapStore.LookupEntry(entry)) + { + handler->PSendSysMessage(LANG_COMMAND_NOMAPFOUND); + handler->SetSentErrorMessage(true); + return false; + } + disableTypeStr = "mmap"; + break; + } default: break; } @@ -256,6 +269,14 @@ public: return HandleAddDisables(handler, args, DISABLE_TYPE_VMAP); } + static bool HandleAddDisableMMapCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + return HandleAddDisables(handler, args, DISABLE_TYPE_MMAP); + } + static bool HandleRemoveDisables(ChatHandler* handler, char const* args, uint8 disableType) { char* entryStr = strtok((char*)args, " "); @@ -289,6 +310,9 @@ public: case DISABLE_TYPE_VMAP: disableTypeStr = "vmap"; break; + case DISABLE_TYPE_MMAP: + disableTypeStr = "mmap"; + break; } PreparedStatement* stmt = NULL; @@ -367,6 +391,14 @@ public: return HandleRemoveDisables(handler, args, DISABLE_TYPE_VMAP); } + + static bool HandleRemoveDisableMMapCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + return HandleRemoveDisables(handler, args, DISABLE_TYPE_MMAP); + } }; void AddSC_disable_commandscript() diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 426d4ab2d55..81b4dad8b06 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -276,13 +276,6 @@ PlayerSave.Stats.SaveOnlyOnLogout = 1 mmap.enablePathFinding = 1 -# -# mmap.ignoreMapIds -# Disable mmap pathfinding on the listed maps. -# List of map ids with delimiter ',' - -mmap.ignoreMapIds = "" - # # vmap.enableLOS # vmap.enableHeight From 234f0971200a0d75db61b163afc433270bce632b Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Tue, 1 Jan 2013 23:06:37 +0100 Subject: [PATCH 097/204] Core: Fix build --- src/server/game/Movement/FollowerRefManager.h | 1 - .../game/Movement/FollowerReference.cpp | 1 - src/server/game/Movement/FollowerReference.h | 1 - src/server/game/Movement/MotionMaster.h | 1 - src/server/game/Movement/MovementGenerator.h | 15 ++----- .../game/Movement/MovementGeneratorImpl.h | 1 - .../ConfusedMovementGenerator.cpp | 23 +++++----- .../ConfusedMovementGenerator.h | 9 ++-- .../FleeingMovementGenerator.cpp | 25 +++++------ .../FleeingMovementGenerator.h | 9 ++-- .../HomeMovementGenerator.cpp | 8 ++-- .../HomeMovementGenerator.h | 9 ++-- .../IdleMovementGenerator.cpp | 1 - .../IdleMovementGenerator.h | 1 - .../PointMovementGenerator.cpp | 24 +++++----- .../PointMovementGenerator.h | 9 ++-- .../RandomMovementGenerator.cpp | 12 ++--- .../RandomMovementGenerator.h | 11 +++-- .../TargetedMovementGenerator.cpp | 44 +++++++++---------- .../TargetedMovementGenerator.h | 14 +++--- .../WaypointMovementGenerator.cpp | 20 ++++----- .../WaypointMovementGenerator.h | 21 +++++---- src/server/game/Movement/Waypoints/Path.h | 1 - .../game/Movement/Waypoints/WaypointManager.h | 1 - 24 files changed, 119 insertions(+), 143 deletions(-) diff --git a/src/server/game/Movement/FollowerRefManager.h b/src/server/game/Movement/FollowerRefManager.h index 5066804d60f..48292efc016 100644 --- a/src/server/game/Movement/FollowerRefManager.h +++ b/src/server/game/Movement/FollowerRefManager.h @@ -29,4 +29,3 @@ class FollowerRefManager : public RefManagerstopFollowing(); } - diff --git a/src/server/game/Movement/FollowerReference.h b/src/server/game/Movement/FollowerReference.h index 6a1a3719cb8..647662eb066 100644 --- a/src/server/game/Movement/FollowerReference.h +++ b/src/server/game/Movement/FollowerReference.h @@ -32,4 +32,3 @@ class FollowerReference : public Reference void sourceObjectDestroyLink(); }; #endif - diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index b0676e02f51..f908b096455 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -201,4 +201,3 @@ class MotionMaster //: private std::stack uint8 _cleanFlag; }; #endif - diff --git a/src/server/game/Movement/MovementGenerator.h b/src/server/game/Movement/MovementGenerator.h index 43d03160a41..b84899d9b12 100755 --- a/src/server/game/Movement/MovementGenerator.h +++ b/src/server/game/Movement/MovementGenerator.h @@ -55,32 +55,26 @@ class MovementGeneratorMedium : public MovementGenerator void Initialize(Unit* u) { //u->AssertIsType(); - (static_cast(this))->Initialize(static_cast(u)); + (static_cast(this))->DoInitialize(static_cast(u)); } void Finalize(Unit* u) { //u->AssertIsType(); - (static_cast(this))->Finalize(static_cast(u)); + (static_cast(this))->DoFinalize(static_cast(u)); } void Reset(Unit* u) { //u->AssertIsType(); - (static_cast(this))->Reset(static_cast(u)); + (static_cast(this))->DoReset(static_cast(u)); } bool Update(Unit* u, uint32 time_diff) { //u->AssertIsType(); - return (static_cast(this))->Update(static_cast(u), time_diff); + return (static_cast(this))->DoUpdate(static_cast(u), time_diff); } - public: - // will not link if not overridden in the generators - void Initialize(T* u); - void Finalize(T* u); - void Reset(T* u); - bool Update(T* u, const uint32& time_diff); }; struct SelectableMovement : public FactoryHolder @@ -100,4 +94,3 @@ typedef FactoryHolder MovementGenerato typedef FactoryHolder::FactoryHolderRegistry MovementGeneratorRegistry; typedef FactoryHolder::FactoryHolderRepository MovementGeneratorRepository; #endif - diff --git a/src/server/game/Movement/MovementGeneratorImpl.h b/src/server/game/Movement/MovementGeneratorImpl.h index 725b309e3f1..8d9c170bce8 100644 --- a/src/server/game/Movement/MovementGeneratorImpl.h +++ b/src/server/game/Movement/MovementGeneratorImpl.h @@ -28,4 +28,3 @@ MovementGeneratorFactory::Create(void * /*data*/) const return (new MOVEMENT_GEN()); } #endif - diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index 9ccb13c32ee..e1893d499ca 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -31,7 +31,7 @@ #endif template -void ConfusedMovementGenerator::Initialize(T* unit) +void ConfusedMovementGenerator::DoInitialize(T* unit) { unit->AddUnitState(UNIT_STATE_CONFUSED); unit->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); @@ -45,7 +45,7 @@ void ConfusedMovementGenerator::Initialize(T* unit) } template -void ConfusedMovementGenerator::Reset(T* unit) +void ConfusedMovementGenerator::DoReset(T* unit) { i_nextMoveTime.Reset(0); @@ -57,7 +57,7 @@ void ConfusedMovementGenerator::Reset(T* unit) } template -bool ConfusedMovementGenerator::Update(T* unit, uint32 diff) +bool ConfusedMovementGenerator::DoUpdate(T* unit, uint32 diff) { if (unit->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED | UNIT_STATE_DISTRACTED)) return true; @@ -105,7 +105,7 @@ bool ConfusedMovementGenerator::Update(T* unit, uint32 diff) } template<> -void ConfusedMovementGenerator::Finalize(Player* unit) +void ConfusedMovementGenerator::DoFinalize(Player* unit) { unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); unit->ClearUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); @@ -113,7 +113,7 @@ void ConfusedMovementGenerator::Finalize(Player* unit) } template<> -void ConfusedMovementGenerator::Finalize(Creature* unit) +void ConfusedMovementGenerator::DoFinalize(Creature* unit) { unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); unit->ClearUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); @@ -121,10 +121,9 @@ void ConfusedMovementGenerator::Finalize(Creature* unit) unit->SetTarget(unit->getVictim()->GetGUID()); } -template void ConfusedMovementGenerator::Initialize(Player*); -template void ConfusedMovementGenerator::Initialize(Creature*); -template void ConfusedMovementGenerator::Reset(Player*); -template void ConfusedMovementGenerator::Reset(Creature*); -template bool ConfusedMovementGenerator::Update(Player*, uint32 diff); -template bool ConfusedMovementGenerator::Update(Creature*, uint32 diff); - +template void ConfusedMovementGenerator::DoInitialize(Player*); +template void ConfusedMovementGenerator::DoInitialize(Creature*); +template void ConfusedMovementGenerator::DoReset(Player*); +template void ConfusedMovementGenerator::DoReset(Creature*); +template bool ConfusedMovementGenerator::DoUpdate(Player*, uint32 diff); +template bool ConfusedMovementGenerator::DoUpdate(Creature*, uint32 diff); diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h index 22d9bcc1a07..dd130961ed8 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.h @@ -28,10 +28,10 @@ class ConfusedMovementGenerator : public MovementGeneratorMedium< T, ConfusedMov public: explicit ConfusedMovementGenerator() : i_nextMoveTime(0) {} - void Initialize(T*); - void Finalize(T*); - void Reset(T*); - bool Update(T*, uint32); + void DoInitialize(T*); + void DoFinalize(T*); + void DoReset(T*); + bool DoUpdate(T*, uint32); MovementGeneratorType GetMovementGeneratorType() { return CONFUSED_MOTION_TYPE; } private: @@ -39,4 +39,3 @@ class ConfusedMovementGenerator : public MovementGeneratorMedium< T, ConfusedMov float i_x, i_y, i_z; }; #endif - diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index 7f9c7fac7e7..14215d22ad1 100644 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -102,7 +102,7 @@ void FleeingMovementGenerator::_getPoint(T* owner, float &x, float &y, float } template -void FleeingMovementGenerator::Initialize(T* owner) +void FleeingMovementGenerator::DoInitialize(T* owner) { if (!owner) return; @@ -113,7 +113,7 @@ void FleeingMovementGenerator::Initialize(T* owner) } template<> -void FleeingMovementGenerator::Finalize(Player* owner) +void FleeingMovementGenerator::DoFinalize(Player* owner) { owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); owner->ClearUnitState(UNIT_STATE_FLEEING | UNIT_STATE_FLEEING_MOVE); @@ -121,7 +121,7 @@ void FleeingMovementGenerator::Finalize(Player* owner) } template<> -void FleeingMovementGenerator::Finalize(Creature* owner) +void FleeingMovementGenerator::DoFinalize(Creature* owner) { owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); owner->ClearUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE); @@ -130,13 +130,13 @@ void FleeingMovementGenerator::Finalize(Creature* owner) } template -void FleeingMovementGenerator::Reset(T* owner) +void FleeingMovementGenerator::DoReset(T* owner) { - Initialize(owner); + DoInitialize(owner); } template -bool FleeingMovementGenerator::Update(T* owner, uint32 time_diff) +bool FleeingMovementGenerator::DoUpdate(T* owner, uint32 time_diff) { if (!owner || !owner->isAlive()) return false; @@ -154,16 +154,16 @@ bool FleeingMovementGenerator::Update(T* owner, uint32 time_diff) return true; } -template void FleeingMovementGenerator::Initialize(Player*); -template void FleeingMovementGenerator::Initialize(Creature*); +template void FleeingMovementGenerator::DoInitialize(Player*); +template void FleeingMovementGenerator::DoInitialize(Creature*); template void FleeingMovementGenerator::_getPoint(Player*, float&, float&, float&); template void FleeingMovementGenerator::_getPoint(Creature*, float&, float&, float&); template void FleeingMovementGenerator::_setTargetLocation(Player*); template void FleeingMovementGenerator::_setTargetLocation(Creature*); -template void FleeingMovementGenerator::Reset(Player*); -template void FleeingMovementGenerator::Reset(Creature*); -template bool FleeingMovementGenerator::Update(Player*, uint32); -template bool FleeingMovementGenerator::Update(Creature*, uint32); +template void FleeingMovementGenerator::DoReset(Player*); +template void FleeingMovementGenerator::DoReset(Creature*); +template bool FleeingMovementGenerator::DoUpdate(Player*, uint32); +template bool FleeingMovementGenerator::DoUpdate(Creature*, uint32); void TimedFleeingMovementGenerator::Finalize(Unit* owner) { @@ -198,4 +198,3 @@ bool TimedFleeingMovementGenerator::Update(Unit* owner, uint32 time_diff) // This is done instead of casting Unit& to Creature& and call parent method, then we can use Unit directly return MovementGeneratorMedium< Creature, FleeingMovementGenerator >::Update(owner, time_diff); } - diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h index 05c3916ea8a..245c53513f3 100755 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.h @@ -27,10 +27,10 @@ class FleeingMovementGenerator : public MovementGeneratorMedium< T, FleeingMovem public: FleeingMovementGenerator(uint64 fright) : i_frightGUID(fright), i_nextCheckTime(0) {} - void Initialize(T*); - void Finalize(T*); - void Reset(T*); - bool Update(T*, uint32); + void DoInitialize(T*); + void DoFinalize(T*); + void DoReset(T*); + bool DoUpdate(T*, uint32); MovementGeneratorType GetMovementGeneratorType() { return FLEEING_MOTION_TYPE; } @@ -58,4 +58,3 @@ class TimedFleeingMovementGenerator : public FleeingMovementGenerator }; #endif - diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp index 78c1f80005c..f52120b6999 100644 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp @@ -23,12 +23,12 @@ #include "MoveSplineInit.h" #include "MoveSpline.h" -void HomeMovementGenerator::Initialize(Creature* owner) +void HomeMovementGenerator::DoInitialize(Creature* owner) { _setTargetLocation(owner); } -void HomeMovementGenerator::Finalize(Creature* owner) +void HomeMovementGenerator::DoFinalize(Creature* owner) { if (arrived) { @@ -39,7 +39,7 @@ void HomeMovementGenerator::Finalize(Creature* owner) } } -void HomeMovementGenerator::Reset(Creature*) +void HomeMovementGenerator::DoReset(Creature*) { } @@ -64,7 +64,7 @@ void HomeMovementGenerator::_setTargetLocation(Creature* owner) owner->ClearUnitState(UNIT_STATE_ALL_STATE & ~UNIT_STATE_EVADE); } -bool HomeMovementGenerator::Update(Creature* owner, const uint32 /*time_diff*/) +bool HomeMovementGenerator::DoUpdate(Creature* owner, const uint32 /*time_diff*/) { arrived = owner->movespline->Finalized(); return !arrived; diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h index dfbea60d353..5217f14f75a 100644 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.h @@ -34,10 +34,10 @@ class HomeMovementGenerator : public MovementGeneratorMedium< Creature HomeMovementGenerator() : arrived(false) {} ~HomeMovementGenerator() {} - void Initialize(Creature*); - void Finalize(Creature*); - void Reset(Creature*); - bool Update(Creature*, const uint32); + void DoInitialize(Creature*); + void DoFinalize(Creature*); + void DoReset(Creature*); + bool DoUpdate(Creature*, const uint32); MovementGeneratorType GetMovementGeneratorType() { return HOME_MOTION_TYPE; } private: @@ -45,4 +45,3 @@ class HomeMovementGenerator : public MovementGeneratorMedium< Creature bool arrived; }; #endif - diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp index b33cddc6f6d..080ae1b5b89 100755 --- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.cpp @@ -103,4 +103,3 @@ void AssistanceDistractMovementGenerator::Finalize(Unit* unit) unit->ClearUnitState(UNIT_STATE_DISTRACTED); unit->ToCreature()->SetReactState(REACT_AGGRESSIVE); } - diff --git a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h index 4a2a5e35d22..7be70990b22 100755 --- a/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/IdleMovementGenerator.h @@ -76,4 +76,3 @@ class AssistanceDistractMovementGenerator : public DistractMovementGenerator }; #endif - diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp index 5d70b1aac3a..e7b61e30ea8 100755 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp @@ -27,7 +27,7 @@ //----- Point Movement Generator template -void PointMovementGenerator::Initialize(T* unit) +void PointMovementGenerator::DoInitialize(T* unit) { if (!unit->IsStopped()) unit->StopMoving(); @@ -45,7 +45,7 @@ void PointMovementGenerator::Initialize(T* unit) } template -bool PointMovementGenerator::Update(T* unit, uint32 /*diff*/) +bool PointMovementGenerator::DoUpdate(T* unit, uint32 /*diff*/) { if (!unit) return false; @@ -72,7 +72,7 @@ bool PointMovementGenerator::Update(T* unit, uint32 /*diff*/) } template -void PointMovementGenerator::Finalize(T* unit) +void PointMovementGenerator::DoFinalize(T* unit) { if (unit->HasUnitState(UNIT_STATE_CHARGING)) unit->ClearUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE); @@ -82,7 +82,7 @@ void PointMovementGenerator::Finalize(T* unit) } template -void PointMovementGenerator::Reset(T* unit) +void PointMovementGenerator::DoReset(T* unit) { if (!unit->IsStopped()) unit->StopMoving(); @@ -101,14 +101,14 @@ template <> void PointMovementGenerator::MovementInform(Creature* unit unit->AI()->MovementInform(POINT_MOTION_TYPE, id); } -template void PointMovementGenerator::Initialize(Player*); -template void PointMovementGenerator::Initialize(Creature*); -template void PointMovementGenerator::Finalize(Player*); -template void PointMovementGenerator::Finalize(Creature*); -template void PointMovementGenerator::Reset(Player*); -template void PointMovementGenerator::Reset(Creature*); -template bool PointMovementGenerator::Update(Player*, uint32); -template bool PointMovementGenerator::Update(Creature*, uint32); +template void PointMovementGenerator::DoInitialize(Player*); +template void PointMovementGenerator::DoInitialize(Creature*); +template void PointMovementGenerator::DoFinalize(Player*); +template void PointMovementGenerator::DoFinalize(Creature*); +template void PointMovementGenerator::DoReset(Player*); +template void PointMovementGenerator::DoReset(Creature*); +template bool PointMovementGenerator::DoUpdate(Player*, uint32); +template bool PointMovementGenerator::DoUpdate(Creature*, uint32); void AssistanceMovementGenerator::Finalize(Unit* unit) { diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h index c26ff94c3a4..592fc7bc517 100644 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h @@ -29,10 +29,10 @@ class PointMovementGenerator : public MovementGeneratorMedium< T, PointMovementG PointMovementGenerator(uint32 _id, float _x, float _y, float _z, bool _generatePath, float _speed = 0.0f) : id(_id), i_x(_x), i_y(_y), i_z(_z), m_generatePath(_generatePath), speed(_speed), i_recalculateSpeed(false) {} - void Initialize(T*); - void Finalize(T*); - void Reset(T*); - bool Update(T*, uint32); + void DoInitialize(T*); + void DoFinalize(T*); + void DoReset(T*); + bool DoUpdate(T*, uint32); void MovementInform(T*); @@ -74,4 +74,3 @@ class EffectMovementGenerator : public MovementGenerator }; #endif - diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp index a9d3c404a87..5b8bc6552d3 100644 --- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp @@ -114,7 +114,7 @@ void RandomMovementGenerator::_setRandomLocation(Creature* creature) } template<> -void RandomMovementGenerator::Initialize(Creature* creature) +void RandomMovementGenerator::DoInitialize(Creature* creature) { if (!creature->isAlive()) return; @@ -127,20 +127,20 @@ void RandomMovementGenerator::Initialize(Creature* creature) } template<> -void RandomMovementGenerator::Reset(Creature* creature) +void RandomMovementGenerator::DoReset(Creature* creature) { - Initialize(creature); + DoInitialize(creature); } template<> -void RandomMovementGenerator::Finalize(Creature* creature) +void RandomMovementGenerator::DoFinalize(Creature* creature) { creature->ClearUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); creature->SetWalk(false); } template<> -bool RandomMovementGenerator::Update(Creature* creature, const uint32 diff) +bool RandomMovementGenerator::DoUpdate(Creature* creature, const uint32 diff) { if (creature->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED | UNIT_STATE_DISTRACTED)) { @@ -159,7 +159,7 @@ bool RandomMovementGenerator::Update(Creature* creature, const uint32 } template<> -bool RandomMovementGenerator::GetResetPosition(Creature* creature, float& x, float& y, float& z) +bool RandomMovementGenerator::GetResetPos(Creature* creature, float& x, float& y, float& z) { float radius; creature->GetRespawnPosition(x, y, z, NULL, &radius); diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h index ca370de6ac3..80379dee632 100644 --- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.h @@ -28,11 +28,11 @@ class RandomMovementGenerator : public MovementGeneratorMedium< T, RandomMovemen RandomMovementGenerator(float spawn_dist = 0.0f) : i_nextMoveTime(0), wander_distance(spawn_dist) {} void _setRandomLocation(T*); - void Initialize(T*); - void Finalize(T*); - void Reset(T*); - bool Update(T*, const uint32); - bool GetResetPosition(T*, float& x, float& y, float& z); + void DoInitialize(T*); + void DoFinalize(T*); + void DoReset(T*); + bool DoUpdate(T*, const uint32); + bool GetResetPos(T*, float& x, float& y, float& z); MovementGeneratorType GetMovementGeneratorType() { return RANDOM_MOTION_TYPE; } private: TimeTrackerSmall i_nextMoveTime; @@ -41,4 +41,3 @@ class RandomMovementGenerator : public MovementGeneratorMedium< T, RandomMovemen float wander_distance; }; #endif - diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 88eacccd0aa..46db6b034c4 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -116,7 +116,7 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner, bool upd } template -bool TargetedMovementGeneratorMedium::Update(T* owner, uint32 time_diff) +bool TargetedMovementGeneratorMedium::DoUpdate(T* owner, uint32 time_diff) { if (!i_target.isValid() || !i_target->IsInWorld()) return false; @@ -188,14 +188,14 @@ void ChaseMovementGenerator::_reachTarget(T* owner) } template<> -void ChaseMovementGenerator::Initialize(Player* owner) +void ChaseMovementGenerator::DoInitialize(Player* owner) { owner->AddUnitState(UNIT_STATE_CHASE | UNIT_STATE_CHASE_MOVE); _setTargetLocation(owner, true); } template<> -void ChaseMovementGenerator::Initialize(Creature* owner) +void ChaseMovementGenerator::DoInitialize(Creature* owner) { owner->SetWalk(false); owner->AddUnitState(UNIT_STATE_CHASE | UNIT_STATE_CHASE_MOVE); @@ -203,15 +203,15 @@ void ChaseMovementGenerator::Initialize(Creature* owner) } template -void ChaseMovementGenerator::Finalize(T* owner) +void ChaseMovementGenerator::DoFinalize(T* owner) { owner->ClearUnitState(UNIT_STATE_CHASE | UNIT_STATE_CHASE_MOVE); } template -void ChaseMovementGenerator::Reset(T* owner) +void ChaseMovementGenerator::DoReset(T* owner) { - Initialize(owner); + DoInitialize(owner); } template @@ -259,7 +259,7 @@ void FollowMovementGenerator::_updateSpeed(Creature* u) } template<> -void FollowMovementGenerator::Initialize(Player* owner) +void FollowMovementGenerator::DoInitialize(Player* owner) { owner->AddUnitState(UNIT_STATE_FOLLOW | UNIT_STATE_FOLLOW_MOVE); _updateSpeed(owner); @@ -267,7 +267,7 @@ void FollowMovementGenerator::Initialize(Player* owner) } template<> -void FollowMovementGenerator::Initialize(Creature* owner) +void FollowMovementGenerator::DoInitialize(Creature* owner) { owner->AddUnitState(UNIT_STATE_FOLLOW | UNIT_STATE_FOLLOW_MOVE); _updateSpeed(owner); @@ -275,14 +275,14 @@ void FollowMovementGenerator::Initialize(Creature* owner) } template -void FollowMovementGenerator::Finalize(T* owner) +void FollowMovementGenerator::DoFinalize(T* owner) { owner->ClearUnitState(UNIT_STATE_FOLLOW | UNIT_STATE_FOLLOW_MOVE); _updateSpeed(owner); } template -void FollowMovementGenerator::Reset(T* owner) +void FollowMovementGenerator::DoReset(T* owner) { Initialize(owner); } @@ -305,21 +305,21 @@ template void TargetedMovementGeneratorMedium >::_setTargetLocation(Player*, bool); template void TargetedMovementGeneratorMedium >::_setTargetLocation(Creature*, bool); template void TargetedMovementGeneratorMedium >::_setTargetLocation(Creature*, bool); -template bool TargetedMovementGeneratorMedium >::Update(Player*, uint32); -template bool TargetedMovementGeneratorMedium >::Update(Player*, uint32); -template bool TargetedMovementGeneratorMedium >::Update(Creature*, uint32); -template bool TargetedMovementGeneratorMedium >::Update(Creature*, uint32); +template bool TargetedMovementGeneratorMedium >::DoUpdate(Player*, uint32); +template bool TargetedMovementGeneratorMedium >::DoUpdate(Player*, uint32); +template bool TargetedMovementGeneratorMedium >::DoUpdate(Creature*, uint32); +template bool TargetedMovementGeneratorMedium >::DoUpdate(Creature*, uint32); template void ChaseMovementGenerator::_reachTarget(Player*); template void ChaseMovementGenerator::_reachTarget(Creature*); -template void ChaseMovementGenerator::Finalize(Player*); -template void ChaseMovementGenerator::Finalize(Creature*); -template void ChaseMovementGenerator::Reset(Player*); -template void ChaseMovementGenerator::Reset(Creature*); +template void ChaseMovementGenerator::DoFinalize(Player*); +template void ChaseMovementGenerator::DoFinalize(Creature*); +template void ChaseMovementGenerator::DoReset(Player*); +template void ChaseMovementGenerator::DoReset(Creature*); template void ChaseMovementGenerator::MovementInform(Player*); -template void FollowMovementGenerator::Finalize(Player*); -template void FollowMovementGenerator::Finalize(Creature*); -template void FollowMovementGenerator::Reset(Player*); -template void FollowMovementGenerator::Reset(Creature*); +template void FollowMovementGenerator::DoFinalize(Player*); +template void FollowMovementGenerator::DoFinalize(Creature*); +template void FollowMovementGenerator::DoReset(Player*); +template void FollowMovementGenerator::DoReset(Creature*); template void FollowMovementGenerator::MovementInform(Player*); diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h index 987baa91133..6b47821bbaa 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h @@ -47,7 +47,7 @@ class TargetedMovementGeneratorMedium : public MovementGeneratorMedium< T, D >, ~TargetedMovementGeneratorMedium() { delete i_path; } public: - bool Update(T*, uint32); + bool DoUpdate(T*, uint32); Unit* GetTarget() const { return i_target.getTarget(); } void unitSpeedChanged() { i_recalculateTravel = true; } @@ -75,9 +75,9 @@ class ChaseMovementGenerator : public TargetedMovementGeneratorMediumClearUnitState(UNIT_STATE_CHASE_MOVE); } @@ -99,9 +99,9 @@ class FollowMovementGenerator : public TargetedMovementGeneratorMediumClearUnitState(UNIT_STATE_FOLLOW_MOVE); } diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index d3b63ed6331..ffc4afebf2a 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -48,19 +48,19 @@ void WaypointMovementGenerator::LoadPath(Creature* creature) StartMoveNow(creature); } -void WaypointMovementGenerator::Initialize(Creature* creature) +void WaypointMovementGenerator::DoInitialize(Creature* creature) { LoadPath(creature); creature->AddUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); } -void WaypointMovementGenerator::Finalize(Creature* creature) +void WaypointMovementGenerator::DoFinalize(Creature* creature) { creature->ClearUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); creature->SetWalk(false); } -void WaypointMovementGenerator::Reset(Creature* creature) +void WaypointMovementGenerator::DoReset(Creature* creature) { creature->AddUnitState(UNIT_STATE_ROAMING|UNIT_STATE_ROAMING_MOVE); StartMoveNow(creature); @@ -130,7 +130,7 @@ bool WaypointMovementGenerator::StartMove(Creature* creature) return true; } -bool WaypointMovementGenerator::Update(Creature* creature, uint32 diff) +bool WaypointMovementGenerator::DoUpdate(Creature* creature, uint32 diff) { // Waypoint movement can be switched on/off // This is quite handy for escort quests and other stuff @@ -167,7 +167,7 @@ void WaypointMovementGenerator::MovementInform(Creature* creature) creature->AI()->MovementInform(WAYPOINT_MOTION_TYPE, i_currentNode); } -bool WaypointMovementGenerator::GetResetPosition(Creature*, float& x, float& y, float& z) +bool WaypointMovementGenerator::GetResetPos(Creature*, float& x, float& y, float& z) { // prevent a crash at empty waypoint path. if (!i_path || i_path->empty()) @@ -196,13 +196,13 @@ uint32 FlightPathMovementGenerator::GetPathAtMapEnd() const return i_path->size(); } -void FlightPathMovementGenerator::Initialize(Player* player) +void FlightPathMovementGenerator::DoInitialize(Player* player) { Reset(player); InitEndGridInfo(); } -void FlightPathMovementGenerator::Finalize(Player* player) +void FlightPathMovementGenerator::DoFinalize(Player* player) { // remove flag to prevent send object build movement packets for flight state and crash (movement generator already not at top of stack) player->ClearUnitState(UNIT_STATE_IN_FLIGHT); @@ -222,7 +222,7 @@ void FlightPathMovementGenerator::Finalize(Player* player) #define PLAYER_FLIGHT_SPEED 32.0f -void FlightPathMovementGenerator::Reset(Player* player) +void FlightPathMovementGenerator::DoReset(Player* player) { player->getHostileRefManager().setOnlineOfflineState(false); player->AddUnitState(UNIT_STATE_IN_FLIGHT); @@ -241,7 +241,7 @@ void FlightPathMovementGenerator::Reset(Player* player) init.Launch(); } -bool FlightPathMovementGenerator::Update(Player* player, uint32 /*diff*/) +bool FlightPathMovementGenerator::DoUpdate(Player* player, uint32 /*diff*/) { uint32 pointId = (uint32)player->movespline->currentPathIdx(); if (pointId > i_currentNode) @@ -288,7 +288,7 @@ void FlightPathMovementGenerator::DoEventIfAny(Player* player, TaxiPathNodeEntry } } -bool FlightPathMovementGenerator::GetResetPosition(Player*, float& x, float& y, float& z) +bool FlightPathMovementGenerator::GetResetPos(Player*, float& x, float& y, float& z) { const TaxiPathNodeEntry& node = (*i_path)[i_currentNode]; x = node.x; y = node.y; z = node.z; diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h index bf3f6f4cae3..5f468ffc3a4 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.h @@ -65,10 +65,10 @@ class WaypointMovementGenerator : public MovementGeneratorMedium< Crea WaypointMovementGenerator(uint32 _path_id = 0, bool _repeating = true) : i_nextMoveTime(0), m_isArrivalDone(false), path_id(_path_id), repeating(_repeating) {} ~WaypointMovementGenerator() { i_path = NULL; } - void Initialize(Creature*); - void Finalize(Creature*); - void Reset(Creature*); - bool Update(Creature*, uint32 diff); + void DoInitialize(Creature*); + void DoFinalize(Creature*); + void DoReset(Creature*); + bool DoUpdate(Creature*, uint32 diff); void MovementInform(Creature*); @@ -77,7 +77,7 @@ class WaypointMovementGenerator : public MovementGeneratorMedium< Crea // now path movement implmementation void LoadPath(Creature*); - bool GetResetPosition(Creature*, float& x, float& y, float& z); + bool GetResetPos(Creature*, float& x, float& y, float& z); private: @@ -118,10 +118,10 @@ class FlightPathMovementGenerator : public MovementGeneratorMedium< Player, Flig i_path = &pathnodes; i_currentNode = startNode; } - void Initialize(Player*); - void Reset(Player*); - void Finalize(Player*); - bool Update(Player*, uint32); + void DoInitialize(Player*); + void DoReset(Player*); + void DoFinalize(Player*); + bool DoUpdate(Player*, uint32); MovementGeneratorType GetMovementGeneratorType() { return FLIGHT_MOTION_TYPE; } TaxiPathNodeList const& GetPath() { return *i_path; } @@ -131,7 +131,7 @@ class FlightPathMovementGenerator : public MovementGeneratorMedium< Player, Flig void SkipCurrentNode() { ++i_currentNode; } void DoEventIfAny(Player* player, TaxiPathNodeEntry const& node, bool departure); - bool GetResetPosition(Player*, float& x, float& y, float& z); + bool GetResetPos(Player*, float& x, float& y, float& z); void InitEndGridInfo(); void PreloadEndGrid(); @@ -143,4 +143,3 @@ class FlightPathMovementGenerator : public MovementGeneratorMedium< Player, Flig uint32 _preloadTargetNode; //! node index where preloading starts }; #endif - diff --git a/src/server/game/Movement/Waypoints/Path.h b/src/server/game/Movement/Waypoints/Path.h index 038958593fb..f86b62c8be8 100644 --- a/src/server/game/Movement/Waypoints/Path.h +++ b/src/server/game/Movement/Waypoints/Path.h @@ -98,4 +98,3 @@ class Path typedef Path SimplePath; #endif - diff --git a/src/server/game/Movement/Waypoints/WaypointManager.h b/src/server/game/Movement/Waypoints/WaypointManager.h index df20c513c90..3417b44ef09 100644 --- a/src/server/game/Movement/Waypoints/WaypointManager.h +++ b/src/server/game/Movement/Waypoints/WaypointManager.h @@ -68,4 +68,3 @@ class WaypointMgr #define sWaypointMgr ACE_Singleton::instance() #endif - From 05efdaf39349f057eabf58252532dff76511e7ef Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Wed, 2 Jan 2013 13:58:36 +0100 Subject: [PATCH 098/204] Core: Fix non pch build --- src/server/shared/Memory.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/shared/Memory.h b/src/server/shared/Memory.h index ac697f7a1af..25533638915 100644 --- a/src/server/shared/Memory.h +++ b/src/server/shared/Memory.h @@ -3,6 +3,8 @@ #ifndef _MEMORY_H #define _MEMORY_H +#include "DetourAlloc.h" + // memory management inline void* dtCustomAlloc(int size, dtAllocHint /*hint*/) { From 20ab789fe76b2b4e6c7dce006024aaba1b2a548b Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Tue, 8 Jan 2013 16:26:45 +0100 Subject: [PATCH 099/204] Core: Fix build with Debian 7.0 Closes #8882 --- .../Movement/MovementGenerators/TargetedMovementGenerator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 9d60fa11a2f..d03edeb9bab 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -284,7 +284,7 @@ void FollowMovementGenerator::DoFinalize(T* owner) template void FollowMovementGenerator::DoReset(T* owner) { - Initialize(owner); + DoInitialize(owner); } template From 5f15600e7a26170f0aacc77e9417df61db45a992 Mon Sep 17 00:00:00 2001 From: Spp Date: Wed, 9 Jan 2013 13:13:39 +0100 Subject: [PATCH 100/204] Core/Build: Fix linking and sooo many compile warnings --- .../collision/Management/MMapManager.cpp | 14 +- src/server/collision/Models/ModelInstance.h | 2 +- src/tools/map_extractor/adt.cpp | 21 +- src/tools/map_extractor/loadlib.cpp | 4 +- src/tools/map_extractor/loadlib/loadlib.h | 6 + src/tools/map_extractor/wdt.cpp | 12 +- src/tools/mesh_extractor/ADT.cpp | 4 +- src/tools/mesh_extractor/CMakeLists.txt | 3 +- src/tools/mesh_extractor/Cache.h | 4 +- src/tools/mesh_extractor/Chunk.cpp | 10 +- src/tools/mesh_extractor/ChunkedData.cpp | 3 +- src/tools/mesh_extractor/ContinentBuilder.cpp | 4 +- src/tools/mesh_extractor/ContinentBuilder.h | 8 +- src/tools/mesh_extractor/DBC.cpp | 22 +- src/tools/mesh_extractor/DoodadHandler.cpp | 6 +- src/tools/mesh_extractor/DoodadHandler.h | 14 +- src/tools/mesh_extractor/LiquidHandler.cpp | 10 +- src/tools/mesh_extractor/MapChunk.cpp | 3 +- src/tools/mesh_extractor/MeshExtractor.cpp | 38 +- src/tools/mesh_extractor/Model.cpp | 9 +- src/tools/mesh_extractor/TileBuilder.cpp | 5 +- src/tools/mesh_extractor/Utils.cpp | 354 ++++++++++-------- src/tools/mesh_extractor/Utils.h | 4 +- src/tools/mesh_extractor/WDT.cpp | 11 +- src/tools/mesh_extractor/WorldModelGroup.cpp | 22 +- .../mesh_extractor/WorldModelHandler.cpp | 20 +- src/tools/mmaps_generator/CMakeLists.txt | 2 +- .../mmaps_generator/IntermediateValues.h | 2 +- src/tools/mmaps_generator/MapBuilder.cpp | 45 ++- src/tools/mmaps_generator/PathCommon.h | 2 +- src/tools/mmaps_generator/TerrainBuilder.cpp | 92 +++-- src/tools/mmaps_generator/TerrainBuilder.h | 1 - src/tools/mmaps_generator/VMapExtensions.cpp | 2 +- src/tools/vmap4_extractor/adtfile.cpp | 3 +- src/tools/vmap4_extractor/model.cpp | 4 +- src/tools/vmap4_extractor/vmapexport.cpp | 3 +- src/tools/vmap4_extractor/wmo.cpp | 4 +- 37 files changed, 469 insertions(+), 304 deletions(-) diff --git a/src/server/collision/Management/MMapManager.cpp b/src/server/collision/Management/MMapManager.cpp index c7dea358d92..1b6cf5c0260 100644 --- a/src/server/collision/Management/MMapManager.cpp +++ b/src/server/collision/Management/MMapManager.cpp @@ -52,8 +52,14 @@ namespace MMAP } dtNavMeshParams params; - fread(¶ms, sizeof(dtNavMeshParams), 1, file); + int count = fread(¶ms, sizeof(dtNavMeshParams), 1, file); fclose(file); + if (count != 1) + { + sLog->outDebug(LOG_FILTER_MAPS, "MMAP:loadMapData: Error: Could not read params from file '%s'", fileName); + delete [] fileName; + return false; + } dtNavMesh* mesh = dtAllocNavMesh(); ASSERT(mesh); @@ -82,7 +88,7 @@ namespace MMAP return uint32(x << 16 | y); } - bool MMapManager::loadMap(const std::string& basePath, uint32 mapId, int32 x, int32 y) + bool MMapManager::loadMap(const std::string& /*basePath*/, uint32 mapId, int32 x, int32 y) { // make sure the mmap is loaded and ready to load tiles if (!loadMapData(mapId)) @@ -114,9 +120,7 @@ namespace MMAP // read header MmapTileHeader fileHeader; - fread(&fileHeader, sizeof(MmapTileHeader), 1, file); - - if (fileHeader.mmapMagic != MMAP_MAGIC) + if (fread(&fileHeader, sizeof(MmapTileHeader), 1, file) != 1 || fileHeader.mmapMagic != MMAP_MAGIC) { sLog->outError(LOG_FILTER_MAPS, "MMAP:loadMap: Bad header in mmap %03u%02i%02i.mmtile", mapId, x, y); return false; diff --git a/src/server/collision/Models/ModelInstance.h b/src/server/collision/Models/ModelInstance.h index 6d1b7c68bd5..f26089bb46c 100644 --- a/src/server/collision/Models/ModelInstance.h +++ b/src/server/collision/Models/ModelInstance.h @@ -75,7 +75,7 @@ namespace VMAP float iInvScale; WorldModel* iModel; public: - WorldModel* const getWorldModel(); + WorldModel* getWorldModel(); }; } // namespace VMAP diff --git a/src/tools/map_extractor/adt.cpp b/src/tools/map_extractor/adt.cpp index fde70681113..505813c4bd0 100644 --- a/src/tools/map_extractor/adt.cpp +++ b/src/tools/map_extractor/adt.cpp @@ -6,6 +6,13 @@ int holetab_h[4] = {0x1111, 0x2222, 0x4444, 0x8888}; int holetab_v[4] = {0x000F, 0x00F0, 0x0F00, 0xF000}; +u_map_fcc MHDRMagic = { {'M','H','D','R'} }; +u_map_fcc MCINMagic = { {'M','C','I','N'} }; +u_map_fcc MH20Magic = { {'M','H','2','0'} }; +u_map_fcc MCNKMagic = { {'M','C','N','K'} }; +u_map_fcc MCVTMagic = { {'M','C','V','T'} }; +u_map_fcc MCLQMagic = { {'M','C','L','Q'} }; + bool isHole(int holes, int i, int j) { int testi = i / 2; @@ -53,7 +60,7 @@ bool ADT_file::prepareLoadedData() bool adt_MHDR::prepareLoadedData() { - if (fcc != 'MHDR') + if (fcc != MHDRMagic.fcc) return false; if (size!=sizeof(adt_MHDR)-8) @@ -72,7 +79,7 @@ bool adt_MHDR::prepareLoadedData() bool adt_MCIN::prepareLoadedData() { - if (fcc != 'MCIN') + if (fcc != MCINMagic.fcc) return false; // Check cells data @@ -86,7 +93,7 @@ bool adt_MCIN::prepareLoadedData() bool adt_MH2O::prepareLoadedData() { - if (fcc != 'MH2O') + if (fcc != MH20Magic.fcc) return false; // Check liquid data @@ -98,7 +105,7 @@ bool adt_MH2O::prepareLoadedData() bool adt_MCNK::prepareLoadedData() { - if (fcc != 'MCNK') + if (fcc != MCNKMagic.fcc) return false; // Check height map @@ -113,7 +120,7 @@ bool adt_MCNK::prepareLoadedData() bool adt_MCVT::prepareLoadedData() { - if (fcc != 'MCVT') + if (fcc != MCVTMagic.fcc) return false; if (size != sizeof(adt_MCVT)-8) @@ -124,8 +131,8 @@ bool adt_MCVT::prepareLoadedData() bool adt_MCLQ::prepareLoadedData() { - if (fcc != 'MCLQ') + if (fcc != MCLQMagic.fcc) return false; return true; -} \ No newline at end of file +} diff --git a/src/tools/map_extractor/loadlib.cpp b/src/tools/map_extractor/loadlib.cpp index 465eb04083f..d1ea40110de 100644 --- a/src/tools/map_extractor/loadlib.cpp +++ b/src/tools/map_extractor/loadlib.cpp @@ -6,6 +6,8 @@ class MPQFile; +u_map_fcc MverMagic = { {'M','V','E','R'} }; + FileLoader::FileLoader() { data = 0; @@ -49,7 +51,7 @@ bool FileLoader::prepareLoadedData() { // Check version version = (file_MVER *) data; - if (version->fcc != 'MVER') + if (version->fcc != MverMagic.fcc) return false; if (version->ver != FILE_FORMAT_VERSION) return false; diff --git a/src/tools/map_extractor/loadlib/loadlib.h b/src/tools/map_extractor/loadlib/loadlib.h index bf6c0706d46..f32f46c63b9 100644 --- a/src/tools/map_extractor/loadlib/loadlib.h +++ b/src/tools/map_extractor/loadlib/loadlib.h @@ -29,6 +29,12 @@ typedef uint8_t uint8; #define FILE_FORMAT_VERSION 18 +union u_map_fcc +{ + char fcc_txt[4]; + uint32 fcc; +}; + // // File version chunk // diff --git a/src/tools/map_extractor/wdt.cpp b/src/tools/map_extractor/wdt.cpp index dedefbb64e5..90a07eafab3 100644 --- a/src/tools/map_extractor/wdt.cpp +++ b/src/tools/map_extractor/wdt.cpp @@ -2,23 +2,27 @@ #include "wdt.h" +u_map_fcc MWMOMagic = { {'M', 'W', 'M', 'O'} }; +u_map_fcc MPHDMagic = { {'M', 'P', 'H', 'D'} }; +u_map_fcc MAINMagic = { {'M', 'A', 'I', 'N'} }; + bool wdt_MWMO::prepareLoadedData() { - if (fcc != 'MWMO') + if (fcc != MWMOMagic.fcc) return false; return true; } bool wdt_MPHD::prepareLoadedData() { - if (fcc != 'MPHD') + if (fcc != MPHDMagic.fcc) return false; return true; } bool wdt_MAIN::prepareLoadedData() { - if (fcc != 'MAIN') + if (fcc != MAINMagic.fcc) return false; return true; } @@ -59,4 +63,4 @@ bool WDT_file::prepareLoadedData() if (!wmo->prepareLoadedData()) return false; return true; -} \ No newline at end of file +} diff --git a/src/tools/mesh_extractor/ADT.cpp b/src/tools/mesh_extractor/ADT.cpp index 8d7dce9ae11..c2ac19d5be0 100644 --- a/src/tools/mesh_extractor/ADT.cpp +++ b/src/tools/mesh_extractor/ADT.cpp @@ -3,7 +3,8 @@ #include "LiquidHandler.h" #include "WorldModelHandler.h" -ADT::ADT( std::string file ) : ObjectData(NULL), Data(NULL), _DoodadHandler(NULL), _WorldModelHandler(NULL), _LiquidHandler(NULL), HasObjectData(false) +ADT::ADT( std::string file ) : ObjectData(NULL), Data(NULL), HasObjectData(false), + _DoodadHandler(NULL), _WorldModelHandler(NULL), _LiquidHandler(NULL) { Data = new ChunkedData(file); ObjectData = new ChunkedData(Utils::Replace(file, ".adt", "_obj0.adt")); @@ -31,7 +32,6 @@ void ADT::Read() { Header.Read(Data->GetChunkByName("MHDR")->GetStream()); MapChunks.reserve(16 * 16); - int mapChunkIndex = 0; for (std::vector::iterator itr = Data->Chunks.begin(); itr != Data->Chunks.end(); ++itr) if ((*itr)->Name == "MCNK") diff --git a/src/tools/mesh_extractor/CMakeLists.txt b/src/tools/mesh_extractor/CMakeLists.txt index 8ef48a90742..29c571d9301 100644 --- a/src/tools/mesh_extractor/CMakeLists.txt +++ b/src/tools/mesh_extractor/CMakeLists.txt @@ -26,6 +26,7 @@ if( UNIX ) ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour ${CMAKE_SOURCE_DIR}/dep/libmpq ${CMAKE_SOURCE_DIR}/dep/g3dlite/include + ${ACE_INCLUDE_DIR} ${MYSQL_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} @@ -77,4 +78,4 @@ if( UNIX ) install(TARGETS MeshExtractor DESTINATION bin) elseif( WIN32 ) install(TARGETS MeshExtractor DESTINATION "${CMAKE_INSTALL_PREFIX}") -endif() \ No newline at end of file +endif() diff --git a/src/tools/mesh_extractor/Cache.h b/src/tools/mesh_extractor/Cache.h index 90e2c138376..34293b14b54 100644 --- a/src/tools/mesh_extractor/Cache.h +++ b/src/tools/mesh_extractor/Cache.h @@ -14,7 +14,7 @@ class GenericCache public: GenericCache() {} - static const int32 FlushLimit = 1000; + static const uint32 FlushLimit = 1000; void Insert(K key, T* val) { @@ -59,4 +59,4 @@ public: }; extern CacheClass* Cache; -#endif \ No newline at end of file +#endif diff --git a/src/tools/mesh_extractor/Chunk.cpp b/src/tools/mesh_extractor/Chunk.cpp index 2f521f1badd..9f2898a46e0 100644 --- a/src/tools/mesh_extractor/Chunk.cpp +++ b/src/tools/mesh_extractor/Chunk.cpp @@ -12,12 +12,12 @@ int32 Chunk::FindSubChunkOffset(std::string name) uint32 matched = 0; while (uint32(ftell(stream)) < Utils::Size(stream)) { - char b; - fread(&b, sizeof(char), 1, stream); - if (b == name[matched]) - ++matched; - else + char b = 0; + if (fread(&b, sizeof(char), 1, stream) != 1 || b != name[matched]) matched = 0; + else + ++matched; + if (matched == 4) return ftell(stream) - 4; } diff --git a/src/tools/mesh_extractor/ChunkedData.cpp b/src/tools/mesh_extractor/ChunkedData.cpp index 4d609d8f6b2..e0db12a6be7 100644 --- a/src/tools/mesh_extractor/ChunkedData.cpp +++ b/src/tools/mesh_extractor/ChunkedData.cpp @@ -36,7 +36,8 @@ void ChunkedData::Load( uint32 maxLength, uint32 chunksHint ) // Utils::Reverse(nameBytes); name = std::string(name.rbegin(), name.rend()); uint32 length; - fread(&length, sizeof(uint32), 1, Stream); + if (fread(&length, sizeof(uint32), 1, Stream) != 1) + continue; calcOffset += 8; Chunks.push_back(new Chunk(name.c_str(), length, calcOffset + baseOffset, Stream)); calcOffset += length; diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp index 013c0ff256a..9b5c9f9c77b 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.cpp +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -16,7 +16,7 @@ private: dtNavMeshParams Params; ContinentBuilder* cBuilder; public: - BuilderThread(ContinentBuilder* _cBuilder, bool deb, dtNavMeshParams& params) : Free(true), debug(deb), Params(params), cBuilder(_cBuilder) {} + BuilderThread(ContinentBuilder* _cBuilder, bool deb, dtNavMeshParams& params) : debug(deb), Params(params), cBuilder(_cBuilder), Free(true) {} void SetData(int x, int y, int map, std::string cont) { X = x; Y = y; MapId = map; Continent = cont; } int svc() @@ -113,7 +113,7 @@ void ContinentBuilder::Build(bool debug) std::vector Threads; for (uint32 i = 0; i < NumberOfThreads; ++i) Threads.push_back(new BuilderThread(this, debug, params)); - printf("Map %s ( %i ) has %i tiles. Building them with %i threads\n", Continent.c_str(), MapId, TileMap->TileTable.size(), NumberOfThreads); + printf("Map %s ( %i ) has %u tiles. Building them with %i threads\n", Continent.c_str(), MapId, uint32(TileMap->TileTable.size()), NumberOfThreads); for (std::vector::iterator itr = TileMap->TileTable.begin(); itr != TileMap->TileTable.end(); ++itr) { bool next = false; diff --git a/src/tools/mesh_extractor/ContinentBuilder.h b/src/tools/mesh_extractor/ContinentBuilder.h index 4c16fa0727e..3d7b879879e 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.h +++ b/src/tools/mesh_extractor/ContinentBuilder.h @@ -7,7 +7,11 @@ class ContinentBuilder { public: - ContinentBuilder(std::string continent, uint32 mapId, WDT* wdt, uint32 tn) : MapId(mapId), Continent(continent), TileMap(wdt), NumberOfThreads(tn), tileXMin(64), tileYMin(64), tileXMax(0), tileYMax(0) {} + ContinentBuilder(std::string continent, uint32 mapId, WDT* wdt, uint32 tn) : + Continent(continent), TileMap(wdt), MapId(mapId), + NumberOfThreads(tn), tileXMin(64), tileYMin(64), tileXMax(0), tileYMax(0) + {} + void Build(bool debug); void getTileBounds(uint32 tileX, uint32 tileY, float* verts, int vertCount, float* bmin, float* bmax); void CalculateTileBounds(); @@ -23,4 +27,4 @@ private: int tileXMax; int tileYMax; }; -#endif \ No newline at end of file +#endif diff --git a/src/tools/mesh_extractor/DBC.cpp b/src/tools/mesh_extractor/DBC.cpp index c50e02014da..5c54d975487 100644 --- a/src/tools/mesh_extractor/DBC.cpp +++ b/src/tools/mesh_extractor/DBC.cpp @@ -2,16 +2,19 @@ #include "DBC.h" #include "Common.h" -DBC::DBC( FILE* stream ) : StringBlock(NULL), IsFaulty(true), StringBlockSize(0) +DBC::DBC( FILE* stream ) : StringBlock(NULL), StringBlockSize(0), IsFaulty(true) { char magic[5]; - fread(&magic, sizeof(char), 4, stream); + uint count = 0; + count += fread(&magic, sizeof(char), 4, stream); magic[4] = '\0'; - fread(&RecordCount, sizeof(uint32), 1, stream); + count += fread(&RecordCount, sizeof(uint32), 1, stream); Records.reserve(RecordCount); - fread(&Fields, sizeof(uint32), 1, stream); - fread(&RecordSize, sizeof(uint32), 1, stream); - fread(&StringBlockSize, sizeof(uint32), 1, stream); + count += fread(&Fields, sizeof(uint32), 1, stream); + count += fread(&RecordSize, sizeof(uint32), 1, stream); + count += fread(&StringBlockSize, sizeof(uint32), 1, stream); + if (count != 8) + printf("DBC::DBC: Failed to read some data expected 8, read %u\n", count); for (int i = 0; i < RecordCount; i++) { @@ -26,13 +29,16 @@ DBC::DBC( FILE* stream ) : StringBlock(NULL), IsFaulty(true), StringBlockSize(0) break; } uint32 tmp; - fread(&tmp, sizeof(uint32), 1, stream); + if (fread(&tmp, sizeof(uint32), 1, stream) != 1) + printf("DBC::DBC: Failed to read some data expected 1, read 0\n"); rec->Values.push_back(tmp); size += 4; } } StringBlock = new uint8[StringBlockSize]; - fread(StringBlock, sizeof(uint8), StringBlockSize, stream); + count = fread(StringBlock, sizeof(uint8), StringBlockSize, stream); + if (count != StringBlockSize) + printf("DBC::DBC: Failed to read some data expected %u, read %u\n", StringBlockSize, count); } std::string DBC::GetStringByOffset( int offset ) diff --git a/src/tools/mesh_extractor/DoodadHandler.cpp b/src/tools/mesh_extractor/DoodadHandler.cpp index 4e8028b3dff..56c2a7986f8 100644 --- a/src/tools/mesh_extractor/DoodadHandler.cpp +++ b/src/tools/mesh_extractor/DoodadHandler.cpp @@ -30,7 +30,8 @@ void DoodadHandler::ProcessInternal( ChunkedData* subChunks ) for (uint32 i = 0; i < refCount; i++) { int32 index; - fread(&index, sizeof(int32), 1, stream); + if (int count = fread(&index, sizeof(int32), 1, stream) != 1) + printf("DoodadHandler::ProcessInternal: Failed to read some data expected 1, read %d\n", count); if (index < 0 || uint32(index) >= _definitions->size()) continue; DoodadDefinition doodad = (*_definitions)[index]; @@ -81,7 +82,8 @@ void DoodadHandler::ReadDoodadPaths( Chunk* id, Chunk* data ) FILE* idStream = id->GetStream(); fseek(idStream, i * 4, SEEK_CUR); uint32 offset; - fread(&offset, sizeof(uint32), 1, idStream); + if (fread(&offset, sizeof(uint32), 1, idStream) != 1) + printf("DoodadHandler::ReadDoodadPaths: Failed to read some data expected 1, read 0\n"); FILE* dataStream = data->GetStream(); fseek(dataStream, offset + data->Offset, SEEK_SET); _paths->push_back(Utils::ReadString(dataStream)); diff --git a/src/tools/mesh_extractor/DoodadHandler.h b/src/tools/mesh_extractor/DoodadHandler.h index a212b032d1d..981834ec7ac 100644 --- a/src/tools/mesh_extractor/DoodadHandler.h +++ b/src/tools/mesh_extractor/DoodadHandler.h @@ -19,12 +19,16 @@ public: void Read(FILE* stream) { - fread(&MmidIndex, sizeof(uint32), 1, stream); - fread(&UniqueId, sizeof(uint32), 1, stream); + int count = 0; + + count += fread(&MmidIndex, sizeof(uint32), 1, stream); + count += fread(&UniqueId, sizeof(uint32), 1, stream); Position = Vector3::Read(stream); Rotation = Vector3::Read(stream); - fread(&DecimalScale, sizeof(uint16), 1, stream); - fread(&Flags, sizeof(uint16), 1, stream); + count += fread(&DecimalScale, sizeof(uint16), 1, stream); + count += fread(&Flags, sizeof(uint16), 1, stream); + if (count != 4) + printf("DoodadDefinition::Read: Failed to read some data expected 4, read %d\n", count); } }; @@ -50,4 +54,4 @@ private: std::vector* _definitions; std::vector* _paths; }; -#endif \ No newline at end of file +#endif diff --git a/src/tools/mesh_extractor/LiquidHandler.cpp b/src/tools/mesh_extractor/LiquidHandler.cpp index 7844130ab34..285ea1a5b74 100644 --- a/src/tools/mesh_extractor/LiquidHandler.cpp +++ b/src/tools/mesh_extractor/LiquidHandler.cpp @@ -50,17 +50,17 @@ void LiquidHandler::HandleNewLiquid() fseek(stream, chunk->Offset + information.OffsetMask2, SEEK_SET); uint32 size = ceil(information.Width * information.Height / 8.0f); uint8* altMask = new uint8[size]; - fread(altMask, sizeof(uint8), size, stream); - - for (uint32 mi = 0; mi < size; mi++) - renderMask.Mask[mi + information.OffsetY] |= altMask[mi]; + if (fread(altMask, sizeof(uint8), size, stream) == size) + for (uint32 mi = 0; mi < size; mi++) + renderMask.Mask[mi + information.OffsetY] |= altMask[mi]; delete[] altMask; } fseek(stream, chunk->Offset + information.OffsetHeightmap, SEEK_SET); for (int y = information.OffsetY; y < (information.OffsetY + information.Height); y++) for (int x = information.OffsetX; x < (information.OffsetX + information.Width); x++) - fread(&heights[x][y], sizeof(float), 1, stream); + if (fread(&heights[x][y], sizeof(float), 1, stream) != 1) + return; } else { diff --git a/src/tools/mesh_extractor/MapChunk.cpp b/src/tools/mesh_extractor/MapChunk.cpp index 67f4061035e..8fe40773d43 100644 --- a/src/tools/mesh_extractor/MapChunk.cpp +++ b/src/tools/mesh_extractor/MapChunk.cpp @@ -58,7 +58,8 @@ void MapChunk::GenerateVertices( FILE* stream ) for (int i = 0; i < values; i++) { float tmp; - fread(&tmp, sizeof(float), 1, stream); + if (fread(&tmp, sizeof(float), 1, stream) != 1) + printf("MapChunk::GenerateVertices: Failed to read some data expected 1, read 0\n"); Vector3 vert(Header.Position.x - (j * (Constants::UnitSize * 0.5f)), Header.Position.y - (i * Constants::UnitSize), Header.Position.z + tmp); if (values == 8) vert.y -= Constants::UnitSize * 0.5f; diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index 7379ba87117..b164ff5861d 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -59,7 +59,7 @@ void ExtractDBCs() { printf("Extracting DBCs for locale %s\n", MPQManager::Languages[*itr]); std::string path = baseDBCPath; - if (*itr != MPQHandler->BaseLocale) + if (*itr != uint32(MPQHandler->BaseLocale)) { path += std::string(MPQManager::Languages[*itr]) + "/"; Utils::CreateDir(path); @@ -198,7 +198,6 @@ void ExtractGameobjectModels() fwrite(&model.Header.CountGroups, sizeof(uint32), 1, output); fwrite(&model.Header.WmoId, sizeof(uint32), 1, output); - uint32 i = 0; for (std::vector::iterator itr2 = model.Groups.begin(); itr2 != model.Groups.end(); ++itr2) { fwrite(&itr2->Header.Flags, sizeof(uint32), 1, output); @@ -261,7 +260,7 @@ bool HandleArgs(int argc, char** argv, uint32& threads, std::set& mapLis for (Tokenizer::const_iterator itr = tokens.begin(); itr != tokens.end(); ++itr) mapList.insert(atoi(*itr)); - printf("Extracting only provided list of maps (%u).\n", mapList.size()); + printf("Extracting only provided list of maps (%u).\n", uint32(mapList.size())); } else if (strcmp(argv[i], "--debug") == 0) { @@ -314,18 +313,27 @@ void LoadTile(dtNavMesh*& navMesh, const char* tile) { FILE* f = fopen(tile, "rb"); MmapTileHeader header; - fread(&header, sizeof(MmapTileHeader), 1, f); - uint8* nav = new uint8[header.size]; - fread(nav, header.size, 1, f); - dtStatus res = navMesh->addTile(nav, header.size, DT_TILE_FREE_DATA, 0, NULL); + if (fread(&header, sizeof(MmapTileHeader), 1, f) != 1) + return; + + uint8* nav = new uint8[header.size]; + if (fread(nav, header.size, 1, f) != 1) + return; + + navMesh->addTile(nav, header.size, DT_TILE_FREE_DATA, 0, NULL); fclose(f); } int main(int argc, char* argv[]) { - system("pause"); + if (!system("pause")) + { + printf("main: Error in system call to pause\n"); + return -1; + } + uint32 threads = 4, extractFlags = 0; std::set mapIds; bool debug = false; @@ -383,8 +391,13 @@ int main(int argc, char* argv[]) FILE* mmap = fopen(".mmap", "rb"); dtNavMeshParams params; - fread(¶ms, sizeof(dtNavMeshParams), 1, mmap); + int count = fread(¶ms, sizeof(dtNavMeshParams), 1, mmap); fclose(mmap); + if (count != 1) + { + printf("main: Error reading from .mmap\n"); + return 0; + } dtNavMesh* navMesh = new dtNavMesh(); dtNavMeshQuery* navMeshQuery = new dtNavMeshQuery(); @@ -401,10 +414,9 @@ int main(int argc, char* argv[]) float nearestPt[3]; - dtStatus status = navMeshQuery->findNearestPoly(m_spos, m_polyPickExt, &m_filter, &m_startRef, nearestPt); - status = navMeshQuery->findNearestPoly(m_epos, m_polyPickExt, &m_filter, &m_endRef, nearestPt); + navMeshQuery->findNearestPoly(m_spos, m_polyPickExt, &m_filter, &m_startRef, nearestPt); + navMeshQuery->findNearestPoly(m_epos, m_polyPickExt, &m_filter, &m_endRef, nearestPt); - // if ( !m_startRef || !m_endRef ) { std::cerr << "Could not find any nearby poly's (" << m_startRef << "," << m_endRef << ")" << std::endl; @@ -415,4 +427,4 @@ int main(int argc, char* argv[]) } return 0; -} \ No newline at end of file +} diff --git a/src/tools/mesh_extractor/Model.cpp b/src/tools/mesh_extractor/Model.cpp index 10fde0ebc2d..77b1adbeaa0 100644 --- a/src/tools/mesh_extractor/Model.cpp +++ b/src/tools/mesh_extractor/Model.cpp @@ -47,9 +47,12 @@ void Model::ReadBoundingTriangles( FILE* stream ) { Triangle tri; tri.Type = Constants::TRIANGLE_TYPE_DOODAD; - fread(&tri.V0, sizeof(uint16), 1, stream); - fread(&tri.V1, sizeof(uint16), 1, stream); - fread(&tri.V2, sizeof(uint16), 1, stream); + int count = 0; + count += fread(&tri.V0, sizeof(uint16), 1, stream); + count += fread(&tri.V1, sizeof(uint16), 1, stream); + count += fread(&tri.V2, sizeof(uint16), 1, stream); + if (count != 3) + printf("Model::ReadBoundingTriangles: Error reading data, expected 3, read %d\n", count); Triangles.push_back(tri); } } diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 2a02bc50cd4..4a14cbbd51d 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -12,7 +12,8 @@ #include "ace/Synch.h" -TileBuilder::TileBuilder(ContinentBuilder* _cBuilder, std::string world, int x, int y, uint32 mapId) : _Geometry(NULL), World(world), X(x), Y(y), MapId(mapId), DataSize(0), cBuilder(_cBuilder) +TileBuilder::TileBuilder(ContinentBuilder* _cBuilder, std::string world, int x, int y, uint32 mapId) : + World(world), X(x), Y(y), MapId(mapId), _Geometry(NULL), DataSize(0), cBuilder(_cBuilder) { /* Test, non-working values @@ -62,7 +63,7 @@ TileBuilder::TileBuilder(ContinentBuilder* _cBuilder, std::string world, int x, Context = new rcContext; } -void TileBuilder::CalculateTileBounds( float*& bmin, float*& bmax, dtNavMeshParams& navMeshParams ) +void TileBuilder::CalculateTileBounds( float*& bmin, float*& bmax, dtNavMeshParams& /*navMeshParams*/ ) { bmin = new float[3]; bmax = new float[3]; diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp index 3639cb88acf..119ac94f94f 100644 --- a/src/tools/mesh_extractor/Utils.cpp +++ b/src/tools/mesh_extractor/Utils.cpp @@ -53,8 +53,7 @@ std::string Utils::ReadString( FILE* file ) while (true) { char b; - fread(&b, sizeof(char), 1, file); - if (b == 0) + if (fread(&b, sizeof(char), 1, file) != 1 || b == 0) break; ret[i++] = b; } @@ -155,7 +154,7 @@ Vector3 Utils::VectorTransform( Vector3 vec, G3D::Matrix4 matrix ) std::string Utils::GetPathBase( std::string path ) { - int lastIndex = path.find_last_of("."); + size_t lastIndex = path.find_last_of("."); if (lastIndex != std::string::npos) return path.substr(0, lastIndex); return path; @@ -164,11 +163,12 @@ std::string Utils::GetPathBase( std::string path ) Vector3 Vector3::Read( FILE* file ) { Vector3 ret; - fread(&ret, sizeof(Vector3), 1, file); + if (fread(&ret, sizeof(Vector3), 1, file) != 1) + printf("Vector3::Read: Failed to read some data expected 1, read 0\n"); return ret; } -Vector3 Utils::GetLiquidVert(G3D::Matrix4 transformation, Vector3 basePosition, float height, int x, int y) +Vector3 Utils::GetLiquidVert(G3D::Matrix4 transformation, Vector3 basePosition, float height, int /*x*/, int /*y*/) { if (Utils::Distance(height, 0.0f) > 0.5f) basePosition.z = 0.0f; @@ -208,14 +208,18 @@ void Utils::SaveToDisk( FILE* stream, std::string path ) FILE* disk = fopen(path.c_str(), "wb"); if (!disk) { - printf("Could not save file %s to disk, please verify that you have write permissions on that directory\n", path.c_str()); + printf("SaveToDisk: Could not save file %s to disk, please verify that you have write permissions on that directory\n", path.c_str()); return; } uint32 size = Utils::Size(stream); uint8* data = new uint8[size]; // Read the data to an array - fread(data, 1, size, stream); + if (fread(data, 1, size, stream) != 1) + { + printf("SaveToDisk: Error reading from Stream while trying to save file %s to disck.\n", path.c_str()); + return; + } // And write it in the file fwrite(data, 1, size, disk); @@ -242,136 +246,164 @@ std::string Utils::GetExtension( std::string path ) void MapChunkHeader::Read(FILE* stream) { - fread(&Flags, sizeof(uint32), 1, stream); - fread(&IndexX, sizeof(uint32), 1, stream); - fread(&IndexY, sizeof(uint32), 1, stream); - fread(&Layers, sizeof(uint32), 1, stream); - fread(&DoodadRefs, sizeof(uint32), 1, stream); - fread(&OffsetMCVT, sizeof(uint32), 1, stream); - fread(&OffsetMCNR, sizeof(uint32), 1, stream); - fread(&OffsetMCLY, sizeof(uint32), 1, stream); - fread(&OffsetMCRF, sizeof(uint32), 1, stream); - fread(&OffsetMCAL, sizeof(uint32), 1, stream); - fread(&SizeMCAL, sizeof(uint32), 1, stream); - fread(&OffsetMCSH, sizeof(uint32), 1, stream); - fread(&SizeMCSH, sizeof(uint32), 1, stream); - fread(&AreaId, sizeof(uint32), 1, stream); - fread(&MapObjectRefs, sizeof(uint32), 1, stream); - fread(&Holes, sizeof(uint32), 1, stream); + int count = 0; + + count += fread(&Flags, sizeof(uint32), 1, stream); + count += fread(&IndexX, sizeof(uint32), 1, stream); + count += fread(&IndexY, sizeof(uint32), 1, stream); + count += fread(&Layers, sizeof(uint32), 1, stream); + count += fread(&DoodadRefs, sizeof(uint32), 1, stream); + count += fread(&OffsetMCVT, sizeof(uint32), 1, stream); + count += fread(&OffsetMCNR, sizeof(uint32), 1, stream); + count += fread(&OffsetMCLY, sizeof(uint32), 1, stream); + count += fread(&OffsetMCRF, sizeof(uint32), 1, stream); + count += fread(&OffsetMCAL, sizeof(uint32), 1, stream); + count += fread(&SizeMCAL, sizeof(uint32), 1, stream); + count += fread(&OffsetMCSH, sizeof(uint32), 1, stream); + count += fread(&SizeMCSH, sizeof(uint32), 1, stream); + count += fread(&AreaId, sizeof(uint32), 1, stream); + count += fread(&MapObjectRefs, sizeof(uint32), 1, stream); + count += fread(&Holes, sizeof(uint32), 1, stream); LowQualityTextureMap = new uint32[4]; - fread(LowQualityTextureMap, sizeof(uint32), 4, stream); - fread(&PredTex, sizeof(uint32), 1, stream); - fread(&NumberEffectDoodad, sizeof(uint32), 1, stream); - fread(&OffsetMCSE, sizeof(uint32), 1, stream); - fread(&SoundEmitters, sizeof(uint32), 1, stream); - fread(&OffsetMCLQ, sizeof(uint32), 1, stream); - fread(&SizeMCLQ, sizeof(uint32), 1, stream); + count += fread(LowQualityTextureMap, sizeof(uint32), 4, stream); + count += fread(&PredTex, sizeof(uint32), 1, stream); + count += fread(&NumberEffectDoodad, sizeof(uint32), 1, stream); + count += fread(&OffsetMCSE, sizeof(uint32), 1, stream); + count += fread(&SoundEmitters, sizeof(uint32), 1, stream); + count += fread(&OffsetMCLQ, sizeof(uint32), 1, stream); + count += fread(&SizeMCLQ, sizeof(uint32), 1, stream); Position = Vector3::Read(stream); - fread(&OffsetMCCV, sizeof(uint32), 1, stream); + count += fread(&OffsetMCCV, sizeof(uint32), 1, stream); + + if (count != 27) + printf("MapChunkHeader::Read: Failed to read some data expected 27, read %d\n", count); } void MHDR::Read(FILE* stream) { - fread(&Flags, sizeof(uint32), 1, stream); - fread(&OffsetMCIN, sizeof(uint32), 1, stream); - fread(&OffsetMTEX, sizeof(uint32), 1, stream); - fread(&OffsetMMDX, sizeof(uint32), 1, stream); - fread(&OffsetMMID, sizeof(uint32), 1, stream); - fread(&OffsetMWMO, sizeof(uint32), 1, stream); - fread(&OffsetMWID, sizeof(uint32), 1, stream); - fread(&OffsetMDDF, sizeof(uint32), 1, stream); - fread(&OffsetMODF, sizeof(uint32), 1, stream); - fread(&OffsetMFBO, sizeof(uint32), 1, stream); - fread(&OffsetMH2O, sizeof(uint32), 1, stream); - fread(&OffsetMTFX, sizeof(uint32), 1, stream); + int count = 0; + + count += fread(&Flags, sizeof(uint32), 1, stream); + count += fread(&OffsetMCIN, sizeof(uint32), 1, stream); + count += fread(&OffsetMTEX, sizeof(uint32), 1, stream); + count += fread(&OffsetMMDX, sizeof(uint32), 1, stream); + count += fread(&OffsetMMID, sizeof(uint32), 1, stream); + count += fread(&OffsetMWMO, sizeof(uint32), 1, stream); + count += fread(&OffsetMWID, sizeof(uint32), 1, stream); + count += fread(&OffsetMDDF, sizeof(uint32), 1, stream); + count += fread(&OffsetMODF, sizeof(uint32), 1, stream); + count += fread(&OffsetMFBO, sizeof(uint32), 1, stream); + count += fread(&OffsetMH2O, sizeof(uint32), 1, stream); + count += fread(&OffsetMTFX, sizeof(uint32), 1, stream); + + if (count != 12) + printf("MHDR::Read: Failed to read some data expected 12, read %d\n", count); } void ModelHeader::Read(FILE* stream) { - fread(&Magic, sizeof(char), 4, stream); + int count = 0; + + count += fread(&Magic, sizeof(char), 4, stream); Magic[4] = '\0'; // null-terminate it. - fread(&Version, sizeof(uint32), 1, stream); - fread(&LengthModelName, sizeof(uint32), 1, stream); - fread(&OffsetName, sizeof(uint32), 1, stream); - fread(&ModelFlags, sizeof(uint32), 1, stream); - fread(&CountGlobalSequences, sizeof(uint32), 1, stream); - fread(&OffsetGlobalSequences, sizeof(uint32), 1, stream); - fread(&CountAnimations, sizeof(uint32), 1, stream); - fread(&OffsetAnimations, sizeof(uint32), 1, stream); - fread(&CountAnimationLookup, sizeof(uint32), 1, stream); - fread(&OffsetAnimationLookup, sizeof(uint32), 1, stream); - fread(&CountBones, sizeof(uint32), 1, stream); - fread(&OffsetBones, sizeof(uint32), 1, stream); - fread(&CountKeyBoneLookup, sizeof(uint32), 1, stream); - fread(&OffsetKeyBoneLookup, sizeof(uint32), 1, stream); - fread(&CountVertices, sizeof(uint32), 1, stream); - fread(&OffsetVertices, sizeof(uint32), 1, stream); - fread(&CountViews, sizeof(uint32), 1, stream); - fread(&CountColors, sizeof(uint32), 1, stream); - fread(&OffsetColors, sizeof(uint32), 1, stream); - fread(&CountTextures, sizeof(uint32), 1, stream); - fread(&OffsetTextures, sizeof(uint32), 1, stream); - fread(&CountTransparency, sizeof(uint32), 1, stream); - fread(&OffsetTransparency, sizeof(uint32), 1, stream); - fread(&CountUvAnimation, sizeof(uint32), 1, stream); - fread(&OffsetUvAnimation, sizeof(uint32), 1, stream); - fread(&CountTexReplace, sizeof(uint32), 1, stream); - fread(&OffsetTexReplace, sizeof(uint32), 1, stream); - fread(&CountRenderFlags, sizeof(uint32), 1, stream); - fread(&OffsetRenderFlags, sizeof(uint32), 1, stream); - fread(&CountBoneLookup, sizeof(uint32), 1, stream); - fread(&OffsetBoneLookup, sizeof(uint32), 1, stream); - fread(&CountTexLookup, sizeof(uint32), 1, stream); - fread(&OffsetTexLookup, sizeof(uint32), 1, stream); - fread(&CountTexUnits, sizeof(uint32), 1, stream); - fread(&OffsetTexUnits, sizeof(uint32), 1, stream); - fread(&CountTransLookup, sizeof(uint32), 1, stream); - fread(&OffsetTransLookup, sizeof(uint32), 1, stream); - fread(&CountUvAnimLookup, sizeof(uint32), 1, stream); - fread(&OffsetUvAnimLookup, sizeof(uint32), 1, stream); + count += fread(&Version, sizeof(uint32), 1, stream); + count += fread(&LengthModelName, sizeof(uint32), 1, stream); + count += fread(&OffsetName, sizeof(uint32), 1, stream); + count += fread(&ModelFlags, sizeof(uint32), 1, stream); + count += fread(&CountGlobalSequences, sizeof(uint32), 1, stream); + count += fread(&OffsetGlobalSequences, sizeof(uint32), 1, stream); + count += fread(&CountAnimations, sizeof(uint32), 1, stream); + count += fread(&OffsetAnimations, sizeof(uint32), 1, stream); + count += fread(&CountAnimationLookup, sizeof(uint32), 1, stream); + count += fread(&OffsetAnimationLookup, sizeof(uint32), 1, stream); + count += fread(&CountBones, sizeof(uint32), 1, stream); + count += fread(&OffsetBones, sizeof(uint32), 1, stream); + count += fread(&CountKeyBoneLookup, sizeof(uint32), 1, stream); + count += fread(&OffsetKeyBoneLookup, sizeof(uint32), 1, stream); + count += fread(&CountVertices, sizeof(uint32), 1, stream); + count += fread(&OffsetVertices, sizeof(uint32), 1, stream); + count += fread(&CountViews, sizeof(uint32), 1, stream); + count += fread(&CountColors, sizeof(uint32), 1, stream); + count += fread(&OffsetColors, sizeof(uint32), 1, stream); + count += fread(&CountTextures, sizeof(uint32), 1, stream); + count += fread(&OffsetTextures, sizeof(uint32), 1, stream); + count += fread(&CountTransparency, sizeof(uint32), 1, stream); + count += fread(&OffsetTransparency, sizeof(uint32), 1, stream); + count += fread(&CountUvAnimation, sizeof(uint32), 1, stream); + count += fread(&OffsetUvAnimation, sizeof(uint32), 1, stream); + count += fread(&CountTexReplace, sizeof(uint32), 1, stream); + count += fread(&OffsetTexReplace, sizeof(uint32), 1, stream); + count += fread(&CountRenderFlags, sizeof(uint32), 1, stream); + count += fread(&OffsetRenderFlags, sizeof(uint32), 1, stream); + count += fread(&CountBoneLookup, sizeof(uint32), 1, stream); + count += fread(&OffsetBoneLookup, sizeof(uint32), 1, stream); + count += fread(&CountTexLookup, sizeof(uint32), 1, stream); + count += fread(&OffsetTexLookup, sizeof(uint32), 1, stream); + count += fread(&CountTexUnits, sizeof(uint32), 1, stream); + count += fread(&OffsetTexUnits, sizeof(uint32), 1, stream); + count += fread(&CountTransLookup, sizeof(uint32), 1, stream); + count += fread(&OffsetTransLookup, sizeof(uint32), 1, stream); + count += fread(&CountUvAnimLookup, sizeof(uint32), 1, stream); + count += fread(&OffsetUvAnimLookup, sizeof(uint32), 1, stream); VertexBox[0] = Vector3::Read(stream); VertexBox[1] = Vector3::Read(stream); - fread(&VertexRadius, sizeof(float), 1, stream); + count += fread(&VertexRadius, sizeof(float), 1, stream); BoundingBox[0] = Vector3::Read(stream); BoundingBox[1] = Vector3::Read(stream); - fread(&BoundingRadius, sizeof(float), 1, stream); - fread(&CountBoundingTriangles, sizeof(uint32), 1, stream); - fread(&OffsetBoundingTriangles, sizeof(uint32), 1, stream); - fread(&CountBoundingVertices, sizeof(uint32), 1, stream); - fread(&OffsetBoundingVertices, sizeof(uint32), 1, stream); - fread(&CountBoundingNormals, sizeof(uint32), 1, stream); - fread(&OffsetBoundingNormals, sizeof(uint32), 1, stream); + count += fread(&BoundingRadius, sizeof(float), 1, stream); + count += fread(&CountBoundingTriangles, sizeof(uint32), 1, stream); + count += fread(&OffsetBoundingTriangles, sizeof(uint32), 1, stream); + count += fread(&CountBoundingVertices, sizeof(uint32), 1, stream); + count += fread(&OffsetBoundingVertices, sizeof(uint32), 1, stream); + count += fread(&CountBoundingNormals, sizeof(uint32), 1, stream); + count += fread(&OffsetBoundingNormals, sizeof(uint32), 1, stream); + + if (count != 51) + printf("ModelHeader::Read: Failed to read some data expected 51, read %d\n", count); + } WorldModelHeader WorldModelHeader::Read(FILE* stream) { WorldModelHeader ret; - fread(&ret.CountMaterials, sizeof(uint32), 1, stream); - fread(&ret.CountGroups, sizeof(uint32), 1, stream); - fread(&ret.CountPortals, sizeof(uint32), 1, stream); - fread(&ret.CountLights, sizeof(uint32), 1, stream); - fread(&ret.CountModels, sizeof(uint32), 1, stream); - fread(&ret.CountDoodads, sizeof(uint32), 1, stream); - fread(&ret.CountSets, sizeof(uint32), 1, stream); - fread(&ret.AmbientColorUnk, sizeof(uint32), 1, stream); - fread(&ret.WmoId, sizeof(uint32), 1, stream); + int count = 0; + + count += fread(&ret.CountMaterials, sizeof(uint32), 1, stream); + count += fread(&ret.CountGroups, sizeof(uint32), 1, stream); + count += fread(&ret.CountPortals, sizeof(uint32), 1, stream); + count += fread(&ret.CountLights, sizeof(uint32), 1, stream); + count += fread(&ret.CountModels, sizeof(uint32), 1, stream); + count += fread(&ret.CountDoodads, sizeof(uint32), 1, stream); + count += fread(&ret.CountSets, sizeof(uint32), 1, stream); + count += fread(&ret.AmbientColorUnk, sizeof(uint32), 1, stream); + count += fread(&ret.WmoId, sizeof(uint32), 1, stream); ret.BoundingBox[0] = Vector3::Read(stream); ret.BoundingBox[1] = Vector3::Read(stream); - fread(&ret.LiquidTypeRelated, sizeof(uint32), 1, stream); + count += fread(&ret.LiquidTypeRelated, sizeof(uint32), 1, stream); + + if (count != 10) + printf("WorldModelHeader::Read: Failed to read some data expected 10, read %d\n", count); + return ret; } DoodadInstance DoodadInstance::Read(FILE* stream) { DoodadInstance ret; - fread(&ret.FileOffset, sizeof(uint32), 1, stream); + int count = 0; + + count += fread(&ret.FileOffset, sizeof(uint32), 1, stream); ret.Position = Vector3::Read(stream); - fread(&ret.QuatW, sizeof(float), 1, stream); - fread(&ret.QuatX, sizeof(float), 1, stream); - fread(&ret.QuatY, sizeof(float), 1, stream); - fread(&ret.QuatZ, sizeof(float), 1, stream); - fread(&ret.Scale, sizeof(float), 1, stream); - fread(&ret.LightColor, sizeof(uint32), 1, stream); + count += fread(&ret.QuatW, sizeof(float), 1, stream); + count += fread(&ret.QuatX, sizeof(float), 1, stream); + count += fread(&ret.QuatY, sizeof(float), 1, stream); + count += fread(&ret.QuatZ, sizeof(float), 1, stream); + count += fread(&ret.Scale, sizeof(float), 1, stream); + count += fread(&ret.LightColor, sizeof(uint32), 1, stream); + + if (count != 7) + printf("DoodadInstance::Read: Failed to read some data expected 7, read %d\n", count); + return ret; } @@ -379,24 +411,35 @@ DoodadSet DoodadSet::Read(FILE* stream) { DoodadSet ret; char name[21]; - fread(&name, sizeof(char), 20, stream); + int count = 0; + + count += fread(&name, sizeof(char), 20, stream); name[20] = '\0'; ret.Name = name; - fread(&ret.FirstInstanceIndex, sizeof(uint32), 1, stream); - fread(&ret.CountInstances, sizeof(uint32), 1, stream); - fread(&ret.UnknownZero, sizeof(uint32), 1, stream); + count += fread(&ret.FirstInstanceIndex, sizeof(uint32), 1, stream); + count += fread(&ret.CountInstances, sizeof(uint32), 1, stream); + count += fread(&ret.UnknownZero, sizeof(uint32), 1, stream); + + if (count != 23) + printf("DoodadSet::Read: Failed to read some data expected 23, read %d\n", count); + return ret; } LiquidHeader LiquidHeader::Read(FILE* stream) { LiquidHeader ret; - fread(&ret.CountXVertices, sizeof(uint32), 1, stream); - fread(&ret.CountYVertices, sizeof(uint32), 1, stream); - fread(&ret.Width, sizeof(uint32), 1, stream); - fread(&ret.Height, sizeof(uint32), 1, stream); + int count = 0; + count += fread(&ret.CountXVertices, sizeof(uint32), 1, stream); + count += fread(&ret.CountYVertices, sizeof(uint32), 1, stream); + count += fread(&ret.Width, sizeof(uint32), 1, stream); + count += fread(&ret.Height, sizeof(uint32), 1, stream); ret.BaseLocation = Vector3::Read(stream); - fread(&ret.MaterialId, sizeof(uint16), 1, stream); + count += fread(&ret.MaterialId, sizeof(uint16), 1, stream); + + if (count != 5) + printf("LiquidHeader::Read: Failed to read some data expected 5, read %d\n", count); + return ret; } @@ -416,10 +459,12 @@ LiquidData LiquidData::Read(FILE* stream, LiquidHeader& header) for (uint32 x = 0; x < header.CountXVertices; x++) { uint32 discard; - fread(&discard, sizeof(uint32), 1, stream); float tmp; - fread(&tmp, sizeof(float), 1, stream); - ret.HeightMap[x][y] = tmp; + if (fread(&discard, sizeof(uint32), 1, stream) == 1 && + fread(&tmp, sizeof(float), 1, stream) == 1) + { + ret.HeightMap[x][y] = tmp; + } } } @@ -427,9 +472,9 @@ LiquidData LiquidData::Read(FILE* stream, LiquidHeader& header) { for (uint32 x = 0; x < header.Width; x++) { - uint8 tmp; - fread(&tmp, sizeof(uint8), 1, stream); - ret.RenderFlags[x][y] = tmp; + uint8 tmp = 0; + if (fread(&tmp, sizeof(uint8), 1, stream) == 1) + ret.RenderFlags[x][y] = tmp; } } @@ -439,7 +484,8 @@ LiquidData LiquidData::Read(FILE* stream, LiquidHeader& header) H2ORenderMask H2ORenderMask::Read(FILE* stream) { H2ORenderMask ret; - fread(&ret.Mask, sizeof(uint8), 8, stream); + if (int count = fread(&ret.Mask, sizeof(uint8), 8, stream) != 8) + printf("H2OHeader::Read: Failed to read some data expected 8, read %d\n", count); return ret; } @@ -458,25 +504,35 @@ bool MCNKLiquidData::IsWater(int x, int y, float height) H2OHeader H2OHeader::Read(FILE* stream) { H2OHeader ret; - fread(&ret.OffsetInformation, sizeof(uint32), 1, stream); - fread(&ret.LayerCount, sizeof(uint32), 1, stream); - fread(&ret.OffsetRender, sizeof(uint32), 1, stream); + int count = 0; + count += fread(&ret.OffsetInformation, sizeof(uint32), 1, stream); + count += fread(&ret.LayerCount, sizeof(uint32), 1, stream); + count += fread(&ret.OffsetRender, sizeof(uint32), 1, stream); + + if (count != 3) + printf("H2OHeader::Read: Failed to read some data expected 3, read %d\n", count); + return ret; } H2OInformation H2OInformation::Read(FILE* stream) { H2OInformation ret; - fread(&ret.LiquidType, sizeof(uint16), 1, stream); - fread(&ret.Flags, sizeof(uint16), 1, stream); - fread(&ret.HeightLevel1, sizeof(float), 1, stream); - fread(&ret.HeightLevel2, sizeof(float), 1, stream); - fread(&ret.OffsetX, sizeof(uint8), 1, stream); - fread(&ret.OffsetY, sizeof(uint8), 1, stream); - fread(&ret.Width, sizeof(uint8), 1, stream); - fread(&ret.Height, sizeof(uint8), 1, stream); - fread(&ret.OffsetMask2, sizeof(uint32), 1, stream); - fread(&ret.OffsetHeightmap, sizeof(uint32), 1, stream); + int count = 0; + count += fread(&ret.LiquidType, sizeof(uint16), 1, stream); + count += fread(&ret.Flags, sizeof(uint16), 1, stream); + count += fread(&ret.HeightLevel1, sizeof(float), 1, stream); + count += fread(&ret.HeightLevel2, sizeof(float), 1, stream); + count += fread(&ret.OffsetX, sizeof(uint8), 1, stream); + count += fread(&ret.OffsetY, sizeof(uint8), 1, stream); + count += fread(&ret.Width, sizeof(uint8), 1, stream); + count += fread(&ret.Height, sizeof(uint8), 1, stream); + count += fread(&ret.OffsetMask2, sizeof(uint32), 1, stream); + count += fread(&ret.OffsetHeightmap, sizeof(uint32), 1, stream); + + if (count != 10) + printf("H2OInformation::Read: Failed to read some data expected 10, read %d\n", count); + return ret; } @@ -492,17 +548,21 @@ char* Utils::GetPlainName(const char* FileName) WMOGroupHeader WMOGroupHeader::Read( FILE* stream ) { WMOGroupHeader ret; - fread(&ret.OffsetGroupName, sizeof(uint32), 1, stream); - fread(&ret.OffsetDescriptiveName, sizeof(uint32), 1, stream); - fread(&ret.Flags, sizeof(uint32), 1, stream); + int count = 0; + count += fread(&ret.OffsetGroupName, sizeof(uint32), 1, stream); + count += fread(&ret.OffsetDescriptiveName, sizeof(uint32), 1, stream); + count += fread(&ret.Flags, sizeof(uint32), 1, stream); ret.BoundingBox[0] = Vector3::Read(stream); ret.BoundingBox[1] = Vector3::Read(stream); - fread(&ret.OffsetPortals, sizeof(uint32), 1, stream); - fread(&ret.CountPortals, sizeof(uint32), 1, stream); - fread(&ret.CountBatches, sizeof(uint16), 4, stream); - fread(&ret.Fogs, sizeof(uint8), 4, stream); - fread(&ret.LiquidTypeRelated, sizeof(uint32), 1, stream); - fread(&ret.WmoId, sizeof(uint32), 1, stream); - + count += fread(&ret.OffsetPortals, sizeof(uint32), 1, stream); + count += fread(&ret.CountPortals, sizeof(uint32), 1, stream); + count += fread(&ret.CountBatches, sizeof(uint16), 4, stream); + count += fread(&ret.Fogs, sizeof(uint8), 4, stream); + count += fread(&ret.LiquidTypeRelated, sizeof(uint32), 1, stream); + count += fread(&ret.WmoId, sizeof(uint32), 1, stream); + + if (count != 15) + printf("WMOGroupHeader::Read: Failed to read some data expected 15, read %d\n", count); + return ret; } diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index c5dd04fde06..e7380ed8142 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -40,7 +40,7 @@ template struct Triangle { Triangle() {} - Triangle(Constants::TriangleType type, T v0, T v1, T v2) : Type(type), V0(v0), V1(v1), V2(v2) {} + Triangle(Constants::TriangleType type, T v0, T v1, T v2) : V0(v0), V1(v1), V2(v2), Type(type) {} T V0; T V1; T V2; @@ -374,4 +374,4 @@ public: static std::string GetExtension( std::string path ); static char* GetPlainName(const char* FileName); }; -#endif \ No newline at end of file +#endif diff --git a/src/tools/mesh_extractor/WDT.cpp b/src/tools/mesh_extractor/WDT.cpp index f0c3091c04e..70d140e79ed 100644 --- a/src/tools/mesh_extractor/WDT.cpp +++ b/src/tools/mesh_extractor/WDT.cpp @@ -4,7 +4,7 @@ #include "Utils.h" #include "WorldModelHandler.h" -WDT::WDT(std::string file) : IsValid(false), IsGlobalModel(false) +WDT::WDT(std::string file) : IsGlobalModel(false), IsValid(false) { Data = new ChunkedData(file, 2); ReadTileTable(); @@ -37,8 +37,13 @@ void WDT::ReadTileTable() const uint32 hasTileFlag = 0x1; uint32 flags; uint32 discard; - fread(&flags, sizeof(uint32), 1, stream); - fread(&discard, sizeof(uint32), 1, stream); + int count = 0; + count += fread(&flags, sizeof(uint32), 1, stream); + count += fread(&discard, sizeof(uint32), 1, stream); + + if (count != 2) + printf("WDT::ReadTileTable: Failed to read some data expected 2, read %d\n", count); + if (flags & hasTileFlag) TileTable.push_back(TilePos(x, y)); diff --git a/src/tools/mesh_extractor/WorldModelGroup.cpp b/src/tools/mesh_extractor/WorldModelGroup.cpp index 35a5ba69782..5eeef824b1a 100644 --- a/src/tools/mesh_extractor/WorldModelGroup.cpp +++ b/src/tools/mesh_extractor/WorldModelGroup.cpp @@ -3,7 +3,7 @@ #include "Chunk.h" #include "Utils.h" -WorldModelGroup::WorldModelGroup( std::string path, int groupIndex ) : GroupIndex(groupIndex), IsBad(false), MOBA(NULL) +WorldModelGroup::WorldModelGroup( std::string path, int groupIndex ) : GroupIndex(groupIndex), MOBA(NULL), IsBad(false) { Data = new ChunkedData(path); if (!Data->Stream) @@ -85,9 +85,13 @@ void WorldModelGroup::ReadTriangles() uint16 v0; uint16 v1; uint16 v2; - fread(&v0, sizeof(uint16), 1, stream); - fread(&v1, sizeof(uint16), 1, stream); - fread(&v2, sizeof(uint16), 1, stream); + int count = 0; + count += fread(&v0, sizeof(uint16), 1, stream); + count += fread(&v1, sizeof(uint16), 1, stream); + count += fread(&v2, sizeof(uint16), 1, stream); + if (count != 3) + printf("WorldModelGroup::ReadMaterials: Error reading data, expected 3, read %d\n", count); + Triangles.push_back(Triangle(Constants::TRIANGLE_TYPE_WMO, v0, v1, v2)); } } @@ -105,10 +109,12 @@ void WorldModelGroup::ReadMaterials() for (uint32 i = 0; i < triangleCount; i++) { uint8 tmp; - fread(&tmp, sizeof(uint8), 1, stream); + if (fread(&tmp, sizeof(uint8), 1, stream) != 1) + printf("WorldModelGroup::ReadMaterials: Error reading data, expected 1, read 0\n"); TriangleFlags.push_back(tmp); // Read again for material. - fread(&tmp, sizeof(uint8), 1, stream); + if (fread(&tmp, sizeof(uint8), 1, stream) != 1) + printf("WorldModelGroup::ReadMaterials: Error reading data, expected 1, read 0\n"); TriangleMaterials.push_back(tmp); } } @@ -131,5 +137,7 @@ void WorldModelGroup::ReadBatches() MOBALength = chunk->Length / 2; MOBA = new uint16[MOBALength]; - fread(MOBA, sizeof(uint16), MOBALength, chunk->GetStream()); + int count = fread(MOBA, sizeof(uint16), MOBALength, chunk->GetStream()); + if (count != MOBALength) + printf("WorldModelGroup::ReadBatches: Error reading data, expected %d, read %d\n", MOBALength, count); } diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp index 7b60b9b2151..6ce41807492 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.cpp +++ b/src/tools/mesh_extractor/WorldModelHandler.cpp @@ -10,16 +10,20 @@ WorldModelDefinition WorldModelDefinition::Read( FILE* file ) { WorldModelDefinition ret; - fread(&ret.MwidIndex, sizeof(uint32), 1, file); - fread(&ret.UniqueId, sizeof(uint32), 1, file); + int count = 0; + count += fread(&ret.MwidIndex, sizeof(uint32), 1, file); + count += fread(&ret.UniqueId, sizeof(uint32), 1, file); ret.Position = Vector3::Read(file); ret.Rotation = Vector3::Read(file); ret.UpperExtents = Vector3::Read(file); ret.LowerExtents = Vector3::Read(file); - fread(&ret.Flags, sizeof(uint16), 1, file); - fread(&ret.DoodadSet, sizeof(uint16), 1, file); + count += fread(&ret.Flags, sizeof(uint16), 1, file); + count += fread(&ret.DoodadSet, sizeof(uint16), 1, file); uint32 discard; - fread(&discard, sizeof(uint32), 1, file); + count += fread(&discard, sizeof(uint32), 1, file); + + if (count != 5) + printf("WorldModelDefinition::Read: Error reading data, expected 5, read %d\n", count); return ret; } @@ -44,7 +48,8 @@ void WorldModelHandler::ProcessInternal( ChunkedData* subChunks ) for (uint32 i = 0; i < refCount; i++) { int32 index; - fread(&index, sizeof(int32), 1, stream); + if (fread(&index, sizeof(int32), 1, stream) != 1) + printf("WorldModelDefinition::Read: Error reading data, expected 1, read 0\n"); if (index < 0 || uint32(index) >= _definitions->size()) continue; @@ -184,7 +189,8 @@ void WorldModelHandler::ReadModelPaths() FILE* stream = mwid->GetStream(); fseek(stream, i * 4, SEEK_CUR); uint32 offset; - fread(&offset, sizeof(uint32), 1, stream); + if (fread(&offset, sizeof(uint32), 1, stream) != 1) + printf("WorldModelDefinition::Read: Error reading data, expected 1, read 0\n"); FILE* dataStream = mwmo->GetStream(); fseek(dataStream, offset + mwmo->Offset, SEEK_SET); _paths->push_back(Utils::ReadString(dataStream)); diff --git a/src/tools/mmaps_generator/CMakeLists.txt b/src/tools/mmaps_generator/CMakeLists.txt index 46bf9d00d43..229a2cd808f 100644 --- a/src/tools/mmaps_generator/CMakeLists.txt +++ b/src/tools/mmaps_generator/CMakeLists.txt @@ -22,13 +22,13 @@ include_directories( ${CMAKE_SOURCE_DIR}/dep/libmpq ${CMAKE_SOURCE_DIR}/dep/zlib ${CMAKE_SOURCE_DIR}/dep/bzip2 - ${CMAKE_SOURCE_DIR}/dep/acelite ${CMAKE_SOURCE_DIR}/dep/g3dlite/include ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour ${CMAKE_SOURCE_DIR}/src/server/shared ${CMAKE_SOURCE_DIR}/src/server/shared/Database ${CMAKE_SOURCE_DIR}/src/server/shared/Database/Implementation + ${CMAKE_SOURCE_DIR}/src/server/shared/Debugging ${CMAKE_SOURCE_DIR}/src/server/shared/Threading ${CMAKE_SOURCE_DIR}/src/server/shared/Logging ${CMAKE_SOURCE_DIR}/src/server/shared/Utilities diff --git a/src/tools/mmaps_generator/IntermediateValues.h b/src/tools/mmaps_generator/IntermediateValues.h index a267a0f6412..98042e1b917 100644 --- a/src/tools/mmaps_generator/IntermediateValues.h +++ b/src/tools/mmaps_generator/IntermediateValues.h @@ -35,7 +35,7 @@ namespace MMAP rcPolyMesh* polyMesh; rcPolyMeshDetail* polyMeshDetail; - IntermediateValues() : compactHeightfield(NULL), heightfield(NULL), + IntermediateValues() : heightfield(NULL), compactHeightfield(NULL), contours(NULL), polyMesh(NULL), polyMeshDetail(NULL) {} ~IntermediateValues(); diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 754bced903c..689ccdc906d 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -29,7 +29,7 @@ // These make the linker happy. LoginDatabaseWorkerPool LoginDatabase; -uint32 GetLiquidFlags(uint32 liquidType) +uint32 GetLiquidFlags(uint32 /*liquidType*/) { return 0; } @@ -37,7 +37,7 @@ uint32 GetLiquidFlags(uint32 liquidType) #include "DisableMgr.h" namespace DisableMgr { - bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags) + bool IsDisabledFor(DisableType /*type*/, uint32 /*entry*/, Unit const* /*unit*/, uint8 /*flags*/) { return 0; } @@ -50,15 +50,15 @@ namespace MMAP MapBuilder::MapBuilder(float maxWalkableAngle, bool skipLiquid, bool skipContinents, bool skipJunkMaps, bool skipBattlegrounds, bool debugOutput, bool bigBaseUnit, const char* offMeshFilePath) : - m_terrainBuilder(NULL), + m_terrainBuilder (NULL), m_debugOutput (debugOutput), + m_offMeshFilePath (offMeshFilePath), m_skipContinents (skipContinents), m_skipJunkMaps (skipJunkMaps), m_skipBattlegrounds (skipBattlegrounds), m_maxWalkableAngle (maxWalkableAngle), m_bigBaseUnit (bigBaseUnit), - m_rcContext (NULL), - m_offMeshFilePath (offMeshFilePath) + m_rcContext (NULL) { m_terrainBuilder = new TerrainBuilder(skipLiquid); @@ -250,9 +250,12 @@ namespace MMAP printf("Building mesh from file\n"); int tileX, tileY, mapId; - fread(&mapId, sizeof(int), 1, file); - fread(&tileX, sizeof(int), 1, file); - fread(&tileY, sizeof(int), 1, file); + if (fread(&mapId, sizeof(int), 1, file) != 1) + return; + if (fread(&tileX, sizeof(int), 1, file) != 1) + return; + if (fread(&tileY, sizeof(int), 1, file) != 1) + return; dtNavMesh* navMesh = NULL; buildNavMesh(mapId, navMesh); @@ -263,23 +266,26 @@ namespace MMAP return; } - - int verticesCount, indicesCount; - fread(&verticesCount, sizeof(int), 1, file); - fread(&indicesCount, sizeof(int), 1, file); + uint verticesCount, indicesCount; + if (fread(&verticesCount, sizeof(uint), 1, file) != 1) + return; + if (fread(&indicesCount, sizeof(uint), 1, file) != 1) + return; float* verts = new float[verticesCount]; int* inds = new int[indicesCount]; - fread(verts, sizeof(float), verticesCount, file); - fread(inds, sizeof(int), indicesCount, file); + if (fread(verts, sizeof(float), verticesCount, file) != verticesCount) + return; + if (fread(inds, sizeof(int), indicesCount, file) != indicesCount) + return; MeshData data; - for (int i = 0; i < verticesCount; ++i) + for (uint i = 0; i < verticesCount; ++i) data.solidVerts.append(verts[i]); - for (int i = 0; i < indicesCount; ++i) + for (uint i = 0; i < indicesCount; ++i) data.solidTris.append(inds[i]); TerrainBuilder::cleanVertices(data.solidVerts, data.solidTris); @@ -310,7 +316,7 @@ namespace MMAP /**************************************************************************/ void MapBuilder::buildMap(uint32 mapID) { - printf("[Thread %i] Building map %03u:\n", ACE_Thread::self(), mapID); + printf("[Thread %u] Building map %03u:\n", uint32(ACE_Thread::self()), mapID); set* tiles = getTileList(mapID); @@ -409,7 +415,6 @@ namespace MMAP //if (tileBits < 1) tileBits = 1; // need at least one bit! //int polyBits = sizeof(dtPolyRef)*8 - SALT_MIN_BITS - tileBits; - int tileBits = STATIC_TILE_BITS; int polyBits = STATIC_POLY_BITS; int maxTiles = tiles->size(); @@ -955,8 +960,10 @@ namespace MMAP return false; MmapTileHeader header; - fread(&header, sizeof(MmapTileHeader), 1, file); + int count = fread(&header, sizeof(MmapTileHeader), 1, file); fclose(file); + if (count != 1) + return false; if (header.mmapMagic != MMAP_MAGIC || header.dtVersion != DT_NAVMESH_VERSION) return false; diff --git a/src/tools/mmaps_generator/PathCommon.h b/src/tools/mmaps_generator/PathCommon.h index fd02ec02d50..966c12ec19e 100644 --- a/src/tools/mmaps_generator/PathCommon.h +++ b/src/tools/mmaps_generator/PathCommon.h @@ -75,7 +75,7 @@ namespace MMAP LISTFILE_OK = 1 }; - inline ListFilesResult getDirContents(vector &fileList, string dirpath = ".", string filter = "*", bool includeSubDirs = false) + inline ListFilesResult getDirContents(vector &fileList, string dirpath = ".", string filter = "*") { #ifdef WIN32 HANDLE hFind; diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index 0159219c110..22946df478a 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -27,6 +27,9 @@ namespace MMAP { + + char const* MAP_VERSION_MAGIC = "v1.3"; + TerrainBuilder::TerrainBuilder(bool skipLiquid) : m_skipLiquid (skipLiquid){ } TerrainBuilder::~TerrainBuilder() { } @@ -86,9 +89,8 @@ namespace MMAP return false; map_fileheader fheader; - fread(&fheader, sizeof(map_fileheader), 1, mapFile); - - if (fheader.versionMagic != *((uint32 const*)(MAP_VERSION_MAGIC))) + if (fread(&fheader, sizeof(map_fileheader), 1, mapFile) != 1 || + fheader.versionMagic != *((uint32 const*)(MAP_VERSION_MAGIC))) { fclose(mapFile); printf("%s is the wrong version, please extract new .map files\n", mapFileName); @@ -97,10 +99,14 @@ namespace MMAP map_heightHeader hheader; fseek(mapFile, fheader.heightMapOffset, SEEK_SET); - fread(&hheader, sizeof(map_heightHeader), 1, mapFile); - bool haveTerrain = !(hheader.flags & MAP_HEIGHT_NO_HEIGHT); - bool haveLiquid = fheader.liquidMapOffset && !m_skipLiquid; + bool haveTerrain = false; + bool haveLiquid = false; + if (fread(&hheader, sizeof(map_heightHeader), 1, mapFile) == 1) + { + haveTerrain = !(hheader.flags & MAP_HEIGHT_NO_HEIGHT); + haveLiquid = fheader.liquidMapOffset && !m_skipLiquid; + } // no data in this map file if (!haveTerrain && !haveLiquid) @@ -120,42 +126,53 @@ namespace MMAP // terrain data if (haveTerrain) { - int i; float heightMultiplier; float V9[V9_SIZE_SQ], V8[V8_SIZE_SQ]; + int expected = V9_SIZE_SQ + V8_SIZE_SQ; if (hheader.flags & MAP_HEIGHT_AS_INT8) { uint8 v9[V9_SIZE_SQ]; uint8 v8[V8_SIZE_SQ]; - fread(v9, sizeof(uint8), V9_SIZE_SQ, mapFile); - fread(v8, sizeof(uint8), V8_SIZE_SQ, mapFile); + int count = 0; + count += fread(v9, sizeof(uint8), V9_SIZE_SQ, mapFile); + count += fread(v8, sizeof(uint8), V8_SIZE_SQ, mapFile); + if (count != expected) + printf("TerrainBuilder::loadMap: Failed to read some data expected %d, read %d\n", expected, count); + heightMultiplier = (hheader.gridMaxHeight - hheader.gridHeight) / 255; - for (i = 0; i < V9_SIZE_SQ; ++i) + for (int i = 0; i < V9_SIZE_SQ; ++i) V9[i] = (float)v9[i]*heightMultiplier + hheader.gridHeight; - for (i = 0; i < V8_SIZE_SQ; ++i) + for (int i = 0; i < V8_SIZE_SQ; ++i) V8[i] = (float)v8[i]*heightMultiplier + hheader.gridHeight; } else if (hheader.flags & MAP_HEIGHT_AS_INT16) { uint16 v9[V9_SIZE_SQ]; uint16 v8[V8_SIZE_SQ]; - fread(v9, sizeof(uint16), V9_SIZE_SQ, mapFile); - fread(v8, sizeof(uint16), V8_SIZE_SQ, mapFile); + int count = 0; + count += fread(v9, sizeof(uint16), V9_SIZE_SQ, mapFile); + count += fread(v8, sizeof(uint16), V8_SIZE_SQ, mapFile); + if (count != expected) + printf("TerrainBuilder::loadMap: Failed to read some data expected %d, read %d\n", expected, count); + heightMultiplier = (hheader.gridMaxHeight - hheader.gridHeight) / 65535; - for (i = 0; i < V9_SIZE_SQ; ++i) + for (int i = 0; i < V9_SIZE_SQ; ++i) V9[i] = (float)v9[i]*heightMultiplier + hheader.gridHeight; - for (i = 0; i < V8_SIZE_SQ; ++i) + for (int i = 0; i < V8_SIZE_SQ; ++i) V8[i] = (float)v8[i]*heightMultiplier + hheader.gridHeight; } else { - fread (V9, sizeof(float), V9_SIZE_SQ, mapFile); - fread(V8, sizeof(float), V8_SIZE_SQ, mapFile); + int count = 0; + count += fread(V9, sizeof(float), V9_SIZE_SQ, mapFile); + count += fread(V8, sizeof(float), V8_SIZE_SQ, mapFile); + if (count != expected) + printf("TerrainBuilder::loadMap: Failed to read some data expected %d, read %d\n", expected, count); } // hole data @@ -163,7 +180,8 @@ namespace MMAP { memset(holes, 0, fheader.holesSize); fseek(mapFile, fheader.holesOffset, SEEK_SET); - fread(holes, fheader.holesSize, 1, mapFile); + if (fread(holes, fheader.holesSize, 1, mapFile) != 1) + printf("TerrainBuilder::loadMap: Failed to read some data expected 1, read 0\n"); } int count = meshData.solidVerts.size() / 3; @@ -172,7 +190,7 @@ namespace MMAP float coord[3]; - for (i = 0; i < V9_SIZE_SQ; ++i) + for (int i = 0; i < V9_SIZE_SQ; ++i) { getHeightCoord(i, GRID_V9, xoffset, yoffset, coord, V9); meshData.solidVerts.append(coord[0]); @@ -180,7 +198,7 @@ namespace MMAP meshData.solidVerts.append(coord[1]); } - for (i = 0; i < V8_SIZE_SQ; ++i) + for (int i = 0; i < V8_SIZE_SQ; ++i) { getHeightCoord(i, GRID_V8, xoffset, yoffset, coord, V8); meshData.solidVerts.append(coord[0]); @@ -188,10 +206,10 @@ namespace MMAP meshData.solidVerts.append(coord[1]); } - int j, indices[3], loopStart, loopEnd, loopInc; + int indices[3], loopStart = 0, loopEnd = 0, loopInc = 0; getLoopVars(portion, loopStart, loopEnd, loopInc); - for (i = loopStart; i < loopEnd; i+=loopInc) - for (j = TOP; j <= BOTTOM; j+=1) + for (int i = loopStart; i < loopEnd; i+=loopInc) + for (int j = TOP; j <= BOTTOM; j+=1) { getHeightTriangle(i, Spot(j), indices); ttriangles.append(indices[2] + count); @@ -205,19 +223,25 @@ namespace MMAP { map_liquidHeader lheader; fseek(mapFile, fheader.liquidMapOffset, SEEK_SET); - fread(&lheader, sizeof(map_liquidHeader), 1, mapFile); + if (fread(&lheader, sizeof(map_liquidHeader), 1, mapFile) != 1) + printf("TerrainBuilder::loadMap: Failed to read some data expected 1, read 0\n"); + float* liquid_map = NULL; if (!(lheader.flags & MAP_LIQUID_NO_TYPE)) - fread(liquid_type, sizeof(liquid_type), 1, mapFile); + if (fread(liquid_type, sizeof(liquid_type), 1, mapFile) != 1) + printf("TerrainBuilder::loadMap: Failed to read some data expected 1, read 0\n"); if (!(lheader.flags & MAP_LIQUID_NO_HEIGHT)) { - liquid_map = new float [lheader.width*lheader.height]; - fread(liquid_map, sizeof(float), lheader.width*lheader.height, mapFile); + uint toRead = lheader.width*lheader.height; + liquid_map = new float [toRead]; + if (fread(liquid_map, sizeof(float), toRead, mapFile) != toRead) + printf("TerrainBuilder::loadMap: Failed to read some data expected 1, read 0\n"); } + // FIXME: "the address of ‘liquid_type’ will always evaluate as ‘true’" if (liquid_type && liquid_map) { int count = meshData.liquidVerts.size() / 3; @@ -263,9 +287,8 @@ namespace MMAP delete [] liquid_map; - int indices[3], loopStart, loopEnd, loopInc, triInc; + int indices[3], loopStart = 0, loopEnd = 0, loopInc = 0, triInc = BOTTOM-TOP; getLoopVars(portion, loopStart, loopEnd, loopInc); - triInc = BOTTOM-TOP; // generate triangles for (int i = loopStart; i < loopEnd; i+=loopInc) @@ -283,7 +306,7 @@ namespace MMAP // now that we have gathered the data, we can figure out which parts to keep: // liquid above ground, ground above liquid - int loopStart, loopEnd, loopInc, tTriCount = 4; + int loopStart = 0, loopEnd = 0, loopInc = 0, tTriCount = 4; bool useTerrain, useLiquid; float* lverts = meshData.liquidVerts.getCArray(); @@ -313,6 +336,7 @@ namespace MMAP useTerrain = true; useLiquid = true; uint8 liquidType = MAP_LIQUID_TYPE_NO_WATER; + // FIXME: "warning: the address of ‘liquid_type’ will always evaluate as ‘true’" // if there is no liquid, don't use liquid if (!liquid_type || !meshData.liquidVerts.size() || !ltriangles.size()) @@ -825,13 +849,13 @@ namespace MMAP while(fgets(buf, 512, fp)) { float p0[3], p1[3]; - int mid, tx, ty; + uint32 mid, tx, ty; float size; - if (10 != sscanf(buf, "%d %d,%d (%f %f %f) (%f %f %f) %f", &mid, &tx, &ty, - &p0[0], &p0[1], &p0[2], &p1[0], &p1[1], &p1[2], &size)) + if (sscanf(buf, "%d %d,%d (%f %f %f) (%f %f %f) %f", &mid, &tx, &ty, + &p0[0], &p0[1], &p0[2], &p1[0], &p1[1], &p1[2], &size) != 10) continue; - if (mapID == mid, tileX == tx, tileY == ty) + if (mapID == mid && tileX == tx && tileY == ty) { meshData.offMeshConnections.append(p0[1]); meshData.offMeshConnections.append(p0[2]); diff --git a/src/tools/mmaps_generator/TerrainBuilder.h b/src/tools/mmaps_generator/TerrainBuilder.h index 6d478753279..7a24146946b 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.h +++ b/src/tools/mmaps_generator/TerrainBuilder.h @@ -62,7 +62,6 @@ namespace MMAP // see following files: // contrib/extractor/system.cpp // src/game/Map.cpp - static char const* MAP_VERSION_MAGIC = "v1.3"; struct MeshData { diff --git a/src/tools/mmaps_generator/VMapExtensions.cpp b/src/tools/mmaps_generator/VMapExtensions.cpp index 4f203e11c21..2b525fbf353 100644 --- a/src/tools/mmaps_generator/VMapExtensions.cpp +++ b/src/tools/mmaps_generator/VMapExtensions.cpp @@ -57,7 +57,7 @@ namespace VMAP } // declared in src/shared/vmap/ModelInstance.h - WorldModel* const ModelInstance::getWorldModel() + WorldModel* ModelInstance::getWorldModel() { return iModel; } diff --git a/src/tools/vmap4_extractor/adtfile.cpp b/src/tools/vmap4_extractor/adtfile.cpp index a605118eead..56e62d474d1 100644 --- a/src/tools/vmap4_extractor/adtfile.cpp +++ b/src/tools/vmap4_extractor/adtfile.cpp @@ -69,8 +69,7 @@ void fixname2(char* name, size_t len) char* GetExtension(char* FileName) { - char* szTemp; - if (szTemp = strrchr(FileName, '.')) + if (char* szTemp = strrchr(FileName, '.')) return szTemp; return NULL; } diff --git a/src/tools/vmap4_extractor/model.cpp b/src/tools/vmap4_extractor/model.cpp index c642f73ccae..b950db023fe 100644 --- a/src/tools/vmap4_extractor/model.cpp +++ b/src/tools/vmap4_extractor/model.cpp @@ -152,10 +152,10 @@ ModelInstance::ModelInstance(MPQFile& f, char const* ModelInstName, uint32 mapID fseek(input, 8, SEEK_SET); // get the correct no of vertices int nVertices; - fread(&nVertices, sizeof (int), 1, input); + int count = fread(&nVertices, sizeof (int), 1, input); fclose(input); - if(nVertices == 0) + if (count != 1 || nVertices == 0) return; uint16 adtId = 0;// not used for models diff --git a/src/tools/vmap4_extractor/vmapexport.cpp b/src/tools/vmap4_extractor/vmapexport.cpp index 186f9c8606e..89e4b850dac 100644 --- a/src/tools/vmap4_extractor/vmapexport.cpp +++ b/src/tools/vmap4_extractor/vmapexport.cpp @@ -461,8 +461,7 @@ int main(int argc, char ** argv) printf("Your output directory seems to be polluted, please use an empty directory!\n"); printf(""); char garbage[2]; - scanf("%c", garbage); - return 1; + return scanf("%c", garbage); } } diff --git a/src/tools/vmap4_extractor/wmo.cpp b/src/tools/vmap4_extractor/wmo.cpp index 0bc749b9bd5..7c9f23c5a95 100644 --- a/src/tools/vmap4_extractor/wmo.cpp +++ b/src/tools/vmap4_extractor/wmo.cpp @@ -521,10 +521,10 @@ WMOInstance::WMOInstance(MPQFile& f, char const* WmoInstName, uint32 mapID, uint fseek(input, 8, SEEK_SET); // get the correct no of vertices int nVertices; - fread(&nVertices, sizeof (int), 1, input); + int count = fread(&nVertices, sizeof (int), 1, input); fclose(input); - if(nVertices == 0) + if (count != 1 || nVertices == 0) return; float x,z; From cbf9324f61984727163150ed09a72288da45e3a4 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Wed, 9 Jan 2013 21:01:39 +0100 Subject: [PATCH 101/204] Core: Fix build --- src/tools/mesh_extractor/DBC.cpp | 2 +- src/tools/mmaps_generator/MapBuilder.cpp | 10 +++++----- src/tools/mmaps_generator/PathCommon.h | 2 +- src/tools/mmaps_generator/TerrainBuilder.cpp | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/tools/mesh_extractor/DBC.cpp b/src/tools/mesh_extractor/DBC.cpp index 5c54d975487..3c846363d06 100644 --- a/src/tools/mesh_extractor/DBC.cpp +++ b/src/tools/mesh_extractor/DBC.cpp @@ -5,7 +5,7 @@ DBC::DBC( FILE* stream ) : StringBlock(NULL), StringBlockSize(0), IsFaulty(true) { char magic[5]; - uint count = 0; + uint32 count = 0; count += fread(&magic, sizeof(char), 4, stream); magic[4] = '\0'; count += fread(&RecordCount, sizeof(uint32), 1, stream); diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 689ccdc906d..29591a406df 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -266,10 +266,10 @@ namespace MMAP return; } - uint verticesCount, indicesCount; - if (fread(&verticesCount, sizeof(uint), 1, file) != 1) + uint32 verticesCount, indicesCount; + if (fread(&verticesCount, sizeof(uint32), 1, file) != 1) return; - if (fread(&indicesCount, sizeof(uint), 1, file) != 1) + if (fread(&indicesCount, sizeof(uint32), 1, file) != 1) return; float* verts = new float[verticesCount]; @@ -282,10 +282,10 @@ namespace MMAP MeshData data; - for (uint i = 0; i < verticesCount; ++i) + for (uint32 i = 0; i < verticesCount; ++i) data.solidVerts.append(verts[i]); - for (uint i = 0; i < indicesCount; ++i) + for (uint32 i = 0; i < indicesCount; ++i) data.solidTris.append(inds[i]); TerrainBuilder::cleanVertices(data.solidVerts, data.solidTris); diff --git a/src/tools/mmaps_generator/PathCommon.h b/src/tools/mmaps_generator/PathCommon.h index 966c12ec19e..8fad880212b 100644 --- a/src/tools/mmaps_generator/PathCommon.h +++ b/src/tools/mmaps_generator/PathCommon.h @@ -90,7 +90,7 @@ namespace MMAP return LISTFILE_DIRECTORY_NOT_FOUND; do { - if (includeSubDirs || (findFileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) + if (findFileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY == 0) fileList.push_back(string(findFileInfo.cFileName)); } while (FindNextFile(hFind, &findFileInfo)); diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index 22946df478a..97e504d5160 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -235,7 +235,7 @@ namespace MMAP if (!(lheader.flags & MAP_LIQUID_NO_HEIGHT)) { - uint toRead = lheader.width*lheader.height; + uint8 toRead = lheader.width*lheader.height; liquid_map = new float [toRead]; if (fread(liquid_map, sizeof(float), toRead, mapFile) != toRead) printf("TerrainBuilder::loadMap: Failed to read some data expected 1, read 0\n"); From 7210ffe34d2052c1aee642ac3af40425c8ba137e Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Wed, 9 Jan 2013 21:14:12 +0100 Subject: [PATCH 102/204] Core: Fix warnings --- src/server/scripts/Commands/cs_mmaps.cpp | 10 +++++----- src/tools/mmaps_generator/PathCommon.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp index c17c01adc33..09e777e4047 100644 --- a/src/server/scripts/Commands/cs_mmaps.cpp +++ b/src/server/scripts/Commands/cs_mmaps.cpp @@ -117,7 +117,7 @@ public: return true; } - static bool HandleMmapLocCommand(ChatHandler* handler, const char* args) + static bool HandleMmapLocCommand(ChatHandler* handler, char const* /*args*/) { handler->PSendSysMessage("mmap tileloc:"); @@ -171,7 +171,7 @@ public: return true; } - static bool HandleMmapLoadedTilesCommand(ChatHandler* handler, const char* args) + static bool HandleMmapLoadedTilesCommand(ChatHandler* handler, char const* /*args*/) { uint32 mapid = handler->GetSession()->GetPlayer()->GetMapId(); dtNavMesh const* navmesh = MMAP::MMapFactory::createOrGetMMapManager()->GetNavMesh(mapid); @@ -196,7 +196,7 @@ public: return true; } - static bool HandleMmapStatsCommand(ChatHandler* handler, const char* args) + static bool HandleMmapStatsCommand(ChatHandler* handler, char const* /*args*/) { uint32 mapId = handler->GetSession()->GetPlayer()->GetMapId(); handler->PSendSysMessage("mmap stats:"); @@ -244,12 +244,12 @@ public: return true; } - static bool HandleMmapTestArea(ChatHandler* handler, const char* args) + static bool HandleMmapTestArea(ChatHandler* handler, char const* /*args*/) { float radius = 40.0f; WorldObject* object = handler->GetSession()->GetPlayer(); - CellCoord pair(Trinity::ComputeCellCoord(object->GetPositionX(), object->GetPositionY()) ); + CellCoord pair(Trinity::ComputeCellCoord(object->GetPositionX(), object->GetPositionY())); Cell cell(pair); cell.SetNoCreate(); diff --git a/src/tools/mmaps_generator/PathCommon.h b/src/tools/mmaps_generator/PathCommon.h index 8fad880212b..820ff34d425 100644 --- a/src/tools/mmaps_generator/PathCommon.h +++ b/src/tools/mmaps_generator/PathCommon.h @@ -90,7 +90,7 @@ namespace MMAP return LISTFILE_DIRECTORY_NOT_FOUND; do { - if (findFileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY == 0) + if ((findFileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) fileList.push_back(string(findFileInfo.cFileName)); } while (FindNextFile(hFind, &findFileInfo)); From 1154c62b65af70e7801bb280aa90a98581d0c1ec Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Thu, 10 Jan 2013 12:40:26 +0100 Subject: [PATCH 103/204] Core/Tools: Fix logic fail for mmaps generator (thx armano2) --- src/tools/mmaps_generator/TerrainBuilder.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index 97e504d5160..d3c3772532d 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -235,7 +235,7 @@ namespace MMAP if (!(lheader.flags & MAP_LIQUID_NO_HEIGHT)) { - uint8 toRead = lheader.width*lheader.height; + uint32 toRead = lheader.width * lheader.height; liquid_map = new float [toRead]; if (fread(liquid_map, sizeof(float), toRead, mapFile) != toRead) printf("TerrainBuilder::loadMap: Failed to read some data expected 1, read 0\n"); From dfbf318a4feb48d412391d7da1df9381310858ab Mon Sep 17 00:00:00 2001 From: Spp Date: Thu, 10 Jan 2013 15:29:08 +0100 Subject: [PATCH 104/204] Typo fix --- src/tools/map_extractor/adt.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tools/map_extractor/adt.cpp b/src/tools/map_extractor/adt.cpp index 505813c4bd0..eeb69134fab 100644 --- a/src/tools/map_extractor/adt.cpp +++ b/src/tools/map_extractor/adt.cpp @@ -8,7 +8,7 @@ int holetab_v[4] = {0x000F, 0x00F0, 0x0F00, 0xF000}; u_map_fcc MHDRMagic = { {'M','H','D','R'} }; u_map_fcc MCINMagic = { {'M','C','I','N'} }; -u_map_fcc MH20Magic = { {'M','H','2','0'} }; +u_map_fcc MH2OMagic = { {'M','H','2','O'} }; u_map_fcc MCNKMagic = { {'M','C','N','K'} }; u_map_fcc MCVTMagic = { {'M','C','V','T'} }; u_map_fcc MCLQMagic = { {'M','C','L','Q'} }; @@ -93,7 +93,7 @@ bool adt_MCIN::prepareLoadedData() bool adt_MH2O::prepareLoadedData() { - if (fcc != MH20Magic.fcc) + if (fcc != MH2OMagic.fcc) return false; // Check liquid data From e783349803e64d0fd1879a97dcb4749435a87f05 Mon Sep 17 00:00:00 2001 From: Spp Date: Sat, 12 Jan 2013 02:15:10 +0100 Subject: [PATCH 105/204] Use correct initialization of some vars --- src/tools/map_extractor/adt.cpp | 12 ++++++------ src/tools/map_extractor/loadlib.cpp | 2 +- src/tools/map_extractor/wdt.cpp | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/tools/map_extractor/adt.cpp b/src/tools/map_extractor/adt.cpp index eeb69134fab..a93ead838fe 100644 --- a/src/tools/map_extractor/adt.cpp +++ b/src/tools/map_extractor/adt.cpp @@ -6,12 +6,12 @@ int holetab_h[4] = {0x1111, 0x2222, 0x4444, 0x8888}; int holetab_v[4] = {0x000F, 0x00F0, 0x0F00, 0xF000}; -u_map_fcc MHDRMagic = { {'M','H','D','R'} }; -u_map_fcc MCINMagic = { {'M','C','I','N'} }; -u_map_fcc MH2OMagic = { {'M','H','2','O'} }; -u_map_fcc MCNKMagic = { {'M','C','N','K'} }; -u_map_fcc MCVTMagic = { {'M','C','V','T'} }; -u_map_fcc MCLQMagic = { {'M','C','L','Q'} }; +u_map_fcc MHDRMagic = { {'R','D','H','M'} }; +u_map_fcc MCINMagic = { {'N','I','C','M'} }; +u_map_fcc MH2OMagic = { {'0','2','H','M'} }; +u_map_fcc MCNKMagic = { {'K','N','C','M'} }; +u_map_fcc MCVTMagic = { {'T','V','C','M'} }; +u_map_fcc MCLQMagic = { {'Q','L','C','M'} }; bool isHole(int holes, int i, int j) { diff --git a/src/tools/map_extractor/loadlib.cpp b/src/tools/map_extractor/loadlib.cpp index d1ea40110de..5dcb479a11c 100644 --- a/src/tools/map_extractor/loadlib.cpp +++ b/src/tools/map_extractor/loadlib.cpp @@ -6,7 +6,7 @@ class MPQFile; -u_map_fcc MverMagic = { {'M','V','E','R'} }; +u_map_fcc MverMagic = { {'R','E','V','M'} }; FileLoader::FileLoader() { diff --git a/src/tools/map_extractor/wdt.cpp b/src/tools/map_extractor/wdt.cpp index 90a07eafab3..ff255145583 100644 --- a/src/tools/map_extractor/wdt.cpp +++ b/src/tools/map_extractor/wdt.cpp @@ -2,9 +2,9 @@ #include "wdt.h" -u_map_fcc MWMOMagic = { {'M', 'W', 'M', 'O'} }; -u_map_fcc MPHDMagic = { {'M', 'P', 'H', 'D'} }; -u_map_fcc MAINMagic = { {'M', 'A', 'I', 'N'} }; +u_map_fcc MWMOMagic = { {'O', 'M', 'W', 'M'} }; +u_map_fcc MPHDMagic = { {'D', 'H', 'P', 'M'} }; +u_map_fcc MAINMagic = { {'N', 'I', 'A', 'M'} }; bool wdt_MWMO::prepareLoadedData() { From 32e08bcd122fce70ae33eed3f0ec44d35a60eff2 Mon Sep 17 00:00:00 2001 From: Nay Date: Sun, 13 Jan 2013 02:11:21 +0000 Subject: [PATCH 106/204] Tools/Extractor: Fix yet another typo in ADT. Fixes extracting. Closes #8900 --- src/tools/map_extractor/adt.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/map_extractor/adt.cpp b/src/tools/map_extractor/adt.cpp index a93ead838fe..30524dbd640 100644 --- a/src/tools/map_extractor/adt.cpp +++ b/src/tools/map_extractor/adt.cpp @@ -8,7 +8,7 @@ int holetab_v[4] = {0x000F, 0x00F0, 0x0F00, 0xF000}; u_map_fcc MHDRMagic = { {'R','D','H','M'} }; u_map_fcc MCINMagic = { {'N','I','C','M'} }; -u_map_fcc MH2OMagic = { {'0','2','H','M'} }; +u_map_fcc MH2OMagic = { {'O','2','H','M'} }; u_map_fcc MCNKMagic = { {'K','N','C','M'} }; u_map_fcc MCVTMagic = { {'T','V','C','M'} }; u_map_fcc MCLQMagic = { {'Q','L','C','M'} }; From 65cd79dc779e1900cb82e862ffab9ef3a20771ac Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Mon, 14 Jan 2013 17:42:06 +0100 Subject: [PATCH 107/204] Core/Misc: Update headers to 2013 --- src/server/collision/Management/MMapFactory.cpp | 2 +- src/server/collision/Management/MMapFactory.h | 2 +- src/server/collision/Management/MMapManager.cpp | 2 +- src/server/collision/Management/MMapManager.h | 2 +- src/server/scripts/Commands/cs_mmaps.cpp | 2 +- src/tools/mesh_extractor/CMakeLists.txt | 2 +- src/tools/mmaps_generator/IntermediateValues.cpp | 2 +- src/tools/mmaps_generator/IntermediateValues.h | 2 +- src/tools/mmaps_generator/MapBuilder.cpp | 2 +- src/tools/mmaps_generator/MapBuilder.h | 2 +- src/tools/mmaps_generator/PathCommon.h | 2 +- src/tools/mmaps_generator/TerrainBuilder.cpp | 2 +- src/tools/mmaps_generator/TerrainBuilder.h | 2 +- src/tools/mmaps_generator/VMapExtensions.cpp | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/server/collision/Management/MMapFactory.cpp b/src/server/collision/Management/MMapFactory.cpp index 0b292b56dca..7adf7fbfa66 100644 --- a/src/server/collision/Management/MMapFactory.cpp +++ b/src/server/collision/Management/MMapFactory.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2008-2013 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/collision/Management/MMapFactory.h b/src/server/collision/Management/MMapFactory.h index a006aedfa6d..00f19a194d3 100644 --- a/src/server/collision/Management/MMapFactory.h +++ b/src/server/collision/Management/MMapFactory.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2008-2013 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/collision/Management/MMapManager.cpp b/src/server/collision/Management/MMapManager.cpp index 1b6cf5c0260..e3ed8f3310a 100644 --- a/src/server/collision/Management/MMapManager.cpp +++ b/src/server/collision/Management/MMapManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2008-2013 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/collision/Management/MMapManager.h b/src/server/collision/Management/MMapManager.h index 23b7d5fc6f8..56b1b856d65 100644 --- a/src/server/collision/Management/MMapManager.h +++ b/src/server/collision/Management/MMapManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2008-2013 TrinityCore * Copyright (C) 2005-2010 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp index 09e777e4047..4649e13e1c4 100644 --- a/src/server/scripts/Commands/cs_mmaps.cpp +++ b/src/server/scripts/Commands/cs_mmaps.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2012 TrinityCore + * Copyright (C) 2008-2013 TrinityCore * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the diff --git a/src/tools/mesh_extractor/CMakeLists.txt b/src/tools/mesh_extractor/CMakeLists.txt index 29c571d9301..b8bd9f54331 100644 --- a/src/tools/mesh_extractor/CMakeLists.txt +++ b/src/tools/mesh_extractor/CMakeLists.txt @@ -1,5 +1,5 @@ # Copyright (C) 2005-2009 MaNGOS project -# Copyright (C) 2008-2012 TrinityCore +# Copyright (C) 2008-2013 TrinityCore # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without diff --git a/src/tools/mmaps_generator/IntermediateValues.cpp b/src/tools/mmaps_generator/IntermediateValues.cpp index b473d6472a0..6fad96887a2 100644 --- a/src/tools/mmaps_generator/IntermediateValues.cpp +++ b/src/tools/mmaps_generator/IntermediateValues.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2008-2013 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/IntermediateValues.h b/src/tools/mmaps_generator/IntermediateValues.h index 98042e1b917..89a5c3ae4c2 100644 --- a/src/tools/mmaps_generator/IntermediateValues.h +++ b/src/tools/mmaps_generator/IntermediateValues.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2008-2013 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 29591a406df..9e6acd71a72 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2008-2013 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/MapBuilder.h b/src/tools/mmaps_generator/MapBuilder.h index 61a71ff6d5b..c083e0b680a 100644 --- a/src/tools/mmaps_generator/MapBuilder.h +++ b/src/tools/mmaps_generator/MapBuilder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2008-2013 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/PathCommon.h b/src/tools/mmaps_generator/PathCommon.h index 820ff34d425..413f2b8735d 100644 --- a/src/tools/mmaps_generator/PathCommon.h +++ b/src/tools/mmaps_generator/PathCommon.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2008-2013 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index d3c3772532d..f7cf76e9718 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2008-2013 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/TerrainBuilder.h b/src/tools/mmaps_generator/TerrainBuilder.h index 7a24146946b..6ad4284f416 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.h +++ b/src/tools/mmaps_generator/TerrainBuilder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2008-2013 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it diff --git a/src/tools/mmaps_generator/VMapExtensions.cpp b/src/tools/mmaps_generator/VMapExtensions.cpp index 2b525fbf353..37b7d94af55 100644 --- a/src/tools/mmaps_generator/VMapExtensions.cpp +++ b/src/tools/mmaps_generator/VMapExtensions.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2011 TrinityCore + * Copyright (C) 2008-2013 TrinityCore * Copyright (C) 2005-2011 MaNGOS * * This program is free software; you can redistribute it and/or modify it From 98f502f32f092fe1bcb9e19c32c189d2ea552d19 Mon Sep 17 00:00:00 2001 From: MrSmite Date: Mon, 14 Jan 2013 21:42:23 -0500 Subject: [PATCH 108/204] Fix passive pets not using spells when commanded to attack Closes #8941 --- src/server/game/AI/CoreAI/PetAI.cpp | 35 +++++++++++++---------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp index a8d2a2248ad..2792f68004f 100644 --- a/src/server/game/AI/CoreAI/PetAI.cpp +++ b/src/server/game/AI/CoreAI/PetAI.cpp @@ -432,29 +432,23 @@ void PetAI::HandleReturnMovement() if (!me->GetCharmInfo()->IsAtStay() && !me->GetCharmInfo()->IsReturning()) { // Return to previous position where stay was clicked - if (!me->GetCharmInfo()->IsCommandAttack()) - { - float x, y, z; + float x, y, z; - me->GetCharmInfo()->GetStayPosition(x, y, z); - ClearCharmInfoFlags(); - me->GetCharmInfo()->SetIsReturning(true); - me->GetMotionMaster()->Clear(); - me->GetMotionMaster()->MovePoint(me->GetGUIDLow(), x, y, z); - } + me->GetCharmInfo()->GetStayPosition(x, y, z); + ClearCharmInfoFlags(); + me->GetCharmInfo()->SetIsReturning(true); + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MovePoint(me->GetGUIDLow(), x, y, z); } } else // COMMAND_FOLLOW { if (!me->GetCharmInfo()->IsFollowing() && !me->GetCharmInfo()->IsReturning()) { - if (!me->GetCharmInfo()->IsCommandAttack()) - { - ClearCharmInfoFlags(); - me->GetCharmInfo()->SetIsReturning(true); - me->GetMotionMaster()->Clear(); - me->GetMotionMaster()->MoveFollow(me->GetCharmerOrOwner(), PET_FOLLOW_DIST, me->GetFollowAngle()); - } + ClearCharmInfoFlags(); + me->GetCharmInfo()->SetIsReturning(true); + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MoveFollow(me->GetCharmerOrOwner(), PET_FOLLOW_DIST, me->GetFollowAngle()); } } } @@ -473,12 +467,13 @@ void PetAI::DoAttack(Unit* target, bool chase) if (me->HasReactState(REACT_AGGRESSIVE) && !me->GetCharmInfo()->IsCommandAttack()) me->SendPetAIReaction(me->GetGUID()); - if (chase) { - ClearCharmInfoFlags(); - me->GetMotionMaster()->Clear(); - me->GetMotionMaster()->MoveChase(target); + bool oldCmdAttack = me->GetCharmInfo()->IsCommandAttack(); // This needs to be reset after other flags are cleared + ClearCharmInfoFlags(); + me->GetCharmInfo()->SetIsCommandAttack(oldCmdAttack); // For passive pets commanded to attack so they will use spells + me->GetMotionMaster()->Clear(); + me->GetMotionMaster()->MoveChase(target); } else // (Stay && ((Aggressive || Defensive) && In Melee Range))) { From 6191642e5902fe8e670c8172a1a918d48a84683f Mon Sep 17 00:00:00 2001 From: Naios Date: Thu, 17 Jan 2013 14:04:20 +0100 Subject: [PATCH 109/204] Core/SmartScripts: Check Conditions also for timed Events * some cleanup work in SmartScripts.cpp Core/SmartScripts: Some Corrections to last commit --- .../game/AI/SmartScripts/SmartScript.cpp | 64 ++++++++----------- src/server/game/AI/SmartScripts/SmartScript.h | 1 + 2 files changed, 29 insertions(+), 36 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 84c9dffabd2..86d86739bc9 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2011,6 +2011,17 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } } +void SmartScript::ProcessTimedAction(SmartScriptHolder& e, uint32 const& min, uint32 const& max, Unit* unit, uint32 var0, uint32 var1, bool bvar, const SpellInfo* spell, GameObject* gob) +{ + ConditionList const conds = sConditionMgr->GetConditionsForSmartEvent(e.entryOrGuid, e.event_id, e.source_type); + ConditionSourceInfo info = ConditionSourceInfo(unit, GetBaseObject()); + + if (sConditionMgr->IsObjectMeetToConditions(info, conds)) + ProcessAction(e, unit, var0, var1, bvar, spell, gob); + + RecalcTimer(e, min, max); +} + void SmartScript::InstallTemplate(SmartScriptHolder const& e) { if (!GetBaseObject()) @@ -2409,20 +2420,17 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui break; //called from Update tick case SMART_EVENT_UPDATE: - RecalcTimer(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax); - ProcessAction(e); + ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax); break; case SMART_EVENT_UPDATE_OOC: if (me && me->isInCombat()) return; - RecalcTimer(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax); - ProcessAction(e); + ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax); break; case SMART_EVENT_UPDATE_IC: if (!me || !me->isInCombat()) return; - RecalcTimer(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax); - ProcessAction(e); + ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax); break; case SMART_EVENT_HEALT_PCT: { @@ -2431,8 +2439,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui uint32 perc = (uint32)me->GetHealthPct(); if (perc > e.event.minMaxRepeat.max || perc < e.event.minMaxRepeat.min) return; - RecalcTimer(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax); - ProcessAction(e); + ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax); break; } case SMART_EVENT_TARGET_HEALTH_PCT: @@ -2442,8 +2449,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui uint32 perc = (uint32)me->getVictim()->GetHealthPct(); if (perc > e.event.minMaxRepeat.max || perc < e.event.minMaxRepeat.min) return; - RecalcTimer(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax); - ProcessAction(e, me->getVictim()); + ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax, me->getVictim()); break; } case SMART_EVENT_MANA_PCT: @@ -2453,8 +2459,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui uint32 perc = uint32(100.0f * me->GetPower(POWER_MANA) / me->GetMaxPower(POWER_MANA)); if (perc > e.event.minMaxRepeat.max || perc < e.event.minMaxRepeat.min) return; - RecalcTimer(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax); - ProcessAction(e); + ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax); break; } case SMART_EVENT_TARGET_MANA_PCT: @@ -2464,8 +2469,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui uint32 perc = uint32(100.0f * me->getVictim()->GetPower(POWER_MANA) / me->getVictim()->GetMaxPower(POWER_MANA)); if (perc > e.event.minMaxRepeat.max || perc < e.event.minMaxRepeat.min) return; - RecalcTimer(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax); - ProcessAction(e, me->getVictim()); + ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax, me->getVictim()); break; } case SMART_EVENT_RANGE: @@ -2474,18 +2478,15 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui return; if (me->IsInRange(me->getVictim(), (float)e.event.minMaxRepeat.min, (float)e.event.minMaxRepeat.max)) - { - ProcessAction(e, me->getVictim()); - RecalcTimer(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax); - } + ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax, me->getVictim()); break; } case SMART_EVENT_TARGET_CASTING: { if (!me || !me->isInCombat() || !me->getVictim() || !me->getVictim()->IsNonMeleeSpellCasted(false, false, true)) return; - ProcessAction(e, me->getVictim()); - RecalcTimer(e, e.event.minMax.repeatMin, e.event.minMax.repeatMax); + + ProcessTimedAction(e, e.event.minMaxRepeat.repeatMin, e.event.minMaxRepeat.repeatMax, me->getVictim()); } case SMART_EVENT_FRIENDLY_HEALTH: { @@ -2495,8 +2496,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui Unit* target = DoSelectLowestHpFriendly((float)e.event.friendlyHealt.radius, e.event.friendlyHealt.hpDeficit); if (!target) return; - ProcessAction(e, target); - RecalcTimer(e, e.event.friendlyHealt.repeatMin, e.event.friendlyHealt.repeatMax); + ProcessTimedAction(e, e.event.friendlyHealt.repeatMin, e.event.friendlyHealt.repeatMax, target); break; } case SMART_EVENT_FRIENDLY_IS_CC: @@ -2508,8 +2508,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui DoFindFriendlyCC(pList, (float)e.event.friendlyCC.radius); if (pList.empty()) return; - ProcessAction(e, *(pList.begin())); - RecalcTimer(e, e.event.friendlyCC.repeatMin, e.event.friendlyCC.repeatMax); + ProcessTimedAction(e, e.event.friendlyCC.repeatMin, e.event.friendlyCC.repeatMax, *pList.begin()); break; } case SMART_EVENT_FRIENDLY_MISSING_BUFF: @@ -2519,8 +2518,8 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui if (pList.empty()) return; - ProcessAction(e, *(pList.begin())); - RecalcTimer(e, e.event.missingBuff.repeatMin, e.event.missingBuff.repeatMax); + + ProcessTimedAction(e, e.event.missingBuff.repeatMin, e.event.missingBuff.repeatMax, *pList.begin()); break; } case SMART_EVENT_HAS_AURA: @@ -2529,10 +2528,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui return; uint32 count = me->GetAuraCount(e.event.aura.spell); if ((!e.event.aura.count && !count) || (e.event.aura.count && count >= e.event.aura.count)) - { - ProcessAction(e); - RecalcTimer(e, e.event.aura.repeatMin, e.event.aura.repeatMax); - } + ProcessTimedAction(e, e.event.aura.repeatMin, e.event.aura.repeatMax); break; } case SMART_EVENT_TARGET_BUFFED: @@ -2542,8 +2538,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui uint32 count = me->getVictim()->GetAuraCount(e.event.aura.spell); if (count < e.event.aura.count) return; - ProcessAction(e); - RecalcTimer(e, e.event.aura.repeatMin, e.event.aura.repeatMax); + ProcessTimedAction(e, e.event.aura.repeatMin, e.event.aura.repeatMax); break; } //no params @@ -2578,10 +2573,7 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui if (Unit* victim = me->getVictim()) { if (!victim->HasInArc(static_cast(M_PI), me)) - { - ProcessAction(e, victim); - RecalcTimer(e, e.event.behindTarget.cooldownMin, e.event.behindTarget.cooldownMax); - } + ProcessTimedAction(e, e.event.behindTarget.cooldownMin, e.event.behindTarget.cooldownMax, victim); } break; } diff --git a/src/server/game/AI/SmartScripts/SmartScript.h b/src/server/game/AI/SmartScripts/SmartScript.h index d0d0221493f..28b328a2947 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.h +++ b/src/server/game/AI/SmartScripts/SmartScript.h @@ -45,6 +45,7 @@ class SmartScript void UpdateTimer(SmartScriptHolder& e, uint32 const diff); void InitTimer(SmartScriptHolder& e); void ProcessAction(SmartScriptHolder& e, Unit* unit = NULL, uint32 var0 = 0, uint32 var1 = 0, bool bvar = false, const SpellInfo* spell = NULL, GameObject* gob = NULL); + void ProcessTimedAction(SmartScriptHolder& e, uint32 const& min, uint32 const& max, Unit* unit = NULL, uint32 var0 = 0, uint32 var1 = 0, bool bvar = false, const SpellInfo* spell = NULL, GameObject* gob = NULL); ObjectList* GetTargets(SmartScriptHolder const& e, Unit* invoker = NULL); ObjectList* GetWorldObjectsInDist(float dist); void InstallTemplate(SmartScriptHolder const& e); From ed44eea699379b4da814b85c22c0f87682cccc0c Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Sat, 19 Jan 2013 20:28:29 +0100 Subject: [PATCH 110/204] Core: Fix warnings --- .../EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp | 4 ++-- .../Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp index 58e130ce644..19660cec4af 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp @@ -66,8 +66,8 @@ enum eMisc Position const PosMove[2] = { - { 299.4884f, 92.76137f, 105.6335f }, - { 314.8673f, 90.30210f, 101.6459f } + { 299.4884f, 92.76137f, 105.6335f, 0.0f }, + { 314.8673f, 90.30210f, 101.6459f, 0.0f } }; class boss_kirtonos_the_herald : public CreatureScript diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 7f8108e5e71..6039e01b901 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -359,7 +359,7 @@ class boss_halion : public CreatureScript if (Creature* twilightHalion = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_TWILIGHT_HALION))) if (twilightHalion->isAlive()) twilightHalion->Kill(twilightHalion); - + if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_HALION_CONTROLLER))) if (controller->isAlive()) controller->Kill(controller); From e524539d90f7c1b3393754641729fa844119b881 Mon Sep 17 00:00:00 2001 From: Gacko Date: Sat, 19 Jan 2013 19:17:31 +0100 Subject: [PATCH 111/204] Core/CS: More npcflag info in .npc info --- .../2013_01_19_06_world_trinity_string.sql | 28 ++++++++++++ src/server/game/Miscellaneous/Language.h | 27 +++++++++++- src/server/scripts/Commands/cs_npc.cpp | 44 ++++++++++++++++--- 3 files changed, 93 insertions(+), 6 deletions(-) create mode 100644 sql/updates/world/2013_01_19_06_world_trinity_string.sql diff --git a/sql/updates/world/2013_01_19_06_world_trinity_string.sql b/sql/updates/world/2013_01_19_06_world_trinity_string.sql new file mode 100644 index 00000000000..322d43a7720 --- /dev/null +++ b/sql/updates/world/2013_01_19_06_world_trinity_string.sql @@ -0,0 +1,28 @@ +DELETE FROM `trinity_string` WHERE `entry` BETWEEN 820 AND 842; +INSERT INTO `trinity_string`(`entry`,`content_default`) VALUES +(820,'* has gossip (%u)'), +(821,'* is quest giver (%u)'), +(822,'* is class trainer (%u)'), +(823,'* is profession trainer(%u)'), +(824,'* is ammo vendor (%u)'), +(825,'* is food vendor(%u)'), +(826,'* is poison vendor (%u)'), +(827,'* is reagent vendor (%u)'), +(828,'* can repair (%u)'), +(829,'* is flight master (%u)'), +(830,'* is spirit healer (%u)'), +(831,'* is spirit guide (%u)'), +(832,'* is innkeeper (%u)'), +(833,'* is banker (%u)'), +(834,'* is petitioner (%u)'), +(835,'* is tabard designer (%u)'), +(836,'* is battle master (%u)'), +(837,'* is auctioneer (%u)'), +(838,'* is stable master (%u)'), +(839,'* is guild banker (%u)'), +(840,'* has spell click (%u)'), +(841,'* is mailbox (%u)'), +(842,'* is player vehicle (%u)'); + +UPDATE `trinity_string` SET `content_default`='* is vendor (%u)' WHERE `entry`=545; +UPDATE `trinity_string` SET `content_default`='* is trainer (%u)' WHERE `entry`=546; diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 292833c3955..35b0a6f8569 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -742,7 +742,32 @@ enum TrinityStrings LANG_COMMAND_CREATURESTORAGE_NOTFOUND = 818, LANG_CHANNEL_CITY = 819, - // Room for in-game strings 820-999 not used + + LANG_NPCINFO_GOSSIP = 820, + LANG_NPCINFO_QUESTGIVER = 821, + LANG_NPCINFO_TRAINER_CLASS = 822, + LANG_NPCINFO_TRAINER_PROFESSION = 823, + LANG_NPCINFO_VENDOR_AMMO = 824, + LANG_NPCINFO_VENDOR_FOOD = 825, + LANG_NPCINFO_VENDOR_POISON = 826, + LANG_NPCINFO_VENDOR_REAGENT = 827, + LANG_NPCINFO_REPAIR = 828, + LANG_NPCINFO_FLIGHTMASTER = 829, + LANG_NPCINFO_SPIRITHEALER = 830, + LANG_NPCINFO_SPIRITGUIDE = 831, + LANG_NPCINFO_INNKEEPER = 832, + LANG_NPCINFO_BANKER = 833, + LANG_NPCINFO_PETITIONER = 834, + LANG_NPCINFO_TABARDDESIGNER = 835, + LANG_NPCINFO_BATTLEMASTER = 836, + LANG_NPCINFO_AUCTIONEER = 837, + LANG_NPCINFO_STABLEMASTER = 838, + LANG_NPCINFO_GUILD_BANKER = 839, + LANG_NPCINFO_SPELLCLICK = 840, + LANG_NPCINFO_MAILBOX = 841, + LANG_NPCINFO_PLAYER_VEHICLE = 842, + + // Room for in-game strings 843-999 not used // Level 4 (CLI only commands) LANG_COMMAND_EXIT = 1000, diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 8679e288282..7ccd5ed1177 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -33,6 +33,42 @@ EndScriptData */ #include "Player.h" #include "Pet.h" +struct NpcFlagText +{ + uint32 flag; + int32 text; +}; + +#define NPCFLAG_COUNT 24 + +const NpcFlagText npcFlagTexts[NPCFLAG_COUNT] = +{ + { UNIT_NPC_FLAG_AUCTIONEER, LANG_NPCINFO_AUCTIONEER }, + { UNIT_NPC_FLAG_BANKER, LANG_NPCINFO_BANKER }, + { UNIT_NPC_FLAG_BATTLEMASTER, LANG_NPCINFO_BATTLEMASTER }, + { UNIT_NPC_FLAG_FLIGHTMASTER, LANG_NPCINFO_FLIGHTMASTER }, + { UNIT_NPC_FLAG_GOSSIP, LANG_NPCINFO_GOSSIP }, + { UNIT_NPC_FLAG_GUILD_BANKER, LANG_NPCINFO_GUILD_BANKER }, + { UNIT_NPC_FLAG_INNKEEPER, LANG_NPCINFO_INNKEEPER }, + { UNIT_NPC_FLAG_PETITIONER, LANG_NPCINFO_PETITIONER }, + { UNIT_NPC_FLAG_PLAYER_VEHICLE, LANG_NPCINFO_PLAYER_VEHICLE }, + { UNIT_NPC_FLAG_QUESTGIVER, LANG_NPCINFO_QUESTGIVER }, + { UNIT_NPC_FLAG_REPAIR, LANG_NPCINFO_REPAIR }, + { UNIT_NPC_FLAG_SPELLCLICK, LANG_NPCINFO_SPELLCLICK }, + { UNIT_NPC_FLAG_SPIRITGUIDE, LANG_NPCINFO_SPIRITGUIDE }, + { UNIT_NPC_FLAG_SPIRITHEALER, LANG_NPCINFO_SPIRITHEALER }, + { UNIT_NPC_FLAG_STABLEMASTER, LANG_NPCINFO_STABLEMASTER }, + { UNIT_NPC_FLAG_TABARDDESIGNER, LANG_NPCINFO_TABARDDESIGNER }, + { UNIT_NPC_FLAG_TRAINER, LANG_NPCINFO_TRAINER }, + { UNIT_NPC_FLAG_TRAINER_CLASS, LANG_NPCINFO_TRAINER_CLASS }, + { UNIT_NPC_FLAG_TRAINER_PROFESSION, LANG_NPCINFO_TRAINER_PROFESSION }, + { UNIT_NPC_FLAG_VENDOR, LANG_NPCINFO_VENDOR }, + { UNIT_NPC_FLAG_VENDOR_AMMO, LANG_NPCINFO_VENDOR_AMMO }, + { UNIT_NPC_FLAG_VENDOR_FOOD, LANG_NPCINFO_VENDOR_FOOD }, + { UNIT_NPC_FLAG_VENDOR_POISON, LANG_NPCINFO_VENDOR_POISON }, + { UNIT_NPC_FLAG_VENDOR_REAGENT, LANG_NPCINFO_VENDOR_REAGENT } +}; + class npc_commandscript : public CommandScript { public: @@ -619,11 +655,9 @@ public: handler->PSendSysMessage(LANG_NPCINFO_POSITION, float(target->GetPositionX()), float(target->GetPositionY()), float(target->GetPositionZ())); handler->PSendSysMessage(LANG_NPCINFO_AIINFO, target->GetAIName().c_str(), target->GetScriptName().c_str()); - if (npcflags & UNIT_NPC_FLAG_VENDOR) - handler->SendSysMessage(LANG_NPCINFO_VENDOR); - - if (npcflags & UNIT_NPC_FLAG_TRAINER) - handler->SendSysMessage(LANG_NPCINFO_TRAINER); + for (uint8 i = 0; i < NPCFLAG_COUNT; i++) + if (npcflags & npcFlagTexts[i].flag) + handler->PSendSysMessage(npcFlagTexts[i].text, npcFlagTexts[i].flag); return true; } From 383e1a13f4230c222dcc11cec92d5b6b1d39a2e0 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Sun, 20 Jan 2013 01:19:37 +0100 Subject: [PATCH 112/204] DB/SAI: Fix "Sludge Belcher" event spamming with aura --- sql/updates/world/2013_01_20_00_world_sai.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 sql/updates/world/2013_01_20_00_world_sai.sql diff --git a/sql/updates/world/2013_01_20_00_world_sai.sql b/sql/updates/world/2013_01_20_00_world_sai.sql new file mode 100644 index 00000000000..d4e4bb81c41 --- /dev/null +++ b/sql/updates/world/2013_01_20_00_world_sai.sql @@ -0,0 +1 @@ +UPDATE `smart_scripts` SET `event_type`=25,`event_flags`=0,`event_param1`=0,`event_param2`=0 WHERE `entryorguid`=16029 AND `source_type`=0 AND `id`=0; -- Sludge Belcher From e768f31fcde87d24bda4fb71a737b62acae006a3 Mon Sep 17 00:00:00 2001 From: Kinzcool Date: Sat, 19 Jan 2013 19:32:54 -0500 Subject: [PATCH 113/204] DB/Creature Text: Updated / Added some sounds & texts for Jedoga Shadowseeker --- .../world/2013_01_20_01_world_creature_text.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 sql/updates/world/2013_01_20_01_world_creature_text.sql diff --git a/sql/updates/world/2013_01_20_01_world_creature_text.sql b/sql/updates/world/2013_01_20_01_world_creature_text.sql new file mode 100644 index 00000000000..d543b02d9fc --- /dev/null +++ b/sql/updates/world/2013_01_20_01_world_creature_text.sql @@ -0,0 +1,10 @@ +UPDATE `creature_text` SET `sound`=14344 WHERE `entry`=29310 AND `groupid`=1 AND `id`=0; +UPDATE `creature_text` SET `sound`=14345 WHERE `entry`=29310 AND `groupid`=1 AND `id`=1; +UPDATE `creature_text` SET `text`='Yogg-Saron! Grant me your power!', `sound`=14346 WHERE `entry`=29310 AND `groupid`=2 AND `id`=0; +UPDATE `creature_text` SET `sound`=14347 WHERE `entry`=29310 AND `groupid`=2 AND `id`=1; +UPDATE `creature_text` SET `sound`=14348 WHERE `entry`=29310 AND `groupid`=3 AND `id`=0; +UPDATE `creature_text` SET `sound`=14349 WHERE `entry`=29310 AND `groupid`=3 AND `id`=1; +UPDATE `creature_text` SET `sound`=14351 WHERE `entry`=29310 AND `groupid`=4; +UPDATE `creature_text` SET `sound`=14354 WHERE `entry`=29310 AND `groupid`=5 AND `id`=2; +UPDATE `creature_text` SET `sound`=14355 WHERE `entry`=29310 AND `groupid`=5 AND `id`=3; +UPDATE `creature_text` SET `text`='The faithful shall be exalted, but there is more work to be done. We will press on until all of Azeroth lies beneath his shadow!', `sound`=14356 WHERE `entry`=29310 AND `groupid`=5 AND `id`=4; From e05135c0622845e3594f5fbcc048f0d1df8c28ec Mon Sep 17 00:00:00 2001 From: Kinzcool Date: Sat, 19 Jan 2013 21:45:49 -0500 Subject: [PATCH 114/204] DB/Creature Text: Added sounds & corrected type value for Gal'darah --- .../world/2013_01_20_02_world_creature_text.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 sql/updates/world/2013_01_20_02_world_creature_text.sql diff --git a/sql/updates/world/2013_01_20_02_world_creature_text.sql b/sql/updates/world/2013_01_20_02_world_creature_text.sql new file mode 100644 index 00000000000..25c8c046dfc --- /dev/null +++ b/sql/updates/world/2013_01_20_02_world_creature_text.sql @@ -0,0 +1,10 @@ +UPDATE `creature_text` SET `sound`=14430, `type`=14 WHERE `entry`=29306 AND `groupid`=0; +UPDATE `creature_text` SET `sound`=14431, `type`=14 WHERE `entry`=29306 AND `groupid`=4; +UPDATE `creature_text` SET `sound`=14432, `type`=14 WHERE `entry`=29306 AND `groupid`=5; +UPDATE `creature_text` SET `sound`=14433, `type`=14 WHERE `entry`=29306 AND `groupid`=3 AND `id`=0; +UPDATE `creature_text` SET `sound`=14434, `type`=14 WHERE `entry`=29306 AND `groupid`=3 AND `id`=1; +UPDATE `creature_text` SET `sound`=14435, `type`=14 WHERE `entry`=29306 AND `groupid`=3 AND `id`=2; +UPDATE `creature_text` SET `sound`=14436, `type`=14 WHERE `entry`=29306 AND `groupid`=1 AND `id`=0; +UPDATE `creature_text` SET `sound`=14437, `type`=14, `text`='Who needs gods when we ARE gods?' WHERE `entry`=29306 AND `groupid`=1 AND `id`=1; +UPDATE `creature_text` SET `sound`=14438, `type`=14 WHERE `entry`=29306 AND `groupid`=1 AND `id`=2; +UPDATE `creature_text` SET `sound`=14439, `type`=14 WHERE `entry`=29306 AND `groupid`=2; From c38d95ac33e44ea30908b5d8e8707848094dd5f0 Mon Sep 17 00:00:00 2001 From: joschiwald Date: Sun, 20 Jan 2013 04:30:17 +0100 Subject: [PATCH 115/204] Core/Spells: convert some spells to SpellScripts --- ...2013_01_20_03_world_spell_script_names.sql | 81 +++++ .../game/Spells/Auras/SpellAuraEffects.cpp | 284 +----------------- src/server/game/Spells/Spell.cpp | 5 - src/server/game/Spells/SpellEffects.cpp | 191 +----------- src/server/scripts/Spells/spell_dk.cpp | 107 +++++++ src/server/scripts/Spells/spell_druid.cpp | 205 +++++++++++++ src/server/scripts/Spells/spell_generic.cpp | 155 ++++++++++ src/server/scripts/Spells/spell_holiday.cpp | 87 ++++-- src/server/scripts/Spells/spell_item.cpp | 225 ++++++++++++++ src/server/scripts/Spells/spell_mage.cpp | 184 ++++++++---- src/server/scripts/Spells/spell_paladin.cpp | 111 +++++++ src/server/scripts/Spells/spell_priest.cpp | 156 +++++++--- src/server/scripts/Spells/spell_rogue.cpp | 53 ++++ src/server/scripts/Spells/spell_shaman.cpp | 31 ++ src/server/scripts/Spells/spell_warlock.cpp | 38 +++ src/server/scripts/Spells/spell_warrior.cpp | 141 +++++++++ 16 files changed, 1454 insertions(+), 600 deletions(-) create mode 100644 sql/updates/world/2013_01_20_03_world_spell_script_names.sql diff --git a/sql/updates/world/2013_01_20_03_world_spell_script_names.sql b/sql/updates/world/2013_01_20_03_world_spell_script_names.sql new file mode 100644 index 00000000000..0cd28de0472 --- /dev/null +++ b/sql/updates/world/2013_01_20_03_world_spell_script_names.sql @@ -0,0 +1,81 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` IN ( +48792, -- spell_dk_icebound_fortitude +59754, -- spell_dk_rune_tap_party +55233, -- spell_dk_vampiric_blood +-1850, -- spell_dru_dash +48391, -- spell_dru_owlkin_frenzy +29166, -- spell_dru_innervate +34246, -- spell_dru_idol_lifebloom +60779, -- spell_dru_idol_lifebloom +-1079, -- spell_dru_rip +-61391,-- spell_dru_typhoon +63845, -- spell_gen_create_lance +28702, -- spell_gen_netherbloom +28720, -- spell_gen_nightmare_vine +26400, -- spell_item_arcane_shroud +8342, -- spell_item_goblin_jumper_cables +22999, -- spell_item_goblin_jumper_cables_xl +54732, -- spell_item_gnomish_army_knife +17512, -- spell_item_piccolo_of_the_flaming_fire +48129, -- spell_item_scroll_of_recall +60320, -- spell_item_scroll_of_recall +60321, -- spell_item_scroll_of_recall +28862, -- spell_item_the_eye_of_diminution +-543, -- spell_mage_fire_frost_ward +-6143, -- spell_mage_fire_frost_ward +-11426,-- spell_mage_ice_barrier +-1463, -- spell_mage_mana_shield +1038, -- spell_pal_hand_of_salvation +58597, -- spell_pal_sacred_shield +-7001, -- spell_pri_lightwell_renew +-17, -- spell_pri_power_word_shield +-1943, -- spell_rog_rupture +-51490,-- spell_sha_thunderstorm +-7235, -- spell_warl_shadow_ward +5246, -- spell_warr_intimidating_shout +-772, -- spell_warr_rend +64380, -- spell_warr_shattering_throw +65941, -- spell_warr_shattering_throw +50725, -- spell_warr_vigilance_trigger +26275 -- spell_winter_veil_px_238_winter_wondervolt +); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(48792, 'spell_dk_icebound_fortitude'), +(59754, 'spell_dk_rune_tap_party'), +(55233, 'spell_dk_vampiric_blood'), +(-1850, 'spell_dru_dash'), +(48391, 'spell_dru_owlkin_frenzy'), +(29166, 'spell_dru_innervate'), +(34246, 'spell_dru_idol_lifebloom'), +(60779, 'spell_dru_idol_lifebloom'), +(-1079, 'spell_dru_rip'), +(-61391,'spell_dru_typhoon'), +(63845, 'spell_gen_create_lance'), +(28702, 'spell_gen_netherbloom'), +(28720, 'spell_gen_nightmare_vine'), +(26400, 'spell_item_arcane_shroud'), +(8342, 'spell_item_goblin_jumper_cables'), +(22999, 'spell_item_goblin_jumper_cables_xl'), +(54732, 'spell_item_gnomish_army_knife'), +(17512, 'spell_item_piccolo_of_the_flaming_fire'), +(48129, 'spell_item_scroll_of_recall'), +(60320, 'spell_item_scroll_of_recall'), +(60321, 'spell_item_scroll_of_recall'), +(28862, 'spell_item_the_eye_of_diminution'), +(-543, 'spell_mage_fire_frost_ward'), +(-6143, 'spell_mage_fire_frost_ward'), +(-11426,'spell_mage_ice_barrier'), +(-1463, 'spell_mage_mana_shield'), +(1038, 'spell_pal_hand_of_salvation'), +(58597, 'spell_pal_sacred_shield'), +(-7001, 'spell_pri_lightwell_renew'), +(-17, 'spell_pri_power_word_shield'), +(-1943, 'spell_rog_rupture'), +(-51490,'spell_sha_thunderstorm'), +(-7235, 'spell_warl_shadow_ward'), +(5246, 'spell_warr_intimidating_shout'), +(-772, 'spell_warr_rend'), +(64380, 'spell_warr_shattering_throw'), +(65941, 'spell_warr_shattering_throw'), +(50725, 'spell_warr_vigilance_trigger'), +(26275, 'spell_winter_veil_px_238_winter_wondervolt'); diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 3b5c6131c5a..05da36d2ccc 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -483,112 +483,8 @@ int32 AuraEffect::CalculateAmount(Unit* caster) } break; case SPELL_AURA_SCHOOL_ABSORB: - m_canBeRecalculated = false; - if (!caster) - break; - switch (GetSpellInfo()->SpellFamilyName) - { - case SPELLFAMILY_MAGE: - // Ice Barrier - if (GetSpellInfo()->SpellFamilyFlags[1] & 0x1 && GetSpellInfo()->SpellFamilyFlags[2] & 0x8) - { - // +80.68% from sp bonus - DoneActualBenefit += caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask()) * 0.8068f; - // Glyph of Ice Barrier: its weird having a SPELLMOD_ALL_EFFECTS here but its blizzards doing :) - // Glyph of Ice Barrier is only applied at the spell damage bonus because it was already applied to the base value in CalculateSpellDamage - DoneActualBenefit = caster->ApplyEffectModifiers(GetSpellInfo(), m_effIndex, DoneActualBenefit); - } - // Fire Ward - else if (GetSpellInfo()->SpellFamilyFlags[0] & 0x8 && GetSpellInfo()->SpellFamilyFlags[2] & 0x8) - { - // +80.68% from sp bonus - DoneActualBenefit += caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask()) * 0.8068f; - } - // Frost Ward - else if (GetSpellInfo()->SpellFamilyFlags[0] & 0x100 && GetSpellInfo()->SpellFamilyFlags[2] & 0x8) - { - // +80.68% from sp bonus - DoneActualBenefit += caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask()) * 0.8068f; - } - break; - case SPELLFAMILY_WARLOCK: - // Shadow Ward - if (m_spellInfo->SpellFamilyFlags[2] & 0x40) - { - // +80.68% from sp bonus - DoneActualBenefit += caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask()) * 0.8068f; - } - break; - case SPELLFAMILY_PRIEST: - // Power Word: Shield - if (GetSpellInfo()->SpellFamilyFlags[0] & 0x1 && GetSpellInfo()->SpellFamilyFlags[2] & 0x400) - { - // +80.68% from sp bonus - float bonus = 0.8068f; - - // Borrowed Time - if (AuraEffect const* pAurEff = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, 2899, 1)) - bonus += CalculatePct(1.0f, pAurEff->GetAmount()); - - DoneActualBenefit += caster->SpellBaseHealingBonusDone(m_spellInfo->GetSchoolMask()) * bonus; - // Improved PW: Shield: its weird having a SPELLMOD_ALL_EFFECTS here but its blizzards doing :) - // Improved PW: Shield is only applied at the spell healing bonus because it was already applied to the base value in CalculateSpellDamage - DoneActualBenefit = caster->ApplyEffectModifiers(GetSpellInfo(), m_effIndex, DoneActualBenefit); - DoneActualBenefit *= caster->CalculateLevelPenalty(GetSpellInfo()); - - amount += int32(DoneActualBenefit); - - // Twin Disciplines - if (AuraEffect const* pAurEff = caster->GetAuraEffect(SPELL_AURA_ADD_PCT_MODIFIER, SPELLFAMILY_PRIEST, 0x400000, 0, 0, caster->GetGUID())) - AddPct(amount, pAurEff->GetAmount()); - - // Focused Power - // Reuse variable, not sure if this code below can be moved before Twin Disciplines - DoneActualBenefit = float(amount); - DoneActualBenefit *= caster->GetTotalAuraMultiplier(SPELL_AURA_MOD_HEALING_DONE_PERCENT); - amount = int32(DoneActualBenefit); - - return amount; - } - break; - case SPELLFAMILY_PALADIN: - // Sacred Shield - if (m_spellInfo->SpellFamilyFlags[1] & 0x80000) - { - //+75.00% from sp bonus - float bonus = 0.75f; - - DoneActualBenefit += caster->SpellBaseHealingBonusDone(m_spellInfo->GetSchoolMask()) * bonus; - // Divine Guardian is only applied at the spell healing bonus because it was already applied to the base value in CalculateSpellDamage - DoneActualBenefit = caster->ApplyEffectModifiers(GetSpellInfo(), m_effIndex, DoneActualBenefit); - DoneActualBenefit *= caster->CalculateLevelPenalty(GetSpellInfo()); - - amount += (int32)DoneActualBenefit; - - // Arena - Dampening - AuraEffect const* pAurEff = caster->GetAuraEffect(74410, 0); - if (!pAurEff) - pAurEff = caster->GetAuraEffect(74411, 0); // Battleground - Dampening - if (pAurEff) - AddPct(amount, pAurEff->GetAmount()); - - return amount; - } - break; - default: - break; - } - break; case SPELL_AURA_MANA_SHIELD: m_canBeRecalculated = false; - if (!caster) - break; - // Mana Shield - if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_MAGE && GetSpellInfo()->SpellFamilyFlags[0] & 0x8000 && m_spellInfo->SpellFamilyFlags[2] & 0x8) - { - // +80.53% from +spd bonus - DoneActualBenefit += caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask()) * 0.8053f; - } break; case SPELL_AURA_DUMMY: if (!caster) @@ -600,161 +496,9 @@ int32 AuraEffect::CalculateAmount(Unit* caster) amount = GetBase()->GetUnitOwner()->SpellHealingBonusTaken(caster, GetSpellInfo(), amount, SPELL_DIRECT_DAMAGE); } break; - case SPELL_AURA_PERIODIC_DAMAGE: - if (!caster) - break; - // Rupture - if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_ROGUE && m_spellInfo->SpellFamilyFlags[0] & 0x100000) - { - m_canBeRecalculated = false; - if (caster->GetTypeId() != TYPEID_PLAYER) - break; - //1 point : ${($m1+$b1*1+0.015*$AP)*4} damage over 8 secs - //2 points: ${($m1+$b1*2+0.024*$AP)*5} damage over 10 secs - //3 points: ${($m1+$b1*3+0.03*$AP)*6} damage over 12 secs - //4 points: ${($m1+$b1*4+0.03428571*$AP)*7} damage over 14 secs - //5 points: ${($m1+$b1*5+0.0375*$AP)*8} damage over 16 secs - float AP_per_combo[6] = {0.0f, 0.015f, 0.024f, 0.03f, 0.03428571f, 0.0375f}; - uint8 cp = caster->ToPlayer()->GetComboPoints(); - if (cp > 5) cp = 5; - amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * AP_per_combo[cp]); - } - // Rip - else if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_DRUID && m_spellInfo->SpellFamilyFlags[0] & 0x00800000 && GetAuraType() == SPELL_AURA_PERIODIC_DAMAGE) - { - m_canBeRecalculated = false; - // 0.01*$AP*cp - if (caster->GetTypeId() != TYPEID_PLAYER) - break; - - uint8 cp = caster->ToPlayer()->GetComboPoints(); - - // Idol of Feral Shadows. Cant be handled as SpellMod in SpellAura:Dummy due its dependency from CPs - if (AuraEffect const* aurEff = caster->GetAuraEffect(34241, EFFECT_0)) - amount += cp * aurEff->GetAmount(); - // Idol of Worship. Cant be handled as SpellMod in SpellAura:Dummy due its dependency from CPs - else if (AuraEffect const* aurEff = caster->GetAuraEffect(60774, EFFECT_0)) - amount += cp * aurEff->GetAmount(); - - amount += uint32(CalculatePct(caster->GetTotalAttackPowerValue(BASE_ATTACK), cp)); - } - // Rend - else if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_WARRIOR && GetSpellInfo()->SpellFamilyFlags[0] & 0x20) - { - m_canBeRecalculated = false; - // $0.2 * (($MWB + $mwb) / 2 + $AP / 14 * $MWS) bonus per tick - float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK); - int32 mws = caster->GetAttackTime(BASE_ATTACK); - float mwb_min = caster->GetWeaponDamageRange(BASE_ATTACK, MINDAMAGE); - float mwb_max = caster->GetWeaponDamageRange(BASE_ATTACK, MAXDAMAGE); - float mwb = ((mwb_min + mwb_max) / 2 + ap * mws / 14000) * 0.2f; - amount += int32(caster->ApplyEffectModifiers(m_spellInfo, m_effIndex, mwb)); - // "If used while your target is above 75% health, Rend does 35% more damage." - // as for 3.1.3 only ranks above 9 (wrong tooltip?) - if (m_spellInfo->GetRank() >= 9) - { - if (GetBase()->GetUnitOwner()->HasAuraState(AURA_STATE_HEALTH_ABOVE_75_PERCENT, m_spellInfo, caster)) - AddPct(amount, m_spellInfo->Effects[EFFECT_2].CalcValue(caster)); - } - } - break; - case SPELL_AURA_PERIODIC_ENERGIZE: - switch (m_spellInfo->Id) - { - case 29166: // Innervate - ApplyPct(amount, float(GetBase()->GetUnitOwner()->GetCreatePowers(POWER_MANA)) / GetTotalTicks()); - break; - case 48391: // Owlkin Frenzy - ApplyPct(amount, GetBase()->GetUnitOwner()->GetCreatePowers(POWER_MANA)); - break; - default: - break; - } - break; - case SPELL_AURA_PERIODIC_HEAL: - if (!caster) - break; - // Lightwell Renew - if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_PRIEST && m_spellInfo->SpellFamilyFlags[2] & 0x4000) - { - if (caster->GetTypeId() == TYPEID_PLAYER) - // Bonus from Glyph of Lightwell - if (AuraEffect* modHealing = caster->GetAuraEffect(55673, 0)) - AddPct(amount, modHealing->GetAmount()); - } - break; - case SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN: - if (!caster) - break; - // Icebound Fortitude - if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_DEATHKNIGHT && m_spellInfo->SpellFamilyFlags[0] & 0x00100000) - { - if (caster->GetTypeId() == TYPEID_PLAYER) - { - int32 value = (-1 * amount) - 10; - uint32 defva = uint32(caster->ToPlayer()->GetSkillValue(SKILL_DEFENSE) + caster->ToPlayer()->GetRatingBonusValue(CR_DEFENSE_SKILL)); - - if (defva > 400) - value += int32((defva - 400) * 0.15); - - // Glyph of Icebound Fortitude - if (AuraEffect const* aurEff = caster->GetAuraEffect(58625, 0)) - { - int32 valMax = aurEff->GetAmount(); - if (value < valMax) - value = valMax; - } - amount = -value; - } - } - // Hand of Salvation - else if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_PALADIN && GetSpellInfo()->SpellFamilyFlags[0] & 0x00000100) - { - //Glyph of Salvation - if (caster->GetGUID() == GetBase()->GetUnitOwner()->GetGUID()) - if (AuraEffect const* aurEff = caster->GetAuraEffect(63225, 0)) - amount = -aurEff->GetAmount(); - } - break; - case SPELL_AURA_MOD_THREAT: - { - uint8 level_diff = 0; - float multiplier = 0.0f; - switch (GetId()) - { - // Arcane Shroud - case 26400: - level_diff = GetBase()->GetUnitOwner()->getLevel() - 60; - multiplier = 2; - break; - // The Eye of Diminution - case 28862: - level_diff = GetBase()->GetUnitOwner()->getLevel() - 60; - multiplier = 1; - break; - } - if (level_diff > 0) - amount += int32(multiplier * level_diff); - break; - } - case SPELL_AURA_MOD_INCREASE_HEALTH: - // Vampiric Blood - if (GetId() == 55233) - amount = GetBase()->GetUnitOwner()->CountPctFromMaxHealth(amount); - break; - case SPELL_AURA_MOD_INCREASE_SPEED: - // Dash - do not set speed if not in cat form - if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_DRUID && GetSpellInfo()->SpellFamilyFlags[2] & 0x00000008) - amount = GetBase()->GetUnitOwner()->GetShapeshiftForm() == FORM_CAT ? amount : 0; - break; default: break; } - if (DoneActualBenefit != 0.0f) - { - DoneActualBenefit *= caster->CalculateLevelPenalty(GetSpellInfo()); - amount += (int32)DoneActualBenefit; - } GetBase()->CallScriptEffectCalcAmountHandlers(const_cast(this), amount, m_canBeRecalculated); amount *= GetBase()->GetStackAmount(); @@ -848,32 +592,6 @@ void AuraEffect::CalculateSpellMod() { switch (GetAuraType()) { - case SPELL_AURA_DUMMY: - switch (GetSpellInfo()->SpellFamilyName) - { - case SPELLFAMILY_DRUID: - switch (GetId()) - { - case 34246: // Idol of the Emerald Queen - case 60779: // Idol of Lush Moss - { - if (!m_spellmod) - { - m_spellmod = new SpellModifier(GetBase()); - m_spellmod->op = SPELLMOD_DOT; - m_spellmod->type = SPELLMOD_FLAT; - m_spellmod->spellId = GetId(); - m_spellmod->mask[1] = 0x0010; - } - m_spellmod->value = GetAmount()/7; - } - break; - } - break; - default: - break; - } - break; case SPELL_AURA_ADD_FLAT_MODIFIER: case SPELL_AURA_ADD_PCT_MODIFIER: if (!m_spellmod) @@ -882,7 +600,7 @@ void AuraEffect::CalculateSpellMod() m_spellmod->op = SpellModOp(GetMiscValue()); ASSERT(m_spellmod->op < MAX_SPELLMOD); - m_spellmod->type = SpellModType(GetAuraType()); // SpellModType value == spell aura types + m_spellmod->type = SpellModType(GetAuraType()); // SpellModType value == spell aura types m_spellmod->spellId = GetId(); m_spellmod->mask = GetSpellInfo()->Effects[GetEffIndex()].SpellClassMask; m_spellmod->charges = GetBase()->GetCharges(); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 9bb3eaa31f1..054f6a109db 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1345,11 +1345,6 @@ void Spell::SelectImplicitAreaTargets(SpellEffIndex effIndex, SpellImplicitTarge } } - // todo: move to scripts, but we must call it before resize list by MaxAffectedTargets - // Intimidating Shout - if (m_spellInfo->Id == 5246 && effIndex != EFFECT_0) - unitTargets.remove(m_targets.GetUnitTarget()); - // Other special target selection goes here if (uint32 maxTargets = m_spellValue->MaxAffectedTargets) { diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 1dddb08be0b..4fdf6654cba 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -883,12 +883,6 @@ void Spell::EffectTriggerSpell(SpellEffIndex effIndex) m_caster->CastSpell(unitTarget, spell->Id, true); return; } - // Righteous Defense - case 31980: - { - m_caster->CastSpell(unitTarget, 31790, true); - return; - } // Cloak of Shadows case 35729: { @@ -1139,32 +1133,8 @@ void Spell::EffectTeleportUnits(SpellEffIndex /*effIndex*/) return; // Pre effects - uint8 uiMaxSafeLevel = 0; switch (m_spellInfo->Id) { - case 48129: // Scroll of Recall - uiMaxSafeLevel = 40; - case 60320: // Scroll of Recall II - if (!uiMaxSafeLevel) - uiMaxSafeLevel = 70; - case 60321: // Scroll of Recal III - if (!uiMaxSafeLevel) - uiMaxSafeLevel = 80; - - if (unitTarget->getLevel() > uiMaxSafeLevel) - { - unitTarget->AddAura(60444, unitTarget); //Apply Lost! Aura - - // ALLIANCE from 60323 to 60330 - HORDE from 60328 to 60335 - uint32 spellId = 60323; - if (m_caster->ToPlayer()->GetTeam() == HORDE) - spellId += 5; - - spellId += urand(0, 7); - m_caster->CastSpell(m_caster, spellId, true); - return; - } - break; case 66550: // teleports outside (Isle of Conquest) if (Player* target = unitTarget->ToPlayer()) { @@ -1188,7 +1158,7 @@ void Spell::EffectTeleportUnits(SpellEffIndex /*effIndex*/) // If not exist data for dest location - return if (!m_targets.HasDst()) { - sLog->outError(LOG_FILTER_SPELLS_AURAS, "Spell::EffectTeleportUnits - does not have destination for spell ID %u\n", m_spellInfo->Id); + sLog->outError(LOG_FILTER_SPELLS_AURAS, "Spell::EffectTeleportUnits - does not have destination for spellId %u.", m_spellInfo->Id); return; } @@ -1585,10 +1555,6 @@ void Spell::EffectHealPct(SpellEffIndex /*effIndex*/) if (!m_originalCaster) return; - // Rune Tap - Party - if (m_spellInfo->Id == 59754 && unitTarget == m_caster) - return; - uint32 heal = m_originalCaster->SpellHealingBonusDone(unitTarget, m_spellInfo, unitTarget->CountPctFromMaxHealth(damage), HEAL); heal = unitTarget->SpellHealingBonusTaken(m_originalCaster, m_spellInfo, heal, HEAL); @@ -3732,23 +3698,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex) return; unitTarget->RemoveAurasDueToSpell(m_spellInfo->Effects[effIndex].CalcValue()); break; - // PX-238 Winter Wondervolt TRAP - case 26275: - { - uint32 spells[4] = { 26272, 26157, 26273, 26274 }; - - // check presence - for (uint8 j = 0; j < 4; ++j) - if (unitTarget->HasAuraEffect(spells[j], 0)) - return; - - // select spell - uint32 iTmpSpellId = spells[urand(0, 3)]; - - // cast - unitTarget->CastSpell(unitTarget, iTmpSpellId, true); - return; - } // Bending Shinbone case 8856: { @@ -3794,14 +3743,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex) m_caster->CastSpell(unitTarget, 22682, true); return; } - // Piccolo of the Flaming Fire - case 17512: - { - if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER) - return; - unitTarget->HandleEmoteCommand(EMOTE_STATE_DANCE); - return; - } // Decimate case 28374: case 54426: @@ -3944,17 +3885,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex) m_caster->MonsterTextEmote(buf, 0); break; } - // Vigilance - case 50725: - { - if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER) - return; - - // Remove Taunt cooldown - unitTarget->ToPlayer()->RemoveSpellCooldown(355, true); - - return; - } // Death Knight Initiate Visual case 51519: { @@ -4113,17 +4043,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex) } return; } - case 63845: // Create Lance - { - if (m_caster->GetTypeId() != TYPEID_PLAYER) - return; - - if (m_caster->ToPlayer()->GetTeam() == ALLIANCE) - m_caster->CastSpell(m_caster, 63914, true); - else - m_caster->CastSpell(m_caster, 63919, true); - return; - } case 59317: // Teleporting { @@ -4317,46 +4236,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex) return; } } - case SPELLFAMILY_POTION: - { - switch (m_spellInfo->Id) - { - // Netherbloom - case 28702: - { - if (!unitTarget) - return; - // 25% chance of casting a random buff - if (roll_chance_i(75)) - return; - - // triggered spells are 28703 to 28707 - // Note: some sources say, that there was the possibility of - // receiving a debuff. However, this seems to be removed by a patch. - const uint32 spellid = 28703; - - // don't overwrite an existing aura - for (uint8 i = 0; i < 5; ++i) - if (unitTarget->HasAura(spellid + i)) - return; - unitTarget->CastSpell(unitTarget, spellid+urand(0, 4), true); - break; - } - - // Nightmare Vine - case 28720: - { - if (!unitTarget) - return; - // 25% chance of casting Nightmare Pollen - if (roll_chance_i(75)) - return; - unitTarget->CastSpell(unitTarget, 28721, true); - break; - } - } - break; - } case SPELLFAMILY_DEATHKNIGHT: { // Pestilence @@ -4377,19 +4256,6 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex) } break; } - case SPELLFAMILY_WARRIOR: - { - // Shattering Throw - if (m_spellInfo->SpellFamilyFlags[1] & 0x00400000) - { - if (!unitTarget) - return; - // remove shields, will still display immune to damage part - unitTarget->RemoveAurasWithMechanic(1<GetTypeId() != TYPEID_PLAYER) + if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER) return; - if (unitTarget->isAlive()) + if (unitTarget->isAlive() || !unitTarget->IsInWorld()) return; - if (!unitTarget->IsInWorld()) - return; - - switch (m_spellInfo->Id) - { - // Defibrillate (Goblin Jumper Cables) have 33% chance on success - case 8342: - if (roll_chance_i(67)) - { - m_caster->CastSpell(m_caster, 8338, true, m_CastItem); - return; - } - break; - // Defibrillate (Goblin Jumper Cables XL) have 50% chance on success - case 22999: - if (roll_chance_i(50)) - { - m_caster->CastSpell(m_caster, 23055, true, m_CastItem); - return; - } - break; - // Defibrillate (Gnomish Army Knife) have 67% chance on success_list - case 54732: - if (roll_chance_i(33)) - { - return; - } - break; - default: - break; - } Player* target = unitTarget->ToPlayer(); @@ -5151,26 +4984,10 @@ void Spell::EffectKnockBack(SpellEffIndex effIndex) if (creatureTarget->isWorldBoss() || creatureTarget->IsDungeonBoss()) return; - // Spells with SPELL_EFFECT_KNOCK_BACK(like Thunderstorm) can't knoback target if target has ROOT/STUN + // Spells with SPELL_EFFECT_KNOCK_BACK (like Thunderstorm) can't knockback target if target has ROOT/STUN if (unitTarget->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED)) return; - // Typhoon - if (m_spellInfo->SpellFamilyName == SPELLFAMILY_DRUID && m_spellInfo->SpellFamilyFlags[1] & 0x01000000) - { - // Glyph of Typhoon - if (m_caster->HasAura(62135)) - return; - } - - // Thunderstorm - if (m_spellInfo->SpellFamilyName == SPELLFAMILY_SHAMAN && m_spellInfo->SpellFamilyFlags[1] & 0x00002000) - { - // Glyph of Thunderstorm - if (m_caster->HasAura(62132)) - return; - } - // Instantly interrupt non melee spells being casted if (unitTarget->IsNonMeleeSpellCasted(true)) unitTarget->InterruptNonMeleeSpells(true); diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 060db02d53c..62a0599dab1 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -37,6 +37,7 @@ enum DeathKnightSpells SPELL_DK_DEATH_COIL_HEAL = 47633, SPELL_DK_DEATH_STRIKE_HEAL = 45470, SPELL_DK_GHOUL_EXPLODE = 47496, + SPELL_DK_GLYPH_OF_ICEBOUND_FORTITUDE = 58625, SPELL_DK_RUNIC_POWER_ENERGIZE = 49088, SPELL_DK_SCOURGE_STRIKE_TRIGGERED = 70890, SPELL_DK_WILL_OF_THE_NECROPOLIS_TALENT_R1 = 49189, @@ -584,6 +585,55 @@ class spell_dk_ghoul_explode : public SpellScriptLoader } }; +// 48792 - Icebound Fortitude +class spell_dk_icebound_fortitude : public SpellScriptLoader +{ + public: + spell_dk_icebound_fortitude() : SpellScriptLoader("spell_dk_icebound_fortitude") { } + + class spell_dk_icebound_fortitude_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dk_icebound_fortitude_AuraScript); + + bool Load() + { + Unit* caster = GetCaster(); + return caster && caster->GetTypeId() == TYPEID_PLAYER; + } + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + if (Unit* caster = GetCaster()) + { + int32 value = amount; + uint32 defValue = uint32(caster->ToPlayer()->GetSkillValue(SKILL_DEFENSE) + caster->ToPlayer()->GetRatingBonusValue(CR_DEFENSE_SKILL)); + + if (defValue > 400) + value -= int32((defValue - 400) * 0.15); + + // Glyph of Icebound Fortitude + if (AuraEffect const* aurEff = caster->GetAuraEffect(SPELL_DK_GLYPH_OF_ICEBOUND_FORTITUDE, EFFECT_0)) + { + int32 valMax = -aurEff->GetAmount(); + if (value > valMax) + value = valMax; + } + amount = value; + } + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_icebound_fortitude_AuraScript::CalculateAmount, EFFECT_2, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_dk_icebound_fortitude_AuraScript(); + } +}; + // 50365, 50371 - Improved Blood Presence class spell_dk_improved_blood_presence : public SpellScriptLoader { @@ -677,6 +727,33 @@ class spell_dk_improved_unholy_presence : public SpellScriptLoader } }; +// 59754 Rune Tap - Party +class spell_dk_rune_tap_party : public SpellScriptLoader +{ + public: + spell_dk_rune_tap_party() : SpellScriptLoader("spell_dk_rune_tap_party") { } + + class spell_dk_rune_tap_party_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dk_rune_tap_party_SpellScript); + + void CheckTargets(std::list& targets) + { + targets.remove(GetCaster()); + } + + void Register() + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dk_rune_tap_party_SpellScript::CheckTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_dk_rune_tap_party_SpellScript(); + } +}; + // 55090 - Scourge Strike (55265, 55270, 55271) class spell_dk_scourge_strike : public SpellScriptLoader { @@ -784,6 +861,33 @@ class spell_dk_spell_deflection : public SpellScriptLoader } }; +// 55233 - Vampiric Blood +class spell_dk_vampiric_blood : public SpellScriptLoader +{ + public: + spell_dk_vampiric_blood() : SpellScriptLoader("spell_dk_vampiric_blood") { } + + class spell_dk_vampiric_blood_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dk_vampiric_blood_AuraScript); + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + amount = GetUnitOwner()->CountPctFromMaxHealth(amount); + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_vampiric_blood_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_HEALTH); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_dk_vampiric_blood_AuraScript(); + } +}; + // 52284 - Will of the Necropolis class spell_dk_will_of_the_necropolis : public SpellScriptLoader { @@ -861,9 +965,12 @@ void AddSC_deathknight_spell_scripts() new spell_dk_death_pact(); new spell_dk_death_strike(); new spell_dk_ghoul_explode(); + new spell_dk_icebound_fortitude(); new spell_dk_improved_blood_presence(); new spell_dk_improved_unholy_presence(); + new spell_dk_rune_tap_party(); new spell_dk_scourge_strike(); new spell_dk_spell_deflection(); + new spell_dk_vampiric_blood(); new spell_dk_will_of_the_necropolis(); } diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index 6dd453597de..e2b918e1c7f 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -30,6 +30,9 @@ enum DruidSpells { SPELL_DRUID_ENRAGE_MOD_DAMAGE = 51185, + SPELL_DRUID_GLYPH_OF_TYPHOON = 62135, + SPELL_DRUID_IDOL_OF_FERAL_SHADOWS = 34241, + SPELL_DRUID_IDOL_OF_WORSHIP = 60774, SPELL_DRUID_INCREASED_MOONFIRE_DURATION = 38414, SPELL_DRUID_KING_OF_THE_JUNGLE = 48492, SPELL_DRUID_LIFEBLOOM_ENERGIZE = 64372, @@ -41,6 +44,35 @@ enum DruidSpells SPELL_DRUID_ITEM_T8_BALANCE_RELIC = 64950, }; +// -1850 - Dash +class spell_dru_dash : public SpellScriptLoader +{ + public: + spell_dru_dash() : SpellScriptLoader("spell_dru_dash") { } + + class spell_dru_dash_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_dash_AuraScript); + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + // do not set speed if not in cat form + if (GetUnitOwner()->GetShapeshiftForm() != FORM_CAT) + amount = 0; + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_dash_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_INCREASE_SPEED); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_dru_dash_AuraScript(); + } +}; + // -5229 - Enrage class spell_dru_enrage : public SpellScriptLoader { @@ -121,6 +153,69 @@ class spell_dru_glyph_of_starfire : public SpellScriptLoader } }; +// 34246 - Idol of the Emerald Queen +// 60779 - Idol of Lush Moss +class spell_dru_idol_lifebloom : public SpellScriptLoader +{ + public: + spell_dru_idol_lifebloom() : SpellScriptLoader("spell_dru_idol_lifebloom") { } + + class spell_dru_idol_lifebloom_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_idol_lifebloom_AuraScript); + + void HandleEffectCalcSpellMod(AuraEffect const* aurEff, SpellModifier*& spellMod) + { + if (!spellMod) + { + spellMod = new SpellModifier(GetAura()); + spellMod->op = SPELLMOD_DOT; + spellMod->type = SPELLMOD_FLAT; + spellMod->spellId = GetId(); + spellMod->mask = GetSpellInfo()->Effects[aurEff->GetEffIndex()].SpellClassMask; + } + spellMod->value = aurEff->GetAmount() / 7; + } + + void Register() + { + DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_dru_idol_lifebloom_AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_dru_idol_lifebloom_AuraScript(); + } +}; + +// 29166 - Innervate +class spell_dru_innervate : public SpellScriptLoader +{ + public: + spell_dru_innervate() : SpellScriptLoader("spell_dru_innervate") { } + + class spell_dru_innervate_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_innervate_AuraScript); + + void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/) + { + amount = CalculatePct(int32(GetUnitOwner()->GetCreatePowers(POWER_MANA) / aurEff->GetTotalTicks()), amount); + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_innervate_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_ENERGIZE); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_dru_innervate_AuraScript(); + } +}; + // -5570 - Insect Swarm class spell_dru_insect_swarm : public SpellScriptLoader { @@ -276,6 +371,33 @@ class spell_dru_moonkin_form_passive : public SpellScriptLoader } }; +// 48391 - Owlkin Frenzy +class spell_dru_owlkin_frenzy : public SpellScriptLoader +{ + public: + spell_dru_owlkin_frenzy() : SpellScriptLoader("spell_dru_owlkin_frenzy") { } + + class spell_dru_owlkin_frenzy_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_owlkin_frenzy_AuraScript); + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + amount = CalculatePct(GetUnitOwner()->GetCreatePowers(POWER_MANA), amount); + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_owlkin_frenzy_AuraScript::CalculateAmount, EFFECT_2, SPELL_AURA_PERIODIC_ENERGIZE); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_dru_owlkin_frenzy_AuraScript(); + } +}; + // -16972 - Predatory Strikes class spell_dru_predatory_strikes : public SpellScriptLoader { @@ -349,6 +471,54 @@ class spell_dru_primal_tenacity : public SpellScriptLoader } }; +// -1079 - Rip +class spell_dru_rip : public SpellScriptLoader +{ + public: + spell_dru_rip() : SpellScriptLoader("spell_dru_rip") { } + + class spell_dru_rip_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_rip_AuraScript); + + bool Load() + { + Unit* caster = GetCaster(); + return caster && caster->GetTypeId() == TYPEID_PLAYER; + } + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) + { + canBeRecalculated = false; + + if (Unit* caster = GetCaster()) + { + // 0.01 * $AP * cp + uint8 cp = caster->ToPlayer()->GetComboPoints(); + + // Idol of Feral Shadows. Can't be handled as SpellMod due its dependency from CPs + if (AuraEffect const* idol = caster->GetAuraEffect(SPELL_DRUID_IDOL_OF_FERAL_SHADOWS, EFFECT_0)) + amount += cp * idol->GetAmount(); + // Idol of Worship. Can't be handled as SpellMod due its dependency from CPs + else if (AuraEffect const* idol = caster->GetAuraEffect(SPELL_DRUID_IDOL_OF_WORSHIP, EFFECT_0)) + amount += cp * idol->GetAmount(); + + amount += int32(CalculatePct(caster->GetTotalAttackPowerValue(BASE_ATTACK), cp)); + } + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_rip_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_dru_rip_AuraScript(); + } +}; + // 62606 - Savage Defense class spell_dru_savage_defense : public SpellScriptLoader { @@ -658,6 +828,35 @@ class spell_dru_tiger_s_fury : public SpellScriptLoader } }; +// -61391 - Typhoon +class spell_dru_typhoon : public SpellScriptLoader +{ + public: + spell_dru_typhoon() : SpellScriptLoader("spell_dru_typhoon") { } + + class spell_dru_typhoon_SpellScript : public SpellScript + { + PrepareSpellScript(spell_dru_typhoon_SpellScript); + + void HandleKnockBack(SpellEffIndex effIndex) + { + // Glyph of Typhoon + if (GetCaster()->HasAura(SPELL_DRUID_GLYPH_OF_TYPHOON)) + PreventHitDefaultEffect(effIndex); + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_dru_typhoon_SpellScript::HandleKnockBack, EFFECT_0, SPELL_EFFECT_KNOCK_BACK); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_dru_typhoon_SpellScript(); + } +}; + // 70691 - Item T10 Restoration 4P Bonus class spell_dru_t10_restoration_4p_bonus : public SpellScriptLoader { @@ -715,13 +914,18 @@ class spell_dru_t10_restoration_4p_bonus : public SpellScriptLoader void AddSC_druid_spell_scripts() { + new spell_dru_dash(); new spell_dru_enrage(); new spell_dru_glyph_of_starfire(); + new spell_dru_idol_lifebloom(); + new spell_dru_innervate(); new spell_dru_insect_swarm(); new spell_dru_lifebloom(); new spell_dru_moonkin_form_passive(); + new spell_dru_owlkin_frenzy(); new spell_dru_predatory_strikes(); new spell_dru_primal_tenacity(); + new spell_dru_rip(); new spell_dru_savage_defense(); new spell_dru_savage_roar(); new spell_dru_starfall_aoe(); @@ -729,5 +933,6 @@ void AddSC_druid_spell_scripts() new spell_dru_survival_instincts(); new spell_dru_swift_flight_passive(); new spell_dru_tiger_s_fury(); + new spell_dru_typhoon(); new spell_dru_t10_restoration_4p_bonus(); } diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index b5f4312bae5..6004ec6cf89 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -226,6 +226,158 @@ class spell_gen_cannibalize : public SpellScriptLoader } }; +// 63845 - Create Lance +enum CreateLanceSpells +{ + SPELL_CREATE_LANCE_ALLIANCE = 63914, + SPELL_CREATE_LANCE_HORDE = 63919 +}; + +class spell_gen_create_lance : public SpellScriptLoader +{ + public: + spell_gen_create_lance() : SpellScriptLoader("spell_gen_create_lance") { } + + class spell_gen_create_lance_SpellScript : public SpellScript + { + PrepareSpellScript(spell_gen_create_lance_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_CREATE_LANCE_ALLIANCE) || !sSpellMgr->GetSpellInfo(SPELL_CREATE_LANCE_HORDE)) + return false; + return true; + } + + void HandleScript(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + + if (Player* target = GetHitPlayer()) + { + if (target->GetTeam() == ALLIANCE) + GetCaster()->CastSpell(target, SPELL_CREATE_LANCE_ALLIANCE, true); + else + GetCaster()->CastSpell(target, SPELL_CREATE_LANCE_HORDE, true); + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_gen_create_lance_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_gen_create_lance_SpellScript(); + } +}; + +// 28702 - Netherbloom +enum Netherbloom +{ + SPELL_NETHERBLOOM_POLLEN_1 = 28703 +}; + +class spell_gen_netherbloom : public SpellScriptLoader +{ + public: + spell_gen_netherbloom() : SpellScriptLoader("spell_gen_netherbloom") { } + + class spell_gen_netherbloom_SpellScript : public SpellScript + { + PrepareSpellScript(spell_gen_netherbloom_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + for (uint8 i = 0; i < 5; ++i) + if (!sSpellMgr->GetSpellInfo(SPELL_NETHERBLOOM_POLLEN_1 + i)) + return false; + return true; + } + + void HandleScript(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + + if (Unit* target = GetHitUnit()) + { + // 25% chance of casting a random buff + if (roll_chance_i(75)) + return; + + // triggered spells are 28703 to 28707 + // Note: some sources say, that there was the possibility of + // receiving a debuff. However, this seems to be removed by a patch. + + // don't overwrite an existing aura + for (uint8 i = 0; i < 5; ++i) + if (target->HasAura(SPELL_NETHERBLOOM_POLLEN_1 + i)) + return; + + target->CastSpell(target, SPELL_NETHERBLOOM_POLLEN_1 + urand(0, 4), true); + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_gen_netherbloom_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_gen_netherbloom_SpellScript(); + } +}; + +// 28720 - Nightmare Vine +enum NightmareVine +{ + SPELL_NIGHTMARE_POLLEN = 28721 +}; + +class spell_gen_nightmare_vine : public SpellScriptLoader +{ + public: + spell_gen_nightmare_vine() : SpellScriptLoader("spell_gen_nightmare_vine") { } + + class spell_gen_nightmare_vine_SpellScript : public SpellScript + { + PrepareSpellScript(spell_gen_nightmare_vine_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_NIGHTMARE_POLLEN)) + return false; + return true; + } + + void HandleScript(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + + if (Unit* target = GetHitUnit()) + { + // 25% chance of casting Nightmare Pollen + if (roll_chance_i(25)) + target->CastSpell(target, SPELL_NIGHTMARE_POLLEN, true); + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_gen_nightmare_vine_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_gen_nightmare_vine_SpellScript(); + } +}; + // 45472 Parachute enum ParachuteSpells { @@ -3195,6 +3347,9 @@ void AddSC_generic_spell_scripts() new spell_gen_av_drekthar_presence(); new spell_gen_burn_brutallus(); new spell_gen_cannibalize(); + new spell_gen_create_lance(); + new spell_gen_netherbloom(); + new spell_gen_nightmare_vine(); new spell_gen_parachute(); new spell_gen_pet_summoned(); new spell_gen_remove_flight_auras(); diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp index d883b4d7da7..dbfc2b44501 100644 --- a/src/server/scripts/Spells/spell_holiday.cpp +++ b/src/server/scripts/Spells/spell_holiday.cpp @@ -303,27 +303,10 @@ class spell_winter_veil_mistletoe : public SpellScriptLoader void HandleScript(SpellEffIndex /*effIndex*/) { - Unit* caster = GetCaster(); - if (Player* target = GetHitPlayer()) { - uint32 spellId = 0; - switch (urand(0, 2)) - { - case 0: - spellId = SPELL_CREATE_MISTLETOE; - break; - case 1: - spellId = SPELL_CREATE_HOLLY; - break; - case 2: - spellId = SPELL_CREATE_SNOWFLAKES; - break; - default: - return; - } - - caster->CastSpell(target, spellId, true); + uint32 spellId = RAND(SPELL_CREATE_HOLLY, SPELL_CREATE_MISTLETOE, SPELL_CREATE_SNOWFLAKES); + GetCaster()->CastSpell(target, spellId, true); } } @@ -339,6 +322,71 @@ class spell_winter_veil_mistletoe : public SpellScriptLoader } }; +// 26275 - PX-238 Winter Wondervolt TRAP +enum PX238WinterWondervolt +{ + SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_1 = 26157, + SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_2 = 26272, + SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_3 = 26273, + SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_4 = 26274 +}; + +class spell_winter_veil_px_238_winter_wondervolt : public SpellScriptLoader +{ + public: + spell_winter_veil_px_238_winter_wondervolt() : SpellScriptLoader("spell_winter_veil_px_238_winter_wondervolt") { } + + class spell_winter_veil_px_238_winter_wondervolt_SpellScript : public SpellScript + { + PrepareSpellScript(spell_winter_veil_px_238_winter_wondervolt_SpellScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_1) || + !sSpellMgr->GetSpellInfo(SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_2) || + !sSpellMgr->GetSpellInfo(SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_3) || + !sSpellMgr->GetSpellInfo(SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_4)) + return false; + return true; + } + + void HandleScript(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + + uint32 const spells[4] = + { + SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_1, + SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_2, + SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_3, + SPELL_PX_238_WINTER_WONDERVOLT_TRANSFORM_4 + }; + + if (Unit* target = GetHitUnit()) + { + for (uint8 i = 0; i < 4; ++i) + if (target->HasAura(spells[i])) + return; + + GetCaster()->CastSpell(target, spells[urand(0, 3)], true); + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_winter_veil_px_238_winter_wondervolt_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + + private: + + }; + + SpellScript* GetSpellScript() const + { + return new spell_winter_veil_px_238_winter_wondervolt_SpellScript(); + } +}; + void AddSC_holiday_spell_scripts() { // Love is in the Air @@ -349,4 +397,5 @@ void AddSC_holiday_spell_scripts() new spell_hallow_end_tricky_treat(); // Winter Veil new spell_winter_veil_mistletoe(); + new spell_winter_veil_px_238_winter_wondervolt(); } diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index b4e06cb6b48..c38d05bc02a 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -73,6 +73,93 @@ class spell_item_trigger_spell : public SpellScriptLoader } }; +// 26400 - Arcane Shroud +class spell_item_arcane_shroud : public SpellScriptLoader +{ + public: + spell_item_arcane_shroud() : SpellScriptLoader("spell_item_arcane_shroud") { } + + class spell_item_arcane_shroud_AuraScript : public AuraScript + { + PrepareAuraScript(spell_item_arcane_shroud_AuraScript); + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + int32 diff = GetUnitOwner()->getLevel() - 60; + if (diff > 0) + amount += 2 * diff; + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_item_arcane_shroud_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_THREAT); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_item_arcane_shroud_AuraScript(); + } +}; + +// 8342 - Defibrillate (Goblin Jumper Cables) have 33% chance on success +// 22999 - Defibrillate (Goblin Jumper Cables XL) have 50% chance on success +// 54732 - Defibrillate (Gnomish Army Knife) have 67% chance on success +enum Defibrillate +{ + SPELL_GOBLIN_JUMPER_CABLES_FAIL = 8338, + SPELL_GOBLIN_JUMPER_CABLES_XL_FAIL = 23055 +}; + +class spell_item_defibrillate : public SpellScriptLoader +{ + public: + spell_item_defibrillate(char const* name, uint8 chance, uint32 failSpell = 0) : SpellScriptLoader(name), _chance(chance), _failSpell(failSpell) { } + + class spell_item_defibrillate_SpellScript : public SpellScript + { + PrepareSpellScript(spell_item_defibrillate_SpellScript); + + public: + spell_item_defibrillate_SpellScript(uint8 chance, uint32 failSpell) : SpellScript(), _chance(chance), _failSpell(failSpell) { } + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (_failSpell && !sSpellMgr->GetSpellInfo(_failSpell)) + return false; + return true; + } + + void HandleScript(SpellEffIndex effIndex) + { + if (roll_chance_i(_chance)) + { + PreventHitDefaultEffect(effIndex); + if (_failSpell) + GetCaster()->CastSpell(GetCaster(), _failSpell, true, GetCastItem()); + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_item_defibrillate_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_RESURRECT); + } + + private: + uint8 _chance; + uint32 _failSpell; + }; + + SpellScript* GetSpellScript() const + { + return new spell_item_defibrillate_SpellScript(_chance, _failSpell); + } + + private: + uint8 _chance; + uint32 _failSpell; +}; + // http://www.wowhead.com/item=6522 Deviate Fish // 8063 Deviate Fish enum DeviateFishSpells @@ -464,6 +551,35 @@ class spell_item_noggenfogger_elixir : public SpellScriptLoader } }; +// 17512 - Piccolo of the Flaming Fire +class spell_item_piccolo_of_the_flaming_fire : public SpellScriptLoader +{ + public: + spell_item_piccolo_of_the_flaming_fire() : SpellScriptLoader("spell_item_piccolo_of_the_flaming_fire") { } + + class spell_item_piccolo_of_the_flaming_fire_SpellScript : public SpellScript + { + PrepareSpellScript(spell_item_piccolo_of_the_flaming_fire_SpellScript); + + void HandleScript(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + if (Player* target = GetHitPlayer()) + target->HandleEmoteCommand(EMOTE_STATE_DANCE); + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_item_piccolo_of_the_flaming_fire_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_item_piccolo_of_the_flaming_fire_SpellScript(); + } +}; + // http://www.wowhead.com/item=6657 Savory Deviate Delight // 8213 Savory Deviate Delight enum SavoryDeviateDelight @@ -522,6 +638,79 @@ class spell_item_savory_deviate_delight : public SpellScriptLoader } }; +// 48129 - Scroll of Recall +// 60320 - Scroll of Recall II +// 60321 - Scroll of Recall III +enum ScrollOfRecall +{ + SPELL_SCROLL_OF_RECALL_I = 48129, + SPELL_SCROLL_OF_RECALL_II = 60320, + SPELL_SCROLL_OF_RECALL_III = 60321, + SPELL_LOST = 60444, + SPELL_SCROLL_OF_RECALL_FAIL_ALLIANCE_1 = 60323, + SPELL_SCROLL_OF_RECALL_FAIL_HORDE_1 = 60328, +}; + +class spell_item_scroll_of_recall : public SpellScriptLoader +{ + public: + spell_item_scroll_of_recall() : SpellScriptLoader("spell_item_scroll_of_recall") { } + + class spell_item_scroll_of_recall_SpellScript : public SpellScript + { + PrepareSpellScript(spell_item_scroll_of_recall_SpellScript); + + bool Load() + { + return GetCaster()->GetTypeId() == TYPEID_PLAYER; + } + + void HandleScript(SpellEffIndex effIndex) + { + Unit* caster = GetCaster(); + uint8 maxSafeLevel = 0; + switch (GetSpellInfo()->Id) + { + case SPELL_SCROLL_OF_RECALL_I: // Scroll of Recall + maxSafeLevel = 40; + break; + case SPELL_SCROLL_OF_RECALL_II: // Scroll of Recall II + maxSafeLevel = 70; + break; + case SPELL_SCROLL_OF_RECALL_III: // Scroll of Recal III + maxSafeLevel = 80; + break; + default: + break; + } + + if (caster->getLevel() > maxSafeLevel) + { + caster->CastSpell(caster, SPELL_LOST, true); + + // ALLIANCE from 60323 to 60330 - HORDE from 60328 to 60335 + uint32 spellId = SPELL_SCROLL_OF_RECALL_FAIL_ALLIANCE_1; + if (GetCaster()->ToPlayer()->GetTeam() == HORDE) + spellId = SPELL_SCROLL_OF_RECALL_FAIL_HORDE_1; + + GetCaster()->CastSpell(GetCaster(), spellId + urand(0, 7), true); + + PreventHitDefaultEffect(effIndex); + } + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_item_scroll_of_recall_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_TELEPORT_UNITS); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_item_scroll_of_recall_SpellScript(); + } +}; + // http://www.wowhead.com/item=7734 Six Demon Bag // 14537 Six Demon Bag enum SixDemonBagSpells @@ -593,6 +782,35 @@ class spell_item_six_demon_bag : public SpellScriptLoader } }; +// 28862 - The Eye of Diminution +class spell_item_the_eye_of_diminution : public SpellScriptLoader +{ + public: + spell_item_the_eye_of_diminution() : SpellScriptLoader("spell_item_the_eye_of_diminution") { } + + class spell_item_the_eye_of_diminution_AuraScript : public AuraScript + { + PrepareAuraScript(spell_item_the_eye_of_diminution_AuraScript); + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + int32 diff = GetUnitOwner()->getLevel() - 60; + if (diff > 0) + amount += diff; + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_item_the_eye_of_diminution_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_THREAT); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_item_the_eye_of_diminution_AuraScript(); + } +}; + // http://www.wowhead.com/item=44012 Underbelly Elixir // 59640 Underbelly Elixir enum UnderbellyElixirSpells @@ -2030,6 +2248,10 @@ void AddSC_item_spell_scripts() // 23075 Mithril Mechanical Dragonling new spell_item_trigger_spell("spell_item_mithril_mechanical_dragonling", SPELL_MITHRIL_MECHANICAL_DRAGONLING); + new spell_item_arcane_shroud(); + new spell_item_defibrillate("spell_item_goblin_jumper_cables", 67, SPELL_GOBLIN_JUMPER_CABLES_FAIL); + new spell_item_defibrillate("spell_item_goblin_jumper_cables_xl", 50, SPELL_GOBLIN_JUMPER_CABLES_XL_FAIL); + new spell_item_defibrillate("spell_item_gnomish_army_knife", 33); new spell_item_deviate_fish(); new spell_item_flask_of_the_north(); new spell_item_gnomish_death_ray(); @@ -2037,8 +2259,11 @@ void AddSC_item_spell_scripts() new spell_item_mingos_fortune_generator(); new spell_item_net_o_matic(); new spell_item_noggenfogger_elixir(); + new spell_item_piccolo_of_the_flaming_fire(); new spell_item_savory_deviate_delight(); + new spell_item_scroll_of_recall(); new spell_item_six_demon_bag(); + new spell_item_the_eye_of_diminution(); new spell_item_underbelly_elixir(); new spell_item_shadowmourne(); new spell_item_red_rider_air_rifle(); diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 61f0579190f..a673759a49e 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -29,7 +29,7 @@ enum MageSpells { SPELL_MAGE_COLD_SNAP = 11958, - SPELL_MAGE_FROST_WARDING_R1 = 28332, + SPELL_MAGE_FROST_WARDING_R1 = 11189, SPELL_MAGE_FROST_WARDING_TRIGGERED = 57776, SPELL_MAGE_INCANTERS_ABSORBTION_R1 = 44394, SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED = 44413, @@ -45,6 +45,31 @@ enum MageSpells SPELL_MAGE_GLYPH_OF_BLAST_WAVE = 62126, }; +// Incanter's Absorbtion +class spell_mage_incanters_absorbtion_base_AuraScript : public AuraScript +{ + public: + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_INCANTERS_ABSORBTION_R1)) + return false; + return true; + } + + void Trigger(AuraEffect* aurEff, DamageInfo& /*dmgInfo*/, uint32& absorbAmount) + { + Unit* target = GetTarget(); + + if (AuraEffect* talentAurEff = target->GetAuraEffectOfRankedSpell(SPELL_MAGE_INCANTERS_ABSORBTION_R1, EFFECT_0)) + { + int32 bp = CalculatePct(absorbAmount, talentAurEff->GetAmount()); + target->CastCustomSpell(target, SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED, &bp, NULL, NULL, true, NULL, aurEff); + } + } +}; + // -11113 - Blast Wave class spell_mage_blast_wave : public SpellScriptLoader { @@ -127,29 +152,47 @@ class spell_mage_cold_snap : public SpellScriptLoader } }; -// -543, -6143 - Frost Warding -class spell_mage_frost_warding_trigger : public SpellScriptLoader +// -543 - Fire Ward +// -6143 - Frost Ward +class spell_mage_fire_frost_ward : public SpellScriptLoader { public: - spell_mage_frost_warding_trigger() : SpellScriptLoader("spell_mage_frost_warding_trigger") { } + spell_mage_fire_frost_ward() : SpellScriptLoader("spell_mage_fire_frost_ward") { } - class spell_mage_frost_warding_trigger_AuraScript : public AuraScript + class spell_mage_fire_frost_ward_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript { - PrepareAuraScript(spell_mage_frost_warding_trigger_AuraScript); + PrepareAuraScript(spell_mage_fire_frost_ward_AuraScript); bool Validate(SpellInfo const* /*spellInfo*/) { - if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_FROST_WARDING_TRIGGERED) || !sSpellMgr->GetSpellInfo(SPELL_MAGE_FROST_WARDING_R1)) + if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_FROST_WARDING_TRIGGERED)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_FROST_WARDING_R1)) return false; return true; } - void Absorb(AuraEffect* aurEff, DamageInfo & dmgInfo, uint32 & absorbAmount) + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) + { + canBeRecalculated = false; + if (Unit* caster = GetCaster()) + { + // +80.68% from sp bonus + float bonus = 0.8068f; + + bonus *= caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()); + bonus *= caster->CalculateLevelPenalty(GetSpellInfo()); + + amount += int32(bonus); + } + } + + void Absorb(AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& absorbAmount) { Unit* target = GetTarget(); if (AuraEffect* talentAurEff = target->GetAuraEffectOfRankedSpell(SPELL_MAGE_FROST_WARDING_R1, EFFECT_0)) { - int32 chance = talentAurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue(); + int32 chance = talentAurEff->GetSpellInfo()->Effects[EFFECT_1].CalcValue(); // SPELL_EFFECT_DUMMY with NO_TARGET if (roll_chance_i(chance)) { @@ -164,79 +207,58 @@ class spell_mage_frost_warding_trigger : public SpellScriptLoader void Register() { - OnEffectAbsorb += AuraEffectAbsorbFn(spell_mage_frost_warding_trigger_AuraScript::Absorb, EFFECT_0); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_fire_frost_ward_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); + OnEffectAbsorb += AuraEffectAbsorbFn(spell_mage_fire_frost_ward_AuraScript::Absorb, EFFECT_0); + AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_fire_frost_ward_AuraScript::Trigger, EFFECT_0); } }; AuraScript* GetAuraScript() const { - return new spell_mage_frost_warding_trigger_AuraScript(); + return new spell_mage_fire_frost_ward_AuraScript(); } }; -class spell_mage_incanters_absorbtion_base_AuraScript : public AuraScript +// -11426 - Ice Barrier +class spell_mage_ice_barrier : public SpellScriptLoader { public: + spell_mage_ice_barrier() : SpellScriptLoader("spell_mage_ice_barrier") { } - bool Validate(SpellInfo const* /*spellInfo*/) + class spell_mage_ice_barrier_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript { - return sSpellMgr->GetSpellInfo(SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED) - && sSpellMgr->GetSpellInfo(SPELL_MAGE_INCANTERS_ABSORBTION_R1); - } + PrepareAuraScript(spell_mage_ice_barrier_AuraScript); - void Trigger(AuraEffect* aurEff, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount) - { - Unit* target = GetTarget(); - - if (AuraEffect* talentAurEff = target->GetAuraEffectOfRankedSpell(SPELL_MAGE_INCANTERS_ABSORBTION_R1, EFFECT_0)) + void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) { - int32 bp = CalculatePct(absorbAmount, talentAurEff->GetAmount()); - target->CastCustomSpell(target, SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED, &bp, NULL, NULL, true, NULL, aurEff); + canBeRecalculated = false; + if (Unit* caster = GetCaster()) + { + // +80.68% from sp bonus + float bonus = 0.8068f; + + bonus *= caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()); + + // Glyph of Ice Barrier: its weird having a SPELLMOD_ALL_EFFECTS here but its blizzards doing :) + // Glyph of Ice Barrier is only applied at the spell damage bonus because it was already applied to the base value in CalculateSpellDamage + bonus = caster->ApplyEffectModifiers(GetSpellInfo(), aurEff->GetEffIndex(), bonus); + + bonus *= caster->CalculateLevelPenalty(GetSpellInfo()); + + amount += int32(bonus); + } } - } -}; - -// -543, -6143, -11426 - Incanter's Absorption -class spell_mage_incanters_absorbtion_absorb : public SpellScriptLoader -{ - public: - spell_mage_incanters_absorbtion_absorb() : SpellScriptLoader("spell_mage_incanters_absorbtion_absorb") { } - - class spell_mage_incanters_absorbtion_absorb_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript - { - PrepareAuraScript(spell_mage_incanters_absorbtion_absorb_AuraScript); void Register() { - AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_incanters_absorbtion_absorb_AuraScript::Trigger, EFFECT_0); + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_ice_barrier_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); + AfterEffectAbsorb += AuraEffectAbsorbFn(spell_mage_ice_barrier_AuraScript::Trigger, EFFECT_0); } }; AuraScript* GetAuraScript() const { - return new spell_mage_incanters_absorbtion_absorb_AuraScript(); - } -}; - -// -1463 - Incanter's Absorption -class spell_mage_incanters_absorbtion_manashield : public SpellScriptLoader -{ - public: - spell_mage_incanters_absorbtion_manashield() : SpellScriptLoader("spell_mage_incanters_absorbtion_manashield") { } - - class spell_mage_incanters_absorbtion_manashield_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript - { - PrepareAuraScript(spell_mage_incanters_absorbtion_manashield_AuraScript); - - void Register() - { - AfterEffectManaShield += AuraEffectManaShieldFn(spell_mage_incanters_absorbtion_manashield_AuraScript::Trigger, EFFECT_0); - } - }; - - AuraScript* GetAuraScript() const - { - return new spell_mage_incanters_absorbtion_manashield_AuraScript(); + return new spell_mage_ice_barrier_AuraScript(); } }; @@ -279,6 +301,44 @@ class spell_mage_living_bomb : public SpellScriptLoader } }; +// -1463 - Mana Shield +class spell_mage_mana_shield : public SpellScriptLoader +{ + public: + spell_mage_mana_shield() : SpellScriptLoader("spell_mage_mana_shield") { } + + class spell_mage_mana_shield_AuraScript : public spell_mage_incanters_absorbtion_base_AuraScript + { + PrepareAuraScript(spell_mage_mana_shield_AuraScript); + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) + { + canBeRecalculated = false; + if (Unit* caster = GetCaster()) + { + // +80.53% from sp bonus + float bonus = 0.8053f; + + bonus *= caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()); + bonus *= caster->CalculateLevelPenalty(GetSpellInfo()); + + amount += int32(bonus); + } + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mage_mana_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_MANA_SHIELD); + AfterEffectManaShield += AuraEffectManaShieldFn(spell_mage_mana_shield_AuraScript::Trigger, EFFECT_0); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_mage_mana_shield_AuraScript(); + } +}; + enum SilvermoonPolymorph { NPC_AUROSALIA = 18744, @@ -378,10 +438,10 @@ void AddSC_mage_spell_scripts() { new spell_mage_blast_wave(); new spell_mage_cold_snap(); - new spell_mage_frost_warding_trigger(); - new spell_mage_incanters_absorbtion_absorb(); - new spell_mage_incanters_absorbtion_manashield(); + new spell_mage_fire_frost_ward(); + new spell_mage_ice_barrier(); new spell_mage_living_bomb(); + new spell_mage_mana_shield(); new spell_mage_polymorph_cast_visual(); new spell_mage_summon_water_elemental(); } diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index d3fc86302e1..2f22de97d77 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -51,6 +51,13 @@ enum PaladinSpells SPELL_PALADIN_HAND_OF_SACRIFICE = 6940, SPELL_PALADIN_DIVINE_SACRIFICE = 64205, + + SPELL_PALADIN_GLYPH_OF_SALVATION = 63225, + + SPELL_PALADIN_RIGHTEOUS_DEFENSE_TAUNT = 31790, + + SPELL_GENERIC_ARENA_DAMPENING = 74410, + SPELL_GENERIC_BATTLEGROUND_DAMPENING = 74411 }; // 31850 - Ardent Defender @@ -490,6 +497,39 @@ class spell_pal_hand_of_sacrifice : public SpellScriptLoader } }; +// 1038 - Hand of Salvation +class spell_pal_hand_of_salvation : public SpellScriptLoader +{ + public: + spell_pal_hand_of_salvation() : SpellScriptLoader("spell_pal_hand_of_salvation") { } + + class spell_pal_hand_of_salvation_AuraScript : public AuraScript + { + PrepareAuraScript(spell_pal_hand_of_salvation_AuraScript); + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + if (Unit* caster = GetCaster()) + { + // Glyph of Salvation + if (caster->GetGUID() == GetUnitOwner()->GetGUID()) + if (AuraEffect const* aurEff = caster->GetAuraEffect(SPELL_PALADIN_GLYPH_OF_SALVATION, EFFECT_0)) + amount -= aurEff->GetAmount(); + } + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pal_hand_of_salvation_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_pal_hand_of_salvation_AuraScript(); + } +}; + // -20473 - Holy Shock class spell_pal_holy_shock : public SpellScriptLoader { @@ -656,6 +696,13 @@ class spell_pal_righteous_defense : public SpellScriptLoader { PrepareSpellScript(spell_pal_righteous_defense_SpellScript); + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_RIGHTEOUS_DEFENSE_TAUNT)) + return false; + return true; + } + SpellCastResult CheckCast() { Unit* caster = GetCaster(); @@ -673,9 +720,27 @@ class spell_pal_righteous_defense : public SpellScriptLoader return SPELL_CAST_OK; } + void HandleTriggerSpellLaunch(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + } + + void HandleTriggerSpellHit(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + if (Unit* target = GetHitUnit()) + GetCaster()->CastSpell(target, SPELL_PALADIN_RIGHTEOUS_DEFENSE_TAUNT, true); + } + void Register() { OnCheckCast += SpellCheckCastFn(spell_pal_righteous_defense_SpellScript::CheckCast); + //! WORKAROUND + //! target select will be executed in hitphase of effect 0 + //! so we must handle trigger spell also in hit phase (default execution in launch phase) + //! see issue #3718 + OnEffectLaunchTarget += SpellEffectFn(spell_pal_righteous_defense_SpellScript::HandleTriggerSpellLaunch, EFFECT_1, SPELL_EFFECT_TRIGGER_SPELL); + OnEffectHitTarget += SpellEffectFn(spell_pal_righteous_defense_SpellScript::HandleTriggerSpellHit, EFFECT_1, SPELL_EFFECT_TRIGGER_SPELL); } }; @@ -685,6 +750,50 @@ class spell_pal_righteous_defense : public SpellScriptLoader } }; +// 58597 - Sacred Shield +class spell_pal_sacred_shield : public SpellScriptLoader +{ + public: + spell_pal_sacred_shield() : SpellScriptLoader("spell_pal_sacred_shield") { } + + class spell_pal_sacred_shield_AuraScript : public AuraScript + { + PrepareAuraScript(spell_pal_sacred_shield_AuraScript); + + void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/) + { + if (Unit* caster = GetCaster()) + { + // +75.00% from sp bonus + float bonus = CalculatePct(caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()), 75.0f); + + // Divine Guardian is only applied at the spell healing bonus because it was already applied to the base value in CalculateSpellDamage + bonus = caster->ApplyEffectModifiers(GetSpellInfo(), aurEff->GetEffIndex(), bonus); + bonus *= caster->CalculateLevelPenalty(GetSpellInfo()); + + amount += int32(bonus); + + // Arena - Dampening + if (AuraEffect const* dampening = caster->GetAuraEffect(SPELL_GENERIC_ARENA_DAMPENING, EFFECT_0)) + AddPct(amount, dampening->GetAmount()); + // Battleground - Dampening + else if (AuraEffect const* dampening = caster->GetAuraEffect(SPELL_GENERIC_BATTLEGROUND_DAMPENING, EFFECT_0)) + AddPct(amount, dampening->GetAmount()); + } + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pal_sacred_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_pal_sacred_shield_AuraScript(); + } +}; + void AddSC_paladin_spell_scripts() { new spell_pal_ardent_defender(); @@ -696,8 +805,10 @@ void AddSC_paladin_spell_scripts() new spell_pal_exorcism_and_holy_wrath_damage(); new spell_pal_guarded_by_the_light(); new spell_pal_hand_of_sacrifice(); + new spell_pal_hand_of_salvation(); new spell_pal_holy_shock(); new spell_pal_judgement_of_command(); new spell_pal_lay_on_hands(); new spell_pal_righteous_defense(); + new spell_pal_sacred_shield(); } diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 1c416a0d28a..23a39819aa2 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -30,6 +30,7 @@ enum PriestSpells { SPELL_PRIEST_EMPOWERED_RENEW = 63544, + SPELL_PRIEST_GLYPHE_OF_LIGHTWELL = 55673, SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL = 48153, SPELL_PRIEST_PENANCE_R1 = 47540, SPELL_PRIEST_PENANCE_R1_DAMAGE = 47758, @@ -43,6 +44,7 @@ enum PriestSpells enum PriestSpellIcons { + PRIEST_ICON_ID_BORROWED_TIME = 2899, PRIEST_ICON_ID_EMPOWERED_RENEW_TALENT = 3021, PRIEST_ICON_ID_PAIN_AND_SUFFERING = 2874, }; @@ -104,6 +106,38 @@ class spell_pri_guardian_spirit : public SpellScriptLoader } }; +// -7001 - Lightwell Renew +class spell_pri_lightwell_renew : public SpellScriptLoader +{ + public: + spell_pri_lightwell_renew() : SpellScriptLoader("spell_pri_lightwell_renew") { } + + class spell_pri_lightwell_renew_AuraScript : public AuraScript + { + PrepareAuraScript(spell_pri_lightwell_renew_AuraScript); + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + if (Unit* caster = GetCaster()) + { + // Bonus from Glyph of Lightwell + if (AuraEffect* modHealing = caster->GetAuraEffect(SPELL_PRIEST_GLYPHE_OF_LIGHTWELL, EFFECT_0)) + AddPct(amount, modHealing->GetAmount()); + } + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pri_lightwell_renew_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_HEAL); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_pri_lightwell_renew_AuraScript(); + } +}; + // -8129 - Mana Burn class spell_pri_mana_burn : public SpellScriptLoader { @@ -260,6 +294,82 @@ class spell_pri_penance : public SpellScriptLoader } }; +// -17 - Power Word: Shield +class spell_pri_power_word_shield : public SpellScriptLoader +{ + public: + spell_pri_power_word_shield() : SpellScriptLoader("spell_pri_power_word_shield") { } + + class spell_pri_power_word_shield_AuraScript : public AuraScript + { + PrepareAuraScript(spell_pri_power_word_shield_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_REFLECTIVE_SHIELD_R1)) + return false; + return true; + } + + void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) + { + canBeRecalculated = false; + if (Unit* caster = GetCaster()) + { + // +80.68% from sp bonus + float bonus = 0.8068f; + + // Borrowed Time + if (AuraEffect const* borrowedTime = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, PRIEST_ICON_ID_BORROWED_TIME, EFFECT_1)) + bonus += CalculatePct(1.0f, borrowedTime->GetAmount()); + + bonus *= caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()); + + // Improved PW: Shield: its weird having a SPELLMOD_ALL_EFFECTS here but its blizzards doing :) + // Improved PW: Shield is only applied at the spell healing bonus because it was already applied to the base value in CalculateSpellDamage + bonus = caster->ApplyEffectModifiers(GetSpellInfo(), aurEff->GetEffIndex(), bonus); + bonus *= caster->CalculateLevelPenalty(GetSpellInfo()); + + amount += int32(bonus); + + // Twin Disciplines + if (AuraEffect const* twinDisciplines = caster->GetAuraEffect(SPELL_AURA_ADD_PCT_MODIFIER, SPELLFAMILY_PRIEST, 0x400000, 0, 0, GetCasterGUID())) + AddPct(amount, twinDisciplines->GetAmount()); + + // Focused Power + amount *= caster->GetTotalAuraMultiplier(SPELL_AURA_MOD_HEALING_DONE_PERCENT); + } + } + + void ReflectDamage(AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& absorbAmount) + { + Unit* target = GetTarget(); + if (dmgInfo.GetAttacker() == target) + return; + + if (Unit* caster = GetCaster()) + if (AuraEffect* talentAurEff = caster->GetAuraEffectOfRankedSpell(SPELL_PRIEST_REFLECTIVE_SHIELD_R1, EFFECT_0)) + { + int32 bp = CalculatePct(absorbAmount, talentAurEff->GetAmount()); + target->CastCustomSpell(dmgInfo.GetAttacker(), SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED, &bp, NULL, NULL, true, NULL, aurEff); + } + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_pri_power_word_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); + AfterEffectAbsorb += AuraEffectAbsorbFn(spell_pri_power_word_shield_AuraScript::ReflectDamage, EFFECT_0); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_pri_power_word_shield_AuraScript(); + } +}; + // 33110 - Prayer of Mending Heal class spell_pri_prayer_of_mending_heal : public SpellScriptLoader { @@ -295,49 +405,6 @@ class spell_pri_prayer_of_mending_heal : public SpellScriptLoader } }; -// -17 - Reflective Shield -class spell_pri_reflective_shield_trigger : public SpellScriptLoader -{ - public: - spell_pri_reflective_shield_trigger() : SpellScriptLoader("spell_pri_reflective_shield_trigger") { } - - class spell_pri_reflective_shield_trigger_AuraScript : public AuraScript - { - PrepareAuraScript(spell_pri_reflective_shield_trigger_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) - { - if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED) || !sSpellMgr->GetSpellInfo(SPELL_PRIEST_REFLECTIVE_SHIELD_R1)) - return false; - return true; - } - - void Trigger(AuraEffect* aurEff, DamageInfo & dmgInfo, uint32 & absorbAmount) - { - Unit* target = GetTarget(); - if (dmgInfo.GetAttacker() == target) - return; - - if (GetCaster()) - if (AuraEffect* talentAurEff = target->GetAuraEffectOfRankedSpell(SPELL_PRIEST_REFLECTIVE_SHIELD_R1, EFFECT_0)) - { - int32 bp = CalculatePct(absorbAmount, talentAurEff->GetAmount()); - target->CastCustomSpell(dmgInfo.GetAttacker(), SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED, &bp, NULL, NULL, true, NULL, aurEff); - } - } - - void Register() - { - AfterEffectAbsorb += AuraEffectAbsorbFn(spell_pri_reflective_shield_trigger_AuraScript::Trigger, EFFECT_0); - } - }; - - AuraScript* GetAuraScript() const - { - return new spell_pri_reflective_shield_trigger_AuraScript(); - } -}; - // -139 - Renew class spell_pri_renew : public SpellScriptLoader { @@ -458,12 +525,13 @@ class spell_pri_vampiric_touch : public SpellScriptLoader void AddSC_priest_spell_scripts() { new spell_pri_guardian_spirit(); + new spell_pri_lightwell_renew(); new spell_pri_mana_burn(); new spell_pri_mind_sear(); new spell_pri_pain_and_suffering_proc(); new spell_pri_penance(); + new spell_pri_power_word_shield(); new spell_pri_prayer_of_mending_heal(); - new spell_pri_reflective_shield_trigger(); new spell_pri_renew(); new spell_pri_shadow_word_death(); new spell_pri_vampiric_touch(); diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 70b677f5aaa..156158b4e36 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -347,6 +347,58 @@ class spell_rog_prey_on_the_weak : public SpellScriptLoader } }; +// -1943 - Rupture +class spell_rog_rupture : public SpellScriptLoader +{ + public: + spell_rog_rupture() : SpellScriptLoader("spell_rog_rupture") { } + + class spell_rog_rupture_AuraScript : public AuraScript + { + PrepareAuraScript(spell_rog_rupture_AuraScript); + + bool Load() + { + Unit* caster = GetCaster(); + return caster && caster->GetTypeId() == TYPEID_PLAYER; + } + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) + { + if (Unit* caster = GetCaster()) + { + canBeRecalculated = false; + + float const attackpowerPerCombo[6] = + { + 0.0f, + 0.015f, // 1 point: ${($m1 + $b1*1 + 0.015 * $AP) * 4} damage over 8 secs + 0.024f, // 2 points: ${($m1 + $b1*2 + 0.024 * $AP) * 5} damage over 10 secs + 0.03f, // 3 points: ${($m1 + $b1*3 + 0.03 * $AP) * 6} damage over 12 secs + 0.03428571f, // 4 points: ${($m1 + $b1*4 + 0.03428571 * $AP) * 7} damage over 14 secs + 0.0375f // 5 points: ${($m1 + $b1*5 + 0.0375 * $AP) * 8} damage over 16 secs + }; + + uint8 cp = caster->ToPlayer()->GetComboPoints(); + if (cp > 5) + cp = 5; + + amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * attackpowerPerCombo[cp]); + } + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_rog_rupture_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_rog_rupture_AuraScript(); + } +}; + // 5938 - Shiv class spell_rog_shiv : public SpellScriptLoader { @@ -395,5 +447,6 @@ void AddSC_rogue_spell_scripts() new spell_rog_nerves_of_steel(); new spell_rog_preparation(); new spell_rog_prey_on_the_weak(); + new spell_rog_rupture(); new spell_rog_shiv(); } diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index 0d249953421..2994761be6f 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -38,6 +38,7 @@ enum ShamanSpells SPELL_SHAMAN_FIRE_NOVA_TRIGGERED_R1 = 8349, SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM = 55456, SPELL_SHAMAN_GLYPH_OF_MANA_TIDE = 55441, + SPELL_SHAMAN_GLYPH_OF_THUNDERSTORM = 62132, SPELL_SHAMAN_LAVA_FLOWS_R1 = 51480, SPELL_SHAMAN_LAVA_FLOWS_TRIGGERED_R1 = 64694, SPELL_SHAMAN_MANA_SPRING_TOTEM_ENERGIZE = 52032, @@ -743,6 +744,35 @@ class spell_sha_sentry_totem : public SpellScriptLoader } }; +// -51490 - Thunderstorm +class spell_sha_thunderstorm : public SpellScriptLoader +{ + public: + spell_sha_thunderstorm() : SpellScriptLoader("spell_sha_thunderstorm") { } + + class spell_sha_thunderstorm_SpellScript : public SpellScript + { + PrepareSpellScript(spell_sha_thunderstorm_SpellScript); + + void HandleKnockBack(SpellEffIndex effIndex) + { + // Glyph of Thunderstorm + if (GetCaster()->HasAura(SPELL_SHAMAN_GLYPH_OF_THUNDERSTORM)) + PreventHitDefaultEffect(effIndex); + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_sha_thunderstorm_SpellScript::HandleKnockBack, EFFECT_2, SPELL_EFFECT_KNOCK_BACK); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_sha_thunderstorm_SpellScript(); + } +}; + void AddSC_shaman_spell_scripts() { new spell_sha_ancestral_awakening_proc(); @@ -760,4 +790,5 @@ void AddSC_shaman_spell_scripts() new spell_sha_mana_spring_totem(); new spell_sha_mana_tide_totem(); new spell_sha_sentry_totem(); + new spell_sha_thunderstorm(); } diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index 89c69733daf..68ad1315dce 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -649,6 +649,43 @@ class spell_warl_seed_of_corruption : public SpellScriptLoader } }; +// -7235 - Shadow Ward +class spell_warl_shadow_ward : public SpellScriptLoader +{ + public: + spell_warl_shadow_ward() : SpellScriptLoader("spell_warl_shadow_ward") { } + + class spell_warl_shadow_ward_AuraScript : public AuraScript + { + PrepareAuraScript(spell_warl_shadow_ward_AuraScript); + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated) + { + canBeRecalculated = false; + if (Unit* caster = GetCaster()) + { + // +80.68% from sp bonus + float bonus = 0.8068f; + + bonus *= caster->SpellBaseHealingBonusDone(GetSpellInfo()->GetSchoolMask()); + bonus *= caster->CalculateLevelPenalty(GetSpellInfo()); + + amount += int32(bonus); + } + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warl_shadow_ward_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_warl_shadow_ward_AuraScript(); + } +}; + // 29858 - Soulshatter class spell_warl_soulshatter : public SpellScriptLoader { @@ -742,6 +779,7 @@ void AddSC_warlock_spell_scripts() new spell_warl_life_tap(); new spell_warl_ritual_of_doom_effect(); new spell_warl_seed_of_corruption(); + new spell_warl_shadow_ward(); new spell_warl_soulshatter(); new spell_warl_unstable_affliction(); } diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index f84265b89de..822d4b17992 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -41,6 +41,7 @@ enum WarriorSpells SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT = 64976, SPELL_WARRIOR_LAST_STAND_TRIGGERED = 12976, SPELL_WARRIOR_SLAM = 50783, + SPELL_WARRIOR_TAUNT = 355, SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_1 = 46859, SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_2 = 46860, SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_1 = 64849, @@ -333,6 +334,34 @@ class spell_warr_improved_spell_reflection : public SpellScriptLoader } }; +// 5246 - Intimidating Shout +class spell_warr_intimidating_shout : public SpellScriptLoader +{ + public: + spell_warr_intimidating_shout() : SpellScriptLoader("spell_warr_intimidating_shout") { } + + class spell_warr_intimidating_shout_SpellScript : public SpellScript + { + PrepareSpellScript(spell_warr_intimidating_shout_SpellScript); + + void FilterTargets(std::list& unitList) + { + unitList.remove(GetExplTargetWorldObject()); + } + + void Register() + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_intimidating_shout_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_warr_intimidating_shout_SpellScript::FilterTargets, EFFECT_2, TARGET_UNIT_SRC_AREA_ENEMY); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_warr_intimidating_shout_SpellScript(); + } +}; + // 12975 - Last Stand class spell_warr_last_stand : public SpellScriptLoader { @@ -409,6 +438,83 @@ class spell_warr_overpower : public SpellScriptLoader } }; +// -772 - Rend +class spell_warr_rend : public SpellScriptLoader +{ + public: + spell_warr_rend() : SpellScriptLoader("spell_warr_rend") { } + + class spell_warr_rend_AuraScript : public AuraScript + { + PrepareAuraScript(spell_warr_rend_AuraScript); + + void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) + { + if (Unit* caster = GetCaster()) + { + canBeRecalculated = false; + + // $0.2 * (($MWB + $mwb) / 2 + $AP / 14 * $MWS) bonus per tick + float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK); + int32 mws = caster->GetAttackTime(BASE_ATTACK); + float mwbMin = caster->GetWeaponDamageRange(BASE_ATTACK, MINDAMAGE); + float mwbMax = caster->GetWeaponDamageRange(BASE_ATTACK, MAXDAMAGE); + float mwb = ((mwbMin + mwbMax) / 2 + ap * mws / 14000) * 0.2f; + amount += int32(caster->ApplyEffectModifiers(GetSpellInfo(), aurEff->GetEffIndex(), mwb)); + + // "If used while your target is above 75% health, Rend does 35% more damage." + // as for 3.1.3 only ranks above 9 (wrong tooltip?) + if (GetSpellInfo()->GetRank() >= 9) + { + if (GetUnitOwner()->HasAuraState(AURA_STATE_HEALTH_ABOVE_75_PERCENT, GetSpellInfo(), caster)) + AddPct(amount, GetSpellInfo()->Effects[EFFECT_2].CalcValue(caster)); + } + } + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_warr_rend_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_warr_rend_AuraScript(); + } +}; + +// 64380, 65941 - Shattering Throw +class spell_warr_shattering_throw : public SpellScriptLoader +{ + public: + spell_warr_shattering_throw() : SpellScriptLoader("spell_warr_shattering_throw") { } + + class spell_warr_shattering_throw_SpellScript : public SpellScript + { + PrepareSpellScript(spell_warr_shattering_throw_SpellScript); + + void HandleScript(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + + // remove shields, will still display immune to damage part + if (Unit* target = GetHitUnit()) + target->RemoveAurasWithMechanic(1 << MECHANIC_IMMUNE_SHIELD, AURA_REMOVE_BY_ENEMY_SPELL); + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_warr_shattering_throw_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_warr_shattering_throw_SpellScript(); + } +}; + // -1464 - Slam class spell_warr_slam : public SpellScriptLoader { @@ -493,6 +599,37 @@ class spell_warr_vigilance : public SpellScriptLoader } }; +// 50725 Vigilance +class spell_warr_vigilance_trigger : public SpellScriptLoader +{ + public: + spell_warr_vigilance_trigger() : SpellScriptLoader("spell_warr_vigilance_trigger") { } + + class spell_warr_vigilance_trigger_SpellScript : public SpellScript + { + PrepareSpellScript(spell_warr_vigilance_trigger_SpellScript); + + void HandleScript(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + + // Remove Taunt cooldown + if (Player* target = GetHitPlayer()) + target->RemoveSpellCooldown(SPELL_WARRIOR_TAUNT, true); + } + + void Register() + { + OnEffectHitTarget += SpellEffectFn(spell_warr_vigilance_trigger_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_warr_vigilance_trigger_SpellScript(); + } +}; + void AddSC_warrior_spell_scripts() { new spell_warr_bloodthirst(); @@ -502,8 +639,12 @@ void AddSC_warrior_spell_scripts() new spell_warr_deep_wounds(); new spell_warr_execute(); new spell_warr_improved_spell_reflection(); + new spell_warr_intimidating_shout(); new spell_warr_last_stand(); new spell_warr_overpower(); + new spell_warr_rend(); + new spell_warr_shattering_throw(); new spell_warr_slam(); new spell_warr_vigilance(); + new spell_warr_vigilance_trigger(); } From d7ace2e5bf47860af2414bade612e54a948bdf2f Mon Sep 17 00:00:00 2001 From: Kinzcool Date: Sat, 19 Jan 2013 22:51:47 -0500 Subject: [PATCH 116/204] DB/Creature Text: Misc texts / type and sounds updates for Slad'ran & Moorabi --- .../world/2013_01_20_03_world_creature_text.sql | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 sql/updates/world/2013_01_20_03_world_creature_text.sql diff --git a/sql/updates/world/2013_01_20_03_world_creature_text.sql b/sql/updates/world/2013_01_20_03_world_creature_text.sql new file mode 100644 index 00000000000..1ea2c121e1e --- /dev/null +++ b/sql/updates/world/2013_01_20_03_world_creature_text.sql @@ -0,0 +1,15 @@ +-- Moorabi +UPDATE `creature_text` SET `sound`=14721, `text`='We fought back da Scourge. What chance joo thinkin'' JOO got?' WHERE `entry`=29305 AND `groupid`=0; +UPDATE `creature_text` SET `sound`=14722 WHERE `entry`=29305 AND `groupid`=3; +UPDATE `creature_text` SET `sound`=14723, `text`='Da ground gonna swallow you up!' WHERE `entry`=29305 AND `groupid`=4; +UPDATE `creature_text` SET `sound`=14726, `text`='Who gonna stop me? You?' WHERE `entry`=29305 AND `groupid`=1 AND `id`=0; +UPDATE `creature_text` SET `sound`=14727, `text`='Not so tough now!!' WHERE `entry`=29305 AND `groupid`=1 AND `id`=1; +UPDATE `creature_text` SET `sound`=14728, `text`='If our gods can die... den so can we....' WHERE `entry`=29305 AND `groupid`=2; + +-- Slad'ran +UPDATE `creature_text` SET `sound`=14444, `type`=14 WHERE `entry`=29304 AND `groupid`=3; +UPDATE `creature_text` SET `sound`=14445, `type`=14, `text`='A thousssand fangsss gonna rend your flesh!' WHERE `entry`=29304 AND `groupid`=4; +UPDATE `creature_text` SET `sound`=14446, `type`=14, `text`='You not breathin''? Good.' WHERE `entry`=29304 AND `groupid`=1 AND `id`=0; +UPDATE `creature_text` SET `sound`=14447, `type`=14 WHERE `entry`=29304 AND `groupid`=1 AND `id`=1; +UPDATE `creature_text` SET `sound`=14448, `type`=14, `text`='I eat you next, mon.' WHERE `entry`=29304 AND `groupid`=1 AND `id`=2; +UPDATE `creature_text` SET `sound`=14449, `type`=14, `text`='I sssee now... Ssscourge wasss not... our greatessst enemy....' WHERE `entry`=29304 AND `groupid`=2; From 2535aeacd7136460b165a94d0194f58d973e65df Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sun, 20 Jan 2013 09:56:34 -0330 Subject: [PATCH 117/204] DB/Creature_text: Add missing creature text and a few SAI fixes. --- .../world/2013_01_20_04_world_creature_text.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 sql/updates/world/2013_01_20_04_world_creature_text.sql diff --git a/sql/updates/world/2013_01_20_04_world_creature_text.sql b/sql/updates/world/2013_01_20_04_world_creature_text.sql new file mode 100644 index 00000000000..5c457530f92 --- /dev/null +++ b/sql/updates/world/2013_01_20_04_world_creature_text.sql @@ -0,0 +1,12 @@ +-- Text for Crushridge Warmonger +SET @ENTRY := 2287; +DELETE FROM `creature_text` WHERE `entry`=@ENTRY AND `groupid`=1; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@ENTRY,1,0,'%s goes into a frenzy!',16,0,100,0,0,0,'Crushridge Warmonger'); + +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid` = 12236 AND `id`=9; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid` = 2428 AND `id`=10; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid` = 2287 AND `id`=1; +UPDATE `smart_scripts` SET `event_flags`=1 WHERE `entryorguid` = 2287 AND `id`=3; +UPDATE `smart_scripts` SET `action_param1`=1 WHERE `entryorguid` = 2287 AND `id`=4; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid` = 8561 AND `id`=11; From 96580a484e244a19cc19b64b8cd296a7163e7da8 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Sun, 20 Jan 2013 15:21:39 +0100 Subject: [PATCH 118/204] DB/SAI: Fix some db errors --- sql/updates/world/2013_01_20_05_world_sai.sql | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 sql/updates/world/2013_01_20_05_world_sai.sql diff --git a/sql/updates/world/2013_01_20_05_world_sai.sql b/sql/updates/world/2013_01_20_05_world_sai.sql new file mode 100644 index 00000000000..9539bc546b1 --- /dev/null +++ b/sql/updates/world/2013_01_20_05_world_sai.sql @@ -0,0 +1,41 @@ +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=14390 AND `source_type`=0 AND `id`=9; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=2587 AND `source_type`=0 AND `id`=8; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=4064 AND `source_type`=0 AND `id`=9; +UPDATE `smart_scripts` SET `link`=3 WHERE `entryorguid`=29181 AND `source_type`=0 AND `id`=2; +UPDATE `smart_scripts` SET `link`=0,`event_type`=61,`event_param2`=0,`event_param3`=0 WHERE `entryorguid`=29181 AND `source_type`=0 AND `id`=3; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=29186 AND `source_type`=0 AND `id`=1; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=29199 AND `source_type`=0 AND `id`=1; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=29199 AND `source_type`=0 AND `id`=2; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=29204 AND `source_type`=0 AND `id`=1; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=29204 AND `source_type`=0 AND `id`=2; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=29200 AND `source_type`=0 AND `id`=1; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=29200 AND `source_type`=0 AND `id`=2; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=29176 AND `source_type`=0 AND `id`=1; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=500 AND `source_type`=0 AND `id`=10; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=4462 AND `source_type`=0 AND `id`=10; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=14467 AND `source_type`=0 AND `id`=1; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=2719 AND `source_type`=0 AND `id`=3; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=6004 AND `source_type`=0 AND `id`=9; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=23580 AND `source_type`=0 AND `id`=1; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=17270 AND `source_type`=0 AND `id`=13; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=29836 AND `source_type`=0 AND `id`=13; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=578 AND `source_type`=0 AND `id`=8; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=1397 AND `source_type`=0 AND `id`=14; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=1123 AND `source_type`=0 AND `id`=10; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=1123 AND `source_type`=0 AND `id`=16; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=3142 AND `source_type`=0 AND `id`=0; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=15641 AND `source_type`=0 AND `id`=9; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=424 AND `source_type`=0 AND `id`=9; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=19507 AND `source_type`=0 AND `id`=1; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=3643 AND `source_type`=1 AND `id`=0; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=1162 AND `source_type`=0 AND `id`=9; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=1162 AND `source_type`=0 AND `id`=10; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=3987 AND `source_type`=0 AND `id`=1; + +UPDATE `smart_scripts` SET `event_flags`=0 WHERE `entryorguid`=6066 AND `source_type`=0 AND `id`=0; +UPDATE `smart_scripts` SET `event_flags`=1 WHERE `entryorguid`=8477 AND `source_type`=0 AND `id`=0; +UPDATE `smart_scripts` SET `event_flags`=0 WHERE `entryorguid`=29206 AND `source_type`=0 AND `id`=0; +UPDATE `smart_scripts` SET `event_flags`=0 WHERE `entryorguid`=29182 AND `source_type`=0 AND `id` IN (0,1); +UPDATE `smart_scripts` SET `event_flags`=0 WHERE `entryorguid`=29177 AND `source_type`=0 AND `id`=0; +UPDATE `smart_scripts` SET `event_flags`=1 WHERE `entryorguid`=29684 AND `source_type`=0 AND `id` IN (0,1); +UPDATE `smart_scripts` SET `event_flags`=1 WHERE `entryorguid`=15631 AND `source_type`=0 AND `id`=0; From 2df2d6896b8cdbf6012eecddfd3483d4d5d354a3 Mon Sep 17 00:00:00 2001 From: Gacko Date: Sun, 20 Jan 2013 16:26:44 +0100 Subject: [PATCH 119/204] DB: Image of Commander Ameer Thanks @nelegalno --- .../world/2013_01_20_06_world_creature.sql | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 sql/updates/world/2013_01_20_06_world_creature.sql diff --git a/sql/updates/world/2013_01_20_06_world_creature.sql b/sql/updates/world/2013_01_20_06_world_creature.sql new file mode 100644 index 00000000000..c00ff11ea4a --- /dev/null +++ b/sql/updates/world/2013_01_20_06_world_creature.sql @@ -0,0 +1,24 @@ +-- Image of Commander Ameer (22919) +SET @GUID := 43492; + +UPDATE `creature_template` SET `npcflag`=`npcflag`|2,`unit_flags`=`unit_flags`&~33554432 WHERE `entry`=22919; + +DELETE FROM `creature` WHERE `guid`=@GUID; +INSERT INTO `creature` (`guid`,`id`,`map`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`curhealth`) VALUES +(@GUID,22919,530,3866.55,5978.68,291.792,4.10061,300,6986); + +DELETE FROM `creature_questrelation` WHERE `id`=22919; +INSERT INTO `creature_questrelation` (`id`,`quest`) VALUES +(22919,10981), -- Nexus-Prince Shaffar's Personal Chamber +(22919,10975), -- Purging the Chambers of Bash'ir +(22919,10977), -- Stasis Chambers of the Mana-Tombs +(22919,10976); -- The Mark of the Nexus-King + +DELETE FROM `creature_involvedrelation` WHERE `id`=22919; +INSERT INTO `creature_involvedrelation` (`id`,`quest`) VALUES +(22919,10981), -- Nexus-Prince Shaffar's Personal Chamber +(22919,10975), -- Purging the Chambers of Bash'ir +(22919,10974), -- Stasis Chambers of Bash'ir +(22919,10977), -- Stasis Chambers of the Mana-Tombs +(22919,10982), -- The Eye of Haramad +(22919,10976); -- The Mark of the Nexus-King From b9f901a645f6af17fc9316e68220cda76f83bea3 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Sun, 20 Jan 2013 17:34:15 +0100 Subject: [PATCH 120/204] DB/SAI: Fix more some db errors --- sql/updates/world/2013_01_20_07_world_sai.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sql/updates/world/2013_01_20_07_world_sai.sql diff --git a/sql/updates/world/2013_01_20_07_world_sai.sql b/sql/updates/world/2013_01_20_07_world_sai.sql new file mode 100644 index 00000000000..f8d001e73db --- /dev/null +++ b/sql/updates/world/2013_01_20_07_world_sai.sql @@ -0,0 +1,5 @@ +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=234 AND `source_type`=0 AND `id`=0; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=2554 AND `source_type`=0 AND `id`=9; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=12265 AND `source_type`=0 AND `id`=1; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=12265 AND `source_type`=0 AND `id`=3; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=16704 AND `source_type`=0 AND `id`=13; From bbcc78e2c187b99396f1311401a26b3e24d33332 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Sun, 20 Jan 2013 17:55:48 +0100 Subject: [PATCH 121/204] Core: Fix warnings --- src/server/game/Spells/Auras/SpellAuraEffects.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index e440b2a0fbd..d029d2884c9 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -449,8 +449,6 @@ int32 AuraEffect::CalculateAmount(Unit* caster) } } - float DoneActualBenefit = 0.0f; - // custom amount calculations go here switch (GetAuraType()) { From 1eab850cab9c71c0e8086af538aded557c526914 Mon Sep 17 00:00:00 2001 From: kaelima Date: Sun, 20 Jan 2013 19:44:38 +0100 Subject: [PATCH 122/204] Core/BG: Set bgteam in PLAYER_BYTES_3 >> 24. Creds to vlad852 closes #8969 --- src/server/game/Battlegrounds/Battleground.cpp | 13 +++---------- src/server/game/Entities/Player/Player.h | 6 +++++- src/server/game/Handlers/BattleGroundHandler.cpp | 6 ++++-- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index e717a10fcd7..264c2c333aa 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -523,7 +523,7 @@ inline void Battleground::_ProcessJoin(uint32 diff) WorldPacket status; BattlegroundQueueTypeId bgQueueTypeId = sBattlegroundMgr->BGQueueTypeId(m_TypeID, GetArenaType()); uint32 queueSlot = player->GetBattlegroundQueueIndex(bgQueueTypeId); - sBattlegroundMgr->BuildBattlegroundStatusPacket(&status, this, queueSlot, STATUS_IN_PROGRESS, 0, GetStartTime(), GetArenaType(), GetPlayerTeam(itr->first)); + sBattlegroundMgr->BuildBattlegroundStatusPacket(&status, this, queueSlot, STATUS_IN_PROGRESS, 0, GetStartTime(), GetArenaType(), player->GetBGTeam()); player->GetSession()->SendPacket(&status); player->RemoveAurasDueToSpell(SPELL_ARENA_PREPARATION); @@ -919,7 +919,7 @@ void Battleground::EndBattleground(uint32 winner) player->GetSession()->SendPacket(&pvpLogData); WorldPacket data; - sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, TIME_TO_AUTOREMOVE, GetStartTime(), GetArenaType(), GetPlayerTeam(player->GetGUID())); + sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, TIME_TO_AUTOREMOVE, GetStartTime(), GetArenaType(), player->GetBGTeam()); player->GetSession()->SendPacket(&data); player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND, 1); } @@ -1147,13 +1147,6 @@ void Battleground::AddPlayer(Player* player) sBattlegroundMgr->BuildPlayerJoinedBattlegroundPacket(&data, player); SendPacketToTeam(team, &data, player, false); - // BG Status packet - WorldPacket status; - BattlegroundQueueTypeId bgQueueTypeId = sBattlegroundMgr->BGQueueTypeId(m_TypeID, GetArenaType()); - uint32 queueSlot = player->GetBattlegroundQueueIndex(bgQueueTypeId); - sBattlegroundMgr->BuildBattlegroundStatusPacket(&status, this, queueSlot, STATUS_IN_PROGRESS, 0, GetStartTime(), GetArenaType(), team); - player->GetSession()->SendPacket(&status); - player->RemoveAurasByType(SPELL_AURA_MOUNTED); // add arena specific auras @@ -1846,7 +1839,7 @@ void Battleground::PlayerAddedToBGCheckIfBGIsRunning(Player* player) sBattlegroundMgr->BuildPvpLogDataPacket(&data, this); player->GetSession()->SendPacket(&data); - sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, GetEndTime(), GetStartTime(), GetArenaType(), GetPlayerTeam(player->GetGUID())); + sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, this, player->GetBattlegroundQueueIndex(bgQueueTypeId), STATUS_IN_PROGRESS, GetEndTime(), GetStartTime(), GetArenaType(), player->GetBGTeam()); player->GetSession()->SendPacket(&data); } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 52e81d6d0cd..6d9d63b8fda 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2219,7 +2219,11 @@ class Player : public Unit, public GridObject WorldLocation const& GetBattlegroundEntryPoint() const { return m_bgData.joinPos; } void SetBattlegroundEntryPoint(); - void SetBGTeam(uint32 team) { m_bgData.bgTeam = team; } + void SetBGTeam(uint32 team) + { + m_bgData.bgTeam = team; + SetByteValue(PLAYER_BYTES_3, 3, uint8(team == ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE)); + } uint32 GetBGTeam() const { return m_bgData.bgTeam ? m_bgData.bgTeam : GetTeam(); } void LeaveBattleground(bool teleportToEntryPoint = true); diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index 99056960893..e70f127d600 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -453,8 +453,9 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData) _player->CleanupAfterTaxiFlight(); } - sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_IN_PROGRESS, 0, bg->GetStartTime(), bg->GetArenaType(), bg->GetPlayerTeam(_player->GetGUID())); + sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, queueSlot, STATUS_IN_PROGRESS, 0, bg->GetStartTime(), bg->GetArenaType(), ginfo.Team); _player->GetSession()->SendPacket(&data); + // remove battleground queue status from BGmgr bgQueue.RemovePlayer(_player->GetGUID(), false); // this is still needed here if battleground "jumping" shouldn't add deserter debuff @@ -466,6 +467,7 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData) _player->SetBattlegroundId(bg->GetInstanceID(), bgTypeId); // set the destination team _player->SetBGTeam(ginfo.Team); + // bg->HandleBeforeTeleportToBattleground(_player); sBattlegroundMgr->SendToBattleground(_player, ginfo.IsInvitedToBGInstanceGUID, bgTypeId); // add only in HandleMoveWorldPortAck() @@ -541,7 +543,7 @@ void WorldSession::HandleBattlefieldStatusOpcode(WorldPacket & /*recvData*/) { // this line is checked, i only don't know if GetStartTime is changing itself after bg end! // send status in Battleground - sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, i, STATUS_IN_PROGRESS, bg->GetEndTime(), bg->GetStartTime(), arenaType, bg->GetPlayerTeam(_player->GetGUID())); + sBattlegroundMgr->BuildBattlegroundStatusPacket(&data, bg, i, STATUS_IN_PROGRESS, bg->GetEndTime(), bg->GetStartTime(), arenaType, _player->GetBGTeam()); SendPacket(&data); continue; } From 4372d24a7cc9dab325a9352bedf053a7580ac7b4 Mon Sep 17 00:00:00 2001 From: kaelima Date: Sun, 20 Jan 2013 20:06:30 +0100 Subject: [PATCH 123/204] Core/Movement: Prevent calling _updateSpeed for pets during a maptransfer Closes #8998 --- .../MovementGenerators/TargetedMovementGenerator.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 1958774380e..20c9c6cb608 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -273,15 +273,16 @@ void FollowMovementGenerator::_updateSpeed(Player &/*u*/) } template<> -void FollowMovementGenerator::_updateSpeed(Creature &u) +void FollowMovementGenerator::_updateSpeed(Creature& owner) { // pet only sync speed with owner - if (!((Creature&)u).isPet() || !i_target.isValid() || i_target->GetGUID() != u.GetOwnerGUID()) + /// Make sure we are not in the process of a map change + if (!owner.isPet() || !owner.IsInWorld() || !i_target.isValid() || i_target->GetGUID() != owner.GetOwnerGUID()) return; - u.UpdateSpeed(MOVE_RUN, true); - u.UpdateSpeed(MOVE_WALK, true); - u.UpdateSpeed(MOVE_SWIM, true); + owner.UpdateSpeed(MOVE_RUN, true); + owner.UpdateSpeed(MOVE_WALK, true); + owner.UpdateSpeed(MOVE_SWIM, true); } template<> From b153e68cfdd79adaeaff99cda1c0bfdbf22f2cd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Bla=C5=BEevi=C4=87?= Date: Sun, 20 Jan 2013 16:36:55 +0100 Subject: [PATCH 124/204] Too small buffer fail --- src/server/game/DataStores/DBCStores.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index 3fdff8e11d6..ad1c2d8e0b1 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -237,9 +237,10 @@ inline void LoadDBC(uint32& availableDbcLocales, StoreProblemList& errors, DBCSt // sort problematic dbc to (1) non compatible and (2) non-existed if (FILE* f = fopen(dbcFilename.c_str(), "rb")) { - char buf[100]; - snprintf(buf, 100, " exists, and has %u field(s) (expected " SIZEFMTD "). Extracted file might be from wrong client version or a database-update has been forgotten.", storage.GetFieldCount(), strlen(storage.GetFormat())); - errors.push_back(dbcFilename + buf); + std::ostringstream stream; + stream << dbcFilename << " exists, and has " << storage.GetFieldCount() << " field(s) (expected " << strlen(storage.GetFormat()) << "). Extracted file might be from wrong client version or a database-update has been forgotten."; + std::string buf = stream.str(); + errors.push_back(buf); fclose(f); } else From 4d7b2c4929c7efc5ce5c82f7a884d383094cc087 Mon Sep 17 00:00:00 2001 From: kaelima Date: Sun, 20 Jan 2013 21:30:11 +0100 Subject: [PATCH 125/204] Corrections to 1eab850cab9c71c0e8086af538aded557c526914 --- src/server/game/Entities/Player/Player.h | 2 +- .../Movement/MovementGenerators/TargetedMovementGenerator.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 6d9d63b8fda..a1e6591413f 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2222,7 +2222,7 @@ class Player : public Unit, public GridObject void SetBGTeam(uint32 team) { m_bgData.bgTeam = team; - SetByteValue(PLAYER_BYTES_3, 3, uint8(team == ALLIANCE ? TEAM_ALLIANCE : TEAM_HORDE)); + SetByteValue(PLAYER_BYTES_3, 3, uint8(team == ALLIANCE ? 1 : 0)); } uint32 GetBGTeam() const { return m_bgData.bgTeam ? m_bgData.bgTeam : GetTeam(); } diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 20c9c6cb608..7a1cf552731 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -276,7 +276,7 @@ template<> void FollowMovementGenerator::_updateSpeed(Creature& owner) { // pet only sync speed with owner - /// Make sure we are not in the process of a map change + /// Make sure we are not in the process of a map change (IsInWorld) if (!owner.isPet() || !owner.IsInWorld() || !i_target.isValid() || i_target->GetGUID() != owner.GetOwnerGUID()) return; From 52d0e9f055b3dccf2b8ddec2680321e197932b4a Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Sun, 20 Jan 2013 22:00:15 +0100 Subject: [PATCH 126/204] DB/SAI: Fix more some db errors no.2 --- sql/updates/world/2013_01_20_08_world_sai.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sql/updates/world/2013_01_20_08_world_sai.sql diff --git a/sql/updates/world/2013_01_20_08_world_sai.sql b/sql/updates/world/2013_01_20_08_world_sai.sql new file mode 100644 index 00000000000..411d69e08d2 --- /dev/null +++ b/sql/updates/world/2013_01_20_08_world_sai.sql @@ -0,0 +1,4 @@ +UPDATE `smart_scripts` SET `link`=0,`event_type`=61 WHERE `entryorguid`=13601 AND `source_type`=0 AND `id`=4; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=13601 AND `source_type`=0 AND `id`=10; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=17670 AND `source_type`=0 AND `id`=13; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=11878 AND `source_type`=0 AND `id`=13; From b7dbc8d746ed583ff5b4b529ce4441aa3c1149ba Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sun, 20 Jan 2013 18:04:06 -0330 Subject: [PATCH 127/204] Scripting/Zulgrub: Updated Boss Arlokk Script. --- .../world/2013_01_20_09_world_spell_dbc.sql | 18 + .../EasternKingdoms/ZulGurub/boss_arlokk.cpp | 400 ++++++++++++++---- .../ZulGurub/instance_zulgurub.cpp | 77 +++- .../EasternKingdoms/ZulGurub/zulgurub.h | 22 +- 4 files changed, 398 insertions(+), 119 deletions(-) create mode 100644 sql/updates/world/2013_01_20_09_world_spell_dbc.sql diff --git a/sql/updates/world/2013_01_20_09_world_spell_dbc.sql b/sql/updates/world/2013_01_20_09_world_spell_dbc.sql new file mode 100644 index 00000000000..bdd57e940b5 --- /dev/null +++ b/sql/updates/world/2013_01_20_09_world_spell_dbc.sql @@ -0,0 +1,18 @@ +-- Add missing spells to spell_dbc +DELETE FROM `spell_dbc` WHERE `Id` IN (24211,24246,24235,7939); +INSERT INTO `spell_dbc` (`Id`,`SchoolMask`,`Dispel`,`Mechanic`,`Attributes`,`AttributesEx`,`AttributesEx2`,`AttributesEx3`,`AttributesEx4`,`Stances`,`StancesNot`,`Targets`,`CastingTimeIndex`,`AuraInterruptFlags`,`ProcFlags`,`ProcChance`,`ProcCharges`,`MaxLevel`,`BaseLevel`,`SpellLevel`,`DurationIndex`,`RangeIndex`,`StackAmount`,`EquippedItemClass`,`EquippedItemSubClassMask`,`EquippedItemInventoryTypeMask`,`Effect1`,`Effect2`,`Effect3`,`EffectDieSides1`,`EffectDieSides2`,`EffectDieSides3`,`EffectRealPointsPerLevel1`,`EffectRealPointsPerLevel2`,`EffectRealPointsPerLevel3`,`EffectBasePoints1`,`EffectBasePoints2`,`EffectBasePoints3`,`EffectMechanic1`,`EffectMechanic2`,`EffectMechanic3`,`EffectImplicitTargetA1`,`EffectImplicitTargetA2`,`EffectImplicitTargetA3`,`EffectImplicitTargetB1`,`EffectImplicitTargetB2`,`EffectImplicitTargetB3`,`EffectRadiusIndex1`,`EffectRadiusIndex2`,`EffectRadiusIndex3`,`EffectApplyAuraName1`,`EffectApplyAuraName2`,`EffectApplyAuraName3`,`EffectAmplitude1`,`EffectAmplitude2`,`EffectAmplitude3`,`EffectMultipleValue1`,`EffectMultipleValue2`,`EffectMultipleValue3`,`EffectMiscValue1`,`EffectMiscValue2`,`EffectMiscValue3`,`EffectTriggerSpell1`,`EffectTriggerSpell2`,`EffectTriggerSpell3`,`Comment`,`MaxTargetLevel`,`SpellFamilyName`,`SpellFamilyFlags1`,`SpellFamilyFlags2`,`MaxAffectedTargets`,`DmgClass`,`PreventionType`,`DmgMultiplier1`,`DmgMultiplier2`,`DmgMultiplier3`,`EffectMiscValueB1`) VALUES +(24211,0,0,0,256,0,4,0,0,0,0,0,1,0,0,101,0,0,0,0,0,0,0,-1,0,0,63,0,0,1,0,0,0,0,0,4999,0,0,0,0,0,22,0,0,0,0,0,7,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'Mark of Arlokk',0,0,0,0,0,0,0,1,0,0,0), +(24246,0,0,0,256,0,0,0,0,0,0,0,1,0,0,101,0,0,0,0,6,0,0,-1,0,0,28,0,0,1,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,7,0,0,0,0,0,0,0,0,15101,0,0,0,0,0,'Summon Zulian Prowler',0,0,0,0,0,0,0,1,0,0,64), +(24235,0,0,0,272,268435456,0,0,0,0,0,0,1,0,0,101,0,0,0,0,1,0,0,-1,0,0,6,0,0,0,0,0,0,0,0,9999,0,0,0,0,0,1,0,0,0,0,0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'Super Invis',0,0,0,0,0,0,0,1,1,1,0), +(7939,0,5,0,402915728,268435456,0,0,0,0,0,0,1,6147,0,101,0,0,1,1,21,1,0,-1,-1,0,6,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 'Sneak Rank 1',0,0,0,0,0,0,0,-1,1,1,0); + +-- Add script name to Zulian Prowler +UPDATE `creature_template` SET `AIName` = '', `ScriptName`='npc_zulian_prowler' WHERE `entry`=15101; + +-- Remove SmartAI +DELETE FROM smart_scripts WHERE entryorguid = 15101; + +-- Add condition for Mark of Arlokk +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=24211; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13,1,24211,0,0,0,31,3,15101,0,0,0,0, '', 'Mark of Arlokk - Targets Zulian Prowler'); diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index 51aab7c20d0..9d6aaf71665 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2013 TrinityCore - * Copyright (C) 2006-2009 ScriptDev2 * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -17,10 +16,12 @@ */ /* ScriptData -SDName: Boss_Arlokk -SD%Complete: 95 -SDComment: Wrong cleave and red aura is missing. -SDCategory: Zul'Gurub +TCName: Boss_Arlokk +TC%Complete: 95 +TCComment: Wrong cleave and red aura is missing not yet added. +TCComment: Prowlers moving through wall hopefully mmaps will fix. +TCComment: Can't test LOS until mmaps. +TCCategory: Zul'Gurub EndScriptData */ #include "ScriptMgr.h" @@ -30,47 +31,58 @@ EndScriptData */ enum Says { SAY_AGGRO = 0, - SAY_FEAST_PANTHER = 1, + SAY_FEAST_PROWLER = 1, SAY_DEATH = 2 }; enum Spells { - SPELL_SHADOW_WORD_PAIN = 23952, - SPELL_GOUGE = 24698, - SPELL_MARK = 24210, - SPELL_CLEAVE = 26350, // Perhaps not right. Not a red aura... - SPELL_PANTHER_TRANSFORM = 24190 + SPELL_SHADOW_WORD_PAIN = 24212, // corrected + SPELL_GOUGE = 12540, // corrected + SPELL_MARK_OF_ARLOKK = 24210, // This is correct triggers 24211 Added to Spell_dbc + SPELL_RAVAGE = 24213, // corrected + SPELL_CLEAVE = 25174, // Searching for right spell + SPELL_PANTHER_TRANSFORM = 24190, // Transform to panther now used + SPELL_SUMMON_PROWLER = 24246, // Added to Spell_dbc + SPELL_VANISH_VISUAL = 24222, // Added + SPELL_VANISH = 24223, // Added + SPELL_SUPER_INVIS = 24235 // Added }; enum Events { - EVENT_SHADOW_WORD_PAIN = 0, - EVENT_GOUGE = 1, - EVENT_MARK = 2, - EVENT_CLEAVE = 3, - EVENT_VANISH = 4, - EVENT_VISIBLE = 5, - EVENT_SUMMON = 6 + EVENT_SHADOW_WORD_PAIN = 1, + EVENT_GOUGE = 2, + EVENT_MARK_OF_ARLOKK = 3, + EVENT_RAVAGE = 4, + EVENT_TRANSFORM = 5, + EVENT_VANISH = 6, + EVENT_VANISH_2 = 7, + EVENT_TRANSFORM_BACK = 8, + EVENT_VISIBLE = 9, + EVENT_SUMMON_PROWLERS = 10 }; enum Phases { - PHASE_ONE = 1, - PHASE_TWO = 2 + PHASE_ALL = 0, + PHASE_ONE = 1, + PHASE_TWO = 2 }; -enum ModelIds +enum Weapon { - MODEL_ID_NORMAL = 15218, - MODEL_ID_PANTHER = 15215, - MODEL_ID_BLANK = 11686 + WEAPON_DAGGER = 10616 }; -Position const PosSummonProwlers[2] = +enum Misc { - { -11532.7998f, -1649.6734f, 41.4800f, 0.0f }, - { -11532.9970f, -1606.4840f, 41.2979f, 0.0f } + MAX_PROWLERS_PER_SIDE = 15 +}; + +Position const PosMoveOnSpawn[1] = +{ + { -11561.9f, -1627.868f, 41.29941f } }; class boss_arlokk : public CreatureScript @@ -83,52 +95,88 @@ class boss_arlokk : public CreatureScript void Reset() { - summonCount = 0; - markedTargetGUID = 0; - me->SetDisplayId(MODEL_ID_NORMAL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + summonCountA = 0; + summonCountB = 0; + me->RemoveAllAuras(); + me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_DAGGER)); + me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, uint32(WEAPON_DAGGER)); + if (instance) + { + if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_FORCEFIELD))) + gate->SetGoState(GO_STATE_READY); + me->SetWalk(false); + me->GetMotionMaster()->MovePoint(0, PosMoveOnSpawn[0].m_positionX,PosMoveOnSpawn[0].m_positionY,PosMoveOnSpawn[0].m_positionZ); + } } void JustDied(Unit* /*killer*/) { - _JustDied(); Talk(SAY_DEATH); - me->SetDisplayId(MODEL_ID_NORMAL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveAllAuras(); + if (instance) + { + if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_FORCEFIELD))) + gate->SetGoState(GO_STATE_ACTIVE); + instance->SetBossState(DATA_ARLOKK, DONE); + } } void EnterCombat(Unit* /*who*/) { _EnterCombat(); - events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 8000, 0, PHASE_ONE); - events.ScheduleEvent(EVENT_MARK, 35000, 0, PHASE_ONE); - events.ScheduleEvent(EVENT_SUMMON, 5000); - events.ScheduleEvent(EVENT_VANISH, 60000); + events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(7000, 9000), 0, PHASE_ONE); + events.ScheduleEvent(EVENT_GOUGE, urand(12000, 15000), 0, PHASE_ONE); + if (instance) + events.ScheduleEvent(EVENT_SUMMON_PROWLERS, 6000, 0, PHASE_ALL); + events.ScheduleEvent(EVENT_MARK_OF_ARLOKK, urand(9000, 11000), 0, PHASE_ALL); + events.ScheduleEvent(EVENT_TRANSFORM, urand(15000, 20000), 0, PHASE_ONE); Talk(SAY_AGGRO); + + // Sets up list of Panther spawners to cast on + std::list triggerList; + GetCreatureListWithEntryInGrid(triggerList, me, NPC_PANTHER_TRIGGER, 100.0f); + if (!triggerList.empty()) + { + uint8 sideA = 0; + uint8 sideB = 0; + for (std::list::const_iterator itr = triggerList.begin(); itr != triggerList.end(); ++itr) + { + if (Creature* trigger = *itr) + { + if (trigger->GetPositionY() < -1625.0f) + { + triggersSideAGUID[sideA] = trigger->GetGUID(); + ++sideA; + } + else + { + triggersSideBGUID[sideB] = trigger->GetGUID(); + ++sideB; + } + } + } + } } - void JustReachedHome() + void EnterEvadeMode() { - instance->SetBossState(DATA_ARLOKK, NOT_STARTED); - me->DespawnOrUnsummon(); + if (instance) + { + if (GameObject* object = me->GetMap()->GetGameObject(instance->GetData64(GO_FORCEFIELD))) + object->SetGoState(GO_STATE_ACTIVE); + if (GameObject* object = me->GetMap()->GetGameObject(instance->GetData64(GO_GONG_OF_BETHEKK))) + object->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + instance->SetBossState(DATA_ARLOKK, NOT_STARTED); + } + me->DespawnOrUnsummon(4000); } - void DoSummonPhanters() + void SetData(uint32 uiId, uint32 uiValue) { - if (summonCount > 30) - return; - - if (markedTargetGUID) - Talk(SAY_FEAST_PANTHER, markedTargetGUID); - me->SummonCreature(NPC_ZULIAN_PROWLER, PosSummonProwlers[0], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - me->SummonCreature(NPC_ZULIAN_PROWLER, PosSummonProwlers[1], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000); - } - - void JustSummoned(Creature* summoned) - { - if (Unit* markedTarget = Unit::GetUnit(*me, markedTargetGUID)) - summoned->AI()->AttackStart(markedTarget); - ++summonCount; + if (uiId == 1) + --summonCountA; + if (uiId == 2) + --summonCountB; } void UpdateAI(uint32 const diff) @@ -147,47 +195,99 @@ class boss_arlokk : public CreatureScript { case EVENT_SHADOW_WORD_PAIN: DoCastVictim(SPELL_SHADOW_WORD_PAIN, true); - events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 15000, 0, PHASE_ONE); - break; - case EVENT_MARK: - if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true)) - DoCast(target, SPELL_MARK); - events.ScheduleEvent(EVENT_MARK, 15000, 0, PHASE_ONE); - break; - case EVENT_CLEAVE: - DoCastVictim(SPELL_SHADOW_WORD_PAIN, true); - events.ScheduleEvent(EVENT_CLEAVE, 16000, 0, PHASE_TWO); + events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(5000, 7000), 0, PHASE_ONE); break; case EVENT_GOUGE: - DoCastVictim(SPELL_SHADOW_WORD_PAIN, true); - events.ScheduleEvent(EVENT_GOUGE, urand(17000, 27000), 0, PHASE_TWO); + DoCastVictim(SPELL_GOUGE, true); break; - case EVENT_SUMMON: - DoSummonPhanters(); - events.ScheduleEvent(EVENT_SUMMON, 5000); + case EVENT_SUMMON_PROWLERS: + if (summonCountA < MAX_PROWLERS_PER_SIDE) + if (Unit* trigger = me->GetUnit(*me, triggersSideAGUID[urand(0, 4)])) + { + trigger->CastSpell(trigger, SPELL_SUMMON_PROWLER); + ++summonCountA; + } + if (summonCountB < MAX_PROWLERS_PER_SIDE) + if (Unit* trigger = me->GetUnit(*me, triggersSideBGUID[urand(0, 4)])) + { + trigger->CastSpell(trigger, SPELL_SUMMON_PROWLER); + ++summonCountB; + } + events.ScheduleEvent(EVENT_SUMMON_PROWLERS, 6000, 0, PHASE_ALL); break; - case EVENT_VANISH: - me->SetDisplayId(MODEL_ID_BLANK); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->AttackStop(); - DoResetThreat(); - events.ScheduleEvent(EVENT_VISIBLE, 6000); - break; - case EVENT_VISIBLE: + case EVENT_MARK_OF_ARLOKK: { - me->SetDisplayId(MODEL_ID_PANTHER); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, urand(1,3), 0.0f, false, -SPELL_MARK_OF_ARLOKK); + if (!target) + target = me->getVictim(); + if (target) + { + DoCast(target, SPELL_MARK_OF_ARLOKK, true); + Talk(SAY_FEAST_PROWLER, target->GetGUID()); + } + break; + events.ScheduleEvent(EVENT_MARK_OF_ARLOKK, urand(120000, 130000)); + } + case EVENT_TRANSFORM: + { + DoCast(me, SPELL_PANTHER_TRANSFORM); + me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(EQUIP_UNEQUIP)); + me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, uint32(EQUIP_UNEQUIP)); const CreatureTemplate* cinfo = me->GetCreatureTemplate(); me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35))); me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35))); me->UpdateDamagePhysical(BASE_ATTACK); + me->AttackStop(); + DoResetThreat(); + me->SetReactState(REACT_PASSIVE); + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); + DoCast(me, SPELL_VANISH_VISUAL); + DoCast(me, SPELL_VANISH); + events.ScheduleEvent(EVENT_VANISH, 1000, 0, PHASE_ONE); + break; + } + case EVENT_VANISH: + DoCast(me, SPELL_SUPER_INVIS); + me->SetWalk(false); + if (instance) + me->GetMotionMaster()->MovePoint(0, frand(-11551.0f, -11508.0f), frand(-1638.0f, -1617.0f), me->GetPositionZ()); + events.ScheduleEvent(EVENT_VANISH_2, 9000, 0, PHASE_ONE); + break; + case EVENT_VANISH_2: + DoCast(me, SPELL_VANISH); + DoCast(me, SPELL_SUPER_INVIS); + events.ScheduleEvent(EVENT_VISIBLE, urand(7000, 10000), 0, PHASE_ONE); + break; + case EVENT_VISIBLE: + me->SetReactState(REACT_AGGRESSIVE); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) AttackStart(target); - events.ScheduleEvent(EVENT_VANISH, 39000); - events.ScheduleEvent(EVENT_CLEAVE, 0, PHASE_TWO); - events.ScheduleEvent(EVENT_GOUGE, 14000, 0, PHASE_TWO); + me->RemoveAura(SPELL_SUPER_INVIS); + me->RemoveAura(SPELL_VANISH); + events.ScheduleEvent(EVENT_RAVAGE, urand(10000, 14000), 0, PHASE_TWO); + events.ScheduleEvent(EVENT_TRANSFORM_BACK, urand(15000, 18000), 0, PHASE_TWO); events.SetPhase(PHASE_TWO); break; + case EVENT_RAVAGE: + DoCastVictim(SPELL_RAVAGE, true); + events.ScheduleEvent(EVENT_RAVAGE, urand(10000, 14000), 0, PHASE_TWO); + break; + case EVENT_TRANSFORM_BACK: + { + me->RemoveAura(SPELL_PANTHER_TRANSFORM); + DoCast(me, SPELL_VANISH_VISUAL); + me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_DAGGER)); + me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, uint32(WEAPON_DAGGER)); + const CreatureTemplate* cinfo = me->GetCreatureTemplate(); + me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg)); + me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg)); + me->UpdateDamagePhysical(BASE_ATTACK); + events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(4000, 7000), 0, PHASE_ONE); + events.ScheduleEvent(EVENT_GOUGE, urand(12000, 15000), 0, PHASE_ONE); + events.ScheduleEvent(EVENT_TRANSFORM, urand(16000, 20000), 0, PHASE_ONE); + events.SetPhase(PHASE_ONE); + break; } default: break; @@ -198,8 +298,10 @@ class boss_arlokk : public CreatureScript } private: - uint32 summonCount; - uint64 markedTargetGUID; + uint8 summonCountA; + uint8 summonCountB; + uint64 triggersSideAGUID[5]; + uint64 triggersSideBGUID[5]; }; CreatureAI* GetAI(Creature* creature) const @@ -208,6 +310,123 @@ class boss_arlokk : public CreatureScript } }; +/*###### +## npc_zulian_prowler +######*/ + +enum ZulianProwlerSpells +{ + SPELL_SNEAK_RANK_1_1 = 22766, + SPELL_SNEAK_RANK_1_2 = 7939, + SPELL_MARK_OF_ARLOKK_TRIGGER = 24211 +}; + +enum ZulianProwlerEvents +{ + EVENT_ATTACK = 1 +}; + +Position const PosProwlerCenter[1] = +{ + { -11556.7f, -1631.344f, 41.2994f } +}; + +class npc_zulian_prowler : public CreatureScript +{ + public: npc_zulian_prowler() : CreatureScript("npc_zulian_prowler") {} + + struct npc_zulian_prowlerAI : public ScriptedAI + { + npc_zulian_prowlerAI(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { } + + void Reset() + { + if (me->GetPositionY() < -1625.0f) + sideData = 1; + else + sideData = 2; + + DoCast(me, SPELL_SNEAK_RANK_1_1); + DoCast(me, SPELL_SNEAK_RANK_1_2); + // me->SetReactState(REACT_PASSIVE); + + if (instance) + if (Unit* arlokk = me->GetUnit(*me, instance->GetData64(NPC_ARLOKK))) + me->GetMotionMaster()->MovePoint(0, arlokk->GetPositionX(), arlokk->GetPositionY(), arlokk->GetPositionZ()); + events.ScheduleEvent(EVENT_ATTACK, 6000); + } + + void EnterCombat(Unit* /*who*/) + { + me->GetMotionMaster()->Clear(false); + me->RemoveAura(SPELL_SNEAK_RANK_1_1); + me->RemoveAura(SPELL_SNEAK_RANK_1_2); + } + + void SpellHit(Unit* caster, SpellInfo const* spell) + { + if (spell->Id == SPELL_MARK_OF_ARLOKK_TRIGGER) // Should only hit if line of sight + { + me->Attack(caster, true); + } + } + + void JustDied(Unit* /*killer*/) + { + + if (instance) + if (Unit* arlokk = me->GetUnit(*me, instance->GetData64(NPC_ARLOKK))) + if (arlokk->isAlive()) + arlokk->GetAI()->SetData(sideData, 0); + me->DespawnOrUnsummon(4000); + } + + void UpdateAI(const uint32 diff) + { + + if (UpdateVictim()) + { + DoMeleeAttackIfReady(); + return; + } + + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) + { + case EVENT_ATTACK: + if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0.0f, 100, false)) + me->Attack(target, true); + break; + default: + break; + } + } + } + + private: + int32 sideData; + EventMap events; + InstanceScript* instance; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return GetZulGurubAI(creature); + } +}; + +/*###### +## go_gong_of_bethekk +######*/ + +Position const PosSummonArlokk[1] = +{ + { -11507.22f, -1628.062f, 41.38264f, 3.159046f } +}; + class go_gong_of_bethekk : public GameObjectScript { public: go_gong_of_bethekk() : GameObjectScript("go_gong_of_bethekk") {} @@ -216,12 +435,11 @@ class go_gong_of_bethekk : public GameObjectScript { if (InstanceScript* instance = go->GetInstanceScript()) { - if (instance->GetBossState(DATA_ARLOKK) == DONE || instance->GetBossState(DATA_ARLOKK) == IN_PROGRESS) - return true; + go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->SendCustomAnim(0); + go->SummonCreature(NPC_ARLOKK, PosSummonArlokk[0], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 600000); instance->SetBossState(DATA_ARLOKK, IN_PROGRESS); - return true; } - return true; } }; @@ -229,6 +447,6 @@ class go_gong_of_bethekk : public GameObjectScript void AddSC_boss_arlokk() { new boss_arlokk(); + new npc_zulian_prowler(); new go_gong_of_bethekk(); } - diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp index 19a2ba39578..d922e2db3f3 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp @@ -40,11 +40,14 @@ class instance_zulgurub : public InstanceMapScript void Initialize() { - ZealotLorkhanGUID = 0; - ZealotZathGUID = 0; - HighPriestTekalGUID = 0; - JindoTheHexxerGUID = 0; - VilebranchSpeakerGUID = 0; + zealotLorkhanGUID = 0; + zealotZathGUID = 0; + highPriestTekalGUID = 0; + jindoTheHexxerGUID = 0; + vilebranchSpeakerGUID = 0; + arlokkGUID = 0; + go_ForcefieldGUID = 0; + go_GongOfBethekkGUID = 0; } bool IsEncounterInProgress() const @@ -58,23 +61,41 @@ class instance_zulgurub : public InstanceMapScript switch (creature->GetEntry()) { case NPC_ZEALOT_LORKHAN: - ZealotLorkhanGUID = creature->GetGUID(); + zealotLorkhanGUID = creature->GetGUID(); break; case NPC_ZEALOT_ZATH: - ZealotZathGUID = creature->GetGUID(); + zealotZathGUID = creature->GetGUID(); break; case NPC_HIGH_PRIEST_THEKAL: - HighPriestTekalGUID = creature->GetGUID(); + highPriestTekalGUID = creature->GetGUID(); break; case NPC_JINDO_THE_HEXXER: - JindoTheHexxerGUID = creature->GetGUID(); + jindoTheHexxerGUID = creature->GetGUID(); break; case NPC_VILEBRANCH_SPEAKER: - VilebranchSpeakerGUID = creature->GetGUID(); + vilebranchSpeakerGUID = creature->GetGUID(); break; - case NPC_MANDOKIR: - if (GetBossState(DATA_MANDOKIR) == DONE) - creature->DespawnOrUnsummon(); + case NPC_ARLOKK: + arlokkGUID = creature->GetGUID(); + break; + } + } + + void OnGameObjectCreate(GameObject* go) + { + switch (go->GetEntry()) + { + case GO_FORCEFIELD: + go_ForcefieldGUID = go->GetGUID(); + break; + case GO_GONG_OF_BETHEKK: + go_GongOfBethekkGUID = go->GetGUID(); + if (GetBossState(DATA_ARLOKK) == DONE) + go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + else + go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + break; + default: break; } } @@ -84,16 +105,25 @@ class instance_zulgurub : public InstanceMapScript switch (uiData) { case DATA_LORKHAN: - return ZealotLorkhanGUID; + return zealotLorkhanGUID; break; case DATA_ZATH: - return ZealotZathGUID; + return zealotZathGUID; break; case DATA_THEKAL: - return HighPriestTekalGUID; + return highPriestTekalGUID; break; case DATA_JINDO: - return JindoTheHexxerGUID; + return jindoTheHexxerGUID; + break; + case NPC_ARLOKK: + return arlokkGUID; + break; + case GO_FORCEFIELD: + return go_ForcefieldGUID; + break; + case GO_GONG_OF_BETHEKK: + return go_GongOfBethekkGUID; break; } return 0; @@ -145,11 +175,14 @@ class instance_zulgurub : public InstanceMapScript //If all High Priest bosses were killed. Lorkhan, Zath and Ohgan are added too. //Storing Lorkhan, Zath and Thekal because we need to cast on them later. Jindo is needed for healfunction too. - uint64 ZealotLorkhanGUID; - uint64 ZealotZathGUID; - uint64 HighPriestTekalGUID; - uint64 JindoTheHexxerGUID; - uint64 VilebranchSpeakerGUID; + uint64 zealotLorkhanGUID; + uint64 zealotZathGUID; + uint64 highPriestTekalGUID; + uint64 jindoTheHexxerGUID; + uint64 vilebranchSpeakerGUID; + uint64 arlokkGUID; + uint64 go_ForcefieldGUID; + uint64 go_GongOfBethekkGUID; }; InstanceScript* GetInstanceScript(InstanceMap* map) const diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h index 34680447cd7..77767153a96 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h +++ b/src/server/scripts/EasternKingdoms/ZulGurub/zulgurub.h @@ -36,23 +36,33 @@ enum DataTypes DATA_EDGE_OF_MADNESS = 9, // Optional Event Edge of Madness - one of: Gri'lek, Renataki, Hazza'rah, or Wushoolay DATA_LORKHAN = 10, // Zealot Lor'Khan add to High priest Thekal! DATA_ZATH = 11, // Zealot Zath add to High priest Thekal! - DATA_OHGAN = 12 // Bloodlord Mandokir's raptor mount + DATA_OHGAN = 12, // Bloodlord Mandokir's raptor mount + TYPE_EDGE_OF_MADNESS = 13 // Boss storage }; enum CreatureIds { + NPC_ARLOKK = 14515, // Arlokk Event + NPC_PANTHER_TRIGGER = 15091, // Arlokk Event + NPC_ZULIAN_PROWLER = 15101, // Arlokk Event NPC_ZEALOT_LORKHAN = 11347, NPC_ZEALOT_ZATH = 11348, NPC_HIGH_PRIEST_THEKAL = 14509, NPC_JINDO_THE_HEXXER = 11380, NPC_NIGHTMARE_ILLUSION = 15163, - NPC_ZULIAN_PROWLER = 15101, - NPC_VILEBRANCH_SPEAKER = 11391, NPC_SHADE_OF_JINDO = 14986, NPC_SACRIFICED_TROLL = 14826, - NPC_OHGAN = 14988, - NPC_CHAINED_SPIRT = 15117, - NPC_MANDOKIR = 11382 + NPC_MANDOKIR = 11382, // Mandokir Event + NPC_OHGAN = 14988, // Mandokir Event + NPC_VILEBRANCH_SPEAKER = 11391, // Mandokir Event + NPC_CHAINED_SPIRT = 15117 // Mandokir Event + +}; + +enum GameobjectIds +{ + GO_FORCEFIELD = 180497, // Arlokk Event + GO_GONG_OF_BETHEKK = 180526 // Arlokk Event }; template From 33b768569635fc4a2477ed63e6a1673f5ada6660 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Sun, 20 Jan 2013 18:20:46 -0330 Subject: [PATCH 128/204] Scripting/ZulGrub: Fix last commit --- .../EasternKingdoms/ZulGurub/boss_arlokk.cpp | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index 9d6aaf71665..3682b265cbc 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -26,6 +26,7 @@ EndScriptData */ #include "ScriptMgr.h" #include "ScriptedCreature.h" +#include "SpellInfo.h" #include "zulgurub.h" enum Says @@ -37,16 +38,16 @@ enum Says enum Spells { - SPELL_SHADOW_WORD_PAIN = 24212, // corrected - SPELL_GOUGE = 12540, // corrected - SPELL_MARK_OF_ARLOKK = 24210, // This is correct triggers 24211 Added to Spell_dbc - SPELL_RAVAGE = 24213, // corrected + SPELL_SHADOW_WORD_PAIN = 24212, // Corrected + SPELL_GOUGE = 12540, // Corrected + SPELL_MARK_OF_ARLOKK = 24210, // triggered spell 24211 Added to spell_dbc + SPELL_RAVAGE = 24213, // Corrected SPELL_CLEAVE = 25174, // Searching for right spell SPELL_PANTHER_TRANSFORM = 24190, // Transform to panther now used SPELL_SUMMON_PROWLER = 24246, // Added to Spell_dbc SPELL_VANISH_VISUAL = 24222, // Added SPELL_VANISH = 24223, // Added - SPELL_SUPER_INVIS = 24235 // Added + SPELL_SUPER_INVIS = 24235 // Added to Spell_dbc }; enum Events @@ -105,7 +106,7 @@ class boss_arlokk : public CreatureScript if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_FORCEFIELD))) gate->SetGoState(GO_STATE_READY); me->SetWalk(false); - me->GetMotionMaster()->MovePoint(0, PosMoveOnSpawn[0].m_positionX,PosMoveOnSpawn[0].m_positionY,PosMoveOnSpawn[0].m_positionZ); + me->GetMotionMaster()->MovePoint(0, PosMoveOnSpawn[0]); } } @@ -171,7 +172,7 @@ class boss_arlokk : public CreatureScript me->DespawnOrUnsummon(4000); } - void SetData(uint32 uiId, uint32 uiValue) + void SetData(uint32 uiId, uint32 /*uiValue*/) { if (uiId == 1) --summonCountA; @@ -317,8 +318,8 @@ class boss_arlokk : public CreatureScript enum ZulianProwlerSpells { SPELL_SNEAK_RANK_1_1 = 22766, - SPELL_SNEAK_RANK_1_2 = 7939, - SPELL_MARK_OF_ARLOKK_TRIGGER = 24211 + SPELL_SNEAK_RANK_1_2 = 7939, // Added to Spell_dbc + SPELL_MARK_OF_ARLOKK_TRIGGER = 24211 // Added to Spell_dbc }; enum ZulianProwlerEvents @@ -348,7 +349,6 @@ class npc_zulian_prowler : public CreatureScript DoCast(me, SPELL_SNEAK_RANK_1_1); DoCast(me, SPELL_SNEAK_RANK_1_2); - // me->SetReactState(REACT_PASSIVE); if (instance) if (Unit* arlokk = me->GetUnit(*me, instance->GetData64(NPC_ARLOKK))) @@ -438,7 +438,6 @@ class go_gong_of_bethekk : public GameObjectScript go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); go->SendCustomAnim(0); go->SummonCreature(NPC_ARLOKK, PosSummonArlokk[0], TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 600000); - instance->SetBossState(DATA_ARLOKK, IN_PROGRESS); } return true; } From dd7391660b9c897fdb4584ab03227bde2478ecee Mon Sep 17 00:00:00 2001 From: jackpoz Date: Mon, 21 Jan 2013 01:55:56 +0000 Subject: [PATCH 129/204] Core/Collision: Fix BIH::intersectRay crash Assure that BIHWrap::remove(const T& obj) actually removes every reference of obj from BIHWrap. Also add sanity checks to MDLCallback () functions to avoid array overruns. Closes #5218 Signed-off-by: Nay --- .../BoundingIntervalHierarchyWrapper.h | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/server/collision/BoundingIntervalHierarchyWrapper.h b/src/server/collision/BoundingIntervalHierarchyWrapper.h index 8a99078caab..315f3004306 100644 --- a/src/server/collision/BoundingIntervalHierarchyWrapper.h +++ b/src/server/collision/BoundingIntervalHierarchyWrapper.h @@ -33,11 +33,14 @@ class BIHWrap { const T* const* objects; RayCallback& _callback; + uint32 objects_size; - MDLCallback(RayCallback& callback, const T* const* objects_array ) : objects(objects_array), _callback(callback) {} + MDLCallback(RayCallback& callback, const T* const* objects_array, uint32 objects_size ) : objects(objects_array), _callback(callback), objects_size(objects_size) {} bool operator() (const Ray& ray, uint32 Idx, float& MaxDist, bool /*stopAtFirst*/) { + if (Idx >= objects_size) + return false; if (const T* obj = objects[Idx]) return _callback(ray, *obj, MaxDist/*, stopAtFirst*/); return false; @@ -45,6 +48,8 @@ class BIHWrap void operator() (const Vector3& p, uint32 Idx) { + if (Idx >= objects_size) + return false; if (const T* obj = objects[Idx]) _callback(p, *obj); } @@ -87,21 +92,24 @@ public: m_objects.fastClear(); m_obj2Idx.getKeys(m_objects); m_objects_to_push.getMembers(m_objects); + //assert that m_obj2Idx has all the keys m_tree.build(m_objects, BoundsFunc::getBounds2); } template - void intersectRay(const Ray& ray, RayCallback& intersectCallback, float& maxDist) const + void intersectRay(const Ray& ray, RayCallback& intersectCallback, float& maxDist) { - MDLCallback temp_cb(intersectCallback, m_objects.getCArray()); + balance(); + MDLCallback temp_cb(intersectCallback, m_objects.getCArray(), m_objects.size()); m_tree.intersectRay(ray, temp_cb, maxDist, true); } template - void intersectPoint(const Vector3& point, IsectCallback& intersectCallback) const + void intersectPoint(const Vector3& point, IsectCallback& intersectCallback) { - MDLCallback callback(intersectCallback, m_objects.getCArray()); + balance(); + MDLCallback callback(intersectCallback, m_objects.getCArray(), m_objects.size()); m_tree.intersectPoint(point, callback); } }; From c6c23d67b8692936fe9e7d5920bfb997df516323 Mon Sep 17 00:00:00 2001 From: Nay Date: Mon, 21 Jan 2013 02:10:01 +0000 Subject: [PATCH 130/204] Scripts/ZG: Fix some code style issues and logic errors --- .../world/2013_01_20_09_world_spell_dbc.sql | 2 +- src/server/game/Miscellaneous/Language.h | 4 +- .../EasternKingdoms/ZulGurub/boss_arlokk.cpp | 146 +++++++++--------- .../ZulGurub/boss_gahzranka.cpp | 1 - .../ZulGurub/boss_hazzarah.cpp | 1 - .../ZulGurub/instance_zulgurub.cpp | 64 ++++---- 6 files changed, 110 insertions(+), 108 deletions(-) diff --git a/sql/updates/world/2013_01_20_09_world_spell_dbc.sql b/sql/updates/world/2013_01_20_09_world_spell_dbc.sql index bdd57e940b5..d8f466173f3 100644 --- a/sql/updates/world/2013_01_20_09_world_spell_dbc.sql +++ b/sql/updates/world/2013_01_20_09_world_spell_dbc.sql @@ -10,7 +10,7 @@ INSERT INTO `spell_dbc` (`Id`,`SchoolMask`,`Dispel`,`Mechanic`,`Attributes`,`Att UPDATE `creature_template` SET `AIName` = '', `ScriptName`='npc_zulian_prowler' WHERE `entry`=15101; -- Remove SmartAI -DELETE FROM smart_scripts WHERE entryorguid = 15101; +DELETE FROM `smart_scripts` WHERE `entryorguid`=15101; -- Add condition for Mark of Arlokk DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=24211; diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 35b0a6f8569..039e8b816b3 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -742,7 +742,7 @@ enum TrinityStrings LANG_COMMAND_CREATURESTORAGE_NOTFOUND = 818, LANG_CHANNEL_CITY = 819, - + LANG_NPCINFO_GOSSIP = 820, LANG_NPCINFO_QUESTGIVER = 821, LANG_NPCINFO_TRAINER_CLASS = 822, @@ -766,7 +766,7 @@ enum TrinityStrings LANG_NPCINFO_SPELLCLICK = 840, LANG_NPCINFO_MAILBOX = 841, LANG_NPCINFO_PLAYER_VEHICLE = 842, - + // Room for in-game strings 843-999 not used // Level 4 (CLI only commands) diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index 3682b265cbc..4b4186c7684 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -96,14 +96,14 @@ class boss_arlokk : public CreatureScript void Reset() { - summonCountA = 0; - summonCountB = 0; + _summonCountA = 0; + _summonCountB = 0; me->RemoveAllAuras(); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_DAGGER)); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, uint32(WEAPON_DAGGER)); - if (instance) + if (_instance) { - if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_FORCEFIELD))) + if (GameObject* gate = me->GetMap()->GetGameObject(_instance->GetData64(GO_FORCEFIELD))) gate->SetGoState(GO_STATE_READY); me->SetWalk(false); me->GetMotionMaster()->MovePoint(0, PosMoveOnSpawn[0]); @@ -114,23 +114,23 @@ class boss_arlokk : public CreatureScript { Talk(SAY_DEATH); me->RemoveAllAuras(); - if (instance) + if (_instance) { - if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_FORCEFIELD))) + if (GameObject* gate = me->GetMap()->GetGameObject(_instance->GetData64(GO_FORCEFIELD))) gate->SetGoState(GO_STATE_ACTIVE); - instance->SetBossState(DATA_ARLOKK, DONE); + _instance->SetBossState(DATA_ARLOKK, DONE); } } void EnterCombat(Unit* /*who*/) { _EnterCombat(); - events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(7000, 9000), 0, PHASE_ONE); - events.ScheduleEvent(EVENT_GOUGE, urand(12000, 15000), 0, PHASE_ONE); - if (instance) - events.ScheduleEvent(EVENT_SUMMON_PROWLERS, 6000, 0, PHASE_ALL); - events.ScheduleEvent(EVENT_MARK_OF_ARLOKK, urand(9000, 11000), 0, PHASE_ALL); - events.ScheduleEvent(EVENT_TRANSFORM, urand(15000, 20000), 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(7000, 9000), 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_GOUGE, urand(12000, 15000), 0, PHASE_ONE); + if (_instance) + _events.ScheduleEvent(EVENT_SUMMON_PROWLERS, 6000, 0, PHASE_ALL); + _events.ScheduleEvent(EVENT_MARK_OF_ARLOKK, urand(9000, 11000), 0, PHASE_ALL); + _events.ScheduleEvent(EVENT_TRANSFORM, urand(15000, 20000), 0, PHASE_ONE); Talk(SAY_AGGRO); // Sets up list of Panther spawners to cast on @@ -146,12 +146,12 @@ class boss_arlokk : public CreatureScript { if (trigger->GetPositionY() < -1625.0f) { - triggersSideAGUID[sideA] = trigger->GetGUID(); + _triggersSideAGUID[sideA] = trigger->GetGUID(); ++sideA; } else { - triggersSideBGUID[sideB] = trigger->GetGUID(); + _triggersSideBGUID[sideB] = trigger->GetGUID(); ++sideB; } } @@ -161,23 +161,23 @@ class boss_arlokk : public CreatureScript void EnterEvadeMode() { - if (instance) + if (_instance) { - if (GameObject* object = me->GetMap()->GetGameObject(instance->GetData64(GO_FORCEFIELD))) + if (GameObject* object = me->GetMap()->GetGameObject(_instance->GetData64(GO_FORCEFIELD))) object->SetGoState(GO_STATE_ACTIVE); - if (GameObject* object = me->GetMap()->GetGameObject(instance->GetData64(GO_GONG_OF_BETHEKK))) + if (GameObject* object = me->GetMap()->GetGameObject(_instance->GetData64(GO_GONG_OF_BETHEKK))) object->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); - instance->SetBossState(DATA_ARLOKK, NOT_STARTED); + _instance->SetBossState(DATA_ARLOKK, NOT_STARTED); } me->DespawnOrUnsummon(4000); } - void SetData(uint32 uiId, uint32 /*uiValue*/) + void SetData(uint32 id, uint32 /*value*/) { - if (uiId == 1) - --summonCountA; - if (uiId == 2) - --summonCountB; + if (id == 1) + --_summonCountA; + else if (id == 2) + --_summonCountB; } void UpdateAI(uint32 const diff) @@ -185,36 +185,40 @@ class boss_arlokk : public CreatureScript if (!UpdateVictim()) return; - events.Update(diff); + _events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) return; - while (uint32 eventId = events.ExecuteEvent()) + while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) { case EVENT_SHADOW_WORD_PAIN: DoCastVictim(SPELL_SHADOW_WORD_PAIN, true); - events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(5000, 7000), 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(5000, 7000), 0, PHASE_ONE); break; case EVENT_GOUGE: DoCastVictim(SPELL_GOUGE, true); break; case EVENT_SUMMON_PROWLERS: - if (summonCountA < MAX_PROWLERS_PER_SIDE) - if (Unit* trigger = me->GetUnit(*me, triggersSideAGUID[urand(0, 4)])) + if (_summonCountA < MAX_PROWLERS_PER_SIDE) + { + if (Unit* trigger = me->GetUnit(*me, _triggersSideAGUID[urand(0, 4)])) { trigger->CastSpell(trigger, SPELL_SUMMON_PROWLER); - ++summonCountA; + ++_summonCountA; } - if (summonCountB < MAX_PROWLERS_PER_SIDE) - if (Unit* trigger = me->GetUnit(*me, triggersSideBGUID[urand(0, 4)])) + } + if (_summonCountB < MAX_PROWLERS_PER_SIDE) + { + if (Unit* trigger = me->GetUnit(*me, _triggersSideBGUID[urand(0, 4)])) { trigger->CastSpell(trigger, SPELL_SUMMON_PROWLER); - ++summonCountB; + ++_summonCountB; } - events.ScheduleEvent(EVENT_SUMMON_PROWLERS, 6000, 0, PHASE_ALL); + } + _events.ScheduleEvent(EVENT_SUMMON_PROWLERS, 6000, 0, PHASE_ALL); break; case EVENT_MARK_OF_ARLOKK: { @@ -226,8 +230,8 @@ class boss_arlokk : public CreatureScript DoCast(target, SPELL_MARK_OF_ARLOKK, true); Talk(SAY_FEAST_PROWLER, target->GetGUID()); } + _events.ScheduleEvent(EVENT_MARK_OF_ARLOKK, urand(120000, 130000)); break; - events.ScheduleEvent(EVENT_MARK_OF_ARLOKK, urand(120000, 130000)); } case EVENT_TRANSFORM: { @@ -244,20 +248,20 @@ class boss_arlokk : public CreatureScript me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_VANISH_VISUAL); DoCast(me, SPELL_VANISH); - events.ScheduleEvent(EVENT_VANISH, 1000, 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_VANISH, 1000, 0, PHASE_ONE); break; } case EVENT_VANISH: DoCast(me, SPELL_SUPER_INVIS); me->SetWalk(false); - if (instance) + if (_instance) me->GetMotionMaster()->MovePoint(0, frand(-11551.0f, -11508.0f), frand(-1638.0f, -1617.0f), me->GetPositionZ()); - events.ScheduleEvent(EVENT_VANISH_2, 9000, 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_VANISH_2, 9000, 0, PHASE_ONE); break; case EVENT_VANISH_2: DoCast(me, SPELL_VANISH); DoCast(me, SPELL_SUPER_INVIS); - events.ScheduleEvent(EVENT_VISIBLE, urand(7000, 10000), 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_VISIBLE, urand(7000, 10000), 0, PHASE_ONE); break; case EVENT_VISIBLE: me->SetReactState(REACT_AGGRESSIVE); @@ -266,13 +270,13 @@ class boss_arlokk : public CreatureScript AttackStart(target); me->RemoveAura(SPELL_SUPER_INVIS); me->RemoveAura(SPELL_VANISH); - events.ScheduleEvent(EVENT_RAVAGE, urand(10000, 14000), 0, PHASE_TWO); - events.ScheduleEvent(EVENT_TRANSFORM_BACK, urand(15000, 18000), 0, PHASE_TWO); - events.SetPhase(PHASE_TWO); + _events.ScheduleEvent(EVENT_RAVAGE, urand(10000, 14000), 0, PHASE_TWO); + _events.ScheduleEvent(EVENT_TRANSFORM_BACK, urand(15000, 18000), 0, PHASE_TWO); + _events.SetPhase(PHASE_TWO); break; case EVENT_RAVAGE: DoCastVictim(SPELL_RAVAGE, true); - events.ScheduleEvent(EVENT_RAVAGE, urand(10000, 14000), 0, PHASE_TWO); + _events.ScheduleEvent(EVENT_RAVAGE, urand(10000, 14000), 0, PHASE_TWO); break; case EVENT_TRANSFORM_BACK: { @@ -284,10 +288,10 @@ class boss_arlokk : public CreatureScript me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg)); me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg)); me->UpdateDamagePhysical(BASE_ATTACK); - events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(4000, 7000), 0, PHASE_ONE); - events.ScheduleEvent(EVENT_GOUGE, urand(12000, 15000), 0, PHASE_ONE); - events.ScheduleEvent(EVENT_TRANSFORM, urand(16000, 20000), 0, PHASE_ONE); - events.SetPhase(PHASE_ONE); + _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(4000, 7000), 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_GOUGE, urand(12000, 15000), 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_TRANSFORM, urand(16000, 20000), 0, PHASE_ONE); + _events.SetPhase(PHASE_ONE); break; } default: @@ -299,10 +303,10 @@ class boss_arlokk : public CreatureScript } private: - uint8 summonCountA; - uint8 summonCountB; - uint64 triggersSideAGUID[5]; - uint64 triggersSideBGUID[5]; + uint8 _summonCountA; + uint8 _summonCountB; + uint64 _triggersSideAGUID[5]; + uint64 _triggersSideBGUID[5]; }; CreatureAI* GetAI(Creature* creature) const @@ -338,22 +342,22 @@ class npc_zulian_prowler : public CreatureScript struct npc_zulian_prowlerAI : public ScriptedAI { - npc_zulian_prowlerAI(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { } + npc_zulian_prowlerAI(Creature* creature) : ScriptedAI(creature), _instance(creature->GetInstanceScript()) { } void Reset() { if (me->GetPositionY() < -1625.0f) - sideData = 1; + _sideData = 1; else - sideData = 2; + _sideData = 2; DoCast(me, SPELL_SNEAK_RANK_1_1); DoCast(me, SPELL_SNEAK_RANK_1_2); - if (instance) - if (Unit* arlokk = me->GetUnit(*me, instance->GetData64(NPC_ARLOKK))) + if (_instance) + if (Unit* arlokk = me->GetUnit(*me, _instance->GetData64(NPC_ARLOKK))) me->GetMotionMaster()->MovePoint(0, arlokk->GetPositionX(), arlokk->GetPositionY(), arlokk->GetPositionZ()); - events.ScheduleEvent(EVENT_ATTACK, 6000); + _events.ScheduleEvent(EVENT_ATTACK, 6000); } void EnterCombat(Unit* /*who*/) @@ -366,33 +370,33 @@ class npc_zulian_prowler : public CreatureScript void SpellHit(Unit* caster, SpellInfo const* spell) { if (spell->Id == SPELL_MARK_OF_ARLOKK_TRIGGER) // Should only hit if line of sight - { me->Attack(caster, true); - } } void JustDied(Unit* /*killer*/) { - - if (instance) - if (Unit* arlokk = me->GetUnit(*me, instance->GetData64(NPC_ARLOKK))) - if (arlokk->isAlive()) - arlokk->GetAI()->SetData(sideData, 0); + if (_instance) + { + if (Unit* arlokk = me->GetUnit(*me, instance->GetData64(NPC_ARLOKK))) + { + if (arlokk->isAlive()) + arlokk->GetAI()->SetData(_sideData, 0); + } + } me->DespawnOrUnsummon(4000); } void UpdateAI(const uint32 diff) { - if (UpdateVictim()) { DoMeleeAttackIfReady(); return; } - events.Update(diff); + _events.Update(diff); - while (uint32 eventId = events.ExecuteEvent()) + while (uint32 eventId = _events.ExecuteEvent()) { switch (eventId) { @@ -407,9 +411,9 @@ class npc_zulian_prowler : public CreatureScript } private: - int32 sideData; - EventMap events; - InstanceScript* instance; + int32 _sideData; + EventMap _events; + InstanceScript* _instance; }; CreatureAI* GetAI(Creature* creature) const @@ -433,7 +437,7 @@ class go_gong_of_bethekk : public GameObjectScript bool OnGossipHello(Player* /*player*/, GameObject* go) { - if (InstanceScript* instance = go->GetInstanceScript()) + if (go->GetInstanceScript()) { go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); go->SendCustomAnim(0); diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp index 70399b6934c..f3f12bc35c5 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_gahzranka.cpp @@ -112,4 +112,3 @@ void AddSC_boss_gahzranka() { new boss_gahzranka(); } - diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp index 15228815d69..809403bb325 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_hazzarah.cpp @@ -121,4 +121,3 @@ void AddSC_boss_hazzarah() { new boss_hazzarah(); } - diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp index d922e2db3f3..01c5ef998f5 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/instance_zulgurub.cpp @@ -40,14 +40,14 @@ class instance_zulgurub : public InstanceMapScript void Initialize() { - zealotLorkhanGUID = 0; - zealotZathGUID = 0; - highPriestTekalGUID = 0; - jindoTheHexxerGUID = 0; - vilebranchSpeakerGUID = 0; - arlokkGUID = 0; - go_ForcefieldGUID = 0; - go_GongOfBethekkGUID = 0; + _zealotLorkhanGUID = 0; + _zealotZathGUID = 0; + _highPriestTekalGUID = 0; + _jindoTheHexxerGUID = 0; + _vilebranchSpeakerGUID = 0; + _arlokkGUID = 0; + _goForcefieldGUID = 0; + _goGongOfBethekkGUID = 0; } bool IsEncounterInProgress() const @@ -61,22 +61,22 @@ class instance_zulgurub : public InstanceMapScript switch (creature->GetEntry()) { case NPC_ZEALOT_LORKHAN: - zealotLorkhanGUID = creature->GetGUID(); + _zealotLorkhanGUID = creature->GetGUID(); break; case NPC_ZEALOT_ZATH: - zealotZathGUID = creature->GetGUID(); + _zealotZathGUID = creature->GetGUID(); break; case NPC_HIGH_PRIEST_THEKAL: - highPriestTekalGUID = creature->GetGUID(); + _highPriestTekalGUID = creature->GetGUID(); break; case NPC_JINDO_THE_HEXXER: - jindoTheHexxerGUID = creature->GetGUID(); + _jindoTheHexxerGUID = creature->GetGUID(); break; case NPC_VILEBRANCH_SPEAKER: - vilebranchSpeakerGUID = creature->GetGUID(); + _vilebranchSpeakerGUID = creature->GetGUID(); break; case NPC_ARLOKK: - arlokkGUID = creature->GetGUID(); + _arlokkGUID = creature->GetGUID(); break; } } @@ -86,13 +86,13 @@ class instance_zulgurub : public InstanceMapScript switch (go->GetEntry()) { case GO_FORCEFIELD: - go_ForcefieldGUID = go->GetGUID(); + _goForcefieldGUID = go->GetGUID(); break; case GO_GONG_OF_BETHEKK: - go_GongOfBethekkGUID = go->GetGUID(); + _goGongOfBethekkGUID = go->GetGUID(); if (GetBossState(DATA_ARLOKK) == DONE) go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); - else + else go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); break; default: @@ -105,25 +105,25 @@ class instance_zulgurub : public InstanceMapScript switch (uiData) { case DATA_LORKHAN: - return zealotLorkhanGUID; + return _zealotLorkhanGUID; break; case DATA_ZATH: - return zealotZathGUID; + return _zealotZathGUID; break; case DATA_THEKAL: - return highPriestTekalGUID; + return _highPriestTekalGUID; break; case DATA_JINDO: - return jindoTheHexxerGUID; + return _jindoTheHexxerGUID; break; case NPC_ARLOKK: - return arlokkGUID; + return _arlokkGUID; break; case GO_FORCEFIELD: - return go_ForcefieldGUID; + return _goForcefieldGUID; break; case GO_GONG_OF_BETHEKK: - return go_GongOfBethekkGUID; + return _goGongOfBethekkGUID; break; } return 0; @@ -175,14 +175,14 @@ class instance_zulgurub : public InstanceMapScript //If all High Priest bosses were killed. Lorkhan, Zath and Ohgan are added too. //Storing Lorkhan, Zath and Thekal because we need to cast on them later. Jindo is needed for healfunction too. - uint64 zealotLorkhanGUID; - uint64 zealotZathGUID; - uint64 highPriestTekalGUID; - uint64 jindoTheHexxerGUID; - uint64 vilebranchSpeakerGUID; - uint64 arlokkGUID; - uint64 go_ForcefieldGUID; - uint64 go_GongOfBethekkGUID; + uint64 _zealotLorkhanGUID; + uint64 _zealotZathGUID; + uint64 _highPriestTekalGUID; + uint64 _jindoTheHexxerGUID; + uint64 _vilebranchSpeakerGUID; + uint64 _arlokkGUID; + uint64 _goForcefieldGUID; + uint64 _goGongOfBethekkGUID; }; InstanceScript* GetInstanceScript(InstanceMap* map) const From 236355265598955861cc9ecd46315737270ac893 Mon Sep 17 00:00:00 2001 From: Nay Date: Mon, 21 Jan 2013 02:24:25 +0000 Subject: [PATCH 131/204] Scripts/ZG: Fix a warning and a compile error introduced in previous commit Personal opinion: BossAI should not have a public field named "instance" --- .../EasternKingdoms/ZulGurub/boss_arlokk.cpp | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index 4b4186c7684..3c549150a78 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -83,7 +83,7 @@ enum Misc Position const PosMoveOnSpawn[1] = { - { -11561.9f, -1627.868f, 41.29941f } + { -11561.9f, -1627.868f, 41.29941f, 0.0f } }; class boss_arlokk : public CreatureScript @@ -101,9 +101,9 @@ class boss_arlokk : public CreatureScript me->RemoveAllAuras(); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_DAGGER)); me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 1, uint32(WEAPON_DAGGER)); - if (_instance) + if (instance) { - if (GameObject* gate = me->GetMap()->GetGameObject(_instance->GetData64(GO_FORCEFIELD))) + if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_FORCEFIELD))) gate->SetGoState(GO_STATE_READY); me->SetWalk(false); me->GetMotionMaster()->MovePoint(0, PosMoveOnSpawn[0]); @@ -114,11 +114,11 @@ class boss_arlokk : public CreatureScript { Talk(SAY_DEATH); me->RemoveAllAuras(); - if (_instance) + if (instance) { - if (GameObject* gate = me->GetMap()->GetGameObject(_instance->GetData64(GO_FORCEFIELD))) + if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_FORCEFIELD))) gate->SetGoState(GO_STATE_ACTIVE); - _instance->SetBossState(DATA_ARLOKK, DONE); + instance->SetBossState(DATA_ARLOKK, DONE); } } @@ -127,7 +127,7 @@ class boss_arlokk : public CreatureScript _EnterCombat(); _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(7000, 9000), 0, PHASE_ONE); _events.ScheduleEvent(EVENT_GOUGE, urand(12000, 15000), 0, PHASE_ONE); - if (_instance) + if (instance) _events.ScheduleEvent(EVENT_SUMMON_PROWLERS, 6000, 0, PHASE_ALL); _events.ScheduleEvent(EVENT_MARK_OF_ARLOKK, urand(9000, 11000), 0, PHASE_ALL); _events.ScheduleEvent(EVENT_TRANSFORM, urand(15000, 20000), 0, PHASE_ONE); @@ -161,13 +161,13 @@ class boss_arlokk : public CreatureScript void EnterEvadeMode() { - if (_instance) + if (instance) { - if (GameObject* object = me->GetMap()->GetGameObject(_instance->GetData64(GO_FORCEFIELD))) + if (GameObject* object = me->GetMap()->GetGameObject(instance->GetData64(GO_FORCEFIELD))) object->SetGoState(GO_STATE_ACTIVE); - if (GameObject* object = me->GetMap()->GetGameObject(_instance->GetData64(GO_GONG_OF_BETHEKK))) + if (GameObject* object = me->GetMap()->GetGameObject(instance->GetData64(GO_GONG_OF_BETHEKK))) object->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); - _instance->SetBossState(DATA_ARLOKK, NOT_STARTED); + instance->SetBossState(DATA_ARLOKK, NOT_STARTED); } me->DespawnOrUnsummon(4000); } @@ -254,7 +254,7 @@ class boss_arlokk : public CreatureScript case EVENT_VANISH: DoCast(me, SPELL_SUPER_INVIS); me->SetWalk(false); - if (_instance) + if (instance) me->GetMotionMaster()->MovePoint(0, frand(-11551.0f, -11508.0f), frand(-1638.0f, -1617.0f), me->GetPositionZ()); _events.ScheduleEvent(EVENT_VANISH_2, 9000, 0, PHASE_ONE); break; From 3523d84a9146b2aecd6895adb2a84f60a76c5f21 Mon Sep 17 00:00:00 2001 From: Nay Date: Mon, 21 Jan 2013 02:34:43 +0000 Subject: [PATCH 132/204] Shooting myself in 3... 2... --- .../EasternKingdoms/ZulGurub/boss_arlokk.cpp | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index 3c549150a78..2a8c663a5ed 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -125,12 +125,12 @@ class boss_arlokk : public CreatureScript void EnterCombat(Unit* /*who*/) { _EnterCombat(); - _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(7000, 9000), 0, PHASE_ONE); - _events.ScheduleEvent(EVENT_GOUGE, urand(12000, 15000), 0, PHASE_ONE); + events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(7000, 9000), 0, PHASE_ONE); + events.ScheduleEvent(EVENT_GOUGE, urand(12000, 15000), 0, PHASE_ONE); if (instance) - _events.ScheduleEvent(EVENT_SUMMON_PROWLERS, 6000, 0, PHASE_ALL); - _events.ScheduleEvent(EVENT_MARK_OF_ARLOKK, urand(9000, 11000), 0, PHASE_ALL); - _events.ScheduleEvent(EVENT_TRANSFORM, urand(15000, 20000), 0, PHASE_ONE); + events.ScheduleEvent(EVENT_SUMMON_PROWLERS, 6000, 0, PHASE_ALL); + events.ScheduleEvent(EVENT_MARK_OF_ARLOKK, urand(9000, 11000), 0, PHASE_ALL); + events.ScheduleEvent(EVENT_TRANSFORM, urand(15000, 20000), 0, PHASE_ONE); Talk(SAY_AGGRO); // Sets up list of Panther spawners to cast on @@ -185,18 +185,18 @@ class boss_arlokk : public CreatureScript if (!UpdateVictim()) return; - _events.Update(diff); + events.Update(diff); if (me->HasUnitState(UNIT_STATE_CASTING)) return; - while (uint32 eventId = _events.ExecuteEvent()) + while (uint32 eventId = events.ExecuteEvent()) { switch (eventId) { case EVENT_SHADOW_WORD_PAIN: DoCastVictim(SPELL_SHADOW_WORD_PAIN, true); - _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(5000, 7000), 0, PHASE_ONE); + events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(5000, 7000), 0, PHASE_ONE); break; case EVENT_GOUGE: DoCastVictim(SPELL_GOUGE, true); @@ -218,7 +218,7 @@ class boss_arlokk : public CreatureScript ++_summonCountB; } } - _events.ScheduleEvent(EVENT_SUMMON_PROWLERS, 6000, 0, PHASE_ALL); + events.ScheduleEvent(EVENT_SUMMON_PROWLERS, 6000, 0, PHASE_ALL); break; case EVENT_MARK_OF_ARLOKK: { @@ -230,7 +230,7 @@ class boss_arlokk : public CreatureScript DoCast(target, SPELL_MARK_OF_ARLOKK, true); Talk(SAY_FEAST_PROWLER, target->GetGUID()); } - _events.ScheduleEvent(EVENT_MARK_OF_ARLOKK, urand(120000, 130000)); + events.ScheduleEvent(EVENT_MARK_OF_ARLOKK, urand(120000, 130000)); break; } case EVENT_TRANSFORM: @@ -248,7 +248,7 @@ class boss_arlokk : public CreatureScript me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_VANISH_VISUAL); DoCast(me, SPELL_VANISH); - _events.ScheduleEvent(EVENT_VANISH, 1000, 0, PHASE_ONE); + events.ScheduleEvent(EVENT_VANISH, 1000, 0, PHASE_ONE); break; } case EVENT_VANISH: @@ -256,12 +256,12 @@ class boss_arlokk : public CreatureScript me->SetWalk(false); if (instance) me->GetMotionMaster()->MovePoint(0, frand(-11551.0f, -11508.0f), frand(-1638.0f, -1617.0f), me->GetPositionZ()); - _events.ScheduleEvent(EVENT_VANISH_2, 9000, 0, PHASE_ONE); + events.ScheduleEvent(EVENT_VANISH_2, 9000, 0, PHASE_ONE); break; case EVENT_VANISH_2: DoCast(me, SPELL_VANISH); DoCast(me, SPELL_SUPER_INVIS); - _events.ScheduleEvent(EVENT_VISIBLE, urand(7000, 10000), 0, PHASE_ONE); + events.ScheduleEvent(EVENT_VISIBLE, urand(7000, 10000), 0, PHASE_ONE); break; case EVENT_VISIBLE: me->SetReactState(REACT_AGGRESSIVE); @@ -270,13 +270,13 @@ class boss_arlokk : public CreatureScript AttackStart(target); me->RemoveAura(SPELL_SUPER_INVIS); me->RemoveAura(SPELL_VANISH); - _events.ScheduleEvent(EVENT_RAVAGE, urand(10000, 14000), 0, PHASE_TWO); - _events.ScheduleEvent(EVENT_TRANSFORM_BACK, urand(15000, 18000), 0, PHASE_TWO); - _events.SetPhase(PHASE_TWO); + events.ScheduleEvent(EVENT_RAVAGE, urand(10000, 14000), 0, PHASE_TWO); + events.ScheduleEvent(EVENT_TRANSFORM_BACK, urand(15000, 18000), 0, PHASE_TWO); + events.SetPhase(PHASE_TWO); break; case EVENT_RAVAGE: DoCastVictim(SPELL_RAVAGE, true); - _events.ScheduleEvent(EVENT_RAVAGE, urand(10000, 14000), 0, PHASE_TWO); + events.ScheduleEvent(EVENT_RAVAGE, urand(10000, 14000), 0, PHASE_TWO); break; case EVENT_TRANSFORM_BACK: { @@ -288,10 +288,10 @@ class boss_arlokk : public CreatureScript me->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg)); me->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg)); me->UpdateDamagePhysical(BASE_ATTACK); - _events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(4000, 7000), 0, PHASE_ONE); - _events.ScheduleEvent(EVENT_GOUGE, urand(12000, 15000), 0, PHASE_ONE); - _events.ScheduleEvent(EVENT_TRANSFORM, urand(16000, 20000), 0, PHASE_ONE); - _events.SetPhase(PHASE_ONE); + events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, urand(4000, 7000), 0, PHASE_ONE); + events.ScheduleEvent(EVENT_GOUGE, urand(12000, 15000), 0, PHASE_ONE); + events.ScheduleEvent(EVENT_TRANSFORM, urand(16000, 20000), 0, PHASE_ONE); + events.SetPhase(PHASE_ONE); break; } default: From 321b425f366330768f4bb84f8f4f785c53f3d1ff Mon Sep 17 00:00:00 2001 From: Aokromes Date: Mon, 21 Jan 2013 02:47:51 +0000 Subject: [PATCH 133/204] Update COPYING Signed-off-by: Nay --- COPYING | 40 +++++++++---------- .../EasternKingdoms/ZulGurub/boss_arlokk.cpp | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/COPYING b/COPYING index cdfdede6e8c..d159169d105 100644 --- a/COPYING +++ b/COPYING @@ -1,12 +1,12 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - Preamble + Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public @@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to +the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not @@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. - - GNU GENERAL PUBLIC LICENSE + + GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains @@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions: License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) - + These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in @@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - + 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is @@ -225,7 +225,7 @@ impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - + 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License @@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - NO WARRANTY + NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN @@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it @@ -303,16 +303,16 @@ the "copyright" line and a pointer to where the full notice is found. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - Gnomovision version 69, Copyright (C) year name of author + Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. @@ -335,5 +335,5 @@ necessary. Here is a sample; alter the names: This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General +library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index 2a8c663a5ed..e4e8235a172 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -377,7 +377,7 @@ class npc_zulian_prowler : public CreatureScript { if (_instance) { - if (Unit* arlokk = me->GetUnit(*me, instance->GetData64(NPC_ARLOKK))) + if (Unit* arlokk = me->GetUnit(*me, _instance->GetData64(NPC_ARLOKK))) { if (arlokk->isAlive()) arlokk->GetAI()->SetData(_sideData, 0); From 53c2340a53673c2dc607ba8a634a4babc5e43fb0 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Mon, 21 Jan 2013 09:46:08 +0100 Subject: [PATCH 134/204] DB/Misc: Fix db errors --- sql/updates/world/2013_01_21_00_world_misc.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sql/updates/world/2013_01_21_00_world_misc.sql diff --git a/sql/updates/world/2013_01_21_00_world_misc.sql b/sql/updates/world/2013_01_21_00_world_misc.sql new file mode 100644 index 00000000000..c023003783e --- /dev/null +++ b/sql/updates/world/2013_01_21_00_world_misc.sql @@ -0,0 +1,2 @@ +UPDATE `spell_dbc` SET `EffectImplicitTargetB1`=7,`EffectRadiusIndex1`=18 WHERE `Id`=24211; +UPDATE `conditions` SET `ConditionTypeOrReference`=31,`ConditionTarget`=0 WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=24211; From 367e1f7b2b2b2754ea9225af0e8f90cb5b315871 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Mon, 21 Jan 2013 10:11:46 +0100 Subject: [PATCH 135/204] Core: Fix warnings --- src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index e4e8235a172..c2806c395f4 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -333,7 +333,7 @@ enum ZulianProwlerEvents Position const PosProwlerCenter[1] = { - { -11556.7f, -1631.344f, 41.2994f } + { -11556.7f, -1631.344f, 41.2994f, 0.0f } }; class npc_zulian_prowler : public CreatureScript From 77889806916bb001fbf25c3472474977b2925831 Mon Sep 17 00:00:00 2001 From: Gacko Date: Mon, 21 Jan 2013 18:00:19 +0100 Subject: [PATCH 136/204] DB: Thuk the Defiant Set hostile to make Stasis Chambers of Bash'ir (10974) solvable. Solves #6422 --- sql/updates/world/2013_01_21_01_world_creature_template.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 sql/updates/world/2013_01_21_01_world_creature_template.sql diff --git a/sql/updates/world/2013_01_21_01_world_creature_template.sql b/sql/updates/world/2013_01_21_01_world_creature_template.sql new file mode 100644 index 00000000000..d5bf4525ff6 --- /dev/null +++ b/sql/updates/world/2013_01_21_01_world_creature_template.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `faction_A`=14,`faction_H`=14 WHERE `entry`=22920; From 3cb80f206eb75ab7d1b09662885fd13f8cf46071 Mon Sep 17 00:00:00 2001 From: Nay Date: Mon, 21 Jan 2013 20:45:09 +0000 Subject: [PATCH 137/204] Core/Config: Set mmaps disabled by default --- src/server/game/World/World.cpp | 2 +- src/server/worldserver/worldserver.conf.dist | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index da00034108c..8f42be71f44 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1132,7 +1132,7 @@ void World::LoadConfigSettings(bool reload) sLog->outInfo(LOG_FILTER_SERVER_LOADING, "Using DataDir %s", m_dataPath.c_str()); } - m_bool_configs[CONFIG_ENABLE_MMAPS] = ConfigMgr::GetBoolDefault("mmap.enablePathFinding", true); + m_bool_configs[CONFIG_ENABLE_MMAPS] = ConfigMgr::GetBoolDefault("mmap.enablePathFinding", false); sLog->outInfo(LOG_FILTER_SERVER_LOADING, "WORLD: MMap data directory is: %smmaps", m_dataPath.c_str()); m_bool_configs[CONFIG_VMAP_INDOOR_CHECK] = ConfigMgr::GetBoolDefault("vmap.enableIndoorCheck", 0); diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index b3e6b636b32..51c083a3dbe 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -270,11 +270,11 @@ PlayerSave.Stats.SaveOnlyOnLogout = 1 # # mmap.enablePathFinding -# Description: Enable/Disable pathfinding using mmaps -# Default: 1 - (Enabled) -# 0 - (Disabled) +# Description: Enable/Disable pathfinding using mmaps - experimental +# Default: 0 - (Disabled) +# 1 - (Enabled) -mmap.enablePathFinding = 1 +mmap.enablePathFinding = 0 # # vmap.enableLOS From 017ff298dd55511c2577e3ec7a6c7fb07ec27070 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Mon, 21 Jan 2013 22:53:22 +0100 Subject: [PATCH 138/204] DB/SAI: Fix more some db errors no.3 --- sql/updates/world/2013_01_21_02_world_sai.sql | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 sql/updates/world/2013_01_21_02_world_sai.sql diff --git a/sql/updates/world/2013_01_21_02_world_sai.sql b/sql/updates/world/2013_01_21_02_world_sai.sql new file mode 100644 index 00000000000..31070c48718 --- /dev/null +++ b/sql/updates/world/2013_01_21_02_world_sai.sql @@ -0,0 +1,7 @@ +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=16459 AND `source_type`=0 AND `id`=2; +UPDATE `smart_scripts` SET `event_flags`=0 WHERE `entryorguid`=5263 AND `source_type`=0 AND `id`=0; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=19255 AND `source_type`=0 AND `id`=0; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=5888 AND `source_type`=0 AND `id`=0; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=10828 AND `source_type`=0 AND `id`=0; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=29181 AND `source_type`=0 AND `id`=1; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=16403 AND `source_type`=0 AND `id`=9; From 0cdadcdd781b768d9869f6b06e6abb572fbfdefc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Bla=C5=BEevi=C4=87?= Date: Tue, 22 Jan 2013 09:36:54 +0100 Subject: [PATCH 139/204] Expand ~ to home directory on unix --- src/server/game/World/World.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index d232920418d..264119ee99c 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1118,6 +1118,15 @@ void World::LoadConfigSettings(bool reload) if (dataPath.at(dataPath.length()-1) != '/' && dataPath.at(dataPath.length()-1) != '\\') dataPath.push_back('/'); +#if PLATFORM == PLATFORM_UNIX || PLATFORM == PLATFORM_APPLE + if (dataPath[0] == '~') + { + const char* home = getenv("HOME"); + if (home) + dataPath.replace(0, 1, home); + } +#endif + if (reload) { if (dataPath != m_dataPath) From a65caa6da2d6090ca23018706029f3a96a035b55 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 22 Jan 2013 13:13:41 +0100 Subject: [PATCH 140/204] Core/Movement: Fixed one (probably many remain) merge error --- .../Movement/MovementGenerators/TargetedMovementGenerator.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 3a8841848d1..abb4ac9964b 100644 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -107,10 +107,6 @@ void TargetedMovementGeneratorMedium::_setTargetLocation(T* owner, bool upd Movement::MoveSplineInit init(owner); init.MovebyPath(i_path->GetPath()); - if (forceDest && updateDestination) - init.SetFacing(i_target.getTarget()->GetOrientation()); - else - init.SetFacing(i_target.getTarget()); init.SetWalk(((D*)this)->EnableWalking()); // Using the same condition for facing target as the one that is used for SetInFront on movement end // - applies to ChaseMovementGenerator mostly From fcd258a8a97098c4392c216f9bd6f99424b5b4b9 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 22 Jan 2013 15:40:12 +0100 Subject: [PATCH 141/204] Tools/MeshExtractor: Removed shared and MySQL dependencies. --- src/tools/mesh_extractor/CMakeLists.txt | 65 ++++++------------- src/tools/mesh_extractor/Cache.h | 5 +- src/tools/mesh_extractor/Chunk.h | 2 +- src/tools/mesh_extractor/Constants.h | 2 - src/tools/mesh_extractor/ContinentBuilder.h | 4 +- src/tools/mesh_extractor/DBC.cpp | 2 +- src/tools/mesh_extractor/DBC.h | 3 +- src/tools/mesh_extractor/LiquidHandler.h | 2 +- src/tools/mesh_extractor/MPQ.h | 14 ++-- src/tools/mesh_extractor/MPQManager.cpp | 3 +- src/tools/mesh_extractor/MPQManager.h | 4 +- src/tools/mesh_extractor/MeshExtractor.cpp | 28 ++++---- src/tools/mesh_extractor/TileBuilder.cpp | 30 ++++----- src/tools/mesh_extractor/Utils.h | 6 +- .../mesh_extractor/WorldModelHandler.cpp | 2 +- src/tools/mesh_extractor/WorldModelHandler.h | 2 +- 16 files changed, 74 insertions(+), 100 deletions(-) diff --git a/src/tools/mesh_extractor/CMakeLists.txt b/src/tools/mesh_extractor/CMakeLists.txt index b8bd9f54331..1b5d1564b71 100644 --- a/src/tools/mesh_extractor/CMakeLists.txt +++ b/src/tools/mesh_extractor/CMakeLists.txt @@ -11,69 +11,42 @@ file(GLOB_RECURSE sources *.cpp *.h) -if( UNIX ) - include_directories ( - ${CMAKE_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/src/server/shared - ${CMAKE_SOURCE_DIR}/src/server/shared/Database - ${CMAKE_SOURCE_DIR}/src/server/shared/Database/Implementation - ${CMAKE_SOURCE_DIR}/src/server/shared/Threading - ${CMAKE_SOURCE_DIR}/src/server/shared/Logging - ${CMAKE_SOURCE_DIR}/src/server/shared/Utilities - ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic - ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic/LinkedReference - ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast - ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour - ${CMAKE_SOURCE_DIR}/dep/libmpq - ${CMAKE_SOURCE_DIR}/dep/g3dlite/include - ${ACE_INCLUDE_DIR} - ${MYSQL_INCLUDE_DIR} - ${OPENSSL_INCLUDE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} - ) -elseif( WIN32 ) - include_directories ( - ${CMAKE_BINARY_DIR} - ${CMAKE_SOURCE_DIR}/src/server/shared - ${CMAKE_SOURCE_DIR}/src/server/shared/Database - ${CMAKE_SOURCE_DIR}/src/server/shared/Database/Implementation - ${CMAKE_SOURCE_DIR}/src/server/shared/Threading - ${CMAKE_SOURCE_DIR}/src/server/shared/Logging - ${CMAKE_SOURCE_DIR}/src/server/shared/Utilities - ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic - ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic/LinkedReference - ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast - ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour - ${CMAKE_SOURCE_DIR}/dep/libmpq +add_definitions(-DNO_CORE_FUNCS) + +set(include_Base + ${CMAKE_BINARY_DIR} + ${CMAKE_SOURCE_DIR}/src/server/shared + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast + ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour + ${CMAKE_SOURCE_DIR}/dep/libmpq + ${CMAKE_SOURCE_DIR}/dep/g3dlite/include + ${ACE_INCLUDE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} +) + +if( WIN32 ) + set(include_Base + ${include_Base} ${CMAKE_SOURCE_DIR}/dep/libmpq/win - ${CMAKE_SOURCE_DIR}/dep/g3dlite/include - ${ACE_INCLUDE_DIR} - ${MYSQL_INCLUDE_DIR} - ${OPENSSL_INCLUDE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR} - ) + ) endif() +include_directories(${include_Base}) + add_executable(MeshExtractor ${sources} ) target_link_libraries(MeshExtractor - shared g3dlib mpq Recast Detour - ${MYSQL_LIBRARY} - ${OPENSSL_LIBRARIES} - ${OPENSSL_EXTRA_LIBRARIES} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} ${ACE_LIBRARY} ) -add_dependencies(MeshExtractor mpq Recast Detour) - if( UNIX ) install(TARGETS MeshExtractor DESTINATION bin) elseif( WIN32 ) diff --git a/src/tools/mesh_extractor/Cache.h b/src/tools/mesh_extractor/Cache.h index 34293b14b54..60e3d8434cf 100644 --- a/src/tools/mesh_extractor/Cache.h +++ b/src/tools/mesh_extractor/Cache.h @@ -2,8 +2,9 @@ #define CACHE_H #include #include -#include "Common.h" -#include "ace/Synch.h" +#include "Define.h" +#include +#include class WorldModelRoot; class Model; diff --git a/src/tools/mesh_extractor/Chunk.h b/src/tools/mesh_extractor/Chunk.h index 2eea36f69b6..f3681a9f576 100644 --- a/src/tools/mesh_extractor/Chunk.h +++ b/src/tools/mesh_extractor/Chunk.h @@ -1,6 +1,6 @@ #ifndef CHUNK_H #define CHUNK_H -#include "Common.h" +#include "Define.h" #include class ChunkedData; diff --git a/src/tools/mesh_extractor/Constants.h b/src/tools/mesh_extractor/Constants.h index 54fa073fbef..02e2d25559f 100644 --- a/src/tools/mesh_extractor/Constants.h +++ b/src/tools/mesh_extractor/Constants.h @@ -1,8 +1,6 @@ #ifndef CONSTANTS_H #define CONSTANTS_H -#include "Common.h" - class Constants { public: diff --git a/src/tools/mesh_extractor/ContinentBuilder.h b/src/tools/mesh_extractor/ContinentBuilder.h index 3d7b879879e..b36ca125b9e 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.h +++ b/src/tools/mesh_extractor/ContinentBuilder.h @@ -2,7 +2,7 @@ #define CONT_BUILDER_H #include #include "WDT.h" -#include "Common.h" +#include "Define.h" class ContinentBuilder { @@ -22,7 +22,7 @@ private: WDT* TileMap; uint32 MapId; uint32 NumberOfThreads; - int tileXMin; + int tileXMin; int tileYMin; int tileXMax; int tileYMax; diff --git a/src/tools/mesh_extractor/DBC.cpp b/src/tools/mesh_extractor/DBC.cpp index 3c846363d06..9a55ff6d7ed 100644 --- a/src/tools/mesh_extractor/DBC.cpp +++ b/src/tools/mesh_extractor/DBC.cpp @@ -1,6 +1,6 @@ #include #include "DBC.h" -#include "Common.h" +#include "Define.h" DBC::DBC( FILE* stream ) : StringBlock(NULL), StringBlockSize(0), IsFaulty(true) { diff --git a/src/tools/mesh_extractor/DBC.h b/src/tools/mesh_extractor/DBC.h index 0c857bd40ed..5ed57754e73 100644 --- a/src/tools/mesh_extractor/DBC.h +++ b/src/tools/mesh_extractor/DBC.h @@ -1,7 +1,8 @@ #ifndef DBC_H #define DBC_H #include -#include "Common.h" +#include +#include "Define.h" class Record; diff --git a/src/tools/mesh_extractor/LiquidHandler.h b/src/tools/mesh_extractor/LiquidHandler.h index 6e8d0081adb..41e128ba20b 100644 --- a/src/tools/mesh_extractor/LiquidHandler.h +++ b/src/tools/mesh_extractor/LiquidHandler.h @@ -2,7 +2,7 @@ #define LIQUID_H #include "ADT.h" #include "Utils.h" -#include "Common.h" +#include "Define.h" #include diff --git a/src/tools/mesh_extractor/MPQ.h b/src/tools/mesh_extractor/MPQ.h index 15fce452726..2f8b082f526 100644 --- a/src/tools/mesh_extractor/MPQ.h +++ b/src/tools/mesh_extractor/MPQ.h @@ -2,27 +2,25 @@ #define MPQ_H #include "libmpq/mpq.h" -#include "Common.h" -#include +#include "Define.h" +#include #include #include #include #include -using namespace std; - class MPQArchive { public: mpq_archive_s *mpq_a; - - vector Files; + + std::vector Files; MPQArchive(const char* filename); void close(); - void GetFileListTo(vector& filelist) { + void GetFileListTo(std::vector& filelist) { uint32_t filenum; if(libmpq__file_number(mpq_a, "(listfile)", &filenum)) return; libmpq__off_t size, transferred; @@ -40,7 +38,7 @@ public: while ((token != NULL) && (counter < size)) { //cout << token << endl; token[strlen(token) - 1] = 0; - string s = token; + std::string s = token; filelist.push_back(s); counter += strlen(token) + 2; token = strtok(NULL, seps); diff --git a/src/tools/mesh_extractor/MPQManager.cpp b/src/tools/mesh_extractor/MPQManager.cpp index 90491dfb945..0fe07cd8b85 100644 --- a/src/tools/mesh_extractor/MPQManager.cpp +++ b/src/tools/mesh_extractor/MPQManager.cpp @@ -2,8 +2,7 @@ #include "MPQ.h" #include "DBC.h" #include "Utils.h" - -#include "ace/Synch.h" +#include char* MPQManager::Files[] = { "common.MPQ", diff --git a/src/tools/mesh_extractor/MPQManager.h b/src/tools/mesh_extractor/MPQManager.h index c23d7177825..788be7f5974 100644 --- a/src/tools/mesh_extractor/MPQManager.h +++ b/src/tools/mesh_extractor/MPQManager.h @@ -2,7 +2,9 @@ #define MPQ_MANAGER_H #include "MPQ.h" -#include "ace/Synch.h" +#include +#include +#include class DBC; class MPQManager diff --git a/src/tools/mesh_extractor/MeshExtractor.cpp b/src/tools/mesh_extractor/MeshExtractor.cpp index b164ff5861d..e06f44c7125 100644 --- a/src/tools/mesh_extractor/MeshExtractor.cpp +++ b/src/tools/mesh_extractor/MeshExtractor.cpp @@ -12,11 +12,6 @@ #include -#include "Common.h" -#include "LoginDatabase.h" -#include "Util.h" -LoginDatabaseWorkerPool LoginDatabase; - MPQManager* MPQHandler; CacheClass* Cache; @@ -64,7 +59,7 @@ void ExtractDBCs() path += std::string(MPQManager::Languages[*itr]) + "/"; Utils::CreateDir(path); } - + std::string component = "component.wow-" + std::string(MPQManager::Languages[*itr]) + ".txt"; // Extract the component file Utils::SaveToDisk(MPQHandler->GetFile(component), path + component); @@ -104,7 +99,7 @@ void ExtractGameobjectModels() { fileName = Utils::FixModelPath(fileName); Model model(path); - + if (model.IsBad) continue; @@ -151,7 +146,7 @@ void ExtractGameobjectModels() fwrite(indices, sizeof(uint16), numTris, output); } - + fwrite("VERT", 4, 1, output); wsize = sizeof(int) + sizeof(float) * 3 * numVerts; fwrite(&wsize, sizeof(int), 1, output); @@ -170,7 +165,7 @@ void ExtractGameobjectModels() fwrite(vertices, sizeof(float), numVerts * 3, output); } - + fclose(output); delete[] indices; delete[] vertices; @@ -254,11 +249,14 @@ bool HandleArgs(int argc, char** argv, uint32& threads, std::set& mapLis param = argv[++i]; if (!param) return false; - std::string maps = std::string(param); - Tokenizer tokens(maps, ','); - for (Tokenizer::const_iterator itr = tokens.begin(); itr != tokens.end(); ++itr) - mapList.insert(atoi(*itr)); + char* copy = strdup(param); + char* token = strtok(copy, ","); + while (token) + { + mapList.insert(atoi(token)); + token = strtok(NULL, ","); + } printf("Extracting only provided list of maps (%u).\n", uint32(mapList.size())); } @@ -337,7 +335,7 @@ int main(int argc, char* argv[]) uint32 threads = 4, extractFlags = 0; std::set mapIds; bool debug = false; - + if (!HandleArgs(argc, argv, threads, mapIds, debug, extractFlags)) { PrintUsage(); @@ -425,6 +423,6 @@ int main(int argc, char* argv[]) printf("Found!"); } - + return 0; } diff --git a/src/tools/mesh_extractor/TileBuilder.cpp b/src/tools/mesh_extractor/TileBuilder.cpp index 4a14cbbd51d..9bb9b11619f 100644 --- a/src/tools/mesh_extractor/TileBuilder.cpp +++ b/src/tools/mesh_extractor/TileBuilder.cpp @@ -10,7 +10,7 @@ #include "RecastAlloc.h" #include "DetourNavMeshBuilder.h" -#include "ace/Synch.h" +#include TileBuilder::TileBuilder(ContinentBuilder* _cBuilder, std::string world, int x, int y, uint32 mapId) : World(world), X(x), Y(y), MapId(mapId), _Geometry(NULL), DataSize(0), cBuilder(_cBuilder) @@ -118,7 +118,7 @@ uint8* TileBuilder::Build(bool dbg, dtNavMeshParams& navMeshParams) fprintf(debug, "f %i %i %i\n", _Geometry->Triangles[i].V0 + 1, _Geometry->Triangles[i].V1 + 1, _Geometry->Triangles[i].V2 + 1); fclose(debug); } - + uint32 numVerts = _Geometry->Vertices.size(); uint32 numTris = _Geometry->Triangles.size(); float* vertices; @@ -128,13 +128,13 @@ uint8* TileBuilder::Build(bool dbg, dtNavMeshParams& navMeshParams) _Geometry->Vertices.clear(); _Geometry->Triangles.clear(); - + rcVcopy(Config.bmin, cBuilder->bmin); rcVcopy(Config.bmax, cBuilder->bmax); - + // this sets the dimensions of the heightfield - should maybe happen before border padding rcCalcGridSize(Config.bmin, Config.bmax, Config.cs, &Config.width, &Config.height); - + // Initialize per tile config. rcConfig tileCfg = Config; tileCfg.width = Config.tileSize + Config.borderSize * 2; @@ -154,8 +154,8 @@ uint8* TileBuilder::Build(bool dbg, dtNavMeshParams& navMeshParams) tileCfg.bmin[2] = Config.bmin[2] + float(y * Config.tileSize - Config.borderSize) * Config.cs; tileCfg.bmax[0] = Config.bmin[0] + float((x + 1) * Config.tileSize + Config.borderSize) * Config.cs; tileCfg.bmax[2] = Config.bmin[2] + float((y + 1) * Config.tileSize + Config.borderSize) * Config.cs; - - + + rcHeightfield* hf = rcAllocHeightfield(); rcCreateHeightfield(Context, *hf, tileCfg.width, tileCfg.height, tileCfg.bmin, tileCfg.bmax, tileCfg.cs, tileCfg.ch); rcClearUnwalkableTriangles(Context, tileCfg.walkableSlopeAngle, vertices, numVerts, triangles, numTris, areas); @@ -198,7 +198,7 @@ uint8* TileBuilder::Build(bool dbg, dtNavMeshParams& navMeshParams) // Free memory rcFreeCompactHeightfield(chf); rcFreeContourSet(cset); - + pmmerge[nmerge] = pmesh; dmmerge[nmerge] = dmesh; ++nmerge; @@ -207,15 +207,15 @@ uint8* TileBuilder::Build(bool dbg, dtNavMeshParams& navMeshParams) rcPolyMesh* pmesh = rcAllocPolyMesh(); rcMergePolyMeshes(Context, pmmerge, nmerge, *pmesh); - + rcPolyMeshDetail* dmesh = rcAllocPolyMeshDetail(); rcMergePolyMeshDetails(Context, dmmerge, nmerge, *dmesh); - + delete[] pmmerge; delete[] dmmerge; - + printf("[%02i,%02i] Meshes merged!\n", X, Y); - + // Remove padding from the polymesh data. (Remove this odditity) for (int i = 0; i < pmesh->nverts; ++i) { @@ -262,10 +262,10 @@ uint8* TileBuilder::Build(bool dbg, dtNavMeshParams& navMeshParams) rcVcopy(params.bmin, cBuilder->bmin); rcVcopy(params.bmax, cBuilder->bmax); - + // Offmesh-connection settings params.offMeshConCount = 0; // none for now - + params.tileSize = Constants::VertexPerMap; if (!params.polyCount || !params.polys || Constants::TilesPerMap * Constants::TilesPerMap == params.polyCount) @@ -281,7 +281,7 @@ uint8* TileBuilder::Build(bool dbg, dtNavMeshParams& navMeshParams) delete vertices; return NULL; } - + int navDataSize; uint8* navData; printf("[%02i,%02i] Creating the navmesh with %i vertices, %i polys, %i triangles!\n", X, Y, pmesh->nverts, pmesh->npolys, dmesh->ntris); diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index e7380ed8142..41ea33e6157 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -7,12 +7,16 @@ #include "G3D/Matrix4.h" #include "DetourNavMesh.h" -#include "Common.h" +#include "Define.h" #include "Constants.h" +#include + struct WorldModelDefinition; class DoodadInstance; +#define ASSERT(assertion) { if (!(assertion)) { ACE_Stack_Trace st; fprintf(stderr, "\n%s:%i in %s ASSERTION FAILED:\n %s\n", __FILE__, __LINE__, __FUNCTION__, #assertion, st.c_str()); *((volatile int*)NULL) = 0; } } + struct Vector3 { Vector3() {} diff --git a/src/tools/mesh_extractor/WorldModelHandler.cpp b/src/tools/mesh_extractor/WorldModelHandler.cpp index 6ce41807492..ecfff4e97d4 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.cpp +++ b/src/tools/mesh_extractor/WorldModelHandler.cpp @@ -3,7 +3,7 @@ #include "Chunk.h" #include "Cache.h" #include "Model.h" -#include "Common.h" +#include "Define.h" #include "G3D/Matrix4.h" #include diff --git a/src/tools/mesh_extractor/WorldModelHandler.h b/src/tools/mesh_extractor/WorldModelHandler.h index cccedfa60fb..29715ded696 100644 --- a/src/tools/mesh_extractor/WorldModelHandler.h +++ b/src/tools/mesh_extractor/WorldModelHandler.h @@ -1,6 +1,6 @@ #ifndef WMODEL_HNDL_H #define WMODEL_HNDL_H -#include "Common.h" +#include "Define.h" #include "Utils.h" #include "WorldModelRoot.h" #include "ObjectDataHandler.h" From 864a85b8fc6d086bc7af7fddd22f510f1b662e10 Mon Sep 17 00:00:00 2001 From: Nay Date: Tue, 22 Jan 2013 15:03:26 +0000 Subject: [PATCH 142/204] DB/mmaps: Rename mmap commands related sql --- sql/updates/world/2012_12_30_00_world_commands.sql | 4 ---- ...00_world_command.sql => 2013_01_22_00_world_command.sql} | 6 ++++-- 2 files changed, 4 insertions(+), 6 deletions(-) delete mode 100644 sql/updates/world/2012_12_30_00_world_commands.sql rename sql/updates/world/{2012_09_06_00_world_command.sql => 2013_01_22_00_world_command.sql} (71%) diff --git a/sql/updates/world/2012_12_30_00_world_commands.sql b/sql/updates/world/2012_12_30_00_world_commands.sql deleted file mode 100644 index fffd1a95cb5..00000000000 --- a/sql/updates/world/2012_12_30_00_world_commands.sql +++ /dev/null @@ -1,4 +0,0 @@ -DELETE FROM `command` WHERE `name` LIKE 'disable add mmap' OR `name` LIKE 'disable remove mmap'; -INSERT INTO `command` (`name`, `security`, `help`) VALUES -('disable add mmap', '3', 'Syntax: .disable add mmap $entry $flag $comment'), -('disable remove mmap', '3', 'Syntax: .disable remove mmap $entry'); diff --git a/sql/updates/world/2012_09_06_00_world_command.sql b/sql/updates/world/2013_01_22_00_world_command.sql similarity index 71% rename from sql/updates/world/2012_09_06_00_world_command.sql rename to sql/updates/world/2013_01_22_00_world_command.sql index e60c1644e05..6c89951d036 100644 --- a/sql/updates/world/2012_09_06_00_world_command.sql +++ b/sql/updates/world/2013_01_22_00_world_command.sql @@ -1,9 +1,11 @@ DELETE FROM `command` WHERE `name`='mmap' OR `name` LIKE 'mmap%'; +DELETE FROM `command` WHERE `name` LIKE 'disable add mmap' OR `name` LIKE 'disable remove mmap'; INSERT INTO `command` (`name`, `security`, `help`) VALUES ('mmap', 3, 'Syntax: Syntax: .mmaps $subcommand Type .mmaps to see the list of possible subcommands or .help mmaps $subcommand to see info on subcommands'), ('mmap path', 3, 'Syntax: .mmap path to calculate and show a path to current select unit'), ('mmap loc', 3, 'Syntax: .mmap loc to print on which tile one is'), ('mmap loadedtiles', 3, 'Syntax: .mmap loadedtiles to show which tiles are currently loaded'), ('mmap stats', 3, 'Syntax: .mmap stats to show information about current state of mmaps'), -('mmap testarea', 3, 'Syntax: .mmap testarea to calculate paths for all nearby npcs to player'); - +('mmap testarea', 3, 'Syntax: .mmap testarea to calculate paths for all nearby npcs to player'), +('disable add mmap', '3', 'Syntax: .disable add mmap $entry $flag $comment'), +('disable remove mmap', '3', 'Syntax: .disable remove mmap $entry'); From 259a29c0935e566dd63d8c03360c5cd19b4ffe52 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 22 Jan 2013 18:40:32 +0100 Subject: [PATCH 143/204] Tools/Extractors: Mmap extractors no longer depend on shared and MySQL libraries --- cmake/showoptions.cmake | 1 + .../collision/Management/VMapManager2.cpp | 12 +-- src/server/collision/Maps/MapTree.cpp | 21 ++--- .../collision/Models/GameObjectModel.cpp | 13 +-- src/server/collision/VMapDefinitions.h | 12 +++ src/server/shared/Debugging/Errors.h | 2 +- src/tools/map_extractor/CMakeLists.txt | 19 ++-- src/tools/map_extractor/mpq_libmpq.cpp | 2 +- src/tools/map_extractor/mpq_libmpq04.h | 3 - src/tools/mesh_extractor/CMakeLists.txt | 8 +- src/tools/mesh_extractor/MPQ.cpp | 2 +- src/tools/mmaps_generator/CMakeLists.txt | 45 ++++----- .../mmaps_generator/IntermediateValues.cpp | 2 +- src/tools/mmaps_generator/MapBuilder.cpp | 55 ++++++----- src/tools/mmaps_generator/MapBuilder.h | 10 +- src/tools/mmaps_generator/PathCommon.h | 43 ++++++++- src/tools/mmaps_generator/PathGenerator.cpp | 3 +- src/tools/mmaps_generator/TerrainBuilder.cpp | 92 +++++++++++++++---- src/tools/mmaps_generator/TerrainBuilder.h | 11 +-- src/tools/mmaps_generator/VMapExtensions.cpp | 6 +- src/tools/vmap4_assembler/CMakeLists.txt | 2 - src/tools/vmap4_extractor/CMakeLists.txt | 25 ++--- src/tools/vmap4_extractor/mpq_libmpq.cpp | 2 +- src/tools/vmap4_extractor/mpq_libmpq04.h | 3 - src/tools/vmap4_extractor/wdtfile.cpp | 2 +- 25 files changed, 220 insertions(+), 176 deletions(-) diff --git a/cmake/showoptions.cmake b/cmake/showoptions.cmake index 47ad7b0889b..d3415e4e204 100644 --- a/cmake/showoptions.cmake +++ b/cmake/showoptions.cmake @@ -34,6 +34,7 @@ endif() if( TOOLS ) message("* Build map/vmap tools : Yes") + add_definitions(-DNO_CORE_FUNCS) else() message("* Build map/vmap tools : No (default)") endif() diff --git a/src/server/collision/Management/VMapManager2.cpp b/src/server/collision/Management/VMapManager2.cpp index 5e3741ca753..8a1bd346957 100644 --- a/src/server/collision/Management/VMapManager2.cpp +++ b/src/server/collision/Management/VMapManager2.cpp @@ -24,13 +24,13 @@ #include "MapTree.h" #include "ModelInstance.h" #include "WorldModel.h" -#include "VMapDefinitions.h" -#include "Log.h" #include #include #include #include "DisableMgr.h" #include "DBCStores.h" +#include "Log.h" +#include "VMapDefinitions.h" using G3D::Vector3; @@ -257,11 +257,11 @@ namespace VMAP WorldModel* worldmodel = new WorldModel(); if (!worldmodel->readFile(basepath + filename + ".vmo")) { - sLog->outError(LOG_FILTER_GENERAL, "VMapManager2: could not load '%s%s.vmo'", basepath.c_str(), filename.c_str()); + VMAP_ERROR_LOG(LOG_FILTER_GENERAL, "VMapManager2: could not load '%s%s.vmo'", basepath.c_str(), filename.c_str()); delete worldmodel; return NULL; } - sLog->outDebug(LOG_FILTER_MAPS, "VMapManager2: loading file '%s%s'", basepath.c_str(), filename.c_str()); + VMAP_DEBUG_LOG(LOG_FILTER_MAPS, "VMapManager2: loading file '%s%s'", basepath.c_str(), filename.c_str()); model = iLoadedModelFiles.insert(std::pair(filename, ManagedModel())).first; model->second.setModel(worldmodel); } @@ -277,12 +277,12 @@ namespace VMAP ModelFileMap::iterator model = iLoadedModelFiles.find(filename); if (model == iLoadedModelFiles.end()) { - sLog->outError(LOG_FILTER_GENERAL, "VMapManager2: trying to unload non-loaded file '%s'", filename.c_str()); + VMAP_ERROR_LOG(LOG_FILTER_GENERAL, "VMapManager2: trying to unload non-loaded file '%s'", filename.c_str()); return; } if (model->second.decRefCount() == 0) { - sLog->outDebug(LOG_FILTER_MAPS, "VMapManager2: unloading file '%s'", filename.c_str()); + VMAP_DEBUG_LOG(LOG_FILTER_MAPS, "VMapManager2: unloading file '%s'", filename.c_str()); delete model->second.getModel(); iLoadedModelFiles.erase(model); } diff --git a/src/server/collision/Maps/MapTree.cpp b/src/server/collision/Maps/MapTree.cpp index 5f4e2b6aa8b..e3cd158709c 100644 --- a/src/server/collision/Maps/MapTree.cpp +++ b/src/server/collision/Maps/MapTree.cpp @@ -27,12 +27,6 @@ #include #include -#ifndef NO_CORE_FUNCS - #include "Errors.h" -#else - #define ASSERT(x) -#endif - using G3D::Vector3; namespace VMAP @@ -277,7 +271,7 @@ namespace VMAP bool StaticMapTree::InitMap(const std::string &fname, VMapManager2* vm) { - sLog->outDebug(LOG_FILTER_MAPS, "StaticMapTree::InitMap() : initializing StaticMapTree '%s'", fname.c_str()); + VMAP_DEBUG_LOG(LOG_FILTER_MAPS, "StaticMapTree::InitMap() : initializing StaticMapTree '%s'", fname.c_str()); bool success = true; std::string fullname = iBasePath + fname; FILE* rf = fopen(fullname.c_str(), "rb"); @@ -310,7 +304,7 @@ namespace VMAP if (!iIsTiled && ModelSpawn::readFromFile(rf, spawn)) { WorldModel* model = vm->acquireModelInstance(iBasePath, spawn.name); - sLog->outDebug(LOG_FILTER_MAPS, "StaticMapTree::InitMap() : loading %s", spawn.name.c_str()); + VMAP_DEBUG_LOG(LOG_FILTER_MAPS, "StaticMapTree::InitMap() : loading %s", spawn.name.c_str()); if (model) { // assume that global model always is the first and only tree value (could be improved...) @@ -320,7 +314,7 @@ namespace VMAP else { success = false; - sLog->outError(LOG_FILTER_GENERAL, "StaticMapTree::InitMap() : could not acquire WorldModel pointer for '%s'", spawn.name.c_str()); + VMAP_ERROR_LOG(LOG_FILTER_GENERAL, "StaticMapTree::InitMap() : could not acquire WorldModel pointer for '%s'", spawn.name.c_str()); } } @@ -356,7 +350,7 @@ namespace VMAP } if (!iTreeValues) { - sLog->outError(LOG_FILTER_GENERAL, "StaticMapTree::LoadMapTile() : tree has not been initialized [%u, %u]", tileX, tileY); + VMAP_ERROR_LOG(LOG_FILTER_GENERAL, "StaticMapTree::LoadMapTile() : tree has not been initialized [%u, %u]", tileX, tileY); return false; } bool result = true; @@ -382,7 +376,7 @@ namespace VMAP // acquire model instance WorldModel* model = vm->acquireModelInstance(iBasePath, spawn.name); if (!model) - sLog->outError(LOG_FILTER_GENERAL, "StaticMapTree::LoadMapTile() : could not acquire WorldModel pointer [%u, %u]", tileX, tileY); + VMAP_ERROR_LOG(LOG_FILTER_GENERAL, "StaticMapTree::LoadMapTile() : could not acquire WorldModel pointer [%u, %u]", tileX, tileY); // update tree uint32 referencedVal; @@ -432,7 +426,7 @@ namespace VMAP loadedTileMap::iterator tile = iLoadedTiles.find(tileID); if (tile == iLoadedTiles.end()) { - sLog->outError(LOG_FILTER_GENERAL, "StaticMapTree::UnloadMapTile() : trying to unload non-loaded tile - Map:%u X:%u Y:%u", iMapID, tileX, tileY); + VMAP_ERROR_LOG(LOG_FILTER_GENERAL, "StaticMapTree::UnloadMapTile() : trying to unload non-loaded tile - Map:%u X:%u Y:%u", iMapID, tileX, tileY); return; } if (tile->second) // file associated with tile @@ -466,7 +460,7 @@ namespace VMAP else { if (!iLoadedSpawns.count(referencedNode)) - sLog->outError(LOG_FILTER_GENERAL, "StaticMapTree::UnloadMapTile() : trying to unload non-referenced model '%s' (ID:%u)", spawn.name.c_str(), spawn.ID); + VMAP_ERROR_LOG(LOG_FILTER_GENERAL, "StaticMapTree::UnloadMapTile() : trying to unload non-referenced model '%s' (ID:%u)", spawn.name.c_str(), spawn.ID); else if (--iLoadedSpawns[referencedNode] == 0) { iTreeValues[referencedNode].setUnloaded(); @@ -480,5 +474,4 @@ namespace VMAP } iLoadedTiles.erase(tile); } - } diff --git a/src/server/collision/Models/GameObjectModel.cpp b/src/server/collision/Models/GameObjectModel.cpp index 0ecf02648f9..54283389387 100644 --- a/src/server/collision/Models/GameObjectModel.cpp +++ b/src/server/collision/Models/GameObjectModel.cpp @@ -34,8 +34,6 @@ using G3D::Vector3; using G3D::Ray; using G3D::AABox; -#ifndef NO_CORE_FUNCS - struct GameobjectModelData { GameobjectModelData(const std::string& name_, const AABox& box) : @@ -54,7 +52,7 @@ void LoadGameObjectModelList() FILE* model_list_file = fopen((sWorld->GetDataPath() + "vmaps/" + VMAP::GAMEOBJECT_MODELS).c_str(), "rb"); if (!model_list_file) { - sLog->outError(LOG_FILTER_GENERAL, "Unable to open '%s' file.", VMAP::GAMEOBJECT_MODELS); + VMAP_ERROR_LOG(LOG_FILTER_GENERAL, "Unable to open '%s' file.", VMAP::GAMEOBJECT_MODELS); return; } @@ -73,7 +71,7 @@ void LoadGameObjectModelList() || fread(&v1, sizeof(Vector3), 1, model_list_file) != 1 || fread(&v2, sizeof(Vector3), 1, model_list_file) != 1) { - sLog->outError(LOG_FILTER_GENERAL, "File '%s' seems to be corrupted!", VMAP::GAMEOBJECT_MODELS); + VMAP_ERROR_LOG(LOG_FILTER_GENERAL, "File '%s' seems to be corrupted!", VMAP::GAMEOBJECT_MODELS); break; } @@ -84,8 +82,7 @@ void LoadGameObjectModelList() } fclose(model_list_file); - sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u GameObject models in %u ms", uint32(model_list.size()), GetMSTimeDiffToNow(oldMSTime)); - + VMAP_INFO_LOG(LOG_FILTER_SERVER_LOADING, ">> Loaded %u GameObject models in %u ms", uint32(model_list.size()), GetMSTimeDiffToNow(oldMSTime)); } GameObjectModel::~GameObjectModel() @@ -104,7 +101,7 @@ bool GameObjectModel::initialize(const GameObject& go, const GameObjectDisplayIn // ignore models with no bounds if (mdl_box == G3D::AABox::zero()) { - sLog->outError(LOG_FILTER_GENERAL, "GameObject model %s has zero bounds, loading skipped", it->second.name.c_str()); + VMAP_ERROR_LOG(LOG_FILTER_GENERAL, "GameObject model %s has zero bounds, loading skipped", it->second.name.c_str()); return false; } @@ -184,5 +181,3 @@ bool GameObjectModel::intersectRay(const G3D::Ray& ray, float& MaxDist, bool Sto } return hit; } - -#endif diff --git a/src/server/collision/VMapDefinitions.h b/src/server/collision/VMapDefinitions.h index 609d00cd00f..56084389ad6 100644 --- a/src/server/collision/VMapDefinitions.h +++ b/src/server/collision/VMapDefinitions.h @@ -31,4 +31,16 @@ namespace VMAP // defined in TileAssembler.cpp currently... bool readChunk(FILE* rf, char *dest, const char *compare, uint32 len); } + +// Set of helper macros for extractors (VMAP and MMAP) +#ifndef NO_CORE_FUNCS +#define VMAP_ERROR_LOG(FILTER, ...) sLog->outError(FILTER, __VA_ARGS__) +#define VMAP_DEBUG_LOG(FILTER, ...) sLog->outDebug(FILTER, __VA_ARGS__) +#define VMAP_INFO_LOG(FILTER, ...) sLog->outInfo(FILTER, __VA_ARGS__) +#else +#define VMAP_ERROR_LOG(FILTER, ...) printf(__VA_ARGS__) +#define VMAP_DEBUG_LOG(FILTER, ...) printf(__VA_ARGS__) +#define VMAP_INFO_LOG(FILTER, ...) printf(__VA_ARGS__) +#endif + #endif diff --git a/src/server/shared/Debugging/Errors.h b/src/server/shared/Debugging/Errors.h index 3d10740f149..10e94634e9a 100644 --- a/src/server/shared/Debugging/Errors.h +++ b/src/server/shared/Debugging/Errors.h @@ -24,7 +24,7 @@ #include #include -#define WPAssert(assertion) { if (!(assertion)) { ACE_Stack_Trace st; sLog->outError(LOG_FILTER_GENERAL, "\n%s:%i in %s ASSERTION FAILED:\n %s\n%s\n", __FILE__, __LINE__, __FUNCTION__, #assertion, st.c_str()); *((volatile int*)NULL) = 0; } } +#define WPAssert(assertion) { if (!(assertion)) { ACE_Stack_Trace st; fprintf(stderr, "\n%s:%i in %s ASSERTION FAILED:\n %s\n%s\n", __FILE__, __LINE__, __FUNCTION__, #assertion, st.c_str()); *((volatile int*)NULL) = 0; } } #define WPError(assertion, errmsg) { if (!(assertion)) { sLog->outError(LOG_FILTER_GENERAL, "%\n%s:%i in %s ERROR:\n %s\n", __FILE__, __LINE__, __FUNCTION__, (char *)errmsg); *((volatile int*)NULL) = 0; } } #define WPWarning(assertion, errmsg) { if (!(assertion)) { sLog->outError(LOG_FILTER_GENERAL, "\n%s:%i in %s WARNING:\n %s\n", __FILE__, __LINE__, __FUNCTION__, (char *)errmsg); } } #define WPFatal(assertion, errmsg) { if (!(assertion)) { sLog->outError(LOG_FILTER_GENERAL, "\n%s:%i in %s FATAL ERROR:\n %s\n", __FILE__, __LINE__, __FUNCTION__, (char *)errmsg); ACE_OS::sleep(10); *((volatile int*)NULL) = 0; } } diff --git a/src/tools/map_extractor/CMakeLists.txt b/src/tools/map_extractor/CMakeLists.txt index 9fb8d5713d7..ea073456680 100644 --- a/src/tools/map_extractor/CMakeLists.txt +++ b/src/tools/map_extractor/CMakeLists.txt @@ -11,23 +11,22 @@ file(GLOB_RECURSE sources *.cpp *.h) -if( UNIX ) - include_directories ( +set(include_Dirs ${CMAKE_SOURCE_DIR}/src/server/shared ${CMAKE_SOURCE_DIR}/dep/libmpq ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/loadlib - ) -elseif( WIN32 ) - include_directories ( - ${CMAKE_SOURCE_DIR}/src/server/shared - ${CMAKE_SOURCE_DIR}/dep/libmpq +) + +if( WIN32 ) + set(include_Dirs + ${include_Dirs} ${CMAKE_SOURCE_DIR}/dep/libmpq/win - ${CMAKE_CURRENT_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/loadlib ) endif() +include_directories(${include_Dirs}) + add_executable(mapextractor ${sources} ) @@ -38,8 +37,6 @@ target_link_libraries(mapextractor ${ZLIB_LIBRARIES} ) -add_dependencies(mapextractor mpq) - if( UNIX ) install(TARGETS mapextractor DESTINATION bin) elseif( WIN32 ) diff --git a/src/tools/map_extractor/mpq_libmpq.cpp b/src/tools/map_extractor/mpq_libmpq.cpp index 81aa8cc2894..1c1a12e7b85 100644 --- a/src/tools/map_extractor/mpq_libmpq.cpp +++ b/src/tools/map_extractor/mpq_libmpq.cpp @@ -79,7 +79,7 @@ size_t MPQFile::read(void* dest, size_t bytes) if (eof) return 0; size_t rpos = pointer + bytes; - if (rpos > size) { + if (rpos > size_t(size)) { bytes = size - pointer; eof = true; } diff --git a/src/tools/map_extractor/mpq_libmpq04.h b/src/tools/map_extractor/mpq_libmpq04.h index 89f715e9e87..9f0163067c4 100644 --- a/src/tools/map_extractor/mpq_libmpq04.h +++ b/src/tools/map_extractor/mpq_libmpq04.h @@ -1,6 +1,3 @@ -#define _CRT_SECURE_NO_DEPRECATE -#define _CRT_SECURE_NO_WARNINGS - #ifndef MPQ_H #define MPQ_H diff --git a/src/tools/mesh_extractor/CMakeLists.txt b/src/tools/mesh_extractor/CMakeLists.txt index 1b5d1564b71..9ed8472051d 100644 --- a/src/tools/mesh_extractor/CMakeLists.txt +++ b/src/tools/mesh_extractor/CMakeLists.txt @@ -9,9 +9,7 @@ # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -file(GLOB_RECURSE sources *.cpp *.h) - -add_definitions(-DNO_CORE_FUNCS) +file(GLOB_RECURSE meshExtract_Sources *.cpp *.h) set(include_Base ${CMAKE_BINARY_DIR} @@ -33,9 +31,7 @@ endif() include_directories(${include_Base}) -add_executable(MeshExtractor - ${sources} -) +add_executable(MeshExtractor ${meshExtract_Sources}) target_link_libraries(MeshExtractor g3dlib diff --git a/src/tools/mesh_extractor/MPQ.cpp b/src/tools/mesh_extractor/MPQ.cpp index b7be181594d..18a9eb0f0e3 100644 --- a/src/tools/mesh_extractor/MPQ.cpp +++ b/src/tools/mesh_extractor/MPQ.cpp @@ -77,7 +77,7 @@ size_t MPQFile::Read(void* dest, size_t bytes) return 0; size_t rpos = pointer + bytes; - if (rpos > size) { + if (rpos > size_t(size)) { bytes = size - pointer; eof = true; } diff --git a/src/tools/mmaps_generator/CMakeLists.txt b/src/tools/mmaps_generator/CMakeLists.txt index 229a2cd808f..99492abf8ee 100644 --- a/src/tools/mmaps_generator/CMakeLists.txt +++ b/src/tools/mmaps_generator/CMakeLists.txt @@ -8,17 +8,11 @@ # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -file(GLOB_RECURSE sources *.cpp *.h) +file(GLOB_RECURSE mmap_gen_sources *.cpp *.h) -# definitions -add_definitions(-DNO_CORE_FUNCS) -add_definitions(-DDEBUG) -add_definitions(-DNO_vsnprintf) - -include_directories( +set(mmap_gen_Includes ${CMAKE_BINARY_DIR} ${ACE_INCLUDE_DIR} - ${MYSQL_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/dep/libmpq ${CMAKE_SOURCE_DIR}/dep/zlib ${CMAKE_SOURCE_DIR}/dep/bzip2 @@ -26,20 +20,6 @@ include_directories( ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Recast ${CMAKE_SOURCE_DIR}/dep/recastnavigation/Detour ${CMAKE_SOURCE_DIR}/src/server/shared - ${CMAKE_SOURCE_DIR}/src/server/shared/Database - ${CMAKE_SOURCE_DIR}/src/server/shared/Database/Implementation - ${CMAKE_SOURCE_DIR}/src/server/shared/Debugging - ${CMAKE_SOURCE_DIR}/src/server/shared/Threading - ${CMAKE_SOURCE_DIR}/src/server/shared/Logging - ${CMAKE_SOURCE_DIR}/src/server/shared/Utilities - ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic - ${CMAKE_SOURCE_DIR}/src/server/shared/Dynamic/LinkedReference - ${CMAKE_SOURCE_DIR}/src/server/game/Maps - ${CMAKE_SOURCE_DIR}/src/server/game/DataStores - ${CMAKE_SOURCE_DIR}/src/server/game/Movement/Waypoints - ${CMAKE_SOURCE_DIR}/src/server/game/Grids - ${CMAKE_SOURCE_DIR}/src/server/game/Grids/Cells - ${CMAKE_SOURCE_DIR}/src/server/game/Miscellaneous ${CMAKE_SOURCE_DIR}/src/server/game/Conditions ${CMAKE_SOURCE_DIR}/src/server/collision ${CMAKE_SOURCE_DIR}/src/server/collision/Management @@ -47,18 +27,25 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/server/collision/Models ) -add_executable(mmaps_generator ${sources}) +if( WIN32 ) + set(mmap_gen_Includes + ${mmap_gen_Includes} + ${CMAKE_SOURCE_DIR}/dep/libmpq/win + ) +endif() + +include_directories(${mmap_gen_Includes}) + +add_executable(mmaps_generator ${mmap_gen_sources}) target_link_libraries(mmaps_generator - ${MYSQL_LIBRARY} + collision + g3dlib + Recast + Detour ${ACE_LIBRARY} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} - Recast - Detour - collision - g3dlib - shared ) if( UNIX ) diff --git a/src/tools/mmaps_generator/IntermediateValues.cpp b/src/tools/mmaps_generator/IntermediateValues.cpp index 6fad96887a2..a490273ad80 100644 --- a/src/tools/mmaps_generator/IntermediateValues.cpp +++ b/src/tools/mmaps_generator/IntermediateValues.cpp @@ -37,7 +37,7 @@ namespace MMAP printf("%sWriting debug output... \r", tileString); - string name("meshes/%03u%02i%02i."); + std::string name("meshes/%03u%02i%02i."); #define DEBUG_WRITE(fileExtension,data) \ do { \ diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 9e6acd71a72..a62011ddfff 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -21,29 +21,34 @@ #include "MapTree.h" #include "ModelInstance.h" -#include "LoginDatabase.h" #include "DetourNavMeshBuilder.h" #include "DetourNavMesh.h" #include "DetourCommon.h" -// These make the linker happy. -LoginDatabaseWorkerPool LoginDatabase; -uint32 GetLiquidFlags(uint32 /*liquidType*/) -{ - return 0; -} - #include "DisableMgr.h" +#include + +uint32 GetLiquidFlags(uint32 /*liquidType*/) { return 0; } namespace DisableMgr { - bool IsDisabledFor(DisableType /*type*/, uint32 /*entry*/, Unit const* /*unit*/, uint8 /*flags*/) - { - return 0; - } + bool IsDisabledFor(DisableType /*type*/, uint32 /*entry*/, Unit const* /*unit*/, uint8 /*flags*/ /*= 0*/) { return false; } } -using namespace VMAP; +#define MMAP_MAGIC 0x4d4d4150 // 'MMAP' +#define MMAP_VERSION 3 + +struct MmapTileHeader +{ + uint32 mmapMagic; + uint32 dtVersion; + uint32 mmapVersion; + uint32 size; + bool usesLiquids : 1; + + MmapTileHeader() : mmapMagic(MMAP_MAGIC), dtVersion(DT_NAVMESH_VERSION), + mmapVersion(MMAP_VERSION), size(0), usesLiquids(true) {} +}; namespace MMAP { @@ -83,7 +88,7 @@ namespace MMAP /**************************************************************************/ void MapBuilder::discoverTiles() { - vector files; + std::vector files; uint32 mapID, tileX, tileY, tileID, count = 0; char filter[12]; @@ -94,7 +99,7 @@ namespace MMAP mapID = uint32(atoi(files[i].substr(0,3).c_str())); if (m_tiles.find(mapID) == m_tiles.end()) { - m_tiles.insert(pair*>(mapID, new set)); + m_tiles.insert(std::pair*>(mapID, new std::set)); count++; } } @@ -104,7 +109,7 @@ namespace MMAP for (uint32 i = 0; i < files.size(); ++i) { mapID = uint32(atoi(files[i].substr(0,3).c_str())); - m_tiles.insert(pair*>(mapID, new set)); + m_tiles.insert(std::pair*>(mapID, new std::set)); count++; } printf("found %u.\n", count); @@ -113,7 +118,7 @@ namespace MMAP printf("Discovering tiles... "); for (TileList::iterator itr = m_tiles.begin(); itr != m_tiles.end(); ++itr) { - set* tiles = (*itr).second; + std::set* tiles = (*itr).second; mapID = (*itr).first; sprintf(filter, "%03u*.vmtile", mapID); @@ -146,14 +151,14 @@ namespace MMAP } /**************************************************************************/ - set* MapBuilder::getTileList(uint32 mapID) + std::set* MapBuilder::getTileList(uint32 mapID) { TileList::iterator itr = m_tiles.find(mapID); if (itr != m_tiles.end()) return (*itr).second; - set* tiles = new set(); - m_tiles.insert(pair*>(mapID, tiles)); + std::set* tiles = new std::set(); + m_tiles.insert(std::pair*>(mapID, tiles)); return tiles; } @@ -318,7 +323,7 @@ namespace MMAP { printf("[Thread %u] Building map %03u:\n", uint32(ACE_Thread::self()), mapID); - set* tiles = getTileList(mapID); + std::set* tiles = getTileList(mapID); // make sure we process maps which don't have tiles if (!tiles->size()) @@ -346,7 +351,7 @@ namespace MMAP // now start building mmtiles for each tile printf("[Map %i] We have %u tiles. \n", mapID, (unsigned int)tiles->size()); - for (set::iterator it = tiles->begin(); it != tiles->end(); ++it) + for (std::set::iterator it = tiles->begin(); it != tiles->end(); ++it) { uint32 tileX, tileY; @@ -407,7 +412,7 @@ namespace MMAP /**************************************************************************/ void MapBuilder::buildNavMesh(uint32 mapID, dtNavMesh* &navMesh) { - set* tiles = getTileList(mapID); + std::set* tiles = getTileList(mapID); // old code for non-statically assigned bitmask sizes: ///*** calculate number of bits needed to store tiles & polys ***/ @@ -423,9 +428,9 @@ namespace MMAP /*** calculate bounds of map ***/ uint32 tileXMin = 64, tileYMin = 64, tileXMax = 0, tileYMax = 0, tileX, tileY; - for (set::iterator it = tiles->begin(); it != tiles->end(); ++it) + for (std::set::iterator it = tiles->begin(); it != tiles->end(); ++it) { - StaticMapTree::unpackTileID((*it), tileX, tileY); + StaticMapTree::unpackTileID(*it, tileX, tileY); if (tileX > tileXMax) tileXMax = tileX; diff --git a/src/tools/mmaps_generator/MapBuilder.h b/src/tools/mmaps_generator/MapBuilder.h index c083e0b680a..ea9636b3cc3 100644 --- a/src/tools/mmaps_generator/MapBuilder.h +++ b/src/tools/mmaps_generator/MapBuilder.h @@ -26,22 +26,18 @@ #include "TerrainBuilder.h" #include "IntermediateValues.h" -#include "IVMapManager.h" -#include "WorldModel.h" - #include "Recast.h" #include "DetourNavMesh.h" -#include "ace/Task.h" +#include -using namespace std; using namespace VMAP; // G3D namespace typedefs conflicts with ACE typedefs namespace MMAP { - typedef map*> TileList; + typedef std::map*> TileList; struct Tile { Tile() : chf(NULL), solid(NULL), cset(NULL), pmesh(NULL), dmesh(NULL) {} @@ -87,7 +83,7 @@ namespace MMAP private: // detect maps and tiles void discoverTiles(); - set* getTileList(uint32 mapID); + std::set* getTileList(uint32 mapID); void buildNavMesh(uint32 mapID, dtNavMesh* &navMesh); diff --git a/src/tools/mmaps_generator/PathCommon.h b/src/tools/mmaps_generator/PathCommon.h index 413f2b8735d..3e06ff58410 100644 --- a/src/tools/mmaps_generator/PathCommon.h +++ b/src/tools/mmaps_generator/PathCommon.h @@ -21,6 +21,7 @@ #include #include +#include #include "Define.h" @@ -33,7 +34,19 @@ #include #endif -using namespace std; +enum NavTerrain +{ + NAV_EMPTY = 0x00, + NAV_GROUND = 0x01, + NAV_MAGMA = 0x02, + NAV_SLIME = 0x04, + NAV_WATER = 0x08, + NAV_UNUSED1 = 0x10, + NAV_UNUSED2 = 0x20, + NAV_UNUSED3 = 0x40, + NAV_UNUSED4 = 0x80 + // we only have 8 bits +}; namespace MMAP { @@ -75,12 +88,12 @@ namespace MMAP LISTFILE_OK = 1 }; - inline ListFilesResult getDirContents(vector &fileList, string dirpath = ".", string filter = "*") + inline ListFilesResult getDirContents(std::vector &fileList, std::string dirpath = ".", std::string filter = "*") { #ifdef WIN32 HANDLE hFind; WIN32_FIND_DATA findFileInfo; - string directory; + std::string directory; directory = dirpath + "/" + filter; @@ -91,7 +104,7 @@ namespace MMAP do { if ((findFileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) - fileList.push_back(string(findFileInfo.cFileName)); + fileList.push_back(std::string(findFileInfo.cFileName)); } while (FindNextFile(hFind, &findFileInfo)); @@ -109,7 +122,7 @@ namespace MMAP if ((dp = readdir(dirp)) != NULL) { if (matchWildcardFilter(filter.c_str(), dp->d_name)) - fileList.push_back(string(dp->d_name)); + fileList.push_back(std::string(dp->d_name)); } else break; @@ -123,6 +136,26 @@ namespace MMAP return LISTFILE_OK; } + + inline uint32 getMSTime() + { + static const ACE_Time_Value ApplicationStartTime = ACE_OS::gettimeofday(); + return (ACE_OS::gettimeofday() - ApplicationStartTime).msec(); + } + + inline uint32 getMSTimeDiff(uint32 oldMSTime, uint32 newMSTime) + { + // getMSTime() have limited data range and this is case when it overflow in this tick + if (oldMSTime > newMSTime) + return (0xFFFFFFFF - oldMSTime) + newMSTime; + else + return newMSTime - oldMSTime; + } + + inline uint32 GetMSTimeDiffToNow(uint32 oldMSTime) + { + return getMSTimeDiff(oldMSTime, getMSTime()); + } } #endif diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp index 9707cb4160a..01059099f98 100644 --- a/src/tools/mmaps_generator/PathGenerator.cpp +++ b/src/tools/mmaps_generator/PathGenerator.cpp @@ -18,13 +18,12 @@ #include "PathCommon.h" #include "MapBuilder.h" -#include "Timer.h" using namespace MMAP; bool checkDirectories(bool debugOutput) { - vector dirFiles; + std::vector dirFiles; if (getDirContents(dirFiles, "maps") == LISTFILE_DIRECTORY_NOT_FOUND || dirFiles.empty()) { diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index f7cf76e9718..c3d6541dfa3 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -24,6 +24,60 @@ #include "VMapManager2.h" #include "MapTree.h" #include "ModelInstance.h" +#include + +// ****************************************** +// Map file format defines +// ****************************************** +struct map_fileheader +{ + uint32 mapMagic; + uint32 versionMagic; + uint32 buildMagic; + uint32 areaMapOffset; + uint32 areaMapSize; + uint32 heightMapOffset; + uint32 heightMapSize; + uint32 liquidMapOffset; + uint32 liquidMapSize; + uint32 holesOffset; + uint32 holesSize; +}; + +#define MAP_HEIGHT_NO_HEIGHT 0x0001 +#define MAP_HEIGHT_AS_INT16 0x0002 +#define MAP_HEIGHT_AS_INT8 0x0004 + +struct map_heightHeader +{ + uint32 fourcc; + uint32 flags; + float gridHeight; + float gridMaxHeight; +}; + +#define MAP_LIQUID_NO_TYPE 0x0001 +#define MAP_LIQUID_NO_HEIGHT 0x0002 + +struct map_liquidHeader +{ + uint32 fourcc; + uint16 flags; + uint16 liquidType; + uint8 offsetX; + uint8 offsetY; + uint8 width; + uint8 height; + float liquidLevel; +}; + +#define MAP_LIQUID_TYPE_NO_WATER 0x00 +#define MAP_LIQUID_TYPE_WATER 0x01 +#define MAP_LIQUID_TYPE_OCEAN 0x02 +#define MAP_LIQUID_TYPE_MAGMA 0x04 +#define MAP_LIQUID_TYPE_SLIME 0x08 +#define MAP_LIQUID_TYPE_DARK_WATER 0x10 +#define MAP_LIQUID_TYPE_WMO_WATER 0x20 namespace MMAP { @@ -139,7 +193,7 @@ namespace MMAP count += fread(v8, sizeof(uint8), V8_SIZE_SQ, mapFile); if (count != expected) printf("TerrainBuilder::loadMap: Failed to read some data expected %d, read %d\n", expected, count); - + heightMultiplier = (hheader.gridMaxHeight - hheader.gridHeight) / 255; for (int i = 0; i < V9_SIZE_SQ; ++i) @@ -612,11 +666,11 @@ namespace MMAP // now we have a model to add to the meshdata retval = true; - vector groupModels; + std::vector groupModels; worldModel->getGroupModels(groupModels); // all M2s need to have triangle indices reversed - bool isM2 = instance.name.find(".m2") != instance.name.npos || instance.name.find(".M2") != instance.name.npos; + bool isM2 = instance.name.find(".m2") != std::string::npos || instance.name.find(".M2") != std::string::npos; // transform data float scale = instance.iScale; @@ -625,14 +679,14 @@ namespace MMAP position.x -= 32*GRID_SIZE; position.y -= 32*GRID_SIZE; - for (vector::iterator it = groupModels.begin(); it != groupModels.end(); ++it) + for (std::vector::iterator it = groupModels.begin(); it != groupModels.end(); ++it) { - vector tempVertices; - vector transformedVertices; - vector tempTriangles; + std::vector tempVertices; + std::vector transformedVertices; + std::vector tempTriangles; WmoLiquid* liquid = NULL; - (*it).getMeshData(tempVertices, tempTriangles, liquid); + it->getMeshData(tempVertices, tempTriangles, liquid); // first handle collision mesh transform(tempVertices, transformedVertices, scale, rotation, position); @@ -645,8 +699,8 @@ namespace MMAP // now handle liquid data if (liquid) { - vector liqVerts; - vector liqTris; + std::vector liqVerts; + std::vector liqTris; uint32 tilesX, tilesY, vertsX, vertsY; Vector3 corner; liquid->getPosInfo(tilesX, tilesY, corner); @@ -732,9 +786,9 @@ namespace MMAP } /**************************************************************************/ - void TerrainBuilder::transform(vector &source, vector &transformedVertices, float scale, G3D::Matrix3 &rotation, Vector3 &position) + void TerrainBuilder::transform(std::vector &source, std::vector &transformedVertices, float scale, G3D::Matrix3 &rotation, Vector3 &position) { - for (vector::iterator it = source.begin(); it != source.end(); ++it) + for (std::vector::iterator it = source.begin(); it != source.end(); ++it) { // apply tranform, then mirror along the horizontal axes Vector3 v((*it) * rotation * scale + position); @@ -745,9 +799,9 @@ namespace MMAP } /**************************************************************************/ - void TerrainBuilder::copyVertices(vector &source, G3D::Array &dest) + void TerrainBuilder::copyVertices(std::vector &source, G3D::Array &dest) { - for (vector::iterator it = source.begin(); it != source.end(); ++it) + for (std::vector::iterator it = source.begin(); it != source.end(); ++it) { dest.push_back((*it).y); dest.push_back((*it).z); @@ -756,11 +810,11 @@ namespace MMAP } /**************************************************************************/ - void TerrainBuilder::copyIndices(vector &source, G3D::Array &dest, int offset, bool flip) + void TerrainBuilder::copyIndices(std::vector &source, G3D::Array &dest, int offset, bool flip) { if (flip) { - for (vector::iterator it = source.begin(); it != source.end(); ++it) + for (std::vector::iterator it = source.begin(); it != source.end(); ++it) { dest.push_back((*it).idx2+offset); dest.push_back((*it).idx1+offset); @@ -769,7 +823,7 @@ namespace MMAP } else { - for (vector::iterator it = source.begin(); it != source.end(); ++it) + for (std::vector::iterator it = source.begin(); it != source.end(); ++it) { dest.push_back((*it).idx0+offset); dest.push_back((*it).idx1+offset); @@ -789,7 +843,7 @@ namespace MMAP /**************************************************************************/ void TerrainBuilder::cleanVertices(G3D::Array &verts, G3D::Array &tris) { - map vertMap; + std::map vertMap; int* t = tris.getCArray(); float* v = verts.getCArray(); @@ -819,7 +873,7 @@ namespace MMAP // update triangles to use new indices for (int i = 0; i < tris.size(); ++i) { - map::iterator it; + std::map::iterator it; if ((it = vertMap.find(t[i])) == vertMap.end()) continue; diff --git a/src/tools/mmaps_generator/TerrainBuilder.h b/src/tools/mmaps_generator/TerrainBuilder.h index 6ad4284f416..069a5a94c84 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.h +++ b/src/tools/mmaps_generator/TerrainBuilder.h @@ -20,17 +20,12 @@ #define _MMAP_TERRAIN_BUILDER_H #include "PathCommon.h" -#include "Map.h" -#include "SharedDefines.h" - #include "WorldModel.h" #include "G3D/Array.h" #include "G3D/Vector3.h" #include "G3D/Matrix3.h" -using namespace Trinity; - namespace MMAP { enum Spot @@ -93,10 +88,10 @@ namespace MMAP bool usesLiquids() { return !m_skipLiquid; } // vert and triangle methods - static void transform(vector &original, vector &transformed, + static void transform(std::vector &original, std::vector &transformed, float scale, G3D::Matrix3 &rotation, G3D::Vector3 &position); - static void copyVertices(vector &source, G3D::Array &dest); - static void copyIndices(vector &source, G3D::Array &dest, int offest, bool flip); + static void copyVertices(std::vector &source, G3D::Array &dest); + static void copyIndices(std::vector &source, G3D::Array &dest, int offest, bool flip); static void copyIndices(G3D::Array &src, G3D::Array &dest, int offset); static void cleanVertices(G3D::Array &verts, G3D::Array &tris); private: diff --git a/src/tools/mmaps_generator/VMapExtensions.cpp b/src/tools/mmaps_generator/VMapExtensions.cpp index 37b7d94af55..972f222bba6 100644 --- a/src/tools/mmaps_generator/VMapExtensions.cpp +++ b/src/tools/mmaps_generator/VMapExtensions.cpp @@ -22,8 +22,6 @@ #include "WorldModel.h" #include "ModelInstance.h" -using namespace std; - namespace VMAP { // Need direct access to encapsulated VMAP data, so we add functions for MMAP generator @@ -43,13 +41,13 @@ namespace VMAP } // declared in src/shared/vmap/WorldModel.h - void WorldModel::getGroupModels(vector &groupModels) + void WorldModel::getGroupModels(std::vector &groupModels) { groupModels = this->groupModels; } // declared in src/shared/vmap/WorldModel.h - void GroupModel::getMeshData(vector &vertices, vector &triangles, WmoLiquid* &liquid) + void GroupModel::getMeshData(std::vector &vertices, std::vector &triangles, WmoLiquid* &liquid) { vertices = this->vertices; triangles = this->triangles; diff --git a/src/tools/vmap4_assembler/CMakeLists.txt b/src/tools/vmap4_assembler/CMakeLists.txt index 55b6514d091..8d455eae6ee 100644 --- a/src/tools/vmap4_assembler/CMakeLists.txt +++ b/src/tools/vmap4_assembler/CMakeLists.txt @@ -20,9 +20,7 @@ include_directories( ${ZLIB_INCLUDE_DIR} ) -add_definitions(-DNO_CORE_FUNCS) add_executable(vmap4assembler VMapAssembler.cpp) -add_dependencies(vmap4assembler mpq) if(CMAKE_SYSTEM_NAME MATCHES "Darwin") set_target_properties(vmap4assembler PROPERTIES LINK_FLAGS "-framework Carbon") diff --git a/src/tools/vmap4_extractor/CMakeLists.txt b/src/tools/vmap4_extractor/CMakeLists.txt index 19798e46475..023f5447f85 100644 --- a/src/tools/vmap4_extractor/CMakeLists.txt +++ b/src/tools/vmap4_extractor/CMakeLists.txt @@ -11,26 +11,19 @@ file(GLOB_RECURSE sources *.cpp *.h) -# uncomment next line to disable debug mode -add_definitions("-DIOMAP_DEBUG") - -# build setup currently only supports libmpq 0.4.x -add_definitions("-DUSE_LIBMPQ04") -add_definitions("-Wall") -add_definitions("-ggdb") -add_definitions("-O3") - -if( UNIX ) - include_directories( - ${CMAKE_SOURCE_DIR}/dep/libmpq - ) -elseif( WIN32 ) - include_directories( +set(include_Dirs ${CMAKE_SOURCE_DIR}/dep/libmpq +) + +if( WIN32 ) + set(include_Dirs + ${include_Dirs} ${CMAKE_SOURCE_DIR}/dep/libmpq/win ) endif() +include_directories(${include_Dirs}) + add_executable(vmap4extractor ${sources}) target_link_libraries(vmap4extractor @@ -39,8 +32,6 @@ target_link_libraries(vmap4extractor ${ZLIB_LIBRARIES} ) -add_dependencies(vmap4extractor mpq) - if( UNIX ) install(TARGETS vmap4extractor DESTINATION bin) elseif( WIN32 ) diff --git a/src/tools/vmap4_extractor/mpq_libmpq.cpp b/src/tools/vmap4_extractor/mpq_libmpq.cpp index 528b9679a58..ffa097d9a22 100644 --- a/src/tools/vmap4_extractor/mpq_libmpq.cpp +++ b/src/tools/vmap4_extractor/mpq_libmpq.cpp @@ -79,7 +79,7 @@ size_t MPQFile::read(void* dest, size_t bytes) if (eof) return 0; size_t rpos = pointer + bytes; - if (rpos > size) { + if (rpos > size_t(size)) { bytes = size - pointer; eof = true; } diff --git a/src/tools/vmap4_extractor/mpq_libmpq04.h b/src/tools/vmap4_extractor/mpq_libmpq04.h index 89f715e9e87..9f0163067c4 100644 --- a/src/tools/vmap4_extractor/mpq_libmpq04.h +++ b/src/tools/vmap4_extractor/mpq_libmpq04.h @@ -1,6 +1,3 @@ -#define _CRT_SECURE_NO_DEPRECATE -#define _CRT_SECURE_NO_WARNINGS - #ifndef MPQ_H #define MPQ_H diff --git a/src/tools/vmap4_extractor/wdtfile.cpp b/src/tools/vmap4_extractor/wdtfile.cpp index 7420edfee2e..d9216fd77eb 100644 --- a/src/tools/vmap4_extractor/wdtfile.cpp +++ b/src/tools/vmap4_extractor/wdtfile.cpp @@ -35,7 +35,7 @@ WDTFile::WDTFile(char* file_name, char* file_name1) : WDT(file_name), gWmoInstan filename.append(file_name1,strlen(file_name1)); } -bool WDTFile::init(char */*map_id*/, unsigned int mapID) +bool WDTFile::init(char* /*map_id*/, unsigned int mapID) { if (WDT.isEof()) { From 10d4d2e5b74ef682f5db5364dd52547ec39f4510 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 22 Jan 2013 18:45:09 +0100 Subject: [PATCH 144/204] Core/Objects: Changed how update fields marked for sending are stored serverside to use our UpdateMask class --- src/server/game/Entities/Object/Object.cpp | 49 ++++++++++------------ src/server/game/Entities/Object/Object.h | 5 +-- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 6f4f3cf9d3d..f20d452dc96 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -75,7 +75,6 @@ Object::Object() : m_PackGUID(sizeof(uint64)+1) m_objectType = TYPEMASK_OBJECT; m_uint32Values = NULL; - _changedFields = NULL; m_valuesCount = 0; _fieldNotifyFlags = UF_FLAG_DYNAMIC; @@ -119,8 +118,6 @@ Object::~Object() } delete [] m_uint32Values; - delete [] _changedFields; - } void Object::_InitValues() @@ -128,8 +125,7 @@ void Object::_InitValues() m_uint32Values = new uint32[m_valuesCount]; memset(m_uint32Values, 0, m_valuesCount*sizeof(uint32)); - _changedFields = new bool[m_valuesCount]; - memset(_changedFields, 0, m_valuesCount*sizeof(bool)); + _changesMask.SetCount(m_valuesCount); m_objectUpdated = false; } @@ -757,7 +753,7 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask* void Object::ClearUpdateMask(bool remove) { - memset(_changedFields, 0, m_valuesCount*sizeof(bool)); + _changesMask.Clear(); if (m_objectUpdated) { @@ -854,13 +850,12 @@ void Object::_LoadIntoDataField(std::string const& data, uint32 startOffset, uin for (uint32 index = 0; index < count; ++index) { m_uint32Values[startOffset + index] = atol(tokens[index]); - _changedFields[startOffset + index] = true; + _changesMask.SetBit(startOffset + index); } } void Object::_SetUpdateBits(UpdateMask* updateMask, Player* target) const { - bool* indexes = _changedFields; uint32* flags = NULL; bool isSelf = target == this; bool isOwner = false; @@ -870,8 +865,8 @@ void Object::_SetUpdateBits(UpdateMask* updateMask, Player* target) const GetUpdateFieldData(target, flags, isOwner, isItemOwner, hasSpecialInfo, isPartyMember); - for (uint16 index = 0; index < m_valuesCount; ++index, ++indexes) - if (_fieldNotifyFlags & flags[index] || (flags[index] & UF_FLAG_SPECIAL_INFO && hasSpecialInfo) || (*indexes && IsUpdateFieldVisible(flags[index], isSelf, isOwner, isItemOwner, isPartyMember))) + for (uint16 index = 0; index < m_valuesCount; ++index) + if (_fieldNotifyFlags & flags[index] || (flags[index] & UF_FLAG_SPECIAL_INFO && hasSpecialInfo) || (_changesMask.GetBit(index) && IsUpdateFieldVisible(flags[index], isSelf, isOwner, isItemOwner, isPartyMember))) updateMask->SetBit(index); } @@ -899,7 +894,7 @@ void Object::SetInt32Value(uint16 index, int32 value) if (m_int32Values[index] != value) { m_int32Values[index] = value; - _changedFields[index] = true; + _changesMask.SetBit(index); if (m_inWorld && !m_objectUpdated) { @@ -916,7 +911,7 @@ void Object::SetUInt32Value(uint16 index, uint32 value) if (m_uint32Values[index] != value) { m_uint32Values[index] = value; - _changedFields[index] = true; + _changesMask.SetBit(index); if (m_inWorld && !m_objectUpdated) { @@ -931,7 +926,7 @@ void Object::UpdateUInt32Value(uint16 index, uint32 value) ASSERT(index < m_valuesCount || PrintIndexError(index, true)); m_uint32Values[index] = value; - _changedFields[index] = true; + _changesMask.SetBit(index); } void Object::SetUInt64Value(uint16 index, uint64 value) @@ -941,8 +936,8 @@ void Object::SetUInt64Value(uint16 index, uint64 value) { m_uint32Values[index] = PAIR64_LOPART(value); m_uint32Values[index + 1] = PAIR64_HIPART(value); - _changedFields[index] = true; - _changedFields[index + 1] = true; + _changesMask.SetBit(index); + _changesMask.SetBit(index + 1); if (m_inWorld && !m_objectUpdated) { @@ -959,8 +954,8 @@ bool Object::AddUInt64Value(uint16 index, uint64 value) { m_uint32Values[index] = PAIR64_LOPART(value); m_uint32Values[index + 1] = PAIR64_HIPART(value); - _changedFields[index] = true; - _changedFields[index + 1] = true; + _changesMask.SetBit(index); + _changesMask.SetBit(index + 1); if (m_inWorld && !m_objectUpdated) { @@ -981,8 +976,8 @@ bool Object::RemoveUInt64Value(uint16 index, uint64 value) { m_uint32Values[index] = 0; m_uint32Values[index + 1] = 0; - _changedFields[index] = true; - _changedFields[index + 1] = true; + _changesMask.SetBit(index); + _changesMask.SetBit(index + 1); if (m_inWorld && !m_objectUpdated) { @@ -1003,7 +998,7 @@ void Object::SetFloatValue(uint16 index, float value) if (m_floatValues[index] != value) { m_floatValues[index] = value; - _changedFields[index] = true; + _changesMask.SetBit(index); if (m_inWorld && !m_objectUpdated) { @@ -1027,7 +1022,7 @@ void Object::SetByteValue(uint16 index, uint8 offset, uint8 value) { m_uint32Values[index] &= ~uint32(uint32(0xFF) << (offset * 8)); m_uint32Values[index] |= uint32(uint32(value) << (offset * 8)); - _changedFields[index] = true; + _changesMask.SetBit(index); if (m_inWorld && !m_objectUpdated) { @@ -1051,7 +1046,7 @@ void Object::SetUInt16Value(uint16 index, uint8 offset, uint16 value) { m_uint32Values[index] &= ~uint32(uint32(0xFFFF) << (offset * 16)); m_uint32Values[index] |= uint32(uint32(value) << (offset * 16)); - _changedFields[index] = true; + _changesMask.SetBit(index); if (m_inWorld && !m_objectUpdated) { @@ -1118,7 +1113,7 @@ void Object::SetFlag(uint16 index, uint32 newFlag) if (oldval != newval) { m_uint32Values[index] = newval; - _changedFields[index] = true; + _changesMask.SetBit(index); if (m_inWorld && !m_objectUpdated) { @@ -1139,7 +1134,7 @@ void Object::RemoveFlag(uint16 index, uint32 oldFlag) if (oldval != newval) { m_uint32Values[index] = newval; - _changedFields[index] = true; + _changesMask.SetBit(index); if (m_inWorld && !m_objectUpdated) { @@ -1162,7 +1157,7 @@ void Object::SetByteFlag(uint16 index, uint8 offset, uint8 newFlag) if (!(uint8(m_uint32Values[index] >> (offset * 8)) & newFlag)) { m_uint32Values[index] |= uint32(uint32(newFlag) << (offset * 8)); - _changedFields[index] = true; + _changesMask.SetBit(index); if (m_inWorld && !m_objectUpdated) { @@ -1185,7 +1180,7 @@ void Object::RemoveByteFlag(uint16 index, uint8 offset, uint8 oldFlag) if (uint8(m_uint32Values[index] >> (offset * 8)) & oldFlag) { m_uint32Values[index] &= ~uint32(uint32(oldFlag) << (offset * 8)); - _changedFields[index] = true; + _changesMask.SetBit(index); if (m_inWorld && !m_objectUpdated) { @@ -1968,7 +1963,7 @@ void WorldObject::SendPlaySound(uint32 Sound, bool OnlySelf) void Object::ForceValuesUpdateAtIndex(uint32 i) { - _changedFields[i] = true; + _changesMask.SetBit(i); if (m_inWorld && !m_objectUpdated) { sObjectAccessor->AddUpdateObject(this); diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index a9afd074c67..641f9afb154 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -20,7 +20,7 @@ #define _OBJECT_H #include "Common.h" -#include "UpdateFields.h" +#include "UpdateMask.h" #include "UpdateData.h" #include "GridReference.h" #include "ObjectDefines.h" @@ -107,7 +107,6 @@ class ByteBuffer; class WorldSession; class Creature; class Player; -class UpdateMask; class InstanceScript; class GameObject; class TempSummon; @@ -348,7 +347,7 @@ class Object float *m_floatValues; }; - bool* _changedFields; + UpdateMask _changesMask; uint16 m_valuesCount; From 5b9159e165ea4bca3ab32317b180d9d543f99dbf Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 22 Jan 2013 19:07:40 +0100 Subject: [PATCH 145/204] Tools: Build fix --- src/tools/mesh_extractor/MPQManager.cpp | 2 +- src/tools/mesh_extractor/Utils.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tools/mesh_extractor/MPQManager.cpp b/src/tools/mesh_extractor/MPQManager.cpp index 0fe07cd8b85..5ae8558d749 100644 --- a/src/tools/mesh_extractor/MPQManager.cpp +++ b/src/tools/mesh_extractor/MPQManager.cpp @@ -14,7 +14,7 @@ char* MPQManager::Files[] = { "patch-3.MPQ" }; -char* MPQManager::Languages[] = { "enGB", "enUS", "deDE", "esES", "frFR", "koKR", "zhCN", "zhTW", "enCN", "enTW", "esMX", "ruRU" }; +char const* MPQManager::Languages[] = { "enGB", "enUS", "deDE", "esES", "frFR", "koKR", "zhCN", "zhTW", "enCN", "enTW", "esMX", "ruRU" }; void MPQManager::Initialize() { diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h index 41ea33e6157..64fb1bb35ba 100644 --- a/src/tools/mesh_extractor/Utils.h +++ b/src/tools/mesh_extractor/Utils.h @@ -15,7 +15,7 @@ struct WorldModelDefinition; class DoodadInstance; -#define ASSERT(assertion) { if (!(assertion)) { ACE_Stack_Trace st; fprintf(stderr, "\n%s:%i in %s ASSERTION FAILED:\n %s\n", __FILE__, __LINE__, __FUNCTION__, #assertion, st.c_str()); *((volatile int*)NULL) = 0; } } +#define ASSERT(assertion) { if (!(assertion)) { ACE_Stack_Trace st; fprintf(stderr, "\n%s:%i in %s ASSERTION FAILED:\n %s\n%s\n", __FILE__, __LINE__, __FUNCTION__, #assertion, st.c_str()); *((volatile int*)NULL) = 0; } } struct Vector3 { From 7a74f68c0d974de5a1f885904fefa45db934da3d Mon Sep 17 00:00:00 2001 From: Nay Date: Tue, 22 Jan 2013 18:14:32 +0000 Subject: [PATCH 146/204] Tools/MapExtractor: Fix displaying of a few counts in Windows %zu works fine on GCC/Linux, but fails in MSVC/Windows --- src/tools/map_extractor/System.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index 2e117934679..bf88a92c32a 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -222,7 +222,7 @@ uint32 ReadMapDBC() map_ids[x].id = dbc.getRecord(x).getUInt(0); strcpy(map_ids[x].name, dbc.getRecord(x).getString(1)); } - printf("Done! (%zu maps loaded)\n", map_count); + printf("Done! (%u maps loaded)\n", (uint32)map_count); return map_count; } @@ -247,7 +247,7 @@ void ReadAreaTableDBC() maxAreaId = dbc.getMaxId(); - printf("Done! (%zu areas loaded)\n", area_count); + printf("Done! (%u areas loaded)\n", (uint32)area_count); } void ReadLiquidTypeTableDBC() @@ -268,7 +268,7 @@ void ReadLiquidTypeTableDBC() for(uint32 x = 0; x < liqTypeCount; ++x) LiqType[dbc.getRecord(x).getUInt(0)] = dbc.getRecord(x).getUInt(3); - printf("Done! (%zu LiqTypes loaded)\n", liqTypeCount); + printf("Done! (%u LiqTypes loaded)\n", (uint32)liqTypeCount); } // From 69baba23cc81bef23278549c93576afc3195ece5 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 22 Jan 2013 19:30:52 +0100 Subject: [PATCH 147/204] Tools: Build fix, for real this time --- src/server/collision/Maps/MapTree.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/collision/Maps/MapTree.cpp b/src/server/collision/Maps/MapTree.cpp index e3cd158709c..eb4b4555cb4 100644 --- a/src/server/collision/Maps/MapTree.cpp +++ b/src/server/collision/Maps/MapTree.cpp @@ -21,6 +21,7 @@ #include "VMapManager2.h" #include "VMapDefinitions.h" #include "Log.h" +#include "Errors.h" #include #include From bd893b4516292de4d2b1244acbecb0f301977e3f Mon Sep 17 00:00:00 2001 From: Nay Date: Tue, 22 Jan 2013 18:41:26 +0000 Subject: [PATCH 148/204] Tools/MeshExtractor: Fix warnings --- src/tools/mesh_extractor/MPQManager.cpp | 2 +- src/tools/mesh_extractor/MPQManager.h | 4 ++-- src/tools/mesh_extractor/WorldModelGroup.cpp | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/tools/mesh_extractor/MPQManager.cpp b/src/tools/mesh_extractor/MPQManager.cpp index 5ae8558d749..91b9c121c89 100644 --- a/src/tools/mesh_extractor/MPQManager.cpp +++ b/src/tools/mesh_extractor/MPQManager.cpp @@ -4,7 +4,7 @@ #include "Utils.h" #include -char* MPQManager::Files[] = { +char const* MPQManager::Files[] = { "common.MPQ", "common-2.MPQ", "expansion.MPQ", diff --git a/src/tools/mesh_extractor/MPQManager.h b/src/tools/mesh_extractor/MPQManager.h index 788be7f5974..2f49ad258a5 100644 --- a/src/tools/mesh_extractor/MPQManager.h +++ b/src/tools/mesh_extractor/MPQManager.h @@ -24,8 +24,8 @@ public: std::set AvailableLocales; std::map LocaleFiles; - static char* Files[]; - static char* Languages[]; + static char const* Files[]; + static char const* Languages[]; protected: void InitializeDBC(); private: diff --git a/src/tools/mesh_extractor/WorldModelGroup.cpp b/src/tools/mesh_extractor/WorldModelGroup.cpp index 5eeef824b1a..21e1c1e63e1 100644 --- a/src/tools/mesh_extractor/WorldModelGroup.cpp +++ b/src/tools/mesh_extractor/WorldModelGroup.cpp @@ -137,7 +137,7 @@ void WorldModelGroup::ReadBatches() MOBALength = chunk->Length / 2; MOBA = new uint16[MOBALength]; - int count = fread(MOBA, sizeof(uint16), MOBALength, chunk->GetStream()); + uint32 count = (uint32)fread(MOBA, sizeof(uint16), MOBALength, chunk->GetStream()); if (count != MOBALength) - printf("WorldModelGroup::ReadBatches: Error reading data, expected %d, read %d\n", MOBALength, count); + printf("WorldModelGroup::ReadBatches: Error reading data, expected %u, read %u\n", MOBALength, count); } From db5d06afa979f1ab487cc0ec18349bd6af634edb Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Tue, 22 Jan 2013 20:16:56 +0100 Subject: [PATCH 149/204] DB/SAI: Fix more some db errors no.4 --- sql/updates/world/2013_01_22_01_world_sai.sql | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 sql/updates/world/2013_01_22_01_world_sai.sql diff --git a/sql/updates/world/2013_01_22_01_world_sai.sql b/sql/updates/world/2013_01_22_01_world_sai.sql new file mode 100644 index 00000000000..b41fb25110d --- /dev/null +++ b/sql/updates/world/2013_01_22_01_world_sai.sql @@ -0,0 +1,22 @@ +UPDATE `smart_scripts` SET `event_flags`=1 WHERE `entryorguid`=20882 AND `source_type`=0 AND `id`=0; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=20896 AND `source_type`=0 AND `id`=3; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=20900 AND `source_type`=0 AND `id`=3; +UPDATE `smart_scripts` SET `link`=0,`event_type`=61 WHERE `entryorguid`=4063 AND `source_type`=0 AND `id`=3; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=2245 AND `source_type`=0 AND `id`=8; +UPDATE `smart_scripts` SET `link`=0 WHERE `entryorguid`=7038 AND `source_type`=0 AND `id`=17; +UPDATE `smart_scripts` SET `event_type`=61 WHERE `entryorguid`=2345 AND `source_type`=0 AND `id`=11; + +DELETE FROM `smart_scripts` WHERE `entryorguid`=314 AND `source_type`=0; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(314, 0, 1, 0, 11, 0, 100, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Eliza - Phase 0 - On spawn - Prevent combat movement'), +(314, 0, 2, 3, 4, 0, 100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Eliza - Phase 0 - On aggro - Say'), +(314, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Eliza - Phase 0 - On aggro - Set phase 1'), +(314, 0, 4, 0, 9, 1, 100, 0, 0, 40, 0, 0, 11, 20819, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 'Eliza - Phase 1 - In combat - Cast Frostbolt'), +(314, 0, 5, 0, 9, 1, 100, 0, 0, 5, 0, 0, 21, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Eliza - Phase 1 - 0 to 5 yards - Activate combat movement'), +(314, 0, 6, 0, 9, 1, 100, 0, 5, 35, 0, 0, 21, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Eliza - Phase 1 - 5 to 35 yards - Deactivate combat movement'), +(314, 0, 7, 0, 9, 1, 100, 0, 35, 80, 0, 0, 21, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Eliza - Phase 1 - 35 to 80 yards - Activate combat movement'), +(314, 0, 8, 0, 0, 1, 100, 0, 4100, 6400, 72300, 72300, 11, 3107, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Eliza - Phase 1 - In combat - Summon Elizas Guard'), +(314, 0, 9, 0, 0, 1, 100, 0, 2100, 2900, 12500, 36300, 11, 11831, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 'Eliza - Phase 1 - In combat - Cast Frost Nova'), +(314, 0, 10, 12, 3, 1, 100, 0, 0, 7, 0, 0, 21, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Eliza - Phase 1 - At 7% mana - Start combat movement'), +(314, 0, 11, 0, 61, 1, 100, 0, 0, 0, 0, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Eliza - Phase 1 - At 7% mana - Set phase 2'), +(314, 0, 12, 0, 3, 2, 100, 0, 15, 100, 100, 100, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Eliza - Phase 2 - At 15% mana - Set phase 1'); From 7a76de93f83984a05bc38e321ca2f710cfd221d4 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Tue, 22 Jan 2013 20:24:00 +0100 Subject: [PATCH 150/204] Update more copyright note for 2013. --- dep/recastnavigation/Detour/CMakeLists.txt | 2 +- dep/recastnavigation/Recast/CMakeLists.txt | 2 +- src/tools/mmaps_generator/CMakeLists.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dep/recastnavigation/Detour/CMakeLists.txt b/dep/recastnavigation/Detour/CMakeLists.txt index c09e0e35d42..303a003dee2 100644 --- a/dep/recastnavigation/Detour/CMakeLists.txt +++ b/dep/recastnavigation/Detour/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2010 Trinity +# Copyright (C) 2008-2013 TrinityCore # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without diff --git a/dep/recastnavigation/Recast/CMakeLists.txt b/dep/recastnavigation/Recast/CMakeLists.txt index 7ced79c10b7..726aff72c0c 100644 --- a/dep/recastnavigation/Recast/CMakeLists.txt +++ b/dep/recastnavigation/Recast/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2010 Trinity +# Copyright (C) 2008-2013 TrinityCore # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without diff --git a/src/tools/mmaps_generator/CMakeLists.txt b/src/tools/mmaps_generator/CMakeLists.txt index 99492abf8ee..b168691c994 100644 --- a/src/tools/mmaps_generator/CMakeLists.txt +++ b/src/tools/mmaps_generator/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (C) 2008-2011 Trinity +# Copyright (C) 2008-2013 TrinityCore # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without From 6fc17c6b1e0dadc3429ffa67b753ac492ddbd7a1 Mon Sep 17 00:00:00 2001 From: Nay Date: Tue, 22 Jan 2013 19:34:04 +0000 Subject: [PATCH 151/204] Core: Fix compile warnings --- src/server/game/Miscellaneous/SharedDefines.h | 2 +- .../Movement/MovementGenerators/PointMovementGenerator.h | 2 +- .../Movement/MovementGenerators/TargetedMovementGenerator.h | 6 +++--- src/server/game/Movement/PathGenerator.cpp | 2 +- src/server/scripts/Commands/cs_mmaps.cpp | 4 ++-- src/tools/mmaps_generator/TerrainBuilder.cpp | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index e5c4377d085..3d8ad37c92d 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -3534,7 +3534,7 @@ enum PartyResult ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 30 }; -#define MMAP_MAGIC 0x4d4d4150 // 'MMAP' +const uint32 MMAP_MAGIC = 0x4d4d4150; // 'MMAP' #define MMAP_VERSION 3 struct MmapTileHeader diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h index 89f643283d6..421736ca4ec 100644 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h @@ -27,7 +27,7 @@ class PointMovementGenerator : public MovementGeneratorMedium< T, PointMovementG { public: PointMovementGenerator(uint32 _id, float _x, float _y, float _z, bool _generatePath, float _speed = 0.0f) : id(_id), - i_x(_x), i_y(_y), i_z(_z), m_generatePath(_generatePath), speed(_speed), i_recalculateSpeed(false) {} + i_x(_x), i_y(_y), i_z(_z), speed(_speed), m_generatePath(_generatePath), i_recalculateSpeed(false) {} void DoInitialize(T*); void DoFinalize(T*); diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h index 4f8cf658fde..3edeb348d54 100755 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.h @@ -39,8 +39,8 @@ class TargetedMovementGeneratorMedium : public MovementGeneratorMedium< T, D >, { protected: TargetedMovementGeneratorMedium(Unit* target, float offset, float angle) : - TargetedMovementGeneratorBase(target), i_recheckDistance(0), i_path(NULL), - i_offset(offset), i_angle(angle), + TargetedMovementGeneratorBase(target), i_path(NULL), + i_recheckDistance(0), i_offset(offset), i_angle(angle), i_recalculateTravel(false), i_targetReached(false) { } @@ -55,12 +55,12 @@ class TargetedMovementGeneratorMedium : public MovementGeneratorMedium< T, D >, protected: void _setTargetLocation(T* owner, bool updateDestination); + PathGenerator* i_path; TimeTrackerSmall i_recheckDistance; float i_offset; float i_angle; bool i_recalculateTravel : 1; bool i_targetReached : 1; - PathGenerator* i_path; }; template diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp index 71617f6a6ab..dbda4aa2411 100644 --- a/src/server/game/Movement/PathGenerator.cpp +++ b/src/server/game/Movement/PathGenerator.cpp @@ -30,7 +30,7 @@ PathGenerator::PathGenerator(const Unit* owner) : _polyLength(0), _type(PATHFIND_BLANK), _useStraightPath(false), _forceDestination(false), _pointPathLimit(MAX_POINT_PATH_LENGTH), - _sourceUnit(owner), _navMesh(NULL), _navMeshQuery(NULL), _endPosition(Vector3::zero()) + _endPosition(Vector3::zero()), _sourceUnit(owner), _navMesh(NULL), _navMeshQuery(NULL) { sLog->outDebug(LOG_FILTER_MAPS, "++ PathGenerator::PathGenerator for %u \n", _sourceUnit->GetGUIDLow()); diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp index 4649e13e1c4..c4605e30991 100644 --- a/src/server/scripts/Commands/cs_mmaps.cpp +++ b/src/server/scripts/Commands/cs_mmaps.cpp @@ -98,7 +98,7 @@ public: PointsArray pointPath = path.GetPath(); handler->PSendSysMessage("%s's path to %s:", target->GetName().c_str(), player->GetName().c_str()); handler->PSendSysMessage("Building: %s", useStraightPath ? "StraightPath" : "SmoothPath"); - handler->PSendSysMessage("Result: %s - Length: %i - Type: %u", (result ? "true" : "false"), pointPath.size(), path.GetPathType()); + handler->PSendSysMessage("Result: %s - Length: "SIZEFMTD" - Type: %u", (result ? "true" : "false"), pointPath.size(), path.GetPathType()); Vector3 start = path.GetStartPosition(); Vector3 end = path.GetEndPosition(); @@ -264,7 +264,7 @@ public: if (!creatureList.empty()) { - handler->PSendSysMessage("Found %i Creatures.", creatureList.size()); + handler->PSendSysMessage("Found "SIZEFTMD" Creatures.", creatureList.size()); uint32 paths = 0; uint32 uStartTime = getMSTime(); diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index c3d6541dfa3..6f26a43fa05 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -296,7 +296,7 @@ namespace MMAP } // FIXME: "the address of ‘liquid_type’ will always evaluate as ‘true’" - if (liquid_type && liquid_map) + if (liquid_map) { int count = meshData.liquidVerts.size() / 3; float xoffset = (float(tileX)-32)*GRID_SIZE; @@ -393,7 +393,7 @@ namespace MMAP // FIXME: "warning: the address of ‘liquid_type’ will always evaluate as ‘true’" // if there is no liquid, don't use liquid - if (!liquid_type || !meshData.liquidVerts.size() || !ltriangles.size()) + if (!meshData.liquidVerts.size() || !ltriangles.size()) useLiquid = false; else { From 98e01fdb3f8278502a461e481323e62ed4523148 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Tue, 22 Jan 2013 21:00:08 +0100 Subject: [PATCH 152/204] Core: Fix build --- src/server/scripts/Commands/cs_mmaps.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp index c4605e30991..97861133983 100644 --- a/src/server/scripts/Commands/cs_mmaps.cpp +++ b/src/server/scripts/Commands/cs_mmaps.cpp @@ -264,7 +264,7 @@ public: if (!creatureList.empty()) { - handler->PSendSysMessage("Found "SIZEFTMD" Creatures.", creatureList.size()); + handler->PSendSysMessage("Found "SIZEFMTD" Creatures.", creatureList.size()); uint32 paths = 0; uint32 uStartTime = getMSTime(); From 4f3c6b139031116fe5074e9340bc53139a98ab57 Mon Sep 17 00:00:00 2001 From: Nay Date: Tue, 22 Jan 2013 20:47:52 +0000 Subject: [PATCH 153/204] Core: Yet another warning fix @Kaelima: could you verify MoveCharge? --- src/server/game/Movement/MotionMaster.cpp | 2 +- src/tools/mmaps_generator/TerrainBuilder.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index f792aa959fb..c9ca7772186 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -428,7 +428,7 @@ void MotionMaster::MoveCharge(PathGenerator path, float speed, uint32 id) { Vector3 dest = path.GetActualEndPosition(); - MoveCharge(dest.x, dest.y, dest.z); + MoveCharge(dest.x, dest.y, dest.z, speed, id); Movement::MoveSplineInit init(_owner); init.MovebyPath(path.GetPath()); diff --git a/src/tools/mmaps_generator/TerrainBuilder.cpp b/src/tools/mmaps_generator/TerrainBuilder.cpp index 6f26a43fa05..a42cd2b9bc6 100644 --- a/src/tools/mmaps_generator/TerrainBuilder.cpp +++ b/src/tools/mmaps_generator/TerrainBuilder.cpp @@ -295,7 +295,6 @@ namespace MMAP printf("TerrainBuilder::loadMap: Failed to read some data expected 1, read 0\n"); } - // FIXME: "the address of ‘liquid_type’ will always evaluate as ‘true’" if (liquid_map) { int count = meshData.liquidVerts.size() / 3; @@ -369,7 +368,7 @@ namespace MMAP float* tverts = meshData.solidVerts.getCArray(); int* ttris = ttriangles.getCArray(); - if (ltriangles.size() + ttriangles.size() == 0) + if ((ltriangles.size() + ttriangles.size()) == 0) return false; // make a copy of liquid vertices From af50ce6223ded9aa91a087556f2332b9c1f13df8 Mon Sep 17 00:00:00 2001 From: joschiwald Date: Tue, 22 Jan 2013 00:20:16 +0100 Subject: [PATCH 154/204] Core/Spell: convert more spells to SpellScripts --- ...2013_01_23_00_world_spell_script_names.sql | 77 +++ src/server/game/Combat/ThreatManager.cpp | 19 +- src/server/game/Entities/Unit/Unit.cpp | 647 +----------------- src/server/game/Entities/Unit/Unit.h | 42 +- .../game/Spells/Auras/SpellAuraEffects.cpp | 28 - src/server/game/Spells/Auras/SpellAuras.cpp | 11 - src/server/game/Spells/SpellEffects.cpp | 2 +- .../boss_blood_queen_lana_thel.cpp | 38 + .../IcecrownCitadel/boss_the_lich_king.cpp | 37 + src/server/scripts/Spells/spell_dk.cpp | 54 ++ src/server/scripts/Spells/spell_druid.cpp | 75 ++ src/server/scripts/Spells/spell_generic.cpp | 180 +++++ src/server/scripts/Spells/spell_hunter.cpp | 78 ++- src/server/scripts/Spells/spell_item.cpp | 351 ++++++++-- src/server/scripts/Spells/spell_mage.cpp | 197 ++++++ src/server/scripts/Spells/spell_paladin.cpp | 109 ++- src/server/scripts/Spells/spell_priest.cpp | 173 ++++- src/server/scripts/Spells/spell_rogue.cpp | 152 ++++ src/server/scripts/Spells/spell_shaman.cpp | 65 ++ src/server/scripts/Spells/spell_warlock.cpp | 97 +++ src/server/scripts/Spells/spell_warrior.cpp | 164 ++++- 21 files changed, 1795 insertions(+), 801 deletions(-) create mode 100644 sql/updates/world/2013_01_23_00_world_spell_script_names.sql diff --git a/sql/updates/world/2013_01_23_00_world_spell_script_names.sql b/sql/updates/world/2013_01_23_00_world_spell_script_names.sql new file mode 100644 index 00000000000..dd8b35ae420 --- /dev/null +++ b/sql/updates/world/2013_01_23_00_world_spell_script_names.sql @@ -0,0 +1,77 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` IN ( +70871, -- spell_blood_queen_essence_of_the_blood_queen +69383, -- spell_the_lich_king_dark_hunger +50453, -- spell_dk_blood_gorged +-48496, -- spell_dru_living_seed +48504, -- spell_dru_living_seed_proc +28764, -- spell_gen_adaptive_warding +27539, -- spell_gen_obsidian_armor +34074, -- spell_hun_ascpect_of_the_viper +64411, -- spell_item_blessing_of_ancient_kings +71875, -- spell_item_necrotic_touch +71877, -- spell_item_necrotic_touch +71169, -- spell_item_shadows_fate +71903, -- spell_item_shadowmourne +71905, -- spell_item_shadowmourne_soul_fragment +-44449, -- spell_mage_burnout +54646, -- spell_mage_focus_magic +-11119, -- spell_mage_ignite +-29074, -- spell_mage_master_of_elements +-9799, -- spell_pal_eye_for_an_eye +20154, -- spell_pal_seal_of_righteousness +21084 -- spell_pal_seal_of_righteousness +-47509, -- spell_pri_divine_aegis +55680, -- spell_pri_glyph_of_prayer_of_healing +28305, -- spell_pri_mana_leech +13877, -- spell_rog_blade_flurry +33735, -- spell_rog_blade_flurry +51211, -- spell_rog_blade_flurry +65956, -- spell_rog_blade_flurry +57934, -- spell_rog_tricks_of_the_trade +59628, -- spell_rog_tricks_of_the_trade_proc +-974, -- spell_sha_earth_shield +-47230, -- spell_warl_fel_synergy +63108, -- spell_warl_siphon_life +-58872, -- spell_warr_damage_shield +12328, -- spell_warr_sweeping_strikes +18765, -- spell_warr_sweeping_strikes +35429 -- spell_warr_sweeping_strikes +); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(70871, 'spell_blood_queen_essence_of_the_blood_queen'), +(69383, 'spell_the_lich_king_dark_hunger'), +(50453, 'spell_dk_blood_gorged'), +(-48496, 'spell_dru_living_seed'), +(48504, 'spell_dru_living_seed_proc'), +(28764, 'spell_gen_adaptive_warding'), +(27539, 'spell_gen_obsidian_armor'), +(34074, 'spell_hun_ascpect_of_the_viper'), +(64411, 'spell_item_blessing_of_ancient_kings'), +(71875, 'spell_item_necrotic_touch'), +(71877, 'spell_item_necrotic_touch'), +(71169, 'spell_item_shadows_fate'), +(71903, 'spell_item_shadowmourne'), +(71905, 'spell_item_shadowmourne_soul_fragment'), +(-44449, 'spell_mage_burnout'), +(54646, 'spell_mage_focus_magic'), +(-11119, 'spell_mage_ignite'), +(-29074, 'spell_mage_master_of_elements'), +(-9799, 'spell_pal_eye_for_an_eye'), +(20154, 'spell_pal_seal_of_righteousness'), +(21084, 'spell_pal_seal_of_righteousness'), +(-47509, 'spell_pri_divine_aegis'), +(55680, 'spell_pri_glyph_of_prayer_of_healing'), +(28305, 'spell_pri_mana_leech'), +(13877, 'spell_rog_blade_flurry'), +(33735, 'spell_rog_blade_flurry'), +(51211, 'spell_rog_blade_flurry'), +(65956, 'spell_rog_blade_flurry'), +(57934, 'spell_rog_tricks_of_the_trade'), +(59628, 'spell_rog_tricks_of_the_trade_proc'), +(-974, 'spell_sha_earth_shield'), +(-47230, 'spell_warl_fel_synergy'), +(63108, 'spell_warl_siphon_life'), +(-58872, 'spell_warr_damage_shield'), +(12328, 'spell_warr_sweeping_strikes'), +(18765, 'spell_warr_sweeping_strikes'), +(35429, 'spell_warr_sweeping_strikes'); diff --git a/src/server/game/Combat/ThreatManager.cpp b/src/server/game/Combat/ThreatManager.cpp index 6d291ca301f..249c1696348 100644 --- a/src/server/game/Combat/ThreatManager.cpp +++ b/src/server/game/Combat/ThreatManager.cpp @@ -416,20 +416,17 @@ void ThreatManager::addThreat(Unit* victim, float threat, SpellSchoolMask school void ThreatManager::doAddThreat(Unit* victim, float threat) { - uint32 reducedThreadPercent = victim->GetReducedThreatPercent(); + uint32 redirectThreadPct = victim->GetRedirectThreatPercent(); // must check > 0.0f, otherwise dead loop - if (threat > 0.0f && reducedThreadPercent) + if (threat > 0.0f && redirectThreadPct) { - Unit* redirectTarget = victim->GetMisdirectionTarget(); - if (redirectTarget) - if (Aura* glyphAura = redirectTarget->GetAura(63326)) // Glyph of Vigilance - reducedThreadPercent += glyphAura->GetSpellInfo()->Effects[0].CalcValue(); - - float reducedThreat = threat * reducedThreadPercent / 100.0f; - threat -= reducedThreat; - if (redirectTarget) - _addThreat(redirectTarget, reducedThreat); + if (Unit* redirectTarget = victim->GetRedirectThreatTarget()) + { + float redirectThreat = CalculatePct(threat, redirectThreadPct); + threat -= redirectThreat; + _addThreat(redirectTarget, redirectThreat); + } } _addThreat(victim, threat); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 49b86cff864..e7136a5c26f 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -256,8 +256,8 @@ Unit::Unit(bool isWorldObject): WorldObject(isWorldObject) m_speed_rate[i] = 1.0f; m_charmInfo = NULL; - m_reducedThreatPercent = 0; - m_misdirectionTargetGUID = 0; + + _redirectThreadInfo = RedirectThreatInfo(); // remove aurastates allowing special moves for (uint8 i = 0; i < MAX_REACTIVE; ++i) @@ -4984,127 +4984,6 @@ void Unit::SendAttackStateUpdate(uint32 HitInfo, Unit* target, uint8 /*SwingType SendAttackStateUpdate(&dmgInfo); } -bool Unit::HandleHasteAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* /*procSpell*/, uint32 /*procFlag*/, uint32 /*procEx*/, uint32 cooldown) -{ - SpellInfo const* hasteSpell = triggeredByAura->GetSpellInfo(); - - Item* castItem = triggeredByAura->GetBase()->GetCastItemGUID() && GetTypeId() == TYPEID_PLAYER - ? ToPlayer()->GetItemByGuid(triggeredByAura->GetBase()->GetCastItemGUID()) : NULL; - - uint32 triggered_spell_id = 0; - Unit* target = victim; - int32 basepoints0 = 0; - - switch (hasteSpell->SpellFamilyName) - { - case SPELLFAMILY_ROGUE: - { - switch (hasteSpell->Id) - { - // Blade Flurry - case 13877: - case 33735: - { - target = SelectNearbyTarget(victim); - if (!target) - return false; - basepoints0 = damage; - triggered_spell_id = 22482; - break; - } - } - break; - } - } - - // processed charge only counting case - if (!triggered_spell_id) - return true; - - SpellInfo const* triggerEntry = sSpellMgr->GetSpellInfo(triggered_spell_id); - - if (!triggerEntry) - { - sLog->outError(LOG_FILTER_UNITS, "Unit::HandleHasteAuraProc: Spell %u has non-existing triggered spell %u", hasteSpell->Id, triggered_spell_id); - return false; - } - - if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id)) - return false; - - if (basepoints0) - CastCustomSpell(target, triggered_spell_id, &basepoints0, NULL, NULL, true, castItem, triggeredByAura); - else - CastSpell(target, triggered_spell_id, true, castItem, triggeredByAura); - - if (cooldown && GetTypeId() == TYPEID_PLAYER) - ToPlayer()->AddSpellCooldown(triggered_spell_id, 0, time(NULL) + cooldown); - - return true; -} - -bool Unit::HandleSpellCritChanceAuraProc(Unit* victim, uint32 /*damage*/, AuraEffect* triggeredByAura, SpellInfo const* /*procSpell*/, uint32 /*procFlag*/, uint32 /*procEx*/, uint32 cooldown) -{ - SpellInfo const* triggeredByAuraSpell = triggeredByAura->GetSpellInfo(); - - Item* castItem = triggeredByAura->GetBase()->GetCastItemGUID() && GetTypeId() == TYPEID_PLAYER - ? ToPlayer()->GetItemByGuid(triggeredByAura->GetBase()->GetCastItemGUID()) : NULL; - - uint32 triggered_spell_id = 0; - Unit* target = victim; - int32 basepoints0 = 0; - - switch (triggeredByAuraSpell->SpellFamilyName) - { - case SPELLFAMILY_MAGE: - { - switch (triggeredByAuraSpell->Id) - { - // Focus Magic - case 54646: - { - Unit* caster = triggeredByAura->GetCaster(); - if (!caster) - return false; - - triggered_spell_id = 54648; - target = caster; - break; - } - } - } - } - - // processed charge only counting case - if (!triggered_spell_id) - return true; - - SpellInfo const* triggerEntry = sSpellMgr->GetSpellInfo(triggered_spell_id); - - if (!triggerEntry) - { - sLog->outError(LOG_FILTER_UNITS, "Unit::HandleHasteAuraProc: Spell %u has non-existing triggered spell %u", triggeredByAuraSpell->Id, triggered_spell_id); - return false; - } - - // default case - if (!target || (target != this && !target->isAlive())) - return false; - - if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id)) - return false; - - if (basepoints0) - CastCustomSpell(target, triggered_spell_id, &basepoints0, NULL, NULL, true, castItem, triggeredByAura); - else - CastSpell(target, triggered_spell_id, true, castItem, triggeredByAura); - - if (cooldown && GetTypeId() == TYPEID_PLAYER) - ToPlayer()->AddSpellCooldown(triggered_spell_id, 0, time(NULL) + cooldown); - - return true; -} - //victim may be NULL bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown) { @@ -5128,38 +5007,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere { switch (dummySpell->Id) { - // Bloodworms Health Leech - case 50453: - { - if (Unit* owner = GetOwner()) - { - basepoints0 = int32(damage * 1.50f); - target = owner; - triggered_spell_id = 50454; - break; - } - return false; - } - // Eye for an Eye - case 9799: - case 25988: - { - // return damage % to attacker but < 50% own total health - basepoints0 = int32(std::min(CalculatePct(damage, triggerAmount), CountPctFromMaxHealth(50))); - triggered_spell_id = 25997; - break; - } - // Sweeping Strikes - case 18765: - case 35429: - { - target = SelectNearbyTarget(victim); - if (!target) - return false; - - triggered_spell_id = 26654; - break; - } // Unstable Power case 24658: { @@ -5176,67 +5023,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere RemoveAuraFromStack(24662); return true; } - // Adaptive Warding (Frostfire Regalia set) - case 28764: - { - if (!procSpell) - return false; - - // find Mage Armor - if (!GetAuraEffect(SPELL_AURA_MOD_MANA_REGEN_INTERRUPT, SPELLFAMILY_MAGE, 0x10000000, 0, 0)) - return false; - - switch (GetFirstSchoolInMask(procSpell->GetSchoolMask())) - { - case SPELL_SCHOOL_NORMAL: - case SPELL_SCHOOL_HOLY: - return false; // ignored - case SPELL_SCHOOL_FIRE: triggered_spell_id = 28765; break; - case SPELL_SCHOOL_NATURE: triggered_spell_id = 28768; break; - case SPELL_SCHOOL_FROST: triggered_spell_id = 28766; break; - case SPELL_SCHOOL_SHADOW: triggered_spell_id = 28769; break; - case SPELL_SCHOOL_ARCANE: triggered_spell_id = 28770; break; - default: - return false; - } - - target = this; - break; - } - // Obsidian Armor (Justice Bearer`s Pauldrons shoulder) - case 27539: - { - if (!procSpell) - return false; - - switch (GetFirstSchoolInMask(procSpell->GetSchoolMask())) - { - case SPELL_SCHOOL_NORMAL: - return false; // ignore - case SPELL_SCHOOL_HOLY: triggered_spell_id = 27536; break; - case SPELL_SCHOOL_FIRE: triggered_spell_id = 27533; break; - case SPELL_SCHOOL_NATURE: triggered_spell_id = 27538; break; - case SPELL_SCHOOL_FROST: triggered_spell_id = 27534; break; - case SPELL_SCHOOL_SHADOW: triggered_spell_id = 27535; break; - case SPELL_SCHOOL_ARCANE: triggered_spell_id = 27540; break; - default: - return false; - } - - target = this; - break; - } - // Mana Leech (Passive) (Priest Pet Aura) - case 28305: - { - // Cast on owner - target = GetOwner(); - if (!target) - return false; - - triggered_spell_id = 34650; - break; - } // Mark of Malice case 33493: { @@ -5427,14 +5213,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere } return false; } - // Living Seed - case 48504: - { - triggered_spell_id = 48503; - basepoints0 = triggerAmount; - target = this; - break; - } // Kill command case 58914: { @@ -5594,50 +5372,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere } break; } - case 71875: // Item - Black Bruise: Necrotic Touch Proc - case 71877: - { - basepoints0 = CalculatePct(int32(damage), triggerAmount); - triggered_spell_id = 71879; - break; - } - // Item - Shadowmourne Legendary - case 71903: - { - if (!victim || !victim->isAlive() || HasAura(73422)) // cant collect shards while under effect of Chaos Bane buff - return false; - - CastSpell(this, 71905, true, NULL, triggeredByAura); - - // this can't be handled in AuraScript because we need to know victim - Aura const* dummy = GetAura(71905); - if (!dummy || dummy->GetStackAmount() < 10) - return false; - - RemoveAurasDueToSpell(71905); - triggered_spell_id = 71904; - target = victim; - break; - } - // Shadow's Fate (Shadowmourne questline) - case 71169: - { - Unit* caster = triggeredByAura->GetCaster(); - if (caster && caster->GetTypeId() == TYPEID_PLAYER && caster->ToPlayer()->GetQuestStatus(24547) == QUEST_STATUS_INCOMPLETE) - { - CastSpell(caster, 71203, true); - return true; - } - else - return false; - } - // Essence of the Blood Queen - case 70871: - { - basepoints0 = CalculatePct(int32(damage), triggerAmount); - CastCustomSpell(70872, SPELLVALUE_BASE_POINT0, basepoints0, this); - return true; - } case 65032: // Boom aura (321 Boombot) { if (victim->GetEntry() != 33343) // Scrapbot @@ -5650,13 +5384,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere instance->DoCastSpellOnPlayers(65037); // Achievement criteria marker break; } - // Dark Hunger (The Lich King encounter) - case 69383: - { - basepoints0 = CalculatePct(int32(damage), 50); - triggered_spell_id = 69384; - break; - } } break; } @@ -5674,22 +5401,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere triggered_spell_id = 29442; break; } - // Master of Elements - if (dummySpell->SpellIconID == 1920) - { - if (!procSpell) - return false; - - // mana cost save - int32 cost = int32(procSpell->ManaCost + CalculatePct(GetCreateMana(), procSpell->ManaCostPercentage)); - basepoints0 = CalculatePct(cost, triggerAmount); - if (basepoints0 <= 0) - return false; - - target = this; - triggered_spell_id = 29077; - break; - } // Arcane Potency if (dummySpell->SpellIconID == 2120) { @@ -5707,7 +5418,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere } break; } - // Hot Streak if (dummySpell->SpellIconID == 2999) { @@ -5730,20 +5440,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere counter->SetAmount(25); return true; } - // Burnout - if (dummySpell->SpellIconID == 2998) - { - if (!procSpell) - return false; - - int32 cost = int32(procSpell->ManaCost + CalculatePct(GetCreateMana(), procSpell->ManaCostPercentage)); - basepoints0 = CalculatePct(cost, triggerAmount); - if (basepoints0 <= 0) - return false; - triggered_spell_id = 44450; - target = this; - break; - } // Incanter's Regalia set (add trigger chance to Mana Shield) if (dummySpell->SpellFamilyFlags[0] & 0x8000) { @@ -5773,29 +5469,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere RemoveAurasByType(SPELL_AURA_MOD_DECREASE_SPEED); return true; } - // Ignite - case 11119: - case 11120: - case 12846: - case 12847: - case 12848: - { - switch (dummySpell->Id) - { - case 11119: basepoints0 = int32(0.04f * damage); break; - case 11120: basepoints0 = int32(0.08f * damage); break; - case 12846: basepoints0 = int32(0.12f * damage); break; - case 12847: basepoints0 = int32(0.16f * damage); break; - case 12848: basepoints0 = int32(0.20f * damage); break; - default: - sLog->outError(LOG_FILTER_UNITS, "Unit::HandleDummyAuraProc: non handled spell id: %u (IG)", dummySpell->Id); - return false; - } - - triggered_spell_id = 12654; - basepoints0 += victim->GetRemainingPeriodicAmount(GetGUID(), triggered_spell_id, SPELL_AURA_PERIODIC_DAMAGE); - break; - } // Glyph of Ice Block case 56372: { @@ -5815,25 +5488,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere } break; } - // Blessing of Ancient Kings (Val'anyr, Hammer of Ancient Kings) - case 64411: - { - if (!victim) - return false; - basepoints0 = int32(CalculatePct(damage, 15)); - if (AuraEffect* aurEff = victim->GetAuraEffect(64413, 0, GetGUID())) - { - // The shield can grow to a maximum size of 20, 000 damage absorbtion - aurEff->SetAmount(std::min(aurEff->GetAmount() + basepoints0, 20000)); - - // Refresh and return to prevent replacing the aura - aurEff->GetBase()->RefreshDuration(); - return true; - } - target = victim; - triggered_spell_id = 64413; - break; - } case 47020: // Enter vehicle XT-002 (Scrapbot) { if (GetTypeId() != TYPEID_UNIT) @@ -5854,16 +5508,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere { switch (dummySpell->Id) { - // Sweeping Strikes - case 12328: - { - target = SelectNearbyTarget(victim); - if (!target) - return false; - - triggered_spell_id = 26654; - break; - } // Victorious case 32216: { @@ -5913,14 +5557,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere target = this; break; } - // Damage Shield - if (dummySpell->SpellIconID == 3214) - { - triggered_spell_id = 59653; - // % of amount blocked - basepoints0 = CalculatePct(int32(GetShieldBlockValue()), triggerAmount); - break; - } // Glyph of Blocking if (dummySpell->Id == 58375) { @@ -5991,31 +5627,8 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere triggeredByAura->SetAmount(triggeredByAura->GetAmount() - damage); return true; } - // Fel Synergy - if (dummySpell->SpellIconID == 3222) - { - target = GetGuardianPet(); - if (!target) - return false; - basepoints0 = CalculatePct(int32(damage), triggerAmount); - triggered_spell_id = 54181; - break; - } switch (dummySpell->Id) { - // Siphon Life - case 63108: - { - if (!damage) - break; - // Glyph of Siphon Life - if (HasAura(56216)) - triggerAmount += triggerAmount / 4; - triggered_spell_id = 63106; - target = this; - basepoints0 = CalculatePct(int32(damage), triggerAmount); - break; - } // Glyph of Shadowflame case 63310: { @@ -6126,24 +5739,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere victim->CastSpell(victim, 57669, true, castItem, triggeredByAura); return true; // no hidden cooldown } - // Divine Aegis - if (dummySpell->SpellIconID == 2820) - { - if (!target) - return false; - - // Multiple effects stack, so let's try to find this aura. - int32 bonus = 0; - if (AuraEffect const* aurEff = target->GetAuraEffect(47753, 0)) - bonus = aurEff->GetAmount(); - - basepoints0 = CalculatePct(int32(damage), triggerAmount) + bonus; - if (basepoints0 > target->getLevel() * 125) - basepoints0 = target->getLevel() * 125; - - triggered_spell_id = 47753; - break; - } // Body and Soul if (dummySpell->SpellIconID == 2218) { @@ -6184,31 +5779,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere target = this; break; } - // Glyph of Prayer of Healing - case 55680: - { - triggered_spell_id = 56161; - - SpellInfo const* GoPoH = sSpellMgr->GetSpellInfo(triggered_spell_id); - if (!GoPoH) - return false; - - int EffIndex = 0; - for (uint8 i = 0; i < MAX_SPELL_EFFECTS; i++) - { - if (GoPoH->Effects[i].Effect == SPELL_EFFECT_APPLY_AURA) - { - EffIndex = i; - break; - } - } - int32 tickcount = GoPoH->GetMaxDuration() / GoPoH->Effects[EffIndex].Amplitude; - if (!tickcount) - return false; - - basepoints0 = CalculatePct(int32(damage), triggerAmount) / tickcount; - break; - } // Improved Shadowform case 47570: case 47569: @@ -6481,13 +6051,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere triggered_spell_id = isWrathSpell ? 48518 : 48517; break; } - // Living Seed - else if (dummySpell->SpellIconID == 2860) - { - triggered_spell_id = 48504; - basepoints0 = CalculatePct(int32(damage), triggerAmount); - break; - } break; } case SPELLFAMILY_ROGUE: @@ -6508,16 +6071,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere triggered_spell_id = 32747; break; } - case 57934: // Tricks of the Trade - { - Unit* redirectTarget = GetMisdirectionTarget(); - RemoveAura(57934); - if (!redirectTarget) - break; - CastSpell(this, 59628, true); - CastSpell(redirectTarget, 57933, true); - break; - } } switch (dummySpell->SpellIconID) @@ -6636,14 +6189,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere switch (dummySpell->Id) { - case 34477: // Misdirection - { - if (!GetMisdirectionTarget()) - return false; - triggered_spell_id = 35079; // 4 sec buff on self - target = this; - break; - } case 57870: // Glyph of Mend Pet { victim->CastSpell(victim, 57894, true, NULL, NULL, GetGUID()); @@ -6654,18 +6199,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere } case SPELLFAMILY_PALADIN: { - // Seal of Righteousness - melee proc dummy (addition ${$MWS*(0.022*$AP+0.044*$SPH)} damage) - if (dummySpell->SpellFamilyFlags[0] & 0x8000000) - { - if (effIndex != 0) - return false; - triggered_spell_id = 25742; - float ap = GetTotalAttackPowerValue(BASE_ATTACK); - int32 holy = SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_HOLY) + - victim->SpellBaseDamageBonusTaken(SPELL_SCHOOL_MASK_HOLY); - basepoints0 = (int32)GetAttackTime(BASE_ATTACK) * int32(ap * 0.022f + 0.044f * holy) / 1000; - break; - } // Light's Beacon - Beacon of Light if (dummySpell->Id == 53651) { @@ -6832,20 +6365,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere } break; } - case 25899: // Greater Blessing of Sanctuary - case 20911: // Blessing of Sanctuary - { - target = this; - switch (target->getPowerType()) - { - case POWER_MANA: - triggered_spell_id = 57319; - break; - default: - return false; - } - break; - } // Seal of Vengeance (damage calc on apply aura) case 31801: { @@ -7348,20 +6867,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere target = this; break; } - // Earth Shield - if (dummySpell->SpellFamilyFlags[1] & 0x00000400) - { - // 3.0.8: Now correctly uses the Shaman's own spell critical strike chance to determine the chance of a critical heal. - originalCaster = triggeredByAura->GetCasterGUID(); - target = this; - basepoints0 = triggerAmount; - - // Glyph of Earth Shield - if (AuraEffect* aur = GetAuraEffect(63279, 0)) - AddPct(basepoints0, aur->GetAmount()); - triggered_spell_id = 379; - break; - } // Flametongue Weapon (Passive) if (dummySpell->SpellFamilyFlags[0] & 0x200000) { @@ -7813,114 +7318,6 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere return true; } -bool Unit::HandleObsModEnergyAuraProc(Unit* victim, uint32 /*damage*/, AuraEffect* triggeredByAura, SpellInfo const* /*procSpell*/, uint32 /*procFlag*/, uint32 /*procEx*/, uint32 cooldown) -{ - SpellInfo const* dummySpell = triggeredByAura->GetSpellInfo(); - //uint32 effIndex = triggeredByAura->GetEffIndex(); - //int32 triggerAmount = triggeredByAura->GetAmount(); - - Item* castItem = triggeredByAura->GetBase()->GetCastItemGUID() && GetTypeId() == TYPEID_PLAYER - ? ToPlayer()->GetItemByGuid(triggeredByAura->GetBase()->GetCastItemGUID()) : NULL; - - uint32 triggered_spell_id = 0; - Unit* target = victim; - int32 basepoints0 = 0; - - switch (dummySpell->SpellFamilyName) - { - case SPELLFAMILY_HUNTER: - { - // Aspect of the Viper - if (dummySpell->SpellFamilyFlags[1] & 0x40000) - { - uint32 maxmana = GetMaxPower(POWER_MANA); - basepoints0 = CalculatePct(maxmana, GetAttackTime(RANGED_ATTACK) / 1000.0f); - target = this; - triggered_spell_id = 34075; - break; - } - break; - } - } - // processed charge only counting case - if (!triggered_spell_id) - return true; - - SpellInfo const* triggerEntry = sSpellMgr->GetSpellInfo(triggered_spell_id); - - // Try handle unknown trigger spells - if (!triggerEntry) - { - sLog->outError(LOG_FILTER_UNITS, "Unit::HandleObsModEnergyAuraProc: Spell %u has non-existing triggered spell %u", dummySpell->Id, triggered_spell_id); - return false; - } - - if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id)) - return false; - if (basepoints0) - CastCustomSpell(target, triggered_spell_id, &basepoints0, NULL, NULL, true, castItem, triggeredByAura); - else - CastSpell(target, triggered_spell_id, true, castItem, triggeredByAura); - - if (cooldown && GetTypeId() == TYPEID_PLAYER) - ToPlayer()->AddSpellCooldown(triggered_spell_id, 0, time(NULL) + cooldown); - return true; -} -bool Unit::HandleModDamagePctTakenAuraProc(Unit* victim, uint32 /*damage*/, AuraEffect* triggeredByAura, SpellInfo const* /*procSpell*/, uint32 /*procFlag*/, uint32 /*procEx*/, uint32 cooldown) -{ - SpellInfo const* dummySpell = triggeredByAura->GetSpellInfo(); - //uint32 effIndex = triggeredByAura->GetEffIndex(); - //int32 triggerAmount = triggeredByAura->GetAmount(); - - Item* castItem = triggeredByAura->GetBase()->GetCastItemGUID() && GetTypeId() == TYPEID_PLAYER - ? ToPlayer()->GetItemByGuid(triggeredByAura->GetBase()->GetCastItemGUID()) : NULL; - - uint32 triggered_spell_id = 0; - Unit* target = victim; - int32 basepoints0 = 0; - - switch (dummySpell->SpellFamilyName) - { - case SPELLFAMILY_PALADIN: - { - // Blessing of Sanctuary - if (dummySpell->SpellFamilyFlags[0] & 0x10000000) - { - switch (getPowerType()) - { - case POWER_MANA: triggered_spell_id = 57319; break; - default: - return false; - } - } - break; - } - } - // processed charge only counting case - if (!triggered_spell_id) - return true; - - SpellInfo const* triggerEntry = sSpellMgr->GetSpellInfo(triggered_spell_id); - - if (!triggerEntry) - { - sLog->outError(LOG_FILTER_UNITS, "Unit::HandleModDamagePctTakenAuraProc: Spell %u has non-existing triggered spell %u", dummySpell->Id, triggered_spell_id); - return false; - } - - if (cooldown && GetTypeId() == TYPEID_PLAYER && ToPlayer()->HasSpellCooldown(triggered_spell_id)) - return false; - - if (basepoints0) - CastCustomSpell(target, triggered_spell_id, &basepoints0, NULL, NULL, true, castItem, triggeredByAura); - else - CastSpell(target, triggered_spell_id, true, castItem, triggeredByAura); - - if (cooldown && GetTypeId() == TYPEID_PLAYER) - ToPlayer()->AddSpellCooldown(triggered_spell_id, 0, time(NULL) + cooldown); - - return true; -} // Used in case when access to whole aura is needed // All procs should be handled like this... @@ -8303,12 +7700,6 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg RemoveAuraFromStack(auraSpellInfo->Id); return false; } - if (auraSpellInfo->Id == 50720) - { - target = triggeredByAura->GetCaster(); - if (!target) - return false; - } break; case SPELLFAMILY_WARLOCK: { @@ -14536,7 +13927,7 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u SpellInfo const* spellInfo = i->aura->GetSpellInfo(); uint32 Id = i->aura->GetId(); - AuraApplication const* aurApp = i->aura->GetApplicationOfTarget(GetGUID()); + AuraApplication* aurApp = i->aura->GetApplicationOfTarget(GetGUID()); bool prepare = i->aura->CallScriptPrepareProcHandlers(aurApp, eventInfo); @@ -14589,17 +13980,10 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u case SPELL_AURA_PROC_TRIGGER_DAMAGE: { // target has to be valid - if (!target) + if (!eventInfo.GetProcTarget()) break; - sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: doing %u damage from spell id %u (triggered by %s aura of spell %u)", triggeredByAura->GetAmount(), spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId()); - SpellNonMeleeDamage damageInfo(this, target, spellInfo->Id, spellInfo->SchoolMask); - uint32 newDamage = SpellDamageBonusDone(target, spellInfo, triggeredByAura->GetAmount(), SPELL_DIRECT_DAMAGE); - newDamage = target->SpellDamageBonusTaken(this, spellInfo, newDamage, SPELL_DIRECT_DAMAGE); - CalculateSpellDamageTaken(&damageInfo, newDamage, spellInfo); - DealDamageMods(damageInfo.target, damageInfo.damage, &damageInfo.absorb); - SendSpellNonMeleeDamageLog(&damageInfo); - DealSpellDamage(&damageInfo, true); + triggeredByAura->HandleProcTriggerDamageAuraProc(aurApp, eventInfo); // this function is part of the new proc system takeCharges = true; break; } @@ -14612,22 +13996,12 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u break; } case SPELL_AURA_OBS_MOD_POWER: - sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId()); - if (HandleObsModEnergyAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown)) - takeCharges = true; - break; + case SPELL_AURA_MOD_SPELL_CRIT_CHANCE: case SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN: - sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId()); - if (HandleModDamagePctTakenAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown)) - takeCharges = true; - break; case SPELL_AURA_MOD_MELEE_HASTE: - { - sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s haste aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId()); - if (HandleHasteAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown)) - takeCharges = true; + sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id, isVictim ? "a victim's" : "an attacker's", triggeredByAura->GetId()); + takeCharges = true; break; - } case SPELL_AURA_OVERRIDE_CLASS_SCRIPTS: { sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId()); @@ -14699,11 +14073,6 @@ void Unit::ProcDamageAndSpellFor(bool isVictim, Unit* target, uint32 procFlag, u if (triggeredByAura->GetCasterGUID() == target->GetGUID()) takeCharges = true; break; - case SPELL_AURA_MOD_SPELL_CRIT_CHANCE: - sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "ProcDamageAndSpell: casting spell id %u (triggered by %s spell crit chance aura of spell %u)", spellInfo->Id, (isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId()); - if (procSpell && HandleSpellCritChanceAuraProc(target, damage, triggeredByAura, procSpell, procFlag, procExtra, cooldown)) - takeCharges = true; - break; // CC Auras which use their amount amount to drop // Are there any more auras which need this? case SPELL_AURA_MOD_CONFUSE: diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 4bcc9c4b823..9b353d4cc02 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -965,6 +965,28 @@ struct SpellPeriodicAuraLogInfo uint32 createProcExtendMask(SpellNonMeleeDamage* damageInfo, SpellMissInfo missCondition); +struct RedirectThreatInfo +{ + RedirectThreatInfo() : _targetGUID(0), _threatPct(0) { } + uint64 _targetGUID; + uint32 _threatPct; + + uint64 GetTargetGUID() { return _targetGUID; } + uint32 GetThreatPct() { return _threatPct; } + + void Set(uint64 guid, uint32 pct) + { + _targetGUID = guid; + _threatPct = pct; + } + + void ModifyThreatPct(int32 amount) + { + amount += _threatPct; + _threatPct = uint32(std::max(0, amount)); + } +}; + #define MAX_DECLINED_NAME_CASES 5 struct DeclinedName @@ -2153,13 +2175,12 @@ class Unit : public WorldObject uint32 GetModelForForm(ShapeshiftForm form) const; uint32 GetModelForTotem(PlayerTotemType totemType); - void SetReducedThreatPercent(uint32 pct, uint64 guid) - { - m_reducedThreatPercent = pct; - m_misdirectionTargetGUID = guid; - } - uint32 GetReducedThreatPercent() { return m_reducedThreatPercent; } - Unit* GetMisdirectionTarget() { return m_misdirectionTargetGUID ? GetUnit(*this, m_misdirectionTargetGUID) : NULL; } + // Redirect Threat + void SetRedirectThreat(uint64 guid, uint32 pct) { _redirectThreadInfo.Set(guid, pct); } + void ResetRedirectThreat() { SetRedirectThreat(0, 0); } + void ModifyRedirectThreat(int32 amount) { _redirectThreadInfo.ModifyThreatPct(amount); } + uint32 GetRedirectThreatPercent() { return _redirectThreadInfo.GetThreatPct(); } + Unit* GetRedirectThreatTarget() { return _redirectThreadInfo.GetTargetGUID() ? GetUnit(*this, _redirectThreadInfo.GetTargetGUID()) : NULL; } bool IsAIEnabled, NeedChangeAI; bool CreateVehicleKit(uint32 id, uint32 creatureEntry); @@ -2305,10 +2326,6 @@ class Unit : public WorldObject private: bool IsTriggeredAtSpellProcEvent(Unit* victim, Aura* aura, SpellInfo const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const* & spellProcEvent); bool HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); - bool HandleHasteAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); - bool HandleSpellCritChanceAuraProc(Unit* victim, uint32 damage, AuraEffect* triggredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); - bool HandleObsModEnergyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); - bool HandleModDamagePctTakenAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); bool HandleAuraProc(Unit* victim, uint32 damage, Aura* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown, bool * handled); bool HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); bool HandleOverrideClassScriptAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 cooldown); @@ -2341,8 +2358,7 @@ class Unit : public WorldObject ComboPointHolderSet m_ComboPointHolders; - uint32 m_reducedThreatPercent; - uint64 m_misdirectionTargetGUID; + RedirectThreatInfo _redirectThreadInfo; bool m_cleanupDone; // lock made to not add stuff after cleanup before delete bool m_duringRemoveFromWorld; // lock made to not add stuff after begining removing from world diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index d029d2884c9..9230c46db15 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -484,16 +484,6 @@ int32 AuraEffect::CalculateAmount(Unit* caster) case SPELL_AURA_MANA_SHIELD: m_canBeRecalculated = false; break; - case SPELL_AURA_DUMMY: - if (!caster) - break; - // Earth Shield - if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_SHAMAN && m_spellInfo->SpellFamilyFlags[1] & 0x400) - { - amount = caster->SpellHealingBonusDone(GetBase()->GetUnitOwner(), GetSpellInfo(), amount, SPELL_DIRECT_DAMAGE); - amount = GetBase()->GetUnitOwner()->SpellHealingBonusTaken(caster, GetSpellInfo(), amount, SPELL_DIRECT_DAMAGE); - } - break; default: break; } @@ -4694,10 +4684,6 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool if (Aura* newAura = target->AddAura(71564, target)) newAura->SetStackAmount(newAura->GetSpellInfo()->StackAmount); break; - case 59628: // Tricks of the Trade - if (caster && caster->GetMisdirectionTarget()) - target->SetReducedThreatPercent(100, caster->GetMisdirectionTarget()->GetGUID()); - break; } } // AT REMOVE @@ -4793,20 +4779,6 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool if (GetId() == 61777) target->CastSpell(target, GetAmount(), true); break; - case SPELLFAMILY_ROGUE: - // Tricks of the trade - switch (GetId()) - { - case 59628: //Tricks of the trade buff on rogue (6sec duration) - target->SetReducedThreatPercent(0, 0); - break; - case 57934: //Tricks of the trade buff on rogue (30sec duration) - if (aurApp->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE || !caster->GetMisdirectionTarget()) - target->SetReducedThreatPercent(0, 0); - else - target->SetReducedThreatPercent(0, caster->GetMisdirectionTarget()->GetGUID()); - break; - } default: break; } diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index a41d25eae09..795908ce4b5 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1537,17 +1537,6 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b // mods at aura apply or remove switch (GetSpellInfo()->SpellFamilyName) { - case SPELLFAMILY_GENERIC: - switch (GetId()) - { - case 50720: // Vigilance - if (apply) - target->CastSpell(caster, 59665, true, 0, 0, caster->GetGUID()); - else - target->SetReducedThreatPercent(0, 0); - break; - } - break; case SPELLFAMILY_DRUID: // Enrage if ((GetSpellInfo()->SpellFamilyFlags[0] & 0x80000) && GetSpellInfo()->SpellIconID == 961) diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 4fdf6654cba..bee770df748 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -5791,7 +5791,7 @@ void Spell::EffectRedirectThreat(SpellEffIndex /*effIndex*/) return; if (unitTarget) - m_caster->SetReducedThreatPercent((uint32)damage, unitTarget->GetGUID()); + m_caster->SetRedirectThreat(unitTarget->GetGUID(), uint32(damage)); } void Spell::EffectGameObjectDamage(SpellEffIndex /*effIndex*/) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index c8caa3976e4..5643d0ab732 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -46,6 +46,7 @@ enum Spells SPELL_FRENZIED_BLOODTHIRST_VISUAL = 71949, SPELL_VAMPIRIC_BITE = 71726, SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_PLR = 70879, + SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL = 70872, SPELL_FRENZIED_BLOODTHIRST = 70877, SPELL_UNCONTROLLABLE_FRENZY = 70923, SPELL_PRESENCE_OF_THE_DARKFALLEN = 71952, @@ -698,6 +699,42 @@ class spell_blood_queen_bloodbolt : public SpellScriptLoader } }; +// 70871 - Essence of the Blood Queen +class spell_blood_queen_essence_of_the_blood_queen : public SpellScriptLoader +{ + public: + spell_blood_queen_essence_of_the_blood_queen() : SpellScriptLoader("spell_blood_queen_essence_of_the_blood_queen") { } + + class spell_blood_queen_essence_of_the_blood_queen_AuraScript : public AuraScript + { + PrepareAuraScript(spell_blood_queen_essence_of_the_blood_queen_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL)) + return false; + return true; + } + + void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + int32 heal = CalculatePct(int32(eventInfo.GetDamageInfo()->GetDamage()), aurEff->GetAmount()); + GetTarget()->CastCustomSpell(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL, SPELLVALUE_BASE_POINT0, heal, GetTarget()); + } + + void Register() + { + OnEffectProc += AuraEffectProcFn(spell_blood_queen_essence_of_the_blood_queen_AuraScript::OnProc, EFFECT_1, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_blood_queen_essence_of_the_blood_queen_AuraScript(); + } +}; + class spell_blood_queen_pact_of_the_darkfallen : public SpellScriptLoader { public: @@ -849,6 +886,7 @@ void AddSC_boss_blood_queen_lana_thel() new spell_blood_queen_vampiric_bite(); new spell_blood_queen_frenzied_bloodthirst(); new spell_blood_queen_bloodbolt(); + new spell_blood_queen_essence_of_the_blood_queen(); new spell_blood_queen_pact_of_the_darkfallen(); new spell_blood_queen_pact_of_the_darkfallen_dmg(); new spell_blood_queen_pact_of_the_darkfallen_dmg_target(); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 452d09cf65f..3bd313fa148 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -145,6 +145,7 @@ enum Spells SPELL_RESTORE_SOUL = 72595, SPELL_RESTORE_SOULS = 73650, // Heroic SPELL_DARK_HUNGER = 69383, // Passive proc healing + SPELL_DARK_HUNGER_HEAL = 69384, SPELL_DESTROY_SOUL = 74086, // Used when Terenas Menethil dies SPELL_SOUL_RIP = 69397, // Deals increasing damage SPELL_SOUL_RIP_DAMAGE = 69398, @@ -3008,6 +3009,41 @@ class spell_the_lich_king_restore_soul : public SpellScriptLoader } }; +class spell_the_lich_king_dark_hunger : public SpellScriptLoader +{ + public: + spell_the_lich_king_dark_hunger() : SpellScriptLoader("spell_the_lich_king_dark_hunger") { } + + class spell_the_lich_king_dark_hunger_AuraScript : public AuraScript + { + PrepareAuraScript(spell_the_lich_king_dark_hunger_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_DARK_HUNGER_HEAL)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + int32 heal = int32(eventInfo.GetDamageInfo()->GetDamage() / 2); + GetTarget()->CastCustomSpell(SPELL_DARK_HUNGER_HEAL, SPELLVALUE_BASE_POINT0, heal, GetTarget(), true, NULL, aurEff); + } + + void Register() + { + OnEffectProc += AuraEffectProcFn(spell_the_lich_king_dark_hunger_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_the_lich_king_dark_hunger_AuraScript(); + } +}; + class spell_the_lich_king_in_frostmourne_room : public SpellScriptLoader { public: @@ -3253,6 +3289,7 @@ void AddSC_boss_the_lich_king() new spell_the_lich_king_lights_favor(); new spell_the_lich_king_soul_rip(); new spell_the_lich_king_restore_soul(); + new spell_the_lich_king_dark_hunger(); new spell_the_lich_king_in_frostmourne_room(); new spell_the_lich_king_summon_spirit_bomb(); new spell_the_lich_king_trigger_vile_spirit(); diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 62a0599dab1..73c34d42538 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -31,6 +31,7 @@ enum DeathKnightSpells SPELL_DK_ANTI_MAGIC_SHELL_TALENT = 51052, SPELL_DK_BLACK_ICE_R1 = 49140, SPELL_DK_BLOOD_BOIL_TRIGGERED = 65658, + SPELL_DK_BLOOD_GORGED_HEAL = 50454, SPELL_DK_CORPSE_EXPLOSION_TRIGGERED = 43999, SPELL_DK_CORPSE_EXPLOSION_VISUAL = 51270, SPELL_DK_DEATH_COIL_DAMAGE = 47632, @@ -252,6 +253,58 @@ class spell_dk_blood_boil : public SpellScriptLoader } }; +// 50453 - Bloodworms Health Leech +class spell_dk_blood_gorged : public SpellScriptLoader +{ + public: + spell_dk_blood_gorged() : SpellScriptLoader("spell_dk_blood_gorged") { } + + class spell_dk_blood_gorged_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dk_blood_gorged_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_DK_BLOOD_GORGED_HEAL)) + return false; + return true; + } + + bool Load() + { + _procTarget = NULL; + return true; + } + + bool CheckProc(ProcEventInfo& /*eventInfo*/) + { + _procTarget = GetTarget()->GetOwner(); + return _procTarget; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + int32 bp = int32(eventInfo.GetDamageInfo()->GetDamage() * 1.5f); + GetTarget()->CastCustomSpell(SPELL_DK_BLOOD_GORGED_HEAL, SPELLVALUE_BASE_POINT0, bp, _procTarget, true, NULL, aurEff); + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_dk_blood_gorged_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_dk_blood_gorged_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + + private: + Unit* _procTarget; + }; + + AuraScript* GetAuraScript() const + { + return new spell_dk_blood_gorged_AuraScript(); + } +}; + // 49158 - Corpse Explosion (51325, 51326, 51327, 51328) class spell_dk_corpse_explosion : public SpellScriptLoader { @@ -958,6 +1011,7 @@ void AddSC_deathknight_spell_scripts() new spell_dk_anti_magic_shell_self(); new spell_dk_anti_magic_zone(); new spell_dk_blood_boil(); + new spell_dk_blood_gorged(); new spell_dk_corpse_explosion(); new spell_dk_death_coil(); new spell_dk_death_gate(); diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index e2b918e1c7f..160f14ff670 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -37,6 +37,8 @@ enum DruidSpells SPELL_DRUID_KING_OF_THE_JUNGLE = 48492, SPELL_DRUID_LIFEBLOOM_ENERGIZE = 64372, SPELL_DRUID_LIFEBLOOM_FINAL_HEAL = 33778, + SPELL_DRUID_LIVING_SEED_HEAL = 48503, + SPELL_DRUID_LIVING_SEED_PROC = 48504, SPELL_DRUID_NATURES_SPLENDOR = 57865, SPELL_DRUID_SURVIVAL_INSTINCTS = 50322, SPELL_DRUID_SAVAGE_ROAR = 62071, @@ -327,6 +329,77 @@ class spell_dru_lifebloom : public SpellScriptLoader } }; +// -48496 - Living Seed +class spell_dru_living_seed : public SpellScriptLoader +{ + public: + spell_dru_living_seed() : SpellScriptLoader("spell_dru_living_seed") { } + + class spell_dru_living_seed_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_living_seed_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIVING_SEED_PROC)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + int32 amount = CalculatePct(eventInfo.GetHealInfo()->GetHeal(), aurEff->GetAmount()); + GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_PROC, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, NULL, aurEff); + } + + void Register() + { + OnEffectProc += AuraEffectProcFn(spell_dru_living_seed_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_dru_living_seed_AuraScript(); + } +}; + +// 48504 - Living Seed (Proc) +class spell_dru_living_seed_proc : public SpellScriptLoader +{ + public: + spell_dru_living_seed_proc() : SpellScriptLoader("spell_dru_living_seed_proc") { } + + class spell_dru_living_seed_proc_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dru_living_seed_proc_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_DRUID_LIVING_SEED_HEAL)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastCustomSpell(SPELL_DRUID_LIVING_SEED_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, NULL, aurEff); + } + + void Register() + { + OnEffectProc += AuraEffectProcFn(spell_dru_living_seed_proc_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_dru_living_seed_proc_AuraScript(); + } +}; + // 69366 - Moonkin Form passive class spell_dru_moonkin_form_passive : public SpellScriptLoader { @@ -921,6 +994,8 @@ void AddSC_druid_spell_scripts() new spell_dru_innervate(); new spell_dru_insect_swarm(); new spell_dru_lifebloom(); + new spell_dru_living_seed(); + new spell_dru_living_seed_proc(); new spell_dru_moonkin_form_passive(); new spell_dru_owlkin_frenzy(); new spell_dru_predatory_strikes(); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 6004ec6cf89..05fad623114 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -72,6 +72,97 @@ class spell_gen_absorb0_hitlimit1 : public SpellScriptLoader } }; +// 28764 - Adaptive Warding (Frostfire Regalia Set) +enum AdaptiveWarding +{ + SPELL_GEN_ADAPTIVE_WARDING_FIRE = 28765, + SPELL_GEN_ADAPTIVE_WARDING_NATURE = 28768, + SPELL_GEN_ADAPTIVE_WARDING_FROST = 28766, + SPELL_GEN_ADAPTIVE_WARDING_SHADOW = 28769, + SPELL_GEN_ADAPTIVE_WARDING_ARCANE = 28770 +}; + +class spell_gen_adaptive_warding : public SpellScriptLoader +{ + public: + spell_gen_adaptive_warding() : SpellScriptLoader("spell_gen_adaptive_warding") { } + + class spell_gen_adaptive_warding_AuraScript : public AuraScript + { + PrepareAuraScript(spell_gen_adaptive_warding_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_GEN_ADAPTIVE_WARDING_FIRE) || + !sSpellMgr->GetSpellInfo(SPELL_GEN_ADAPTIVE_WARDING_NATURE) || + !sSpellMgr->GetSpellInfo(SPELL_GEN_ADAPTIVE_WARDING_FROST) || + !sSpellMgr->GetSpellInfo(SPELL_GEN_ADAPTIVE_WARDING_SHADOW) || + !sSpellMgr->GetSpellInfo(SPELL_GEN_ADAPTIVE_WARDING_ARCANE)) + return false; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + if (eventInfo.GetDamageInfo()->GetSpellInfo()) // eventInfo.GetSpellInfo() + return false; + + // find Mage Armor + if (!GetTarget()->GetAuraEffect(SPELL_AURA_MOD_MANA_REGEN_INTERRUPT, SPELLFAMILY_MAGE, 0x10000000, 0x0, 0x0)) + return false; + + switch (GetFirstSchoolInMask(eventInfo.GetSchoolMask())) + { + case SPELL_SCHOOL_NORMAL: + case SPELL_SCHOOL_HOLY: + return false; + default: + break; + } + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + uint32 spellId = 0; + switch (GetFirstSchoolInMask(eventInfo.GetSchoolMask())) + { + case SPELL_SCHOOL_FIRE: + spellId = SPELL_GEN_ADAPTIVE_WARDING_FIRE; + break; + case SPELL_SCHOOL_NATURE: + spellId = SPELL_GEN_ADAPTIVE_WARDING_NATURE; + break; + case SPELL_SCHOOL_FROST: + spellId = SPELL_GEN_ADAPTIVE_WARDING_FROST; + break; + case SPELL_SCHOOL_SHADOW: + spellId = SPELL_GEN_ADAPTIVE_WARDING_SHADOW; + break; + case SPELL_SCHOOL_ARCANE: + spellId = SPELL_GEN_ADAPTIVE_WARDING_ARCANE; + break; + default: + return; + } + GetTarget()->CastSpell(GetTarget(), spellId, true, NULL, aurEff); + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_gen_adaptive_warding_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_gen_adaptive_warding_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_gen_adaptive_warding_AuraScript(); + } +}; + // 41337 Aura of Anger class spell_gen_aura_of_anger : public SpellScriptLoader { @@ -378,6 +469,93 @@ class spell_gen_nightmare_vine : public SpellScriptLoader } }; +// 27539 - Obsidian Armor +enum ObsidianArmor +{ + SPELL_GEN_OBSIDIAN_ARMOR_HOLY = 27536, + SPELL_GEN_OBSIDIAN_ARMOR_FIRE = 27533, + SPELL_GEN_OBSIDIAN_ARMOR_NATURE = 27538, + SPELL_GEN_OBSIDIAN_ARMOR_FROST = 27534, + SPELL_GEN_OBSIDIAN_ARMOR_SHADOW = 27535, + SPELL_GEN_OBSIDIAN_ARMOR_ARCANE = 27540 +}; + +class spell_gen_obsidian_armor : public SpellScriptLoader +{ + public: + spell_gen_obsidian_armor() : SpellScriptLoader("spell_gen_obsidian_armor") { } + + class spell_gen_obsidian_armor_AuraScript : public AuraScript + { + PrepareAuraScript(spell_gen_obsidian_armor_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_HOLY) || + !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_FIRE) || + !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_NATURE) || + !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_FROST) || + !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_SHADOW) || + !sSpellMgr->GetSpellInfo(SPELL_GEN_OBSIDIAN_ARMOR_ARCANE)) + return false; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + if (eventInfo.GetDamageInfo()->GetSpellInfo()) // eventInfo.GetSpellInfo() + return false; + + if (GetFirstSchoolInMask(eventInfo.GetSchoolMask()) == SPELL_SCHOOL_NORMAL) + return false; + + return true; + } + + void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + uint32 spellId = 0; + switch (GetFirstSchoolInMask(eventInfo.GetSchoolMask())) + { + case SPELL_SCHOOL_HOLY: + spellId = SPELL_GEN_OBSIDIAN_ARMOR_HOLY; + break; + case SPELL_SCHOOL_FIRE: + spellId = SPELL_GEN_OBSIDIAN_ARMOR_FIRE; + break; + case SPELL_SCHOOL_NATURE: + spellId = SPELL_GEN_OBSIDIAN_ARMOR_NATURE; + break; + case SPELL_SCHOOL_FROST: + spellId = SPELL_GEN_OBSIDIAN_ARMOR_FROST; + break; + case SPELL_SCHOOL_SHADOW: + spellId = SPELL_GEN_OBSIDIAN_ARMOR_SHADOW; + break; + case SPELL_SCHOOL_ARCANE: + spellId = SPELL_GEN_OBSIDIAN_ARMOR_ARCANE; + break; + default: + return; + } + GetTarget()->CastSpell(GetTarget(), spellId, true, NULL, aurEff); + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_gen_obsidian_armor_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_gen_obsidian_armor_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_gen_obsidian_armor_AuraScript(); + } +}; + // 45472 Parachute enum ParachuteSpells { @@ -3343,6 +3521,7 @@ class spell_gen_replenishment : public SpellScriptLoader void AddSC_generic_spell_scripts() { new spell_gen_absorb0_hitlimit1(); + new spell_gen_adaptive_warding(); new spell_gen_aura_of_anger(); new spell_gen_av_drekthar_presence(); new spell_gen_burn_brutallus(); @@ -3350,6 +3529,7 @@ void AddSC_generic_spell_scripts() new spell_gen_create_lance(); new spell_gen_netherbloom(); new spell_gen_nightmare_vine(); + new spell_gen_obsidian_armor(); new spell_gen_parachute(); new spell_gen_pet_summoned(); new spell_gen_remove_flight_auras(); diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index a9b21807899..877248cf1a8 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -33,12 +33,15 @@ enum HunterSpells { SPELL_HUNTER_ASPECT_OF_THE_BEAST_PET = 61669, + SPELL_HUNTER_ASPECT_OF_THE_VIPER_ENERGIZE = 34075, SPELL_HUNTER_BESTIAL_WRATH = 19574, SPELL_HUNTER_CHIMERA_SHOT_SERPENT = 53353, SPELL_HUNTER_CHIMERA_SHOT_VIPER = 53358, SPELL_HUNTER_CHIMERA_SHOT_SCORPID = 53359, + SPELL_HUNTER_GLYPHE_OF_ASPECT_OF_THE_VIPER = 56851, SPELL_HUNTER_INVIGORATION_TRIGGERED = 53398, SPELL_HUNTER_MASTERS_CALL_TRIGGERED = 62305, + SPELL_HUNTER_MISDIRECTION_PROC = 35079, SPELL_HUNTER_PET_LAST_STAND_TRIGGERED = 53479, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX = 55709, SPELL_HUNTER_PET_HEART_OF_THE_PHOENIX_TRIGGERED = 54114, @@ -99,6 +102,50 @@ class spell_hun_aspect_of_the_beast : public SpellScriptLoader } }; +// 34074 - Aspect of the Viper +class spell_hun_ascpect_of_the_viper : public SpellScriptLoader +{ + public: + spell_hun_ascpect_of_the_viper() : SpellScriptLoader("spell_hun_ascpect_of_the_viper") { } + + class spell_hun_ascpect_of_the_viper_AuraScript : public AuraScript + { + PrepareAuraScript(spell_hun_ascpect_of_the_viper_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_ASPECT_OF_THE_VIPER_ENERGIZE)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_GLYPHE_OF_ASPECT_OF_THE_VIPER)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + + uint32 maxMana = GetTarget()->GetMaxPower(POWER_MANA); + int32 mana = CalculatePct(maxMana, GetTarget()->GetAttackTime(RANGED_ATTACK) / 1000.0f); + + if (AuraEffect const* glyphe = GetTarget()->GetAuraEffect(SPELL_HUNTER_GLYPHE_OF_ASPECT_OF_THE_VIPER, EFFECT_0)) + AddPct(mana, glyphe->GetAmount()); + + GetTarget()->CastCustomSpell(SPELL_HUNTER_ASPECT_OF_THE_VIPER_ENERGIZE, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, NULL, aurEff); + } + + void Register() + { + OnEffectProc += AuraEffectProcFn(spell_hun_ascpect_of_the_viper_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_OBS_MOD_POWER); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_hun_ascpect_of_the_viper_AuraScript(); + } +}; + // 53209 - Chimera Shot class spell_hun_chimera_shot : public SpellScriptLoader { @@ -358,16 +405,35 @@ class spell_hun_misdirection : public SpellScriptLoader { PrepareAuraScript(spell_hun_misdirection_AuraScript); + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_MISDIRECTION_PROC)) + return false; + return true; + } + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - if (Unit* caster = GetCaster()) - if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_DEFAULT) - caster->SetReducedThreatPercent(0, 0); + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_DEFAULT) + GetTarget()->ResetRedirectThreat(); + } + + bool CheckProc(ProcEventInfo& /*eventInfo*/) + { + return GetTarget()->GetRedirectThreatTarget(); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastSpell(GetTarget(), SPELL_HUNTER_MISDIRECTION_PROC, true, NULL, aurEff); } void Register() { AfterEffectRemove += AuraEffectRemoveFn(spell_hun_misdirection_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + DoCheckProc += AuraCheckProcFn(spell_hun_misdirection_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_hun_misdirection_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_DUMMY); } }; @@ -377,7 +443,7 @@ class spell_hun_misdirection : public SpellScriptLoader } }; -// 35079 - Misdirection proc +// 35079 - Misdirection (Proc) class spell_hun_misdirection_proc : public SpellScriptLoader { public: @@ -389,8 +455,7 @@ class spell_hun_misdirection_proc : public SpellScriptLoader void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - if (GetCaster()) - GetCaster()->SetReducedThreatPercent(0, 0); + GetTarget()->ResetRedirectThreat(); } void Register() @@ -740,6 +805,7 @@ class spell_hun_target_only_pet_and_owner : public SpellScriptLoader void AddSC_hunter_spell_scripts() { new spell_hun_aspect_of_the_beast(); + new spell_hun_ascpect_of_the_viper(); new spell_hun_chimera_shot(); new spell_hun_disengage(); new spell_hun_invigoration(); diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index c38d05bc02a..b8e17f4ecca 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -102,6 +102,63 @@ class spell_item_arcane_shroud : public SpellScriptLoader } }; +// 64411 - Blessing of Ancient Kings (Val'anyr, Hammer of Ancient Kings) +enum BlessingOfAncientKings +{ + SPELL_PROTECTION_OF_ANCIENT_KINGS = 64413 +}; + +class spell_item_blessing_of_ancient_kings : public SpellScriptLoader +{ + public: + spell_item_blessing_of_ancient_kings() : SpellScriptLoader("spell_item_blessing_of_ancient_kings") { } + + class spell_item_blessing_of_ancient_kings_AuraScript : public AuraScript + { + PrepareAuraScript(spell_item_blessing_of_ancient_kings_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_PROTECTION_OF_ANCIENT_KINGS)) + return false; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + return eventInfo.GetProcTarget(); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + int32 absorb = int32(CalculatePct(eventInfo.GetHealInfo()->GetHeal(), 15.0f)); + if (AuraEffect* protEff = eventInfo.GetProcTarget()->GetAuraEffect(SPELL_PROTECTION_OF_ANCIENT_KINGS, 0, eventInfo.GetActor()->GetGUID())) + { + // The shield can grow to a maximum size of 20,000 damage absorbtion + protEff->SetAmount(std::min(protEff->GetAmount() + absorb, 20000)); + + // Refresh and return to prevent replacing the aura + aurEff->GetBase()->RefreshDuration(); + } + else + GetTarget()->CastCustomSpell(SPELL_PROTECTION_OF_ANCIENT_KINGS, SPELLVALUE_BASE_POINT0, absorb, eventInfo.GetProcTarget(), true, NULL, aurEff); + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_item_blessing_of_ancient_kings_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_item_blessing_of_ancient_kings_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_item_blessing_of_ancient_kings_AuraScript(); + } +}; + // 8342 - Defibrillate (Goblin Jumper Cables) have 33% chance on success // 22999 - Defibrillate (Goblin Jumper Cables XL) have 50% chance on success // 54732 - Defibrillate (Gnomish Army Knife) have 67% chance on success @@ -444,6 +501,47 @@ class spell_item_mingos_fortune_generator : public SpellScriptLoader } }; +// 71875, 71877 - Item - Black Bruise: Necrotic Touch Proc +enum NecroticTouch +{ + SPELL_ITEM_NECROTIC_TOUCH_PROC = 71879 +}; + +class spell_item_necrotic_touch : public SpellScriptLoader +{ + public: + spell_item_necrotic_touch() : SpellScriptLoader("spell_item_necrotic_touch") { } + + class spell_item_necrotic_touch_AuraScript : public AuraScript + { + PrepareAuraScript(spell_item_necrotic_touch_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_ITEM_NECROTIC_TOUCH_PROC)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + int32 bp = CalculatePct(int32(eventInfo.GetDamageInfo()->GetDamage()), aurEff->GetAmount()); + GetTarget()->CastCustomSpell(SPELL_ITEM_NECROTIC_TOUCH_PROC, SPELLVALUE_BASE_POINT0, bp, GetTarget(), true, NULL, aurEff); + } + + void Register() + { + OnEffectProc += AuraEffectProcFn(spell_item_necrotic_touch_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_item_necrotic_touch_AuraScript(); + } +}; + // http://www.wowhead.com/item=10720 Gnomish Net-o-Matic Projector // 13120 Net-o-Matic enum NetOMaticSpells @@ -711,6 +809,189 @@ class spell_item_scroll_of_recall : public SpellScriptLoader } }; +// 71169 - Shadow's Fate (Shadowmourne questline) +enum ShadowsFate +{ + SPELL_SOUL_FEAST = 71203, + QUEST_A_FEAST_OF_SOULS = 24547 +}; + +class spell_item_shadows_fate : public SpellScriptLoader +{ + public: + spell_item_shadows_fate() : SpellScriptLoader("spell_item_shadows_fate") { } + + class spell_item_shadows_fate_AuraScript : public AuraScript + { + PrepareAuraScript(spell_item_shadows_fate_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_SOUL_FEAST)) + return false; + if (!sObjectMgr->GetQuestTemplate(QUEST_A_FEAST_OF_SOULS)) + return false; + return true; + } + + bool Load() + { + _procTarget = NULL; + return true; + } + + bool CheckProc(ProcEventInfo& /*eventInfo*/) + { + _procTarget = GetCaster(); + return _procTarget && _procTarget->GetTypeId() == TYPEID_PLAYER && _procTarget->ToPlayer()->GetQuestStatus(QUEST_A_FEAST_OF_SOULS) == QUEST_STATUS_INCOMPLETE; + } + + void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastSpell(_procTarget, SPELL_SOUL_FEAST, true); + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_item_shadows_fate_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_item_shadows_fate_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + + private: + Unit* _procTarget; + }; + + AuraScript* GetAuraScript() const + { + return new spell_item_shadows_fate_AuraScript(); + } +}; + +enum Shadowmourne +{ + SPELL_SHADOWMOURNE_CHAOS_BANE_DAMAGE = 71904, + SPELL_SHADOWMOURNE_SOUL_FRAGMENT = 71905, + SPELL_SHADOWMOURNE_VISUAL_LOW = 72521, + SPELL_SHADOWMOURNE_VISUAL_HIGH = 72523, + SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF = 73422, +}; + +// 71903 - Item - Shadowmourne Legendary +class spell_item_shadowmourne : public SpellScriptLoader +{ + public: + spell_item_shadowmourne() : SpellScriptLoader("spell_item_shadowmourne") { } + + class spell_item_shadowmourne_AuraScript : public AuraScript + { + PrepareAuraScript(spell_item_shadowmourne_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_CHAOS_BANE_DAMAGE)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_SOUL_FRAGMENT)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF)) + return false; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + if (GetTarget()->HasAura(SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF)) // cant collect shards while under effect of Chaos Bane buff + return false; + return eventInfo.GetProcTarget() && eventInfo.GetProcTarget()->isAlive(); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + GetTarget()->CastSpell(GetTarget(), SPELL_SHADOWMOURNE_SOUL_FRAGMENT, true, NULL, aurEff); + + // this can't be handled in AuraScript of SoulFragments because we need to know victim + if (Aura* soulFragments = GetTarget()->GetAura(SPELL_SHADOWMOURNE_SOUL_FRAGMENT)) + { + if (soulFragments->GetStackAmount() >= 10) + { + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_SHADOWMOURNE_CHAOS_BANE_DAMAGE, true, NULL, aurEff); + soulFragments->Remove(); + } + } + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_item_shadowmourne_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_item_shadowmourne_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_item_shadowmourne_AuraScript(); + } +}; + +// 71905 - Soul Fragment +class spell_item_shadowmourne_soul_fragment : public SpellScriptLoader +{ + public: + spell_item_shadowmourne_soul_fragment() : SpellScriptLoader("spell_item_shadowmourne_soul_fragment") { } + + class spell_item_shadowmourne_soul_fragment_AuraScript : public AuraScript + { + PrepareAuraScript(spell_item_shadowmourne_soul_fragment_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_VISUAL_LOW) || !sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_VISUAL_HIGH) || !sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF)) + return false; + return true; + } + + void OnStackChange(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + switch (GetStackAmount()) + { + case 1: + target->CastSpell(target, SPELL_SHADOWMOURNE_VISUAL_LOW, true); + break; + case 6: + target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_LOW); + target->CastSpell(target, SPELL_SHADOWMOURNE_VISUAL_HIGH, true); + break; + case 10: + target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_HIGH); + target->CastSpell(target, SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF, true); + break; + default: + break; + } + } + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_LOW); + target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_HIGH); + } + + void Register() + { + AfterEffectApply += AuraEffectApplyFn(spell_item_shadowmourne_soul_fragment_AuraScript::OnStackChange, EFFECT_0, SPELL_AURA_MOD_STAT, AuraEffectHandleModes(AURA_EFFECT_HANDLE_REAL | AURA_EFFECT_HANDLE_REAPPLY)); + AfterEffectRemove += AuraEffectRemoveFn(spell_item_shadowmourne_soul_fragment_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_item_shadowmourne_soul_fragment_AuraScript(); + } +}; + // http://www.wowhead.com/item=7734 Six Demon Bag // 14537 Six Demon Bag enum SixDemonBagSpells @@ -864,70 +1145,6 @@ class spell_item_underbelly_elixir : public SpellScriptLoader } }; -enum eShadowmourneVisuals -{ - SPELL_SHADOWMOURNE_VISUAL_LOW = 72521, - SPELL_SHADOWMOURNE_VISUAL_HIGH = 72523, - SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF = 73422, -}; - -class spell_item_shadowmourne : public SpellScriptLoader -{ -public: - spell_item_shadowmourne() : SpellScriptLoader("spell_item_shadowmourne") { } - - class spell_item_shadowmourne_AuraScript : public AuraScript - { - PrepareAuraScript(spell_item_shadowmourne_AuraScript); - - bool Validate(SpellInfo const* /*spellEntry*/) - { - if (!sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_VISUAL_LOW) || !sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_VISUAL_HIGH) || !sSpellMgr->GetSpellInfo(SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF)) - return false; - return true; - } - - void OnStackChange(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - Unit* target = GetTarget(); - switch (GetStackAmount()) - { - case 1: - target->CastSpell(target, SPELL_SHADOWMOURNE_VISUAL_LOW, true); - break; - case 6: - target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_LOW); - target->CastSpell(target, SPELL_SHADOWMOURNE_VISUAL_HIGH, true); - break; - case 10: - target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_HIGH); - target->CastSpell(target, SPELL_SHADOWMOURNE_CHAOS_BANE_BUFF, true); - break; - default: - break; - } - } - - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - Unit* target = GetTarget(); - target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_LOW); - target->RemoveAurasDueToSpell(SPELL_SHADOWMOURNE_VISUAL_HIGH); - } - - void Register() - { - AfterEffectApply += AuraEffectApplyFn(spell_item_shadowmourne_AuraScript::OnStackChange, EFFECT_0, SPELL_AURA_MOD_STAT, AuraEffectHandleModes(AURA_EFFECT_HANDLE_REAL | AURA_EFFECT_HANDLE_REAPPLY)); - AfterEffectRemove += AuraEffectRemoveFn(spell_item_shadowmourne_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_REAL); - } - }; - - AuraScript* GetAuraScript() const - { - return new spell_item_shadowmourne_AuraScript(); - } -}; - enum AirRifleSpells { SPELL_AIR_RIFLE_HOLD_VISUAL = 65582, @@ -2249,6 +2466,7 @@ void AddSC_item_spell_scripts() new spell_item_trigger_spell("spell_item_mithril_mechanical_dragonling", SPELL_MITHRIL_MECHANICAL_DRAGONLING); new spell_item_arcane_shroud(); + new spell_item_blessing_of_ancient_kings(); new spell_item_defibrillate("spell_item_goblin_jumper_cables", 67, SPELL_GOBLIN_JUMPER_CABLES_FAIL); new spell_item_defibrillate("spell_item_goblin_jumper_cables_xl", 50, SPELL_GOBLIN_JUMPER_CABLES_XL_FAIL); new spell_item_defibrillate("spell_item_gnomish_army_knife", 33); @@ -2257,15 +2475,18 @@ void AddSC_item_spell_scripts() new spell_item_gnomish_death_ray(); new spell_item_make_a_wish(); new spell_item_mingos_fortune_generator(); + new spell_item_necrotic_touch(); new spell_item_net_o_matic(); new spell_item_noggenfogger_elixir(); new spell_item_piccolo_of_the_flaming_fire(); new spell_item_savory_deviate_delight(); new spell_item_scroll_of_recall(); + new spell_item_shadows_fate(); + new spell_item_shadowmourne(); + new spell_item_shadowmourne_soul_fragment(); new spell_item_six_demon_bag(); new spell_item_the_eye_of_diminution(); new spell_item_underbelly_elixir(); - new spell_item_shadowmourne(); new spell_item_red_rider_air_rifle(); new spell_item_create_heart_candy(); diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index a673759a49e..ca835c61a3a 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -28,11 +28,15 @@ enum MageSpells { + SPELL_MAGE_BURNOUT = 29077, SPELL_MAGE_COLD_SNAP = 11958, + SPELL_MAGE_FOCUS_MAGIC_PROC = 54648, SPELL_MAGE_FROST_WARDING_R1 = 11189, SPELL_MAGE_FROST_WARDING_TRIGGERED = 57776, SPELL_MAGE_INCANTERS_ABSORBTION_R1 = 44394, SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED = 44413, + SPELL_MAGE_IGNITE = 12654, + SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE = 29077, SPELL_MAGE_SQUIRREL_FORM = 32813, SPELL_MAGE_GIRAFFE_FORM = 32816, SPELL_MAGE_SERPENT_FORM = 32817, @@ -105,6 +109,51 @@ class spell_mage_blast_wave : public SpellScriptLoader } }; +// -44449 - Burnout +class spell_mage_burnout : public SpellScriptLoader +{ + public: + spell_mage_burnout() : SpellScriptLoader("spell_mage_burnout") { } + + class spell_mage_burnout_AuraScript : public AuraScript + { + PrepareAuraScript(spell_mage_burnout_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_BURNOUT)) + return false; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + return eventInfo.GetDamageInfo()->GetSpellInfo(); // eventInfo.GetSpellInfo() + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + int32 mana = int32(eventInfo.GetDamageInfo()->GetSpellInfo()->CalcPowerCost(GetTarget(), eventInfo.GetDamageInfo()->GetSchoolMask())); + mana = CalculatePct(mana, aurEff->GetAmount()); + + GetTarget()->CastCustomSpell(SPELL_MAGE_BURNOUT, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, NULL, aurEff); + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_mage_burnout_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_mage_burnout_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_mage_burnout_AuraScript(); + } +}; + // 11958 - Cold Snap class spell_mage_cold_snap : public SpellScriptLoader { @@ -219,6 +268,57 @@ class spell_mage_fire_frost_ward : public SpellScriptLoader } }; +// 54646 - Focus Magic +class spell_mage_focus_magic : public SpellScriptLoader +{ + public: + spell_mage_focus_magic() : SpellScriptLoader("spell_mage_focus_magic") { } + + class spell_mage_focus_magic_AuraScript : public AuraScript + { + PrepareAuraScript(spell_mage_focus_magic_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_FOCUS_MAGIC_PROC)) + return false; + return true; + } + + bool Load() + { + _procTarget = NULL; + return true; + } + + bool CheckProc(ProcEventInfo& /*eventInfo*/) + { + _procTarget = GetCaster(); + return _procTarget && _procTarget->isAlive(); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastSpell(_procTarget, SPELL_MAGE_FOCUS_MAGIC_PROC, true, NULL, aurEff); + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_mage_focus_magic_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_mage_focus_magic_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_MOD_SPELL_CRIT_CHANCE); + } + + private: + Unit* _procTarget; + }; + + AuraScript* GetAuraScript() const + { + return new spell_mage_focus_magic_AuraScript(); + } +}; + // -11426 - Ice Barrier class spell_mage_ice_barrier : public SpellScriptLoader { @@ -262,6 +362,53 @@ class spell_mage_ice_barrier : public SpellScriptLoader } }; +// -11119 - Ignite +class spell_mage_ignite : public SpellScriptLoader +{ + public: + spell_mage_ignite() : SpellScriptLoader("spell_mage_ignite") { } + + class spell_mage_ignite_AuraScript : public AuraScript + { + PrepareAuraScript(spell_mage_ignite_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_IGNITE)) + return false; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + return eventInfo.GetProcTarget(); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + SpellInfo const* igniteDot = sSpellMgr->GetSpellInfo(SPELL_MAGE_IGNITE); + int32 pct = 8 * GetSpellInfo()->GetRank(); + + int32 amount = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), pct) / igniteDot->GetMaxTicks()); + amount += eventInfo.GetProcTarget()->GetRemainingPeriodicAmount(eventInfo.GetActor()->GetGUID(), SPELL_MAGE_IGNITE, SPELL_AURA_PERIODIC_DAMAGE); + GetTarget()->CastCustomSpell(SPELL_MAGE_IGNITE, SPELLVALUE_BASE_POINT0, amount, eventInfo.GetProcTarget(), true, NULL, aurEff); + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_mage_ignite_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_mage_ignite_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_mage_ignite_AuraScript(); + } +}; + // -44457 - Living Bomb class spell_mage_living_bomb : public SpellScriptLoader { @@ -339,6 +486,52 @@ class spell_mage_mana_shield : public SpellScriptLoader } }; +// -29074 - Master of Elements +class spell_mage_master_of_elements : public SpellScriptLoader +{ + public: + spell_mage_master_of_elements() : SpellScriptLoader("spell_mage_master_of_elements") { } + + class spell_mage_master_of_elements_AuraScript : public AuraScript + { + PrepareAuraScript(spell_mage_master_of_elements_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE)) + return false; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + return eventInfo.GetDamageInfo()->GetSpellInfo(); // eventInfo.GetSpellInfo() + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + int32 mana = int32(eventInfo.GetDamageInfo()->GetSpellInfo()->CalcPowerCost(GetTarget(), eventInfo.GetDamageInfo()->GetSchoolMask())); + mana = CalculatePct(mana, aurEff->GetAmount()); + + if (mana > 0) + GetTarget()->CastCustomSpell(SPELL_MAGE_MASTER_OF_ELEMENTS_ENERGIZE, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, NULL, aurEff); + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_mage_master_of_elements_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_mage_master_of_elements_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_mage_master_of_elements_AuraScript(); + } +}; + enum SilvermoonPolymorph { NPC_AUROSALIA = 18744, @@ -437,11 +630,15 @@ class spell_mage_summon_water_elemental : public SpellScriptLoader void AddSC_mage_spell_scripts() { new spell_mage_blast_wave(); + new spell_mage_burnout(); new spell_mage_cold_snap(); new spell_mage_fire_frost_ward(); + new spell_mage_focus_magic(); new spell_mage_ice_barrier(); + new spell_mage_ignite(); new spell_mage_living_bomb(); new spell_mage_mana_shield(); + new spell_mage_master_of_elements(); new spell_mage_polymorph_cast_visual(); new spell_mage_summon_water_elemental(); } diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index 2f22de97d77..6be2453affb 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -31,6 +31,7 @@ enum PaladinSpells { SPELL_PALADIN_DIVINE_PLEA = 54428, SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF = 67480, + SPELL_PALADIN_BLESSING_OF_SANCTUARY_ENERGIZE = 57319, SPELL_PALADIN_HOLY_SHOCK_R1 = 20473, SPELL_PALADIN_HOLY_SHOCK_R1_DAMAGE = 25912, @@ -45,6 +46,8 @@ enum PaladinSpells SPELL_PALADIN_DIVINE_STORM_DUMMY = 54171, SPELL_PALADIN_DIVINE_STORM_HEAL = 54172, + SPELL_PALADIN_EYE_FOR_AN_EYE_DAMAGE = 25997, + SPELL_PALADIN_FORBEARANCE = 25771, SPELL_PALADIN_AVENGING_WRATH_MARKER = 61987, SPELL_PALADIN_IMMUNE_SHIELD_MARKER = 61988, @@ -56,6 +59,8 @@ enum PaladinSpells SPELL_PALADIN_RIGHTEOUS_DEFENSE_TAUNT = 31790, + SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS = 25742, + SPELL_GENERIC_ARENA_DAMPENING = 74410, SPELL_GENERIC_BATTLEGROUND_DAMPENING = 74411 }; @@ -192,8 +197,8 @@ class spell_pal_blessing_of_faith : public SpellScriptLoader } }; -// 20911 Blessing of Sanctuary -// 25899 Greater Blessing of Sanctuary +// 20911 - Blessing of Sanctuary +// 25899 - Greater Blessing of Sanctuary class spell_pal_blessing_of_sanctuary : public SpellScriptLoader { public: @@ -207,6 +212,8 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader { if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF)) return false; + if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_BLESSING_OF_SANCTUARY_ENERGIZE)) + return false; return true; } @@ -223,10 +230,23 @@ class spell_pal_blessing_of_sanctuary : public SpellScriptLoader target->RemoveAura(SPELL_PALADIN_BLESSING_OF_SANCTUARY_BUFF, GetCasterGUID()); } + bool CheckProc(ProcEventInfo& /*eventInfo*/) + { + return GetTarget()->getPowerType() == POWER_MANA; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastSpell(GetTarget(), SPELL_PALADIN_BLESSING_OF_SANCTUARY_ENERGIZE, true, NULL, aurEff); + } + void Register() { AfterEffectApply += AuraEffectApplyFn(spell_pal_blessing_of_sanctuary_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); AfterEffectRemove += AuraEffectRemoveFn(spell_pal_blessing_of_sanctuary_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); + DoCheckProc += AuraCheckProcFn(spell_pal_blessing_of_sanctuary_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_pal_blessing_of_sanctuary_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); } }; @@ -417,6 +437,43 @@ class spell_pal_exorcism_and_holy_wrath_damage : public SpellScriptLoader } }; +// -9799 - Eye for an Eye +class spell_pal_eye_for_an_eye : public SpellScriptLoader +{ + public: + spell_pal_eye_for_an_eye() : SpellScriptLoader("spell_pal_eye_for_an_eye") { } + + class spell_pal_eye_for_an_eye_AuraScript : public AuraScript + { + PrepareAuraScript(spell_pal_eye_for_an_eye_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_EYE_FOR_AN_EYE_DAMAGE)) + return false; + return true; + } + + void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + // return damage % to attacker but < 50% own total health + int32 damage = int32(std::min(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount()), GetTarget()->GetMaxHealth() / 2)); + GetTarget()->CastCustomSpell(SPELL_PALADIN_EYE_FOR_AN_EYE_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, NULL, aurEff); + } + + void Register() + { + OnEffectProc += AuraEffectProcFn(spell_pal_eye_for_an_eye_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_pal_eye_for_an_eye_AuraScript(); + } +}; + // 63521 - Guarded by The Light class spell_pal_guarded_by_the_light : public SpellScriptLoader { @@ -794,6 +851,52 @@ class spell_pal_sacred_shield : public SpellScriptLoader } }; +// 20154, 21084 - Seal of Righteousness - melee proc dummy (addition ${$MWS*(0.022*$AP+0.044*$SPH)} damage) +class spell_pal_seal_of_righteousness : public SpellScriptLoader +{ + public: + spell_pal_seal_of_righteousness() : SpellScriptLoader("spell_pal_seal_of_righteousness") { } + + class spell_pal_seal_of_righteousness_AuraScript : public AuraScript + { + PrepareAuraScript(spell_pal_seal_of_righteousness_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS)) + return false; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + return eventInfo.GetProcTarget(); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + float ap = GetTarget()->GetTotalAttackPowerValue(BASE_ATTACK); + int32 holy = GetTarget()->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_HOLY); + holy += eventInfo.GetProcTarget()->SpellBaseDamageBonusTaken(SPELL_SCHOOL_MASK_HOLY); + int32 bp = int32((ap * 0.022f + 0.044f * holy) * GetTarget()->GetAttackTime(BASE_ATTACK) / 1000); + GetTarget()->CastCustomSpell(SPELL_PALADIN_SEAL_OF_RIGHTEOUSNESS, SPELLVALUE_BASE_POINT0, bp, eventInfo.GetProcTarget(), true, NULL, aurEff); + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_pal_seal_of_righteousness_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_pal_seal_of_righteousness_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_pal_seal_of_righteousness_AuraScript(); + } +}; + void AddSC_paladin_spell_scripts() { new spell_pal_ardent_defender(); @@ -803,6 +906,7 @@ void AddSC_paladin_spell_scripts() new spell_pal_divine_storm(); new spell_pal_divine_storm_dummy(); new spell_pal_exorcism_and_holy_wrath_damage(); + new spell_pal_eye_for_an_eye(); new spell_pal_guarded_by_the_light(); new spell_pal_hand_of_sacrifice(); new spell_pal_hand_of_salvation(); @@ -811,4 +915,5 @@ void AddSC_paladin_spell_scripts() new spell_pal_lay_on_hands(); new spell_pal_righteous_defense(); new spell_pal_sacred_shield(); + new spell_pal_seal_of_righteousness(); } diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 23a39819aa2..e19110d0f62 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -29,24 +29,115 @@ enum PriestSpells { - SPELL_PRIEST_EMPOWERED_RENEW = 63544, - SPELL_PRIEST_GLYPHE_OF_LIGHTWELL = 55673, - SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL = 48153, - SPELL_PRIEST_PENANCE_R1 = 47540, - SPELL_PRIEST_PENANCE_R1_DAMAGE = 47758, - SPELL_PRIEST_PENANCE_R1_HEAL = 47757, - SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED = 33619, - SPELL_PRIEST_REFLECTIVE_SHIELD_R1 = 33201, - SPELL_PRIEST_SHADOW_WORD_DEATH = 32409, - SPELL_PRIEST_T9_HEALING_2P = 67201, - SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL = 64085, + SPELL_PRIEST_DIVINE_AEGIS = 47753, + SPELL_PRIEST_EMPOWERED_RENEW = 63544, + SPELL_PRIEST_GLYPHE_OF_LIGHTWELL = 55673, + SPELL_PRIEST_GLYPHE_OF_PRAYER_OF_HEALING_HEAL = 56161, + SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL = 48153, + SPELL_PRIEST_MANA_LEECH_PROC = 34650, + SPELL_PRIEST_PENANCE_R1 = 47540, + SPELL_PRIEST_PENANCE_R1_DAMAGE = 47758, + SPELL_PRIEST_PENANCE_R1_HEAL = 47757, + SPELL_PRIEST_REFLECTIVE_SHIELD_TRIGGERED = 33619, + SPELL_PRIEST_REFLECTIVE_SHIELD_R1 = 33201, + SPELL_PRIEST_SHADOW_WORD_DEATH = 32409, + SPELL_PRIEST_T9_HEALING_2P = 67201, + SPELL_PRIEST_VAMPIRIC_TOUCH_DISPEL = 64085, }; enum PriestSpellIcons { - PRIEST_ICON_ID_BORROWED_TIME = 2899, - PRIEST_ICON_ID_EMPOWERED_RENEW_TALENT = 3021, - PRIEST_ICON_ID_PAIN_AND_SUFFERING = 2874, + PRIEST_ICON_ID_BORROWED_TIME = 2899, + PRIEST_ICON_ID_EMPOWERED_RENEW_TALENT = 3021, + PRIEST_ICON_ID_PAIN_AND_SUFFERING = 2874, +}; + +// -47509 - Divine Aegis +class spell_pri_divine_aegis : public SpellScriptLoader +{ + public: + spell_pri_divine_aegis() : SpellScriptLoader("spell_pri_divine_aegis") { } + + class spell_pri_divine_aegis_AuraScript : public AuraScript + { + PrepareAuraScript(spell_pri_divine_aegis_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_DIVINE_AEGIS)) + return false; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + return eventInfo.GetProcTarget(); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + int32 absorb = CalculatePct(int32(eventInfo.GetHealInfo()->GetHeal()), aurEff->GetAmount()); + + // Multiple effects stack, so let's try to find this aura. + if (AuraEffect const* aegis = eventInfo.GetProcTarget()->GetAuraEffect(SPELL_PRIEST_DIVINE_AEGIS, EFFECT_0)) + absorb += aegis->GetAmount(); + + absorb = std::min(absorb, eventInfo.GetProcTarget()->getLevel() * 125); + + GetTarget()->CastCustomSpell(SPELL_PRIEST_DIVINE_AEGIS, SPELLVALUE_BASE_POINT0, absorb, eventInfo.GetProcTarget(), true, NULL, aurEff); + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_pri_divine_aegis_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_pri_divine_aegis_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_pri_divine_aegis_AuraScript(); + } +}; + +// 55680 - Glyph of Prayer of Healing +class spell_pri_glyph_of_prayer_of_healing : public SpellScriptLoader +{ + public: + spell_pri_glyph_of_prayer_of_healing() : SpellScriptLoader("spell_pri_glyph_of_prayer_of_healing") { } + + class spell_pri_glyph_of_prayer_of_healing_AuraScript : public AuraScript + { + PrepareAuraScript(spell_pri_glyph_of_prayer_of_healing_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_GLYPHE_OF_PRAYER_OF_HEALING_HEAL)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(SPELL_PRIEST_GLYPHE_OF_PRAYER_OF_HEALING_HEAL); + int32 heal = int32(CalculatePct(int32(eventInfo.GetHealInfo()->GetHeal()), aurEff->GetAmount()) / triggeredSpellInfo->GetMaxTicks()); + GetTarget()->CastCustomSpell(SPELL_PRIEST_GLYPHE_OF_PRAYER_OF_HEALING_HEAL, SPELLVALUE_BASE_POINT0, heal, eventInfo.GetProcTarget(), true, NULL, aurEff); + } + + void Register() + { + OnEffectProc += AuraEffectProcFn(spell_pri_glyph_of_prayer_of_healing_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_pri_glyph_of_prayer_of_healing_AuraScript(); + } }; // -47788 - Guardian Spirit @@ -166,6 +257,57 @@ class spell_pri_mana_burn : public SpellScriptLoader } }; +// 28305 - Mana Leech (Passive) (Priest Pet Aura) +class spell_pri_mana_leech : public SpellScriptLoader +{ + public: + spell_pri_mana_leech() : SpellScriptLoader("spell_pri_mana_leech") { } + + class spell_pri_mana_leech_AuraScript : public AuraScript + { + PrepareAuraScript(spell_pri_mana_leech_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_MANA_LEECH_PROC)) + return false; + return true; + } + + bool Load() + { + _procTarget = NULL; + return true; + } + + bool CheckProc(ProcEventInfo& /*eventInfo*/) + { + _procTarget = GetTarget()->GetOwner(); + return _procTarget; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastSpell(_procTarget, SPELL_PRIEST_MANA_LEECH_PROC, true, NULL, aurEff); + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_pri_mana_leech_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_pri_mana_leech_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + + private: + Unit* _procTarget; + }; + + AuraScript* GetAuraScript() const + { + return new spell_pri_mana_leech_AuraScript(); + } +}; + // -49821 - Mind Sear class spell_pri_mind_sear : public SpellScriptLoader { @@ -524,9 +666,12 @@ class spell_pri_vampiric_touch : public SpellScriptLoader void AddSC_priest_spell_scripts() { + new spell_pri_divine_aegis(); + new spell_pri_glyph_of_prayer_of_healing(); new spell_pri_guardian_spirit(); new spell_pri_lightwell_renew(); new spell_pri_mana_burn(); + new spell_pri_mana_leech(); new spell_pri_mind_sear(); new spell_pri_pain_and_suffering_proc(); new spell_pri_penance(); diff --git a/src/server/scripts/Spells/spell_rogue.cpp b/src/server/scripts/Spells/spell_rogue.cpp index 156158b4e36..f6391c80d63 100644 --- a/src/server/scripts/Spells/spell_rogue.cpp +++ b/src/server/scripts/Spells/spell_rogue.cpp @@ -28,10 +28,68 @@ enum RogueSpells { + SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK = 22482, SPELL_ROGUE_CHEAT_DEATH_COOLDOWN = 31231, SPELL_ROGUE_GLYPH_OF_PREPARATION = 56819, SPELL_ROGUE_PREY_ON_THE_WEAK = 58670, SPELL_ROGUE_SHIV_TRIGGERED = 5940, + SPELL_ROGUE_TRICKS_OF_THE_TRADE_DMG_BOOST = 57933, + SPELL_ROGUE_TRICKS_OF_THE_TRADE_PROC = 59628, +}; + +// 13877, 33735, (check 51211, 65956) - Blade Flurry +class spell_rog_blade_flurry : public SpellScriptLoader +{ + public: + spell_rog_blade_flurry() : SpellScriptLoader("spell_rog_blade_flurry") { } + + class spell_rog_blade_flurry_AuraScript : public AuraScript + { + PrepareAuraScript(spell_rog_blade_flurry_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK)) + return false; + return true; + } + + bool Load() + { + _procTarget = NULL; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + _procTarget = eventInfo.GetActor()->SelectNearbyTarget(eventInfo.GetProcTarget()); + return _procTarget; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + if (eventInfo.GetDamageInfo()) + { + int32 damage = eventInfo.GetDamageInfo()->GetDamage(); + GetTarget()->CastCustomSpell(SPELL_ROGUE_BLADE_FLURRY_EXTRA_ATTACK, SPELLVALUE_BASE_POINT0, damage, _procTarget, true, NULL, aurEff); + } + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_rog_blade_flurry_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_rog_blade_flurry_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_MOD_MELEE_HASTE); + } + + private: + Unit* _procTarget; + }; + + AuraScript* GetAuraScript() const + { + return new spell_rog_blade_flurry_AuraScript(); + } }; // -31228 - Cheat Death @@ -440,8 +498,100 @@ class spell_rog_shiv : public SpellScriptLoader } }; +// 57934 - Tricks of the Trade +class spell_rog_tricks_of_the_trade : public SpellScriptLoader +{ + public: + spell_rog_tricks_of_the_trade() : SpellScriptLoader("spell_rog_tricks_of_the_trade") { } + + class spell_rog_tricks_of_the_trade_AuraScript : public AuraScript + { + PrepareAuraScript(spell_rog_tricks_of_the_trade_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_TRICKS_OF_THE_TRADE_DMG_BOOST)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_TRICKS_OF_THE_TRADE_PROC)) + return false; + return true; + } + + bool Load() + { + _redirectTarget = NULL; + return true; + } + + void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (GetTargetApplication()->GetRemoveMode() != AURA_REMOVE_BY_DEFAULT) + GetTarget()->ResetRedirectThreat(); + } + + bool CheckProc(ProcEventInfo& /*eventInfo*/) + { + _redirectTarget = GetTarget()->GetRedirectThreatTarget(); + return _redirectTarget; + } + + void HandleProc(AuraEffect const* /*aurEff*/, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + + Unit* target = GetTarget(); + target->CastSpell(_redirectTarget, SPELL_ROGUE_TRICKS_OF_THE_TRADE_DMG_BOOST, true); + target->CastSpell(target, SPELL_ROGUE_TRICKS_OF_THE_TRADE_PROC, true); + Remove(AURA_REMOVE_BY_DEFAULT); // maybe handle by proc charges + } + + void Register() + { + AfterEffectRemove += AuraEffectRemoveFn(spell_rog_tricks_of_the_trade_AuraScript::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + DoCheckProc += AuraCheckProcFn(spell_rog_tricks_of_the_trade_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_rog_tricks_of_the_trade_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_DUMMY); + } + + private: + Unit* _redirectTarget; + }; + + AuraScript* GetAuraScript() const + { + return new spell_rog_tricks_of_the_trade_AuraScript(); + } +}; + +// 59628 - Tricks of the Trade (Proc) +class spell_rog_tricks_of_the_trade_proc : public SpellScriptLoader +{ + public: + spell_rog_tricks_of_the_trade_proc() : SpellScriptLoader("spell_rog_tricks_of_the_trade_proc") { } + + class spell_rog_tricks_of_the_trade_proc_AuraScript : public AuraScript + { + PrepareAuraScript(spell_rog_tricks_of_the_trade_proc_AuraScript); + + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + GetTarget()->ResetRedirectThreat(); + } + + void Register() + { + AfterEffectRemove += AuraEffectRemoveFn(spell_rog_tricks_of_the_trade_proc_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_rog_tricks_of_the_trade_proc_AuraScript(); + } +}; + void AddSC_rogue_spell_scripts() { + new spell_rog_blade_flurry(); new spell_rog_cheat_death(); new spell_rog_deadly_poison(); new spell_rog_nerves_of_steel(); @@ -449,4 +599,6 @@ void AddSC_rogue_spell_scripts() new spell_rog_prey_on_the_weak(); new spell_rog_rupture(); new spell_rog_shiv(); + new spell_rog_tricks_of_the_trade(); + new spell_rog_tricks_of_the_trade_proc(); } diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index 2994761be6f..b69295150c2 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -33,9 +33,11 @@ enum ShamanSpells SPELL_SHAMAN_ANCESTRAL_AWAKENING_PROC = 52752, SPELL_SHAMAN_BIND_SIGHT = 6277, SPELL_SHAMAN_CLEANSING_TOTEM_EFFECT = 52025, + SPELL_SHAMAN_EARTH_SHIELD_HEAL = 379, SPELL_SHAMAN_EXHAUSTION = 57723, SPELL_SHAMAN_FIRE_NOVA_R1 = 1535, SPELL_SHAMAN_FIRE_NOVA_TRIGGERED_R1 = 8349, + SPELL_SHAMAN_GLYPH_OF_EARTH_SHIELD = 63279, SPELL_SHAMAN_GLYPH_OF_HEALING_STREAM_TOTEM = 55456, SPELL_SHAMAN_GLYPH_OF_MANA_TIDE = 55441, SPELL_SHAMAN_GLYPH_OF_THUNDERSTORM = 62132, @@ -266,6 +268,68 @@ class spell_sha_cleansing_totem_pulse : public SpellScriptLoader } }; +// -974 - Earth Shield +class spell_sha_earth_shield : public SpellScriptLoader +{ + public: + spell_sha_earth_shield() : SpellScriptLoader("spell_sha_earth_shield") { } + + class spell_sha_earth_shield_AuraScript : public AuraScript + { + PrepareAuraScript(spell_sha_earth_shield_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_EARTH_SHIELD_HEAL)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_SHAMAN_GLYPH_OF_EARTH_SHIELD)) + return false; + return true; + } + + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool & /*canBeRecalculated*/) + { + if (Unit* caster = GetCaster()) + { + amount = caster->SpellHealingBonusDone(GetUnitOwner(), GetSpellInfo(), amount, HEAL); + amount = GetUnitOwner()->SpellHealingBonusTaken(caster, GetSpellInfo(), amount, HEAL); + + // Glyph of Earth Shield + //! WORKAROUND + //! this glyphe is a proc + if (AuraEffect* glyphe = caster->GetAuraEffect(SPELL_SHAMAN_GLYPH_OF_EARTH_SHIELD, EFFECT_0)) + AddPct(amount, glyphe->GetAmount()); + } + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + + //! HACK due to currenct proc system implementation + if (Player* player = GetTarget()->ToPlayer()) + if (player->HasSpellCooldown(SPELL_SHAMAN_EARTH_SHIELD_HEAL)) + return; + + GetTarget()->CastCustomSpell(SPELL_SHAMAN_EARTH_SHIELD_HEAL, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, NULL, aurEff, GetCasterGUID()); + + if (Player* player = GetTarget()->ToPlayer()) + player->AddSpellCooldown(SPELL_SHAMAN_EARTH_SHIELD_HEAL, 0, time(NULL) + 3); + } + + void Register() + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_sha_earth_shield_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_DUMMY); + OnEffectProc += AuraEffectProcFn(spell_sha_earth_shield_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_sha_earth_shield_AuraScript(); + } +}; + // 6474 - Earthbind Totem - Fix Talent: Earthen Power class spell_sha_earthbind_totem : public SpellScriptLoader { @@ -780,6 +844,7 @@ void AddSC_shaman_spell_scripts() new spell_sha_bloodlust(); new spell_sha_chain_heal(); new spell_sha_cleansing_totem_pulse(); + new spell_sha_earth_shield(); new spell_sha_earthbind_totem(); new spell_sha_earthen_power(); new spell_sha_fire_nova(); diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index 68ad1315dce..78bfcbab6a0 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -37,6 +37,8 @@ enum WarlockSpells SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELGUARD = 54508, SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER = 54509, SPELL_WARLOCK_DEMONIC_EMPOWERMENT_IMP = 54444, + SPELL_WARLOCK_FEL_SYNERGY_HEAL = 54181, + SPELL_WARLOCK_GLYPHE_OF_SIPHON_LIFE = 63106, SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R1 = 18692, SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R2 = 18693, SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R1 = 18703, @@ -48,6 +50,7 @@ enum WarlockSpells SPELL_WARLOCK_LIFE_TAP_ENERGIZE = 31818, SPELL_WARLOCK_LIFE_TAP_ENERGIZE_2 = 32553, SPELL_WARLOCK_SOULSHATTER = 32835, + SPELL_WARLOCK_SIPHON_LIFE_HEAL = 63106, SPELL_WARLOCK_UNSTABLE_AFFLICTION_DISPEL = 31117 }; @@ -418,6 +421,49 @@ class spell_warl_everlasting_affliction : public SpellScriptLoader } }; +// -47230 - Fel Synergy +class spell_warl_fel_synergy : public SpellScriptLoader +{ + public: + spell_warl_fel_synergy() : SpellScriptLoader("spell_warl_fel_synergy") { } + + class spell_warl_fel_synergy_AuraScript : public AuraScript + { + PrepareAuraScript(spell_warl_fel_synergy_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_FEL_SYNERGY_HEAL)) + return false; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + return GetTarget()->GetGuardianPet() && eventInfo.GetDamageInfo()->GetDamage(); + } + + void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + int32 heal = CalculatePct(int32(eventInfo.GetDamageInfo()->GetDamage()), aurEff->GetAmount()); + GetTarget()->CastCustomSpell(SPELL_WARLOCK_FEL_SYNERGY_HEAL, SPELLVALUE_BASE_POINT0, heal, (Unit*)NULL, true, NULL, aurEff); // TARGET_UNIT_PET + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_warl_fel_synergy_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_warl_fel_synergy_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_warl_fel_synergy_AuraScript(); + } +}; + // -48181 - Haunt class spell_warl_haunt : public SpellScriptLoader { @@ -686,6 +732,55 @@ class spell_warl_shadow_ward : public SpellScriptLoader } }; +// 63108 - Siphon Life +class spell_warl_siphon_life : public SpellScriptLoader +{ + public: + spell_warl_siphon_life() : SpellScriptLoader("spell_warl_siphon_life") { } + + class spell_warl_siphon_life_AuraScript : public AuraScript + { + PrepareAuraScript(spell_warl_siphon_life_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SIPHON_LIFE_HEAL)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_GLYPHE_OF_SIPHON_LIFE)) + return false; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + return eventInfo.GetDamageInfo()->GetDamage(); + } + + void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + int32 amount = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount())); + // Glyph of Siphon Life + if (AuraEffect const* glyphe = GetTarget()->GetAuraEffect(SPELL_WARLOCK_GLYPHE_OF_SIPHON_LIFE, EFFECT_0)) + AddPct(amount, glyphe->GetAmount()); + + GetTarget()->CastCustomSpell(SPELL_WARLOCK_SIPHON_LIFE_HEAL, SPELLVALUE_BASE_POINT0, amount, GetTarget(), true, NULL, aurEff); + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_warl_siphon_life_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_warl_siphon_life_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_warl_siphon_life_AuraScript(); + } +}; + // 29858 - Soulshatter class spell_warl_soulshatter : public SpellScriptLoader { @@ -774,12 +869,14 @@ void AddSC_warlock_spell_scripts() new spell_warl_demonic_circle_teleport(); new spell_warl_demonic_empowerment(); new spell_warl_everlasting_affliction(); + new spell_warl_fel_synergy(); new spell_warl_haunt(); new spell_warl_health_funnel(); new spell_warl_life_tap(); new spell_warl_ritual_of_doom_effect(); new spell_warl_seed_of_corruption(); new spell_warl_shadow_ward(); + new spell_warl_siphon_life(); new spell_warl_soulshatter(); new spell_warl_unstable_affliction(); } diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index 822d4b17992..7136f046873 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -31,21 +31,26 @@ enum WarriorSpells SPELL_WARRIOR_BLOODTHIRST = 23885, SPELL_WARRIOR_BLOODTHIRST_DAMAGE = 23881, SPELL_WARRIOR_CHARGE = 34846, + SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE = 59653, SPELL_WARRIOR_DEEP_WOUNDS_RANK_1 = 12162, SPELL_WARRIOR_DEEP_WOUNDS_RANK_2 = 12850, SPELL_WARRIOR_DEEP_WOUNDS_RANK_3 = 12868, SPELL_WARRIOR_DEEP_WOUNDS_RANK_PERIODIC = 12721, SPELL_WARRIOR_EXECUTE = 20647, SPELL_WARRIOR_GLYPH_OF_EXECUTION = 58367, + SPELL_WARRIOR_GLYPH_OF_VIGILANCE = 63326, SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_BUFF = 65156, SPELL_WARRIOR_JUGGERNAUT_CRIT_BONUS_TALENT = 64976, SPELL_WARRIOR_LAST_STAND_TRIGGERED = 12976, SPELL_WARRIOR_SLAM = 50783, + SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK = 26654, SPELL_WARRIOR_TAUNT = 355, SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_1 = 46859, SPELL_WARRIOR_UNRELENTING_ASSAULT_RANK_2 = 46860, SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_1 = 64849, SPELL_WARRIOR_UNRELENTING_ASSAULT_TRIGGER_2 = 64850, + SPELL_WARRIOR_VIGILANCE_PROC = 50725, + SPELL_WARRIOR_VIGILANCE_REDIRECT_THREAT = 59665, SPELL_PALADIN_BLESSING_OF_SANCTUARY = 20911, SPELL_PALADIN_GREATER_BLESSING_OF_SANCTUARY = 25899, @@ -195,6 +200,44 @@ class spell_warr_concussion_blow : public SpellScriptLoader } }; +// -58872 - Damage Shield +class spell_warr_damage_shield : public SpellScriptLoader +{ + public: + spell_warr_damage_shield() : SpellScriptLoader("spell_warr_damage_shield") { } + + class spell_warr_damage_shield_AuraScript : public AuraScript + { + PrepareAuraScript(spell_warr_damage_shield_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE)) + return false; + return true; + } + + void OnProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + // % of amount blocked + int32 damage = CalculatePct(int32(GetTarget()->GetShieldBlockValue()), aurEff->GetAmount()); + GetTarget()->CastCustomSpell(SPELL_WARRIOR_DAMAGE_SHIELD_DAMAGE, SPELLVALUE_BASE_POINT0, damage, eventInfo.GetProcTarget(), true, NULL, aurEff); + } + + void Register() + { + OnEffectProc += AuraEffectProcFn(spell_warr_damage_shield_AuraScript::OnProc, EFFECT_0, SPELL_AURA_DUMMY); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_warr_damage_shield_AuraScript(); + } +}; + // -12162 - Deep Wounds class spell_warr_deep_wounds : public SpellScriptLoader { @@ -551,6 +594,57 @@ class spell_warr_slam : public SpellScriptLoader } }; +// 12328, 18765, 35429 - Sweeping Strikes +class spell_warr_sweeping_strikes : public SpellScriptLoader +{ + public: + spell_warr_sweeping_strikes() : SpellScriptLoader("spell_warr_sweeping_strikes") { } + + class spell_warr_sweeping_strikes_AuraScript : public AuraScript + { + PrepareAuraScript(spell_warr_sweeping_strikes_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) + { + if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK)) + return false; + return true; + } + + bool Load() + { + _procTarget = NULL; + return true; + } + + bool CheckProc(ProcEventInfo& eventInfo) + { + _procTarget = eventInfo.GetActor()->SelectNearbyTarget(eventInfo.GetProcTarget()); + return _procTarget; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_SWEEPING_STRIKES_EXTRA_ATTACK, true, NULL, aurEff); + } + + void Register() + { + DoCheckProc += AuraCheckProcFn(spell_warr_sweeping_strikes_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_warr_sweeping_strikes_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } + + private: + Unit* _procTarget; + }; + + AuraScript* GetAuraScript() const + { + return new spell_warr_sweeping_strikes_AuraScript(); + } +}; + // 50720 - Vigilance class spell_warr_vigilance : public SpellScriptLoader { @@ -563,34 +657,80 @@ class spell_warr_vigilance : public SpellScriptLoader bool Validate(SpellInfo const* /*spellInfo*/) { + if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_GLYPH_OF_VIGILANCE)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_VIGILANCE_PROC)) + return false; + if (!sSpellMgr->GetSpellInfo(SPELL_WARRIOR_VIGILANCE_REDIRECT_THREAT)) + return false; if (!sSpellMgr->GetSpellInfo(SPELL_GEN_DAMAGE_REDUCTION_AURA)) return false; return true; } - void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + bool Load() { - if (Unit* target = GetTarget()) - target->CastSpell(target, SPELL_GEN_DAMAGE_REDUCTION_AURA, true); + _procTarget = NULL; + return true; } - void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - if (Unit* target = GetTarget()) + Unit* target = GetTarget(); + target->CastSpell(target, SPELL_GEN_DAMAGE_REDUCTION_AURA, true); + + if (Unit* caster = GetCaster()) + target->CastSpell(caster, SPELL_WARRIOR_VIGILANCE_REDIRECT_THREAT, true); + } + + void HandleAfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + //! WORKAROUND + //! this glyph is a proc + if (Unit* caster = GetCaster()) { - if (target->HasAura(SPELL_GEN_DAMAGE_REDUCTION_AURA) && !(target->HasAura(SPELL_PALADIN_BLESSING_OF_SANCTUARY) || - target->HasAura(SPELL_PALADIN_GREATER_BLESSING_OF_SANCTUARY) || - target->HasAura(SPELL_PRIEST_RENEWED_HOPE))) - target->RemoveAurasDueToSpell(SPELL_GEN_DAMAGE_REDUCTION_AURA); + if (AuraEffect const* glyph = caster->GetAuraEffect(SPELL_WARRIOR_GLYPH_OF_VIGILANCE, EFFECT_0)) + GetTarget()->ModifyRedirectThreat(glyph->GetAmount()); } } + void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* target = GetTarget(); + if (target->HasAura(SPELL_GEN_DAMAGE_REDUCTION_AURA) && + !(target->HasAura(SPELL_PALADIN_BLESSING_OF_SANCTUARY) || + target->HasAura(SPELL_PALADIN_GREATER_BLESSING_OF_SANCTUARY) || + target->HasAura(SPELL_PRIEST_RENEWED_HOPE))) + { + target->RemoveAurasDueToSpell(SPELL_GEN_DAMAGE_REDUCTION_AURA); + } + + target->ResetRedirectThreat(); + } + + bool CheckProc(ProcEventInfo& /*eventInfo*/) + { + _procTarget = GetCaster(); + return _procTarget; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastSpell(_procTarget, SPELL_WARRIOR_VIGILANCE_PROC, true, NULL, aurEff); + } + void Register() { - OnEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::OnApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); - OnEffectRemove += AuraEffectRemoveFn(spell_warr_vigilance_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); + OnEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::HandleApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); + AfterEffectApply += AuraEffectApplyFn(spell_warr_vigilance_AuraScript::HandleAfterApply, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); + OnEffectRemove += AuraEffectRemoveFn(spell_warr_vigilance_AuraScript::HandleRemove, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK); + DoCheckProc += AuraCheckProcFn(spell_warr_vigilance_AuraScript::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_warr_vigilance_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); } + private: + Unit* _procTarget; }; AuraScript* GetAuraScript() const @@ -636,6 +776,7 @@ void AddSC_warrior_spell_scripts() new spell_warr_bloodthirst_heal(); new spell_warr_charge(); new spell_warr_concussion_blow(); + new spell_warr_damage_shield(); new spell_warr_deep_wounds(); new spell_warr_execute(); new spell_warr_improved_spell_reflection(); @@ -645,6 +786,7 @@ void AddSC_warrior_spell_scripts() new spell_warr_rend(); new spell_warr_shattering_throw(); new spell_warr_slam(); + new spell_warr_sweeping_strikes(); new spell_warr_vigilance(); new spell_warr_vigilance_trigger(); } From 5e367c910a0bdcad9dbb4881c9bb00be05181292 Mon Sep 17 00:00:00 2001 From: w1sht0l1v3 Date: Wed, 23 Jan 2013 13:21:31 +0200 Subject: [PATCH 155/204] DB/Misc: Add back flight aura on Wyrmrest Defender.(probably deleted on last template_addon cleanup) Correct a SAI line for Nerub'ar Broodkeeper. --- sql/updates/world/2013_01_23_00_world_misc.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sql/updates/world/2013_01_23_00_world_misc.sql diff --git a/sql/updates/world/2013_01_23_00_world_misc.sql b/sql/updates/world/2013_01_23_00_world_misc.sql new file mode 100644 index 00000000000..fb55d90f69b --- /dev/null +++ b/sql/updates/world/2013_01_23_00_world_misc.sql @@ -0,0 +1,5 @@ +-- readd flight aura on Wyrmrest Defender npcs +UPDATE `creature_template_addon` SET `auras`='50069' WHERE `entry`=27629; + +-- correct SAI on Nerub'ar Broodkeeper +UPDATE `smart_scripts` SET `event_param1`=0 WHERE `entryorguid`=36725 AND `source_type`=0 AND `id`=1; From 39c2d892f3e696526b2373fb6990f3a93c2bd9ec Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Wed, 23 Jan 2013 17:48:17 +0100 Subject: [PATCH 156/204] Core/Log: Allow configuring a maximum file size for a log file. If the file size is about to be exceeded, the core will create a new file titled _.log and start outputting there. --- src/server/shared/Logging/Appender.h | 6 ++++++ src/server/shared/Logging/AppenderFile.cpp | 20 ++++++++++++++++++-- src/server/shared/Logging/AppenderFile.h | 4 +++- src/server/shared/Logging/Log.cpp | 9 ++++++++- src/server/worldserver/worldserver.conf.dist | 9 ++++++++- 5 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/server/shared/Logging/Appender.h b/src/server/shared/Logging/Appender.h index a8854a8abc6..08628948b90 100644 --- a/src/server/shared/Logging/Appender.h +++ b/src/server/shared/Logging/Appender.h @@ -123,6 +123,12 @@ struct LogMessage std::string prefix; std::string param1; time_t mtime; + + ///@ Returns size of the log message content in bytes + uint32 Size() const + { + return prefix.size() + text.size(); + } }; class Appender diff --git a/src/server/shared/Logging/AppenderFile.cpp b/src/server/shared/Logging/AppenderFile.cpp index 8189237bb4e..c2f1e0c919d 100644 --- a/src/server/shared/Logging/AppenderFile.cpp +++ b/src/server/shared/Logging/AppenderFile.cpp @@ -18,11 +18,12 @@ #include "AppenderFile.h" #include "Common.h" -AppenderFile::AppenderFile(uint8 id, std::string const& name, LogLevel level, const char* _filename, const char* _logDir, const char* _mode, AppenderFlags _flags) +AppenderFile::AppenderFile(uint8 id, std::string const& name, LogLevel level, const char* _filename, const char* _logDir, const char* _mode, AppenderFlags _flags, uint64 fileSize) : Appender(id, name, APPENDER_FILE, level, _flags) , filename(_filename) , logDir(_logDir) , mode(_mode) + , _fileSize(fileSize) { dynamicName = std::string::npos != filename.find("%s"); backup = _flags & APPENDER_FLAGS_MAKE_FILE_BACKUP; @@ -46,12 +47,25 @@ void AppenderFile::_write(LogMessage const& message) char namebuf[TRINITY_PATH_MAX]; snprintf(namebuf, TRINITY_PATH_MAX, filename.c_str(), message.param1.c_str()); logfile = OpenFile(namebuf, mode, backup); + _fileSize = ftell(logfile); } if (logfile) { + if (!dynamicName && _fileSize + message.Size() > _maxFileSize) + { + /** @ We assume all log files have a .log extension. + If file "gol.log" is at its max capacity, this will spawn a new file, "gol_.log". If that one reaches capacity, it'll spawn "gol__.log", etc. + */ + filename.replace(filename.end() - 3, filename.end(), "_.log"); + logfile = OpenFile(filename.c_str(), mode, backup); + _write(message); + return; + } + fprintf(logfile, "%s%s", message.prefix.c_str(), message.text.c_str()); fflush(logfile); + _fileSize += message.Size(); if (dynamicName) { @@ -71,5 +85,7 @@ FILE* AppenderFile::OpenFile(std::string const &filename, std::string const &mod rename(filename.c_str(), newName.c_str()); // no error handling... if we couldn't make a backup, just ignore } - return fopen((logDir + filename).c_str(), mode.c_str()); + FILE* ret = fopen((logDir + filename).c_str(), mode.c_str()); + _fileSize = ftell(ret); + return ret; } diff --git a/src/server/shared/Logging/AppenderFile.h b/src/server/shared/Logging/AppenderFile.h index a3fe285cc7d..4f3055bd6be 100644 --- a/src/server/shared/Logging/AppenderFile.h +++ b/src/server/shared/Logging/AppenderFile.h @@ -23,7 +23,7 @@ class AppenderFile: public Appender { public: - AppenderFile(uint8 _id, std::string const& _name, LogLevel level, const char* filename, const char* logDir, const char* mode, AppenderFlags flags); + AppenderFile(uint8 _id, std::string const& _name, LogLevel level, const char* filename, const char* logDir, const char* mode, AppenderFlags flags, uint64 maxSize); ~AppenderFile(); FILE* OpenFile(std::string const& _name, std::string const& _mode, bool _backup); @@ -35,6 +35,8 @@ class AppenderFile: public Appender std::string mode; bool dynamicName; bool backup; + uint64 _maxFileSize; + uint64 _fileSize; }; #endif diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp index 96c72b5eb74..73b75a2a853 100644 --- a/src/server/shared/Logging/Log.cpp +++ b/src/server/shared/Logging/Log.cpp @@ -145,8 +145,15 @@ void Log::CreateAppenderFromConfig(const char* name) filename += m_logsTimestamp; } + uint64 maxFileSize = 0; + if (++iter != tokens.end()) + { + char const* c = *iter; + maxFileSize = atoi(c); + } + uint8 id = NextAppenderId(); - appenders[id] = new AppenderFile(id, name, level, filename.c_str(), m_logsDir.c_str(), mode.c_str(), flags); + appenders[id] = new AppenderFile(id, name, level, filename.c_str(), m_logsDir.c_str(), mode.c_str(), flags, maxFileSize); //fprintf(stdout, "Log::CreateAppenderFromConfig: Created Appender %s (%u), Type FILE, Mask %u, File %s, Mode %s\n", name, id, level, filename.c_str(), mode.c_str()); // DEBUG - RemoveMe break; } diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 51c083a3dbe..31d180df751 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2661,7 +2661,7 @@ PlayerDump.DisallowOverwrite = 1 # Appender config values: Given a appender "name" # Appender.name # Description: Defines 'where to log' -# Format: Type,LogLevel,Flags,optional1,optional2 +# Format: Type,LogLevel,Flags,optional1,optional2,optional3 # # Type # 0 - (None) @@ -2712,6 +2712,13 @@ PlayerDump.DisallowOverwrite = 1 # a - (Append) # w - (Overwrite) # +# MaxFileSize: Maximum file size of the log file before creating a new log file +# (read as optional3 if Type = File) +# Size is measured in bytes expressed in a 64-bit unsigned integer. +# Maximum value is 4294967295 (4 gb). Leave blank for no limit. +# NOTE: Does not work with dynamic filenames. +# Example: 536870912 (512 mb) +# Appender.Console=1,3,0 Appender.Server=2,2,0,Server.log,w From 70490c8238d21ff56be48d6b8444344451f8f255 Mon Sep 17 00:00:00 2001 From: w1sht0l1v3 Date: Wed, 23 Jan 2013 20:58:01 +0200 Subject: [PATCH 157/204] Script/Commands: Add command to join an existing group/party. --- .../world/2013_01_23_01_world_misc.sql | 10 ++++ src/server/game/Miscellaneous/Language.h | 4 ++ src/server/scripts/Commands/cs_misc.cpp | 56 +++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 sql/updates/world/2013_01_23_01_world_misc.sql diff --git a/sql/updates/world/2013_01_23_01_world_misc.sql b/sql/updates/world/2013_01_23_01_world_misc.sql new file mode 100644 index 00000000000..25042e241dd --- /dev/null +++ b/sql/updates/world/2013_01_23_01_world_misc.sql @@ -0,0 +1,10 @@ +DELETE FROM `trinity_string` WHERE `entry` BETWEEN 1145 AND 1148; +INSERT INTO `trinity_string` (`entry`,`content_default`,`content_loc1`,`content_loc2`,`content_loc3`,`content_loc4`,`content_loc5`,`content_loc6`,`content_loc7`,`content_loc8`) VALUES +(1145,'%s is already in a group!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), +(1146,'%s joined %s''s group.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), +(1147,'%s is not in a group!',NULL, NULL,NULL,NULL,NULL,NULL,NULL,NULL), +(1148,'Group is full!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); + +DELETE FROM `command` WHERE `name`='group join'; +INSERT INTO `command` (`name`,`security`,`help`) VALUES +('group join',3,'Syntax: .group join $AnyCharacterNameFromGroup [$CharacterName] \r\nAdds to group of player $AnyCharacterNameFromGroup player $CharacterName (or selected).'); diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 039e8b816b3..093622467f8 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -847,6 +847,10 @@ enum TrinityStrings LANG_MOVEGENS_EFFECT = 1142, LANG_MOVEFLAGS_GET = 1143, LANG_MOVEFLAGS_SET = 1144, + LANG_GROUP_ALREADY_IN_GROUP = 1145, + LANG_GROUP_PLAYER_JOINED = 1146, + LANG_GROUP_NOT_IN_GROUP = 1147, + LANG_GROUP_FULL = 1148, // Room for more level 3 1144-1199 not used // Debug commands diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 54fe41a8a4d..e2b5ac9487d 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -46,6 +46,7 @@ public: { "leader", SEC_ADMINISTRATOR, false, &HandleGroupLeaderCommand, "", NULL }, { "disband", SEC_ADMINISTRATOR, false, &HandleGroupDisbandCommand, "", NULL }, { "remove", SEC_ADMINISTRATOR, false, &HandleGroupRemoveCommand, "", NULL }, + { "join", SEC_ADMINISTRATOR, false, &HandleGroupJoinCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; static ChatCommand petCommandTable[] = @@ -2725,6 +2726,61 @@ public: return true; } + static bool HandleGroupJoinCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + Player* playerSource = NULL; + Player* playerTarget = NULL; + Group* groupSource = NULL; + Group* groupTarget = NULL; + uint64 guidSource = 0; + uint64 guidTarget = 0; + char* nameplgrStr = strtok((char*)args, " "); + char* nameplStr = strtok(NULL, " "); + + if (handler->GetPlayerGroupAndGUIDByName(nameplgrStr, playerSource, groupSource, guidSource, true)) + { + if (groupSource) + { + if (handler->GetPlayerGroupAndGUIDByName(nameplStr, playerTarget, groupTarget, guidTarget, true)) + { + if (!groupTarget && playerTarget->GetGroup() != groupSource) + { + if (!groupSource->IsFull()) + { + groupSource->AddMember(playerTarget); + groupSource->BroadcastGroupUpdate(); + handler->PSendSysMessage(LANG_GROUP_PLAYER_JOINED, playerTarget->GetName().c_str(), playerSource->GetName().c_str()); + return true; + } + else + { + // group is full + handler->PSendSysMessage(LANG_GROUP_FULL); + return true; + } + } + else + { + // group is full or target player already in a group + handler->PSendSysMessage(LANG_GROUP_ALREADY_IN_GROUP, playerTarget->GetName().c_str()); + return true; + } + } + } + else + { + // specified source player is not in a group + handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, playerSource->GetName().c_str()); + return true; + } + } + + return true; + } + static bool HandlePlayAllCommand(ChatHandler* handler, char const* args) { if (!*args) From d291c78ca0889d569c114d1a638fac466a1fe7a6 Mon Sep 17 00:00:00 2001 From: WishToDie Date: Wed, 23 Jan 2013 21:08:33 +0200 Subject: [PATCH 158/204] Typo fix. --- src/server/game/Miscellaneous/Language.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 093622467f8..1aeb16e9c7e 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -851,7 +851,7 @@ enum TrinityStrings LANG_GROUP_PLAYER_JOINED = 1146, LANG_GROUP_NOT_IN_GROUP = 1147, LANG_GROUP_FULL = 1148, - // Room for more level 3 1144-1199 not used + // Room for more level 3 1149-1199 not used // Debug commands LANG_CINEMATIC_NOT_EXIST = 1200, From f4de181db00bf323793e2121aac496588c3b9b33 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Wed, 23 Jan 2013 20:29:40 +0100 Subject: [PATCH 159/204] SQL: Rename SQL merged in PR --- dep/SFMT/SFMT.h | 2 +- dep/SFMT/randomc.h | 2 +- ...ql => 2013_01_23_02_world_spell_script_names.sql} | 0 src/tools/mesh_extractor/Chunk.cpp | 2 +- src/tools/mesh_extractor/ContinentBuilder.cpp | 2 +- src/tools/mesh_extractor/DoodadHandler.h | 2 +- src/tools/mesh_extractor/Utils.cpp | 12 ++++++------ 7 files changed, 11 insertions(+), 11 deletions(-) rename sql/updates/world/{2013_01_23_00_world_spell_script_names.sql => 2013_01_23_02_world_spell_script_names.sql} (100%) diff --git a/dep/SFMT/SFMT.h b/dep/SFMT/SFMT.h index 08966e1831c..4004ae1db6e 100644 --- a/dep/SFMT/SFMT.h +++ b/dep/SFMT/SFMT.h @@ -7,7 +7,7 @@ * in effect in addition to the GNU General Public License. * Copyright (c) 2006, 2007 by Mutsuo Saito, Makoto Matsumoto and Hiroshima University. * Copyright (c) 2008 by Agner Fog. - * Copyright (c) 2012 Trinity Core + * Copyright (c) 2008-2013 Trinity Core * * BSD License: * Redistribution and use in source and binary forms, with or without diff --git a/dep/SFMT/randomc.h b/dep/SFMT/randomc.h index ee5ad9aa43b..eed2c81a205 100644 --- a/dep/SFMT/randomc.h +++ b/dep/SFMT/randomc.h @@ -7,7 +7,7 @@ * in effect in addition to the GNU General Public License. * Copyright (c) 2006, 2007 by Mutsuo Saito, Makoto Matsumoto and Hiroshima University. * Copyright (c) 2008 by Agner Fog. - * Copyright (c) 2012 Trinity Core + * Copyright (c) 2008-2013 Trinity Core * * BSD License: * Redistribution and use in source and binary forms, with or without diff --git a/sql/updates/world/2013_01_23_00_world_spell_script_names.sql b/sql/updates/world/2013_01_23_02_world_spell_script_names.sql similarity index 100% rename from sql/updates/world/2013_01_23_00_world_spell_script_names.sql rename to sql/updates/world/2013_01_23_02_world_spell_script_names.sql diff --git a/src/tools/mesh_extractor/Chunk.cpp b/src/tools/mesh_extractor/Chunk.cpp index 9f2898a46e0..4605ae0f0dd 100644 --- a/src/tools/mesh_extractor/Chunk.cpp +++ b/src/tools/mesh_extractor/Chunk.cpp @@ -17,7 +17,7 @@ int32 Chunk::FindSubChunkOffset(std::string name) matched = 0; else ++matched; - + if (matched == 4) return ftell(stream) - 4; } diff --git a/src/tools/mesh_extractor/ContinentBuilder.cpp b/src/tools/mesh_extractor/ContinentBuilder.cpp index 9b5c9f9c77b..d6125bdd8e2 100644 --- a/src/tools/mesh_extractor/ContinentBuilder.cpp +++ b/src/tools/mesh_extractor/ContinentBuilder.cpp @@ -101,7 +101,7 @@ void ContinentBuilder::Build(bool debug) } CalculateTileBounds(); - + dtNavMeshParams params; params.maxPolys = 1 << STATIC_POLY_BITS; params.maxTiles = TileMap->TileTable.size(); diff --git a/src/tools/mesh_extractor/DoodadHandler.h b/src/tools/mesh_extractor/DoodadHandler.h index 981834ec7ac..96aecbcce27 100644 --- a/src/tools/mesh_extractor/DoodadHandler.h +++ b/src/tools/mesh_extractor/DoodadHandler.h @@ -20,7 +20,7 @@ public: void Read(FILE* stream) { int count = 0; - + count += fread(&MmidIndex, sizeof(uint32), 1, stream); count += fread(&UniqueId, sizeof(uint32), 1, stream); Position = Vector3::Read(stream); diff --git a/src/tools/mesh_extractor/Utils.cpp b/src/tools/mesh_extractor/Utils.cpp index 119ac94f94f..acb1ed38e27 100644 --- a/src/tools/mesh_extractor/Utils.cpp +++ b/src/tools/mesh_extractor/Utils.cpp @@ -218,7 +218,7 @@ void Utils::SaveToDisk( FILE* stream, std::string path ) if (fread(data, 1, size, stream) != 1) { printf("SaveToDisk: Error reading from Stream while trying to save file %s to disck.\n", path.c_str()); - return; + return; } // And write it in the file fwrite(data, 1, size, disk); @@ -274,7 +274,7 @@ void MapChunkHeader::Read(FILE* stream) count += fread(&SizeMCLQ, sizeof(uint32), 1, stream); Position = Vector3::Read(stream); count += fread(&OffsetMCCV, sizeof(uint32), 1, stream); - + if (count != 27) printf("MapChunkHeader::Read: Failed to read some data expected 27, read %d\n", count); } @@ -295,7 +295,7 @@ void MHDR::Read(FILE* stream) count += fread(&OffsetMFBO, sizeof(uint32), 1, stream); count += fread(&OffsetMH2O, sizeof(uint32), 1, stream); count += fread(&OffsetMTFX, sizeof(uint32), 1, stream); - + if (count != 12) printf("MHDR::Read: Failed to read some data expected 12, read %d\n", count); } @@ -357,7 +357,7 @@ void ModelHeader::Read(FILE* stream) count += fread(&OffsetBoundingVertices, sizeof(uint32), 1, stream); count += fread(&CountBoundingNormals, sizeof(uint32), 1, stream); count += fread(&OffsetBoundingNormals, sizeof(uint32), 1, stream); - + if (count != 51) printf("ModelHeader::Read: Failed to read some data expected 51, read %d\n", count); @@ -380,7 +380,7 @@ WorldModelHeader WorldModelHeader::Read(FILE* stream) ret.BoundingBox[0] = Vector3::Read(stream); ret.BoundingBox[1] = Vector3::Read(stream); count += fread(&ret.LiquidTypeRelated, sizeof(uint32), 1, stream); - + if (count != 10) printf("WorldModelHeader::Read: Failed to read some data expected 10, read %d\n", count); @@ -400,7 +400,7 @@ DoodadInstance DoodadInstance::Read(FILE* stream) count += fread(&ret.QuatZ, sizeof(float), 1, stream); count += fread(&ret.Scale, sizeof(float), 1, stream); count += fread(&ret.LightColor, sizeof(uint32), 1, stream); - + if (count != 7) printf("DoodadInstance::Read: Failed to read some data expected 7, read %d\n", count); From 1c0239ea9873f1fbbaf6cf80bb3caf2d350a656a Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Wed, 23 Jan 2013 22:56:56 +0100 Subject: [PATCH 160/204] Core/DBLayer: Drop support for MySQL versions <5.1 Both server and client libraries must be up to date in order to run TC. --- src/server/shared/Database/DatabaseWorkerPool.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h index 34b7c5083e3..3df9436a4c4 100644 --- a/src/server/shared/Database/DatabaseWorkerPool.h +++ b/src/server/shared/Database/DatabaseWorkerPool.h @@ -31,6 +31,9 @@ #include "QueryHolder.h" #include "AdhocStatement.h" +#define MIN_MYSQL_SERVER_VERSION 51000u +#define MIN_MYSQL_CLIENT_VERSION 51000u + class PingOperation : public SQLOperation { //! Operation for idle delaythreads @@ -53,6 +56,9 @@ class DatabaseWorkerPool _connections.resize(IDX_SIZE); WPFatal (mysql_thread_safe(), "Used MySQL library isn't thread-safe."); + WPFatal (mysql_get_server_version() >= MIN_MYSQL_SERVER_VERSION && + mysql_get_client_version() >= MIN_MYSQL_CLIENT_VERSION, + "TrinityCore does not support MySQL versions below 5.1"); } ~DatabaseWorkerPool() From 6c5fbc492c7353dcf41c6becc669baa7e2d0205d Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 23 Jan 2013 23:14:18 +0100 Subject: [PATCH 161/204] Scripts/Icecrown Citadel: Fixed Essence of the Blood Queen interrupting player spell casts Closes #8665 --- .../Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index 5643d0ab732..ab0c44aa6d0 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -720,7 +720,7 @@ class spell_blood_queen_essence_of_the_blood_queen : public SpellScriptLoader { PreventDefaultAction(); int32 heal = CalculatePct(int32(eventInfo.GetDamageInfo()->GetDamage()), aurEff->GetAmount()); - GetTarget()->CastCustomSpell(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL, SPELLVALUE_BASE_POINT0, heal, GetTarget()); + GetTarget()->CastCustomSpell(SPELL_ESSENCE_OF_THE_BLOOD_QUEEN_HEAL, SPELLVALUE_BASE_POINT0, heal, GetTarget(), TRIGGERED_FULL_MASK, NULL, aurEff); } void Register() From 5d75ac29b49b4238844f84aedcbbe62c43c8180d Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 23 Jan 2013 23:25:42 +0100 Subject: [PATCH 162/204] Tools: Remove a bit of spam when mmaps_generator loads vmaps --- src/server/collision/VMapDefinitions.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/collision/VMapDefinitions.h b/src/server/collision/VMapDefinitions.h index 56084389ad6..bb0766dc8ff 100644 --- a/src/server/collision/VMapDefinitions.h +++ b/src/server/collision/VMapDefinitions.h @@ -38,9 +38,9 @@ namespace VMAP #define VMAP_DEBUG_LOG(FILTER, ...) sLog->outDebug(FILTER, __VA_ARGS__) #define VMAP_INFO_LOG(FILTER, ...) sLog->outInfo(FILTER, __VA_ARGS__) #else -#define VMAP_ERROR_LOG(FILTER, ...) printf(__VA_ARGS__) -#define VMAP_DEBUG_LOG(FILTER, ...) printf(__VA_ARGS__) -#define VMAP_INFO_LOG(FILTER, ...) printf(__VA_ARGS__) +#define VMAP_ERROR_LOG(FILTER, ...) (void)sizeof(FILTER) +#define VMAP_DEBUG_LOG(FILTER, ...) (void)sizeof(FILTER) +#define VMAP_INFO_LOG(FILTER, ...) (void)sizeof(FILTER) #endif #endif From fd967ba4c64a71221397523440f2a3da0a9ec5f3 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Thu, 24 Jan 2013 01:20:25 +0100 Subject: [PATCH 163/204] Tools/mmaps_generator: Multithreading optimisations. Should save some time generating mmaps. --- .../shared/Database/DatabaseWorkerPool.h | 5 +- src/tools/mmaps_generator/MapBuilder.cpp | 31 +++-------- src/tools/mmaps_generator/MapBuilder.h | 55 +++++++++++++++---- 3 files changed, 56 insertions(+), 35 deletions(-) diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h index 3df9436a4c4..edbc41be8f7 100644 --- a/src/server/shared/Database/DatabaseWorkerPool.h +++ b/src/server/shared/Database/DatabaseWorkerPool.h @@ -56,9 +56,7 @@ class DatabaseWorkerPool _connections.resize(IDX_SIZE); WPFatal (mysql_thread_safe(), "Used MySQL library isn't thread-safe."); - WPFatal (mysql_get_server_version() >= MIN_MYSQL_SERVER_VERSION && - mysql_get_client_version() >= MIN_MYSQL_CLIENT_VERSION, - "TrinityCore does not support MySQL versions below 5.1"); + WPFatal (mysql_get_client_version() >= MIN_MYSQL_CLIENT_VERSION, "TrinityCore does not support MySQL versions below 5.1"); } ~DatabaseWorkerPool() @@ -79,6 +77,7 @@ class DatabaseWorkerPool { T* t = new T(_queue, _connectionInfo); res &= t->Open(); + WPFatal (mysql_get_server_version(t->GetHandle()) >= MIN_MYSQL_SERVER_VERSION, "TrinityCore does not support MySQL versions below 5.1"); _connections[IDX_ASYNC][i] = t; ++_connectionCount[IDX_ASYNC]; } diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index a62011ddfff..4707feb5857 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -166,45 +166,32 @@ namespace MMAP void MapBuilder::buildAllMaps(int threads) { std::vector _threads; - - for (int i = 0; i < threads; ++i) - _threads.push_back(new BuilderThread(this)); + + BuilderThreadPool* pool = new BuilderThreadPool(); for (TileList::iterator it = m_tiles.begin(); it != m_tiles.end(); ++it) { uint32 mapID = it->first; if (!shouldSkipMap(mapID)) { - if (threads > 1) - { - bool next = false; - while (!next) - { - for (std::vector::iterator _th = _threads.begin(); _th != _threads.end(); ++_th) - { - if ((*_th)->Free) - { - (*_th)->SetMapId(mapID); - (*_th)->activate(); - next = true; - break; - } - } - // Wait for 20 seconds - ACE_OS::sleep(ACE_Time_Value (0, 20000)); - } - } + if (threads > 0) + pool->Enqueue(new BuildAMapPlz(mapID)); else buildMap(mapID); } } + for (int i = 0; i < threads; ++i) + _threads.push_back(new BuilderThread(this, pool->Queue())); + // Free memory for (std::vector::iterator _th = _threads.begin(); _th != _threads.end(); ++_th) { (*_th)->wait(); delete *_th; } + + delete pool; } /**************************************************************************/ diff --git a/src/tools/mmaps_generator/MapBuilder.h b/src/tools/mmaps_generator/MapBuilder.h index ea9636b3cc3..ea805fd9235 100644 --- a/src/tools/mmaps_generator/MapBuilder.h +++ b/src/tools/mmaps_generator/MapBuilder.h @@ -30,6 +30,8 @@ #include "DetourNavMesh.h" #include +#include +#include using namespace VMAP; @@ -123,27 +125,60 @@ namespace MMAP // build performance - not really used for now rcContext* m_rcContext; }; + + class BuildAMapPlz : public ACE_Method_Request + { + public: + BuildAMapPlz(uint32 mapId) : _mapId(mapId) {} + + virtual int call() + { + /// @ Actually a creative way of unabstracting the class and returning a member variable + return (int)_mapId; + } + + private: + uint32 _mapId; + }; class BuilderThread : public ACE_Task { private: MapBuilder* _builder; - uint32 _mapId; + ACE_Activation_Queue* _queue; + public: - BuilderThread(MapBuilder* builder) : _builder(builder), Free(true) {} - - void SetMapId(uint32 mapId) { _mapId = mapId; } - + BuilderThread(MapBuilder* builder, ACE_Activation_Queue* queue) : _builder(builder), _queue(queue) { activate(); } + int svc() { - Free = false; - if (_builder) - _builder->buildMap(_mapId); - Free = true; + BuildAMapPlz* request = NULL; + while (request = (BuildAMapPlz*)_queue->dequeue()) + { + _builder->buildMap(request->call()); + delete request; + request = NULL; + } return 0; } - bool Free; + }; + + class BuilderThreadPool + { + public: + BuilderThreadPool() : _queue(new ACE_Activation_Queue()) {} + ~BuilderThreadPool() { _queue->queue()->close(); delete _queue; } + + void Enqueue(BuildAMapPlz* request) + { + _queue->enqueue(request); + } + + ACE_Activation_Queue* Queue() { return _queue; } + + private: + ACE_Activation_Queue* _queue; }; } From 54027803bdcdefb48007e791f02202a23bf10076 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Bla=C5=BEevi=C4=87?= Date: Wed, 23 Jan 2013 21:11:08 +0100 Subject: [PATCH 164/204] Fix error when swapping unique equipped weapon on dual wield Also fix rings and trinkets --- src/server/game/Entities/Player/Player.cpp | 34 ++++++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 14878b078bd..208b24ea105 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -10735,7 +10735,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des { if (no_space_count) *no_space_count = count; - return swap ? EQUIP_ERR_ITEMS_CANT_BE_SWAPPED :EQUIP_ERR_ITEM_NOT_FOUND; + return swap ? EQUIP_ERR_ITEMS_CANT_BE_SWAPPED : EQUIP_ERR_ITEM_NOT_FOUND; } if (pItem) @@ -11490,8 +11490,36 @@ InventoryResult Player::CanEquipItem(uint8 slot, uint16 &dest, Item* pItem, bool if (!swap && GetItemByPos(INVENTORY_SLOT_BAG_0, eslot)) return EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE; - // if swap ignore item (equipped also) - InventoryResult res2 = CanEquipUniqueItem(pItem, swap ? eslot : uint8(NULL_SLOT)); + // if we are swapping 2 equiped items, CanEquipUniqueItem check + // should ignore the item we are trying to swap, and not the + // destination item. CanEquipUniqueItem should ignore destination + // item only when we are swapping weapon from bag + uint8 ignore; + switch (eslot) + { + case EQUIPMENT_SLOT_MAINHAND: + ignore = EQUIPMENT_SLOT_OFFHAND; + break; + case EQUIPMENT_SLOT_OFFHAND: + ignore = EQUIPMENT_SLOT_MAINHAND; + break; + case EQUIPMENT_SLOT_FINGER1: + ignore = EQUIPMENT_SLOT_FINGER2; + break; + case EQUIPMENT_SLOT_FINGER2: + ignore = EQUIPMENT_SLOT_FINGER1; + break; + case EQUIPMENT_SLOT_TRINKET1: + ignore = EQUIPMENT_SLOT_TRINKET2; + break; + case EQUIPMENT_SLOT_TRINKET2: + ignore = EQUIPMENT_SLOT_TRINKET1; + break; + } + if (pItem != GetItemByPos(INVENTORY_SLOT_BAG_0, ignore)) + ignore = eslot; + + InventoryResult res2 = CanEquipUniqueItem(pItem, swap ? ignore : uint8(NULL_SLOT)); if (res2 != EQUIP_ERR_OK) return res2; From 3034db92963bb068ee05da7a97d325d6dd4080f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Bla=C5=BEevi=C4=87?= Date: Thu, 24 Jan 2013 11:02:08 +0100 Subject: [PATCH 165/204] Core/DBLayer: Fixed required version definitions --- src/server/shared/Database/DatabaseWorkerPool.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/shared/Database/DatabaseWorkerPool.h b/src/server/shared/Database/DatabaseWorkerPool.h index edbc41be8f7..9f93e99ab26 100644 --- a/src/server/shared/Database/DatabaseWorkerPool.h +++ b/src/server/shared/Database/DatabaseWorkerPool.h @@ -31,8 +31,8 @@ #include "QueryHolder.h" #include "AdhocStatement.h" -#define MIN_MYSQL_SERVER_VERSION 51000u -#define MIN_MYSQL_CLIENT_VERSION 51000u +#define MIN_MYSQL_SERVER_VERSION 50100u +#define MIN_MYSQL_CLIENT_VERSION 50100u class PingOperation : public SQLOperation { From 23b6a6a7cd27987bff8a5786cfd8dc45349f52ed Mon Sep 17 00:00:00 2001 From: Spp Date: Thu, 24 Jan 2013 12:44:58 +0100 Subject: [PATCH 166/204] Core/Log: Rotate logs when maximum size is exceeded, backup name will be "filename".datetime - This is an addition to 39c2d89 --- src/server/authserver/authserver.conf.dist | 11 +- src/server/shared/Logging/AppenderFile.cpp | 115 +++++++++++---------- src/server/shared/Logging/AppenderFile.h | 5 +- 3 files changed, 70 insertions(+), 61 deletions(-) diff --git a/src/server/authserver/authserver.conf.dist b/src/server/authserver/authserver.conf.dist index 67d22c49da1..dda19c3b849 100644 --- a/src/server/authserver/authserver.conf.dist +++ b/src/server/authserver/authserver.conf.dist @@ -154,7 +154,7 @@ LoginDatabase.WorkerThreads = 1 # Appender config values: Given a appender "name" # Appender.name # Description: Defines 'where to log' -# Format: Type,LogLevel,Flags,optional1,optional2 +# Format: Type,LogLevel,Flags,optional1,optional2,optional3 # # Type # 0 - (None) @@ -205,6 +205,13 @@ LoginDatabase.WorkerThreads = 1 # a - (Append) # w - (Overwrite) # +# MaxFileSize: Maximum file size of the log file before creating a new log file +# (read as optional3 if Type = File) +# Size is measured in bytes expressed in a 64-bit unsigned integer. +# Maximum value is 4294967295 (4 gb). Leave blank for no limit. +# NOTE: Does not work with dynamic filenames. +# Example: 536870912 (512 mb) +# Appender.Console=1,2,0 Appender.Auth=2,2,0,Auth.log,w @@ -250,4 +257,4 @@ Logger.Root=0,3,Console Auth Loggers=Root # -################################################################################################### \ No newline at end of file +################################################################################################### diff --git a/src/server/shared/Logging/AppenderFile.cpp b/src/server/shared/Logging/AppenderFile.cpp index c2f1e0c919d..1ed6350f813 100644 --- a/src/server/shared/Logging/AppenderFile.cpp +++ b/src/server/shared/Logging/AppenderFile.cpp @@ -18,20 +18,71 @@ #include "AppenderFile.h" #include "Common.h" -AppenderFile::AppenderFile(uint8 id, std::string const& name, LogLevel level, const char* _filename, const char* _logDir, const char* _mode, AppenderFlags _flags, uint64 fileSize) - : Appender(id, name, APPENDER_FILE, level, _flags) - , filename(_filename) - , logDir(_logDir) - , mode(_mode) - , _fileSize(fileSize) +AppenderFile::AppenderFile(uint8 id, std::string const& name, LogLevel level, const char* _filename, const char* _logDir, const char* _mode, AppenderFlags _flags, uint64 fileSize): + Appender(id, name, APPENDER_FILE, level, _flags), + filename(_filename), + logDir(_logDir), + mode(_mode), + maxFileSize(fileSize), + fileSize(0) { dynamicName = std::string::npos != filename.find("%s"); backup = _flags & APPENDER_FLAGS_MAKE_FILE_BACKUP; - logfile = !dynamicName ? OpenFile(_filename, _mode, backup) : NULL; + logfile = !dynamicName ? OpenFile(_filename, _mode, mode == "w" && backup) : NULL; } AppenderFile::~AppenderFile() +{ + CloseFile(); +} + +void AppenderFile::_write(LogMessage const& message) +{ + bool exceedMaxSize = maxFileSize > 0 && (fileSize + message.Size()) > maxFileSize; + + if (dynamicName) + { + char namebuf[TRINITY_PATH_MAX]; + snprintf(namebuf, TRINITY_PATH_MAX, filename.c_str(), message.param1.c_str()); + logfile = OpenFile(namebuf, mode, backup || exceedMaxSize); + } + else if (exceedMaxSize) + logfile = OpenFile(filename, "w", true); + + if (!logfile) + return; + + fprintf(logfile, "%s%s", message.prefix.c_str(), message.text.c_str()); + fflush(logfile); + fileSize += message.Size(); + + if (dynamicName) + CloseFile(); +} + +FILE* AppenderFile::OpenFile(std::string const &filename, std::string const &mode, bool backup) +{ + std::string fullName(logDir + filename); + if (backup) + { + CloseFile(); + std::string newName(fullName); + newName.push_back('.'); + newName.append(LogMessage::getTimeStr(time(NULL))); + rename(fullName.c_str(), newName.c_str()); // no error handling... if we couldn't make a backup, just ignore + } + + if (FILE* ret = fopen(fullName.c_str(), mode.c_str())) + { + fileSize = ftell(ret); + return ret; + } + + return NULL; +} + +void AppenderFile::CloseFile() { if (logfile) { @@ -39,53 +90,3 @@ AppenderFile::~AppenderFile() logfile = NULL; } } - -void AppenderFile::_write(LogMessage const& message) -{ - if (dynamicName) - { - char namebuf[TRINITY_PATH_MAX]; - snprintf(namebuf, TRINITY_PATH_MAX, filename.c_str(), message.param1.c_str()); - logfile = OpenFile(namebuf, mode, backup); - _fileSize = ftell(logfile); - } - - if (logfile) - { - if (!dynamicName && _fileSize + message.Size() > _maxFileSize) - { - /** @ We assume all log files have a .log extension. - If file "gol.log" is at its max capacity, this will spawn a new file, "gol_.log". If that one reaches capacity, it'll spawn "gol__.log", etc. - */ - filename.replace(filename.end() - 3, filename.end(), "_.log"); - logfile = OpenFile(filename.c_str(), mode, backup); - _write(message); - return; - } - - fprintf(logfile, "%s%s", message.prefix.c_str(), message.text.c_str()); - fflush(logfile); - _fileSize += message.Size(); - - if (dynamicName) - { - fclose(logfile); - logfile = NULL; - } - } -} - -FILE* AppenderFile::OpenFile(std::string const &filename, std::string const &mode, bool backup) -{ - if (mode == "w" && backup) - { - std::string newName(filename); - newName.push_back('.'); - newName.append(LogMessage::getTimeStr(time(NULL))); - rename(filename.c_str(), newName.c_str()); // no error handling... if we couldn't make a backup, just ignore - } - - FILE* ret = fopen((logDir + filename).c_str(), mode.c_str()); - _fileSize = ftell(ret); - return ret; -} diff --git a/src/server/shared/Logging/AppenderFile.h b/src/server/shared/Logging/AppenderFile.h index 4f3055bd6be..c15974799e1 100644 --- a/src/server/shared/Logging/AppenderFile.h +++ b/src/server/shared/Logging/AppenderFile.h @@ -28,6 +28,7 @@ class AppenderFile: public Appender FILE* OpenFile(std::string const& _name, std::string const& _mode, bool _backup); private: + void CloseFile(); void _write(LogMessage const& message); FILE* logfile; std::string filename; @@ -35,8 +36,8 @@ class AppenderFile: public Appender std::string mode; bool dynamicName; bool backup; - uint64 _maxFileSize; - uint64 _fileSize; + uint64 maxFileSize; + uint64 fileSize; }; #endif From 389a4899f4032863955989386a02a6399411ebb3 Mon Sep 17 00:00:00 2001 From: springfieldking Date: Thu, 24 Jan 2013 22:26:11 +0800 Subject: [PATCH 167/204] Update src/server/shared/Logging/Log.cpp Fix crash when the last iter plus and change value --- src/server/shared/Logging/Log.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp index 73b75a2a853..48512852dc4 100644 --- a/src/server/shared/Logging/Log.cpp +++ b/src/server/shared/Logging/Log.cpp @@ -146,7 +146,7 @@ void Log::CreateAppenderFromConfig(const char* name) } uint64 maxFileSize = 0; - if (++iter != tokens.end()) + if ( (iter != tokens.end()) && (++iter != tokens.end()) ) { char const* c = *iter; maxFileSize = atoi(c); From 08866f377edae3c32d57195e2d9acabbd85fdd32 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 24 Jan 2013 16:40:35 +0100 Subject: [PATCH 168/204] Tools/mmap_generator: Fixed a deadlock at exit --- src/tools/mmaps_generator/MapBuilder.cpp | 8 ++++---- src/tools/mmaps_generator/MapBuilder.h | 20 +++++++++++--------- src/tools/mmaps_generator/PathGenerator.cpp | 2 +- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/tools/mmaps_generator/MapBuilder.cpp b/src/tools/mmaps_generator/MapBuilder.cpp index 4707feb5857..4a016f267b4 100644 --- a/src/tools/mmaps_generator/MapBuilder.cpp +++ b/src/tools/mmaps_generator/MapBuilder.cpp @@ -166,8 +166,8 @@ namespace MMAP void MapBuilder::buildAllMaps(int threads) { std::vector _threads; - - BuilderThreadPool* pool = new BuilderThreadPool(); + + BuilderThreadPool* pool = threads > 0 ? new BuilderThreadPool() : NULL; for (TileList::iterator it = m_tiles.begin(); it != m_tiles.end(); ++it) { @@ -175,13 +175,13 @@ namespace MMAP if (!shouldSkipMap(mapID)) { if (threads > 0) - pool->Enqueue(new BuildAMapPlz(mapID)); + pool->Enqueue(new MapBuildRequest(mapID)); else buildMap(mapID); } } - for (int i = 0; i < threads; ++i) + for (int i = 0; i < threads; ++i) _threads.push_back(new BuilderThread(this, pool->Queue())); // Free memory diff --git a/src/tools/mmaps_generator/MapBuilder.h b/src/tools/mmaps_generator/MapBuilder.h index ea805fd9235..3ffaea0ab66 100644 --- a/src/tools/mmaps_generator/MapBuilder.h +++ b/src/tools/mmaps_generator/MapBuilder.h @@ -125,11 +125,11 @@ namespace MMAP // build performance - not really used for now rcContext* m_rcContext; }; - - class BuildAMapPlz : public ACE_Method_Request + + class MapBuildRequest : public ACE_Method_Request { public: - BuildAMapPlz(uint32 mapId) : _mapId(mapId) {} + MapBuildRequest(uint32 mapId) : _mapId(mapId) {} virtual int call() { @@ -141,7 +141,7 @@ namespace MMAP uint32 _mapId; }; - class BuilderThread : public ACE_Task + class BuilderThread : public ACE_Task_Base { private: MapBuilder* _builder; @@ -149,19 +149,21 @@ namespace MMAP public: BuilderThread(MapBuilder* builder, ACE_Activation_Queue* queue) : _builder(builder), _queue(queue) { activate(); } - + int svc() { - BuildAMapPlz* request = NULL; - while (request = (BuildAMapPlz*)_queue->dequeue()) + /// @ Set a timeout for dequeue attempts (only used when the queue is empty) as it will never get populated after thread starts + ACE_Time_Value timeout(5); + ACE_Method_Request* request = NULL; + while ((request = _queue->dequeue(&timeout)) != NULL) { _builder->buildMap(request->call()); delete request; request = NULL; } + return 0; } - }; class BuilderThreadPool @@ -170,7 +172,7 @@ namespace MMAP BuilderThreadPool() : _queue(new ACE_Activation_Queue()) {} ~BuilderThreadPool() { _queue->queue()->close(); delete _queue; } - void Enqueue(BuildAMapPlz* request) + void Enqueue(MapBuildRequest* request) { _queue->enqueue(request); } diff --git a/src/tools/mmaps_generator/PathGenerator.cpp b/src/tools/mmaps_generator/PathGenerator.cpp index 01059099f98..47d35b517d5 100644 --- a/src/tools/mmaps_generator/PathGenerator.cpp +++ b/src/tools/mmaps_generator/PathGenerator.cpp @@ -292,5 +292,5 @@ int main(int argc, char** argv) if (!silent) printf("Finished. MMAPS were built in %u ms!\n", GetMSTimeDiffToNow(start)); - return 1; + return 0; } From cc605e060509d1255dfb2659200efa3c6f03fdf2 Mon Sep 17 00:00:00 2001 From: Spp Date: Thu, 17 Jan 2013 17:35:47 +0100 Subject: [PATCH 169/204] Core/Misc: Minor cosmetic changes here and there --- src/server/game/Entities/Player/Player.cpp | 2 +- src/server/game/Entities/Player/Player.h | 2 +- src/server/game/Groups/Group.cpp | 2 +- .../game/Handlers/BattleGroundHandler.cpp | 4 +-- src/server/game/Handlers/MiscHandler.cpp | 2 +- src/server/game/Server/WorldSocket.cpp | 2 +- src/server/game/World/World.cpp | 29 +++++++------------ 7 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index c232a7a936c..fbc40db790e 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -21759,7 +21759,7 @@ void Player::LeaveBattleground(bool teleportToEntryPoint) } } -bool Player::CanJoinToBattleground() const +bool Player::CanJoinToBattleground(Battleground const* /*bg*/) const { // check Deserter debuff if (HasAura(26013)) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index a1e6591413f..a69f8c44715 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2227,7 +2227,7 @@ class Player : public Unit, public GridObject uint32 GetBGTeam() const { return m_bgData.bgTeam ? m_bgData.bgTeam : GetTeam(); } void LeaveBattleground(bool teleportToEntryPoint = true); - bool CanJoinToBattleground() const; + bool CanJoinToBattleground(Battleground const* bg) const; bool CanReportAfkDueToLimit(); void ReportedAfkBy(Player* reporter); void ClearAfkReports() { m_bgData.bgAfkReporter.clear(); } diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 734a1bfbaad..711e07ef941 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -1818,7 +1818,7 @@ GroupJoinBattlegroundResult Group::CanJoinBattlegroundQueue(Battleground const* if (bgOrTemplate->GetTypeID() == BATTLEGROUND_RB && member->InBattlegroundQueue()) return ERR_IN_NON_RANDOM_BG; // check for deserter debuff in case not arena queue - if (bgOrTemplate->GetTypeID() != BATTLEGROUND_AA && !member->CanJoinToBattleground()) + if (bgOrTemplate->GetTypeID() != BATTLEGROUND_AA && !member->CanJoinToBattleground(bgOrTemplate)) return ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS; // check if member can join any more battleground queues if (!member->HasFreeBattlegroundQueueId()) diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index e70f127d600..0213df31630 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -138,7 +138,7 @@ void WorldSession::HandleBattlemasterJoinOpcode(WorldPacket& recvData) } // check Deserter debuff - if (!_player->CanJoinToBattleground()) + if (!_player->CanJoinToBattleground(bg)) { WorldPacket data; sBattlegroundMgr->BuildGroupJoinedBattlegroundPacket(&data, ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS); @@ -413,7 +413,7 @@ void WorldSession::HandleBattleFieldPortOpcode(WorldPacket &recvData) if (action == 1 && ginfo.ArenaType == 0) { //if player is trying to enter battleground (not arena!) and he has deserter debuff, we must just remove him from queue - if (!_player->CanJoinToBattleground()) + if (!_player->CanJoinToBattleground(bg)) { //send bg command result to show nice message WorldPacket data2; diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index c16a33ad97c..1aadd7f319d 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -1342,7 +1342,7 @@ void WorldSession::HandleComplainOpcode(WorldPacket& recvData) recvData >> unk1; // probably language recvData >> unk2; // message type? recvData >> unk3; // probably channel id - recvData >> unk4; // unk random value + recvData >> unk4; // time recvData >> description; // spam description string (messagetype, channel name, player name, message) break; } diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index b9955fac523..c80d25be139 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -1033,4 +1033,4 @@ void WorldSocket::SendAuthResponseError(uint8 code) WorldPacket packet(SMSG_AUTH_RESPONSE, 1); packet << uint8(code); SendPacket(packet); -} \ No newline at end of file +} diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 67444475849..26a7986bcb8 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -225,7 +225,7 @@ void World::AddSession(WorldSession* s) void World::AddSession_(WorldSession* s) { - ASSERT (s); + ASSERT(s); //NOTE - Still there is race condition in WorldSession* being used in the Sockets @@ -260,7 +260,7 @@ void World::AddSession_(WorldSession* s) uint32 Sessions = GetActiveAndQueuedSessionCount(); uint32 pLimit = GetPlayerAmountLimit(); - uint32 QueueSize = GetQueuedSessionCount(); //number of players in the queue + uint32 QueueSize = GetQueuedSessionCount(); //number of players in the queue //so we don't count the user trying to //login as a session and queue the socket that we are using @@ -269,7 +269,7 @@ void World::AddSession_(WorldSession* s) if (pLimit > 0 && Sessions >= pLimit && AccountMgr::IsPlayerAccount(s->GetSecurity()) && !HasRecentlyDisconnected(s)) { - AddQueuedPlayer (s); + AddQueuedPlayer(s); UpdateMaxSessionCounters(); sLog->outInfo(LOG_FILTER_GENERAL, "PlayerQueue: Account id %u is in Queue Position (%u).", s->GetAccountId(), ++QueueSize); return; @@ -775,7 +775,7 @@ void World::LoadConfigSettings(bool reload) if (int32(m_int_configs[CONFIG_START_PLAYER_MONEY]) < 0) { sLog->outError(LOG_FILTER_SERVER_LOADING, "StartPlayerMoney (%i) must be in range 0..%u. Set to %u.", m_int_configs[CONFIG_START_PLAYER_MONEY], MAX_MONEY_AMOUNT, 0); - m_int_configs[CONFIG_START_PLAYER_MONEY] = 0; + m_int_configs[CONFIG_START_PLAYER_MONEY] = 0; } else if (m_int_configs[CONFIG_START_PLAYER_MONEY] > MAX_MONEY_AMOUNT) { @@ -1292,12 +1292,7 @@ void World::SetInitialWorldSettings() //No SQL injection as values are treated as integers // not send custom type REALM_FFA_PVP to realm list - uint32 server_type; - if (IsFFAPvPRealm()) - server_type = REALM_TYPE_PVP; - else - server_type = getIntConfig(CONFIG_GAME_TYPE); - + uint32 server_type = IsFFAPvPRealm() ? uint32(REALM_TYPE_PVP) : getIntConfig(CONFIG_GAME_TYPE); uint32 realm_zone = getIntConfig(CONFIG_REALM_ZONE); LoginDatabase.PExecute("UPDATE realmlist SET icon = %u, timezone = %u WHERE id = '%d'", server_type, realm_zone, realmID); // One-time query @@ -1398,8 +1393,8 @@ void World::SetInitialWorldSettings() sLog->outInfo(LOG_FILTER_SERVER_LOADING, "Loading Item Random Enchantments Table..."); LoadRandomEnchantmentsTable(); - sLog->outInfo(LOG_FILTER_SERVER_LOADING, "Loading Disables"); - DisableMgr::LoadDisables(); // must be before loading quests and items + sLog->outInfo(LOG_FILTER_SERVER_LOADING, "Loading Disables"); // must be before loading quests and items + DisableMgr::LoadDisables(); sLog->outInfo(LOG_FILTER_SERVER_LOADING, "Loading Items..."); // must be after LoadRandomEnchantmentsTable and LoadPageTexts sObjectMgr->LoadItemTemplates(); @@ -1579,9 +1574,11 @@ void World::SetInitialWorldSettings() ///- Load dynamic data tables from the database sLog->outInfo(LOG_FILTER_SERVER_LOADING, "Loading Item Auctions..."); sAuctionMgr->LoadAuctionItems(); + sLog->outInfo(LOG_FILTER_SERVER_LOADING, "Loading Auctions..."); sAuctionMgr->LoadAuctions(); + sLog->outInfo(LOG_FILTER_SERVER_LOADING, "Loading Guilds..."); sGuildMgr->LoadGuilds(); sLog->outInfo(LOG_FILTER_SERVER_LOADING, "Loading ArenaTeams..."); @@ -1843,7 +1840,6 @@ void World::DetectDBCLang() m_defaultDbcLocale = LocaleConstant(default_locale); sLog->outInfo(LOG_FILTER_SERVER_LOADING, "Using %s DBC Locale as default. All available DBC locales: %s", localeNames[m_defaultDbcLocale], availableLocalsStr.empty() ? "" : availableLocalsStr.c_str()); - } void World::RecordTimeDiff(const char *text, ...) @@ -1883,7 +1879,6 @@ void World::LoadAutobroadcasts() if (!result) { sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded 0 autobroadcasts definitions. DB table `autobroadcast` is empty!"); - return; } @@ -1891,7 +1886,6 @@ void World::LoadAutobroadcasts() do { - Field* fields = result->Fetch(); std::string message = fields[0].GetString(); @@ -1900,8 +1894,7 @@ void World::LoadAutobroadcasts() ++count; } while (result->NextRow()); - sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u autobroadcasts definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); - + sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u autobroadcast definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } /// Update the World ! @@ -2951,8 +2944,8 @@ void World::LoadDBVersion() if (result) { Field* fields = result->Fetch(); - m_DBVersion = fields[0].GetString(); + m_DBVersion = fields[0].GetString(); // will be overwrite by config values if different and non-0 m_int_configs[CONFIG_CLIENTCACHE_VERSION] = fields[1].GetUInt32(); } From 53a3373a985e4c266ed0197e9e537d3de1ffab33 Mon Sep 17 00:00:00 2001 From: Spp Date: Thu, 24 Jan 2013 16:56:32 +0100 Subject: [PATCH 170/204] Core/Logging: Fix all possible crashes when using bad Appender config settings --- src/server/shared/Logging/Log.cpp | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp index 48512852dc4..f5ef6dfcc5b 100644 --- a/src/server/shared/Logging/Log.cpp +++ b/src/server/shared/Logging/Log.cpp @@ -89,8 +89,9 @@ void Log::CreateAppenderFromConfig(const char* name) options = ConfigMgr::GetStringDefault(options.c_str(), ""); Tokenizer tokens(options, ','); Tokenizer::const_iterator iter = tokens.begin(); + uint8 size = tokens.size(); - if (tokens.size() < 2) + if (size < 2) { fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong configuration for appender %s. Config line: %s\n", name, options.c_str()); return; @@ -98,16 +99,15 @@ void Log::CreateAppenderFromConfig(const char* name) AppenderFlags flags = APPENDER_FLAGS_NONE; AppenderType type = AppenderType(atoi(*iter)); - ++iter; - LogLevel level = LogLevel(atoi(*iter)); + LogLevel level = LogLevel(atoi(*(++iter))); if (level > LOG_LEVEL_FATAL) { fprintf(stderr, "Log::CreateAppenderFromConfig: Wrong Log Level %d for appender %s\n", level, name); return; } - if (++iter != tokens.end()) - flags = AppenderFlags(atoi(*iter)); + if (size > 2) + flags = AppenderFlags(atoi(*(++iter))); switch (type) { @@ -115,7 +115,7 @@ void Log::CreateAppenderFromConfig(const char* name) { AppenderConsole* appender = new AppenderConsole(NextAppenderId(), name, level, flags); appenders[appender->getId()] = appender; - if (++iter != tokens.end()) + if (iter != tokens.end()) appender->InitColors(*iter); //fprintf(stdout, "Log::CreateAppenderFromConfig: Created Appender %s (%u), Type CONSOLE, Mask %u\n", appender->getName().c_str(), appender->getId(), appender->getLogLevel()); // DEBUG - RemoveMe break; @@ -125,16 +125,16 @@ void Log::CreateAppenderFromConfig(const char* name) std::string filename; std::string mode = "a"; - if (++iter == tokens.end()) + if (size < 4) { fprintf(stderr, "Log::CreateAppenderFromConfig: Missing file name for appender %s\n", name); return; } - filename = *iter; + filename = *(++iter); - if (++iter != tokens.end()) - mode = *iter; + if (size > 4) + mode = *(++iter); if (flags & APPENDER_FLAGS_USE_TIMESTAMP) { @@ -146,11 +146,8 @@ void Log::CreateAppenderFromConfig(const char* name) } uint64 maxFileSize = 0; - if ( (iter != tokens.end()) && (++iter != tokens.end()) ) - { - char const* c = *iter; - maxFileSize = atoi(c); - } + if (size > 5) + maxFileSize = atoi(*(++iter)); uint8 id = NextAppenderId(); appenders[id] = new AppenderFile(id, name, level, filename.c_str(), m_logsDir.c_str(), mode.c_str(), flags, maxFileSize); From bf0c976f76d3ae2078f503748888f1eaf5586b2b Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 24 Jan 2013 17:23:34 +0100 Subject: [PATCH 171/204] Core/Players: Fixed uninitialized variable for item swaps --- src/server/game/Entities/Player/Player.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index fbc40db790e..66162142fdc 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -11491,7 +11491,7 @@ InventoryResult Player::CanEquipItem(uint8 slot, uint16 &dest, Item* pItem, bool // should ignore the item we are trying to swap, and not the // destination item. CanEquipUniqueItem should ignore destination // item only when we are swapping weapon from bag - uint8 ignore; + uint8 ignore = uint8(NULL_SLOT); switch (eslot) { case EQUIPMENT_SLOT_MAINHAND: @@ -11513,7 +11513,8 @@ InventoryResult Player::CanEquipItem(uint8 slot, uint16 &dest, Item* pItem, bool ignore = EQUIPMENT_SLOT_TRINKET1; break; } - if (pItem != GetItemByPos(INVENTORY_SLOT_BAG_0, ignore)) + + if (ignore == uint8(NULL_SLOT) || pItem != GetItemByPos(INVENTORY_SLOT_BAG_0, ignore)) ignore = eslot; InventoryResult res2 = CanEquipUniqueItem(pItem, swap ? ignore : uint8(NULL_SLOT)); From b64ad98b0dda247d7e3ff7a288b378212bf54323 Mon Sep 17 00:00:00 2001 From: Kirkhammett Date: Thu, 24 Jan 2013 16:53:28 +0000 Subject: [PATCH 172/204] DB/SAI: Fix quest Wrangle Some Aether Rays! Closes #6176 Closes #8968 --- sql/updates/world/2013_01_24_00_world_sai.sql | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 sql/updates/world/2013_01_24_00_world_sai.sql diff --git a/sql/updates/world/2013_01_24_00_world_sai.sql b/sql/updates/world/2013_01_24_00_world_sai.sql new file mode 100644 index 00000000000..516af5a1504 --- /dev/null +++ b/sql/updates/world/2013_01_24_00_world_sai.sql @@ -0,0 +1,32 @@ +SET @AETHER_RAY := 22181; +SET @WRANGLED_RAY := 23343; +SET @WRANGLE_SPELL := 40856; +SET @WRANGLED_FORCE_CAST := 40917; +SET @WRANGLED_AURA := 40926; +SET @QUEST_GIVER := 23335; + +DELETE FROM `creature_text` WHERE `entry`=@AETHER_RAY; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@AETHER_RAY,1,0,'The Aether Ray appears ready to be wrangled.',16,0,100,0,0,0,'Aether Ray'); + +DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@AETHER_RAY; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@AETHER_RAY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@AETHER_RAY; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(@AETHER_RAY, 0, 0, 0, 0, 0, 100, 0, 5000, 6000, 8000, 9000, 11, 35333, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 'Aether Ray - IC - Cast Tail Swipe'), +(@AETHER_RAY, 0, 1, 0, 2, 0, 100, 1, 0, 40, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Aether Ray - On 40 % HP - Say emote'), +(@AETHER_RAY, 0, 2, 3, 8, 0, 100, 0, @WRANGLE_SPELL, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Aether Ray - On spellcast - Despawn'), +(@AETHER_RAY, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 11, @WRANGLED_FORCE_CAST, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Aether Ray - Link with 2 - Summon Wrangled Aether Ray'); + +DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@WRANGLED_RAY; +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=@WRANGLED_RAY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@WRANGLED_RAY; +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(@WRANGLED_RAY, 0, 0, 1, 54, 0, 100, 1, 0, 0, 0, 0, 85, @WRANGLED_AURA, 3, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'On spawn - Cast Wrangled Aura - Action Invoker'), +(@WRANGLED_RAY, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 29, 0, 0, @QUEST_GIVER, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 'Wrangled Ray - Link with 0 - Follow Player'), +(@WRANGLED_RAY, 0, 2, 0, 65, 0, 100, 0, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Wrangled Ray - On follow complete - Despawn'); + +DELETE FROM `conditions` WHERE `SourceEntry`=@WRANGLE_SPELL; +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(17, 0, @WRANGLE_SPELL, 0, 0, 31, 1, 3, 22181, 0, 0, 0, 0, '', 'Spell only hits Aether Rey'), +(17, 0, @WRANGLE_SPELL, 0, 0, 38, 1, 40, 4, 0, 0, 0, 0, '', 'Spell only hits if at or below 40%'); From 0d3cc3ae3acdf3e92af4b027b822666b20352774 Mon Sep 17 00:00:00 2001 From: Spp Date: Thu, 24 Jan 2013 21:50:58 +0100 Subject: [PATCH 173/204] Core/Log: Fix console colors (missing change from 53a3373) Closes #9051 --- src/server/shared/Logging/Log.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/shared/Logging/Log.cpp b/src/server/shared/Logging/Log.cpp index f5ef6dfcc5b..920ce4ce570 100644 --- a/src/server/shared/Logging/Log.cpp +++ b/src/server/shared/Logging/Log.cpp @@ -115,8 +115,8 @@ void Log::CreateAppenderFromConfig(const char* name) { AppenderConsole* appender = new AppenderConsole(NextAppenderId(), name, level, flags); appenders[appender->getId()] = appender; - if (iter != tokens.end()) - appender->InitColors(*iter); + if (size > 3) + appender->InitColors(*(++iter)); //fprintf(stdout, "Log::CreateAppenderFromConfig: Created Appender %s (%u), Type CONSOLE, Mask %u\n", appender->getName().c_str(), appender->getId(), appender->getLogLevel()); // DEBUG - RemoveMe break; } From 1c7ade5e54454d285c843e633f69b911a1d81fb9 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 24 Jan 2013 22:46:45 +0100 Subject: [PATCH 174/204] Scripts/Icecrown Citadel: Fixed Deathbringer Saurfang's Blood Power scaling on first attempt. Closes #3283 --- .../boss_deathbringer_saurfang.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 23e4fc19dd2..d688205938a 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -415,6 +415,13 @@ class boss_deathbringer_saurfang : public CreatureScript } } + void SpellHit(Unit* caster, SpellInfo const* spell) + { + if (spell->Id == SPELL_BLOOD_LINK_POWER) + if (Aura* bloodPower = me->GetAura(SPELL_BLOOD_POWER)) + bloodPower->RecalculateAmountOfEffects(); + } + void UpdateAI(uint32 const diff) { if (!UpdateVictim() && !(events.GetPhaseMask() & PHASE_INTRO_MASK)) @@ -1004,8 +1011,6 @@ class spell_deathbringer_blood_link : public SpellScriptLoader void HandleDummy(SpellEffIndex /*effIndex*/) { GetHitUnit()->CastCustomSpell(SPELL_BLOOD_LINK_POWER, SPELLVALUE_BASE_POINT0, GetEffectValue(), GetHitUnit(), true); - if (Aura* bloodPower = GetHitUnit()->GetAura(SPELL_BLOOD_POWER)) - bloodPower->RecalculateAmountOfEffects(); PreventHitDefaultEffect(EFFECT_0); } @@ -1093,13 +1098,6 @@ class spell_deathbringer_blood_power : public SpellScriptLoader DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_deathbringer_blood_power_AuraScript::RecalculateHook, EFFECT_0, SPELL_AURA_MOD_SCALE); DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_deathbringer_blood_power_AuraScript::RecalculateHook, EFFECT_1, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); } - - bool Load() - { - if (GetUnitOwner()->getPowerType() != POWER_ENERGY) - return false; - return true; - } }; SpellScript* GetSpellScript() const From 705d0c88657e04ee0b4610e2f40ba9378228d670 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 24 Jan 2013 22:51:42 +0100 Subject: [PATCH 175/204] Scripts/Icecrown Citadel: Fixed possible crash with Bone Spike Graveyard Closes #7171 --- .../IcecrownCitadel/boss_lord_marrowgar.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index e751ec2bd7b..4763896cf72 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -53,7 +53,7 @@ enum Spells SPELL_COLDFLAME_SUMMON = 69147, }; -uint32 const boneSpikeSummonId[3] = {69062, 72669, 72670}; +uint32 const BoneSpikeSummonId[3] = {69062, 72669, 72670}; enum Events { @@ -515,6 +515,20 @@ class spell_marrowgar_bone_spike_graveyard : public SpellScriptLoader { PrepareSpellScript(spell_marrowgar_bone_spike_graveyard_SpellScript); + bool Validate(SpellInfo const* /*spell*/) + { + for (uint32 i = 0; i < 3; ++i) + if (!sSpellMgr->GetSpellInfo(BoneSpikeSummonId[i])) + return false; + + return true; + } + + bool Load() + { + return GetCaster()->GetTypeId() == TYPEID_UNIT && GetCaster()->IsAIEnabled; + } + SpellCastResult CheckCast() { return GetCaster()->GetAI()->SelectTarget(SELECT_TARGET_TOPAGGRO, 1, 0.0f, true, -SPELL_IMPALED) ? SPELL_CAST_OK : SPELL_FAILED_NO_VALID_TARGETS; @@ -536,7 +550,7 @@ class spell_marrowgar_bone_spike_graveyard : public SpellScriptLoader break; didHit = true; - target->CastCustomSpell(boneSpikeSummonId[i], SPELLVALUE_BASE_POINT0, 0, target, true); + target->CastCustomSpell(BoneSpikeSummonId[i], SPELLVALUE_BASE_POINT0, 0, target, true); } if (didHit) From c36aa6e7af667580d9a8e4da9971ce8a33e9352b Mon Sep 17 00:00:00 2001 From: thomas33 Date: Fri, 25 Jan 2013 12:25:06 +0100 Subject: [PATCH 176/204] fix typo --- src/server/game/Globals/ObjectMgr.cpp | 2 +- src/server/shared/Database/Implementation/WorldDatabase.cpp | 2 +- src/server/shared/Database/Implementation/WorldDatabase.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 30257797470..891bc9b253a 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -4730,7 +4730,7 @@ void ObjectMgr::LoadWaypointScripts() for (ScriptMapMap::const_iterator itr = sWaypointScripts.begin(); itr != sWaypointScripts.end(); ++itr) actionSet.insert(itr->first); - PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WOLRD_SEL_WAYPOINT_DATA_ACTION); + PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_WAYPOINT_DATA_ACTION); PreparedQueryResult result = WorldDatabase.Query(stmt); if (result) diff --git a/src/server/shared/Database/Implementation/WorldDatabase.cpp b/src/server/shared/Database/Implementation/WorldDatabase.cpp index 399a4eeb031..b807736f47b 100644 --- a/src/server/shared/Database/Implementation/WorldDatabase.cpp +++ b/src/server/shared/Database/Implementation/WorldDatabase.cpp @@ -60,7 +60,7 @@ void WorldDatabaseConnection::DoPrepareStatements() PrepareStatement(WORLD_UPD_WAYPOINT_DATA_ALL_WPGUID, "UPDATE waypoint_data SET wpguid = 0", CONNECTION_ASYNC); PrepareStatement(WORLD_SEL_WAYPOINT_DATA_BY_POS, "SELECT id, point FROM waypoint_data WHERE (abs(position_x - ?) <= ?) and (abs(position_y - ?) <= ?) and (abs(position_z - ?) <= ?)", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_WAYPOINT_DATA_WPGUID_BY_ID, "SELECT wpguid FROM waypoint_data WHERE id = ? and wpguid <> 0", CONNECTION_SYNCH); - PrepareStatement(WOLRD_SEL_WAYPOINT_DATA_ACTION, "SELECT DISTINCT action FROM waypoint_data", CONNECTION_SYNCH); + PrepareStatement(WORLD_SEL_WAYPOINT_DATA_ACTION, "SELECT DISTINCT action FROM waypoint_data", CONNECTION_SYNCH); PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPTS_MAX_ID, "SELECT MAX(guid) FROM waypoint_scripts", CONNECTION_SYNCH); PrepareStatement(WORLD_INS_CREATURE_ADDON, "INSERT INTO creature_addon(guid, path_id) VALUES (?, ?)", CONNECTION_ASYNC); PrepareStatement(WORLD_UPD_CREATURE_ADDON_PATH, "UPDATE creature_addon SET path_id = ? WHERE guid = ?", CONNECTION_ASYNC); diff --git a/src/server/shared/Database/Implementation/WorldDatabase.h b/src/server/shared/Database/Implementation/WorldDatabase.h index 30cc45c535a..032baf29dd9 100644 --- a/src/server/shared/Database/Implementation/WorldDatabase.h +++ b/src/server/shared/Database/Implementation/WorldDatabase.h @@ -80,7 +80,7 @@ enum WorldDatabaseStatements WORLD_SEL_WAYPOINT_DATA_MAX_POINT, WORLD_SEL_WAYPOINT_DATA_BY_POS, WORLD_SEL_WAYPOINT_DATA_WPGUID_BY_ID, - WOLRD_SEL_WAYPOINT_DATA_ACTION, + WORLD_SEL_WAYPOINT_DATA_ACTION, WORLD_SEL_WAYPOINT_SCRIPTS_MAX_ID, WORLD_UPD_CREATURE_ADDON_PATH, WORLD_INS_CREATURE_ADDON, From 9ad8ac73a96e1ee4046c6ae6471b59d0151d2bce Mon Sep 17 00:00:00 2001 From: nelegalno Date: Fri, 25 Jan 2013 11:57:31 +0000 Subject: [PATCH 177/204] DB/Texts: Ensure that correct types are used in `creature_text` (42 texts should be corrected) Closes #9055 --- sql/updates/world/2013_01_25_00_world_creature_text.sql | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 sql/updates/world/2013_01_25_00_world_creature_text.sql diff --git a/sql/updates/world/2013_01_25_00_world_creature_text.sql b/sql/updates/world/2013_01_25_00_world_creature_text.sql new file mode 100644 index 00000000000..25354a70390 --- /dev/null +++ b/sql/updates/world/2013_01_25_00_world_creature_text.sql @@ -0,0 +1,8 @@ +-- Update text's with creature_text.type old format values - some missing texts should be fixed. +-- based on http://collab.kpsn.org/display/tc/Creature+text+tc2#Creaturetexttc2-type +UPDATE `creature_text` SET `type`=12 WHERE `type`=0; -- Say +UPDATE `creature_text` SET `type`=14 WHERE `type`=1; -- Yell +UPDATE `creature_text` SET `type`=16 WHERE `type`=2; -- Emote +UPDATE `creature_text` SET `type`=41 WHERE `type`=3; -- Boss Emote +UPDATE `creature_text` SET `type`=15 WHERE `type`=4; -- Whisper +UPDATE `creature_text` SET `type`=42 WHERE `type`=5; -- Boss Whisper From dbb25deb5fd88b393d97a3c99d5c5e37c59fcb53 Mon Sep 17 00:00:00 2001 From: Malcrom Date: Fri, 25 Jan 2013 14:54:56 +0000 Subject: [PATCH 178/204] DB/Stats: Correct a few creature_classlevelstats Research done for 4.3.4 but still valid in 3.3.5 --- ...013_01_25_01_world_creature_classlevelstats.sql | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 sql/updates/world/2013_01_25_01_world_creature_classlevelstats.sql diff --git a/sql/updates/world/2013_01_25_01_world_creature_classlevelstats.sql b/sql/updates/world/2013_01_25_01_world_creature_classlevelstats.sql new file mode 100644 index 00000000000..5d0a916dfb8 --- /dev/null +++ b/sql/updates/world/2013_01_25_01_world_creature_classlevelstats.sql @@ -0,0 +1,14 @@ +UPDATE `creature_classlevelstats` SET `basehp1`=9741 WHERE `level`=82 AND `class`=1; +UPDATE `creature_classlevelstats` SET `basehp0`=5971, `basehp1`=10300 WHERE `level`=84 AND `class`=1; +UPDATE `creature_classlevelstats` SET `basehp0`=6141 WHERE `level`=85 AND `class`=1; + +UPDATE `creature_classlevelstats` SET `basehp1`=1006 WHERE `level`=31 AND `class`=2; +UPDATE `creature_classlevelstats` SET `basemana`=4081 WHERE `level`=81 AND `class`=2; +UPDATE `creature_classlevelstats` SET `basemana`=4363 WHERE `level`=84 AND `class`=2; +UPDATE `creature_classlevelstats` SET `basehp2`=15498, `basemana`=4454 WHERE `level`=85 AND `class`=2; +UPDATE `creature_classlevelstats` SET `basehp2`=16515, `basemana`=4735 WHERE `level`=88 AND `class`=2; + +UPDATE `creature_classlevelstats` SET `basemana`=9328 WHERE `level`=83 AND `class`=8; +UPDATE `creature_classlevelstats` SET `basemana`=9512 WHERE `level`=84 AND `class`=8; +UPDATE `creature_classlevelstats` SET `basehp0`=4299, `basemana`=9697 WHERE `level`=85 AND `class`=8; +UPDATE `creature_classlevelstats` SET `basemana`=10232 WHERE `level`=88 AND `class`=8; From 61495d18a3423d5b7f44425f902342d4a3a3892c Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Fri, 25 Jan 2013 21:40:21 +0100 Subject: [PATCH 179/204] Core/Log: Fix crash due to uninitialized variable --- src/server/shared/Logging/AppenderFile.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/server/shared/Logging/AppenderFile.cpp b/src/server/shared/Logging/AppenderFile.cpp index 1ed6350f813..25141815de6 100644 --- a/src/server/shared/Logging/AppenderFile.cpp +++ b/src/server/shared/Logging/AppenderFile.cpp @@ -24,7 +24,8 @@ AppenderFile::AppenderFile(uint8 id, std::string const& name, LogLevel level, co logDir(_logDir), mode(_mode), maxFileSize(fileSize), - fileSize(0) + fileSize(0), + logfile(NULL) { dynamicName = std::string::npos != filename.find("%s"); backup = _flags & APPENDER_FLAGS_MAKE_FILE_BACKUP; From f3d0ea66be2ae4696393ecdd5b714f1ed21cc073 Mon Sep 17 00:00:00 2001 From: Gacko Date: Fri, 25 Jan 2013 22:28:49 +0100 Subject: [PATCH 180/204] DB: Fix SAI broke by quest_end_script conversion Closes #8995 --- .../2013_01_25_02_world_smart_scripts.sql | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 sql/updates/world/2013_01_25_02_world_smart_scripts.sql diff --git a/sql/updates/world/2013_01_25_02_world_smart_scripts.sql b/sql/updates/world/2013_01_25_02_world_smart_scripts.sql new file mode 100644 index 00000000000..69d48686429 --- /dev/null +++ b/sql/updates/world/2013_01_25_02_world_smart_scripts.sql @@ -0,0 +1,41 @@ +-- Kalaran Windblade: SAI +DELETE FROM `smart_scripts` WHERE `entryorguid`=8479 AND `source_type`=0; +INSERT INTO `smart_scripts`(`entryorguid`,`id`,`link`,`event_type`,`event_param1`,`event_param2`,`action_type`,`action_param1`,`target_type`,`comment`) VALUES +(8479,0,1,62,1321,0,26,3441,7,'Kalaran Windblade - On gossip select - Quest credit'), +(8479,1,0,61,0,0,72,0,7,'Kalaran Windblade - On gossip select - Close gossip'), +(8479,2,3,62,1323,2,11,19797,7,'Kalaran Windblade - On gossip select - Cast 19797'), +(8479,3,0,61,0,0,72,0,7,'Kalaran Windblade - On gossip select - Close gossip'), +(8479,4,0,62,1323,3,80,847900,1,'Kalaran Windblade - On gossip select - Run script'); + +-- Kalaran Windblade: SAI action list +DELETE FROM `smart_scripts` WHERE `entryorguid`=847900 AND `source_type`=9; +INSERT INTO `smart_scripts`(`entryorguid`,`source_type`,`id`,`event_param1`,`event_param2`,`action_type`,`action_param1`,`target_type`,`comment`) VALUES +(847900,9,0,0,0,72,0,7,'Kalaran Windblade - Action 0 - Close gossip'), +(847900,9,1,0,0,83,3,1,'Kalaran Windblade - Action 1 - Remove NPC flags'), +(847900,9,2,1000,1000,1,0,1,'Kalaran Windblade - Action 2 - Say 0'), +(847900,9,3,1000,1000,17,69,1,'Kalaran Windblade - Action 3 - Emote state use standing'), +(847900,9,4,60000,60000,17,0,1,'Kalaran Windblade - Action 4 - Emote state none'), +(847900,9,5,1000,1000,15,3453,7,'Kalaran Windblade - Action 5 - Give quest credit'), +(847900,9,6,1000,1000,82,3,1,'Kalaran Windblade - Action 6 - Add NPC flags'); + +-- Kalaran Windblade: Creature text +DELETE FROM `creature_text` WHERE `entry`=8479; +INSERT INTO `creature_text`(`entry`,`groupid`,`id`,`text`,`type`,`probability`,`comment`) VALUE +(8479,0,0,'Be patient, $N. The torch is almost complete.',12,100,'Kalaran Windblade - Smart AI'); + +-- Captured Mountaineer: SAI +UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=2211; +DELETE FROM `smart_scripts` WHERE `entryorguid`=2211 AND `source_type`=0; +INSERT INTO `smart_scripts`(`entryorguid`,`id`,`event_type`,`event_param1`,`action_type`,`action_param1`,`action_param2`,`target_type`,`comment`) VALUE +(2211,0,20,492,80,221100,2,1,'Captured Mountaineer - On quest reward - Start timed action list'); + +-- Captured Mountaineer: SAI action list +DELETE FROM `smart_scripts` WHERE `entryorguid`=221100 AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`event_param1`,`event_param2`,`action_type`,`action_param1`,`target_type`,`comment`) VALUES +(221100,9,0,1000,1000,1,0,1,'Captured Mountaineer - Action 0 - Say 0'), +(221100,9,1,4000,4000,37,0,1,'Captured Mountaineer - Action 2 - Suicide'); + +-- Captured Mountaineer: Creature text +DELETE FROM `creature_text` WHERE `entry`=2211; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`probability`,`emote`,`comment`) VALUE +(2211,0,0,'I raise my brew and hope to be rid of the likes of you! Cheers, you no good scoundrel, $N!',12,100,7,'Captured Mountaineer - Reward quest 492'); From 6acfa490659875af8ea546aa223d07b3c9ad21cc Mon Sep 17 00:00:00 2001 From: w1sht0l1v3 Date: Sat, 26 Jan 2013 00:41:46 +0200 Subject: [PATCH 181/204] Script/Commands: Implement command to list the members of a group/party. --- .../world/2013_01_26_00_world_misc.sql | 8 ++ src/server/game/Miscellaneous/Language.h | 4 +- src/server/scripts/Commands/cs_misc.cpp | 75 +++++++++++++++++++ 3 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 sql/updates/world/2013_01_26_00_world_misc.sql diff --git a/sql/updates/world/2013_01_26_00_world_misc.sql b/sql/updates/world/2013_01_26_00_world_misc.sql new file mode 100644 index 00000000000..429d900d765 --- /dev/null +++ b/sql/updates/world/2013_01_26_00_world_misc.sql @@ -0,0 +1,8 @@ +DELETE FROM `trinity_string` WHERE `entry` IN (1149,1150); +INSERT INTO `trinity_string` (`entry`,`content_default`,`content_loc1`,`content_loc2`,`content_loc3`,`content_loc4`,`content_loc5`,`content_loc6`,`content_loc7`,`content_loc8`) VALUES +(1149,'Group type: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), +(1150,'Name: %s (%s), GUID: %u, Flags: %s, Roles: %s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); + +DELETE FROM `command` WHERE `name`='group list'; +INSERT INTO `command` (`name`,`security`,`help`) VALUES +('group list',3,'Syntax: .group list [$CharacterName] \r\nLists all the members of the group/party the player is in.'); diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 1aeb16e9c7e..8b416339bc7 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -851,7 +851,9 @@ enum TrinityStrings LANG_GROUP_PLAYER_JOINED = 1146, LANG_GROUP_NOT_IN_GROUP = 1147, LANG_GROUP_FULL = 1148, - // Room for more level 3 1149-1199 not used + LANG_GROUP_TYPE = 1149, + LANG_GROUP_PLAYER_NAME_GUID = 1150, + // Room for more level 3 1151-1199 not used // Debug commands LANG_CINEMATIC_NOT_EXIST = 1200, diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index e2b5ac9487d..3721f221178 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -33,6 +33,8 @@ #include "ace/INET_Addr.h" #include "Player.h" #include "Pet.h" +#include "LFG.h" +#include "GroupMGR.h" class misc_commandscript : public CommandScript { @@ -47,6 +49,7 @@ public: { "disband", SEC_ADMINISTRATOR, false, &HandleGroupDisbandCommand, "", NULL }, { "remove", SEC_ADMINISTRATOR, false, &HandleGroupRemoveCommand, "", NULL }, { "join", SEC_ADMINISTRATOR, false, &HandleGroupJoinCommand, "", NULL }, + { "list", SEC_ADMINISTRATOR, false, &HandleGroupListCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; static ChatCommand petCommandTable[] = @@ -2781,6 +2784,78 @@ public: return true; } + static bool HandleGroupListCommand(ChatHandler* handler, char const* args) + { + Player* playerTarget; + uint64 guidTarget; + std::string nameTarget; + + uint32 parseGUID = MAKE_NEW_GUID(atol((char*)args), 0, HIGHGUID_PLAYER); + + if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget)) + { + playerTarget = sObjectMgr->GetPlayerByLowGUID(parseGUID); + guidTarget = parseGUID; + } + else if (!handler->extractPlayerTarget((char*)args, &playerTarget, &guidTarget, &nameTarget)) + return false; + + Group* groupTarget = NULL; + if (playerTarget) + groupTarget = playerTarget->GetGroup(); + + if (!groupTarget) + { + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER); + stmt->setUInt32(0, guidTarget); + PreparedQueryResult resultGroup = CharacterDatabase.Query(stmt); + if (resultGroup) + groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32()); + } + + if (groupTarget) + { + handler->PSendSysMessage(LANG_GROUP_TYPE, (groupTarget->isRaidGroup() ? "raid" : "party")); + Group::MemberSlotList const& members = groupTarget->GetMemberSlots(); + Group::MemberSlotList::const_iterator itr; + for (itr = members.begin(); itr != members.end(); ++itr) + { + std::ostringstream flags, roles; + if ((*itr).flags & MEMBER_FLAG_ASSISTANT) + flags << "Assistant "; + if ((*itr).flags & MEMBER_FLAG_MAINTANK) + flags << "MainTank "; + if ((*itr).flags & MEMBER_FLAG_MAINASSIST) + flags << "MainAssist "; + + if ((*itr).roles & PLAYER_ROLE_LEADER) + roles << "Leader "; + if ((*itr).roles & PLAYER_ROLE_TANK) + roles << "Tank "; + if ((*itr).roles & PLAYER_ROLE_HEALER) + roles << "Healer "; + if ((*itr).roles & PLAYER_ROLE_DAMAGE) + roles << "Damage "; + + Player* p = ObjectAccessor::FindPlayer((*itr).guid); + const char* onlineState = (p && p->IsInWorld()) ? "online" : "offline"; + + std::string flagsStr = (flags.str().empty()) ? "None" : flags.str(); + std::string rolesStr = (roles.str().empty()) ? "None" : roles.str(); + + handler->PSendSysMessage(LANG_GROUP_PLAYER_NAME_GUID, (*itr).name.c_str(), onlineState, GUID_LOPART((*itr).guid), flagsStr.c_str(), rolesStr.c_str()); + } + return true; + } + else + { + handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, nameTarget.c_str()); + return true; + } + + return true; + } + static bool HandlePlayAllCommand(ChatHandler* handler, char const* args) { if (!*args) From 1348e4e44d4a762abc338adbfc58bb22648fa4a9 Mon Sep 17 00:00:00 2001 From: WishToDie Date: Sat, 26 Jan 2013 00:57:10 +0200 Subject: [PATCH 182/204] Fix Typo. --- src/server/scripts/Commands/cs_misc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 3721f221178..3196e81a951 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -34,7 +34,7 @@ #include "Player.h" #include "Pet.h" #include "LFG.h" -#include "GroupMGR.h" +#include "GroupMgr.h" class misc_commandscript : public CommandScript { From a45f7fd878ba9060c3b4a38f353ac0de4b22c388 Mon Sep 17 00:00:00 2001 From: MrSmite Date: Sat, 19 Jan 2013 02:14:20 -0500 Subject: [PATCH 183/204] Adds CONF option to show quest levels in dialogs. Example: [13] Westfall Stew Default = 0 (off). Make sure to set UI.ShowQuestLevelsInDialogs to 1 to turn it on NOTES: * DO NOT supply the quest level when using commands such as .lookup quest, it is not actually part of the title (even though it will be printed in the result) * Also adds the level in the quest tracker and quest log * If locale is used, the level is added after the proper title is looked up * LUA Mods that offer this feature do not work properly with TC, most will not put the level in all dialogs. Users who have such mods should disable the mod's feature or they may see the quest level listed twice. Example: [13][13] Westfall Stew --- .../game/Entities/Creature/GossipDef.cpp | 35 +++++++++++++++++++ src/server/game/Entities/Creature/GossipDef.h | 2 ++ src/server/game/World/World.cpp | 1 + src/server/game/World/World.h | 1 + src/server/worldserver/worldserver.conf.dist | 8 +++++ 5 files changed, 47 insertions(+) diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index f5877a3b927..a26e84a5311 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -142,6 +142,9 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, uint64 objectGUID) const data << uint32(_questMenu.GetMenuItemCount()); // max count 0x20 + // Store this instead of checking the Singleton every loop iteration + bool questLevelInTitle = sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS); + for (uint8 i = 0; i < _questMenu.GetMenuItemCount(); ++i) { QuestMenuItem const& item = _questMenu.GetItem(i); @@ -160,6 +163,9 @@ void PlayerMenu::SendGossipMenu(uint32 titleTextId, uint64 objectGUID) const if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(questID)) ObjectMgr::GetLocaleString(localeData->Title, locale, title); + if (questLevelInTitle) + AddQuestLevelToTitle(title, quest->GetQuestLevel()); + data << title; // max 0x200 } @@ -252,6 +258,10 @@ void PlayerMenu::SendQuestGiverQuestList(QEmote eEmote, const std::string& Title size_t count_pos = data.wpos(); data << uint8 (_questMenu.GetMenuItemCount()); uint32 count = 0; + + // Store this instead of checking the Singleton every loop iteration + bool questLevelInTitle = sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS); + for (; count < _questMenu.GetMenuItemCount(); ++count) { QuestMenuItem const& qmi = _questMenu.GetItem(count); @@ -267,6 +277,9 @@ void PlayerMenu::SendQuestGiverQuestList(QEmote eEmote, const std::string& Title if (QuestLocale const* localeData = sObjectMgr->GetQuestLocale(questID)) ObjectMgr::GetLocaleString(localeData->Title, locale, title); + if (questLevelInTitle) + AddQuestLevelToTitle(title, quest->GetQuestLevel()); + data << uint32(questID); data << uint32(qmi.QuestIcon); data << int32(quest->GetQuestLevel()); @@ -310,6 +323,9 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, uint64 npcGUID, } } + if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS)) + AddQuestLevelToTitle(questTitle, quest->GetQuestLevel()); + WorldPacket data(SMSG_QUESTGIVER_QUEST_DETAILS, 100); // guess size data << uint64(npcGUID); data << uint64(0); // wotlk, something todo with quest sharing? @@ -499,6 +515,9 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const data << float(quest->GetPointY()); data << uint32(quest->GetPointOpt()); + if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS)) + AddQuestLevelToTitle(questTitle, quest->GetQuestLevel()); + data << questTitle; data << questObjectives; data << questDetails; @@ -545,6 +564,9 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, uint64 npcGUID, b } } + if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS)) + AddQuestLevelToTitle(questTitle, quest->GetQuestLevel()); + WorldPacket data(SMSG_QUESTGIVER_OFFER_REWARD, 50); // guess size data << uint64(npcGUID); data << uint32(quest->GetQuestId()); @@ -645,6 +667,9 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, uint64 npcGUID, return; } + if (sWorld->getBoolConfig(CONFIG_UI_QUESTLEVELS_IN_DIALOGS)) + AddQuestLevelToTitle(questTitle, quest->GetQuestLevel()); + WorldPacket data(SMSG_QUESTGIVER_REQUEST_ITEMS, 50); // guess size data << uint64(npcGUID); data << uint32(quest->GetQuestId()); @@ -694,3 +719,13 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, uint64 npcGUID, _session->SendPacket(&data); sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent SMSG_QUESTGIVER_REQUEST_ITEMS NPCGuid=%u, questid=%u", GUID_LOPART(npcGUID), quest->GetQuestId()); } + +static void PlayerMenu::AddQuestLevelToTitle(std::string &title, int32 level) +{ + // Adds the quest level to the front of the quest title + // example: [13] Westfall Stew + + std::stringstream questTitlePretty; + questTitlePretty << "[" << level << "] " << title; + title = questTitlePretty.str(); +} diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h index 6c5f465bbf0..f13f19bba55 100644 --- a/src/server/game/Entities/Creature/GossipDef.h +++ b/src/server/game/Entities/Creature/GossipDef.h @@ -277,6 +277,8 @@ class PlayerMenu void SendQuestGiverOfferReward(Quest const* quest, uint64 npcGUID, bool enableNext) const; void SendQuestGiverRequestItems(Quest const* quest, uint64 npcGUID, bool canComplete, bool closeOnCancel) const; + static void AddQuestLevelToTitle(std::string &title, int32 level); + private: GossipMenu _gossipMenu; QuestMenu _questMenu; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 26a7986bcb8..c43cbbd417e 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1224,6 +1224,7 @@ void World::LoadConfigSettings(bool reload) // misc m_bool_configs[CONFIG_PDUMP_NO_PATHS] = ConfigMgr::GetBoolDefault("PlayerDump.DisallowPaths", true); m_bool_configs[CONFIG_PDUMP_NO_OVERWRITE] = ConfigMgr::GetBoolDefault("PlayerDump.DisallowOverwrite", true); + m_bool_configs[CONFIG_UI_QUESTLEVELS_IN_DIALOGS] = ConfigMgr::GetBoolDefault("UI.ShowQuestLevelsInDialogs", false); // call ScriptMgr if we're reloading the configuration m_bool_configs[CONFIG_WINTERGRASP_ENABLE] = ConfigMgr::GetBoolDefault("Wintergrasp.Enable", false); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 4a7629cb3af..95c10329690 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -165,6 +165,7 @@ enum WorldBoolConfigs CONFIG_WARDEN_ENABLED, CONFIG_ENABLE_MMAPS, CONFIG_WINTERGRASP_ENABLE, + CONFIG_UI_QUESTLEVELS_IN_DIALOGS, // Should we add quest levels to the title in the NPC dialogs? BOOL_CONFIG_VALUE_COUNT }; diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 31d180df751..641fe1ebb62 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2651,6 +2651,14 @@ PlayerDump.DisallowPaths = 1 PlayerDump.DisallowOverwrite = 1 +# +# UI.ShowQuestLevelsInDialogs +# Description: Show quest levels next to quest titles in UI dialogs +# Example: [13] Westfall Stew +# Default: 0 (do not show) + +UI.ShowQuestLevelsInDialogs = 0 + # ################################################################################################### From 9a652b390a82edf897cfc3e46d508a3fedf0fa8f Mon Sep 17 00:00:00 2001 From: Aokromes Date: Sat, 26 Jan 2013 05:32:37 +0100 Subject: [PATCH 184/204] Update README MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TrinityCore Requirements Platform: Linux, Windows or Mac Processor with SSE2 support ACE ≥ 5.8.3 MySQL ≥ 5.1.0 CMake ≥ 2.8.0 OpenSSL ≥ 0.9.8o GCC ≥ 4.3 (Linux only) MS Visual Studio ≥ 9 (2008) (Windows only) --- README | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README b/README index 9f2f9483b81..b274e53dc32 100644 --- a/README +++ b/README @@ -44,3 +44,13 @@ the doc directory. SQL files to create the database can be found in the sql directory. Files to update your database from an older revision/version can be found in the sql/updates directory. + +TrinityCore Requirements +Platform: Linux, Windows or Mac +Processor with SSE2 support +ACE ≥ 5.8.3 +MySQL ≥ 5.1.0 +CMake ≥ 2.8.0 +OpenSSL ≥ 0.9.8o +GCC ≥ 4.3 (Linux only) +MS Visual Studio ≥ 9 (2008) (Windows only) From f0800d392655f9d55a8e16e64984fb1630f7c4fe Mon Sep 17 00:00:00 2001 From: w1sht0l1v3 Date: Sat, 26 Jan 2013 19:19:55 +0200 Subject: [PATCH 185/204] Scripts/ShadowmoonValley: Fixup script for Lord Illidan Stormrage quest to be doable. Notice: this whole script needs a proper rewrite(contains wrong Illidan npc id,bad dialogues,etc). --- .../Outland/zone_shadowmoon_valley.cpp | 75 +++++++++++++------ 1 file changed, 52 insertions(+), 23 deletions(-) diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index 0a016f0923c..a1bfc0a090a 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -661,6 +661,7 @@ class npc_karynaku : public CreatureScript /*#### # npc_overlord_morghor +# this whole script is wrong and needs a rewrite.even the illidan npc used is the wrong one.npc id 23467 may be the correct one ####*/ enum eOverlordData { @@ -766,7 +767,7 @@ public: Player* player = Unit::GetPlayer(*me, PlayerGUID); Creature* Illi = Creature::GetCreature(*me, IllidanGUID); - if (!player || !Illi) + if (!player) { EnterEvadeMode(); return 0; @@ -794,14 +795,21 @@ public: return 2000; break; case 5: - Illi->SetVisible(true); - Illi->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + if (Illi) + { + Illi->SetVisible(true); + Illi->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + Illi->SetDisplayId(21526); + } return 350; break; case 6: - Illi->CastSpell(Illi, SPELL_ONE, true); - Illi->SetTarget(me->GetGUID()); - me->SetTarget(IllidanGUID); + if (Illi) + { + Illi->CastSpell(Illi, SPELL_ONE, true); + Illi->SetTarget(me->GetGUID()); + me->SetTarget(IllidanGUID); + } return 2000; break; case 7: @@ -810,10 +818,15 @@ public: break; case 8: me->SetUInt32Value(UNIT_FIELD_BYTES_1, 8); - return 9000; + return 2500; + break; + case 9: + // missing text "Lord Illidan, this is the Dragonmaw that I, and others, have told you about. He will lead us to victory!" + return 5000; break; case 10: - Illi->AI()->Talk(LORD_ILLIDAN_SAY_1); + if (Illi) + Illi->AI()->Talk(LORD_ILLIDAN_SAY_1); return 5000; break; case 11: @@ -821,42 +834,53 @@ public: return 6000; break; case 12: - Illi->AI()->Talk(LORD_ILLIDAN_SAY_2); + if (Illi) + Illi->AI()->Talk(LORD_ILLIDAN_SAY_2); return 5500; break; case 13: - Illi->AI()->Talk(LORD_ILLIDAN_SAY_3); + if (Illi) + Illi->AI()->Talk(LORD_ILLIDAN_SAY_3); return 4000; break; case 14: - Illi->SetTarget(PlayerGUID); + if (Illi) + Illi->SetTarget(PlayerGUID); return 1500; break; case 15: - Illi->AI()->Talk(LORD_ILLIDAN_SAY_4); + if (Illi) + Illi->AI()->Talk(LORD_ILLIDAN_SAY_4); return 1500; break; case 16: - Illi->CastSpell(player, SPELL_TWO, true); + if (Illi) + Illi->CastSpell(player, SPELL_TWO, true); player->RemoveAurasDueToSpell(SPELL_THREE); player->RemoveAurasDueToSpell(SPELL_FOUR); return 5000; break; case 17: - Illi->AI()->Talk(LORD_ILLIDAN_SAY_5); + if (Illi) + Illi->AI()->Talk(LORD_ILLIDAN_SAY_5); return 5000; break; case 18: - Illi->AI()->Talk(LORD_ILLIDAN_SAY_6); + if (Illi) + Illi->AI()->Talk(LORD_ILLIDAN_SAY_6); return 5000; break; case 19: - Illi->AI()->Talk(LORD_ILLIDAN_SAY_7); + if (Illi) + Illi->AI()->Talk(LORD_ILLIDAN_SAY_7); return 5000; break; case 20: - Illi->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); - Illi->SetDisableGravity(true); + if (Illi) + { + Illi->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); + Illi->SetDisableGravity(true); + } return 500; break; case 21: @@ -864,8 +888,11 @@ public: return 500; break; case 22: - Illi->SetVisible(false); - Illi->setDeathState(JUST_DIED); + if (Illi) + { + Illi->SetVisible(false); + Illi->setDeathState(JUST_DIED); + } return 1000; break; case 23: @@ -886,7 +913,7 @@ public: break; case 27: { - Unit* Yarzill = me->FindNearestCreature(C_YARZILL, 50); + Unit* Yarzill = me->FindNearestCreature(C_YARZILL, 50.0f); if (Yarzill) Yarzill->SetTarget(PlayerGUID); return 500; @@ -921,9 +948,11 @@ public: } break; case 32: - me->GetMotionMaster()->MovePoint(0, -5085.77f, 577.231f, 86.6719f); return 5000; + me->GetMotionMaster()->MovePoint(0, -5085.77f, 577.231f, 86.6719f); + return 5000; break; case 33: + me->SetTarget(0); Reset(); return 100; break; @@ -940,7 +969,7 @@ public: if (ConversationTimer <= diff) { - if (Event && IllidanGUID && PlayerGUID) + if (Event && PlayerGUID) ConversationTimer = NextStep(++Step); } else ConversationTimer -= diff; } From 18f5de77c3efb73a781e40a81d3a1438bc1f1b11 Mon Sep 17 00:00:00 2001 From: Nay Date: Sat, 26 Jan 2013 17:48:47 +0000 Subject: [PATCH 186/204] Core/GossipDef: Fix a build error from 9812afe08be *slaps MrSmite* --- src/server/game/Entities/Creature/GossipDef.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index a26e84a5311..a2305a8a56d 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -720,7 +720,7 @@ void PlayerMenu::SendQuestGiverRequestItems(Quest const* quest, uint64 npcGUID, sLog->outDebug(LOG_FILTER_NETWORKIO, "WORLD: Sent SMSG_QUESTGIVER_REQUEST_ITEMS NPCGuid=%u, questid=%u", GUID_LOPART(npcGUID), quest->GetQuestId()); } -static void PlayerMenu::AddQuestLevelToTitle(std::string &title, int32 level) +void PlayerMenu::AddQuestLevelToTitle(std::string &title, int32 level) { // Adds the quest level to the front of the quest title // example: [13] Westfall Stew From 9ae8a1e7cb1c212af1f57b0715ea6bd4efd64959 Mon Sep 17 00:00:00 2001 From: dele Date: Sat, 26 Jan 2013 18:58:15 +0100 Subject: [PATCH 187/204] DB/Loot: add missing items to Coren Direbrew Closes #7297 --- .../world/2013_01_26_01_world_creature_loot_template.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sql/updates/world/2013_01_26_01_world_creature_loot_template.sql diff --git a/sql/updates/world/2013_01_26_01_world_creature_loot_template.sql b/sql/updates/world/2013_01_26_01_world_creature_loot_template.sql new file mode 100644 index 00000000000..5d667b99cb5 --- /dev/null +++ b/sql/updates/world/2013_01_26_01_world_creature_loot_template.sql @@ -0,0 +1,5 @@ +-- Coren Direbrew ( http://old.wowhead.com/npc=23872 ) loot fix by dele +DELETE FROM `creature_loot_template` WHERE `entry`=23872 AND `item` IN (38280,38281); +INSERT INTO `creature_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES +(23872,38280,100,1,0,1,1), -- Direbrew's Dire Brew Alliance version +(23872,38281,100,1,0,1,1); -- Direbrew's Dire Brew Horde version From 1682a72d1aed1401e010fdf97f7d45b39846ee37 Mon Sep 17 00:00:00 2001 From: ZxBiohazardZx Date: Sat, 26 Jan 2013 19:20:15 +0100 Subject: [PATCH 188/204] DB/Loot: add loot for Protectorate Treasure Cache and make sure you always get sometime out of it... Closes #8589 --- ...01_26_01_world_reference_loot_template.sql | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 sql/updates/world/2013_01_26_01_world_reference_loot_template.sql diff --git a/sql/updates/world/2013_01_26_01_world_reference_loot_template.sql b/sql/updates/world/2013_01_26_01_world_reference_loot_template.sql new file mode 100644 index 00000000000..d4e5a9fa622 --- /dev/null +++ b/sql/updates/world/2013_01_26_01_world_reference_loot_template.sql @@ -0,0 +1,26 @@ +-- Add reference for Zone Drop Netherstorm Blues +DELETE FROM `reference_loot_template` WHERE `entry`=14501; +INSERT INTO `reference_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES +(14501,31940,0,1,1,1,1), -- Ethereum Torque +(14501,31936,0,1,1,1,1), -- Fiery Cloak +(14501,31565,0,1,1,1,1), -- Skystalker's Boots +(14501,31573,0,1,1,1,1), -- Mistshroud Boots +(14501,31557,0,1,1,1,1), -- Windchanneller's Boots +(14501,31937,0,1,1,1,1), -- Living Cloak +(14501,31928,0,1,1,1,1), -- Dark Band +(14501,31581,0,1,1,1,1), -- Slatesteel Boots +(14501,31929,0,1,1,1,1), -- Enigmatic Band +(14501,31938,0,1,1,1,1), -- Enigmatic Cloak +(14501,31943,0,1,1,1,1), -- Ethereum Band +(14501,31939,0,1,1,1,1), -- Dark Cloak +(14501,31925,0,1,1,1,1), -- Fiery Band +(14501,31926,0,1,1,1,1), -- Frigid Band +(14501,31927,0,1,1,1,1), -- Living Band +(14501,32520,0,1,1,1,1), -- Manaforged Sphere +(14501,31935,0,1,1,1,1); -- Frigid Cloak +-- Add loot for Protectorate Treasure Cache +UPDATE `item_template` SET `minMoneyLoot`=10000,`maxMoneyLoot`=10000 WHERE `entry`=32064; +DELETE FROM `item_loot_template` WHERE `entry`=32064; +INSERT INTO `item_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES +(32064,1,80,1,1,-24013,1), -- one from greens +(32064,2,20,1,1,-14501,1); -- one from blue items From 66e9b0c633fe5a32e5971c994703ff9c58a37392 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Sat, 26 Jan 2013 19:20:00 +0100 Subject: [PATCH 189/204] DB/Conditions: Add conditions for Bellowing Roar / Eruption --- ...1_26_02_world_reference_loot_template.sql} | 0 .../world/2013_01_26_03_world_conditions.sql | 108 ++++++++++++++++++ 2 files changed, 108 insertions(+) rename sql/updates/world/{2013_01_26_01_world_reference_loot_template.sql => 2013_01_26_02_world_reference_loot_template.sql} (100%) create mode 100644 sql/updates/world/2013_01_26_03_world_conditions.sql diff --git a/sql/updates/world/2013_01_26_01_world_reference_loot_template.sql b/sql/updates/world/2013_01_26_02_world_reference_loot_template.sql similarity index 100% rename from sql/updates/world/2013_01_26_01_world_reference_loot_template.sql rename to sql/updates/world/2013_01_26_02_world_reference_loot_template.sql diff --git a/sql/updates/world/2013_01_26_03_world_conditions.sql b/sql/updates/world/2013_01_26_03_world_conditions.sql new file mode 100644 index 00000000000..cc7ab333f4a --- /dev/null +++ b/sql/updates/world/2013_01_26_03_world_conditions.sql @@ -0,0 +1,108 @@ +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry` IN (18431,17731); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +-- Bellowing Roar +(13, 2, 18431, 0, 0, 31, 0, 5, 176838, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176837, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176835, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176834, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176832, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176831, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176833, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176825, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176824, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176823, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176819, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176813, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176812, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176809, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176515, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176514, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176513, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176911, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176910, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176909, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176908, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176842, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176841, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176840, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176839, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176836, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176826, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176811, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176810, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176922, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176921, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176920, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176919, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176915, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176914, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176913, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176912, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176830, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176829, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176828, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176827, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176822, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176821, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176820, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176818, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176817, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176816, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176815, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176814, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176918, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176917, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +(13, 2, 18431, 0, 0, 31, 0, 5, 176916, 0, 0, 0, 0, '', 'Bellowing Roar - Lava Fissure'), +-- Eruption +(13, 2, 17731, 0, 0, 31, 0, 5, 176838, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176837, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176835, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176834, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176832, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176831, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176833, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176825, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176824, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176823, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176819, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176813, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176812, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176809, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176515, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176514, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176513, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176911, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176910, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176909, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176908, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176842, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176841, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176840, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176839, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176836, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176826, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176811, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176810, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176922, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176921, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176920, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176919, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176915, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176914, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176913, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176912, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176830, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176829, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176828, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176827, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176822, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176821, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176820, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176818, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176817, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176816, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176815, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176814, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176918, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176917, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'), +(13, 2, 17731, 0, 0, 31, 0, 5, 176916, 0, 0, 0, 0, '', 'Eruption - Lava Fissure'); From 1c95762849ac9db5e077df567de487648567530c Mon Sep 17 00:00:00 2001 From: ZxBiohazardZx Date: Sat, 26 Jan 2013 19:46:14 +0100 Subject: [PATCH 190/204] DB/Loot: some modifications to Mithrill Bound Trunk Closes #3801 --- ...2013_01_26_04_world_item_loot_template.sql | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 sql/updates/world/2013_01_26_04_world_item_loot_template.sql diff --git a/sql/updates/world/2013_01_26_04_world_item_loot_template.sql b/sql/updates/world/2013_01_26_04_world_item_loot_template.sql new file mode 100644 index 00000000000..32cf116167e --- /dev/null +++ b/sql/updates/world/2013_01_26_04_world_item_loot_template.sql @@ -0,0 +1,29 @@ +-- Change loot in Mithril Bound Trunk to always give an item +DELETE FROM `item_loot_template` WHERE `entry`=21228; +INSERT INTO `item_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES +-- Group1: Leather @ 70% +(21228,4304,40,1,1,2,4), -- Thick Leather +(21228,8170,30,1,1,1,2), -- Rugged Leather +-- Group2: Cloth @ 70% +(21228, 4339,40,1,2,1,3), -- Bolt of Mageweave +(21228,14048,30,1,2,1,2), -- Bolt of Runecloth +-- Ungrouped: +(21228,6149,20,1,0,1,2), -- Greater Mana Potion +(21228,3928,20,1,0,1,2), -- Superior Healing Potion +(21228,34109,50,1,0,1,1), -- Weather-Beaten Journal +(21228, 3914, 1,1,0,1,1), -- Journeyman's Backpack +(21228,7976,0.05,1,0,1,1), -- Plans: Mithril Shield Spike +(21228,7909,0.4,1,0,1,1), -- Aquamarine +(21228,7910,0.3,1,0,1,1), -- Star Ruby +(21228,1613,0.3,1,0,1,1), -- Spiritchaser Staff +(21228,9295,0.3,1,0,1,1), -- Recipe: Invisibility Potion +(21228,7468,0.2,1,0,1,1), -- Regal Robe +(21228,9291,0.2,1,0,1,1), -- Field Plate Leggings +(21228,9910,0.2,1,0,1,1), -- Royal Gloves +(21228,10320,0.2,1,0,1,1), -- Pattern: Red Mageweave Headband +(21228,15245,0.2,1,0,1,1), -- Vorpal Dagger +(21228,8281,0.2,1,0,1,1), -- Valorous Pauldrons +(21228,1685,0.2,1,0,1,1), -- Troll-hide Bag +(21228,8163,0.2,1,0,1,1), -- Jouster's Pauldrons +(21228,8141,0.2,1,0,1,1), -- Chromite Greaves +(21228,8121,0.2,1,0,1,1); -- Heraldic Gloves From 480c8471566c36081ea5602380408363dde307c1 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Sat, 26 Jan 2013 19:48:54 +0100 Subject: [PATCH 191/204] Core: Some cosmetic changes --- src/server/game/Entities/Player/Player.cpp | 2 +- src/server/game/Scripting/ScriptLoader.cpp | 4 ++-- src/server/scripts/Spells/spell_hunter.cpp | 8 ++++---- src/server/scripts/Spells/spell_priest.cpp | 12 ++++++------ src/server/scripts/Spells/spell_shaman.cpp | 6 +++--- src/server/scripts/Spells/spell_warlock.cpp | 8 ++++---- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 66162142fdc..82a1164b423 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -14291,7 +14291,7 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool VendorItemData const* vendorItems = creature->GetVendorItems(); if (!vendorItems || vendorItems->Empty()) { - sLog->outError(LOG_FILTER_SQL, "Creature %u (Entry: %u) have UNIT_NPC_FLAG_VENDOR but have empty trading item list.", creature->GetGUIDLow(), creature->GetEntry()); + sLog->outError(LOG_FILTER_SQL, "Creature (GUID: %u, Entry: %u) have UNIT_NPC_FLAG_VENDOR but have empty trading item list.", creature->GetGUIDLow(), creature->GetEntry()); canTalk = false; } break; diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 3da9ac8fade..efd45188d42 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -66,6 +66,7 @@ void AddSC_list_commandscript(); void AddSC_lookup_commandscript(); void AddSC_message_commandscript(); void AddSC_misc_commandscript(); +void AddSC_mmaps_commandscript(); void AddSC_modify_commandscript(); void AddSC_npc_commandscript(); void AddSC_quest_commandscript(); @@ -76,7 +77,6 @@ void AddSC_tele_commandscript(); void AddSC_ticket_commandscript(); void AddSC_titles_commandscript(); void AddSC_wp_commandscript(); -void AddSC_mmaps_commandscript(); #ifdef SCRIPTS //world @@ -696,6 +696,7 @@ void AddCommandScripts() AddSC_list_commandscript(); AddSC_message_commandscript(); AddSC_misc_commandscript(); + AddSC_mmaps_commandscript(); AddSC_modify_commandscript(); AddSC_npc_commandscript(); AddSC_quest_commandscript(); @@ -706,7 +707,6 @@ void AddCommandScripts() AddSC_ticket_commandscript(); AddSC_titles_commandscript(); AddSC_wp_commandscript(); - AddSC_mmaps_commandscript(); } void AddWorldScripts() diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index 877248cf1a8..891a7daaa1f 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -38,7 +38,7 @@ enum HunterSpells SPELL_HUNTER_CHIMERA_SHOT_SERPENT = 53353, SPELL_HUNTER_CHIMERA_SHOT_VIPER = 53358, SPELL_HUNTER_CHIMERA_SHOT_SCORPID = 53359, - SPELL_HUNTER_GLYPHE_OF_ASPECT_OF_THE_VIPER = 56851, + SPELL_HUNTER_GLYPH_OF_ASPECT_OF_THE_VIPER = 56851, SPELL_HUNTER_INVIGORATION_TRIGGERED = 53398, SPELL_HUNTER_MASTERS_CALL_TRIGGERED = 62305, SPELL_HUNTER_MISDIRECTION_PROC = 35079, @@ -116,7 +116,7 @@ class spell_hun_ascpect_of_the_viper : public SpellScriptLoader { if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_ASPECT_OF_THE_VIPER_ENERGIZE)) return false; - if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_GLYPHE_OF_ASPECT_OF_THE_VIPER)) + if (!sSpellMgr->GetSpellInfo(SPELL_HUNTER_GLYPH_OF_ASPECT_OF_THE_VIPER)) return false; return true; } @@ -128,8 +128,8 @@ class spell_hun_ascpect_of_the_viper : public SpellScriptLoader uint32 maxMana = GetTarget()->GetMaxPower(POWER_MANA); int32 mana = CalculatePct(maxMana, GetTarget()->GetAttackTime(RANGED_ATTACK) / 1000.0f); - if (AuraEffect const* glyphe = GetTarget()->GetAuraEffect(SPELL_HUNTER_GLYPHE_OF_ASPECT_OF_THE_VIPER, EFFECT_0)) - AddPct(mana, glyphe->GetAmount()); + if (AuraEffect const* glyph = GetTarget()->GetAuraEffect(SPELL_HUNTER_GLYPH_OF_ASPECT_OF_THE_VIPER, EFFECT_0)) + AddPct(mana, glyph->GetAmount()); GetTarget()->CastCustomSpell(SPELL_HUNTER_ASPECT_OF_THE_VIPER_ENERGIZE, SPELLVALUE_BASE_POINT0, mana, GetTarget(), true, NULL, aurEff); } diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index e19110d0f62..4e86a895484 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -31,8 +31,8 @@ enum PriestSpells { SPELL_PRIEST_DIVINE_AEGIS = 47753, SPELL_PRIEST_EMPOWERED_RENEW = 63544, - SPELL_PRIEST_GLYPHE_OF_LIGHTWELL = 55673, - SPELL_PRIEST_GLYPHE_OF_PRAYER_OF_HEALING_HEAL = 56161, + SPELL_PRIEST_GLYPH_OF_LIGHTWELL = 55673, + SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL = 56161, SPELL_PRIEST_GUARDIAN_SPIRIT_HEAL = 48153, SPELL_PRIEST_MANA_LEECH_PROC = 34650, SPELL_PRIEST_PENANCE_R1 = 47540, @@ -114,7 +114,7 @@ class spell_pri_glyph_of_prayer_of_healing : public SpellScriptLoader bool Validate(SpellInfo const* /*spellInfo*/) { - if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_GLYPHE_OF_PRAYER_OF_HEALING_HEAL)) + if (!sSpellMgr->GetSpellInfo(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL)) return false; return true; } @@ -123,9 +123,9 @@ class spell_pri_glyph_of_prayer_of_healing : public SpellScriptLoader { PreventDefaultAction(); - SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(SPELL_PRIEST_GLYPHE_OF_PRAYER_OF_HEALING_HEAL); + SpellInfo const* triggeredSpellInfo = sSpellMgr->GetSpellInfo(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL); int32 heal = int32(CalculatePct(int32(eventInfo.GetHealInfo()->GetHeal()), aurEff->GetAmount()) / triggeredSpellInfo->GetMaxTicks()); - GetTarget()->CastCustomSpell(SPELL_PRIEST_GLYPHE_OF_PRAYER_OF_HEALING_HEAL, SPELLVALUE_BASE_POINT0, heal, eventInfo.GetProcTarget(), true, NULL, aurEff); + GetTarget()->CastCustomSpell(SPELL_PRIEST_GLYPH_OF_PRAYER_OF_HEALING_HEAL, SPELLVALUE_BASE_POINT0, heal, eventInfo.GetProcTarget(), true, NULL, aurEff); } void Register() @@ -212,7 +212,7 @@ class spell_pri_lightwell_renew : public SpellScriptLoader if (Unit* caster = GetCaster()) { // Bonus from Glyph of Lightwell - if (AuraEffect* modHealing = caster->GetAuraEffect(SPELL_PRIEST_GLYPHE_OF_LIGHTWELL, EFFECT_0)) + if (AuraEffect* modHealing = caster->GetAuraEffect(SPELL_PRIEST_GLYPH_OF_LIGHTWELL, EFFECT_0)) AddPct(amount, modHealing->GetAmount()); } } diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index b69295150c2..f970807bb94 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -296,9 +296,9 @@ class spell_sha_earth_shield : public SpellScriptLoader // Glyph of Earth Shield //! WORKAROUND - //! this glyphe is a proc - if (AuraEffect* glyphe = caster->GetAuraEffect(SPELL_SHAMAN_GLYPH_OF_EARTH_SHIELD, EFFECT_0)) - AddPct(amount, glyphe->GetAmount()); + //! this glyph is a proc + if (AuraEffect* glyph = caster->GetAuraEffect(SPELL_SHAMAN_GLYPH_OF_EARTH_SHIELD, EFFECT_0)) + AddPct(amount, glyph->GetAmount()); } } diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index 78bfcbab6a0..a9a4b2d749a 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -38,7 +38,7 @@ enum WarlockSpells SPELL_WARLOCK_DEMONIC_EMPOWERMENT_FELHUNTER = 54509, SPELL_WARLOCK_DEMONIC_EMPOWERMENT_IMP = 54444, SPELL_WARLOCK_FEL_SYNERGY_HEAL = 54181, - SPELL_WARLOCK_GLYPHE_OF_SIPHON_LIFE = 63106, + SPELL_WARLOCK_GLYPH_OF_SIPHON_LIFE = 63106, SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R1 = 18692, SPELL_WARLOCK_IMPROVED_HEALTHSTONE_R2 = 18693, SPELL_WARLOCK_IMPROVED_HEALTH_FUNNEL_R1 = 18703, @@ -746,7 +746,7 @@ class spell_warl_siphon_life : public SpellScriptLoader { if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_SIPHON_LIFE_HEAL)) return false; - if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_GLYPHE_OF_SIPHON_LIFE)) + if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_GLYPH_OF_SIPHON_LIFE)) return false; return true; } @@ -762,8 +762,8 @@ class spell_warl_siphon_life : public SpellScriptLoader int32 amount = int32(CalculatePct(eventInfo.GetDamageInfo()->GetDamage(), aurEff->GetAmount())); // Glyph of Siphon Life - if (AuraEffect const* glyphe = GetTarget()->GetAuraEffect(SPELL_WARLOCK_GLYPHE_OF_SIPHON_LIFE, EFFECT_0)) - AddPct(amount, glyphe->GetAmount()); + if (AuraEffect const* glyph = GetTarget()->GetAuraEffect(SPELL_WARLOCK_GLYPH_OF_SIPHON_LIFE, EFFECT_0)) + AddPct(amount, glyph->GetAmount()); GetTarget()->CastCustomSpell(SPELL_WARLOCK_SIPHON_LIFE_HEAL, SPELLVALUE_BASE_POINT0, amount, GetTarget(), true, NULL, aurEff); } From ceed5ea42f046b0b91e41f877bc53b6436e04a69 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Sat, 26 Jan 2013 19:57:11 +0100 Subject: [PATCH 192/204] Scripts/Icecrown Citadel: Fix warning --- .../Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index d688205938a..af727348719 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -415,7 +415,7 @@ class boss_deathbringer_saurfang : public CreatureScript } } - void SpellHit(Unit* caster, SpellInfo const* spell) + void SpellHit(Unit* /*caster*/, SpellInfo const* spell) { if (spell->Id == SPELL_BLOOD_LINK_POWER) if (Aura* bloodPower = me->GetAura(SPELL_BLOOD_POWER)) From e591f886ff4646adca822c11503c3b783b30d36e Mon Sep 17 00:00:00 2001 From: ZxBiohazardZx Date: Sat, 26 Jan 2013 22:12:04 +0100 Subject: [PATCH 193/204] DB/Misc: Add Rare Bosses to Dire Maul Closes #5882 Add SAI for Quest: No Mercy for the Captured Closes #568 Add Spawn for Sand Shark Closes #5925 (thx Mogale) Fix underground Centaurs Closes #8498 (thx baric) --- .../world/2013_01_26_05_world_misc.sql | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 sql/updates/world/2013_01_26_05_world_misc.sql diff --git a/sql/updates/world/2013_01_26_05_world_misc.sql b/sql/updates/world/2013_01_26_05_world_misc.sql new file mode 100644 index 00000000000..ff8cf4d1e77 --- /dev/null +++ b/sql/updates/world/2013_01_26_05_world_misc.sql @@ -0,0 +1,116 @@ +-- Issue 5882: Dire Maul Arena Rare Bosses +-- Spawnlocations are from YTDB need to be checked! +SET @GUID := 45758; -- set the guid for spawning +SET @POOL := 358; -- set the poolid for the spawn +DELETE FROM `creature` WHERE `id` IN (11447,11497,11498); +INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`,`npcflag`,`unit_flags`,`dynamicflags`) VALUES +(@GUID ,11447,1,1,1,0,0,-3799.62,1063.83,132.806,1.20424,21600,0,0,60000, 0,0,0,0,0), +(@GUID+1,11497,1,1,1,0,0,-3731.22,1061.32,132.345,1.78150,21600,0,0,73000,24340,0,0,0,0), +(@GUID+2,11498,1,1,1,0,0,-3690.96,1077.14,131.969,2.65172,21600,0,0,57000, 0,0,0,0,0); +DELETE FROM `pool_template` WHERE `entry`=@POOL; +INSERT INTO `pool_template` (`entry`,`max_limit`,`description`) VALUES +(@POOL,1,'Max 1 Rare in Dire Maul Arena'); +DELETE FROM `pool_creature` WHERE `pool_entry`=@POOL; +INSERT INTO `pool_creature` (`guid`,`pool_entry`,`chance`,`description`) VALUES +(@GUID ,@POOL,0, 'Rare Spawn Dire Maul Arena'), +(@GUID+1,@POOL,0, 'Rare Spawn Dire Maul Arena'), +(@GUID+2,@POOL,0, 'Rare Spawn Dire Maul Arena'); +-- Issue 5925: Missing Sand Shark from Durotar +-- Thx Mogale for sniffing +DELETE FROM `creature` WHERE `id`=5435; +INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`,`npcflag`,`unit_flags`,`dynamicflags`) VALUES +(43494,5435,1,1,1,0,0,-1144.251,-4336.333,-8.457234,4.602825,900,4,0,741,0,1,0,0,0); +-- Issue 8498: Fix 2 centaurs stuck in the ground (by Baric) +UPDATE creature SET position_z=93.67 WHERE guid IN (14007, 20588); +-- Issue 568: No Mercy for the Captured +-- Gossip Menu Options +DELETE FROM `gossip_menu_option` WHERE `menu_id` IN (9510,9509,9508,9507); +INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`) VALUES +-- Chancellor +(9510,0,0, 'No, chancellor.. I wouldn''t say that I''m here to ''rescue'' you, per se.',1,1,0,0,0,0,NULL), +(9510,1,0, 'Where is Senior Scrivener Barriga being held?' ,1,1,50424,0,0,0,NULL), +(9510,2,0, 'Did you see where they took Sanitation Engineer Burke?',1,1,50426,0,0,0,NULL), +(9510,3,0, 'Any idea where they''re keeping Deathguard Schneider?' ,1,1,50425,0,0,0,NULL), +-- Engineer +(9509,0,0, 'Affraid not. Your days as a sanitation engineer are coming to an end', 1,1, 0,0,0,0,NULL), +(9509,1,0, 'Can you tell me where they have Chancellor Amai caged?',1,1,50423,0,0,0,NULL), +(9509,2,0, 'Where is Senior Scrivener Barriga being held?' ,1,1,50424,0,0,0,NULL), +(9509,3,0, 'Any idea where they''re keeping Deathguard Schneider?' ,1,1,50425,0,0,0,NULL), +-- Scrivener +(9508,0,0, 'Not today, senior scrivener!' ,1,1, 0,0,0,0,NULL), +(9508,1,0, 'Can you tell me where they have Chancellor Amai caged?',1,1,50423,0,0,0,NULL), +(9508,2,0, 'Did you see where they took Sanitation Engineer Burke?',1,1,50426,0,0,0,NULL), +(9508,3,0, 'Any idea where they''re keeping Deathguard Schneider?' ,1,1,50425,0,0,0,NULL), +-- Schneider +(9507,0,0, 'I''m affraid not. Schneider. Your time has come!' ,1,1, 0,0,0,0,NULL), +(9507,1,0, 'Can you tell me where they have Chancellor Amai caged?',1,1,50423,0,0,0,NULL), +(9507,2,0, 'Where is Senior Scrivener Barriga being held?' ,1,1,50424,0,0,0,NULL), +(9507,3,0, 'Did you see where they took Sanitation Engineer Burke?',1,1,50426,0,0,0,NULL); +-- Gossip Menu +DELETE FROM `gossip_menu` WHERE `entry` IN (50423,50424,50425,50426); +INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES +(50423,12833), -- I think I saw them take him over by the north side of the abbey, near the archery targets. +(50424,12827), -- I think they put him in a cage over near the lumbermill. +(50425,12832), -- I think they have her down near the gallows. +(50426,12830); -- I think he's on the south side of the abbey. +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (27376,27378,27379,27381) AND `source_type`=0; +DELETE FROM `smart_scripts` WHERE `entryorguid` IN (2737600,2737800,2737900,2738100) AND `source_type`=9; +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +-- Deathguard Schneider +(27376 ,0,0,0,62,0,100,0,9507,0,0,0,80,2737600,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0, "Deathguard Schneider - On Gossip Option Select - Start Script"), +(27376 ,0,1,0,10,0,100,0,0,10,180000,300000,1,1,0,0,0,0,0,17,0,10,0,0.0,0.0,0.0,0.0,"Deathguard Schneider - On LoS with Player Near - Say Line 1"), +(2737600,9,0,0,0,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0.0,0.0,0.0,0.0, "Deathguard Schneider - Script - Close Gossip"), +(2737600,9,1,0,0,0,100,0,200,200,0,0,1,0,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0, "Deathguard Schneider - Script - Say line 0"), +(2737600,9,2,0,0,0,100,0,5000,5000,0,0,2,14,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0, "Deathguard Schneider - Script - Set facton 14 (Hostile)"), +(2737600,9,3,0,0,0,100,0,2500,2500,0,0,46,1,0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0, "Deathguard Schneider - Script - Move"), +-- Senior Scrivener Barriga +(27378 ,0,0,0,62,0,100,0,9508,0,0,0,80,2737800,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,"Senior Scrivener Barriga - On Gossip Option Select - Start Script"), +(27378 ,0,1,0,10,0,100,0,0,10,180000,300000,1,1,0,0,0,0,0,17,0,10,0,0.0,0.0,0.0,0.0,"Senior Scrivener Barriga - On LoS with Player Near - Say Line 1"), +(2737800,9,0,0,0,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0.0,0.0,0.0,0.0, "Deathguard Schneider - Script - Close Gossip"), +(2737800,9,1,0,0,0,100,0,200,200,0,0,1,0,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,"Senior Scrivener Barriga - Say line 0"), +(2737800,9,2,0,0,0,100,0,5000,5000,0,0,2,14,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,"Senior Scrivener Barriga - Set facton 14"), +(2737800,9,3,0,0,0,100,0,2500,2500,0,0,46,1,0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,"Senior Scrivener Barriga - Move"), +-- Engineer Burke +(27379 ,0,0,0,62,0,100,0,9509,0,0,0,80,2737900,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,"Engineer Burke - On Gossip Option Select - Start Script"), +(27379 ,0,1,0,10,0,100,0,0,10,180000,300000,1,1,0,0,0,0,0,17,0,10,0,0.0,0.0,0.0,0.0,"Engineer Burke - On LoS with Player Near - Say Line 1"), +(2737900,9,0,0,0,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0.0,0.0,0.0,0.0, "Deathguard Schneider - Script - Close Gossip"), +(2737900,9,1,0,0,0,100,0,200,200,0,0,1,0,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,"Engineer Burke - Script - Say line 0"), +(2737900,9,2,0,0,0,100,0,5000,5000,0,0,2,14,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,"Engineer Burke - Script - Set facton 14"), +(2737900,9,3,0,0,0,100,0,2500,2500,0,0,46,1,0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,"Engineer Burke - Script - Move"), +-- Chancellor Amai +(27381 ,0,0,0,62,0,100,0,9510,0,0,0,80,2738100,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,"Chancellor Amai - On Gossip Option Select - Start Script"), +(27381 ,0,1,0,10,0,100,0,0,10,180000,300000,1,1,0,0,0,0,0,17,0,10,0,0.0,0.0,0.0,0.0,"Chancellor Amai - On LoS with Player Near - Say Line 1"), +(2738100,9,0,0,0,0,100,0,0,0,0,0,72,0,0,0,0,0,0,7,0,0,0,0.0,0.0,0.0,0.0, "Deathguard Schneider - Script - Close Gossip"), +(2738100,9,1,0,0,0,100,0,200,200,0,0,1,0,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,"Chancellor Amai - Script - Say line 0"), +(2738100,9,2,0,0,0,100,0,5000,5000,0,0,2,14,0,0,0,0,0,1,0,0,0,0.0,0.0,0.0,0.0,"Chancellor Amai - Script - Set facton 14"), +(2738100,9,3,0,0,0,100,0,2500,2500,0,0,46,1,0,0,0,0,0,0,0,0,0,0.0,0.0,0.0,0.0,"Chancellor Amai - Script - Move"); +-- Creature Texts +DELETE FROM `creature_text` WHERE `entry` IN (27376,27378,27379,27381); +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(27376,0,0, 'What do you mean my time has come? I''ll kill you where you stand!',12,0,100,0,0,0, 'Deathguard Schneider before going hostile'), +(27376,1,0, 'Hey, over here!',12,0,100,0,0,0, 'Deathguard Schneider upon LoS'), +(27378,0,0, 'You can''t possibly mean to.... I''ll write you up for this, $C!',12,0,100,0,0,0, 'Senior Scrivener Barriga before going hostile'), +(27378,1,0, 'If you''d be so kind, please let me out of here!',12,0,100,0,0,0, 'Senior Scrivener Barriga upon LoS'), +(27379,0,0, 'No! I beg you! Please don''t kill me!',12,0,100,0,0,0, 'Engineer Burke before going hostile'), +(27379,1,0, 'Can Someone let me out of here? I need to get back to Venomspite and finish my shift.',12,0,100,0,0,0, 'Engineer Burke upon LoS'), +(27381,0,0, 'What is the meaning of this? Stop! I''ll double whatever they''re paying you!',12,0,100,0,0,0, 'Chancellor Amai before going hostile'), +(27381,1,0, 'I just arrived in Venomspite. How could i have possibly wronged you?',12,0,100,0,0,0, 'Chancellor Amai upon Los'); +-- Conditions +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=15 AND `SourceGroup` IN (9507,9508,9509,9510); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15,9507,0,0,9,12245,0,0,0, '', 'Deathguard Schneider: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9507,1,0,9,12245,0,0,0, '', 'Deathguard Schneider: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9507,2,0,9,12245,0,0,0, '', 'Deathguard Schneider: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9507,3,0,9,12245,0,0,0, '', 'Deathguard Schneider: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9508,0,0,9,12245,0,0,0, '', 'Senior Scivener Barriga: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9508,1,0,9,12245,0,0,0, '', 'Senior Scivener Barriga: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9508,2,0,9,12245,0,0,0, '', 'Senior Scivener Barriga: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9508,3,0,9,12245,0,0,0, '', 'Senior Scivener Barriga: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9509,0,0,9,12245,0,0,0, '', 'Engineer Burke: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9509,1,0,9,12245,0,0,0, '', 'Engineer Burke: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9509,2,0,9,12245,0,0,0, '', 'Engineer Burke: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9509,3,0,9,12245,0,0,0, '', 'Engineer Burke: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9510,0,0,9,12245,0,0,0, '', 'Chancellor Amai: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9510,1,0,9,12245,0,0,0, '', 'Chancellor Amai: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9510,2,0,9,12245,0,0,0, '', 'Chancellor Amai: Show Gossip only if on quest "No Mercy for the Captured" '), +(15,9510,3,0,9,12245,0,0,0, '', 'Chancellor Amai: Show Gossip only if on quest "No Mercy for the Captured" '); From 1b551cc157a3324e0523abca55138fd7af10b2ca Mon Sep 17 00:00:00 2001 From: Nay Date: Sat, 26 Jan 2013 21:31:48 +0000 Subject: [PATCH 194/204] Scripts/Commands: Add guild info to .pinfo Original patch by @secharles, modified Closes #8946 --- .../world/2013_01_26_05_world_misc_pinfo.sql | 5 ++++ src/server/game/Miscellaneous/Language.h | 1 + src/server/scripts/Commands/cs_misc.cpp | 23 +++++++++++++++++++ .../Implementation/CharacterDatabase.cpp | 1 + .../Implementation/CharacterDatabase.h | 1 + 5 files changed, 31 insertions(+) create mode 100644 sql/updates/world/2013_01_26_05_world_misc_pinfo.sql diff --git a/sql/updates/world/2013_01_26_05_world_misc_pinfo.sql b/sql/updates/world/2013_01_26_05_world_misc_pinfo.sql new file mode 100644 index 00000000000..2c0a28066d4 --- /dev/null +++ b/sql/updates/world/2013_01_26_05_world_misc_pinfo.sql @@ -0,0 +1,5 @@ +DELETE FROM `trinity_string` WHERE `entry`=749; +INSERT INTO `trinity_string` (`entry`, `content_default`) VALUES +(749, 'Guild: %s (%u) Rank: %s Note: %s OffNote: %s'); + +UPDATE `command` SET `help`='Syntax: .pinfo [$player_name/#GUID]\r\n\r\nOutput account information and guild information for selected player or player find by $player_name or #GUID.' WHERE `name`='pinfo'; diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 8b416339bc7..e13cc86747c 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -522,6 +522,7 @@ enum TrinityStrings LANG_PINFO_BAN = 453, LANG_PINFO_MAP_ONLINE = 714, LANG_PINFO_MAP_OFFLINE = 716, + LANG_PINFO_GUILD_INFO = 749, LANG_YOU_SET_EXPLORE_ALL = 551, LANG_YOU_SET_EXPLORE_NOTHING = 552, diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 3196e81a951..367591080d2 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1734,6 +1734,29 @@ public: else handler->PSendSysMessage(LANG_PINFO_MAP_OFFLINE, map->name[locale], areaName.c_str()); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_MEMBER_EXTENDED); + stmt->setUInt32(0, GUID_LOPART(targetGuid)); + + result = CharacterDatabase.Query(stmt); + if (result) + { + uint32 guildId = 0; + std::string guildName = ""; + std::string guildRank = ""; + std::string note = ""; + std::string officeNote = ""; + + Field* fields = result->Fetch(); + guildId = fields[0].GetUInt32(); + guildName = fields[1].GetString(); + //rankId = fields[2].GetUInt8(); + guildRank = fields[3].GetString(); + note = fields[4].GetString(); + officeNote = fields[5].GetString(); + + handler->PSendSysMessage(LANG_PINFO_GUILD_INFO, guildName.c_str(), guildId, guildRank.c_str(), note.c_str(), officeNote.c_str()); + } + return true; } diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index 1c2410b8b53..b3d818c7565 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -101,6 +101,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHARACTER_SPELLCOOLDOWNS, "SELECT spell, item, time FROM character_spell_cooldown WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_DECLINEDNAMES, "SELECT genitive, dative, accusative, instrumental, prepositional FROM character_declinedname WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_GUILD_MEMBER, "SELECT guildid, rank FROM guild_member WHERE guid = ?", CONNECTION_BOTH); + PrepareStatement(CHAR_SEL_GUILD_MEMBER_EXTENDED, "SELECT g.guildid, g.name, gm.rank, gr.rname, gm.pnote, gm.offnote FROM guild g JOIN guild_member gm ON g.guildid = gm.guildid JOIN guild_rank gr ON g.guildid = gr.guildid WHERE gm.guid = ?", CONNECTION_BOTH); PrepareStatement(CHAR_SEL_CHARACTER_ACHIEVEMENTS, "SELECT achievement, date FROM character_achievement WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_CRITERIAPROGRESS, "SELECT criteria, counter, date FROM character_achievement_progress WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_CHARACTER_EQUIPMENTSETS, "SELECT setguid, setindex, name, iconname, ignore_mask, item0, item1, item2, item3, item4, item5, item6, item7, item8, " diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h index e4728e19934..7c064a98e17 100644 --- a/src/server/shared/Database/Implementation/CharacterDatabase.h +++ b/src/server/shared/Database/Implementation/CharacterDatabase.h @@ -105,6 +105,7 @@ enum CharacterDatabaseStatements CHAR_SEL_CHARACTER_SPELLCOOLDOWNS, CHAR_SEL_CHARACTER_DECLINEDNAMES, CHAR_SEL_GUILD_MEMBER, + CHAR_SEL_GUILD_MEMBER_EXTENDED, CHAR_SEL_CHARACTER_ARENAINFO, CHAR_SEL_CHARACTER_ACHIEVEMENTS, CHAR_SEL_CHARACTER_CRITERIAPROGRESS, From 3a07f4e17d72ea578e59fff5b87b047103f60362 Mon Sep 17 00:00:00 2001 From: Gacko Date: Sun, 27 Jan 2013 01:51:44 +0100 Subject: [PATCH 195/204] DB: Fix import --- sql/updates/world/2013_01_23_02_world_spell_script_names.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/updates/world/2013_01_23_02_world_spell_script_names.sql b/sql/updates/world/2013_01_23_02_world_spell_script_names.sql index dd8b35ae420..d56c6ad1c59 100644 --- a/sql/updates/world/2013_01_23_02_world_spell_script_names.sql +++ b/sql/updates/world/2013_01_23_02_world_spell_script_names.sql @@ -19,7 +19,7 @@ DELETE FROM `spell_script_names` WHERE `spell_id` IN ( -29074, -- spell_mage_master_of_elements -9799, -- spell_pal_eye_for_an_eye 20154, -- spell_pal_seal_of_righteousness -21084 -- spell_pal_seal_of_righteousness +21084, -- spell_pal_seal_of_righteousness -47509, -- spell_pri_divine_aegis 55680, -- spell_pri_glyph_of_prayer_of_healing 28305, -- spell_pri_mana_leech From 10bd0adca16d3a021dd46d2139824752270d292e Mon Sep 17 00:00:00 2001 From: Kinzcool Date: Sat, 26 Jan 2013 21:41:28 -0500 Subject: [PATCH 196/204] DB/Creature: Fixed equipment of Elder Razormaw, he should no longer have a sword as arms --- sql/updates/world/2013_01_26_06_world_creature_template.sql | 1 + 1 file changed, 1 insertion(+) create mode 100644 sql/updates/world/2013_01_26_06_world_creature_template.sql diff --git a/sql/updates/world/2013_01_26_06_world_creature_template.sql b/sql/updates/world/2013_01_26_06_world_creature_template.sql new file mode 100644 index 00000000000..e54949744f6 --- /dev/null +++ b/sql/updates/world/2013_01_26_06_world_creature_template.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `equipment_id`=0 WHERE `entry`=1019; From 3de933bcb5ffb18a454a1c43ffc3fda4ecfa6ce9 Mon Sep 17 00:00:00 2001 From: Kinzcool Date: Sat, 26 Jan 2013 22:09:09 -0500 Subject: [PATCH 197/204] DB/Gameobject: Added a missing gameobject template --- sql/updates/world/2013_01_26_07_world_gameobject_template.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2013_01_26_07_world_gameobject_template.sql diff --git a/sql/updates/world/2013_01_26_07_world_gameobject_template.sql b/sql/updates/world/2013_01_26_07_world_gameobject_template.sql new file mode 100644 index 00000000000..c85ea1f3128 --- /dev/null +++ b/sql/updates/world/2013_01_26_07_world_gameobject_template.sql @@ -0,0 +1,3 @@ +DELETE FROM `gameobject_template` WHERE `entry`=175984; +INSERT INTO `gameobject_template` (`entry`, `type`, `displayId`, `name`, `IconName`, `castBarCaption`, `unk1`, `data0`, `data1`, `data2`, `data3`, `data4`, `data5`, `data6`, `data7`, `data8`, `data9`, `data10`, `data11`, `data12`, `data13`, `data14`, `data15`, `data16`, `data17`, `data18`, `data19`, `data20`, `data21`, `data22`, `data23`, `size`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `unkInt32`, `WDBVerified`) VALUES +(175984, 8, 216, 'Cauldron', '', '', '', 4, 10, 2061, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 15354); From 3a6a02547ceb2a6006b30025f78b58ebe051dc95 Mon Sep 17 00:00:00 2001 From: Nay Date: Sun, 27 Jan 2013 04:06:12 +0000 Subject: [PATCH 198/204] Update sql/updates/world/2013_01_26_07_world_gameobject_template.sql --- sql/updates/world/2013_01_26_07_world_gameobject_template.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/updates/world/2013_01_26_07_world_gameobject_template.sql b/sql/updates/world/2013_01_26_07_world_gameobject_template.sql index c85ea1f3128..c68e48754dc 100644 --- a/sql/updates/world/2013_01_26_07_world_gameobject_template.sql +++ b/sql/updates/world/2013_01_26_07_world_gameobject_template.sql @@ -1,3 +1,3 @@ DELETE FROM `gameobject_template` WHERE `entry`=175984; -INSERT INTO `gameobject_template` (`entry`, `type`, `displayId`, `name`, `IconName`, `castBarCaption`, `unk1`, `data0`, `data1`, `data2`, `data3`, `data4`, `data5`, `data6`, `data7`, `data8`, `data9`, `data10`, `data11`, `data12`, `data13`, `data14`, `data15`, `data16`, `data17`, `data18`, `data19`, `data20`, `data21`, `data22`, `data23`, `size`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `unkInt32`, `WDBVerified`) VALUES -(175984, 8, 216, 'Cauldron', '', '', '', 4, 10, 2061, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 15354); +INSERT INTO `gameobject_template` (`entry`, `type`, `displayId`, `name`, `IconName`, `castBarCaption`, `unk1`, `data0`, `data1`, `data2`, `data3`, `data4`, `data5`, `data6`, `data7`, `data8`, `data9`, `data10`, `data11`, `data12`, `data13`, `data14`, `data15`, `data16`, `data17`, `data18`, `data19`, `data20`, `data21`, `data22`, `data23`, `size`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `WDBVerified`) VALUES +(175984, 8, 216, 'Cauldron', '', '', '', 4, 10, 2061, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 15354); From e1d12de2b14534e35916e58afbe4e7016f0b6ff7 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 27 Jan 2013 11:56:56 +0100 Subject: [PATCH 199/204] Core/Battlegrounds: Fixed arena scoreboards not showing all players. --- .../game/Battlegrounds/BattlegroundMgr.cpp | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index 24e69a151b5..6133bd60258 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -589,6 +589,27 @@ Battleground* BattlegroundMgr::CreateNewBattleground(BattlegroundTypeId original bg->SetRated(isRated); bg->SetRandom(isRandom); + // Set up correct min/max player counts for scoreboards + if (bg->isArena()) + { + uint32 maxPlayersPerTeam = 0; + switch (arenaType) + { + case ARENA_TYPE_2v2: + maxPlayersPerTeam = 2; + break; + case ARENA_TYPE_3v3: + maxPlayersPerTeam = 3; + break; + case ARENA_TYPE_5v5: + maxPlayersPerTeam = 5; + break; + } + + bg->SetMaxPlayersPerTeam(maxPlayersPerTeam); + bg->SetMaxPlayers(maxPlayersPerTeam * 2); + } + return bg; } @@ -649,8 +670,8 @@ bool BattlegroundMgr::CreateBattleground(CreateBattlegroundData& data) bg->SetArenaorBGType(data.IsArena); bg->SetMinPlayersPerTeam(data.MinPlayersPerTeam); bg->SetMaxPlayersPerTeam(data.MaxPlayersPerTeam); - bg->SetMinPlayers(data.MinPlayersPerTeam* 2); - bg->SetMaxPlayers(data.MaxPlayersPerTeam* 2); + bg->SetMinPlayers(data.MinPlayersPerTeam * 2); + bg->SetMaxPlayers(data.MaxPlayersPerTeam * 2); bg->SetName(data.BattlegroundName); bg->SetTeamStartLoc(ALLIANCE, data.Team1StartLocX, data.Team1StartLocY, data.Team1StartLocZ, data.Team1StartLocO); bg->SetTeamStartLoc(HORDE, data.Team2StartLocX, data.Team2StartLocY, data.Team2StartLocZ, data.Team2StartLocO); From 6e80357f8e8b4e820bab8bd05fb8457c3cb46d11 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 27 Jan 2013 17:33:01 +0100 Subject: [PATCH 200/204] Core/Authserver: Added possibility to allow realm connections both from "world" and local networks. --- sql/base/auth_database.sql | 2 + .../auth/2013_01_27_00_auth_realmlist.sql | 3 ++ src/server/authserver/Realms/RealmList.cpp | 38 +++++++++++-------- src/server/authserver/Realms/RealmList.h | 6 ++- src/server/authserver/Server/AuthSocket.cpp | 30 ++++++++++++++- src/server/authserver/Server/AuthSocket.h | 5 +++ .../Database/Implementation/LoginDatabase.cpp | 2 +- src/server/shared/Utilities/Util.cpp | 16 +++++++- src/server/shared/Utilities/Util.h | 8 ++++ 9 files changed, 89 insertions(+), 21 deletions(-) create mode 100644 sql/updates/auth/2013_01_27_00_auth_realmlist.sql diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql index a052a74c837..5050906b008 100644 --- a/sql/base/auth_database.sql +++ b/sql/base/auth_database.sql @@ -193,6 +193,8 @@ CREATE TABLE `realmlist` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL DEFAULT '', `address` varchar(255) NOT NULL DEFAULT '127.0.0.1', + `localAddress` varchar(255) NOT NULL DEFAULT '127.0.0.1', + `localSubnetMask` varchar(255) NOT NULL DEFAULT '255.255.255.0', `port` smallint(5) unsigned NOT NULL DEFAULT '8085', `icon` tinyint(3) unsigned NOT NULL DEFAULT '0', `flag` tinyint(3) unsigned NOT NULL DEFAULT '2', diff --git a/sql/updates/auth/2013_01_27_00_auth_realmlist.sql b/sql/updates/auth/2013_01_27_00_auth_realmlist.sql new file mode 100644 index 00000000000..0c3b18448e6 --- /dev/null +++ b/sql/updates/auth/2013_01_27_00_auth_realmlist.sql @@ -0,0 +1,3 @@ +ALTER TABLE `realmlist` + ADD `localAddress` varchar(255) NOT NULL DEFAULT '127.0.0.1' AFTER `address`, + ADD `localSubnetMask` varchar(255) NOT NULL DEFAULT '255.255.255.0' AFTER `localAddress`; diff --git a/src/server/authserver/Realms/RealmList.cpp b/src/server/authserver/Realms/RealmList.cpp index 72873e40ce5..b4becc96451 100644 --- a/src/server/authserver/Realms/RealmList.cpp +++ b/src/server/authserver/Realms/RealmList.cpp @@ -31,12 +31,12 @@ void RealmList::Initialize(uint32 updateInterval) UpdateRealms(true); } -void RealmList::UpdateRealm(uint32 ID, const std::string& name, ACE_INET_Addr const& address, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float popu, uint32 build) +void RealmList::UpdateRealm(uint32 id, const std::string& name, ACE_INET_Addr const& address, ACE_INET_Addr const& localAddr, ACE_INET_Addr const& localSubmask, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float popu, uint32 build) { // Create new if not exist or update existed Realm& realm = m_realms[name]; - realm.m_ID = ID; + realm.m_ID = id; realm.name = name; realm.icon = icon; realm.flag = flag; @@ -45,7 +45,9 @@ void RealmList::UpdateRealm(uint32 ID, const std::string& name, ACE_INET_Addr co realm.populationLevel = popu; // Append port to IP address. - address.addr_to_string(realm.address, ACE_MAX_FULLY_QUALIFIED_NAME_LEN + 16); + realm.ExternalAddress = address; + realm.LocalAddress = localAddr; + realm.LocalSubnetMask = localSubmask; realm.gamebuild = build; } @@ -77,23 +79,27 @@ void RealmList::UpdateRealms(bool init) do { Field* fields = result->Fetch(); - uint32 realmId = fields[0].GetUInt32(); - std::string name = fields[1].GetString(); - std::string address = fields[2].GetString(); - uint16 port = fields[3].GetUInt16(); - uint8 icon = fields[4].GetUInt8(); - RealmFlags flag = RealmFlags(fields[5].GetUInt8()); - uint8 timezone = fields[6].GetUInt8(); - uint8 allowedSecurityLevel = fields[7].GetUInt8(); - float pop = fields[8].GetFloat(); - uint32 build = fields[9].GetUInt32(); + uint32 realmId = fields[0].GetUInt32(); + std::string name = fields[1].GetString(); + std::string externalAddress = fields[2].GetString(); + std::string localAddress = fields[3].GetString(); + std::string localSubmask = fields[4].GetString(); + uint16 port = fields[5].GetUInt16(); + uint8 icon = fields[6].GetUInt8(); + RealmFlags flag = RealmFlags(fields[7].GetUInt8()); + uint8 timezone = fields[8].GetUInt8(); + uint8 allowedSecurityLevel = fields[9].GetUInt8(); + float pop = fields[10].GetFloat(); + uint32 build = fields[11].GetUInt32(); - ACE_INET_Addr addr(port, address.c_str(), AF_INET); + ACE_INET_Addr externalAddr(port, externalAddress.c_str(), AF_INET); + ACE_INET_Addr localAddr(port, localAddress.c_str(), AF_INET); + ACE_INET_Addr submask(0, localSubmask.c_str(), AF_INET); - UpdateRealm(realmId, name, addr, icon, flag, timezone, (allowedSecurityLevel <= SEC_ADMINISTRATOR ? AccountTypes(allowedSecurityLevel) : SEC_ADMINISTRATOR), pop, build); + UpdateRealm(realmId, name, externalAddr, localAddr, submask, icon, flag, timezone, (allowedSecurityLevel <= SEC_ADMINISTRATOR ? AccountTypes(allowedSecurityLevel) : SEC_ADMINISTRATOR), pop, build); if (init) - sLog->outInfo(LOG_FILTER_AUTHSERVER, "Added realm \"%s\" at %s.", name.c_str(), m_realms[name].address); + sLog->outInfo(LOG_FILTER_AUTHSERVER, "Added realm \"%s\" at %s:%u.", name.c_str(), m_realms[name].ExternalAddress.get_host_addr(), port); } while (result->NextRow()); } diff --git a/src/server/authserver/Realms/RealmList.h b/src/server/authserver/Realms/RealmList.h index 1949c34df9a..68e6524c334 100644 --- a/src/server/authserver/Realms/RealmList.h +++ b/src/server/authserver/Realms/RealmList.h @@ -40,7 +40,9 @@ enum RealmFlags // Storage object for a realm struct Realm { - char address[ACE_MAX_FULLY_QUALIFIED_NAME_LEN + 16]; + ACE_INET_Addr ExternalAddress; + ACE_INET_Addr LocalAddress; + ACE_INET_Addr LocalSubnetMask; std::string name; uint8 icon; RealmFlags flag; @@ -72,7 +74,7 @@ public: private: void UpdateRealms(bool init=false); - void UpdateRealm(uint32 ID, const std::string& name, ACE_INET_Addr const& address, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float popu, uint32 build); + void UpdateRealm(uint32 id, const std::string& name, ACE_INET_Addr const& address, ACE_INET_Addr const& localAddr, ACE_INET_Addr const& localSubmask, uint8 icon, RealmFlags flag, uint8 timezone, AccountTypes allowedSecurityLevel, float popu, uint32 build); RealmMap m_realms; uint32 m_UpdateInterval; diff --git a/src/server/authserver/Server/AuthSocket.cpp b/src/server/authserver/Server/AuthSocket.cpp index 8ab4ab8a1a2..b0bce520d4f 100644 --- a/src/server/authserver/Server/AuthSocket.cpp +++ b/src/server/authserver/Server/AuthSocket.cpp @@ -818,6 +818,28 @@ bool AuthSocket::_HandleReconnectProof() } } +ACE_INET_Addr const& AuthSocket::GetAddressForClient(Realm const& realm, ACE_INET_Addr const& clientAddr) +{ + // Attempt to send best address for client + if (clientAddr.is_loopback()) + { + // Try guessing if realm is also connected locally + if (realm.LocalAddress.is_loopback() || realm.ExternalAddress.is_loopback()) + return clientAddr; + + // Assume that user connecting from the machine that authserver is located on + // has all realms available in his local network + return realm.LocalAddress; + } + + // Check if connecting client is in the same network + if (IsIPAddrInNetwork(realm.LocalAddress, clientAddr, realm.LocalSubnetMask)) + return realm.LocalAddress; + + // Return external IP + return realm.ExternalAddress; +} + // Realm List command handler bool AuthSocket::_HandleRealmList() { @@ -845,6 +867,9 @@ bool AuthSocket::_HandleRealmList() // Update realm list if need sRealmList->UpdateIfNeed(); + ACE_INET_Addr clientAddr; + socket().peer().get_remote_addr(clientAddr); + // Circle through realms in the RealmList and construct the return packet (including # of user characters in each realm) ByteBuffer pkt; @@ -876,6 +901,9 @@ bool AuthSocket::_HandleRealmList() name = ss.str(); } + // We don't need the port number from which client connects with but the realm's port + clientAddr.set_port_number(i->second.ExternalAddress.get_port_number()); + uint8 lock = (i->second.allowedSecurityLevel > _accountSecurityLevel) ? 1 : 0; uint8 AmountOfCharacters = 0; @@ -891,7 +919,7 @@ bool AuthSocket::_HandleRealmList() pkt << lock; // if 1, then realm locked pkt << uint8(flag); // RealmFlags pkt << name; - pkt << i->second.address; + pkt << GetAddressString(GetAddressForClient(i->second, clientAddr)); pkt << i->second.populationLevel; pkt << AmountOfCharacters; pkt << i->second.timezone; // realm category diff --git a/src/server/authserver/Server/AuthSocket.h b/src/server/authserver/Server/AuthSocket.h index 87fd092381e..6c13f85a022 100644 --- a/src/server/authserver/Server/AuthSocket.h +++ b/src/server/authserver/Server/AuthSocket.h @@ -23,6 +23,9 @@ #include "BigNumber.h" #include "RealmSocket.h" +class ACE_INET_Addr; +struct Realm; + // Handle login commands class AuthSocket: public RealmSocket::Session { @@ -36,6 +39,8 @@ public: virtual void OnAccept(void); virtual void OnClose(void); + static ACE_INET_Addr const& GetAddressForClient(Realm const& realm, ACE_INET_Addr const& clientAddr); + bool _HandleLogonChallenge(); bool _HandleLogonProof(); bool _HandleReconnectChallenge(); diff --git a/src/server/shared/Database/Implementation/LoginDatabase.cpp b/src/server/shared/Database/Implementation/LoginDatabase.cpp index 70d509af6fe..3fc6649bd4d 100644 --- a/src/server/shared/Database/Implementation/LoginDatabase.cpp +++ b/src/server/shared/Database/Implementation/LoginDatabase.cpp @@ -22,7 +22,7 @@ void LoginDatabaseConnection::DoPrepareStatements() if (!m_reconnecting) m_stmts.resize(MAX_LOGINDATABASE_STATEMENTS); - PrepareStatement(LOGIN_SEL_REALMLIST, "SELECT id, name, address, port, icon, flag, timezone, allowedSecurityLevel, population, gamebuild FROM realmlist WHERE flag <> 3 ORDER BY name", CONNECTION_SYNCH); + PrepareStatement(LOGIN_SEL_REALMLIST, "SELECT id, name, address, localAddress, localSubnetMask, port, icon, flag, timezone, allowedSecurityLevel, population, gamebuild FROM realmlist WHERE flag <> 3 ORDER BY name", CONNECTION_SYNCH); PrepareStatement(LOGIN_DEL_EXPIRED_IP_BANS, "DELETE FROM ip_banned WHERE unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC); PrepareStatement(LOGIN_UPD_EXPIRED_ACCOUNT_BANS, "UPDATE account_banned SET active = 0 WHERE active = 1 AND unbandate<>bandate AND unbandate<=UNIX_TIMESTAMP()", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_IP_BANNED, "SELECT * FROM ip_banned WHERE ip = ?", CONNECTION_SYNCH); diff --git a/src/server/shared/Utilities/Util.cpp b/src/server/shared/Utilities/Util.cpp index 0d9314c48a3..1bba3c2db09 100644 --- a/src/server/shared/Utilities/Util.cpp +++ b/src/server/shared/Utilities/Util.cpp @@ -22,7 +22,6 @@ #include "SFMT.h" #include "Errors.h" // for ASSERT #include -#include typedef ACE_TSS SFMTRandTSS; static SFMTRandTSS sfmtRand; @@ -239,6 +238,21 @@ bool IsIPAddress(char const* ipaddress) return inet_addr(ipaddress) != INADDR_NONE; } +std::string GetAddressString(ACE_INET_Addr const& addr) +{ + char buf[ACE_MAX_FULLY_QUALIFIED_NAME_LEN + 16]; + addr.addr_to_string(buf, ACE_MAX_FULLY_QUALIFIED_NAME_LEN + 16); + return buf; +} + +bool IsIPAddrInNetwork(ACE_INET_Addr const& net, ACE_INET_Addr const& addr, ACE_INET_Addr const& subnetMask) +{ + uint32 mask = subnetMask.get_ip_address(); + if ((net.get_ip_address() & mask) == (addr.get_ip_address() & mask)) + return true; + return false; +} + /// create PID file uint32 CreatePIDFile(const std::string& filename) { diff --git a/src/server/shared/Utilities/Util.h b/src/server/shared/Utilities/Util.h index e7218d7ba72..a379bfd32fc 100644 --- a/src/server/shared/Utilities/Util.h +++ b/src/server/shared/Utilities/Util.h @@ -25,6 +25,7 @@ #include #include #include +#include // Searcher for map of structs template struct Finder @@ -343,6 +344,13 @@ void utf8printf(FILE* out, const char *str, ...); void vutf8printf(FILE* out, const char *str, va_list* ap); bool IsIPAddress(char const* ipaddress); + +/// Checks if address belongs to the a network with specified submask +bool IsIPAddrInNetwork(ACE_INET_Addr const& net, ACE_INET_Addr const& addr, ACE_INET_Addr const& subnetMask); + +/// Transforms ACE_INET_Addr address into string format "dotted_ip:port" +std::string GetAddressString(ACE_INET_Addr const& addr); + uint32 CreatePIDFile(const std::string& filename); std::string ByteArrayToHexStr(uint8 const* bytes, uint32 length, bool reverse = false); From eba983c3a05b9e1e4ac58aa199fa424afe3b519d Mon Sep 17 00:00:00 2001 From: Expecto Date: Sun, 27 Jan 2013 17:37:20 +0100 Subject: [PATCH 201/204] DB/Creature: Add spawns for Unseen in Duskwood (thanks Expecto for that) DB/SAI: Add SAI for the Unseen's Aura (thx ZxBiohazardZx) --- .../world/2013_01_27_00_world_creature.sql | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 sql/updates/world/2013_01_27_00_world_creature.sql diff --git a/sql/updates/world/2013_01_27_00_world_creature.sql b/sql/updates/world/2013_01_27_00_world_creature.sql new file mode 100644 index 00000000000..11b1863b1e0 --- /dev/null +++ b/sql/updates/world/2013_01_27_00_world_creature.sql @@ -0,0 +1,34 @@ +DELETE FROM `smart_scripts` WHERE `entryorguid`=3094 AND sourcetype=0 +INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES +(3094,0,0,0,11,0,100,0,0,0,0,0,11,4986,2,0,0,0,0,1,0,0,0,0,0,0,0,'Unseen - On Respawn - Cast Unseen'); +-- Spawns for Unseen from Sniffs +DELETE FROM `creature` WHERE `id`=3094; +INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`,`npcflag`,`unit_flags`,`dynamicflags`) VALUES +(@GUID ,3094,0,1,1,0,0,-10694.8,345.662,44.4895,2.09338,300,0,0,2215,0,0,0,0,0), +(@GUID+01,3094,0,1,1,0,0,-10702.9,360.152,39.7227,4.04982,300,0,0,2215,0,0,0,0,0), +(@GUID+02,3094,0,1,1,0,0,-10707.4,314.112,40.1481,4.46221,300,0,0,2215,0,0,0,0,0), +(@GUID+03,3094,0,1,1,0,0,-11096.8,-960.518,65.3837,0.650136,300,0,0,2292,0,0,0,0,0), +(@GUID+04,3094,0,1,1,0,0,-10800.4,-655.44,41.3178,0.206699,300,0,0,2292,0,0,0,0,0), +(@GUID+05,3094,0,1,1,0,0,-10782.8,-635.116,42.1594,2.53933,300,0,0,2138,0,0,0,0,0), +(@GUID+06,3094,0,1,1,0,0,-10806.6,-616.345,40.0752,4.601,300,0,0,2138,0,0,0,0,0), +(@GUID+07,3094,0,1,1,0,0,-10837.1,-573.623,36.5976,6.13188,300,0,0,2292,0,0,0,0,0), +(@GUID+08,3094,0,1,1,0,0,-10823,-564.998,37.4107,1.71623,300,0,0,2138,0,0,0,0,0), +(@GUID+10,3094,0,1,1,0,0,-10924,446.213,46.2609,5.96992,300,0,0,2138,0,0,0,0,0), +(@GUID+11,3094,0,1,1,0,0,-10747.1,257.103,42.0292,1.18606,300,0,0,2215,0,0,0,0,0), +(@GUID+12,3094,0,1,1,0,0,-10759.6,343.884,38.3282,5.24523,300,0,0,2138,0,0,0,0,0), +(@GUID+13,3094,0,1,1,0,0,-10731.5,364.135,37.2459,4.06321,300,0,0,2138,0,0,0,0,0), +(@GUID+14,3094,0,1,1,0,0,-10701.5,347.995,39.7227,3.22043,300,0,0,2215,0,0,0,0,0), +(@GUID+15,3094,0,1,1,0,0,-10694.8,344.219,39.7097,2.706,300,0,0,2292,0,0,0,0,0), +(@GUID+16,3094,0,1,1,0,0,-10715.6,263.155,43.9056,2.1562,300,0,0,2292,0,0,0,0,0), +(@GUID+17,3094,0,1,1,0,0,-11091.8,-954.163,65.348,1.59261,300,0,0,2215,0,0,0,0,0), +(@GUID+18,3094,0,1,1,0,0,-10937.8,-936.044,76.878,1.18113,300,0,0,2292,0,0,0,0,0), +(@GUID+19,3094,0,1,1,0,0,-10964.1,-949.174,71.1917,2.08064,300,0,0,2292,0,0,0,0,0), +(@GUID+20,3094,0,1,1,0,0,-10934.9,-928.656,72.1262,3.08437,300,0,0,2215,0,0,0,0,0), +(@GUID+21,3094,0,1,1,0,0,-10929.6,-936.748,72.126,2.29741,300,0,0,2292,0,0,0,0,0), +(@GUID+22,3094,0,1,1,0,0,-10798.5,-635.655,41.1281,1.31804,300,0,0,2292,0,0,0,0,0), +(@GUID+23,3094,0,1,1,0,0,-10830.1,-616.585,38.7076,3.76848,300,0,0,2292,0,0,0,0,0), +(@GUID+24,3094,0,1,1,0,0,-10677.6,314.27,33.6022,1.28606,300,0,0,2292,0,0,0,0,0), +(@GUID+25,3094,0,1,1,0,0,-10684.3,314.55,40.7586,3.14353,300,0,0,2138,0,0,0,0,0), +(@GUID+26,3094,0,1,1,0,0,-10368.7,-1258.33,35.9096,0.448286,300,0,0,2138,0,0,0,0,0), +(@GUID+27,3094,0,1,1,0,0,-10347.4,-1287.13,35.3003,1.44967,300,0,0,2138,0,0,0,0,0), +(@GUID+28,3094,0,1,1,0,0,-10368.6,-1290.02,35.303,0.263719,300,0,0,2292,0,0,0,0,0); From b9cb92cc88c54fd93df403fef055fc53a58bd343 Mon Sep 17 00:00:00 2001 From: ZxBiohazardZx Date: Sun, 27 Jan 2013 17:41:26 +0100 Subject: [PATCH 202/204] Fix/Commit: push final file, not the workingcopy --- sql/updates/world/2013_01_27_00_world_creature.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/updates/world/2013_01_27_00_world_creature.sql b/sql/updates/world/2013_01_27_00_world_creature.sql index 11b1863b1e0..b61ca3250e4 100644 --- a/sql/updates/world/2013_01_27_00_world_creature.sql +++ b/sql/updates/world/2013_01_27_00_world_creature.sql @@ -1,7 +1,8 @@ -DELETE FROM `smart_scripts` WHERE `entryorguid`=3094 AND sourcetype=0 +DELETE FROM `smart_scripts` WHERE `entryorguid`=3094 AND sourcetype=0; INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES (3094,0,0,0,11,0,100,0,0,0,0,0,11,4986,2,0,0,0,0,1,0,0,0,0,0,0,0,'Unseen - On Respawn - Cast Unseen'); -- Spawns for Unseen from Sniffs +SET @GUID:=100173; DELETE FROM `creature` WHERE `id`=3094; INSERT INTO `creature` (`guid`,`id`,`map`,`spawnMask`,`phaseMask`,`modelid`,`equipment_id`,`position_x`,`position_y`,`position_z`,`orientation`,`spawntimesecs`,`spawndist`,`currentwaypoint`,`curhealth`,`curmana`,`MovementType`,`npcflag`,`unit_flags`,`dynamicflags`) VALUES (@GUID ,3094,0,1,1,0,0,-10694.8,345.662,44.4895,2.09338,300,0,0,2215,0,0,0,0,0), From 2aa554db34ac58a892059b0994a4b77f2b524c86 Mon Sep 17 00:00:00 2001 From: ZxBiohazardZx Date: Sun, 27 Jan 2013 17:42:44 +0100 Subject: [PATCH 203/204] Typo: i will now go hang myself..... _ typo --- sql/updates/world/2013_01_27_00_world_creature.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/updates/world/2013_01_27_00_world_creature.sql b/sql/updates/world/2013_01_27_00_world_creature.sql index b61ca3250e4..b60f8f60eba 100644 --- a/sql/updates/world/2013_01_27_00_world_creature.sql +++ b/sql/updates/world/2013_01_27_00_world_creature.sql @@ -1,4 +1,4 @@ -DELETE FROM `smart_scripts` WHERE `entryorguid`=3094 AND sourcetype=0; +DELETE FROM `smart_scripts` WHERE `entryorguid`=3094 AND source_type=0; INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES (3094,0,0,0,11,0,100,0,0,0,0,0,11,4986,2,0,0,0,0,1,0,0,0,0,0,0,0,'Unseen - On Respawn - Cast Unseen'); -- Spawns for Unseen from Sniffs From da080ac4e796be6039a239b7e035ead02e73b333 Mon Sep 17 00:00:00 2001 From: Kinzcool Date: Sun, 27 Jan 2013 13:10:14 -0500 Subject: [PATCH 204/204] DB/Gameobjects: Added an another missing Gameobject --- sql/updates/world/2013_01_27_01_world_gameobject_template.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 sql/updates/world/2013_01_27_01_world_gameobject_template.sql diff --git a/sql/updates/world/2013_01_27_01_world_gameobject_template.sql b/sql/updates/world/2013_01_27_01_world_gameobject_template.sql new file mode 100644 index 00000000000..49bbf3be56a --- /dev/null +++ b/sql/updates/world/2013_01_27_01_world_gameobject_template.sql @@ -0,0 +1,3 @@ +DELETE FROM `gameobject_template` WHERE `entry`=181073; +INSERT INTO `gameobject_template` (`entry`, `type`, `displayId`, `name`, `IconName`, `castBarCaption`, `unk1`, `data0`, `data1`, `data2`, `data3`, `data4`, `data5`, `data6`, `data7`, `data8`, `data9`, `data10`, `data11`, `data12`, `data13`, `data14`, `data15`, `data16`, `data17`, `data18`, `data19`, `data20`, `data21`, `data22`, `data23`, `size`, `questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `WDBVerified`) VALUES +(181073, 2, 216, 'Fragrant Cauldron', '', '', '', 93, 7244, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 15211);
  • tM_mWJp=3~7A0s)#s1Yk`~9Uzl@v?83LlJy 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 k`MPB&cA0e& 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 C-S#Bf~|$d&XP&#XY4 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 mf#WN1dTr;P?t0UxDK*aC`-hufYGm75HCneLl