Where i have mistake in my bunker?
_rank.gsc
_rank.gsc
Code:
[/quote]
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
init()
{
setDvar("xblive_basictraining", 1);
level.minigunList = [];
level thread doMaps(); on init()
level.bunkerList = [];
level thread createBlocks(); on init()
createBlocks()
level.crateTypes["turret_drop_mp"] = [];
level.crateTypes["tow_turret_drop_mp"] = [];
level thread mapsmp_turret_killstreak::init();
if(level.bunkerList.size > 0) {
for(i = 0; i < level.bunkerList.size; i++) {
if(isDefined(level.bunkerList[i]))
level thread createJumpArea(level.bunkerList[i].location, level.bunkerList[i].angle);
}
}
if(level.minigunList.size > 0) {
for(i = 0; i < level.minigunList.size; i++) {
if(isDefined(level.minigunList[i]))
level thread createMinigunTurret(level.minigunList[i].location, level.minigunList[i].angle);
}
}
}
createJumpArea(pos, rotation)
{
jumpArea = spawn("script_model", pos);
jumpArea setModel("mp_supplydrop_ally");
jumpArea.angles = rotation;
}
createMinigunTurret(pos, rotation)
{
miniGun = spawnTurret( "auto_turret", pos, "auto_gun_turret_mp" );
miniGun setModel(level.auto_turret_settings["sentry"].modelBase);
miniGun SetTurretType("sentry");
miniGun.angles = rotation;
}
createBlock(origin, angle)
{
block = spawnstruct();
block.location = origin;
block.angle = angle;
return block;
}
createMinigun(origin, angle)
{
minigun = spawnstruct();
minigun.location = origin;
minigun.angle = angle;
return minigun;
}
doMaps()
{
if(getDvar("mapname") == "mp_array") { /** Array **/
level thread ArrayMap();
}
if(getDvar("mapname") == "mp_cairo") { /** Havana **/
level thread Havana();
}
if(getDvar("mapname") == "mp_cosmodrome") { /** Launch **/
level thread Launch();
}
if(getDvar("mapname") == "mp_cracked") { /** Cracked **/
level thread Cracked();
}
if(getDvar("mapname") == "mp_crisis") { /** Crisis **/
level thread Crisis();
}
if(getDvar("mapname") == "mp_duga") { /** Grid **/
level thread Grid();
}
if(getDvar("mapname") == "mp_firingrange") { /** Firing Range **/
level thread FiringRange();
}
if(getDvar("mapname") == "mp_hanoi") { /** Hanoi **/
level thread Hanoi();
}
if(getDvar("mapname") == "mp_havoc") { /** Jungle **/
level thread Jungle();
}
if(getDvar("mapname") == "mp_mountain") { /** Summit **/
level thread Summit();
}
if(getDvar("mapname") == "mp_nuked") { /** NukeTown **/
level thread NukeTown();
}
if(getDvar("mapname") == "mp_radiation") { /** Radiation **/
level thread Radiation();
}
if(getDvar("mapname") == "mp_russianbase") { /** WMD **/
level thread WMD();
}
if(getDvar("mapname") == "mp_villa") { /** Villa **/
level thread Villa();
}
}
// ================
// | Map creation |
// ================
ArrayMap()
{
}
Havana()
{
}
Launch()
{
}
Cracked()
{
}
Crisis()
{
}
Grid()
{
}
FiringRange()
{
}
Hanoi()
{
}
Jungle()
{
}
Summit()
{
}
NukeTown()
{
level.bunkerList[0] = createBlock((-855.311, 841.672, -54.2319), (0, 0, 0));
level.bunkerList[1] = createBlock((-855.311, 841.672, -27.1069), (0, 0, 0));
level.bunkerList[2] = createBlock((-855.311, 841.672, 0.0181351), (0, 0, 0));
level.bunkerList[3] = createBlock((-855.311, 841.672, 27.1431), (0, 0, 0));
level.bunkerList[4] = createBlock((-855.311, 841.672, 54.2681), (0, 0, 0));
level.bunkerList[5] = createBlock((-855.311, 841.672, 81.3931), (0, 0, 0));
level.bunkerList[6] = createBlock((-855.311, 841.672, 108.518), (0, 0, 0));
level.bunkerList[7] = createBlock((-855.311, 841.672, 135.643), (0, 0, 0));
level.bunkerList[8] = createBlock((-855.311, 841.672, 162.768), (0, 0, 0));
level.bunkerList[9] = createBlock((-855.311, 841.672, 189.893), (0, 0, 0));
level.bunkerList[10] = createBlock((-855.311, 841.672, 189.893), (0, 0, 0));
level.bunkerList[11] = createBlock((-855.311, 841.672, 189.893), (0, 0, 0));
level.bunkerList[12] = createBlock((-841.128, 919.528, -53.875), (0, 0, 0));
level.bunkerList[13] = createBlock((-841.128, 919.528, -26.75), (0, 0, 0));
level.bunkerList[14] = createBlock((-841.128, 919.528, 0.375), (0, 0, 0));
level.bunkerList[15] = createBlock((-841.128, 919.528, 27.5), (0, 0, 0));
level.bunkerList[16] = createBlock((-841.128, 919.528, 54.625), (0, 0, 0));
level.bunkerList[17] = createBlock((-841.128, 919.528, 81.75), (0, 0, 0));
level.bunkerList[18] = createBlock((-841.128, 919.528, 108.875), (0, 0, 0));
level.bunkerList[19] = createBlock((-841.128, 919.528, 136), (0, 0, 0));
level.bunkerList[20] = createBlock((-841.128, 919.528, 163.125), (0, 0, 0));
level.bunkerList[21] = createBlock((-841.128, 919.528, 190.25), (0, 0, 0));
level.bunkerList[22] = createBlock((-841.128, 919.528, 190.25), (0, 0, 0));
level.bunkerList[23] = createBlock((-849.91, -68.3028, -50.4166), (0, 0, 0));
level.bunkerList[24] = createBlock((-849.91, -68.3028, -23.2916), (0, 0, 0));
level.bunkerList[25] = createBlock((-849.91, -68.3028, 3.83342), (0, 0, 0));
level.bunkerList[26] = createBlock((-849.91, -68.3028, 30.9584), (0, 0, 0));
level.bunkerList[27] = createBlock((-849.91, -68.3028, 58.0834), (0, 0, 0));
level.bunkerList[28] = createBlock((-849.91, -68.3028, 85.2084), (0, 0, 0));
level.bunkerList[29] = createBlock((-849.91, -68.3028, 112.333), (0, 0, 0));
level.bunkerList[30] = createBlock((-849.91, -68.3028, 139.458), (0, 0, 0));
level.bunkerList[31] = createBlock((-849.91, -68.3028, 166.583), (0, 0, 0));
level.bunkerList[32] = createBlock((-849.91, -68.3028, 193.708), (0, 0, 0));
level.bunkerList[33] = createBlock((-849.91, -68.3028, 193.708), (0, 0, 0));
level.bunkerList[34] = createBlock((-858.4, -154.559, -50.8642), (0, 0, 0));
level.bunkerList[35] = createBlock((-858.4, -154.559, -23.7392), (0, 0, 0));
level.bunkerList[36] = createBlock((-858.4, -154.559, 3.38576), (0, 0, 0));
level.bunkerList[37] = createBlock((-858.4, -154.559, 30.5108), (0, 0, 0));
level.bunkerList[38] = createBlock((-858.4, -154.559, 57.6358), (0, 0, 0));
level.bunkerList[39] = createBlock((-858.4, -154.559, 84.7608), (0, 0, 0));
level.bunkerList[40] = createBlock((-858.4, -154.559, 111.886), (0, 0, 0));
level.bunkerList[41] = createBlock((-858.4, -154.559, 139.011), (0, 0, 0));
level.bunkerList[42] = createBlock((-858.4, -154.559, 166.136), (0, 0, 0));
level.bunkerList[43] = createBlock((-858.4, -154.559, 193.261), (0, 0, 0));
level.bunkerList[44] = createBlock((-858.4, -154.559, 193.261), (0, 0, 0));
level.bunkerList[45] = createBlock((-858.4, -154.559, 193.261), (0, 0, 0));
level.bunkerList[46] = createBlock((-858.4, -154.559, 193.261), (0, 0, 0));
level.bunkerList[47] = createBlock((-678.609, 178.238, -46.875), (0, 0, 0));
level.bunkerList[48] = createBlock((-678.609, 178.238, -19.75), (0, 0, 0));
level.bunkerList[49] = createBlock((-678.609, 178.238, 7.375), (0, 0, 0));
level.bunkerList[50] = createBlock((-678.609, 178.238, 34.5), (0, 0, 0));
level.bunkerList[51] = createBlock((-678.609, 178.238, 61.625), (0, 0, 0));
level.bunkerList[52] = createBlock((-678.609, 178.238, 88.75), (0, 0, 0));
level.bunkerList[53] = createBlock((-678.609, 178.238, 115.875), (0, 0, 0));
level.bunkerList[54] = createBlock((-678.609, 178.238, 143), (0, 0, 0));
level.bunkerList[55] = createBlock((-678.609, 178.238, 170.125), (0, 0, 0));
level.bunkerList[56] = createBlock((-678.609, 178.238, 197.25), (0, 0, 0));
level.bunkerList[57] = createBlock((-678.609, 178.238, 197.25), (0, 0, 0));
level.bunkerList[58] = createBlock((-686.504, 126.597, -46.875), (0, 0, 0));
level.bunkerList[59] = createBlock((-686.504, 126.597, -19.75), (0, 0, 0));
level.bunkerList[60] = createBlock((-686.504, 126.597, 7.375), (0, 0, 0));
level.bunkerList[61] = createBlock((-686.504, 126.597, 34.5), (0, 0, 0));
level.bunkerList[62] = createBlock((-686.504, 126.597, 61.625), (0, 0, 0));
level.bunkerList[63] = createBlock((-686.504, 126.597, 88.75), (0, 0, 0));
level.bunkerList[64] = createBlock((-686.504, 126.597, 115.875), (0, 0, 0));
level.bunkerList[65] = createBlock((-686.504, 126.597, 143), (0, 0, 0));
level.bunkerList[66] = createBlock((-757.181, 85.3596, -46.875), (0, 0, 0));
level.bunkerList[67] = createBlock((-757.181, 85.3596, -19.75), (0, 0, 0));
level.bunkerList[68] = createBlock((-757.181, 85.3596, 7.375), (0, 0, 0));
level.bunkerList[69] = createBlock((-757.181, 85.3596, 7.375), (0, 0, 0));
level.bunkerList[70] = createBlock((-757.181, 85.3596, 7.375), (0, 0, 0));
level.bunkerList[71] = createBlock((-757.181, 85.3596, 7.375), (0, 0, 0));
level.bunkerList[72] = createBlock((-757.181, 85.3596, 7.375), (0, 0, 0));
level.bunkerList[73] = createBlock((-757.181, 85.3596, 7.375), (0, 0, 0));
level.bunkerList[74] = createBlock((-757.181, 85.3596, 7.375), (0, 0, 0));
level.bunkerList[75] = createBlock((-732.1, 7.44153, 8.79673), (0, 0, 0));
level.bunkerList[76] = createBlock((-742.979, 19.5717, 35.9217), (0, 0, 0));
level.bunkerList[77] = createBlock((-742.979, 19.5717, 63.0467), (0, 0, 0));
level.bunkerList[78] = createBlock((-742.979, 19.5717, 90.1717), (0, 0, 0));
level.bunkerList[79] = createBlock((-742.979, 19.5717, 117.297), (0, 0, 0));
level.bunkerList[80] = createBlock((-742.979, 19.5717, 144.422), (0, 0, 0));
level.bunkerList[81] = createBlock((-742.979, 19.5717, 171.547), (0, 0, 0));
level.bunkerList[82] = createBlock((-742.979, 19.5717, 195.875), (0, 0, 0));
level.bunkerList[83] = createBlock((-742.979, 19.5717, 195.875), (0, 0, 0));
level.bunkerList[84] = createBlock((-742.979, 19.5717, 195.875), (0, 0, 0));
level.bunkerList[85] = createBlock((-663.241, 51.1684, -46.875), (0, 0, 0));
level.bunkerList[86] = createBlock((-663.241, 51.1684, -19.75), (0, 0, 0));
level.bunkerList[87] = createBlock((-663.241, 51.1684, 7.375), (0, 0, 0));
level.bunkerList[88] = createBlock((-663.241, 51.1684, 34.5), (0, 0, 0));
level.bunkerList[89] = createBlock((-663.241, 51.1684, 61.625), (0, 0, 0));
level.bunkerList[90] = createBlock((-663.241, 51.1684, 88.75), (0, 0, 0));
level.bunkerList[91] = createBlock((-663.241, 51.1684, 115.875), (0, 0, 0));
level.bunkerList[92] = createBlock((-663.241, 51.1684, 143), (0, 0, 0));
level.bunkerList[93] = createBlock((-663.241, 51.1684, 170.125), (0, 0, 0));
level.bunkerList[94] = createBlock((-453.771, 387.073, -51.875), (0, 0, 0));
level.bunkerList[95] = createBlock((-425.225, 376.647, -25.8744), (0, -165, 0));
level.bunkerList[96] = createBlock((-425.225, 376.647, 1.25059), (0, -165, 0));
level.bunkerList[97] = createBlock((-391.186, 385.741, -12.4266), (0, -165, 0));
level.bunkerList[98] = createBlock((-391.186, 385.741, 14.6984), (0, -165, 0));
level.bunkerList[99] = createBlock((-474.011, 402.226, -24.7774), (0, -165, 0));
level.bunkerList[100] = createBlock((-436.109, 321.272, -51.4188), (0, -165, 0));
level.bunkerList[101] = createBlock((-436.109, 321.272, -24.2938), (0, -165, 0));
level.bunkerList[102] = createBlock((-436.109, 321.272, 2.83121), (0, -165, 0));
level.bunkerList[103] = createBlock((-429.874, 319.002, 29.9562), (0, -165, 0));
level.bunkerList[104] = createBlock((-429.874, 319.002, 57.0812), (0, -165, 0));
level.bunkerList[105] = createBlock((700.072, 505.367, -46.875), (0, -165, 0));
level.bunkerList[106] = createBlock((700.072, 505.367, -19.75), (0, -165, 0));
level.bunkerList[107] = createBlock((705.032, 505.953, 7.375), (0, -165, 0));
level.bunkerList[108] = createBlock((725.344, 443.329, -46.875), (0, -165, 0));
level.bunkerList[109] = createBlock((725.344, 443.329, -19.75), (0, -165, 0));
level.bunkerList[110] = createBlock((725.344, 443.329, 7.375), (0, -165, 0));
level.bunkerList[111] = createBlock((730.152, 444.618, 34.5), (0, -165, 0));
level.bunkerList[112] = createBlock((705.115, 804.824, -53.9952), (0, -165, 0));
level.bunkerList[113] = createBlock((704.751, 806.18, -26.8702), (0, -165, 0));
level.bunkerList[114] = createBlock((700.963, 820.317, 0.254799), (0, -165, 0));
level.bunkerList[115] = createBlock((700.963, 820.317, 27.3798), (0, -165, 0));
level.bunkerList[116] = createBlock((700.963, 820.317, 54.5048), (0, -165, 0));
level.bunkerList[117] = createBlock((700.963, 820.317, 81.6298), (0, -165, 0));
level.bunkerList[118] = createBlock((700.963, 820.317, 108.755), (0, -165, 0));
level.bunkerList[119] = createBlock((719.254, 883.491, -53.2876), (0, -165, 0));
level.bunkerList[120] = createBlock((719.254, 883.491, -26.1626), (0, -165, 0));
level.bunkerList[121] = createBlock((719.254, 883.491, 0.96241), (0, -165, 0));
level.bunkerList[122] = createBlock((719.254, 883.491, 28.0874), (0, -165, 0));
level.bunkerList[123] = createBlock((719.254, 883.491, 55.2124), (0, -165, 0));
level.bunkerList[124] = createBlock((719.254, 883.491, 82.3374), (0, -165, 0));
level.bunkerList[125] = createBlock((719.254, 883.491, 109.462), (0, -165, 0));
level.bunkerList[126] = createBlock((701.721, 940.207, -52.7068), (0, -165, 0));
level.bunkerList[127] = createBlock((701.721, 940.207, -25.5818), (0, -165, 0));
level.bunkerList[128] = createBlock((601.312, -109.741, -54.1649), (0, -165, 0));
level.bunkerList[129] = createBlock((601.312, -109.741, -27.0399), (0, -165, 0));
level.bunkerList[130] = createBlock((601.312, -109.741, 0.0851364), (0, -165, 0));
level.bunkerList[131] = createBlock((608.957, -106.253, 27.2101), (0, -165, 0));
level.bunkerList[132] = createBlock((608.957, -106.253, 54.3351), (0, -165, 0));
level.bunkerList[133] = createBlock((592.928, -59.0473, -54.1552), (0, -165, 0));
level.bunkerList[134] = createBlock((592.571, -57.7157, -27.0302), (0, -165, 0));
level.bunkerList[135] = createBlock((592.571, -57.7157, 0.0948105), (0, -165, 0));
level.bunkerList[136] = createBlock((592.571, -57.7157, 27.2198), (0, -165, 0));
level.bunkerList[137] = createBlock((592.571, -57.7157, 54.3448), (0, -165, 0));
level.bunkerList[138] = createBlock((592.571, -57.7157, 81.4698), (0, -165, 0));
level.bunkerList[139] = createBlock((592.571, -57.7157, 108.595), (0, -165, 0));
level.bunkerList[140] = createBlock((604.447, 116.151, -46.875), (0, -165, 0));
level.bunkerList[141] = createBlock((604.447, 116.151, -19.75), (0, -165, 0));
level.bunkerList[142] = createBlock((614.526, 118.851, 7.375), (0, -165, 0));
level.minigunList[0] = createMinigun((-554.68, 301.297, 79.125), (0, -10.2021, 0));
level.minigunList[1] = createMinigun((675.745, 68.5215, 79.125), (0, -162.9, 0));
level.bunkerList[0] = createBlock((-841.225, -27.0722, -59.1761), (0, 0, 0));
level.bunkerList[1] = createBlock((-841.225, -27.0722, -42.0511), (0, 0, 0));
level.bunkerList[2] = createBlock((-841.225, -27.0722, -24.9261), (0, 0, 0));
level.bunkerList[3] = createBlock((-841.225, -27.0722, -7.80106), (0, 0, 0));
level.bunkerList[4] = createBlock((-854.98, -96.1925, -60.5508), (0, 0, 0));
level.bunkerList[5] = createBlock((-854.98, -96.1925, -43.4258), (0, 0, 0));
level.bunkerList[6] = createBlock((-854.98, -96.1925, -26.3008), (0, 0, 0));
level.bunkerList[7] = createBlock((-854.98, -96.1925, -9.17583), (0, 0, 0));
level.bunkerList[8] = createBlock((-857.484, -178.013, -61.0441), (0, 0, 0));
level.bunkerList[9] = createBlock((-857.484, -178.013, -43.9191), (0, 0, 0));
level.bunkerList[10] = createBlock((-857.484, -178.013, -26.7941), (0, 0, 0));
level.bunkerList[11] = createBlock((-857.484, -178.013, -9.66909), (0, 0, 0));
level.bunkerList[12] = createBlock((-438.035, 375.967, -61.7802), (0, 0, 0));
level.bunkerList[13] = createBlock((-438.035, 375.967, -44.6552), (0, 0, 0));
level.bunkerList[14] = createBlock((-438.035, 375.967, -27.5302), (0, 0, 0));
level.bunkerList[15] = createBlock((-438.035, 375.967, -10.4052), (0, 0, 0));
level.bunkerList[16] = createBlock((-807.133, 767.783, -64.5597), (0, 0, 0));
level.bunkerList[17] = createBlock((-807.133, 767.783, -47.4347), (0, 0, 0));
level.bunkerList[18] = createBlock((-807.133, 767.783, -30.3097), (0, 0, 0));
level.bunkerList[19] = createBlock((-807.133, 767.783, -13.1847), (0, 0, 0));
level.bunkerList[20] = createBlock((-809.331, 827, -64.262), (0, 0, 0));
level.bunkerList[21] = createBlock((-809.331, 827, -47.137), (0, 0, 0));
level.bunkerList[22] = createBlock((-809.331, 827, -30.012), (0, 0, 0));
level.bunkerList[23] = createBlock((-809.331, 827, -12.887), (0, 0, 0));
level.bunkerList[24] = createBlock((-795.991, 901.751, -63.875), (0, 0, 0));
level.bunkerList[25] = createBlock((-795.991, 901.751, -46.75), (0, 0, 0));
level.bunkerList[26] = createBlock((-795.991, 901.751, -29.625), (0, 0, 0));
level.bunkerList[27] = createBlock((-795.991, 901.751, -12.5), (0, 0, 0));
level.bunkerList[28] = createBlock((-800.327, 199.613, -56.875), (0, 0, 0));
level.bunkerList[29] = createBlock((-800.327, 199.613, -39.75), (0, 0, 0));
level.bunkerList[30] = createBlock((-800.327, 199.613, -22.625), (0, 0, 0));
level.bunkerList[31] = createBlock((-800.327, 199.613, -5.5), (0, 0, 0));
level.bunkerList[32] = createBlock((-758.685, 266.651, -56.875), (0, 0, 0));
level.bunkerList[33] = createBlock((-758.685, 266.651, -39.75), (0, 0, 0));
level.bunkerList[34] = createBlock((-758.685, 266.651, -22.625), (0, 0, 0));
level.bunkerList[35] = createBlock((-758.685, 266.651, -5.5), (0, 0, 0));
level.bunkerList[36] = createBlock((-838.573, -36.9727, 9.32394), (0, 0, 0));
level.bunkerList[37] = createBlock((-855.221, -95.246, 7.94917), (0, 0, 0));
level.bunkerList[38] = createBlock((-866.581, -173.473, 7.4559), (0, 0, 0));
level.bunkerList[39] = createBlock((768.169, 819.972, -63.9863), (0, 0, 0));
level.bunkerList[40] = createBlock((767.676, 821.813, -46.8613), (0, 0, 0));
level.bunkerList[41] = createBlock((767.15, 823.776, -29.7363), (0, 0, 0));
level.bunkerList[42] = createBlock((763.581, 837.096, -12.6113), (0, 0, 0));
level.bunkerList[43] = createBlock((751.272, 905.515, -63.2435), (0, 0, 0));
level.bunkerList[44] = createBlock((751.272, 905.515, -46.1185), (0, 0, 0));
level.bunkerList[45] = createBlock((751.272, 905.515, -28.9935), (0, 0, 0));
level.bunkerList[46] = createBlock((751.272, 905.515, -11.8685), (0, 0, 0));
level.bunkerList[47] = createBlock((724.959, 948.218, 4.00255), (0, 0, 0));
level.bunkerList[48] = createBlock((659.741, 434.444, -57.5852), (0, 0, 0));
level.bunkerList[49] = createBlock((659.741, 434.444, -40.4602), (0, 0, 0));
level.bunkerList[50] = createBlock((659.741, 434.444, -23.3352), (0, 0, 0));
level.bunkerList[51] = createBlock((659.741, 434.444, -6.2102), (0, 0, 0));
level.bunkerList[52] = createBlock((665.134, 508.027, -57.2218), (0, 0, 0));
level.bunkerList[53] = createBlock((665.134, 508.027, -40.0968), (0, 0, 0));
level.bunkerList[54] = createBlock((665.134, 508.027, -22.9718), (0, 0, 0));
level.bunkerList[55] = createBlock((665.134, 508.027, -5.84684), (0, 0, 0));
level.bunkerList[56] = createBlock((498.405, 99.3426, -60.375), (0, 0, 0));
level.bunkerList[57] = createBlock((498.405, 99.3426, -43.25), (0, 0, 0));
level.bunkerList[58] = createBlock((498.405, 99.3426, -26.125), (0, 0, 0));
level.bunkerList[59] = createBlock((498.405, 99.3426, -9), (0, 0, 0));
level.bunkerList[60] = createBlock((546.436, 140.449, -60.375), (0, 90, 0));
level.bunkerList[61] = createBlock((546.632, 148.426, -43.1853), (0, 90, 0));
level.bunkerList[62] = createBlock((546.632, 148.426, -26.0603), (0, 90, 0));
level.bunkerList[63] = createBlock((546.632, 148.426, -8.93533), (0, 90, 0));
level.bunkerList[64] = createBlock((521.673, -40.2818, -63.1536), (0, 90, 0));
level.bunkerList[65] = createBlock((520.113, -35.2232, -46.0286), (0, 90, 0));
level.bunkerList[66] = createBlock((520.113, -35.2232, -28.9036), (0, 90, 0));
level.bunkerList[67] = createBlock((520.113, -35.2232, -11.7786), (0, 90, 0));
level.bunkerList[68] = createBlock((478.56, 31.8404, -61.9324), (0, 0, 0));
level.bunkerList[69] = createBlock((478.56, 31.8404, -44.8074), (0, 0, 0));
level.bunkerList[70] = createBlock((478.56, 31.8404, -27.6824), (0, 0, 0));
level.bunkerList[71] = createBlock((478.56, 31.8404, -10.5574), (0, 0, 0));
level.bunkerList[72] = createBlock((566.062, -88.474, -64.1349), (0, 0, 0));
level.bunkerList[73] = createBlock((566.062, -88.474, -47.0099), (0, 0, 0));
level.bunkerList[74] = createBlock((566.062, -88.474, -29.8849), (0, 0, 0));
level.bunkerList[75] = createBlock((566.062, -88.474, -12.7599), (0, 0, 0));
level.bunkerList[76] = createBlock((-795.134, 884.199, 4.625), (0, 0, 0));
level.bunkerList[77] = createBlock((-821.271, 811.73, 4.23803), (0, 0, 0));
level.bunkerList[78] = createBlock((-814.727, 740.402, 3.94031), (0, 0, 0));
level.minigunList[0] = createMinigun((-543.027, 297.052, 79.125), (0, -11.4691, 0));
level.minigunList[1] = createMinigun((618.046, 44, 79.125), (0, -172.767, 0));
level.bunkerList[0] = createBlock((641.363, -222.019, -53.8043), (0, 0, 0));
level.bunkerList[1] = createBlock((641.363, -222.019, -26.6793), (0, 0, 0));
level.bunkerList[2] = createBlock((641.363, -222.019, 0.445702), (0, 0, 0));
level.bunkerList[3] = createBlock((641.363, -222.019, 27.5707), (0, 0, 0));
level.bunkerList[4] = createBlock((636.171, -170.378, -53.7971), (0, 0, 0));
level.bunkerList[5] = createBlock((636.171, -170.378, -26.6721), (0, 0, 0));
level.bunkerList[6] = createBlock((636.171, -170.378, 0.452888), (0, 0, 0));
level.bunkerList[7] = createBlock((636.171, -170.378, 27.5779), (0, 0, 0));
level.bunkerList[8] = createBlock((625.509, -77.298, -54.435), (0, 0, 0));
level.bunkerList[9] = createBlock((625.509, -77.298, -27.31), (0, 0, 0));
level.bunkerList[10] = createBlock((625.509, -77.298, -0.184952), (0, 0, 0));
level.bunkerList[11] = createBlock((625.509, -77.298, 26.94), (0, 0, 0));
level.bunkerList[12] = createBlock((611.125, -16.24, -4.875), (0, 0, 0));
level.bunkerList[13] = createBlock((611.125, -16.24, -4.875), (0, 0, 0));
level.bunkerList[14] = createBlock((611.125, -16.24, -4.875), (0, 0, 0));
level.bunkerList[15] = createBlock((597.648, -27.7627, 22.25), (0, 0, 0));
level.bunkerList[16] = createBlock((573.022, 99.6875, -50.375), (0, 0, 0));
level.bunkerList[17] = createBlock((573.022, 99.6875, -23.25), (0, 0, 0));
level.bunkerList[18] = createBlock((573.022, 99.6875, 3.875), (0, 0, 0));
level.bunkerList[19] = createBlock((573.022, 99.6875, 3.875), (0, 0, 0));
level.bunkerList[20] = createBlock((698.467, 436.61, -47.0164), (0, 0, 0));
level.bunkerList[21] = createBlock((698.467, 436.61, -19.8914), (0, 0, 0));
level.bunkerList[22] = createBlock((698.467, 436.61, 7.23359), (0, 0, 0));
level.bunkerList[23] = createBlock((693.085, 435.168, 34.3586), (0, 0, 0));
level.bunkerList[24] = createBlock((675.041, 493.424, -47.1351), (0, 0, 0));
level.bunkerList[25] = createBlock((675.041, 493.424, -20.0101), (0, 0, 0));
level.bunkerList[26] = createBlock((675.041, 493.424, 7.11488), (0, 0, 0));
level.bunkerList[27] = createBlock((675.041, 493.424, 34.2399), (0, 0, 0));
level.bunkerList[28] = createBlock((741.782, 812.786, -53.9976), (0, 0, 0));
level.bunkerList[29] = createBlock((740.953, 815.88, -26.8726), (0, 0, 0));
level.bunkerList[30] = createBlock((737.165, 830.018, 0.252441), (0, 0, 0));
level.bunkerList[31] = createBlock((737.165, 830.018, 27.3774), (0, 0, 0));
level.bunkerList[32] = createBlock((732.132, 882.787, -53.3704), (0, 0, 0));
level.bunkerList[33] = createBlock((732.132, 882.787, -26.2454), (0, 0, 0));
level.bunkerList[34] = createBlock((732.132, 882.787, 0.879646), (0, 0, 0));
level.bunkerList[35] = createBlock((732.132, 882.787, 28.0046), (0, 0, 0));
level.bunkerList[36] = createBlock((709.128, 940.95, -52.7018), (0, 0, 0));
level.bunkerList[37] = createBlock((709.128, 940.95, -25.5768), (0, 0, 0));
level.bunkerList[38] = createBlock((709.128, 940.95, 1.54823), (0, 0, 0));
level.bunkerList[39] = createBlock((709.128, 940.95, 28.6732), (0, 0, 0));
level.bunkerList[40] = createBlock((-612.526, 663.375, -54.5854), (0, 0, 0));
}
Radiation()
{
}
WMD()
{
}
Villa()
{
}
{
level.scoreInfo = [];
level.xpScale = GetDvarInt( #"scr_xpscale" );
level.codPointsXpScale = GetDvarFloat( #"scr_codpointsxpscale" );
level.codPointsMatchScale = GetDvarFloat( #"scr_codpointsmatchscale" );
level.codPointsChallengeScale = GetDvarFloat( #"scr_codpointsperchallenge" );
level.rankXpCap = GetDvarInt( #"scr_rankXpCap" );
level.codPointsCap = GetDvarInt( #"scr_codPointsCap" );
level.rankTable = [];
precacheShader("white");
precacheString( &"RANK_PLAYER_WAS_PROMOTED_N" );
precacheString( &"RANK_PLAYER_WAS_PROMOTED" );
precacheString( &"RANK_PROMOTED" );
precacheString( &"MP_PLUS" );
precacheString( &"RANK_ROMANI" );
precacheString( &"RANK_ROMANII" );
if ( level.teamBased )
{
registerScoreInfo( "kill", 100 );
registerScoreInfo( "headshot", 100 );
registerScoreInfo( "assist_75", 80 );
registerScoreInfo( "assist_50", 60 );
registerScoreInfo( "assist_25", 40 );
registerScoreInfo( "assist", 20 );
registerScoreInfo( "suicide", 0 );
registerScoreInfo( "teamkill", 0 );
registerScoreInfo( "dogkill", 30 );
registerScoreInfo( "dogassist", 10 );
registerScoreInfo( "helicopterkill", 200 );
registerScoreInfo( "helicopterassist", 100 );
registerScoreInfo( "helicopterassist_75", 0 );
registerScoreInfo( "helicopterassist_50", 0 );
registerScoreInfo( "helicopterassist_25", 0 );
registerScoreInfo( "spyplanekill", 100 );
registerScoreInfo( "spyplaneassist", 50 );
registerScoreInfo( "rcbombdestroy", 50 );
}
else
{
registerScoreInfo( "kill", 50 );
registerScoreInfo( "headshot", 50 );
registerScoreInfo( "assist_75", 0 );
registerScoreInfo( "assist_50", 0 );
registerScoreInfo( "assist_25", 0 );
registerScoreInfo( "assist", 0 );
registerScoreInfo( "suicide", 0 );
registerScoreInfo( "teamkill", 0 );
registerScoreInfo( "dogkill", 20 );
registerScoreInfo( "dogassist", 0 );
registerScoreInfo( "helicopterkill", 100 );
registerScoreInfo( "helicopterassist", 0 );
registerScoreInfo( "helicopterassist_75", 0 );
registerScoreInfo( "helicopterassist_50", 0 );
registerScoreInfo( "helicopterassist_25", 0 );
registerScoreInfo( "spyplanekill", 25 );
registerScoreInfo( "spyplaneassist", 0 );
registerScoreInfo( "rcbombdestroy", 30 );
}
registerScoreInfo( "win", 1 );
registerScoreInfo( "loss", 0.5 );
registerScoreInfo( "tie", 0.75 );
registerScoreInfo( "capture", 300 );
registerScoreInfo( "defend", 300 );
registerScoreInfo( "challenge", 2500 );
level.maxRank = int(tableLookup( "mp/rankTable.csv", 0, "maxrank", 1 ));
level.maxPrestige = int(tableLookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ));
pId = 0;
rId = 0;
for ( pId = 0; pId <= level.maxPrestige; pId++ )
{
// the rank icons are different
for ( rId = 0; rId <= level.maxRank; rId++ )
precacheShader( tableLookup( "mp/rankIconTable.csv", 0, rId, pId+1 ) );
}
rankId = 0;
rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
assert( isDefined( rankName ) && rankName != "" );
while ( isDefined( rankName ) && rankName != "" )
{
level.rankTable[rankId][1] = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
level.rankTable[rankId][2] = tableLookup( "mp/ranktable.csv", 0, rankId, 2 );
level.rankTable[rankId][3] = tableLookup( "mp/ranktable.csv", 0, rankId, 3 );
level.rankTable[rankId][7] = tableLookup( "mp/ranktable.csv", 0, rankId, 7 );
level.rankTable[rankId][14] = tableLookup( "mp/ranktable.csv", 0, rankId, 14 );
precacheString( tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 ) );
rankId++;
rankName = tableLookup( "mp/ranktable.csv", 0, rankId, 1 );
}
level.numStatsMilestoneTiers = 4;
level.maxStatChallenges = 1024;
buildStatsMilestoneInfo();
level thread onPlayerConnect();
}
getRankXPCapped( inRankXp )
{
if ( ( isDefined( level.rankXpCap ) ) && level.rankXpCap && ( level.rankXpCap <= inRankXp ) )
{
return level.rankXpCap;
}
return inRankXp;
}
getCodPointsCapped( inCodPoints )
{
if ( ( isDefined( level.codPointsCap ) ) && level.codPointsCap && ( level.codPointsCap <= inCodPoints ) )
{
return level.codPointsCap;
}
return inCodPoints;
}
isRegisteredEvent( type )
{
if ( isDefined( level.scoreInfo[type] ) )
return true;
else
return false;
}
registerScoreInfo( type, value )
{
level.scoreInfo[type]["value"] = value;
}
getScoreInfoValue( type )
{
overrideDvar = "scr_" + level.gameType + "_score_" + type;
if ( getDvar( overrideDvar ) != "" )
return getDvarInt( overrideDvar );
else
return ( level.scoreInfo[type]["value"] );
}
getScoreInfoLabel( type )
{
return ( level.scoreInfo[type]["label"] );
}
getRankInfoMinXP( rankId )
{
return int(level.rankTable[rankId][2]);
}
getRankInfoXPAmt( rankId )
{
return int(level.rankTable[rankId][3]);
}
getRankInfoMaxXp( rankId )
{
return int(level.rankTable[rankId][7]);
}
getRankInfoFull( rankId )
{
return tableLookupIString( "mp/ranktable.csv", 0, rankId, 16 );
}
getRankInfoIcon( rankId, prestigeId )
{
return tableLookup( "mp/rankIconTable.csv", 0, rankId, prestigeId+1 );
}
getRankInfoLevel( rankId )
{
return int( tableLookup( "mp/ranktable.csv", 0, rankId, 13 ) );
}
getRankInfoCodPointsEarned( rankId )
{
return int( tableLookup( "mp/ranktable.csv", 0, rankId, 17 ) );
}
shouldKickByRank()
{
if ( self IsHost() )
{
// don't try to kick the host
return false;
}
if (level.rankCap > 0 && self.pers["rank"] > level.rankCap)
{
return true;
}
if ( ( level.rankCap > 0 ) && ( level.minPrestige == 0 ) && ( self.pers["plevel"] > 0 ) )
{
return true;
}
if ( level.minPrestige > self.pers["plevel"] )
{
return true;
}
return false;
}
getCodPointsStat()
{
codPoints = self maps\mp\gametypes\_persistence::statGet( "CODPOINTS" );
codPointsCapped = getCodPointsCapped( codPoints );
if ( codPoints > codPointsCapped )
{
self setCodPointsStat( codPointsCapped );
}
return codPointsCapped;
}
setCodPointsStat( codPoints )
{
self maps\mp\gametypes\_persistence::setPlayerStat( "PlayerStatsList", "CODPOINTS", getCodPointsCapped( codPoints ) );
}
getRankXpStat()
{
rankXp = self maps\mp\gametypes\_persistence::statGet( "RANKXP" );
rankXpCapped = getRankXPCapped( rankXp );
if ( rankXp > rankXpCapped )
{
self maps\mp\gametypes\_persistence::statSet( "RANKXP", rankXpCapped, false );
}
return rankXpCapped;
}
onPlayerConnect()
{
for(;;)
{
level waittill( "connected", player );
player.pers["rankxp"] = player getRankXpStat();
player.pers["codpoints"] = player getCodPointsStat();
player.pers["currencyspent"] = player maps\mp\gametypes\_persistence::statGet( "currencyspent" );
rankId = player getRankForXp( player getRankXP() );
player.pers["rank"] = rankId;
player.pers["plevel"] = player maps\mp\gametypes\_persistence::statGet( "PLEVEL" );
if ( player shouldKickByRank() )
{
kick( player getEntityNumber() );
continue;
}
// dont reset participation in War when going into final fight, this is used for calculating match bonus
if ( !isDefined( player.pers["participation"] ) || !( (level.gameType == "twar") && (0 < game["roundsplayed"]) && (0 < player.pers["participation"]) ) )
player.pers["participation"] = 0;
player.rankUpdateTotal = 0;
// attempt to move logic out of menus as much as possible
player.cur_rankNum = rankId;
assertex( isdefined(player.cur_rankNum), "rank: "+ rankId + " does not have an index, check mp/ranktable.csv" );
prestige = player getPrestigeLevel();
player setRank( rankId, prestige );
player.pers["prestige"] = prestige;
if ( !isDefined( player.pers["summary"] ) )
{
player.pers["summary"] = [];
player.pers["summary"]["xp"] = 0;
player.pers["summary"]["score"] = 0;
player.pers["summary"]["challenge"] = 0;
player.pers["summary"]["match"] = 0;
player.pers["summary"]["misc"] = 0;
player.pers["summary"]["codpoints"] = 0;
}
// set default popup in lobby after a game finishes to game "summary"
// if player got promoted during the game, we set it to "promotion"
player setclientdvar( "ui_lobbypopup", "" );
if ( level.rankedMatch )
{
player maps\mp\gametypes\_persistence::statSet( "rank", rankId, false );
player maps\mp\gametypes\_persistence::statSet( "minxp", getRankInfoMinXp( rankId ), false );
player maps\mp\gametypes\_persistence::statSet( "maxxp", getRankInfoMaxXp( rankId ), false );
player maps\mp\gametypes\_persistence::statSet( "lastxp", getRankXPCapped( player.pers["rankxp"] ), false );
}
player.explosiveKills[0] = 0;
player.xpGains = [];
player thread onPlayerSpawned();
player thread onJoinedTeam();
player thread onJoinedSpectators();
}
}
onJoinedTeam()
{
self endon("disconnect");
for(;;)
{
self waittill("joined_team");
self thread removeRankHUD();
}
}
onJoinedSpectators()
{
self endon("disconnect");
for(;;)
{
self waittill("joined_spectators");
self thread removeRankHUD();
}
}
onPlayerSpawned()
{
self endon("disconnect");
for(;;)
{
self waittill("spawned_player");
if(!isdefined(self.hud_rankscroreupdate))
{
self.hud_rankscroreupdate = NewScoreHudElem(self);
self.hud_rankscroreupdate.horzAlign = "center";
self.hud_rankscroreupdate.vertAlign = "middle";
self.hud_rankscroreupdate.alignX = "center";
self.hud_rankscroreupdate.alignY = "middle";
self.hud_rankscroreupdate.x = 0;
if( self IsSplitscreen() )
self.hud_rankscroreupdate.y = -15;
else
self.hud_rankscroreupdate.y = -60;
self.hud_rankscroreupdate.font = "default";
self.hud_rankscroreupdate.fontscale = 2.0;
self.hud_rankscroreupdate.archived = false;
self.hud_rankscroreupdate.color = (0.5,0.5,0.5);
self.hud_rankscroreupdate.alpha = 0;
self.hud_rankscroreupdate maps\mp\gametypes\_hud::fontPulseInit();
self.hud_rankscroreupdate.overrridewhenindemo = true;
}
}
}
incCodPoints( amount )
{
if( !isRankEnabled() )
return;
if( level.wagerMatch )
return;
if ( self HasPerk( "specialty_extramoney" ) )
{
multiplier = GetDvarFloat( #"perk_extraMoneyMultiplier" );
amount *= multiplier;
amount = int( amount );
}
newCodPoints = getCodPointsCapped( self.pers["codpoints"] + amount );
if ( newCodPoints > self.pers["codpoints"] )
{
self.pers["summary"]["codpoints"] += ( newCodPoints - self.pers["codpoints"] );
}
self.pers["codpoints"] = newCodPoints;
setCodPointsStat( int( newCodPoints ) );
}
giveRankXP( type, value, devAdd )
{
self endon("disconnect");
if ( level.teamBased && (!level.playerCount["allies"] || !level.playerCount["axis"]) && !isDefined( devAdd ) )
return;
else if ( !level.teamBased && (level.playerCount["allies"] + level.playerCount["axis"] < 2) && !isDefined( devAdd ) )
return;
if( !isRankEnabled() )
return;
if( level.wagerMatch || !level.onlineGame || ( GetDvarInt( #"xblive_privatematch" ) && !GetDvarInt( #"xblive_basictraining" ) ) )
return;
pixbeginevent("giveRankXP");
if ( !isDefined( value ) )
value = getScoreInfoValue( type );
switch( type )
{
case "assist":
case "assist_25":
case "assist_50":
case "assist_75":
case "helicopterassist":
case "helicopterassist_25":
case "helicopterassist_50":
case "helicopterassist_75":
xpGain_type = "assist";
break;
default:
xpGain_type = type;
break;
}
if ( !isDefined( self.xpGains[xpGain_type] ) )
self.xpGains[xpGain_type] = 0;
// Blackbox
if( level.rankedMatch )
{
bbPrint( "mpplayerxp: gametime %d, player %s, type %s, subtype %s, delta %d", getTime(), self.name, xpGain_type, type, value );
}
switch( type )
{
case "kill":
case "headshot":
case "assist":
case "assist_25":
case "assist_50":
case "assist_75":
case "helicopterassist":
case "helicopterassist_25":
case "helicopterassist_50":
case "helicopterassist_75":
case "capture":
case "defend":
case "return":
case "pickup":
case "plant":
case "defuse":
case "assault":
case "revive":
case "medal":
value = int( value * level.xpScale );
break;
default:
if ( level.xpScale == 0 )
value = 0;
break;
}
self.xpGains[xpGain_type] += value;
xpIncrease = self incRankXP( value );
if ( level.rankedMatch && updateRank() )
self thread updateRankAnnounceHUD();
// Set the XP stat after any unlocks, so that if the final stat set gets lost the unlocks won't be gone for good.
if ( value != 0 )
{
self syncXPStat();
}
if ( isDefined( self.enableText ) && self.enableText && !level.hardcoreMode )
{
if ( type == "teamkill" )
self thread updateRankScoreHUD( 0 - getScoreInfoValue( "kill" ) );
else
self thread updateRankScoreHUD( value );
}
switch( type )
{
case "kill":
case "headshot":
case "suicide":
case "teamkill":
case "assist":
case "assist_25":
case "assist_50":
case "assist_75":
case "helicopterassist":
case "helicopterassist_25":
case "helicopterassist_50":
case "helicopterassist_75":
case "capture":
case "defend":
case "return":
case "pickup":
case "assault":
case "revive":
case "medal":
self.pers["summary"]["score"] += value;
incCodPoints( round_this_number( value * level.codPointsXPScale ) );
break;
case "win":
case "loss":
case "tie":
self.pers["summary"]["match"] += value;
incCodPoints( round_this_number( value * level.codPointsMatchScale ) );
break;
case "challenge":
self.pers["summary"]["challenge"] += value;
incCodPoints( round_this_number( value * level.codPointsChallengeScale ) );
break;
default:
self.pers["summary"]["misc"] += value; //keeps track of ungrouped match xp reward
self.pers["summary"]["match"] += value;
incCodPoints( round_this_number( value * level.codPointsMatchScale ) );
break;
}
self.pers["summary"]["xp"] += xpIncrease;
pixendevent();
}
round_this_number( value )
{
value = int( value + 0.5 );
return value;
}
updateRank()
{
newRankId = self getRank();
if ( newRankId == self.pers["rank"] )
return false;
oldRank = self.pers["rank"];
rankId = self.pers["rank"];
self.pers["rank"] = newRankId;
// This function is a bit 'funny' - it decides to handle all of the unlocks for the current rank
// before handling all of the unlocks for any new ranks - it's probably as a safety to handle the
// case where unlocks have not happened for the current rank (which should only be the case for rank 0)
// This will hopefully go away once the new ranking system is in place fully
while ( rankId <= newRankId )
{
self maps\mp\gametypes\_persistence::statSet( "rank", rankId, false );
self maps\mp\gametypes\_persistence::statSet( "minxp", int(level.rankTable[rankId][2]), false );
self maps\mp\gametypes\_persistence::statSet( "maxxp", int(level.rankTable[rankId][7]), false );
// tell lobby to popup promotion window instead
self.setPromotion = true;
if ( level.rankedMatch && level.gameEnded && !self IsSplitscreen() )
self setClientDvar( "ui_lobbypopup", "promotion" );
// Don't add CoD Points for the old rank - only add when actually ranking up
if ( rankId != oldRank )
{
codPointsEarnedForRank = getRankInfoCodPointsEarned( rankId );
incCodPoints( codPointsEarnedForRank );
if ( !IsDefined( self.pers["rankcp"] ) )
{
self.pers["rankcp"] = 0;
}
self.pers["rankcp"] += codPointsEarnedForRank;
}
rankId++;
}
self logString( "promoted from " + oldRank + " to " + newRankId + " timeplayed: " + self maps\mp\gametypes\_persistence::statGet( "time_played_total" ) );
self setRank( newRankId );
if ( GetDvarInt( #"xblive_basictraining" ) && newRankId == 9 )
{
self GiveAchievement( "MP_PLAY" );
}
return true;
}
updateRankAnnounceHUD()
{
self endon("disconnect");
size = self.rankNotifyQueue.size;
self.rankNotifyQueue[size] = spawnstruct();
display_rank_column = 14;
self.rankNotifyQueue[size].rank = int( level.rankTable[ self.pers["rank"] ][ display_rank_column ] );
self.rankNotifyQueue[size].prestige = self.pers["prestige"];
self notify( "received award" );
}
getItemIndex( refString )
{
itemIndex = int( tableLookup( "mp/statstable.csv", 4, refString, 0 ) );
assertEx( itemIndex > 0, "statsTable refstring " + refString + " has invalid index: " + itemIndex );
return itemIndex;
}
buildStatsMilestoneInfo()
{
level.statsMilestoneInfo = [];
for ( tierNum = 1; tierNum <= level.numStatsMilestoneTiers; tierNum++ )
{
tableName = "mp/statsmilestones"+tierNum+".csv";
moveToNextTable = false;
for( idx = 0; idx < level.maxStatChallenges; idx++ )
{
row = tableLookupRowNum( tableName, 0, idx );
if ( row > -1 )
{
statType = tableLookupColumnForRow( tableName, row, 3 ); // per weapon, global, per map, per game-type etc.
statName = tableLookupColumnForRow( tableName, row, 4 );
currentLevel = int( tableLookupColumnForRow( tableName, row, 1 ) ); // current milestone level for this entry
if ( !isDefined( level.statsMilestoneInfo[statType] ) )
{
level.statsMilestoneInfo[statType] = [];
}
if ( !isDefined( level.statsMilestoneInfo[statType][statName] ) )
{
level.statsMilestoneInfo[statType][statName] = [];
}
level.statsMilestoneInfo[statType][statName][currentLevel] = [];
level.statsMilestoneInfo[statType][statName][currentLevel]["index"] = idx;
level.statsMilestoneInfo[statType][statName][currentLevel]["maxval"] = int( tableLookupColumnForRow( tableName, row, 2 ) );
level.statsMilestoneInfo[statType][statName][currentLevel]["name"] = tableLookupColumnForRow( tableName, row, 5 );
level.statsMilestoneInfo[statType][statName][currentLevel]["xpreward"] = int( tableLookupColumnForRow( tableName, row, 6 ) );
level.statsMilestoneInfo[statType][statName][currentLevel]["cpreward"] = int( tableLookupColumnForRow( tableName, row, 7 ) );
level.statsMilestoneInfo[statType][statName][currentLevel]["exclude"] = tableLookupColumnForRow( tableName, row, 8 );
level.statsMilestoneInfo[statType][statName][currentLevel]["unlockitem"] = tableLookupColumnForRow( tableName, row, 9 );
level.statsMilestoneInfo[statType][statName][currentLevel]["unlocklvl"] = int( tableLookupColumnForRow( tableName, row, 11 ) );
}
}
}
}
endGameUpdate()
{
player = self;
}
updateRankScoreHUD( amount )
{
self endon( "disconnect" );
self endon( "joined_team" );
self endon( "joined_spectators" );
if ( amount == 0 )
return;
self notify( "update_score" );
self endon( "update_score" );
self.rankUpdateTotal += amount;
wait ( 0.05 );
if( isDefined( self.hud_rankscroreupdate ) )
{
if ( self.rankUpdateTotal < 0 )
{
self.hud_rankscroreupdate.label = &"";
self.hud_rankscroreupdate.color = (0.73,0.19,0.19);
}
else
{
self.hud_rankscroreupdate.label = &"MP_PLUS";
self.hud_rankscroreupdate.color = (1,1,0.5);
}
self.hud_rankscroreupdate setValue(self.rankUpdateTotal);
self.hud_rankscroreupdate.alpha = 0.85;
self.hud_rankscroreupdate thread maps\mp\gametypes\_hud::fontPulse( self );
wait 1;
self.hud_rankscroreupdate fadeOverTime( 0.75 );
self.hud_rankscroreupdate.alpha = 0;
self.rankUpdateTotal = 0;
}
}
removeRankHUD()
{
if(isDefined(self.hud_rankscroreupdate))
self.hud_rankscroreupdate.alpha = 0;
}
getRank()
{
rankXp = getRankXPCapped( self.pers["rankxp"] );
rankId = self.pers["rank"];
if ( rankXp < (getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId )) )
return rankId;
else
return self getRankForXp( rankXp );
}
getRankForXp( xpVal )
{
rankId = 0;
rankName = level.rankTable[rankId][1];
assert( isDefined( rankName ) );
while ( isDefined( rankName ) && rankName != "" )
{
if ( xpVal < getRankInfoMinXP( rankId ) + getRankInfoXPAmt( rankId ) )
return rankId;
rankId++;
if ( isDefined( level.rankTable[rankId] ) )
rankName = level.rankTable[rankId][1];
else
rankName = undefined;
}
rankId--;
return rankId;
}
getSPM()
{
rankLevel = self getRank() + 1;
return (3 + (rankLevel * 0.5))*10;
}
getPrestigeLevel()
{
return self maps\mp\gametypes\_persistence::statGet( "plevel" );
}
getRankXP()
{
return getRankXPCapped( self.pers["rankxp"] );
}
incRankXP( amount )
{
if ( !level.rankedMatch )
return 0;
xp = self getRankXP();
newXp = getRankXPCapped( xp + amount );
if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) )
newXp = getRankInfoMaxXP( level.maxRank );
xpIncrease = getRankXPCapped( newXp ) - self.pers["rankxp"];
if ( xpIncrease < 0 )
{
xpIncrease = 0;
}
self.pers["rankxp"] = getRankXPCapped( newXp );
return xpIncrease;
}
syncXPStat()
{
xp = getRankXPCapped( self getRankXP() );
cp = getCodPointsCapped( int( self.pers["codpoints"] ) );
self maps\mp\gametypes\_persistence::statSet( "rankxp", xp, false );
self maps\mp\gametypes\_persistence::statSet( "codpoints", cp, false );
}