rendered paste body#include <ste>
#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
}