func.pwn 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654
  1. #define MAX_MAPLOAD_VARNAME 30
  2. enum MAPLOAD_TYPE_DATA {
  3. MAPLOAD_TYPE_ID,
  4. MAPLOAD_TYPE_VARNAME[MAX_MAPLOAD_VARNAME+1 char]
  5. }
  6. static
  7. l_ObjectData [MAX_OBJECTS][MAPLOAD_TYPE_DATA],
  8. l_VehicleData [MAX_VEHICLES][MAPLOAD_TYPE_DATA],
  9. l_ActorData [MAX_ACTORS][MAPLOAD_TYPE_DATA],
  10. l_ObjectsAdded,
  11. l_VehiclesAdded,
  12. l_ActorsAdded
  13. ;
  14. ShowMapLoadDialog(playerid, dialogid) {
  15. switch( dialogid ) {
  16. case DIALOGID_MAP_LOAD: {
  17. ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, "Load Map", "Enter the name of the map you would like to load:", "Load", "Cancel");
  18. }
  19. default: {
  20. return 0;
  21. }
  22. }
  23. return 1;
  24. }
  25. mapload_CreateVarname(id, idtype, varname[]) {
  26. switch(idtype) {
  27. case ID_TYPE_OBJECT: {
  28. if(l_ObjectsAdded >= MAX_OBJECTS) {
  29. return 0;
  30. }
  31. l_ObjectData[l_ObjectsAdded][MAPLOAD_TYPE_ID] = id;
  32. strpack(l_ObjectData[l_ObjectsAdded][MAPLOAD_TYPE_VARNAME], varname, MAX_MAPLOAD_VARNAME+1);
  33. l_ObjectsAdded ++;
  34. }
  35. case ID_TYPE_VEHICLE: {
  36. if(l_VehiclesAdded >= MAX_VEHICLES) {
  37. return 0;
  38. }
  39. l_VehicleData[l_VehiclesAdded][MAPLOAD_TYPE_ID] = id;
  40. strpack(l_VehicleData[l_VehiclesAdded][MAPLOAD_TYPE_VARNAME], varname, MAX_MAPLOAD_VARNAME+1);
  41. l_VehiclesAdded ++;
  42. }
  43. case ID_TYPE_ACTOR: {
  44. if(l_ActorsAdded >= MAX_ACTORS) {
  45. return 0;
  46. }
  47. l_ActorData[l_ActorsAdded][MAPLOAD_TYPE_ID] = id;
  48. strpack(l_ActorData[l_ActorsAdded][MAPLOAD_TYPE_VARNAME], varname, MAX_MAPLOAD_VARNAME+1);
  49. l_ActorsAdded ++;
  50. }
  51. default: {
  52. return 0;
  53. }
  54. }
  55. return 1;
  56. }
  57. mapload_GetVarname(idtype, varname[]) {
  58. new packed_varname[MAX_MAPLOAD_VARNAME+1];
  59. strpack(packed_varname, varname, sizeof packed_varname);
  60. switch(idtype) {
  61. case ID_TYPE_OBJECT: {
  62. if(l_ObjectsAdded == 0) {
  63. return INVALID_OBJECT_ID;
  64. }
  65. for(new i = l_ObjectsAdded - 1; i >= 0; i --) {
  66. if(!strcmp(packed_varname, l_ObjectData[i][MAPLOAD_TYPE_VARNAME])) {
  67. return l_ObjectData[i][MAPLOAD_TYPE_ID];
  68. }
  69. }
  70. return INVALID_OBJECT_ID;
  71. }
  72. case ID_TYPE_VEHICLE: {
  73. if(l_VehiclesAdded == 0) {
  74. return INVALID_VEHICLE_ID;
  75. }
  76. for(new i = l_VehiclesAdded - 1; i >= 0; i --) {
  77. if(!strcmp(packed_varname, l_VehicleData[i][MAPLOAD_TYPE_VARNAME])) {
  78. return l_VehicleData[i][MAPLOAD_TYPE_ID];
  79. }
  80. }
  81. return INVALID_VEHICLE_ID;
  82. }
  83. case ID_TYPE_ACTOR: {
  84. if(l_ActorsAdded == 0) {
  85. return INVALID_ACTOR_ID;
  86. }
  87. for(new i = l_ActorsAdded - 1; i >= 0; i --) {
  88. if(!strcmp(packed_varname, l_ActorData[i][MAPLOAD_TYPE_VARNAME])) {
  89. return l_ActorData[i][MAPLOAD_TYPE_ID];
  90. }
  91. }
  92. return INVALID_ACTOR_ID;
  93. }
  94. }
  95. return 0;
  96. }
  97. mapload_ResetVariables() {
  98. while(l_ObjectsAdded > 0) {
  99. l_ObjectsAdded --;
  100. l_ObjectData[l_ObjectsAdded][MAPLOAD_TYPE_ID] = INVALID_OBJECT_ID;
  101. strpack(l_ObjectData[l_ObjectsAdded][MAPLOAD_TYPE_VARNAME], "", MAX_MAPLOAD_VARNAME+1);
  102. }
  103. while(l_VehiclesAdded > 0) {
  104. l_VehiclesAdded --;
  105. l_VehicleData[l_VehiclesAdded][MAPLOAD_TYPE_ID] = INVALID_VEHICLE_ID;
  106. strpack(l_VehicleData[l_VehiclesAdded][MAPLOAD_TYPE_VARNAME], "", MAX_MAPLOAD_VARNAME+1);
  107. }
  108. while(l_ActorsAdded > 0) {
  109. l_ActorsAdded --;
  110. l_ActorData[l_ActorsAdded][MAPLOAD_TYPE_ID] = INVALID_ACTOR_ID;
  111. strpack(l_ActorData[l_ActorsAdded][MAPLOAD_TYPE_VARNAME], "", MAX_MAPLOAD_VARNAME+1);
  112. }
  113. }
  114. MapLoad(
  115. mapname[],
  116. &objects_loaded,
  117. &vehicles_loaded,
  118. &pickups_loaded,
  119. &actors_loaded,
  120. &attachments_loaded,
  121. &buildings_loaded,
  122. playerid = INVALID_PLAYER_ID
  123. ) {
  124. GetMapFilePath(mapname, g_FilePathString, sizeof g_FilePathString);
  125. if( !fexist(g_FilePathString) ) {
  126. return 0;
  127. }
  128. new File:file_handle = fopen(g_FilePathString, io_read);
  129. if( !file_handle ) {
  130. return 0;
  131. }
  132. mapload_ResetVariables();
  133. static
  134. buffer[500],
  135. func[100],
  136. params[300],
  137. comment[100]
  138. ;
  139. while( fread(file_handle, buffer) ) {
  140. strtrim(buffer);
  141. if( sscanf(buffer, "p<(>s[100]p<;>s[300]S(no comment)[100]", func, params, comment) ) {
  142. continue;
  143. }
  144. strtrim(params, " )");
  145. strtrim(comment, " /");
  146. if( isempty(comment) ) {
  147. format(comment, sizeof comment, "no comment");
  148. }
  149. if( strfind(func, "CreateObject") != -1 ) {
  150. static
  151. modelid,
  152. Float:x,
  153. Float:y,
  154. Float:z,
  155. Float:rx,
  156. Float:ry,
  157. Float:rz,
  158. Float:drawdistance,
  159. objectid,
  160. varname[MAX_MAPLOAD_VARNAME+1]
  161. ;
  162. if( sscanf(params, "p<,>iffffffF(0)", modelid, x, y, z, rx, ry, rz, drawdistance) ) {
  163. continue;
  164. }
  165. objectid = CreateObject(modelid, x, y, z, rx, ry, rz, drawdistance);
  166. if( objectid == INVALID_OBJECT_ID ) {
  167. continue;
  168. }
  169. strpack(g_ObjectData[objectid-1][OBJECT_DATA_COMMENT], comment, MAX_COMMENT_LEN+1);
  170. if( !sscanf(func, "p<=>s[31]{s[100]}", varname) ) {
  171. strtrim(varname, " ");
  172. mapload_CreateVarname(objectid, ID_TYPE_OBJECT, varname);
  173. }
  174. objects_loaded ++;
  175. }
  176. else if(
  177. strfind(func, "AddStaticVehicleEx") != -1 ||
  178. strfind(func, "AddStaticVehicle") != -1 ||
  179. strfind(func, "CreateVehicle") != -1
  180. ) {
  181. static
  182. modelid,
  183. Float:x,
  184. Float:y,
  185. Float:z,
  186. Float:r,
  187. color1,
  188. color2,
  189. vehicleid,
  190. varname[MAX_MAPLOAD_VARNAME+1]
  191. ;
  192. if( sscanf(params, "p<,>iffffii{s[100]}", modelid, x, y, z, r, color1, color2) ) {
  193. continue;
  194. }
  195. vehicleid = CreateVehicle(modelid, x, y, z, r, color1, color2, -1);
  196. if( vehicleid == INVALID_VEHICLE_ID ) {
  197. continue;
  198. }
  199. strpack(g_VehicleData[vehicleid-1][VEHICLE_DATA_COMMENT], comment, MAX_COMMENT_LEN+1); // Set Vehicle Comment
  200. if( !sscanf(func, "p<=>s[31]{s[100]}", varname) ) {
  201. strtrim(varname, " ");
  202. mapload_CreateVarname(vehicleid, ID_TYPE_VEHICLE, varname);
  203. }
  204. vehicles_loaded ++;
  205. }
  206. else if(
  207. strfind(func, "AddStaticPickup") != -1 ||
  208. strfind(func, "CreatePickup") != -1
  209. ) {
  210. static
  211. modelid,
  212. Float:x,
  213. Float:y,
  214. Float:z,
  215. pickupid
  216. ;
  217. if( sscanf(params, "p<,>i{s[100]}fff{s[100]}", modelid, x, y, z) ) {
  218. continue;
  219. }
  220. pickupid = CreatePickup(modelid, 1, x, y, z);
  221. if( pickupid != INVALID_PICKUP_ID ) {
  222. strpack(g_PickupData[pickupid][PICKUP_DATA_COMMENT], comment, MAX_COMMENT_LEN+1); // Set Comment
  223. }
  224. pickups_loaded ++;
  225. }
  226. else if( strfind(func, "CreateActor") != -1 ) {
  227. static
  228. modelid,
  229. Float:x,
  230. Float:y,
  231. Float:z,
  232. Float:r,
  233. actorid,
  234. varname[MAX_MAPLOAD_VARNAME+1]
  235. ;
  236. if( sscanf(params, "p<,>iffff", modelid, x, y, z, r) ) {
  237. continue;
  238. }
  239. actorid = CreateActor(modelid, x, y, z, r);
  240. if( actorid == INVALID_ACTOR_ID ) {
  241. continue;
  242. }
  243. strpack(g_ActorData[actorid][ACTOR_DATA_COMMENT], comment, MAX_COMMENT_LEN+1); // Set Comment
  244. if( !sscanf(func, "p<=>s[31]{s[100]}", varname) ) {
  245. strtrim(varname, " ");
  246. mapload_CreateVarname(actorid, ID_TYPE_ACTOR, varname);
  247. }
  248. actors_loaded ++;
  249. }
  250. else if( strfind(func, "SetObjectMaterialText") != -1 ) {
  251. static
  252. varname[MAX_MAPLOAD_VARNAME+1],
  253. text[100],
  254. matindex,
  255. matsize_name[100],
  256. matsize_int,
  257. font[100],
  258. fontsize,
  259. isbold,
  260. fontcolor,
  261. backcolor,
  262. alignment,
  263. objectid
  264. ;
  265. if(
  266. sscanf(params, "p<,>s[31]s[100]I(0)S(90)[100]S(Arial)[100]I(24)I(1)H(0xFFFFFFFF)H(0x0)I(0)", varname, text, matindex, matsize_name, font, fontsize, isbold, fontcolor, backcolor, alignment) &&
  267. sscanf(params, "p<,>s[31]s[100]I(0)S(90)[100]S(Arial)[100]I(24)I(1)I(-1)I(0)I(0)", varname, text, matindex, matsize_name, font, fontsize, isbold, fontcolor, backcolor, alignment)
  268. ) {
  269. continue;
  270. }
  271. strtrim(varname, " ");
  272. strtrim(matsize_name, " ");
  273. strtrim(text, " \"");
  274. strtrim(font, " \"");
  275. objectid = mapload_GetVarname(ID_TYPE_OBJECT, varname);
  276. if( objectid == INVALID_OBJECT_ID ) {
  277. continue;
  278. }
  279. if( !IsValidMaterialIndex(matindex) ) {
  280. continue;
  281. }
  282. matsize_int = GetMaterialSize(matsize_name);
  283. if( matsize_int == INVALID_MATERIAL_SIZE ) {
  284. continue;
  285. }
  286. g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_TYPE][matindex] = MATERIALINDEX_TYPE_TEXT;
  287. strpack(g_ObjectText[objectid-1][matindex], text, MAX_OBJECT_TEXT+1);
  288. g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_SIZE][matindex] = matsize_int;
  289. strpack(g_ObjectFont[objectid-1][matindex], font, MAX_FONTNAME_LEN+1);
  290. g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_FONTSIZE][matindex] = fontsize;
  291. g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_ISBOLD][matindex] = isbold ? true : false;
  292. g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_FONTCOLOR][matindex] = fontcolor;
  293. g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_COLOR][matindex] = backcolor;
  294. g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_ALIGNMENT][matindex] = alignment;
  295. ApplyObjectMaterialIndexData(objectid, matindex);
  296. }
  297. else if( strfind(func, "SetObjectMaterial") != -1 ) {
  298. static
  299. varname[MAX_MAPLOAD_VARNAME+1],
  300. matindex,
  301. texturemodelid,
  302. texturetxd[100],
  303. texturename[100],
  304. matcolor,
  305. objectid,
  306. textureid
  307. ;
  308. if(
  309. sscanf(params, "p<,>s[31]iis[100]s[100]H(0x0)", varname, matindex, texturemodelid, texturetxd, texturename, matcolor) &&
  310. sscanf(params, "p<,>s[31]iis[100]s[100]I(0)", varname, matindex, texturemodelid, texturetxd, texturename, matcolor)
  311. ){
  312. continue;
  313. }
  314. strtrim(varname, " ");
  315. strtrim(texturetxd, " \"");
  316. strtrim(texturename, " \"");
  317. if( !IsValidMaterialIndex(matindex) ) {
  318. continue;
  319. }
  320. objectid = mapload_GetVarname(ID_TYPE_OBJECT, varname);
  321. if( objectid == INVALID_OBJECT_ID ) {
  322. continue;
  323. }
  324. textureid = GetTextureID(texturemodelid, texturetxd, texturename);
  325. g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_TYPE][matindex] = MATERIALINDEX_TYPE_TEXTURE;
  326. g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_TEXTURE][matindex] = textureid;
  327. g_ObjectData[objectid-1][OBJECT_DATA_MATINDEX_COLOR][matindex] = matcolor;
  328. ApplyObjectMaterialIndexData(objectid, matindex);
  329. }
  330. else if( strfind(func, "AddVehicleComponent") != -1 ) {
  331. static
  332. componentid,
  333. vehicleid,
  334. varname[MAX_MAPLOAD_VARNAME+1]
  335. ;
  336. if( sscanf(params, "p<,>s[31]i", varname, componentid) ) {
  337. continue;
  338. }
  339. strtrim(varname, " ");
  340. vehicleid = mapload_GetVarname(ID_TYPE_VEHICLE, varname);
  341. if( vehicleid != INVALID_VEHICLE_ID ) {
  342. AddVehicleComponent(vehicleid, componentid);
  343. }
  344. }
  345. else if( strfind(func, "ChangeVehiclePaintjob") != -1 ) {
  346. static
  347. paintjobid,
  348. vehicleid,
  349. varname[MAX_MAPLOAD_VARNAME+1]
  350. ;
  351. if( sscanf(params, "p<,>s[31]i", varname, paintjobid) ) {
  352. continue;
  353. }
  354. strtrim(varname, " ");
  355. vehicleid = mapload_GetVarname(ID_TYPE_VEHICLE, varname);
  356. if( vehicleid == INVALID_VEHICLE_ID ) {
  357. continue;
  358. }
  359. g_VehicleData[vehicleid-1][VEHICLE_DATA_PAINTJOB] = paintjobid;
  360. ChangeVehiclePaintjob(vehicleid, paintjobid);
  361. }
  362. else if( strfind(func, "AttachObjectToObject") != -1 ) {
  363. static
  364. varname[MAX_MAPLOAD_VARNAME+1],
  365. attachto_varname[MAX_MAPLOAD_VARNAME+1],
  366. Float:x,
  367. Float:y,
  368. Float:z,
  369. Float:rx,
  370. Float:ry,
  371. Float:rz,
  372. objectid,
  373. attachtoid
  374. ;
  375. if( sscanf(params, "p<,>s[31]s[31]ffffff", varname, attachto_varname, x, y, z, rx, ry, rz) ) {
  376. continue;
  377. }
  378. strtrim(varname, " ");
  379. strtrim(attachto_varname, " ");
  380. objectid = mapload_GetVarname(ID_TYPE_OBJECT, varname);
  381. if( objectid == INVALID_OBJECT_ID ) {
  382. continue;
  383. }
  384. attachtoid = mapload_GetVarname(ID_TYPE_OBJECT, attachto_varname);
  385. if( attachtoid == INVALID_OBJECT_ID ) {
  386. continue;
  387. }
  388. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_IDTYPE] = ID_TYPE_OBJECT;
  389. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_ID] = attachtoid;
  390. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_X] = x;
  391. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_Y] = y;
  392. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_Z] = z;
  393. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_RX] = rx;
  394. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_RY] = ry;
  395. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_RZ] = rz;
  396. ApplyObjectAttachData(objectid);
  397. }
  398. else if( strfind(func, "AttachObjectToVehicle") != -1 ) {
  399. static
  400. varname[MAX_MAPLOAD_VARNAME+1],
  401. attachto_varname[MAX_MAPLOAD_VARNAME+1],
  402. Float:x,
  403. Float:y,
  404. Float:z,
  405. Float:rx,
  406. Float:ry,
  407. Float:rz,
  408. objectid,
  409. attachtoid
  410. ;
  411. if( sscanf(params, "p<,>s[31]s[31]ffffff", varname, attachto_varname, x, y, z, rx, ry, rz) ) {
  412. continue;
  413. }
  414. strtrim(varname, " ");
  415. strtrim(attachto_varname, " ");
  416. objectid = mapload_GetVarname(ID_TYPE_OBJECT, varname);
  417. if( objectid == INVALID_OBJECT_ID ) {
  418. continue;
  419. }
  420. attachtoid = mapload_GetVarname(ID_TYPE_VEHICLE, attachto_varname);
  421. if( attachtoid == INVALID_VEHICLE_ID ) {
  422. continue;
  423. }
  424. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_IDTYPE] = ID_TYPE_VEHICLE;
  425. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_ID] = attachtoid;
  426. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_X ] = x;
  427. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_Y ] = y;
  428. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_Z ] = z;
  429. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_RX] = rx;
  430. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_RY] = ry;
  431. g_ObjectData[objectid-1][OBJECT_DATA_ATTACH_RZ] = rz;
  432. ApplyObjectAttachData(objectid);
  433. }
  434. else if( strfind(func, "SetPlayerAttachedObject") != -1 ) {
  435. static
  436. index,
  437. modelid,
  438. bone,
  439. Float:x,
  440. Float:y,
  441. Float:z,
  442. Float:rx,
  443. Float:ry,
  444. Float:rz,
  445. Float:sx,
  446. Float:sy,
  447. Float:sz,
  448. color1,
  449. color2
  450. ;
  451. if(
  452. sscanf(params, "p<,>{s[50]}iiiF(0)F(0)F(0)F(0)F(0)F(0)F(0)F(0)F(0)H(0x0)H(0x0)", index, modelid, bone, x, y, z, rx, ry, rz, sx, sy, sz, color1, color2) &&
  453. sscanf(params, "p<,>{s[50]}iiiF(0)F(0)F(0)F(0)F(0)F(0)F(0)F(0)F(0)I(0)I(0)", index, modelid, bone, x, y, z, rx, ry, rz, sx, sy, sz, color1, color2)
  454. ){
  455. continue;
  456. }
  457. if( !IsValidPlayerAttachIndex(index) || !IsValidBone(bone) ) {
  458. continue;
  459. }
  460. g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_TOGGLE] = true;
  461. g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_MODEL] = modelid;
  462. g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_BONE] = bone;
  463. g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_X ] = x;
  464. g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_Y ] = y;
  465. g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_Z ] = z;
  466. g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_RX] = rx;
  467. g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_RY] = ry;
  468. g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_RZ] = rz;
  469. g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_SX] = sx;
  470. g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_SY] = sy;
  471. g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_SZ] = sz;
  472. g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_COLOR1] = color1;
  473. g_PlayerAttachData[playerid][index][PLAYERATTACH_DATA_COLOR2] = color2;
  474. ApplyPlayerAttachData(playerid, index);
  475. attachments_loaded ++;
  476. }
  477. else if( strfind(func, "ApplyActorAnimation") != -1 ) {
  478. static
  479. varname[MAX_MAPLOAD_VARNAME+1],
  480. animlib[100],
  481. animname[100],
  482. Float:delta,
  483. loop,
  484. lockx,
  485. locky,
  486. freeze,
  487. time,
  488. actorid,
  489. animindex
  490. ;
  491. if( sscanf(params, "p<,>s[31]s[100]s[100]fiiiii", varname, animlib, animname, delta, loop, lockx, locky, freeze, time) ) {
  492. continue;
  493. }
  494. strtrim(varname, " ");
  495. strtrim(animlib, " \"");
  496. strtrim(animname, " \"");
  497. actorid = mapload_GetVarname(ID_TYPE_ACTOR, varname);
  498. if( actorid == INVALID_ACTOR_ID ) {
  499. continue;
  500. }
  501. animindex = GetAnimationIndex(animlib, animname);
  502. if( animindex == INVALID_ANIM_INDEX ) {
  503. continue;
  504. }
  505. g_ActorData[actorid][ACTOR_DATA_ANIM_INDEX] = animindex;
  506. g_ActorData[actorid][ACTOR_DATA_ANIM_DELTA] = delta;
  507. g_ActorData[actorid][ACTOR_DATA_ANIM_LOOP] = loop ? true : false;
  508. g_ActorData[actorid][ACTOR_DATA_ANIM_LOCKX] = lockx ? true : false;
  509. g_ActorData[actorid][ACTOR_DATA_ANIM_LOCKY] = locky ? true : false;
  510. g_ActorData[actorid][ACTOR_DATA_ANIM_FREEZE] = freeze ? true : false;
  511. g_ActorData[actorid][ACTOR_DATA_ANIM_TIME] = time;
  512. ApplyActorAnimationData(actorid);
  513. }
  514. else if( strfind(func, "RemoveBuildingForPlayer") != -1 ) {
  515. static
  516. modelid,
  517. Float:x,
  518. Float:y,
  519. Float:z,
  520. Float:radius,
  521. building_array[BUILDING_DATA_SIZE],
  522. buildings_found
  523. ;
  524. if( sscanf(params, "p<,>{s[50]}iffff", modelid, x, y, z, radius) ) {
  525. continue;
  526. }
  527. buildings_found = GetBuildingsInRange(
  528. .result = building_array,
  529. .result_size = BUILDING_DATA_SIZE,
  530. .search_modelid = modelid,
  531. .search_x = x,
  532. .search_y = y,
  533. .search_z = z,
  534. .search_radius = radius
  535. );
  536. for(new b, buildingid; b < buildings_found; b ++) {
  537. buildingid = building_array[b];
  538. if( g_BuildingData[buildingid][BUILDING_DATA_ISREMOVED] ) {
  539. continue;
  540. }
  541. g_BuildingData[buildingid][BUILDING_DATA_ISREMOVED] = true;
  542. RemoveBuildingIDForAll(buildingid);
  543. buildings_loaded ++;
  544. }
  545. }
  546. }
  547. fclose(file_handle);
  548. return 1;
  549. }