#include #define MIN_RACERS 1 #define MAX_RACERS 15 #define MAX_TEAMS 16 #define KILL_REWARD 500 #define START_MONEY 5000 #define MSG(%1) SendClientMessage(playerid, 0x0000FFFF, %1); #define dcmd(%1,%2) if ((strcmp(cmdtext, "/%1", true, %2 + 1) == 0) && (((cmdtext[%2 + 1] == 0) && (dcmd_%1(playerid, ""))) || ((cmdtext[%2 + 1] == 32) && (dcmd_%1(playerid, cmdtext[%2 + 2]))))) return 1 //new curcheck[MAX_PLAYERS]; //new curlap[MAX_PLAYERS]; new racers[MAX_PLAYERS] = {0, ...}; new finishers[3] = {0, 0, 0}; new declared = 0; new racerpos[MAX_PLAYERS]; new check[MAX_PLAYERS]; new Float:vehpoints[][4] = { {2133.04, 1009.75, 10.48, 270.00}, {-303.78, 1032.32, 19.08, 268.50}, {-1030.24, -1050.18, 129.00, 0.00}, {1144.45, -1101.26, 25.35, 300.00}, {-2213.55, 112.76, 34.92, 88.47}, {-2572.03, 1148.56, 55.73, 337.84}, {2216.90, -1160.40, 24.72, 270.80}, {2229.00, -1173.79, 24.73, 90.55}, {926.91, -1178.94, 16.50, 123.30}, {927.52, -1182.36, 16.50, 123.30}, {927.72, -1185.04, 16.50, 123.30}, {1586.94, 1190.64, 10.86, 180.00}, {837.74, -1206.57, 16.50, 153.26}, {-1778.17, 1207.07, 25.11, 91.93}, {897.51, -1207.99, 16.50, 86.59}, {-2516.59, 1228.91, 36.42, 211.50}, {861.35, -1240.75, 14.50, 180.13}, {2207.42, 1286.13, 10.56, 180.00}, {926.45, -1292.29, 13.60, 270.00}, {-395.19, -1293.18, 30.79, 0.00}, {-2273.19, -130.80, 33.90, 270.39}, {2412.52, -1326.48, 23.73, 177.91}, {-192.89, -1331.30, 21.50, 0.00}, {736.23, -1334.19, 13.54, 267.81}, {1178.04, -1338.17, 13.40, 269.49}, {-186.64, -1339.21, 6.00, 0.00}, {2445.50, -1340.80, 23.50, 180.00}, {736.96, -1343.90, 13.51, 273.77}, {1544.00, -1352.00, 329.00, 95.00}, {1174.75, 1364.83, 10.12, 280.03}, {1174.99, 1366.47, 10.12, 282.22}, {1174.46, 1368.35, 10.12, 283.05}, {-289.55, -1389.62, 10.00, 0.00}, {-2693.38, -139.45, 3.93, 90.08}, {1074.96, 1395.41, 5.30, 36.76}, {-540.04, -1396.14, 15.00, 0.00}, {2229.30, 1402.98, 10.81, 180.00}, {2033.88, -1432.66, 16.64, 177.82}, {-379.50, -1443.11, 25.72, 88.92}, {2596.74, 1444.24, 10.32, 178.27}, {1751.51, -1455.10, 12.55, 263.55}, {714.34, -1488.27, 0.93, 270.00}, {-1446.23, -1494.73, 101.05, 6.00}, {-1220.09, -150.95, 13.89, 519.00}, {-273.96, -1507.59, 5.00, 0.00}, {1971.91, 1560.66, 10.96, 262.61}, {-1460.86, -1566.73, 101.05, 2.00}, {-1439.64, -1576.82, 101.05, 264.11}, {-2338.56, -1593.83, 482.94, 20.75}, {1091.89, 1612.63, 13.00, 206.75}, {-2343.37, -1613.94, 482.97, 105.52}, {1104.93, 1614.80, 12.55, 85.64}, {2499.17, -1648.26, 13.00, 158.61}, {2435.30, -1671.84, 12.80, 90.00}, {2676.69, -1673.75, 9.40, 178.82}, {2692.02, -1674.02, 9.46, 178.82}, {2527.19, -1677.09, 19.20, 90.00}, {1122.29, -1699.76, 13.43, 270.00}, {1561.86, -1701.95, 27.94, 0.00}, {2408.15, -1719.46, 13.66, 0.58}, {2615.23, -1731.22, 5.94, 140.82}, {2251.02, -1788.66, 12.76, 358.95}, {2163.79, 1810.22, 10.57, 180.00}, {-637.09, 1811.95, 1.70, 180.00}, {682.16, -1867.45, 4.82, 180.00}, {273.00, -1876.03, 5.29, 271.51}, {1803.38, -1931.05, 13.65, 0.00}, {2615.31, 1939.70, 10.12, 148.17}, {1419.69, 1947.99, 10.95, 6.96}, {277.54, 1989.34, 17.20, 270.00}, {307.35, 1990.25, 17.20, 320.00}, {-2265.33, 200.64, 34.97, 270.00}, {2685.98, -2016.20, 12.55, 0.33}, {281.23, 2022.32, 17.20, 270.00}, {307.35, 2031.35, 17.20, 320.00}, {1763.82, 2075.75, 9.90, 179.47}, {1772.66, -2096.59, 13.98, 182.75}, {1747.86, -2098.03, 13.27, 180.00}, {1923.93, -2118.88, 13.35, 0.00}, {1772.09, -2125.10, 13.04, 0.34}, {-2407.60, -2177.09, 32.88, 321.69}, {-2406.25, -2180.84, 33.38, 180.00}, {-2408.51, -2186.02, 32.88, 321.69}, {-1190.09, 22.13, 13.89, 45.00}, {-1387.09, -227.95, 13.89, 312.00}, {-2202.51, -2315.98, 30.11, 319.68}, {-2227.00, 2329.00, 8.00, 180.00}, {-1629.28, -236.13, 13.89, 129.00}, {-1951.81, 2393.83, 50.08, 292.00}, {-2223.87, 2409.86, 0.00, 49.05}, {2092.00, 2415.00, 75.00, 260.00}, {-2000.24, -2415.50, 29.76, -132.00}, {-2247.83, 2425.67, 0.00, 220.21}, {-810.55, 2430.36, 156.96, 336.53}, {-2085.22, -2437.52, 30.30, 142.00}, {-1969.80, -2437.93, 29.76, -82.50}, {-2151.30, -2440.13, 29.82, 324.75}, {-2147.03, -2443.75, 29.82, 324.75}, {-1969.80, -2443.90, 29.76, -19.00}, {-2227.10, 2445.77, 0.00, 229.37}, {-2140.97, -2448.73, 29.82, 144.75}, {886.37, -25.66, 63.24, 157.62}, {-2087.36, -2519.01, 29.92, 90.91}, {-16.65, -2521.16, 36.36, 210.00}, {-2048.85, -2521.27, 31.12, 171.02}, {-1507.16, 2525.45, 55.18, 358.57}, {435.27, 2527.52, 16.37, 90.00}, {2282.69, 2535.87, 10.39, 180.00}, {325.11, 2537.10, 17.52, 180.00}, {348.00, 2537.10, 17.42, 180.00}, {365.51, 2537.10, 17.42, 180.00}, {383.17, 2538.89, 16.53, 180.00}, {292.00, 2542.00, 16.00, 180.00}, {-2294.92, 2546.97, 5.91, 290.93}, {-1952.80, 258.79, 39.90, 259.10}, {-1950.50, 259.70, 34.29, 53.79}, {1272.23, 2603.03, 10.48, 117.00}, {-1483.68, 2614.83, 58.28, 337.93}, {-1399.71, 2628.58, 55.78, 271.79}, {-959.08, 2629.20, 43.22, 110.00}, {-1952.59, 265.70, 39.90, 292.79}, {-1550.40, 2687.54, 56.22, 90.00}, {1567.38, 2691.11, 10.26, 279.98}, {-910.27, 2699.06, 42.79, 110.87}, {2619.00, 2721.00, 37.00, 90.00}, {2028.44, 2731.10, 10.52, 268.99}, {-1957.69, 277.00, 34.29, 133.39}, {-2751.79, -281.50, 6.80, 0.00}, {-1608.72, 286.14, 6.21, 55.00}, {-1922.18, 288.33, 40.84, 180.00}, {1229.66, 297.68, 19.05, 154.95}, {-1956.30, 297.70, 34.29, 64.80}, {81.05, 3.32, 1.50, 0.00}, {-2430.21, 320.83, 34.97, 245.00}, {-1253.09, -347.95, 13.89, 219.00}, {-1180.86, -351.95, 13.94, 0.00}, {-1289.09, -353.95, 13.89, 219.00}, {-2118.17, -4.09, 35.02, 270.14}, {-2151.00, -409.10, 34.09, 307.20}, {-112.40, -41.81, 3.25, 160.00}, {-1693.44, 432.28, 6.99, 300.90}, {-1673.93, 439.01, 7.01, 136.00}, {-1363.00, -484.03, 13.89, 200.50}, {16.87, 49.99, 3.00, 0.00}, {-1286.00, 501.50, 18.00, 270.00}, {-1374.09, -503.14, 13.89, 249.00}, {-1426.41, 506.83, 2.94, 144.61}, {-1443.08, -523.20, 13.99, 267.00}, {-2057.00, 58.00, 28.00, 90.00}, {-2486.04, 59.18, 24.82, 180.00}, {-1244.67, -599.17, 13.89, 48.63}, {-1215.09, -6.13, 13.89, 95.00}, {-535.41, -60.88, 63.59, 276.97}, {-1675.93, -618.73, 13.85, 256.00}, {-1963.00, 628.00, 151.00, 182.00}, {-1006.40, -628.27, 32.00, 270.00}, {-2057.00, 64.00, 28.00, 90.00}, {-2726.00, 682.00, 72.00, 90.00}, {-2630.00, 684.00, 72.00, 180.00}, {-2206.05, 701.21, 48.94, 183.41}, {-1681.00, 705.00, 31.00, 90.00}, {-2456.10, 741.65, 34.91, 180.00}, {1291.50, -787.50, 95.45, 180.00}, {1305.17, -796.69, 83.94, 185.99}, {-2093.89, -83.69, 33.90, 359.10}, {-2064.39, -83.69, 34.09, 0.00}, {-2068.68, -83.75, 35.09, 0.00}, {-2076.80, -84.00, 33.70, 1.10}, {-15.29, -84.65, 3.00, 0.00}, {620.88, 861.24, -43.95, 298.74}, {623.34, 887.09, -43.56, 347.29}, {687.37, 890.66, -40.42, 35.13}, {-2116.13, 924.80, 85.97, 94.92}, {-2796.46, -94.17, 6.98, 42.69}, {-1110.78, -947.79, 129.00, 0.00}, {-2354.60, 983.00, 49.29, 189.39}, {-1169.42, -989.63, 129.00, 0.00}, {-2665.43, 990.77, 64.44, 51.00}, {2446.07, 689.83, 11.46, 90.00}, {2457.85, 699.90, 11.46, 5.73}, {2449.08, 695.16, 11.46, 215.50}, {2780.93, -2437.30, 13.63, 84.46}, {2208.61, 113.95, 27.33, 272.63}, {1355.77, -613.56, 109.13, 53.03}, {699.99, -526.15, 16.18, 87.00}, {775.96, -585.38, 16.33, 308.85}, {1757.28, -1038.65, 23.96, 359.43}, {1622.19, -1094.03, 23.91, 90.93}, {1423.90, -1138.84, 23.95, 151.09}, {706.77, -1245.60, 13.55, 91.40}, {1350.20, -1599.10, 13.52, 350.66}, {874.59, -1656.83, 13.54, 177.41}, {330.92, -1810.32, 4.46, 0.49}, {2476.44, -1954.08, 13.41, 358.82}, {2393.36, -2064.49, 13.50, 263.15}, {2136.07, -1331.59, 25.54, 0.93}, {2196.72, -1285.11, 24.24, 173.89}, {2684.58, 910.22, 10.74, 199.17}, {2238.44, 2157.86, 10.82, 92.37} }; new Float:spawns[][4] = { {-2026.58, 156.67, 29.03, 269.68}, {1689.23, -2099.86, 13.83, 185.81}, {2111.22, -1281.20, 25.68, 180.00}, {2495.33, -1690.25, 14.76, 0.00}, {2483.39, -1999.18, 13.83, 180.00}, {315.82, -1773.91, 4.73, 180.00}, {893.71, -1637.50, 14.93, 180.00}, {1333.31, -628.91, 109.13, 358.09}, {791.64, -506.62, 18.01, 175.63}, {2238.80, 167.45, 28.15, 181.89}, {206.17, -109.36, 4.89, 9.09}, {691.06, -1276.71, 13.56, 87.63}, {1234.47, -1652.48, 11.79, 267.96}, {1523.97, -1113.95, 20.85, 6.46}, {2800.66, -2455.63, 13.63, 89.79}, {1267.75, 224.75, 19.55, 248.56}, {-2079.90, -2309.55, 30.62, 57.00}, {-1438.71, -1542.57, 101.75, 0.00}, {-2455.43, -135.87, 26.14, 90.00}, {-2027.74, -42.79, 38.80, 182.20}, {-2243.31, 128.52, 35.32, 90.00}, {-2424.92, 337.36, 37.00, 242.00}, {-2214.06, 725.03, 49.41, 36.00}, {-2700.32, 818.68, 49.98, 180.00}, {-2103.76, 901.73, 76.71, 352.39}, {-913.91, -522.95, 25.95, 116.62}, {-1954.29, -985.29, 35.89, 2.03}, {-2764.78, 375.69, 6.34, 273.35}, {-1657.10, 258.17, 1.17, 265.62}, {-1702.92, 1340.35, 7.17, 133.64}, {-2543.86, 1227.99, 37.42, 272.57}, {-1534.09, 2650.45, 55.83, 180.00}, {-1046.46, 1552.56, 33.29, 312.00}, {-366.42, 1166.54, 19.74, 203.22}, {429.15, 2535.52, 16.38, 243.21}, {926.02, 2006.43, 11.46, 90.00}, {1405.94, 1897.07, 11.46, 90.00}, {1277.38, 2522.46, 10.82, 270.00}, {1968.10, 1622.43, 12.86, 270.00}, {2222.92, 1837.92, 10.82, 90.00}, {2370.05, 2164.08, 10.83, 125.00}, {2819.79, 2140.56, 14.66, 285.63}, {2235.78, 1285.06, 10.82, 89.98}, {2446.07, 689.83, 11.46, 90.00}, {-2472.25, 2450.42, 17.32, 191.44}, {-329.84, 1536.62, 76.61, 274.38}, {1088.71, 1073.65, 10.83, 293.73}, {1908.68, 2230.33, 11.11, 272.16}, {2367.67, 2760.10, 10.82, 173.74}, {2855.17, 1290.35, 11.39, 88.39} }; new Float:coords[][2] = { {-1614.3158, -121.2365}, {-1531.8844, -39.1386}, {-1437.3633, 55.2273}, {-1325.2798, 167.2192}, {-1247.5497, 244.9375}, {-1164.6298, 328.1132}, {-1074.9899, 417.9669} }; new Float:grid[][2] = { // Front row {-1660.9115, -168.4101}, {-1665.5134, -163.1799}, {-1655.5439, -174.0240}, {-1656.3373, -169.4300}, {-1661.8623, -164.3239}, // Middle row {-1666.6682, -174.1645}, {-1661.2878, -179.5711}, {-1671.6201, -169.4777}, {-1663.8304, -177.2795}, {-1669.2576, -171.9238}, // Back row {-1672.4994, -180.0720}, {-1677.2703, -175.1662}, {-1666.7032, -185.9037}, {-1669.4725, -183.1888}, {-1674.8438, -177.5083} }; main() { print("Deathmatch"); } public OnGameModeInit() { SetGameModeText("Deathmatch"); AddPlayerClass(61,-1687.1342,-163.5719,17.0703,213.5342,0,0,0,0,0,0); // AddPlayerClass(0,-1687.1342,-163.5719,17.0703,213.5342,0,0,0,0,0,0); // for (new i = 0; i < sizeof (vehpoints); i++) { AddStaticVehicle(451, vehpoints[i][0], vehpoints[i][1], vehpoints[i][2], vehpoints[i][3], -1, -1); } return 1; } public OnPlayerRequestClass(playerid, classid) { SetPlayerPos(playerid, -2026.7433, 156.6661, 29.0391); SetPlayerFacingAngle(playerid, 90.0); SetPlayerCameraPos(playerid, -2030.0, 156.6661, 29.0391); SetPlayerCameraLookAt(playerid, -2026.7433, 156.6661, 29.0391); return 1; } public OnPlayerConnect(playerid) { MSG("Deathmatch") GivePlayerMoney(playerid, START_MONEY); } public OnPlayerDeath(playerid, killerid, reason) { if (killerid == INVALID_PLAYER_ID) { SendDeathMessage(INVALID_PLAYER_ID, playerid, reason); } else { SendDeathMessage(killerid, playerid, reason); new m = GetPlayerMoney(playerid); if (m >= KILL_REWARD) { GivePlayerMoney(playerid, -KILL_REWARD); GivePlayerMoney(killerid, KILL_REWARD); } else if (m > 0) { ResetPlayerMoney(playerid); GivePlayerMoney(killerid, m); } } return 1; } public OnPlayerSpawn(playerid) { new pos = random(sizeof (spawns)); SetPlayerPos(playerid, spawns[pos][0], spawns[pos][1], spawns[pos][2]); SetPlayerFacingAngle(playerid, spawns[pos][3]); } public OnPlayerDisconnect(playerid) { if (racers[playerid] == 1) { EndPlayer(playerid); } return 1; } public startrace() { //#pragma unused startrace //print("called"); declared = 2; for (new i = 0; i < MAX_PLAYERS; i++) { if (racers[i] == 1) { new j = racerpos[i]; if (IsPlayerInAnyVehicle(i)) { new car = GetPlayerVehicleID(i); SetVehiclePos(car, grid[j][0], grid[j][1], 14.1484); SetVehicleZAngle(car, 320.0); } else { SetPlayerPos(i, grid[j][0], grid[j][1], 14.1484); SetPlayerFacingAngle(i, 320.0); } GameTextForPlayer(i, "Go Go Go!!!", 5000, 3); check[i] = 0; SetPlayerCheckpoint(i, coords[0][0], coords[0][1], 13.8, 5.0); } } } public countdown() { static count = 100; if (finishers[0] < MIN_RACERS) { GameTextForAll("Race cancelled due to insufficient racers", 5000, 3); for (new i = 0; i < MAX_PLAYERS; i++) { if (racers[i] == 1) { EndPlayer(i, false); } } count = 100; } else { new str[4]; format(str, sizeof (str), "%d", count / 10); for (new i = 0; i < MAX_PLAYERS; i++) { if (racers[i] == 1) { new j = racerpos[i]; if (IsPlayerInAnyVehicle(i)) { new car = GetPlayerVehicleID(i); SetVehiclePos(car, grid[j][0], grid[j][1], 14.1484); SetVehicleZAngle(car, 320.0); } else { SetPlayerPos(i, grid[j][0], grid[j][1], 14.1484); SetPlayerFacingAngle(i, 320.0); } GameTextForPlayer(i, str, 200, 3); } } count--; if (count) { new timer = SetTimer("countdown", 100, 0); //printf("%d", timer); #pragma unused timer } else { count = 100; startrace(); //printf("%d", timer); } } } public OnPlayerCommandText(playerid, cmdtext[]) { dcmd(joinrace, 8); dcmd(decrace, 7); return 0; } dcmd_joinrace(playerid, text[]) { #pragma unused text // Join the race if (declared == 1) { if (finishers[0] < MAX_RACERS) { if (!racers[playerid]) { racers[playerid] = 1; racerpos[playerid] = finishers[0]; finishers[0]++; GameTextForPlayer(playerid, "You joined the race", 5000, 3); } else { GameTextForPlayer(playerid, "You are already in the race", 5000, 3); } } else { GameTextForPlayer(playerid, "Sorry, race full", 5000, 3); } } else { GameTextForPlayer(playerid, "You can't join the race atm", 5000, 3); } return 1; } dcmd_decrace(playerid, text[]) { #pragma unused text // Declare the race if (declared == 0) { declared = 1; GameTextForAll("A race has been declared, type /race to join~n~The race will start 1 minute from now!", 5000, 3); new timer = SetTimer("countdown", 60000, 0); //printf("%d", timer); #pragma unused timer } else { GameTextForPlayer(playerid, "Sorry, race already in progress", 5000, 3); } return 1; } public OnPlayerExitVehicle(playerid, vehicleid) { if (racers[playerid] == 1 && declared == 2) { GameTextForPlayer(playerid, "You left your vehicle, race forfited", 5000, 3); EndPlayer(playerid); } return 1; } EndPlayer(playerid, a = true) { DisablePlayerCheckpoint(playerid); finishers[1]++; racers[playerid] = 0; if (finishers[0] == finishers[1]) { if (a) { SendClientMessageToAll(0x00FF00FF, "Race completed"); } finishers[0] = 0; finishers[1] = 0; finishers[2] = 0; declared = 0; } } public OnPlayerStateChange(playerid, newstate, oldstate) { if (newstate == PLAYER_STATE_WASTED && racers[playerid] == 1) { GameTextForPlayer(playerid, "You died, race forfited", 5000, 3); EndPlayer(playerid); } return 1; } public OnPlayerEnterCheckpoint(playerid) { check[playerid]++; if (check[playerid] == sizeof (coords)) { if (finishers[2] == 0) { GameTextForPlayer(playerid, "You came 1st - prize $5000", 5000, 3); GivePlayerMoney(playerid, 5000); } else if (finishers[2] == 1) { GameTextForPlayer(playerid, "You came 2nd - prize $2000", 5000, 3); GivePlayerMoney(playerid, 2000); } else if (finishers[2] == 2) { GameTextForPlayer(playerid, "You came 3rd - prize $1000", 5000, 3); GivePlayerMoney(playerid, 1000); } else { GameTextForPlayer(playerid, "Sorry, you didn't win, try again some time", 5000, 3); } finishers[2]++; EndPlayer(playerid); } else { DisablePlayerCheckpoint(playerid); SetPlayerCheckpoint(playerid, coords[check[playerid]][0], coords[check[playerid]][1], 13.8, 5.0); } return 1; } /*strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof (result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; }*/ STE_function_list(str[], num, func[]) { #pragma unused str, num, func }