Code:
#include "StdAfx.h"
static float GraveyardLocations[8][3] = {
{ 524.940552f, -29.997475f, 13.763262f },
{ 675.134583f, 372.005310f, 29.780762f },
{ 74.133293f, -496.987213f, 48.780075f },
{ -157.109634f, 29.199911f, 77.037743f },
{ -529.862905f, -406.268829f, 49.568283f },
{ -904.423279f, -523.532532f, 54.100018f },
{ -1092.466553f, -250.653748f, 57.653618f },
{ -1376.537720f, -359.065948f, 62.629608f },
};
static float NoBaseGYLocations[2][3] = {
{ -1434.332397f, -602.320313f, 51.260033f }, // HORDE
{ 819.385010f, -501.429993f, 100.657997f }, // ALLIANCE
};
static float BossLocations[2][4] = {
{ -851.126038f, -92.922371f, 68.520264f, 4.406091f }, //Boss Coldtooth
{ 879.288757f, -445.163849f, 54.586529f, 2.608057f }, //Boss Irondeep
};
static float ColdtoothUnitLocations[AV_UNIT_COLDTOOTH_TOTAL_COUNT][4] = {
{ -951.675842f, -199.578018f, 77.028801f, 3.752629f }, //Miner
{ -952.080688f, -152.753128f, 79.828300f, 2.126069f }, //Miner
{ -951.902344f, -149.673996f, 80.235268f, 3.038702f }, //Miner
{ -951.675293f, -146.869843f, 80.448769f, 3.380350f }, //Miner
{ -941.351746f, -141.993683f, 79.875656f, 6.042850f }, //Miner
{ -939.312073f, -139.836823f, 80.005623f, 5.396467f }, //Miner
{ -936.773132f, -137.766525f, 79.760925f, 5.396467f }, //Miner
{ -946.288330f, -129.965424f, 79.301697f, 3.401559f }, //Miner
{ -947.645325f, -127.650986f, 79.124908f, 3.401559f }, //Miner
{ -948.395630f, -124.830070f, 78.897942f, 3.401559f }, //Miner
{ -939.450378f, -113.941566f, 80.530563f, 0.647168f }, //Miner
{ -942.563354f, -111.199425f, 80.308113f, 1.080708f }, //Miner
{ -946.339844f, -104.364647f, 80.991714f, 0.529358f }, //Miner
{ -962.015869f, -103.636261f, 81.627930f, 3.579060f }, //Miner
{ -967.286804f, -99.641296f, 82.229469f, 4.294559f }, //Miner
{ -956.429504f, -113.172653f, 81.147011f, 3.980399f }, //Miner
{ -975.642822f, -89.479706f, 81.649696f, 3.839028f }, //Miner
{ -977.220825f, -87.596436f, 81.524452f, 3.839028f }, //Miner
{ -978.285828f, -84.838013f, 81.315697f, 3.169869f }, //Miner
{ -963.145264f, -82.794479f, 81.450142f, 0.062048f }, //Miner
{ -962.933533f, -80.558044f, 80.991341f, 0.062048f }, //Miner
{ -962.501831f, -77.671143f, 80.585243f, 6.134747f }, //Miner
{ -969.189392f, -42.836658f, 78.273773f, 0.530146f }, //Miner
{ -973.145081f, -35.458591f, 77.553101f, 1.357170f }, //Miner
{ -978.715088f, -34.342918f, 76.179718f, 2.615378f }, //Miner
{ -980.477112f, -43.087669f, 75.496330f, 3.981971f }, //Miner
{ -973.668762f, -51.881962f, 75.943909f, 3.666241f }, //Miner
{ -951.563477f, -51.574577f, 79.965797f, 2.039682f }, //Miner
{ -946.409302f, -49.394199f, 80.373817f, 1.804062f }, //Miner
{ -940.196533f, -48.512997f, 80.636269f, 1.566087f }, //Miner
{ -941.054871f, -66.651268f, 80.531807f, 4.727314f }, //Miner
{ -938.057739f, -67.179352f, 80.352676f, 4.464991f }, //Miner
{ -933.300171f, -68.380989f, 80.176819f, 4.464991f }, //Miner
{ -922.543518f, -42.684845f, 78.318298f, 2.302005f }, //Miner
{ -921.006165f, -40.296322f, 78.200775f, 2.302005f }, //Miner
{ -919.903687f, -37.224926f, 78.185249f, 2.985301f }, //Miner
{ -933.538696f, -52.357452f, 80.574409f, 3.750279f }, //Miner
{ -903.702576f, -67.439514f, 73.985336f, 6.159879f }, //Miner
{ -903.223633f, -65.517403f, 74.002869f, 5.543341f }, //Miner
{ -900.420715f, -62.918850f, 73.777565f, 5.149857f }, //Miner
{ -900.005554f, -47.842934f, 73.262802f, 1.393298f }, //Miner
{ -906.756042f, -46.873840f, 74.805428f, 1.239360f }, //Miner
{ -908.910828f, -50.408962f, 75.551620f, 3.281397f }, //Miner
{ -909.895203f, -46.991993f, 75.636612f, 3.830390f }, //Miner
{ -894.651367f, -62.006847f, 72.391701f, 4.926809f }, //Miner
{ -890.450195f, -62.775620f, 72.494492f, 4.190106f }, //Miner
{ -886.145020f, -64.520821f, 73.156242f, 4.190106f }, //Miner
{ -893.831543f, -46.611717f, 72.167099f, 1.655625f }, //Miner
{ -891.508911f, -46.414219f, 71.760437f, 1.655625f }, //Miner
{ -889.067749f, -46.206638f, 71.624710f, 1.655625f }, //Miner
{ -876.838074f, -39.552654f, 69.732674f, 2.562761f }, //Miner
{ -876.112671f, -36.463310f, 69.699844f, 2.621666f }, //Miner
{ -873.834595f, -33.527237f, 69.240646f, 2.386046f }, //Miner
{ -862.354309f, -31.546614f, 70.596893f, 5.727131f }, //Miner
{ -860.876343f, -29.168449f, 70.693466f, 5.727131f }, //Miner
{ -858.807678f, -26.088909f, 71.519844f, 4.941732f }, //Miner
{ -849.765137f, -27.043999f, 71.701225f, 5.405118f }, //Miner
{ -847.507874f, -26.440056f, 72.059647f, 5.598328f }, //Miner
{ -846.360291f, -23.020168f, 71.482582f, 6.187377f }, //Miner
{ -847.503418f, -0.391358f, 72.655296f, 0.948770f }, //Miner
{ -850.226257f, 2.370854f, 72.900925f, 0.948770f }, //Miner
{ -853.044189f, 1.826273f, 72.778107f, 1.926591f }, //Miner
{ -866.745911f, 1.214885f, 72.992172f, 2.492078f }, //Miner
{ -870.235168f, -1.040012f, 72.439056f, 2.633450f }, //Miner
{ -872.605530f, -4.298996f, 71.548927f, 2.924047f }, //Miner
{ -875.218262f, -14.314611f, 70.284790f, 3.257842f }, //Miner
{ -874.941711f, -17.633232f, 69.469109f, 3.595563f }, //Miner
{ -871.793030f, -20.205734f, 69.567261f, 4.051095f }, //Miner
{ -875.927917f, -36.316185f, 69.659538f, 2.790530f }, //Miner
{ -876.570679f, -38.071190f, 69.733459f, 2.790530f }, //Miner
{ -877.576904f, -40.818726f, 69.895706f, 2.790530f }, //Miner
{ -871.929749f, -67.391983f, 73.422104f, 3.685880f }, //Miner
{ -871.851257f, -70.984100f, 73.835640f, 3.513093f }, //Miner
{ -872.421692f, -76.168755f, 72.676704f, 3.418845f }, //Miner
{ -878.462219f, -95.941559f, 67.661888f, 3.098397f }, //Miner
{ -880.007996f, -99.432129f, 67.151543f, 3.302601f }, //Miner
{ -880.400818f, -102.871170f, 66.922821f, 3.506805f }, //Miner
{ -852.852234f, -119.321899f, 63.799610f, 5.403539f }, //Miner
{ -850.502747f, -118.311775f, 64.074539f, 5.395685f }, //Miner
{ -848.868774f, -116.981514f, 64.399925f, 5.395685f }, //Miner
{ -846.324585f, -111.461548f, 64.377922f, 5.937611f }, //Miner
{ -845.041748f, -109.264481f, 64.643875f, 5.980806f }, //Miner
{ -843.961975f, -105.802986f, 65.327461f, 5.980806f }, //Miner
{ -860.888306f, -81.022224f, 70.443695f, 0.176714f }, //Miner
{ -861.331055f, -77.904839f, 72.037476f, 5.920331f }, //Miner
{ -880.507874f, -129.602051f, 65.144028f, 3.364650f }, //Miner
{ -881.440491f, -127.750557f, 65.561348f, 3.364650f }, //Miner
{ -882.214722f, -124.337265f, 65.346344f, 3.364650f }, //Miner
{ -866.209229f, -129.007767f, 63.393639f, 6.247059f }, //Miner
{ -865.766785f, -131.931702f, 62.541473f, 0.038487f }, //Miner
{ -863.525513f, -135.519958f, 61.834606f, 0.768907f }, //Miner
{ -849.189026f, -151.947968f, 63.978973f, 4.559240f }, //Miner
{ -847.341919f, -152.233093f, 63.994961f, 4.559240f }, //Miner
{ -844.913696f, -152.607910f, 63.925678f, 4.559240f }, //Miner
{ -834.576355f, -160.021423f, 63.644650f, 4.512116f }, //Miner
{ -832.285095f, -160.486542f, 63.517120f, 4.512116f }, //Miner
{ -828.817627f, -161.468201f, 63.168392f, 4.236442f }, //Miner
{ -816.018494f, -157.201492f, 62.095287f, 0.070689f }, //Miner
{ -816.290894f, -153.354126f, 62.124077f, 0.070689f }, //Miner
{ -816.538086f, -149.862869f, 62.678532f, 0.070689f }, //Miner
{ -817.675049f, -132.850632f, 63.556915f, 1.174126f }, //Miner
{ -819.289185f, -132.174515f, 63.421944f, 1.174126f }, //Miner
{ -822.238525f, -131.490036f, 63.110744f, 1.986228f }, //Miner
{ -839.184021f, -130.540558f, 61.146633f, 2.187290f }, //Miner
{ -841.759827f, -132.365860f, 61.201546f, 2.187290f }, //Miner
{ -841.812744f, -135.274994f, 61.556576f, 2.762202f }, //Miner
{ -850.799927f, -138.354645f, 61.694237f, 1.598241f }, //Miner
{ -853.120422f, -138.198914f, 61.468708f, 1.362622f }, //Miner
{ -855.727112f, -137.564392f, 61.718861f, 0.916516f }, //Miner
{ -887.717102f, -148.663223f, 61.769455f, 1.606095f }, //Miner
{ -890.570007f, -148.149597f, 61.981949f, 1.606095f }, //Miner
{ -892.556763f, -148.219757f, 61.765549f, 1.606095f }, //Miner
{ -896.172363f, -158.005676f, 62.124187f, 4.586683f }, //Miner
{ -899.020996f, -158.229401f, 61.897179f, 4.586683f }, //Miner
{ -900.426453f, -159.219254f, 62.046333f, 4.586683f }, //Miner
{ -908.703674f, -149.506516f, 61.894531f, 1.418386f }, //Miner
{ -910.975891f, -148.599945f, 62.102985f, 1.022545f }, //Miner
{ -913.129517f, -146.813583f, 62.238613f, 0.824625f }, //Miner
{ -917.112366f, -158.553406f, 62.339466f, 4.135080f }, //Miner
{ -919.421631f, -156.446548f, 62.487144f, 3.821706f }, //Miner
{ -921.968567f, -154.386124f, 62.303658f, 4.032193f }, //Miner
{ -915.953735f, -139.270142f, 62.420422f, 0.188453f }, //Miner
{ -916.303894f, -137.434235f, 62.329872f, 0.188453f }, //Miner
{ -916.445740f, -135.231903f, 62.338181f, 6.236019f }, //Miner
{ -921.672668f, -125.395042f, 61.431656f, 1.963453f }, //Miner
{ -923.942688f, -126.335197f, 61.233959f, 1.963453f }, //Miner
{ -925.381287f, -127.703117f, 61.186684f, 2.331019f }, //Miner
{ -928.275879f, -136.706848f, 61.189629f, 3.577449f }, //Miner
{ -927.288818f, -138.826263f, 61.264538f, 3.577449f }, //Miner
{ -926.006226f, -141.580231f, 61.410606f, 3.577449f }, //Miner
{ -947.900024f, -181.600006f, 64.900002f, 4.000000f }, //Miner
{ -947.900024f, -181.600006f, 64.900002f, 4.000000f }, //Miner
{ -947.900024f, -181.600006f, 64.900002f, 4.000000f }, //Miner
{ -947.900024f, -181.600006f, 64.900002f, 4.000000f }, //Miner
{ -947.900024f, -181.600006f, 64.900002f, 4.000000f }, //Miner
{ -947.900024f, -181.600006f, 64.900002f, 4.000000f }, //Miner
{ -954.940735f, -183.659271f, 66.358818f, 2.504589f }, //Miner
{ -956.354553f, -185.188324f, 66.427483f, 2.111105f }, //Miner
{ -958.257446f, -186.329773f, 66.543785f, 1.586459f }, //Miner
{ -958.708862f, -197.804047f, 67.742027f, 5.108968f }, //Miner
{ -960.068970f, -199.551071f, 68.423386f, 5.658747f }, //Miner
{ -962.109070f, -201.749725f, 69.102318f, 5.343017f }, //Miner
{ -964.687744f, -210.391998f, 69.157356f, 4.480697f }, //Guard
{ -970.826416f, -204.880524f, 68.787331f, 4.963715f }, //Guard
{ -934.516357f, -208.744507f, 73.824043f, 5.658792f }, //Guard
{ -931.020081f, -202.420807f, 73.625000f, 5.344633f }, //Guard
{ -951.010071f, -224.439911f, 77.011658f, 5.028900f }, //Guard
{ -960.099609f, -221.510406f, 77.010292f, 3.670161f }, //Guard
{ -955.854736f, -169.482758f, 77.939476f, 5.260593f }, //Guard
{ -945.031067f, -115.147591f, 79.202194f, 4.915022f }, //Guard
{ -968.452698f, -76.545227f, 79.946907f, 4.789365f }, //Guard
{ -974.368347f, -40.801674f, 76.524323f, 5.193847f }, //Guard
{ -927.272400f, -59.863743f, 80.752541f, 6.175591f }, //Guard
{ -915.575439f, -149.946091f, 76.945404f, 4.024389f }, //Guard
{ -901.613770f, -133.054199f, 74.799812f, 1.310053f }, //Guard
{ -888.369751f, -111.089371f, 76.204712f, 1.859046f }, //Guard
{ -853.225403f, -92.037659f, 68.575348f, 4.410018f }, //Guard
{ -849.018433f, -93.209724f, 68.540672f, 4.303204f }, //Guard
};
static float IrondeepUnitLocations[AV_UNIT_IRONDEEP_TOTAL_COUNT][4] = {
{ 795.778687f, -337.416473f, 63.109859f, 4.098117f }, //Miner
{ 796.965515f, -339.002625f, 63.211918f, 3.783957f }, //Miner
{ 798.548157f, -339.996796f, 63.154366f, 4.151524f }, //Miner
{ 806.339417f, -335.301117f, 64.789520f, 2.252432f }, //Miner
{ 807.616760f, -332.390015f, 65.419891f, 2.562664f }, //Miner
{ 808.422668f, -329.791016f, 66.136688f, 2.562664f }, //Miner
{ 818.674805f, -338.113251f, 67.147720f, 5.278572f }, //Miner
{ 821.195679f, -336.643921f, 66.838531f, 4.899225f }, //Miner
{ 824.211609f, -336.995178f, 66.861832f, 4.270121f }, //Miner
{ 834.871887f, -327.330292f, 65.587944f, 0.816725f }, //Miner
{ 836.239319f, -328.614624f, 66.289398f, 0.816725f }, //Miner
{ 837.980408f, -330.170349f, 66.885880f, 1.118318f }, //Miner
{ 834.432800f, -343.528198f, 65.734352f, 4.013298f }, //Miner
{ 835.595459f, -344.505707f, 65.919281f, 4.013298f }, //Miner
{ 837.567200f, -346.163422f, 66.185410f, 4.013298f }, //Miner
{ 850.104370f, -337.986328f, 66.953659f, 0.753894f }, //Miner
{ 851.867615f, -339.864319f, 66.490509f, 0.753894f }, //Miner
{ 855.413147f, -342.139069f, 66.939774f, 1.593485f }, //Miner
{ 861.322632f, -352.821014f, 65.016502f, 4.602350f }, //Miner
{ 863.369873f, -353.979401f, 65.060905f, 4.284264f }, //Miner
{ 866.013245f, -356.347595f, 65.720367f, 4.284264f }, //Miner
{ 866.618591f, -342.024536f, 65.274963f, 1.664958f }, //Miner
{ 869.531616f, -341.749420f, 65.688576f, 1.664958f }, //Miner
{ 873.915771f, -341.751007f, 65.712349f, 3.264029f }, //Miner
{ 889.977905f, -348.592224f, 67.634140f, 5.391674f }, //Miner
{ 891.889526f, -347.048645f, 67.995659f, 5.391674f }, //Miner
{ 893.467957f, -344.872894f, 68.564789f, 5.655567f }, //Miner
{ 892.862366f, -329.453400f, 68.417000f, 1.990897f }, //Miner
{ 894.894836f, -328.545532f, 68.057640f, 1.990897f }, //Miner
{ 897.430725f, -326.784485f, 67.727570f, 1.983043f }, //Miner
{ 906.295105f, -335.488708f, 67.696983f, 4.865458f }, //Miner
{ 908.728638f, -335.629120f, 67.576355f, 4.549727f }, //Miner
{ 911.836609f, -336.478333f, 67.043564f, 4.128754f }, //Miner
{ 923.854370f, -328.780579f, 65.924301f, 0.848145f }, //Miner
{ 925.489563f, -329.817047f, 65.825737f, 1.091619f }, //Miner
{ 928.806580f, -331.540436f, 65.946632f, 1.091619f }, //Miner
{ 922.238037f, -343.892883f, 67.033981f, 3.604893f }, //Miner
{ 923.058777f, -346.646637f, 67.042526f, 3.093599f }, //Miner
{ 922.912720f, -349.688141f, 67.068306f, 3.093599f }, //Miner
{ 952.045715f, -338.279419f, 64.936005f, 5.701910f }, //Miner
{ 955.489014f, -337.235901f, 64.757027f, 6.035701f }, //Miner
{ 959.662354f, -333.351135f, 63.116718f, 0.117724f }, //Miner
{ 959.906677f, -328.710815f, 62.183804f, 1.609981f }, //Miner
{ 956.798584f, -326.650299f, 61.648365f, 1.782768f }, //Miner
{ 952.313416f, -325.108459f, 61.933151f, 2.489627f }, //Miner
{ 949.845764f, -326.124542f, 61.953075f, 2.560313f }, //Miner
{ 944.233582f, -330.781738f, 61.917015f, 2.273642f }, //Miner
{ 937.447205f, -331.873322f, 63.037842f, 2.269715f }, //Miner
{ 939.557129f, -352.795715f, 66.257820f, 0.079239f }, //Miner
{ 939.834167f, -356.284729f, 66.248787f, 0.079239f }, //Miner
{ 939.870972f, -360.018555f, 66.838615f, 6.046694f }, //Miner
{ 935.814636f, -365.786987f, 66.708900f, 2.867404f }, //Miner
{ 918.401123f, -365.904724f, 66.754158f, 3.441015f }, //Miner
{ 917.482788f, -367.562103f, 66.573593f, 2.812696f }, //Miner
{ 916.294067f, -370.342224f, 66.241653f, 2.315539f }, //Miner
{ 913.957031f, -377.341858f, 65.658813f, 3.130783f }, //Miner
{ 913.749695f, -379.537048f, 64.887520f, 2.566867f }, //Miner
{ 926.178650f, -385.042816f, 61.962608f, 5.738306f }, //Miner
{ 934.418457f, -383.875122f, 63.112804f, 4.242126f }, //Miner
{ 935.730286f, -393.691193f, 62.064182f, 2.549592f }, //Miner
{ 930.338257f, -408.065369f, 57.893726f, 5.856113f }, //Miner
{ 929.389221f, -414.967438f, 56.550648f, 0.477706f }, //Miner
{ 930.312073f, -423.126526f, 57.212303f, 0.393668f }, //Miner
{ 916.621948f, -410.676300f, 58.109821f, 2.698812f }, //Miner
{ 914.918396f, -414.268860f, 58.623257f, 2.698812f }, //Miner
{ 912.663025f, -419.025208f, 58.490059f, 2.698812f }, //Miner
{ 919.640198f, -439.892792f, 57.939793f, 5.392725f }, //Miner
{ 922.107727f, -438.394073f, 57.457420f, 5.039296f }, //Miner
{ 924.259277f, -437.951660f, 57.168430f, 4.290811f }, //Miner
{ 900.245667f, -445.623108f, 60.520943f, 3.287857f }, //Miner
{ 900.484375f, -447.243622f, 60.244408f, 3.287857f }, //Miner
{ 900.756775f, -449.092651f, 59.936108f, 3.287857f }, //Miner
{ 899.722290f, -437.533661f, 58.587357f, 4.073253f }, //Miner
{ 896.590271f, -437.705261f, 58.603458f, 4.403120f }, //Miner
{ 893.325928f, -437.511597f, 56.872299f, 5.592995f }, //Miner
{ 896.400879f, -426.651550f, 57.069031f, 1.057321f }, //Miner
{ 898.878052f, -427.612335f, 58.270638f, 1.568615f }, //Miner
{ 902.378052f, -427.619965f, 59.459190f, 1.568615f }, //Miner
{ 908.706360f, -426.086548f, 60.492981f, 1.799522f }, //Miner
{ 886.602112f, -422.961334f, 54.056126f, 1.214400f }, //Miner
{ 882.230103f, -419.770233f, 53.679230f, 0.864898f }, //Miner
{ 880.304199f, -414.753967f, 53.953907f, 1.701347f }, //Miner
{ 876.833984f, -415.209595f, 52.894726f, 1.701347f }, //Miner
{ 876.833984f, -415.209595f, 52.894726f, 1.701347f }, //Miner
{ 866.533020f, -414.723267f, 52.157070f, 1.516779f }, //Miner
{ 863.353271f, -411.352997f, 53.331261f, 1.461801f }, //Miner
{ 858.187317f, -409.434998f, 51.755375f, 1.434312f }, //Miner
{ 854.293945f, -424.926605f, 51.017048f, 2.881016f }, //Miner
{ 852.456055f, -431.872711f, 50.814281f, 3.195175f }, //Miner
{ 852.997192f, -437.929108f, 49.922672f, 3.517188f }, //Miner
{ 854.109497f, -440.749908f, 50.342648f, 3.517188f }, //Miner
{ 854.109497f, -440.749908f, 50.342648f, 3.517188f }, //Miner
{ 848.495300f, -422.403259f, 49.961353f, 4.856290f }, //Miner
{ 848.495300f, -422.403259f, 49.961353f, 4.856290f }, //Miner
{ 846.070618f, -422.754608f, 49.366646f, 4.856290f }, //Miner
{ 841.791199f, -409.520752f, 48.806660f, 1.412318f }, //Miner
{ 839.850952f, -407.821106f, 49.250793f, 1.412318f }, //Miner
{ 834.691284f, -405.236725f, 47.788029f, 0.269564f }, //Miner
{ 810.726501f, -446.340729f, 50.199177f, 2.769485f }, //Miner
{ 807.585754f, -453.030334f, 49.437901f, 3.118987f }, //Miner
{ 808.218872f, -462.920135f, 48.181877f, 4.367769f }, //Miner
{ 811.179688f, -465.924713f, 47.745724f, 4.992159f }, //Miner
{ 819.611450f, -467.756866f, 49.039833f, 5.431981f }, //Miner
{ 827.767578f, -467.455505f, 49.365261f, 5.251341f }, //Miner
{ 834.376221f, -467.699219f, 49.459999f, 6.095642f }, //Miner
{ 836.891296f, -461.561066f, 48.747860f, 0.817766f }, //Miner
{ 839.646240f, -451.907135f, 46.964058f, 0.601781f }, //Miner
{ 837.802307f, -444.856445f, 47.551949f, 1.312567f }, //Miner
{ 819.448853f, -409.484375f, 50.839893f, 2.668165f }, //Miner
{ 820.725464f, -406.992340f, 50.378193f, 2.668165f }, //Miner
{ 819.845825f, -404.201752f, 50.334427f, 2.656384f }, //Miner
{ 832.448303f, -399.050934f, 48.191502f, 0.194161f }, //Miner
{ 831.681152f, -395.149658f, 47.914112f, 0.194161f }, //Miner
{ 832.268616f, -392.730255f, 47.645870f, 5.612622f }, //Miner
{ 822.494202f, -380.216095f, 48.098320f, 2.688586f }, //Miner
{ 823.312195f, -378.535614f, 47.705006f, 2.412911f }, //Miner
{ 823.093811f, -374.689148f, 47.959724f, 2.408984f }, //Miner
{ 838.309814f, -375.314362f, 49.128494f, 5.817615f }, //Miner
{ 842.425720f, -373.230774f, 49.501534f, 5.224641f }, //Miner
{ 847.524292f, -372.875031f, 48.606274f, 4.957607f }, //Miner
{ 860.806152f, -369.117981f, 47.788784f, 0.366950f }, //Miner
{ 860.806152f, -369.117981f, 47.788784f, 0.366950f }, //Miner
{ 859.967346f, -366.935638f, 47.344460f, 0.366950f }, //Miner
{ 849.999878f, -361.463379f, 47.246853f, 1.973089f }, //Miner
{ 843.781067f, -362.261688f, 47.572025f, 1.816010f }, //Miner
{ 830.215027f, -356.172668f, 48.101543f, 3.131552f }, //Miner
{ 828.171997f, -352.700287f, 47.669525f, 3.591010f }, //Miner
{ 825.865051f, -350.436249f, 47.461494f, 3.575302f }, //Miner
{ 823.757507f, -338.478088f, 49.853256f, 1.203399f }, //Miner
{ 823.757507f, -338.478088f, 49.853256f, 1.203399f }, //Miner
{ 818.077454f, -335.682556f, 50.687675f, 0.574295f }, //Miner
{ 802.987000f, -330.423981f, 52.823833f, 3.594937f }, //Miner
{ 801.963013f, -328.322144f, 52.808239f, 3.598864f }, //Miner
{ 799.328064f, -326.902252f, 53.391006f, 3.598864f }, //Miner
{ 794.793457f, -318.646576f, 54.188965f, 3.465347f }, //Miner
{ 793.931335f, -317.618988f, 54.660892f, 3.496763f }, //Miner
{ 793.242432f, -315.761627f, 55.164253f, 3.496763f }, //Miner
{ 797.033020f, -312.779175f, 54.494480f, 0.535811f }, //Miner
{ 797.033020f, -312.779175f, 54.494480f, 0.535811f }, //Miner
{ 799.543457f, -315.695160f, 53.666317f, 0.582934f }, //Miner
{ 778.884033f, -339.692444f, 61.354012f, 3.596509f }, //Guard
{ 787.545471f, -345.497253f, 61.465565f, 3.671124f }, //Guard
{ 771.820251f, -314.374969f, 63.106781f, 2.686234f }, //Guard
{ 768.476990f, -321.202362f, 63.106781f, 2.686234f }, //Guard
{ 785.752563f, -310.196381f, 54.467216f, 2.827609f }, //Guard
{ 792.877991f, -305.252655f, 56.114258f, 3.265075f }, //Guard
{ 814.842957f, -337.282867f, 49.765671f, 2.408101f }, //Guard
{ 836.224365f, -367.158661f, 48.164394f, 4.410869f }, //Guard
{ 825.530823f, -393.731567f, 47.822716f, 4.403016f }, //Guard
{ 834.866333f, -416.613831f, 47.376114f, 5.783746f }, //Guard
{ 855.768677f, -419.910492f, 50.634483f, 6.019365f }, //Guard
{ 876.513000f, -424.025146f, 52.111725f, 0.589907f }, //Guard
{ 900.244629f, -433.311676f, 58.239071f, 6.169377f }, //Guard
{ 907.290039f, -427.767975f, 60.045856f, 0.552995f }, //Guard
{ 903.226379f, -441.218140f, 58.988651f, 5.985586f }, //Guard
{ 926.036499f, -414.364929f, 56.116699f, 1.730298f }, //Guard
{ 919.213135f, -392.282928f, 60.595650f, 1.690243f }, //Guard
{ 882.927368f, -409.910034f, 62.038197f, 1.461692f }, //Guard
{ 879.448181f, -409.528931f, 61.610828f, 1.461692f }, //Guard
{ 871.700684f, -407.939117f, 62.273865f, 1.266128f }, //Guard
{ 878.277649f, -446.875549f, 54.675594f, 2.608057f }, //Guard
{ 880.655762f, -442.849457f, 54.662846f, 2.608057f }, //Guard
};
AlteracValley::AlteracValley(MapMgr * mgr, uint32 id, uint32 lgroup, uint32 t) : CBattleground(mgr, id, lgroup, t)
{
//SET banner, object neutralizing here
//m_scores[0] = m_scores[1] = 0;
}
AlteracValley::~AlteracValley()
{
// // gates are always spawned, so mapmgr will clean them up
// //for(uint32 i = 0; i < 6; ++i)
// //{
// // buffs may not be spawned, so delete them if they're not
// //if(m_buffs[i] && m_buffs[i]->IsInWorld()==false)
// //delete m_buffs[i];
// //}
// }
}
void AlteracValley::CaptureMineKill(Player * plr, Unit * pVictim, uint32 Team, uint32 mine)
{
SetWorldState(m_controlpoint[mine], Team);
m_capturedBases[Team]++;
if (mine = AV_CONTROL_POINT_MINE_KOBOLT)
{
for (int x = 0; x < AV_UNIT_COLDTOOTH_TOTAL_COUNT; x++)
{
DespawnCreature(m_unitColdtoothMine[x], false);
}
}
if (mine = AV_CONTROL_POINT_MINE_TROG)
{
for (int x = 0; x < AV_UNIT_IRONDEEP_TOTAL_COUNT; x++)
{
DespawnCreature(m_unitIrondeepMine[x], false);
}
}
if(Team = 0)
{
m_capturedBases[1] - 1;
//We need to get coordinates of the boss mob
//SpawnCreature(x, y, z, o, id);
}
else if(Team = 1)
{
m_capturedBases[0] - 1;
//We need to get coordinates of the boss mob
//SpawnCreature(x, y, z, o, id);
}
else
{
//Log.Notice("Wrong team id %u in Alterac Valley", Team);
}
}
void AlteracValley::UpdateReinforcementCount()
{
m_scores[0] + m_capturedBases[0];
m_scores[1] + m_capturedBases[1];
// SendChatMessage(CHAT_MSG_BG_EVENT_ALLIANCE,plr->GetGUID(), "The Alliance reinforcement count has increased by %u.", m_capturedBases[1]);
// SendChatMessage(CHAT_MSG_BG_EVENT_HORDE,plr->GetGUID(), "The Alliance reinforcement count has increased by %u.", m_capturedBases[1]);
// SendChatMessage(CHAT_MSG_BG_EVENT_ALLIANCE,plr->GetGUID(), "The Horde reinforcement count has increased by %u.", m_capturedBases[0]);
// SendChatMessage(CHAT_MSG_BG_EVENT_HORDE,plr->GetGUID(), "The Horde reinforcement count has increased by %u.", m_capturedBases[0]);
}
void AlteracValley::SpawnControlPoint(uint32 Id, uint32 Type, float x, float y, float z, float o)
{
// TODO spawn correct gameobjects on correct locations
// GameObjectInfo * gi, * gi_aura;
// gi = GameObjectNameStorage.LookupEntry(ControlPointGoIds[Id][Type]);
// if(gi == NULL)
// return;
//
// gi_aura = gi->sound3 ? GameObjectNameStorage.LookupEntry(gi->sound3) : NULL;
//
// if(m_controlPoints[Id] == NULL)
// {
// m_controlPoints[Id] = SpawnGameObject(gi->ID, m_mapMgr->GetMapId(), x, y, z, o, 0, 35, 1.0f);
//
// m_controlPoints[Id]->SetFloatValue(GAMEOBJECT_ROTATION_02, ControlPointRotations[Id][0]);
// m_controlPoints[Id]->SetFloatValue(GAMEOBJECT_ROTATION_03, ControlPointRotations[Id][1]);
// m_controlPoints[Id]->SetUInt32Value(GAMEOBJECT_STATE, 1);
// m_controlPoints[Id]->SetUInt32Value(GAMEOBJECT_TYPE_ID, gi->Type);
// m_controlPoints[Id]->SetUInt32Value(GAMEOBJECT_ANIMPROGRESS, 100);
// m_controlPoints[Id]->SetUInt32Value(GAMEOBJECT_DYN_FLAGS, 1);
// m_controlPoints[Id]->SetUInt32Value(GAMEOBJECT_DISPLAYID, gi->DisplayID);
//
// switch(Type)
// {
// case AV_SPAWN_TYPE_ALLIANCE_ASSAULT:
// case AV_SPAWN_TYPE_ALLIANCE_CONTROLLED:
// m_controlPoints[Id]->SetUInt32Value(GAMEOBJECT_FACTION, 2);
// break;
//
// case AV_SPAWN_TYPE_HORDE_ASSAULT:
// case AV_SPAWN_TYPE_HORDE_CONTROLLED:
// m_controlPoints[Id]->SetUInt32Value(GAMEOBJECT_FACTION, 1);
// break;
//
// default:
// m_controlPoints[Id]->SetUInt32Value(GAMEOBJECT_FACTION, 35); // neutral
// break;
// }
//
// m_controlPoints[Id]->bannerslot = Id;
// m_controlPoints[Id]->PushToWorld(m_mapMgr);
// }
// else
// {
// if(m_controlPoints[Id]->IsInWorld())
// m_controlPoints[Id]->RemoveFromWorld(false);
//
// // assign it a new guid (client needs this to see the entry change?)
// m_controlPoints[Id]->SetNewGuid(m_mapMgr->GenerateGameobjectGuid());
// m_controlPoints[Id]->SetUInt32Value(OBJECT_FIELD_ENTRY, gi->ID);
// m_controlPoints[Id]->SetUInt32Value(GAMEOBJECT_DISPLAYID, gi->DisplayID);
// m_controlPoints[Id]->SetUInt32Value(GAMEOBJECT_TYPE_ID, gi->Type);
//
// switch(Type)
// {
// case AV_SPAWN_TYPE_ALLIANCE_ASSAULT:
// case AV_SPAWN_TYPE_ALLIANCE_CONTROLLED:
// m_controlPoints[Id]->SetUInt32Value(GAMEOBJECT_FACTION, 2);
// break;
//
// case AV_SPAWN_TYPE_HORDE_ASSAULT:
// case AV_SPAWN_TYPE_HORDE_CONTROLLED:
// m_controlPoints[Id]->SetUInt32Value(GAMEOBJECT_FACTION, 1);
// break;
//
// default:
// m_controlPoints[Id]->SetUInt32Value(GAMEOBJECT_FACTION, 35); // neutral
// break;
// }
//
// m_controlPoints[Id]->SetInfo(gi);
// m_controlPoints[Id]->PushToWorld(m_mapMgr);
// }
//
// if(gi_aura==NULL)
// {
// // remove it if it exists
// if(m_controlPointAuras[Id]!=NULL && m_controlPointAuras[Id]->IsInWorld())
// m_controlPointAuras[Id]->RemoveFromWorld(false);
//
// return;
// }
//
// if(m_controlPointAuras[Id] == NULL)
// {
// m_controlPointAuras[Id] = SpawnGameObject(gi_aura->ID, m_mapMgr->GetMapId(), ControlPointCoordinates[Id][0], ControlPointCoordinates[Id][1],
// ControlPointCoordinates[Id][2], ControlPointCoordinates[Id][3], 0, 35, 1.0f);
//
// m_controlPointAuras[Id]->SetFloatValue(GAMEOBJECT_ROTATION_02, ControlPointRotations[Id][0]);
// m_controlPointAuras[Id]->SetFloatValue(GAMEOBJECT_ROTATION_03, ControlPointRotations[Id][1]);
// m_controlPointAuras[Id]->SetUInt32Value(GAMEOBJECT_STATE, 1);
// m_controlPointAuras[Id]->SetUInt32Value(GAMEOBJECT_TYPE_ID, 6);
// m_controlPointAuras[Id]->SetUInt32Value(GAMEOBJECT_ANIMPROGRESS, 100);
// m_controlPointAuras[Id]->bannerauraslot = Id;
// m_controlPointAuras[Id]->PushToWorld(m_mapMgr);
// }
// else
// {
// if(m_controlPointAuras[Id]->IsInWorld())
// m_controlPointAuras[Id]->RemoveFromWorld(false);
//
// // re-spawn the aura
// m_controlPointAuras[Id]->SetNewGuid(m_mapMgr->GenerateGameobjectGuid());
// m_controlPointAuras[Id]->SetUInt32Value(OBJECT_FIELD_ENTRY, gi_aura->ID);
// m_controlPointAuras[Id]->SetUInt32Value(GAMEOBJECT_DISPLAYID, gi_aura->DisplayID);
// m_controlPointAuras[Id]->SetInfo(gi_aura);
// m_controlPointAuras[Id]->PushToWorld(m_mapMgr);
// }
}
void AlteracValley::CaptureControlPoint(uint32 Id, uint32 Team)
{
// if(m_basesOwnedBy[Id] != -1)
// {
// // there is a very slim chance of this happening, 2 teams evnets could clash..
// // just in case...
// return;
// }
//
// // anticheat, not really necessary because this is a server method but anyway
// if(m_basesAssaultedBy[Id] != (int32)Team)
// return;
//
// m_basesOwnedBy[Id] = Team;
// m_basesAssaultedBy[Id]=-1;
//
// //remove the other spirit guide (if it exists)
// if(m_spiritGuides[Id] != NULL)
// {
// RemoveSpiritGuide(m_spiritGuides[Id]);
// m_spiritGuides[Id]->Despawn(0,0);
// }
//
// // spawn the spirit guide for our faction
// m_spiritGuides[Id] = SpawnSpiritGuide(GraveyardLocations[Id][0], GraveyardLocations[Id][1], GraveyardLocations[Id][2], 0.0f, Team);
// AddSpiritGuide(m_spiritGuides[Id]);
//
// // send the chat message/sounds out
// PlaySoundToAll(Team ? SOUND_HORDE_CAPTURE : SOUND_ALLIANCE_CAPTURE);
// SendChatMessage(Team ? CHAT_MSG_BG_EVENT_HORDE : CHAT_MSG_BG_EVENT_ALLIANCE, 0, "The %s has taken the %s!", Team ? "Horde" : "Alliance", ControlPointNames[Id]);
//
// // update the overhead display on the clients (world states)
// m_capturedBases[Team]++;
// //SetWorldState(Team ? AV_HORDE_CAPTUREBASE : AV_ALLIANCE_CAPTUREBASE, m_capturedBases[Team]);
//
// // respawn the control point with the correct aura
// SpawnControlPoint(Id, Team ? AV_SPAWN_TYPE_HORDE_CONTROLLED : AV_SPAWN_TYPE_ALLIANCE_CONTROLLED);
//
// // update the map
// //SetWorldState(AssaultFields[Id][Team], 0);
// //SetWorldState(OwnedFields[Id][Team], 1);
//
// // Reinforcement update event
// if(m_capturedBases[Team]==1)
// {
// //TODO, add the update reinforcement count here
// }
// else
// {
// // not first
// //TODO, add the update reinforcement count here
// }
}
void AlteracValley::AssaultControlPoint(Player * pPlayer, uint32 Id)
{
// #ifdef ANTI_CHEAT
// if(!m_started)
// {
// SendChatMessage(CHAT_MSG_BG_EVENT_NEUTRAL, pPlayer->GetGUID(), "%s has been removed from the game for cheating.", pPlayer->GetName());
// pPlayer->SoftDisconnect();
// return;
// }
// #endif
//
// uint32 Team = pPlayer->m_bgTeam;
// uint32 Owner;
//
// if(m_basesOwnedBy[Id]==-1 && m_basesAssaultedBy[Id]==-1)
// {
// // omgwtfbbq our flag is a virgin?
// SetWorldState(NeutralFields[Id], 0);
// }
//
// if(m_basesOwnedBy[Id] != -1)
// {
// Owner = m_basesOwnedBy[Id];
//
// // set it to uncontrolled for now
// m_basesOwnedBy[Id] = -1;
//
// // detract one from the teams controlled points
// m_capturedBases[Owner] -= 1;
// //SetWorldState(Owner ? AV_HORDE_CAPTUREBASE : AV_ALLIANCE_CAPTUREBASE, m_capturedBases[Owner]);
//
// // reset the world states
// //SetWorldState(OwnedFields[Id][Owner], 0);
//
// // modify the resource update time period
// if(m_capturedBases[Owner]==0)
// //this->Put code for updating reinforcements
// //else
// //this->Put code for updating reinforcements
// }
//
// if(m_basesAssaultedBy[Id] != -1)
// {
// Owner = m_basesAssaultedBy[Id];
//
// m_basesAssaultedBy[Id] = -1;
// //SetWorldState(AssaultFields[Id][Owner], 0);
//
// // make sure the event does not trigger
// sEventMgr.RemoveEvents(this, EVENT_AB_CAPTURE_CP_1 + Id);
//
// // no need to remove the spawn, SpawnControlPoint will do this.
// }
//
// m_basesAssaultedBy[Id] = Team;
//
// // spawn the new control point gameobject
// SpawnControlPoint(Id, Team ? AV_SPAWN_TYPE_HORDE_ASSAULT : AV_SPAWN_TYPE_ALLIANCE_ASSAULT);
//
// // send out the chat message and sound
// SendChatMessage(Team ? CHAT_MSG_BG_EVENT_HORDE : CHAT_MSG_BG_EVENT_ALLIANCE, pPlayer->GetGUID(), " claims the %s! If left unchallenged, the %s will control it in 1 minute!", ControlPointNames[Id],
// Team ? "Horde" : "Alliance");
//
// //NEED THE SOUND ID
// //PlaySoundToAll(Team ? SOUND:SOUND);
//
// // update the client's map with the new assaulting field
// SetWorldState(AssaultFields[Id][Team], 1);
//
// // create the 60 second event.
// sEventMgr.AddEvent(this, &AlteracValley::CaptureControlPoint, Id, Team, EVENT_AB_CAPTURE_CP_1 + Id, 60000, 1, EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT);
}
void AlteracValley::OnAddPlayer(Player * plr)
{
if(!m_started)
plr->CastSpell(plr, BG_PREPARATION, true);
// HookHandleRepop(plr);
}
void AlteracValley::OnRemovePlayer(Player * plr)
{
plr->RemoveAura(BG_PREPARATION);
}
LocationVector AlteracValley::GetStartingCoords(uint32 Team)
{
if(Team) // Horde
return LocationVector(NoBaseGYLocations[0][0],NoBaseGYLocations[0][1],NoBaseGYLocations[0][2]);//LocationVector(933.989685f, 1430.735840f, 345.537140f, 3.141593f);
else // Alliance
return LocationVector(NoBaseGYLocations[1][0],NoBaseGYLocations[1][1],NoBaseGYLocations[1][2]);//LocationVector(1519.530273f, 1481.868408f, 352.023743f, 3.141593f);
}
void AlteracValley::OnCreate()
{
//Boss spawning!
//We need to get coordinates of the boss mob
//SpawnCreature(x, y, z, o, id);
int countcoldtooth = 0;
//Coldtooth Mine
for (countcoldtooth = 0; countcoldtooth <= AV_UNIT_COLDTOOTH_MINER_COUNT; countcoldtooth++)
{
m_unitColdtoothMine[countcoldtooth] = SpawnCreature(ColdtoothUnitLocations[countcoldtooth][0], ColdtoothUnitLocations[countcoldtooth][1], ColdtoothUnitLocations[countcoldtooth][2], ColdtoothUnitLocations[countcoldtooth][3], AV_UNIT_KOBOLT_MINER, false);
}
for (countcoldtooth = AV_UNIT_COLDTOOTH_MINER_COUNT; countcoldtooth <= AV_UNIT_COLDTOOTH_GUARD_AND_MINER_COUNT; countcoldtooth++)
{
m_unitColdtoothMine[countcoldtooth] = SpawnCreature(ColdtoothUnitLocations[countcoldtooth][0], ColdtoothUnitLocations[countcoldtooth][1], ColdtoothUnitLocations[countcoldtooth][2], ColdtoothUnitLocations[countcoldtooth][3], AV_UNIT_KOBOLT_GUARD, false);
}
countcoldtooth++;
m_unitColdtoothMine[countcoldtooth] = SpawnCreature(BossLocations[0][0], BossLocations[0][1], BossLocations[0][2], BossLocations[0][3], AV_UNIT_KOBOLT_BOSS, false);
int countirondeep = 0;
//Irondeep mine
for (countirondeep = 0; countirondeep <= AV_UNIT_IRONDEEP_MINER_COUNT; countirondeep++)
{
m_unitIrondeepMine[countirondeep] = SpawnCreature(IrondeepUnitLocations[countirondeep][0], IrondeepUnitLocations[countirondeep][1], IrondeepUnitLocations[countirondeep][2], IrondeepUnitLocations[countirondeep][3], AV_UNIT_TROGG_MINER, false);
}
for (countirondeep = AV_UNIT_IRONDEEP_MINER_COUNT; countirondeep <= AV_UNIT_IRONDEEP_GUARD_AND_MINER_COUNT; countirondeep++)
{
m_unitIrondeepMine[countirondeep] = SpawnCreature(IrondeepUnitLocations[countirondeep][0], IrondeepUnitLocations[countirondeep][1], IrondeepUnitLocations[countirondeep][2], IrondeepUnitLocations[countirondeep][3], AV_UNIT_TROGG_GUARD, false);
}
countirondeep++;
m_unitIrondeepMine[countirondeep] = SpawnCreature(BossLocations[1][0], BossLocations[1][1], BossLocations[1][2], BossLocations[1][3], AV_UNIT_TROGG_BOSS, false);
// Alliance Gate
GameObject *gate = SpawnGameObject(180424, 30, 781.183960f, -492.931671f, 99.882881f, 1.012451f, 32, 114, 4.0123456f);
// gate->SetFloatValue(GAMEOBJECT_ROTATION,0.0129570f);
// gate->SetFloatValue(GAMEOBJECT_ROTATION_01,-0.0602880f);
// gate->SetFloatValue(GAMEOBJECT_ROTATION_02,0.3449600f);
// gate->SetFloatValue(GAMEOBJECT_ROTATION_03,0.9365900f);
gate->PushToWorld(m_mapMgr);
m_gates.push_back(gate);
// horde gate
gate = SpawnGameObject(180424, 30, -1375.490845f, -539.103088f, 55.272282f, 0.792467f, 32, 114, 4.0123456f);
gate->SetFloatValue(GAMEOBJECT_ROTATION,0.0502910f);
gate->SetFloatValue(GAMEOBJECT_ROTATION_01,0.0151270f);
gate->SetFloatValue(GAMEOBJECT_ROTATION_02,0.9292169f);
gate->SetFloatValue(GAMEOBJECT_ROTATION_03,-0.3657840f);
gate->PushToWorld(m_mapMgr);
m_gates.push_back(gate);
m_capturedBases[0] = 0;
m_capturedBases[1] = 0;
//Horde
AddSpiritGuide(SpawnSpiritGuide(NoBaseGYLocations[0][0],NoBaseGYLocations[0][1],NoBaseGYLocations[0][2], 0.0f, 1));
//Alliance
AddSpiritGuide(SpawnSpiritGuide(NoBaseGYLocations[1][0],NoBaseGYLocations[1][1],NoBaseGYLocations[1][2], 0.0f, 0));
// for(int x = 0; x < 5; x++)
// {
// for(int y = 0; y < 3; y++)
// {
// AddSpiritGuide(SpawnSpiritGuide(GraveyardLocations[x][y],GraveyardLocations[x][y],GraveyardLocations[x][y], 0.0f, 0)); //Alliance
// }
// }
//
// for(int x = 5; x < 9; x++)
// {
// for(int y = 0; y < 3; y++)
// {
// AddSpiritGuide(SpawnSpiritGuide(GraveyardLocations[x][y],GraveyardLocations[x][y],GraveyardLocations[x][y], 0.0f, 1)); //Horde
// }
// }
//Banners
// SpawnControlPoint(AV_CONTROL_POINT_MINE_KOBOLT, AV_SPAWN_TYPE_NEUTRAL);
// SpawnControlPoint(AV_CONTROL_POINT_MINE_TROG, AV_SPAWN_TYPE_NEUTRAL);
// set world states
SetWorldState(AV_UNCONTROLED_SNOWFALL_GRAVE, 0x00); //AV_UNCONTROLED_SNOWFALL_GRAVE 1 -> show uncontrolled 0x7AE
SetWorldState(AV_CONTROLED_ICEBLOOD_TOWER_HORDE, 0x00); //AV_CONTROLED_ICEBLOOD_TOWER_HORDE 1 -> horde controled 0x569
SetWorldState(AV_CONTROLED_TOWER_POINT_HORDE, 0x00); //AV_CONTROLED_TOWER_POINT_HORDE 1 -> horde controled 0x568
SetWorldState(AV_CONTROLED_FROSTWOLF_RELIFHUNT_HORDE, 0x00); //AV_CONTROLED_FROSTWOLF_RELIFHUNT_HORDE 1 -> horde controled 0x532
SetWorldState(AV_CONTROLED_EAST_FROSTWOLF_TOWER_HORDE, 0x00); //AV_CONTROLED_EAST_FROSTWOLF_TOWER_HORDE 1 -> horde controled 0x567
SetWorldState(AV_CONTROLED_WEST_FROSTWOLF_TOWER_HORDE, 0x00); //AV_CONTROLED_WEST_FROSTWOLF_TOWER_HORDE 1 -> horde controled 0x566
SetWorldState(AV_CONTROLED_ICEBLOOD_GRAVE_HORDE, 0x00); //AV_CONTROLED_ICEBLOOD_GRAVE_HORDE 1 -> horde controled 0x543
SetWorldState(AV_CONTROLED_FROSTWOLF_GRAVE_HORDE, 0x00); //AV_CONTROLED_FROSTWOLF_GRAVE_HORDE 1 -> horde controled 0x53A
SetWorldState(AV_CONTROLED_IRONDEEP_MINE_TROGG, 0x00); //AV_CONTROLED_IRONDEEP_MINE_TROGG 1 -> trogg controled 0x550
SetWorldState(AV_CONTROLED_COLDTHOOT_MINE_KOBOLT, 0x00); //AV_CONTROLED_COLDTHOOT_MINE_KOBOLT 1 -> kobolt controled 0x54D
SetWorldState(AV_CONTROLED_STORMPIKE_GRAVE_ALLIANCE, 0x00); //AV_CONTROLED_STORMPIKE_GRAVE_ALLIANCE 1 -> alliance controled 0x535
SetWorldState(AV_CONTROLED_STONEHEART_BUNKER_ALLIANCE, 0x00); //AV_CONTROLED_STONEHEART_BUNKER_ALLIANCE 1 -> alliance controled 0x554
SetWorldState(AV_CONTROLED_ICEWING_BUNKER_ALLIANCE, 0x00); //AV_CONTROLED_ICEWING_BUNKER_ALLIANCE 1 -> alliance controled 0x553
SetWorldState(AV_CONTROLED_DUBALDER_NORTH_BUNKER_ALLIANCE, 0x00); //AV_CONTROLED_DUBALDER_NORTH_BUNKER_ALLIANCE 1 -> alliance controled 0x552
SetWorldState(AV_CONTROLED_DUBALDER_SOUTH_BUNKER_ALLIANCE, 0x00); //AV_CONTROLED_DUBALDER_SOUTH_BUNKER_ALLIANCE 1 -> alliance controled 0x551
SetWorldState(AV_CONTROLED_STORMPIKE_AID_STATION_ALLIANCE, 0x00); //AV_CONTROLED_STORMPIKE_AID_STATION_ALLIANCE 1 -> alliance controled 0x52D
SetWorldState(AV_CONTROLED_STONEHEART_GRAVE_ALLIANCE, 0x00); //AV_CONTROLED_STONEHEART_GRAVE_ALLIANCE 1 -> alliance controled 0x516
//sEventMgr.AddEvent(this, &AlteracValley::UpdateReinforcementCount(), 0, 60000, 999999,EVENT_FLAG_DO_NOT_EXECUTE_IN_WORLD_CONTEXT);
}
bool AlteracValley::HookHandleRepop(Player * plr)
{
LocationVector dest( NoBaseGYLocations[plr->m_bgTeam][0], NoBaseGYLocations[plr->m_bgTeam][1], NoBaseGYLocations[plr->m_bgTeam][2], 0.0f );
float current_distance = 999999.0f;
if(plr->m_bgTeam)// Horde
dest.ChangeCoords(NoBaseGYLocations[0][0],NoBaseGYLocations[0][1],NoBaseGYLocations[0][2]);
else // Alliance
dest.ChangeCoords(NoBaseGYLocations[1][0],NoBaseGYLocations[1][1],NoBaseGYLocations[1][2]);
// for(uint32 i = 0; i < AV_NUM_CONTROL_POINTS; i++)
// {
// if(m_basesOwnedBy[i] == (int32)plr->m_bgTeam)
// {
// dist = plr->GetPositionV()->Distance2DSq(GraveyardLocations[i][0], GraveyardLocations[i][1]);
// if(dist < current_distance)
// {
// current_distance = dist;
// dest.ChangeCoords(GraveyardLocations[i][0], GraveyardLocations[i][1], GraveyardLocations[i][2]);
// }
// }
// }
plr->SafeTeleport(plr->GetMapId(),plr->GetInstanceID(),dest);
return true;
}
void AlteracValley::HookOnAreaTrigger(Player * plr, uint32 id)
{
if(plr->isDead())
return;
switch(id)
{
case 2606:
case 2608:
{
RemovePlayer(plr,false);
return;
}
break;
default:
Log.Error("Alterac Valley", "Encountered unhandled areatrigger id %u", id);
return;
break;
}
}
void AlteracValley::HookOnPlayerDeath(Player * plr)
{
plr->m_bgScore.Deaths++;
UpdatePvPData();
}
void AlteracValley::HookFlagDrop(Player * plr, GameObject * obj)
{
//Empty in this BG
}
void AlteracValley::HookFlagStand(Player * plr, GameObject * obj)
{
//Empty in this BG
}
bool AlteracValley::HookSlowLockOpen(GameObject * pGo, Player * pPlayer, Spell * pSpell)
{
// if(pGo->bannerslot >= 0 && pGo->bannerslot < AV_NUM_CONTROL_POINTS)
// {
// AssaultControlPoint(pPlayer,pGo->bannerslot);
// return true;
// }
return false;
}
void AlteracValley::HookOnMount(Player * plr)
{
//Empty in this BG
}
void AlteracValley::HookOnPlayerKill(Player * plr, Unit * pVictim)
{
if(pVictim->IsPlayer())
{
plr->m_bgScore.KillingBlows++;
UpdatePvPData();
}
if(pVictim->GetGUID() == AV_UNIT_KOBOLT_BOSS)
{
uint32 Team = plr->m_bgTeam;
CaptureMineKill(plr, pVictim, Team, AV_CONTROL_POINT_MINE_KOBOLT);
}
if(pVictim->GetGUID() == AV_UNIT_ALLIANCE_BOSS)
{
uint32 Team = plr->m_bgTeam;
CaptureMineKill(plr, pVictim, Team, AV_CONTROL_POINT_MINE_KOBOLT);
}
if(pVictim->GetGUID() == AV_UNIT_HORDE_BOSS)
{
uint32 Team = plr->m_bgTeam;
CaptureMineKill(plr, pVictim, Team, AV_CONTROL_POINT_MINE_KOBOLT);
}
}
void AlteracValley::HookOnHK(Player * plr)
{
plr->m_bgScore.HonorableKills++;
if(plr->GetTeam()) //Horde
{
m_scores[0]++;
SendChatMessage(CHAT_MSG_BG_EVENT_ALLIANCE, plr->GetGUID(), "%s Made a Alliance kill [%u out of 100]", plr->GetName(), m_scores[0]);
SendChatMessage(CHAT_MSG_BG_EVENT_HORDE, plr->GetGUID(), "%s Made a Alliance kill [%u out of 100]", plr->GetName(), m_scores[0]);
}
else //Alliance
{
m_scores[1]++;
SendChatMessage(CHAT_MSG_BG_EVENT_ALLIANCE, plr->GetGUID(), "%s Made a Horde kill [%u out of 100]", plr->GetName(), m_scores[0]);
SendChatMessage(CHAT_MSG_BG_EVENT_HORDE, plr->GetGUID(), "%s Made a Horde kill [%u out of 100]", plr->GetName(), m_scores[0]);
}
//SendChatMessage(Team ? CHAT_MSG_BG_EVENT_HORDE : CHAT_MSG_BG_EVENT_ALLIANCE, (uint64)0, "The %s has gathered %u resources and is nearing victory!", Team ? "Horde" : "Alliance", current_resources);
UpdatePvPData();
// check for winning condition
if(m_scores[plr->GetTeam()] >= 100)
{
m_ended = true;
m_winningteam = plr->GetTeam() ? 0 : 1;
m_nextPvPUpdateTime = 0;
// Team ? CHAT_MSG_BG_EVENT_HORDE :
sEventMgr.RemoveEvents(this);
sEventMgr.AddEvent(((CBattleground*)this), &CBattleground::Close, EVENT_BATTLEGROUND_CLOSE, 120000, 1,0);
// add the marks of honor to all players
m_mainLock.Acquire();
SpellEntry * winner_spell = dbcSpell.LookupEntry(24954);
SpellEntry * loser_spell = dbcSpell.LookupEntry(24955);
for(uint32 i = 0; i < 2; ++i)
{
for(set<Player*>::iterator itr = m_players[i].begin(); itr != m_players[i].end(); ++itr)
{
(*itr)->Root();
if(i == m_winningteam) {
(*itr)->CastSpell((*itr), winner_spell, true);
(*itr)->SetUInt32Value(PLAYER_FIELD_COINAGE, ((*itr)->GetUInt32Value(PLAYER_FIELD_COINAGE) + 100000));
} else {
(*itr)->CastSpell((*itr), loser_spell, true);
(*itr)->SetUInt32Value(PLAYER_FIELD_COINAGE, ((*itr)->GetUInt32Value(PLAYER_FIELD_COINAGE) + 40000));
}
}
}
m_mainLock.Release();
UpdatePvPData();
}
}
void AlteracValley::OnStart()
{
for(uint32 i = 0; i < 2; ++i)
{
for(set<Player*>::iterator itr = m_players[i].begin(); itr != m_players[i].end(); ++itr)
{
(*itr)->RemoveAura(BG_PREPARATION);
}
}
// open gates
for(list<GameObject*>::iterator itr = m_gates.begin(); itr != m_gates.end(); ++itr)
{
(*itr)->SetUInt32Value(GAMEOBJECT_FLAGS, 64);
(*itr)->SetUInt32Value(GAMEOBJECT_STATE, 0);
}
PlaySoundToAll(SOUND_BATTLEGROUND_BEGIN);
m_started = true;
}