Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.03 KB | None | 0 0
  1. /*
  2. * MTA maploader
  3. * By IPrototypeI
  4. */
  5.  
  6. /*
  7. * Native
  8. * native LoadMap(path[]);
  9. * native RestartRace();
  10. * native StartRace(time);
  11. */
  12. #if !defined _sscanf2_included
  13. #include <sscanf2>
  14. #endif
  15.  
  16. #if !defined _streamer_included
  17. #include <streamer>
  18. #endif
  19.  
  20. enum mapData {
  21. pMmodelid,
  22. pMcolorID,
  23. pMtype[30],
  24. Float:pMX,
  25. Float:pMY,
  26. Float:pMZ,
  27. Float:pMRX,
  28. Float:pMRY,
  29. Float:pMRZ,
  30. Float:pNMRZ
  31. };
  32. new mapValues[mapData];
  33.  
  34. native IsValidVehicle(vehicleid);
  35. forward OnPlayerFinishRace(playerid);
  36.  
  37. static const VehicleNames[212][20 char] = {
  38. {!"Landstalker"},{!"Bravura"},{!"Buffalo"},{!"Linerunner"},{!"Perrenial"},{!"Sentinel"},{!"Dumper"},
  39. {!"Firetruck"},{!"Trashmaster"},{!"Stretch"},{!"Manana"},{!"Infernus"},{!"Voodoo"},{!"Pony"},{!"Mule"},
  40. {!"Cheetah"},{!"Ambulance"},{!"Leviathan"},{!"Moonbeam"},{!"Esperanto"},{!"Taxi"},{!"Washington"},
  41. {!"Bobcat"},{!"Mr Whoopee"},{!"BF Injection"},{!"Hunter"},{!"Premier"},{!"Enforcer"},{!"Securicar"},
  42. {!"Banshee"},{!"Predator"},{!"Bus"},{!"Rhino"},{!"Barracks"},{!"Hotknife"},{!"Trailer 1"},{!"Previon"},
  43. {!"Coach"},{!"Cabbie"},{!"Stallion"},{!"Rumpo"},{!"RC Bandit"},{!"Romero"},{!"Packer"},{!"Monster"},
  44. {!"Admiral"},{!"Squalo"},{!"Seasparrow"},{!"Pizzaboy"},{!"Tram"},{!"Trailer 2"},{!"Turismo"},
  45. {!"Speeder"},{!"Reefer"},{!"Tropic"},{!"Flatbed"},{!"Yankee"},{!"Caddy"},{!"Solair"},{!"Berkley's RC Van"},
  46. {!"Skimmer"},{!"PCJ-600"},{!"Faggio"},{!"Freeway"},{!"RC Baron"},{!"RC Raider"},{!"Glendale"},{!"Oceanic"},
  47. {!"Sanchez"},{!"Sparrow"},{!"Patriot"},{!"Quad"},{!"Coastguard"},{!"Dinghy"},{!"Hermes"},{!"Sabre"},
  48. {!"Rustler"},{!"ZR-350"},{!"Walton"},{!"Regina"},{!"Comet"},{!"BMX"},{!"Burrito"},{!"Camper"},{!"Marquis"},
  49. {!"Baggage"},{!"Dozer"},{!"Maverick"},{!"News Chopper"},{!"Rancher"},{!"FBI Rancher"},{!"Virgo"},{!"Greenwood"},
  50. {!"Jetmax"},{!"Hotring"},{!"Sandking"},{!"Blista Compact"},{!"Police Maverick"},{!"Boxville"},{!"Benson"},
  51. {!"Mesa"},{!"RC Goblin"},{!"Hotring Racer A"},{!"Hotring Racer B"},{!"Bloodring Banger"},{!"Rancher"},
  52. {!"Super GT"},{!"Elegant"},{!"Journey"},{!"Bike"},{!"Mountain Bike"},{!"Beagle"},{!"Cropdust"},{!"Stunt"},
  53. {!"Tanker"}, {!"Roadtrain"},{!"Nebula"},{!"Majestic"},{!"Buccaneer"},{!"Shamal"},{!"Hydra"},{!"FCR-900"},
  54. {!"NRG-500"},{!"HPV1000"},{!"Cement Truck"},{!"Tow Truck"},{!"Fortune"},{!"Cadrona"},{!"FBI Truck"},
  55. {!"Willard"},{!"Forklift"},{!"Tractor"},{!"Combine"},{!"Feltzer"},{!"Remington"},{!"Slamvan"},
  56. {!"Blade"},{!"Freight"},{!"Streak"},{!"Vortex"},{!"Vincent"},{!"Bullet"},{!"Clover"},{!"Sadler"},
  57. {!"Firetruck LA"},{!"Hustler"},{!"Intruder"},{!"Primo"},{!"Cargobob"},{!"Tampa"},{!"Sunrise"},{!"Merit"},
  58. {!"Utility"},{!"Nevada"},{!"Yosemite"},{!"Windsor"},{!"Monster A"},{!"Monster B"},{!"Uranus"},{!"Jester"},
  59. {!"Sultan"},{!"Stratum"},{!"Elegy"},{!"Raindance"},{!"RC Tiger"},{!"Flash"},{!"Tahoma"},{!"Savanna"},
  60. {!"Bandito"},{!"Freight Flat"},{!"Streak Carriage"},{!"Kart"},{!"Mower"},{!"Duneride"},{!"Sweeper"},
  61. {!"Broadway"},{!"Tornado"},{!"AT-400"},{!"DFT-30"},{!"Huntley"},{!"Stafford"},{!"BF-400"},{!"Newsvan"},
  62. {!"Tug"},{!"Trailer 3"},{!"Emperor"},{!"Wayfarer"},{!"Euros"},{!"Hotdog"},{!"Club"},{!"Freight Carriage"},
  63. {!"Trailer 3"},{!"Andromada"},{!"Dodo"},{!"RC Cam"},{!"Launch"},{!"Police Car (LSPD)"},{!"Police Car (SFPD)"},
  64. {!"Police Car (LVPD)"},{!"Police Ranger"},{!"Picador"},{!"S.W.A.T. Van"},{!"Alpha"},{!"Phoenix"},{!"Glendale"},
  65. {!"Sadler"},{!"Luggage Trailer A"},{!"Luggage Trailer B"},{!"Stair Trailer"},{!"Boxville"},{!"Farm Plow"},
  66. {!"Utility Trailer"}
  67. };
  68.  
  69.  
  70. #if !defined _ALS_
  71. forward public _ALS_();
  72. _ALS_()<_ALS_:unhooked>{}
  73. _ALS_()<_ALS_:hooked>{}
  74. _ALS_()<>{}
  75. #endif
  76.  
  77. public OnGameModeInit()
  78. {
  79. state _ALS_:hooked;
  80. Streamer_VisibleItems(STREAMER_TYPE_OBJECT,1000);
  81. Streamer_SetTickRate(25);
  82. return H_OnGameModeInit();
  83. }
  84. forward H_OnGameModeInit();
  85. #if defined _ALS_OnGameModeInit
  86. #undef OnGameModeInit
  87. #else
  88. #define _ALS_OnGameModeInit
  89. #endif
  90. public H_OnGameModeInit() <_ALS_:unhooked> return 1;
  91. public H_OnGameModeInit() <> return 1;
  92. #define OnGameModeInit(%0) H_OnGameModeInit(%0)<_ALS_:hooked>
  93. new mapN3[156];
  94.  
  95. public OnPlayerEnterDynamicArea(playerid, areaid)
  96. {
  97. if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return 0;
  98. state _ALS_:hooked;
  99. new kind = Streamer_GetIntData(STREAMER_TYPE_AREA, areaid, E_STREAMER_EXTRA_ID);
  100. switch(kind){
  101. case 1:AddVehicleComponent(GetPlayerVehicleID(playerid), 1010);
  102. case 2:RepairVehicle(GetPlayerVehicleID(playerid));
  103. default: {
  104. new vehicle = GetPlayerVehicleID(playerid);
  105. if(GetVehicleModel(vehicle) != kind && kind != 0){
  106. new Float:vData[7];
  107. GetVehiclePos(vehicle,vData[0],vData[1],vData[2]);
  108. GetVehicleZAngle(vehicle,vData[3]);
  109. GetVehicleVelocity(vehicle,vData[4],vData[5],vData[6]);
  110. DestroyVehicle(vehicle);
  111. vehicle = CreateVehicle(kind,vData[0],vData[1],vData[2],vData[3],random(255),random(255),-1);
  112. PutPlayerInVehicle(playerid,vehicle,0);
  113. SetVehicleVelocity(vehicle,vData[4],vData[5],vData[6]);
  114. if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 425)
  115. {
  116. SetVehicleVelocity(vehicle,vData[4],vData[5],vData[6]+2.0);
  117. OnPlayerFinishRace(playerid);
  118. }
  119. }
  120. }
  121. }
  122. return H_OnPlayerEnterDynamicArea(playerid, areaid);
  123. }
  124. forward H_OnPlayerEnterDynamicArea(playerid, areaid);
  125. #if defined _ALS_OnPlayerEnterDynamicArea
  126. #undef OnPlayerEnterDynamicArea
  127. #else
  128. #define _ALS_OnPlayerEnterDynamicArea
  129. #endif
  130. public H_OnPlayerEnterDynamicArea(playerid, areaid) <_ALS_:unhooked> return 1;
  131. public H_OnPlayerEnterDynamicArea(playerid, areaid) <> return 1;
  132. #define OnPlayerEnterDynamicArea(%0,%1) H_OnPlayerEnterDynamicArea(%0,%1)<_ALS_:hooked>
  133.  
  134. stock LoadMap(path[], Float:offZ=0.0){
  135. if(UnloadMap()){
  136. new loadstr[400],count;
  137. if(!fexist(path))return 0;
  138. new File:fhandle = fopen(path,io_read);
  139. while(fread(fhandle, loadstr)){
  140. if(!loadstr[0])continue;
  141. if(!sscanf(loadstr, "p<\">'object''model='d'posX='f'posY='f'posZ='f'rotX='f'rotY='f'rotZ='f",mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ])){
  142. CreateDynamicObject(mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ],-1,-1,-1,300.0,300.0);
  143. }else if(!sscanf(loadstr, "p<\">'racepickup''type='s[30]'vehicle='d'posX='f'posY='f'posZ='f'rotX='f'rotY='f'rotZ='f",mapValues[pMtype],mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ])){
  144. if(strcmp(mapValues[pMtype],"nitro") == 0)CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ],1);
  145. else if(strcmp(mapValues[pMtype],"repair") == 0)CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ],2);
  146. else if(strcmp(mapValues[pMtype],"vehiclechange") == 0)CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ],3,mapValues[pMmodelid]);
  147. }else if(!sscanf(loadstr, "p<\">'spawnpoint''vehicle='d'posX='f'posY='f'posZ='f'rotX='f'rotY='f'rotZ='f",mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ])){
  148. ++count;
  149. CreateRaceSpawn(mapValues[pMmodelid], mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRZ],count);
  150. }else if(!sscanf(loadstr, "p<\">'marker''color='s[10]'posX='f'posY='f'posZ='f",mapValues[pMtype],mapValues[pMX], mapValues[pMY], mapValues[pMZ])){
  151. mapValues[pMmodelid] = CreateDynamicObject(1559,mapValues[pMX], mapValues[pMY], mapValues[pMZ],0.0,0.0,0.0,-1,-1,-1,400.0,400.0);
  152. mapValues[pMcolorID] = ConvertStringToHex(mapValues[pMtype]);
  153. SetDynamicObjectMaterial(mapValues[pMmodelid], 0, 1231, "dynsigns", "white64", mapValues[pMcolorID]);
  154. }else if(!sscanf(loadstr, "p<\">'speedboost''posX='f'posY='f'posZ='f'veloX='f'veloY='f'veloZ='f", mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ])){
  155. CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ,4, 0 ,mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ]);
  156. } else if(!sscanf(loadstr, "p<\">'teleport''posX='f'posY='f'posZ='f'nposX='f'nposY='f'nposZ='f'rotX='f'rotY='f'rotZ='f",mapValues[pMX], mapValues[pMY], mapValues[pMZ], mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ],mapValues[pNMRZ],mapValues[pNMRZ],mapValues[pNMRZ])){
  157. CreateRacePickup(mapValues[pMX], mapValues[pMY], mapValues[pMZ]+offZ,5 , 0 ,mapValues[pMRX], mapValues[pMRY], mapValues[pMRZ]+offZ,mapValues[pNMRZ]);
  158. }
  159. }
  160. fclose(fhandle);
  161. if(!count) return 0;
  162. LoadFromMeta(mapN3);
  163. }
  164. return 1;
  165. }
  166.  
  167. stock static LoadFromMeta(path[]) {
  168. if(!fexist(path))return 0;
  169. new File:fhandle = fopen(path,io_read),loadstr[400];
  170. while(fread(fhandle, loadstr)){
  171. if(strfind(loadstr,"#weather") != -1){
  172. strmid(loadstr, loadstr, strfind(loadstr,"[")+1, strfind(loadstr,"]"));
  173. SetWeather(strval(loadstr));
  174. break;
  175. }
  176. if(strfind(loadstr,"#time") != -1){
  177. strmid(loadstr, loadstr, strfind(loadstr,"[")+1, strfind(loadstr,"]"));
  178. SetWorldTime(strval(loadstr));
  179. break;
  180. }
  181. }
  182. fclose(fhandle);
  183. return 1;
  184. }
  185.  
  186. stock CreateRacePickup(Float:X, Float:Y, Float:Z, Kind, vehicleid = 0, Float:nX = 0.0, Float:nY = 0.0, Float:nZ = 0.0, Float:nRZ = 0.0) {
  187. new savestr[40],id;
  188. switch(Kind){
  189. case 1:{
  190. CreateDynamicObject(1010, X, Y, Z, 0.0, 0.0, 0.0,-1, -1, -1, 400.0, 400.0);
  191. Streamer_SetIntData(STREAMER_TYPE_AREA, CreateDynamicSphere(X, Y, Z, 8.0), E_STREAMER_EXTRA_ID, 1);
  192. CreateDynamic3DTextLabel("{bdf228}[ {ffffff}Nitro {bdf228}]", -1, X, Y, Z, 300.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 300.0);
  193. }
  194. case 2:{
  195. CreateDynamicObject(3096, X, Y, Z, 0.0, 0.0, 0.0,-1, -1, -1, 400.0, 400.0);
  196. Streamer_SetIntData(STREAMER_TYPE_AREA, CreateDynamicSphere(X, Y, Z, 8.0), E_STREAMER_EXTRA_ID, 2);
  197. CreateDynamic3DTextLabel("{bdf228}[ {ffffff}Repair {bdf228}]", -1, X, Y, Z, 300.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 300.0);
  198. }
  199. case 3:{
  200. CreateDynamicObject(1559, X, Y, Z, 0.0, 0.0, 0.0,-1, -1, -1, 400.0, 400.0);
  201. Streamer_SetIntData(STREAMER_TYPE_AREA, CreateDynamicSphere(X, Y, Z, 8.0), E_STREAMER_EXTRA_ID, vehicleid);
  202. new hstr[76];
  203. format(hstr,sizeof hstr, "{bdf228}[ {ffffff}%s {bdf228}]", GetVehicleName(vehicleid));
  204. CreateDynamic3DTextLabel(hstr, -1, X, Y, Z, 300.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 300.0);
  205. }
  206. case 4:{
  207. format(savestr,40,"%f|%f|%f",nX,nY,nZ);
  208. id = CreateDynamicSphere(X, Y, Z, 8.0);
  209. setproperty(0, "", 1000000+id, savestr);
  210. CreateDynamicObject(1252, X, Y, Z, 0.0, 0.0, 0.0, 10);
  211. Streamer_SetIntData(STREAMER_TYPE_AREA, id, E_STREAMER_EXTRA_ID, 4);
  212. CreateDynamic3DTextLabel("{bdf228}[ {ffffff}Speedboost {bdf228}]", -1, X, Y, Z, 300.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 300.0);
  213. }
  214. case 5:{
  215. format(savestr,40,"%f|%f|%f|%f",nX,nY,nZ,nRZ);
  216. id = CreateDynamicSphere(X, Y, Z, 8.0);
  217. setproperty(0, "", 1000000+id, savestr);
  218. CreateDynamicObject(1318, X, Y, Z, 0.0, 0.0, 0.0,-1, -1, -1, 400.0, 400.0);
  219. Streamer_SetIntData(STREAMER_TYPE_AREA, id, E_STREAMER_EXTRA_ID, 5);
  220. CreateDynamic3DTextLabel("{bdf228}[ {ffffff}Teleports {bdf228}]", -1, X, Y, Z+1.5, 300.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 10, -1, -1, -1, 300.0);
  221. }
  222. }
  223. return 1;
  224. }
  225. stock InitializeRace() {
  226. new pos = 10000 + 1, loadstr[64], vw, mapValues[mapData];
  227. for(new i; i != MAX_PLAYERS; ++i){
  228. if(!IsPlayerConnected(i))continue;
  229. switch(existproperty(0, "", pos)){
  230. case true:{
  231. getproperty(0, "", pos, loadstr);
  232. strunpack(loadstr, loadstr, sizeof(loadstr));
  233. sscanf(loadstr,"p<|>e<i-i-s[30]fff-f-ff>",mapValues);
  234. Streamer_UpdateEx(i, mapValues[pMX],mapValues[pMY],mapValues[pMZ], vw, -1);
  235. mapValues[pMmodelid] = CreateVehicle(mapValues[pMmodelid],mapValues[pMX],mapValues[pMY],mapValues[pMZ],mapValues[pMRZ]+5,random(255),random(255),-1);
  236. SetVehicleVirtualWorld(mapValues[pMmodelid],vw);
  237. TogglePlayerControllable(i,false);
  238. SetPlayerVirtualWorld(i,vw);
  239. PutPlayerInVehicle(i,mapValues[pMmodelid],0);
  240. TextDrawShowForPlayer(i, Waiting0);
  241. TextDrawShowForPlayer(i, Waiting1);
  242. TextDrawShowForPlayer(i, Waiting2);
  243. TextDrawShowForPlayer(i, Waiting3);
  244. TextDrawShowForPlayer(i, Waiting4);
  245. TextDrawShowForPlayer(i, Waiting5);
  246. }
  247. case false:{
  248. pos = 10000 + 1;
  249. ++vw;
  250. getproperty(0, "", pos, loadstr);
  251. strunpack(loadstr, loadstr, sizeof(loadstr));
  252. sscanf(loadstr,"p<|>e<i-i-s[30]fff-f-ff>",mapValues);
  253. Streamer_UpdateEx(i, mapValues[pMX],mapValues[pMY],mapValues[pMZ], vw, -1);
  254. mapValues[pMmodelid] = CreateVehicle(mapValues[pMmodelid],mapValues[pMX],mapValues[pMY],mapValues[pMZ],mapValues[pMRZ]+5,random(255),random(255),-1);
  255. SetVehicleVirtualWorld(mapValues[pMmodelid],vw);
  256. TogglePlayerControllable(i,false);
  257. SetPlayerVirtualWorld(i,vw);
  258. PutPlayerInVehicle(i,mapValues[pMmodelid],0);
  259. TextDrawShowForPlayer(i, Waiting0);
  260. TextDrawShowForPlayer(i, Waiting1);
  261. TextDrawShowForPlayer(i, Waiting2);
  262. TextDrawShowForPlayer(i, Waiting3);
  263. TextDrawShowForPlayer(i, Waiting4);
  264. TextDrawShowForPlayer(i, Waiting5);
  265. }
  266. }
  267. ++pos;
  268. }
  269. return 1;
  270. }
  271. stock RestartRace() {
  272. if(RemoveVehicles())StartRace(getproperty(0, "CountdownTime"));
  273. return 1;
  274. }
  275.  
  276. stock StartRace(time){
  277. if(InitializeRace()){
  278. setproperty(.name = "CountdownTime", .value = time);
  279. return SetTimerEx("@Countdown",1000,false,"i",time);
  280. }
  281. return 1;
  282. }
  283.  
  284. forward @Countdown(time);
  285. @Countdown(time){
  286. new str[5];
  287. valstr(str,time/1000);
  288. time -= 1000;
  289. if(!time) {
  290. for(new i; i != MAX_PLAYERS; ++i)if(IsPlayerConnected(i))PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0),progressMap=false,ServerData[Started] = true, GameTextForPlayer(i, "~b~~h~~h~Go!", 500, 4),TogglePlayerControllable(i,true);
  291. } else {
  292. for(new i; i != MAX_PLAYERS; ++i) if(IsPlayerConnected(i))PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0),GameTextForPlayer(i, str, 500, 4);
  293. return SetTimerEx("@Countdown",1000,false,"i",time);
  294. }
  295. return 1;
  296. }
  297. stock static UnloadMap(){
  298. new i = 10000+1;
  299. while(existproperty(0, "", i)){
  300. deleteproperty(0, "", i);
  301. ++i;
  302. }
  303. Streamer_DestroyAllItems(STREAMER_TYPE_OBJECT , true);
  304. RemoveVehicles();
  305. return 1;
  306. }
  307.  
  308. stock static ConvertStringToHex(string[],size = sizeof(string)){
  309. new stringR[10];
  310. strmid(stringR,string,7,strlen(string));
  311. strdel(string,7,strlen(string));
  312. strdel(string,0,1);
  313. strins(string,"0x",0,size);
  314. strins(string,stringR,2,size);
  315. new i, cur=1,res=0;
  316. for (i=strlen(string);i>0;i--) {
  317. if (string[i-1]<58) res=res+cur*(string[i-1]-48); else res=res+cur*(string[i-1]-65+10);
  318. cur=cur*16;
  319. }
  320. return res;
  321. }
  322. stock static GetVehicleName(modelid)
  323. {
  324. static vehName[30];
  325. strunpack(vehName, VehicleNames[modelid - 400]);
  326. return vehName;
  327. }
  328. stock RemoveVehicles(){
  329. for(new i; i != MAX_VEHICLES; ++i)DestroyVehicle(i);
  330. return 1;
  331. }
  332. stock static CreateRaceSpawn(Modelid, Float:X, Float:Y, Float:Z, Float:rZ, count) {
  333. new savestr[64];
  334. format(savestr,64,"%d|%f|%f|%f|%f",Modelid,X,Y,Z,rZ);
  335. setproperty(0, "", 10000+count, savestr);
  336. return 1;
  337. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement