· 8 years ago · Feb 18, 2018, 12:18 PM
1#include <a_samp>
2#include <foreach>
3#include <zcmd2>
4#include <RouteConnector>
5
6//Defines
7#define MAX_POINTS 138
8#define SPAWN_X 2493.5977
9#define SPAWN_Y -1658.9050
10#define SPAWN_Z 13.3484
11#define Z_ANGLE 87.5763
12#define ON_FOOT 1
13#define NO_EXIT 0
14
15//Enums
16enum RaceInfo
17{
18 PointType,
19 PickupType,
20 RaceCPType,
21 Float:RaceX,
22 Float:RaceY,
23 Float:RaceZ,
24 Float:Size,
25 PickupModel,
26 Interior,
27 Direction,
28 PickupID,
29 bool:PickupIsRandom
30}
31
32//Bools
33new bool:RaceOn;
34new bool:ScoreSets[MAX_PLAYERS][MAX_POINTS];
35new bool:Spawned[MAX_PLAYERS];
36
37//Global variables
38new PlayerCar[MAX_PLAYERS] = {0xFFFF, ...};
39new Float:LastDistance[MAX_PLAYERS];
40new filenames[128] = "players.db";
41new query[128];
42new tempstring[128];
43new tempplayername[24];
44new sMSeconds[5];
45new sSeconds[5];
46new sMinutes[5];
47new Float:Tempx1;
48new Float:Tempy1;
49new Float:Tempz1;
50new Float:Tempx2;
51new Float:Tempy2;
52new Float:Tempz2;
53new Float:Tempr;
54new RaceStartTime;
55new CountDownTimer;
56new CountDownTime;
57new vehicledriver;
58new giveplayerid;
59new tempstamp;
60new MSeconds;
61new RacePos;
62new Hours;
63new Minutes;
64new Seconds;
65new Days;
66new Months;
67new Years;
68new score;
69new DB:USERDB;
70new DBResult:qresult;
71new DBResult:qresult2;
72
73//Arrays
74new TournamentPoints[MAX_POINTS][RaceInfo] =
75{
76{0, 0, 0, 1869.1721,-1363.4833,19.1406,3.0, 0, 0, 0, 0, false},
77{0, 0, 0, 2114.9590,-1735.5149,18.0703,3.0, 0, 0, 0, 0, false},
78{0, 0, 0, 2146.0244,-1651.4839,22.0297,3.0, 0, 0, 0, 0, false},
79{0, 0, 0, 2431.6550,-1910.9628,19.0391,3.0, 0, 0, 0, 0, false},
80{0, 0, 0, 2334.4189,-2031.7681,25.7939,3.0, 0, 0, 0, 0, false},
81{0, 0, 0, 2242.0925,-1991.5967,25.7036,3.0, 0, 0, 0, 0, false},
82{0, 0, 0, 2229.2422,-1952.2303,21.2120,3.0, 0, 0, 0, 0, false},
83{0, 0, 0, 1927.2458,-2088.5151,19.9609,3.0, 0, 0, 0, 0, false},
84{0, 0, 0, 2155.7297,-2255.0981,27.3383,3.0, 0, 0, 0, 0, false},
85{0, 0, 0, 2748.6245,-2208.2358,24.2600,3.0, 0, 0, 0, 0, false},
86{0, 0, 0, 2252.1548,-1712.0763,17.6016,3.0, 0, 0, 0, 0, false},
87{0, 0, 0, 2240.5037,-1712.7332,22.8527,3.0, 0, 0, 0, 0, false},
88{0, 0, 0, 2386.7458,-1213.2505,38.3047,3.0, 0, 0, 0, 0, false},
89{0, 0, 0, 2337.4380,-1211.5747,36.3093,3.0, 0, 0, 0, 0, false},
90{0, 0, 0, 2341.6133,-1174.1387,35.5469,3.0, 0, 0, 0, 0, false},
91{0, 0, 0, 2620.4238,-1069.1727,75.9696,3.0, 0, 0, 0, 0, false},
92{0, 0, 0, 2364.9817,-1404.0090,31.4979,3.0, 0, 0, 0, 0, false},
93{0, 0, 0, 2360.0076,-1503.6533,31.4979,3.0, 0, 0, 0, 0, false},
94{0, 0, 0, 2358.8750,-1542.4335,29.5625,3.0, 0, 0, 0, 0, false},
95{0, 0, 0, 2176.1262,-1508.2261,27.7788,3.0, 0, 0, 0, 0, false},
96{0, 0, 0, 1737.9718,-1360.1735,21.7109,3.0, 0, 0, 0, 0, false},
97{0, 0, 0, 950.1611,-1430.0607,16.8359,3.0, 0, 0, 0, 0, false},
98{0, 0, 0, 921.6154,-1303.7852,18.3075,3.0, 0, 0, 0, 0, false},
99{0, 0, 0, 866.2395,-1187.4139,30.1953,3.0, 0, 0, 0, 0, false},
100{0, 0, 0, 838.7753,-999.6829,33.4526,3.0, 0, 0, 0, 0, false},
101{0, 0, 0, 1583.2924,-1178.3523,53.2083,3.0, 0, 0, 0, 0, false},
102{0, 0, 0, 1544.5260,-1185.3156,50.3672,3.0, 0, 0, 0, 0, false},
103{0, 0, 0, 1662.2963,-1192.3911,41.9811,3.0, 0, 0, 0, 0, false},
104{0, 0, 0, 2603.9402,-1227.8635,59.4596,3.0, 0, 0, 0, 0, false},
105{0, 0, 0, 1412.7345,-1639.3741,38.3088,3.0, 0, 0, 0, 0, false},
106{0, 0, 0, 1339.0869,-1615.5735,35.3998,3.0, 0, 0, 0, 0, false},
107{0, 0, 0, 1272.8649,-1628.0132,27.3750,3.0, 0, 0, 0, 0, false},
108{0, 0, 0, 1167.3462,-1588.1805,24.7121,3.0, 0, 0, 0, 0, false},
109{0, 0, 0, 1417.8949,-1572.4736,26.0625,3.0, 0, 0, 0, 0, false},
110{0, 0, 0, 1406.6677,-1557.2561,36.5703,3.0, 0, 0, 0, 0, false},
111{0, 0, 0, 1414.1804,-1607.1348,38.3088,3.0, 0, 0, 0, 0, false},
112{0, 0, 0, 1336.0265,-1603.1079,35.3998,3.0, 0, 0, 0, 0, false},
113{0, 0, 0, 1272.2947,-1633.6666,27.3750,3.0, 0, 0, 0, 0, false},
114{0, 0, 0, 1177.0299,-1783.4146,21.5880,3.0, 0, 0, 0, 0, false},
115{0, 0, 0, 1154.6127,-1876.7721,17.0502,3.0, 0, 0, 0, 0, false},
116{0, 0, 0, 1329.9431,-1815.4388,22.9934,3.0, 0, 0, 0, 0, false},
117{0, 0, 0, 1367.3545,-2155.2690,23.0217,3.0, 0, 0, 0, 0, false},
118{0, 0, 0, 2030.2440,-2383.3494,26.4527,3.0, 0, 0, 0, 0, false},
119{0, 0, 0, 2113.4844,-2381.4324,26.4770,3.0, 0, 0, 0, 0, false},
120{0, 0, 0, 2193.1277,-2630.8916,24.1897,3.0, 0, 0, 0, 0, false},
121{0, 0, 0, 2387.5071,-2556.2678,24.1897,3.0, 0, 0, 0, 0, false},
122{0, 0, 0, 2430.6240,-2559.4255,29.5008,3.0, 0, 0, 0, 0, false},
123{0, 0, 0, 2519.3013,-2716.7781,38.9116,3.0, 0, 0, 0, 0, false},
124{0, 0, 0, 2482.7949,-2459.2273,28.8033,3.0, 0, 0, 0, 0, false},
125{0, 0, 0, 2543.9292,-2426.7756,29.3571,3.0, 0, 0, 0, 0, false},
126{0, 0, 0, 2783.7520,-2417.8003,23.4058,3.0, 0, 0, 0, 0, false},
127{0, 0, 0, 2837.5005,-2446.7043,19.9220,3.0, 0, 0, 0, 0, false},
128{0, 0, 0, 2199.3103,-2429.6143,20.1574,3.0, 0, 0, 0, 0, false},
129{0, 0, 0, 2659.5388,-2194.0586,31.6421,3.0, 0, 0, 0, 0, false},
130{0, 0, 0, 2693.1533,-2138.6389,23.9698,3.0, 0, 0, 0, 0, false},
131{0, 0, 0, 2443.0088,-2076.7966,20.2188,3.0, 0, 0, 0, 0, false},
132{0, 0, 0, 2361.3694,-2081.8237,21.2425,3.0, 0, 0, 0, 0, false},
133{0, 0, 0, 2508.2954,-1767.2292,20.0000,3.0, 0, 0, 0, 0, false},
134{0, 0, 0, 2486.3120,-1322.4215,38.6563,3.0, 0, 0, 0, 0, false},
135{0, 0, 0, 2500.1077,-1318.8793,38.6685,3.0, 0, 0, 0, 0, false},
136{0, 0, 0, 2282.2490,-1094.8821,50.0597,3.0, 0, 0, 0, 0, false},
137{0, 0, 0, 2245.6465,-1011.6216,71.4345,3.0, 0, 0, 0, 0, false},
138{0, 0, 0, 2075.9324,-958.6348,58.0156,3.0, 0, 0, 0, 0, false},
139{0, 0, 0, 891.0703,-788.7117,110.4999,3.0, 0, 0, 0, 0, false},
140{0, 0, 0, 246.1916,-1211.1403,86.9130,3.0, 0, 0, 0, 0, false},
141{0, 0, 0, 216.5908,-1243.5944,86.0250,3.0, 0, 0, 0, 0, false},
142{0, 0, 0, 183.6440,-1292.4891,73.8828,3.0, 0, 0, 0, 0, false},
143{0, 0, 0, 192.2142,-1451.9459,32.1182,3.0, 0, 0, 0, 0, false},
144{0, 0, 0, 653.2523,-1564.5083,19.2889,3.0, 0, 0, 0, 0, false},
145{0, 0, 0, 1544.0631,-1352.9937,329.0822,3.0, 0, 0, 0, 0, false},
146{0, 0, 0, 1573.7457,-1274.1062,250.6563,3.0, 0, 0, 0, 0, false},
147{0, 0, 0, 1502.6516,-1267.2804,113.7795,3.0, 0, 0, 0, 0, false},
148{0, 0, 0, 1484.3845,-1201.1886,108.3371,3.0, 0, 0, 0, 0, false},
149{0, 0, 0, 1452.3994,-1118.2145,93.3266,3.0, 0, 0, 0, 0, false},
150{0, 0, 0, 1403.4757,-1092.6216,63.9216,3.0, 0, 0, 0, 0, false},
151{0, 0, 0, 1461.0574,-1012.2820,61.1703,3.0, 0, 0, 0, 0, false},
152{0, 0, 0, 1485.8433,-1006.4892,46.9375,3.0, 0, 0, 0, 0, false},
153{0, 0, 0, 2486.6982,-1668.1201,13.3438,3.0, 0, 0, 0, 0, false},
154{0, 0, 0, 2492.4961,-1668.0663,13.3438,3.0, 0, 0, 0, 0, false},
155{0, 0, 0, 2502.6021,-1668.5583,13.3612,3.0, 0, 0, 0, 0, false},
156{0, 0, 0, 2494.3882,-1701.3674,23.6588,3.0, 0, 0, 0, 0, false},
157{0, 0, 0, 2845.8088,-1536.9117,15.3281,3.0, 0, 0, 0, 0, false},
158{0, 0, 0, 2808.1758,-1509.2440,33.0057,3.0, 0, 0, 0, 0, false},
159{0, 0, 0, 2804.5667,-1636.3662,28.5625,3.0, 0, 0, 0, 0, false},
160{0, 0, 0, 2744.2559,-1928.5400,21.7196,3.0, 0, 0, 0, 0, false},
161{0, 0, 0, 2239.0403,-2070.8613,27.3011,3.0, 0, 0, 0, 0, false},
162{0, 0, 0, 2245.9502,-2170.9155,20.8359,3.0, 0, 0, 0, 0, false},
163{0, 0, 0, 2142.5056,-2077.0654,24.2600,3.0, 0, 0, 0, 0, false},
164{0, 0, 0, 2037.8530,-2080.4033,27.3241,3.0, 0, 0, 0, 0, false},
165{0, 0, 0, 2021.1191,-1970.9376,23.0789,3.0, 0, 0, 0, 0, false},
166{0, 0, 0, 2118.0713,-1963.5959,19.7457,3.0, 0, 0, 0, 0, false},
167{0, 0, 0, 1799.7007,-1877.4716,20.3071,3.0, 0, 0, 0, 0, false},
168{0, 0, 0, 1741.0017,-1935.8766,20.3098,3.0, 0, 0, 0, 0, false},
169{0, 0, 0, 1773.3231,-1960.8560,19.2188,3.0, 0, 0, 0, 0, false},
170{0, 0, 0, 1715.6937,-1880.1007,22.8518,3.0, 0, 0, 0, 0, false},
171{0, 0, 0, 1734.4994,-1927.6393,24.8848,3.0, 0, 0, 0, 0, false},
172{0, 0, 0, 1733.1224,-1561.3433,27.6216,3.0, 0, 0, 0, 0, false},
173{0, 0, 0, 1940.9479,-1772.0087,19.5250,3.0, 0, 0, 0, 0, false},
174{0, 0, 0, 2069.9207,-1826.6642,22.4531,3.0, 0, 0, 0, 0, false},
175{0, 0, 0, 1976.9258,-1793.5366,26.1350,3.0, 0, 0, 0, 0, false},
176{0, 0, 0, 2067.4224,-1783.0173,25.6563,3.0, 0, 0, 0, 0, false},
177{0, 0, 0, 1354.0243,-1656.9277,17.8166,3.0, 0, 0, 0, 0, false},
178{0, 0, 0, 871.7912,-1563.5944,24.7656,3.0, 0, 0, 0, 0, false},
179{0, 0, 0, 497.4639,-1621.9097,33.1719,3.0, 0, 0, 0, 0, false},
180{0, 0, 0, 403.6659,-1613.4202,34.1719,3.0, 0, 0, 0, 0, false},
181{0, 0, 0, 462.3057,-1331.8923,24.9219,3.0, 0, 0, 0, 0, false},
182{0, 0, 0, 2140.9150,-977.3609,77.8594,3.0, 0, 0, 0, 0, false},
183{0, 0, 0, 2145.5730,-1036.4326,70.9141,3.0, 0, 0, 0, 0, false},
184{0, 0, 0, 2208.8020,-1048.3358,58.6797,3.0, 0, 0, 0, 0, false},
185{0, 0, 0, 2243.3545,-1111.7150,48.7500,3.0, 0, 0, 0, 0, false},
186{0, 0, 0, 2245.2336,-1578.4758,28.5119,3.0, 0, 0, 0, 0, false},
187{0, 0, 0, 2577.5073,-1594.7488,25.5621,3.0, 0, 0, 0, 0, false},
188{0, 0, 0, 2627.7292,-1594.0482,27.2104,3.0, 0, 0, 0, 0, false},
189{0, 0, 0, 2660.3154,-1570.6880,22.9835,3.0, 0, 0, 0, 0, false},
190{0, 0, 0, 2824.9758,-1168.2435,32.6688,3.0, 0, 0, 0, 0, false},
191{0, 0, 0, 2824.1335,-1198.9197,32.6688,3.0, 0, 0, 0, 0, false},
192{0, 0, 0, 2829.2656,-1140.7788,32.0550,3.0, 0, 0, 0, 0, false},
193{0, 0, 0, 2633.2820,-1148.8574,71.0658,3.0, 0, 0, 0, 0, false},
194{0, 0, 0, 2109.2349,-1806.0640,22.2188,3.0, 0, 0, 0, 0, false},
195{0, 0, 0, 2613.3535,-2496.3083,33.4073,3.0, 0, 0, 0, 0, false},
196{0, 0, 0, 2238.6375,-1878.1544,18.8259,3.0, 0, 0, 0, 0, false},
197{0, 0, 0, 2335.2639,-1889.2236,20.2433,3.0, 0, 0, 0, 0, false},
198{0, 0, 0, 2334.0515,-1928.7329,20.2121,3.0, 0, 0, 0, 0, false},
199{0, 0, 0, 2355.1035,-1952.3160,22.6703,3.0, 0, 0, 0, 0, false},
200{0, 0, 0, 2392.3184,-1908.8501,21.4602,3.0, 0, 0, 0, 0, false},
201{0, 0, 0, 1732.6964,-1309.7242,30.8984,3.0, 0, 0, 0, 0, false},
202{0, 0, 0, 1566.5153,-1722.6281,28.3443,3.0, 0, 0, 0, 0, false},
203{0, 0, 0, 1538.2045,-1599.9451,23.1490,3.0, 0, 0, 0, 0, false},
204{0, 0, 0, 1961.9080,-1515.2627,26.0401,3.0, 0, 0, 0, 0, false},
205{0, 0, 0, 2038.0510,-1401.7947,23.1193,3.0, 0, 0, 0, 0, false},
206{0, 0, 0, 2323.3979,-1327.7424,29.6023,3.0, 0, 0, 0, 0, false},
207{0, 0, 0, 528.2798,-1812.7495,10.9022,3.0, 0, 0, 0, 0, false},
208{0, 0, 0, 390.2607,-1810.3380,17.2440,3.0, 0, 0, 0, 0, false},
209{0, 0, 0, 411.7890,-1754.0171,20.4531,3.0, 0, 0, 0, 0, false},
210{0, 0, 0, 217.3488,-1751.8342,15.4440,3.0, 0, 0, 0, 0, false},
211{0, 0, 0, 477.0033,-1379.4080,28.1953,3.0, 0, 0, 0, 0, false},
212{0, 0, 0, 430.3339,-1365.1982,30.9609,3.0, 0, 0, 0, 0, false},
213{0, 0, 0, 472.1317,-1382.7927,36.1789,3.0, 0, 0, 0, 0, false}
214};
215
216new const badSkins[22] =
217{3, 4, 5, 6, 8, 42, 65, 74, 86, 119, 149, 208, 268, 273, 289};
218
219//Forwards
220forward CountDown();
221forward Virziens();
222forward RePutPlayerInVehicle(const playerid);
223forward PlayerStopSound(const playerid);
224
225//------------------------------------------------------------------------------
226
227main()
228{
229 print("\n----------------------------------");
230 print(" MTB Advance LS X by WG1337 (2009)\n");
231 print("----------------------------------\n");
232}
233
234//------------------------------------------------------------------------------
235
236
237public OnGameModeInit()
238{
239 SetGameModeText("MTB Advance LS X");
240 ShowPlayerMarkers(1);
241 ShowNameTags(true);
242 SetWorldTime(12);
243 SetWeather(1);
244 SetGravity(0.008);
245 EnableStuntBonusForAll(false);
246 AllowAdminTeleport(true);
247
248 USERDB = db_open(filenames);
249 db_free_result(db_query(USERDB, "DROP TABLE IF EXISTS players"));
250 db_free_result(db_query(USERDB, "CREATE TABLE players (id INTEGER PRIMARY KEY AUTOINCREMENT, playername VARCHAR(32))"));
251 for(new i; i<MAX_POINTS; i++) {
252 format(query, 128, "ALTER TABLE players ADD point%d TINYINT(1) NOT NULL DEFAULT 0", i);
253 db_free_result(db_query(USERDB, query));
254 }
255 db_close(USERDB);
256
257 for(new i; i<299; i++)
258 {
259 if(IsValidSkin(i))
260 {
261 AddPlayerClass(i, SPAWN_X,SPAWN_Y, SPAWN_Z, Z_ANGLE, 0, 0, 0, 0, 0, 0);
262 }
263 }
264 new needdirection = false;
265 for (new i = 0; i < MAX_POINTS; i++)
266 {
267 if(TournamentPoints[i][PointType] == 1) {
268 needdirection = true;
269 TournamentPoints[i][PickupID] = CreatePickup(TournamentPoints[i][PickupModel], TournamentPoints[i][PickupType], TournamentPoints[i][RaceX], TournamentPoints[i][RaceY], TournamentPoints[i][RaceZ], 0);
270 }
271 }
272 RaceOn = false;
273 if(needdirection) SetTimer("Virziens", 1000, true);
274 return true;
275}
276
277//------------------------------------------------------------------------------
278
279public OnPlayerConnect(playerid)
280{
281 GetPlayerName(playerid, tempplayername, 24);
282 foreach(Player, x) {
283 if(x != playerid){
284 format(tempstring, 128, "*** %s pievienojâs serverim. (ID:%d)", tempplayername, playerid);
285 SendClientMessage(x, 0xC6BEBDFF, tempstring);
286 }
287 }
288 SetPlayerColor(playerid, 0xAFAFAFAA);
289 LastDistance[playerid] = 0;
290 GameTextForPlayer(playerid, "MTB Advance LS X", 2500, 5);
291
292 USERDB = db_open(filenames);
293 format(query, 128, "SELECT id FROM players WHERE playername='%s'",tempplayername);
294 qresult = db_query(USERDB, query);
295 if(db_num_rows(qresult) == 0) {
296 format(query, 128, "INSERT INTO players (playername) VALUES ('%s')", tempplayername);
297 db_free_result(db_query(USERDB, query));
298 SetPlayerScore(playerid, 0);
299 for(new i; i<MAX_POINTS; i++) {
300 ScoreSets[playerid][i] = false;
301 }
302 } else {
303 score = 0;
304 for(new i; i<MAX_POINTS; i++) {
305 format(query, 128,"SELECT point%d FROM players WHERE playername='%s'", tempplayername);
306 qresult2 = db_query(USERDB, query);
307 db_get_field(qresult2, 0, tempstring, 128);
308 if(strval(tempstring) == 1) {
309 ScoreSets[playerid][i] = true;
310 score++;
311 } else {
312 ScoreSets[playerid][i] = false;
313 }
314 db_free_result(qresult2);
315 }
316 SetPlayerScore(playerid, score);
317 }
318 db_free_result(qresult);
319 db_close(USERDB);
320
321 SendClientMessage(playerid, 0x33AA33AA, "* Raksti /help lai uzzinâtu ko vairâk.");
322 Spawned[playerid] = true;
323 return true;
324
325}
326
327//------------------------------------------------------------------------------
328
329public OnPlayerDisconnect(playerid, reason)
330{
331 GetPlayerName(playerid, tempplayername, 24);
332 if(reason == 0)format(tempstring, 128, "*** %s pameta serveri. (Taimauts)", tempplayername);
333 if(reason == 1)format(tempstring, 128, "*** %s pameta serveri. (Izgâja)", tempplayername);
334 if(reason == 2)format(tempstring, 128, "*** %s pameta serveri. (Izkikots)", tempplayername);
335 if(reason == 3)format(tempstring, 128, "*** %s pameta serveri. (Izbanots)", tempplayername);
336 SendClientMessageToAll(0xC6BEBDFF, tempstring);
337 SetPlayerScore(playerid, 0);
338 USERDB = db_open(filenames);
339 if(ScoreSets[playerid][0] == true) {
340 format(query, 128, "UPDATE players SET point0='1'");
341 } else {
342 format(query, 128, "UPDATE players SET point0='0'");
343 }
344 ScoreSets[playerid][0] = false;
345 for(new i=1; i<MAX_POINTS; i++) {
346 if(ScoreSets[playerid][i] == true) {
347 format(query, 128, "%s,point%d='1'", query, i);
348 } else {
349 format(query, 128, "%s,point%d='0'", query, i);
350 }
351 ScoreSets[playerid][i] = false;
352 }
353 format(query, 128, "%s WHERE playername='%s'", query, tempplayername);
354 db_free_result(db_query(USERDB, query));
355 db_close(USERDB);
356 if(PlayerCar[playerid] != 0xFFFF) {
357 DestroyVehicle(PlayerCar[playerid]);
358 PlayerCar[playerid] = 0xFFFF;
359 }
360 Spawned[playerid] = false;
361 return true;
362}
363
364//------------------------------------------------------------------------------
365
366public OnPlayerRequestClass(playerid, classid)
367{
368 SetPlayerInterior(playerid, 14);
369 SetPlayerPos(playerid, 258.4893, -41.4008, 1002.0234);
370 SetPlayerFacingAngle(playerid, 90.0);
371 SetPlayerCameraPos(playerid, 256.0815, -43.0475, 1003.0234);
372 SetPlayerCameraLookAt(playerid, 258.4893, -41.4008, 1002.0234);
373 Spawned[playerid] = false;
374 return true;
375}
376
377//------------------------------------------------------------------------------
378
379public OnPlayerSpawn(playerid)
380{
381 TogglePlayerClock(playerid, true);
382 SetPlayerTime(playerid, 12, 0);
383 if(RaceOn) {
384 SetPlayerWorldBounds(playerid, 9999.0, -9999.0, 9999.0, -9999.0);
385 score = GetPlayerScore(playerid);
386 if(score != 0) {
387 SetPlayerInterior(playerid, TournamentPoints[score-1][Interior]);
388 } else {
389 SetPlayerInterior(playerid, TournamentPoints[0][Interior]);
390 }
391 if(score != MAX_POINTS) {
392 SetPlayerPoint(playerid);
393 }
394 } else {
395 if(CountDownTime != 0) {
396 TogglePlayerControllable(playerid, false);
397 }
398 SetPlayerPos(playerid, SPAWN_X+random(3), SPAWN_Y+random(3), SPAWN_Z);
399 SetPlayerWorldBounds(playerid, SPAWN_X+10,SPAWN_X-10, SPAWN_Y+10,SPAWN_Y-10);
400 SetPlayerInterior(playerid, TournamentPoints[0][Interior]);
401 }
402
403 Spawned[playerid] = true;
404 return true;
405}
406
407//------------------------------------------------------------------------------
408
409public OnPlayerDeath(playerid, killerid, reason)
410{
411 if(killerid == INVALID_PLAYER_ID) {
412 SendDeathMessage(INVALID_PLAYER_ID, playerid, reason);
413 } else {
414 SendDeathMessage(killerid, playerid, reason);
415 }
416 Spawned[playerid] = false;
417 return true;
418}
419
420//------------------------------------------------------------------------------
421
422public OnPlayerEnterCheckpoint(playerid)
423{
424 if(RaceOn) {
425 #if ON_FOOT == 0
426 if(IsPlayerInAnyVehicle(playerid)) {
427 #endif
428 PlayerPlaySound(playerid, 1054, 0.0, 0.0, 0.0);
429 DisablePlayerCheckpoint(playerid);
430 score = GetPlayerScore(playerid);
431 ScoreSets[playerid][score] = true;
432 USERDB = db_open(filenames);
433 format(query, 128, "UPDATE players SET point%d='1'", score);
434 db_free_result(db_query(USERDB, query));
435 db_close(USERDB);
436 SetPlayerScore(playerid, score+1);
437 SetPlayerPoint(playerid);
438 GetPlayerName(playerid, tempplayername, 24);
439 #if ON_FOOT == 0
440 }
441 #endif
442 }
443 return true;
444}
445
446//------------------------------------------------------------------------------
447
448public OnPlayerEnterRaceCheckpoint(playerid)
449{
450 if(RaceOn) {
451 #if ON_FOOT == 0
452 if(IsPlayerInAnyVehicle(playerid)) {
453 #endif
454 score = GetPlayerScore(playerid);
455 PlayerPlaySound(playerid, 1054, 0.0, 0.0, 0.0);
456 DisablePlayerRaceCheckpoint(playerid);
457 ScoreSets[playerid][score] = true;
458 USERDB = db_open(filenames);
459 format(query, 128, "UPDATE players SET point%d='1'", score);
460 db_free_result(db_query(USERDB, query));
461 db_close(USERDB);
462 SetPlayerScore(playerid, score+1);
463 SetPlayerPoint(playerid);
464 GetPlayerName(playerid, tempplayername, 24);
465 #if ON_FOOT == 0
466 }
467 #endif
468 }
469 return true;
470}
471
472//------------------------------------------------------------------------------
473
474public OnPlayerPickUpPickup(playerid, pickupid)
475{
476 if(RaceOn) {
477 score = GetPlayerScore(playerid);
478 if(TournamentPoints[score][PointType] == 1) {
479 GetPlayerName(playerid, tempplayername, 24);
480 PlayerPlaySound(playerid, 1054, 0.0, 0.0, 0.0);
481 if(TournamentPoints[score][PickupIsRandom]) {
482 new point = GetPickupPointID(pickupid);
483 if(TournamentPoints[point][PickupIsRandom]) {
484 if(ScoreSets[playerid][point] == false) {
485 SetPlayerScore(playerid, score+1);
486 ScoreSets[playerid][point] = true;
487 USERDB = db_open(filenames);
488 format(query, 128, "UPDATE players SET point%d='1'", score);
489 db_free_result(db_query(USERDB, query));
490 db_close(USERDB);
491 }
492 }
493 } else {
494 if(ScoreSets[playerid][score] == false) {
495 ScoreSets[playerid][score] = true;
496 USERDB = db_open(filenames);
497 format(query, 128, "UPDATE players SET point%d='1'", score);
498 db_free_result(db_query(USERDB, query));
499 db_close(USERDB);
500 SetPlayerScore(playerid, score+1);
501 SetPlayerPoint(playerid);
502 }
503 }
504 }
505 }
506 return true;
507}
508
509//------------------------------------------------------------------------------
510
511public OnPlayerStateChange(playerid, newstate, oldstate)
512{
513 if(oldstate == PLAYER_STATE_DRIVER)
514 {
515 if(Spawned[playerid]) {
516 if(PlayerCar[playerid] != 0xFFFF) {
517 #if NO_EXIT == 1
518 PutPlayerInVehicle(playerid, PlayerCar[playerid], 0);
519 #endif
520 }
521 }
522 }
523 if(newstate == PLAYER_STATE_ONFOOT) {
524 #if NO_EXIT == 1
525 SetTimerEx("RePutPlayerInVehicle", 100, false, "i", playerid);
526 #endif
527 }
528 return true;
529}
530
531//------------------------------------------------------------------------------
532
533public OnPlayerExitVehicle(playerid, vehicleid)
534{
535 if(Spawned[playerid]) {
536 if(PlayerCar[playerid] != 0xFFFF) {
537 #if NO_EXIT == 1
538 PutPlayerInVehicle(playerid, PlayerCar[playerid], 0);
539 #endif
540 }
541 }
542 return true;
543}
544
545//------------------------------------------------------------------------------
546
547COMMAND:start(const playerid, const params[])
548{
549 if(!IsPlayerAdmin(playerid)) return false;
550 foreach(Player, i) {
551 if(Spawned[i]) {
552 TogglePlayerControllable(i, false);
553 }
554 }
555 CountDownTime = 6;
556 CountDownTimer = SetTimer("CountDown", 1000, true);
557 RacePos = 0;
558 return true;
559}
560
561COMMAND:spec(const playerid, params[])
562{
563 if(Spawned[playerid]) {
564 if(GetPlayerState(playerid) == 9) {
565 TogglePlayerSpectating(playerid, false);
566 } else {
567 if (!sscanf(params, "u", giveplayerid))
568 {
569 if (giveplayerid != INVALID_PLAYER_ID)
570 {
571 TogglePlayerSpectating(playerid, true);
572 if(IsPlayerInAnyVehicle(giveplayerid)) {
573 PlayerSpectateVehicle(playerid, GetPlayerVehicleID(giveplayerid));
574 SetPlayerInterior(playerid, GetPlayerInterior(giveplayerid));
575 } else {
576 PlayerSpectatePlayer(playerid, giveplayerid, 1);
577 SetPlayerInterior(playerid, GetPlayerInterior(giveplayerid));
578 }
579 } else {
580 SendClientMessage(playerid, 0xFFFF00AA, "* Sads speletajs neeksiste.");
581 }
582 } else {
583 SendClientMessage(playerid, 0xFFFF00AA, "* PIELIETOJUMS: /spec [playerid]");
584 }
585 }
586 }
587 return true;
588}
589
590COMMAND:time(const playerid, const params[])
591{
592 gettime(Hours, Minutes, Seconds);
593 getdate(Years, Months, Days);
594 format(tempstring, 128, "* Datums: %d/%d/%d, Laiks %d:%d:%d", Days, Months, Years, Hours, Minutes, Seconds);
595 SendClientMessage(playerid, 0x33AA33AA, tempstring);
596 if(RaceOn) {
597 tempstamp = GetTickCount();
598 tempstamp -= RaceStartTime;
599 timeconvert(tempstamp, Hours, Minutes, Seconds, MSeconds);
600 if (Minutes < 10) format(sMinutes, 5, "0%d", Minutes);
601 else format(sMinutes, 5, "%d", Minutes);
602 if (Seconds < 10) format(sSeconds, 5, "0%d", Seconds);
603 else format(sSeconds, 5, "%d", Seconds);
604 if (MSeconds < 100) format(sMSeconds, 5, "0%d", MSeconds);
605 else format(sMSeconds, 5, "%d", MSeconds);
606 format(tempstring, 128, "* Spçles ilgums: %d:%s:%s.%s", Hours, sMinutes, sSeconds, sMSeconds);
607 SendClientMessage(playerid, 0x33AA33AA, tempstring);
608 }
609 return true;
610}
611
612COMMAND:para(const playerid, const params[])
613{
614 GivePlayerWeapon(playerid, 46, 100);
615 SendClientMessage(playerid, 0xFFFF00AA, "Tu izvilki no taisnas zarnas izpletni!");
616 return true;
617}
618
619COMMAND:hp(const playerid, const params[])
620{
621 SetPlayerHealth(playerid, 100);
622 SendClientMessage(playerid, 0xAFAFAFAA, "Tu uzçdi ðaðliku.");
623 return true;
624}
625
626COMMAND:kill(const playerid, const params[])
627{
628 SetPlayerHealth(playerid, 0);
629 return true;
630}
631
632COMMAND:car(const playerid, const params[])
633{
634 if(RaceOn) {
635 GetPlayerPos(playerid, Tempx1, Tempy1, Tempz1);
636 GetPlayerFacingAngle(playerid, Tempr);
637 if(PlayerCar[playerid] != 0xFFFF) {
638 if(GetPlayerVehicleID(playerid) != PlayerCar[playerid] && GetPlayerState(playerid) != PLAYER_STATE_DRIVER) {
639 vehicledriver = VehicleDriver(PlayerCar[playerid]);
640 if(vehicledriver != 255) {
641 if(IsPlayerConnected(vehicledriver)) {
642 GetPlayerPos(vehicledriver, Tempx1, Tempy1, Tempz1);
643 GetPlayerFacingAngle(vehicledriver, Tempr);
644 RemovePlayerFromVehicle(vehicledriver);
645 SetPlayerPos(vehicledriver, Tempx1, Tempy1, Tempz1);
646 SetPlayerFacingAngle(vehicledriver, Tempr);
647 GetPlayerPos(playerid, Tempx1, Tempy1, Tempz1);
648 GetPlayerFacingAngle(playerid, Tempr);
649 PutPlayerInVehicle(playerid, PlayerCar[playerid], 0);
650 SetVehiclePos(PlayerCar[playerid], Tempx1, Tempy1, Tempz1);
651 SetVehicleZAngle(PlayerCar[playerid], Tempr);
652 } else {
653 PutPlayerInVehicle(playerid, PlayerCar[playerid], 0);
654 SetVehiclePos(PlayerCar[playerid], Tempx1, Tempy1, Tempz1);
655 SetVehicleZAngle(PlayerCar[playerid], Tempr);
656 }
657 } else {
658 PutPlayerInVehicle(playerid, PlayerCar[playerid], 0);
659 SetVehiclePos(PlayerCar[playerid], Tempx1, Tempy1, Tempz1);
660 SetVehicleZAngle(PlayerCar[playerid], Tempr);
661 }
662 }
663 } else {
664 PlayerCar[playerid] = CreateVehicle(510, 9999, -9999, 9999, 0, -1, -1, -1);
665 PutPlayerInVehicle(playerid, PlayerCar[playerid], 0);
666 SetVehiclePos(PlayerCar[playerid], Tempx1, Tempy1, Tempz1);
667 SetVehicleZAngle(PlayerCar[playerid], Tempr);
668 }
669 } else {
670 SendClientMessage(playerid, 0xFFFF00AA, "* Pagaidâm tu nevari lietot braucamrîku!");
671 }
672 return true;
673}
674
675COMMAND:help(const playerid, const params[])
676{
677 SendClientMessage(playerid, 0xFFFF00AA, "* /car, /para, /kill, /time - viss ko tev vajag zinat.");
678 return true;
679}
680
681//------------------------------------------------------------------------------
682
683
684public OnPlayerUpdate(playerid) {
685 if(GetPlayerWeapon(playerid) != 0 && GetPlayerWeapon(playerid) != 46) {
686 ResetPlayerWeapons(playerid);
687 }
688 return true;
689}
690
691//------------------------------------------------------------------------------
692
693public OnGameModeExit()
694{
695
696 return true;
697}
698
699//------------------------------------------------------------------------------
700
701public CountDown()
702{
703 CountDownTime--;
704 if(CountDownTime > 0) {
705 format(tempstring, 128, "~W~%d", CountDownTime);
706 foreach(Player, i) {
707 if(Spawned[i]) {
708 GameTextForPlayer(i, tempstring, 750, 6);
709 GetPlayerPos(i, Tempx1, Tempy1, Tempz1);
710 GetPlayerFacingAngle(i, Tempr);
711 PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
712 if(CountDownTime != 5) {
713 Tempx2 = Tempx1 + ((CountDownTime*5) * floatsin(-Tempr+(CountDownTime*45)+180, degrees));
714 Tempy2 = Tempy1 + ((CountDownTime*5) * floatcos(-Tempr+(CountDownTime*45)+180, degrees));
715 SetPlayerCameraPos(i, Tempx2, Tempy2, Tempz1+(2.5*CountDownTime));
716 SetPlayerCameraLookAt(i, Tempx1, Tempy1, Tempz1);
717 } else {
718 SetPlayerCameraPos(i, Tempx1, Tempy1, Tempz1+10);
719 SetPlayerCameraLookAt(i, Tempx1, Tempy1, Tempz1);
720 }
721 }
722 }
723 } else {
724 KillTimer(CountDownTimer);
725 foreach(Player, i) {
726 if(Spawned[i]) {
727 GetPlayerPos(i, Tempx1, Tempy1, Tempz1);
728 PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
729 GameTextForPlayer(i, "~W~GO", 2000, 6);
730 SetCameraBehindPlayer(i);
731 TogglePlayerControllable(i, true);
732 SetPlayerPoint(i);
733 SetPlayerScore(i, 0);
734 SetPlayerWorldBounds(i, 9999.0, -9999.0, 9999.0, -9999.0);
735 }
736 }
737 RaceOn = true;
738 RaceStartTime = GetTickCount();
739 }
740}
741
742//------------------------------------------------------------------------------
743
744stock SetPlayerPoint(playerid)
745{
746 SetPlayerExtraStuff(playerid);
747 DisablePlayerCheckpoint(playerid);
748 DisablePlayerRaceCheckpoint(playerid);
749 score = GetPlayerScore(playerid);
750 if(score != MAX_POINTS) {
751 if(TournamentPoints[score][PointType] == 0) {
752 SetPlayerCheckpoint(playerid, TournamentPoints[score][RaceX], TournamentPoints[score][RaceY], TournamentPoints[score][RaceZ], TournamentPoints[score][Size]);
753 } else if(TournamentPoints[score][PointType] == 2) {
754 if(score != MAX_POINTS-1) {
755 SetPlayerRaceCheckpoint(playerid, TournamentPoints[score][RaceCPType], TournamentPoints[score][RaceX], TournamentPoints[score][RaceY], TournamentPoints[score][RaceZ], TournamentPoints[score+1][RaceX], TournamentPoints[score+1][RaceY], TournamentPoints[score+1][RaceZ], TournamentPoints[score][Size]);
756 } else {
757 SetPlayerRaceCheckpoint(playerid, TournamentPoints[score][RaceCPType], TournamentPoints[score][RaceX], TournamentPoints[score][RaceY], TournamentPoints[score][RaceZ], TournamentPoints[score][RaceX], TournamentPoints[score][RaceY], TournamentPoints[score][RaceZ], TournamentPoints[score][Size]);
758 }
759 }
760 } else {
761 SetPlayerRacePos(playerid);
762 }
763 if(score != 0) {
764 SetSpawnInfo(playerid, 255, GetPlayerSkin(playerid), TournamentPoints[score-1][RaceX], TournamentPoints[score-1][RaceY], TournamentPoints[score-1][RaceZ], 0.0, 0, 0, 0, 0, 0, 0);
765 }
766}
767
768//------------------------------------------------------------------------------
769
770stock SetPlayerExtraStuff(playerid)
771{
772 score = GetPlayerScore(playerid);
773 if(score == 1) {
774 SetPlayerDrunkLevel(playerid, 50000);
775 SendClientMessage(playerid, 0xFFFF00AA, "* Galva iereiba, apmaldijos. Labi, ka ir karte.");
776 } else {
777 SetPlayerDrunkLevel(playerid, 0);
778 }
779}
780
781//------------------------------------------------------------------------------
782
783public PlayerStopSound(const playerid) PlayerPlaySound(playerid, 1186, 0.0, 0.0, 0.0);
784
785//------------------------------------------------------------------------------
786
787stock SetPlayerRacePos(playerid)
788{
789 RacePos++;
790 tempstamp = GetTickCount();
791 tempstamp -= RaceStartTime;
792 GetPlayerName(playerid, tempplayername, 24);
793 timeconvert(tempstamp, Hours, Minutes, Seconds, MSeconds);
794 if (Minutes < 10)format(sMinutes, sizeof(sMinutes), "0%d", Minutes);
795 else format(sMinutes, sizeof(sMinutes), "%d", Minutes);
796 if (Seconds < 10)format(sSeconds, sizeof(sSeconds), "0%d", Seconds);
797 else format(sSeconds, sizeof(sSeconds), "%d", Seconds);
798 if (MSeconds < 100)format(sMSeconds, sizeof(sMSeconds), "0%d", MSeconds);
799 else format(sMSeconds, sizeof(sMSeconds), "%d", MSeconds);
800 format(tempstring, 128, "* Trases laiks: %d:%s:%s.%s", Hours, sMinutes, sSeconds, sMSeconds);
801 SendClientMessage(playerid, 0x33AA33AA, tempstring);
802 PlayerPlaySound(playerid, 1097, 0.0, 0.0, 0.0);
803 SetTimerEx("PlayerStopSound", 17000, false, "d", playerid);
804 format(tempstring, 128, "~r~%s ~w~FINISEJA ~g~%d.", tempplayername, RacePos);
805 printf("* %s finished as %d", tempplayername, RacePos);
806 foreach(Player, i) {
807 GameTextForPlayer(i, tempstring, 3000, 5);
808 }
809}
810
811//------------------------------------------------------------------------------
812
813stock IsValidSkin(skinid)
814{
815 if (skinid < 0 || skinid > 299) return false;
816 for (new i; i<22; i++) {
817 if (skinid == badSkins[i]) return false;
818 }
819 return true;
820}
821
822//------------------------------------------------------------------------------
823
824stock VehicleDriver(vehicleid)
825{
826 foreach(Player, i)
827 if (Spawned[i] && GetPlayerVehicleID(i) == vehicleid && (GetPlayerState(i) == 2)) return i;
828 return 255;
829}
830
831//------------------------------------------------------------------------------
832
833stock IsPlayerCloserToPickup(playerid)
834{
835 score = GetPlayerScore(playerid);
836 GetPlayerPos(playerid, Tempx1, Tempy1, Tempz1);
837 Tempx2 = TournamentPoints[score][RaceX];
838 Tempy2 = TournamentPoints[score][RaceY];
839 Tempz2 = TournamentPoints[score][RaceZ];
840 Tempx1 -= Tempx2;
841 Tempy1 -= Tempy2;
842 Tempz1 -= Tempz2;
843 if( (Tempx1 * Tempx1) + (Tempy1 * Tempy1) + (Tempz1 * Tempz1) < LastDistance[playerid]) {
844 LastDistance[playerid] = ((Tempx1 * Tempx1) + (Tempy1 * Tempy1) + (Tempz1 * Tempz1));
845 return true;
846 } else {
847 LastDistance[playerid] = ((Tempx1 * Tempx1) + (Tempy1 * Tempy1) + (Tempz1 * Tempz1));
848 return false;
849 }
850}
851
852//------------------------------------------------------------------------------
853
854stock GetPickupPointID(pickupid)
855{
856 for(new i = 0; i<MAX_POINTS; i++) {
857 if(TournamentPoints[i][PickupID] == pickupid) {
858 return i;
859 }
860 }
861 return -1;
862}
863
864//------------------------------------------------------------------------------
865
866stock timeconvert(Time, &Hourss, &Minutess, &Secondss, &MSecondss)
867{
868 new Float:fTime = floatdiv(Time, 3600000);
869 Hourss = floatround(fTime, floatround_tozero);
870 Minutess = floatround(floatmul(fTime - Hourss, 60), floatround_tozero);
871 Secondss = floatround(floatmul(floatmul(fTime - Hourss, 60) - Minutess, 60), floatround_tozero);
872 MSecondss = floatround(floatmul(floatmul(floatmul(fTime - Hourss, 60) - Minutess, 60) - Secondss, 1000), floatround_tozero);
873}
874
875//------------------------------------------------------------------------------
876
877stock sscanf(string[], format[], {Float,_}:...)
878{
879 #if defined isnull
880 if (isnull(string))
881 #else
882 if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
883 #endif
884 {
885 return format[0];
886 }
887 #pragma tabsize 4
888 new
889 formatPos = 0,
890 stringPos = 0,
891 paramPos = 2,
892 paramCount = numargs(),
893 delim = ' ';
894 while (string[stringPos] && string[stringPos] <= ' ')
895 {
896 stringPos++;
897 }
898 while (paramPos < paramCount && string[stringPos])
899 {
900 switch (format[formatPos++])
901 {
902 case '\0':
903 {
904 return false;
905 }
906 case 'i', 'd':
907 {
908 new
909 neg = 1,
910 num = 0,
911 ch = string[stringPos];
912 if (ch == '-')
913 {
914 neg = -1;
915 ch = string[++stringPos];
916 }
917 do
918 {
919 stringPos++;
920 if ('0' <= ch <= '9')
921 {
922 num = (num * 10) + (ch - '0');
923 }
924 else
925 {
926 return -1;
927 }
928 }
929 while ((ch = string[stringPos]) > ' ' && ch != delim);
930 setarg(paramPos, 0, num * neg);
931 }
932 case 'h', 'x':
933 {
934 new
935 num = 0,
936 ch = string[stringPos];
937 do
938 {
939 stringPos++;
940 switch (ch)
941 {
942 case 'x', 'X':
943 {
944 num = 0;
945 continue;
946 }
947 case '0' .. '9':
948 {
949 num = (num << 4) | (ch - '0');
950 }
951 case 'a' .. 'f':
952 {
953 num = (num << 4) | (ch - ('a' - 10));
954 }
955 case 'A' .. 'F':
956 {
957 num = (num << 4) | (ch - ('A' - 10));
958 }
959 default:
960 {
961 return -1;
962 }
963 }
964 }
965 while ((ch = string[stringPos]) > ' ' && ch != delim);
966 setarg(paramPos, 0, num);
967 }
968 case 'c':
969 {
970 setarg(paramPos, 0, string[stringPos++]);
971 }
972 case 'f':
973 {
974 setarg(paramPos, 0, _:floatstr(string[stringPos]));
975 }
976 case 'p':
977 {
978 delim = format[formatPos++];
979 continue;
980 }
981 case '\'':
982 {
983 new
984 end = formatPos - 1,
985 ch;
986 while ((ch = format[++end]) && ch != '\'') {}
987 if (!ch)
988 {
989 return -1;
990 }
991 format[end] = '\0';
992 if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
993 {
994 if (format[end + 1])
995 {
996 return -1;
997 }
998 return false;
999 }
1000 format[end] = '\'';
1001 stringPos = ch + (end - formatPos);
1002 formatPos = end + 1;
1003 }
1004 case 'u':
1005 {
1006 new
1007 end = stringPos - 1,
1008 id = 0,
1009 bool:num = true,
1010 ch;
1011 while ((ch = string[++end]) && ch != delim)
1012 {
1013 if (num)
1014 {
1015 if ('0' <= ch <= '9')
1016 {
1017 id = (id * 10) + (ch - '0');
1018 }
1019 else
1020 {
1021 num = false;
1022 }
1023 }
1024 }
1025 if (num && IsPlayerConnected(id))
1026 {
1027 setarg(paramPos, 0, id);
1028 }
1029 else
1030 {
1031 #if !defined foreach
1032 #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
1033 #define __SSCANF_FOREACH__
1034 #endif
1035 string[end] = '\0';
1036 num = false;
1037 new
1038 name[MAX_PLAYER_NAME];
1039 id = end - stringPos;
1040 foreach (Player, playerid)
1041 {
1042 GetPlayerName(playerid, name, sizeof (name));
1043 if (!strcmp(name, string[stringPos], true, id))
1044 {
1045 setarg(paramPos, 0, playerid);
1046 num = true;
1047 break;
1048 }
1049 }
1050 if (!num)
1051 {
1052 setarg(paramPos, 0, INVALID_PLAYER_ID);
1053 }
1054 string[end] = ch;
1055 #if defined __SSCANF_FOREACH__
1056 #undef foreach
1057 #undef __SSCANF_FOREACH__
1058 #endif
1059 }
1060 stringPos = end;
1061 }
1062 case 's', 'z':
1063 {
1064 new
1065 i = 0,
1066 ch;
1067 if (format[formatPos])
1068 {
1069 while ((ch = string[stringPos++]) && ch != delim)
1070 {
1071 setarg(paramPos, i++, ch);
1072 }
1073 if (!i)
1074 {
1075 return -1;
1076 }
1077 }
1078 else
1079 {
1080 while ((ch = string[stringPos++]))
1081 {
1082 setarg(paramPos, i++, ch);
1083 }
1084 }
1085 stringPos--;
1086 setarg(paramPos, i, '\0');
1087 }
1088 default:
1089 {
1090 continue;
1091 }
1092 }
1093 while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
1094 {
1095 stringPos++;
1096 }
1097 while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
1098 {
1099 stringPos++;
1100 }
1101 paramPos++;
1102 }
1103 do
1104 {
1105 if ((delim = format[formatPos++]) > ' ')
1106 {
1107 if (delim == '\'')
1108 {
1109 while ((delim = format[formatPos++]) && delim != '\'') {}
1110 }
1111 else if (delim != 'z')
1112 {
1113 return delim;
1114 }
1115 }
1116 }
1117 while (delim > ' ');
1118 return false;
1119}
1120
1121//------------------------------------------------------------------------------
1122
1123public RePutPlayerInVehicle(const playerid) {
1124 if(!IsPlayerInAnyVehicle(playerid)) {
1125 if(Spawned[playerid]) {
1126 if(PlayerCar[playerid] != 0xFFFF) {
1127 GetPlayerPos(playerid, Tempx2, Tempy2, Tempz2);
1128 GetPlayerFacingAngle(playerid, Tempr);
1129 if(Tempz2 > 1) {
1130 PutPlayerInVehicle(playerid, PlayerCar[playerid], 0);
1131 SetVehiclePos(PlayerCar[playerid], Tempx2, Tempy2, Tempz2);
1132 SetVehicleZAngle(PlayerCar[playerid], Tempr);
1133 } else {
1134 SetTimerEx("RePutPlayerInVehicle", 100, false, "i", playerid);
1135 }
1136 }
1137 }
1138 }
1139}
1140
1141//------------------------------------------------------------------------------
1142
1143public Virziens()
1144{
1145 if(RaceOn) {
1146 foreach(Player, i) {
1147 if(TournamentPoints[GetPlayerScore(i)][Direction] == 1) {
1148 if(IsPlayerCloserToPickup(i))
1149 {
1150 GameTextForPlayer(i, "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~b~~g~Virziens ir pareizs", 1000, 3);
1151 } else {
1152 GameTextForPlayer(i, "~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~b~~r~Virziens nav pareizs", 1000, 3);
1153 }
1154 }
1155 }
1156 }
1157}