GammixSAMP

textdraws.inc - By Gammix

May 25th, 2015
716
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.27 KB | None | 0 0
  1. /*
  2. Textdraws Include (textdraws.inc)
  3. * Handy functions and usefull for textdraws!
  4. * Now player textdraw fader which will let you make single player featured fading texts!
  5. * Automatically destroy all global TDs on script exit!
  6.  
  7. Author: (creator)
  8. * Gammix
  9.  
  10. (c) Copyright 2015
  11. * This file is provided as is (no warranties).
  12. */
  13. /*
  14. FUNCTIONS:
  15. native IsValidTextDraw(Text:text);
  16. native IsValidPlayerTextDraw(playerid, PlayerText:text);
  17. native _
  18. native Text:TextDrawCreateEx(Float:posX, Float:posY, string[], bgcolor, font, Float:lettersizeX, Float:lettersizeY, textcolor, allign = 0, outline = 1, bool:proportional = true, shadow = 1, bool:usebox = false, boxcolor = 0, Float:textsizeX = -1.0, Float:textsizeY = -1.0, model = 0, Float:rotX = 0.0, Float:rotY = 0.0, Float:rotZ = 0.0, Float:zoom = 1.0, bool:selectable = false);
  19. native PlayerText:CreatePlayerTextDrawEx(playerid, Float:posX, Float:posY, string[], bgcolor, font, Float:lettersizeX, Float:lettersizeY, textcolor, allign = 0, outline = 1, bool:proportional = true, shadow = 1, bool:usebox = false, boxcolor = 0, Float:textsizeX = -1.0, Float:textsizeY = -1.0, model = 0, Float:rotX = 0.0, Float:rotY = 0.0, Float:rotZ = 0.0, Float:zoom = 1.0, bool:selectable = false);
  20. native DestroyAllTextDraws();
  21. native DestroyAllPlayerTextDraws(playerid);
  22. native ShowAllPlayerTextDraws(playerid);
  23. native HideAllPlayerTextDraws(playerid);
  24. native ShowAllTextDrawsForPlayer(playerid);
  25. native HideAllTextDrawsForPlayer(playerid);
  26. native _
  27. native PlayerTextDrawFade(playerid, PlayerText:text, color, updatetick = 30, displaytime = 1500);
  28. native PlayerTextDrawUnfade(playerid, PlayerText:text);
  29. native IsPlayerTextDrawFading(playerid, PlayerText:text);
  30.  
  31. CALLBACKS:
  32. public OnPlayerTextDrawFadeComplete(playerid, PlayerText:text)
  33. */
  34.  
  35. //validity functions
  36.  
  37. static bool:gTextdrawExist[MAX_TEXT_DRAWS];
  38. static bool:gPlayerTextdrawExist[MAX_PLAYERS][MAX_PLAYER_TEXT_DRAWS];
  39.  
  40. stock Text:TD_TextDrawCreate(Float:x, Float:y, string[])
  41. {
  42. static Text:gTextDraw;
  43. gTextDraw = TextDrawCreate(x, y, string);
  44.  
  45. gTextdrawExist[_:gTextDraw] = true;
  46. return gTextDraw;
  47. }
  48. #if defined _ALS_TextDrawCreate
  49. #undef TextDrawCreate
  50. #else
  51. #define _ALS_TextDrawCreate
  52. #endif
  53. #define TextDrawCreate TD_TextDrawCreate
  54.  
  55. stock PlayerText:TD_CreatePlayerTextDraw(playerid, Float:x, Float:y, string[])
  56. {
  57. static PlayerText:gTextDraw;
  58. gTextDraw = CreatePlayerTextDraw(playerid, x, y, string);
  59.  
  60. gPlayerTextdrawExist[playerid][_:gTextDraw] = true;
  61. return gTextDraw;
  62. }
  63. #if defined _ALS_CreatePlayerTextDraw
  64. #undef CreatePlayerTextDraw
  65. #else
  66. #define _ALS_CreatePlayerTextDraw
  67. #endif
  68. #define CreatePlayerTextDraw TD_CreatePlayerTextDraw
  69.  
  70. stock TD_TextDrawDestroy(Text:text)
  71. {
  72. if(! gTextdrawExist[_:text]) return false;
  73.  
  74. gTextdrawExist[_:text] = false;
  75. text = Text:INVALID_TEXT_DRAW;
  76. return TextDrawDestroy(text);
  77. }
  78. #if defined _ALS_TextDrawDestroy
  79. #undef TextDrawDestroy
  80. #else
  81. #define _ALS_TextDrawDestroy
  82. #endif
  83. #define TextDrawDestroy TD_TextDrawDestroy
  84.  
  85. stock TD_PlayerTextDrawDestroy(playerid, PlayerText:text)
  86. {
  87. if(! gPlayerTextdrawExist[playerid][_:text]) return false;
  88.  
  89. gPlayerTextdrawExist[playerid][_:text] = false;
  90. text = PlayerText:INVALID_TEXT_DRAW;
  91. return PlayerTextDrawDestroy(playerid, text);
  92. }
  93. #if defined _ALS_PlayerTextDrawDestroy
  94. #undef PlayerTextDrawDestroy
  95. #else
  96. #define _ALS_PlayerTextDrawDestroy
  97. #endif
  98. #define PlayerTextDrawDestroy TD_PlayerTextDrawDestroy
  99.  
  100. stock IsValidTextDraw(Text:text) return gTextdrawExist[_:text];
  101.  
  102. stock IsValidPlayerTextDraw(playerid, PlayerText:text) return gPlayerTextdrawExist[playerid][_:text];
  103.  
  104. //easy functions
  105.  
  106. stock Text:TextDrawCreateEx(Float:posX, Float:posY, string[], bgcolor, font, Float:lettersizeX, Float:lettersizeY, textcolor, allign = 0, outline = 1, bool:proportional = true, shadow = 1, bool:usebox = false, boxcolor = 0, Float:textsizeX = -1.0, Float:textsizeY = -1.0, model = 0, Float:rotX = 0.0, Float:rotY = 0.0, Float:rotZ = 0.0, Float:zoom = 1.0, bool:selectable = false)
  107. {
  108. static Text:gTextDraw;
  109. gTextDraw = TextDrawCreate(posX, posY, string);
  110. TextDrawBackgroundColor(gTextDraw, bgcolor);
  111. TextDrawFont(gTextDraw, font);
  112. TextDrawLetterSize(gTextDraw, lettersizeX, lettersizeY);
  113. TextDrawColor(gTextDraw, textcolor);
  114. TextDrawAlignment(gTextDraw, allign);
  115. TextDrawSetOutline(gTextDraw, outline);
  116. TextDrawSetProportional(gTextDraw, proportional);
  117. TextDrawSetShadow(gTextDraw, shadow);
  118. TextDrawUseBox(gTextDraw, usebox);
  119. if(usebox) TextDrawBoxColor(gTextDraw, boxcolor);
  120. if(textsizeX != -1.0 && textsizeY != -1.0) TextDrawTextSize(gTextDraw, textsizeX, textsizeY);
  121. if(font == 5)
  122. {
  123. TextDrawSetPreviewModel(gTextDraw, model);
  124. TextDrawSetPreviewRot(gTextDraw, rotX, rotY, rotZ, zoom);
  125. }
  126. if(selectable)
  127. {
  128. TextDrawSetSelectable(gTextDraw, 1);
  129. }
  130. else
  131. {
  132. TextDrawSetSelectable(gTextDraw, 0);
  133. }
  134. return gTextDraw;
  135. }
  136.  
  137. stock PlayerText:CreatePlayerTextDrawEx(playerid, Float:posX, Float:posY, string[], bgcolor, font, Float:lettersizeX, Float:lettersizeY, textcolor, allign = 0, outline = 1, bool:proportional = true, shadow = 1, bool:usebox = false, boxcolor = 0, Float:textsizeX = -1.0, Float:textsizeY = -1.0, model = 0, Float:rotX = 0.0, Float:rotY = 0.0, Float:rotZ = 0.0, Float:zoom = 1.0, bool:selectable = false)
  138. {
  139. static PlayerText:gTextDraw;
  140. gTextDraw = CreatePlayerTextDraw(playerid, posX, posY, string);
  141. PlayerTextDrawBackgroundColor(playerid, gTextDraw, bgcolor);
  142. PlayerTextDrawFont(playerid, gTextDraw, font);
  143. PlayerTextDrawLetterSize(playerid, gTextDraw, lettersizeX, lettersizeY);
  144. PlayerTextDrawColor(playerid, gTextDraw, textcolor);
  145. PlayerTextDrawAlignment(playerid, gTextDraw, allign);
  146. PlayerTextDrawSetOutline(playerid, gTextDraw, outline);
  147. PlayerTextDrawSetProportional(playerid, gTextDraw, proportional);
  148. PlayerTextDrawSetShadow(playerid, gTextDraw, shadow);
  149. PlayerTextDrawUseBox(playerid, gTextDraw, usebox);
  150. if(usebox) PlayerTextDrawBoxColor(playerid, gTextDraw, boxcolor);
  151. if(textsizeX != -1.0 && textsizeY != -1.0) PlayerTextDrawTextSize(playerid, gTextDraw, textsizeX, textsizeY);
  152. if(font == 5)
  153. {
  154. PlayerTextDrawSetPreviewModel(playerid, gTextDraw, model);
  155. PlayerTextDrawSetPreviewRot(playerid, gTextDraw, rotX, rotY, rotZ, zoom);
  156. }
  157. if(selectable)
  158. {
  159. PlayerTextDrawSetSelectable(playerid, gTextDraw, 1);
  160. }
  161. else
  162. {
  163. PlayerTextDrawSetSelectable(playerid, gTextDraw, 0);
  164. }
  165. return gTextDraw;
  166. }
  167.  
  168. stock DestroyAllTextDraws()
  169. {
  170. for(new i; i < MAX_TEXT_DRAWS; i++)
  171. {
  172. TextDrawDestroy(Text:i);
  173. }
  174. return true;
  175. }
  176.  
  177. stock DestroyAllPlayerTextDraws(playerid)
  178. {
  179. for(new i; i < MAX_PLAYER_TEXT_DRAWS; i++)
  180. {
  181. PlayerTextDrawDestroy(playerid, PlayerText:i);
  182. }
  183. return true;
  184. }
  185.  
  186. stock ShowAllPlayerTextDraws(playerid)
  187. {
  188. for(new i; i < MAX_PLAYER_TEXT_DRAWS; i++)
  189. {
  190. PlayerTextDrawShow(playerid, PlayerText:i);
  191. }
  192. return true;
  193. }
  194.  
  195. stock HideAllPlayerTextDraws(playerid)
  196. {
  197. for(new i; i < MAX_PLAYER_TEXT_DRAWS; i++)
  198. {
  199. PlayerTextDrawHide(playerid, PlayerText:i);
  200. }
  201. return true;
  202. }
  203.  
  204. stock ShowAllTextDrawsForPlayer(playerid)
  205. {
  206. for(new i; i < MAX_PLAYER_TEXT_DRAWS; i++)
  207. {
  208. TextDrawShowForPlayer(playerid, Text:i);
  209. }
  210. return true;
  211. }
  212.  
  213. stock HideAllTextDrawsForPlayer(playerid)
  214. {
  215. for(new i; i < MAX_PLAYER_TEXT_DRAWS; i++)
  216. {
  217. TextDrawHideForPlayer(playerid, Text:i);
  218. }
  219. return true;
  220. }
  221.  
  222. //player textdraw fader
  223.  
  224. #define MAX_FADES_AT_A_TIME 5//more tha value, more bigger the array, mor is the file size and more memory and maybe lag!
  225. //and after all i am using 3D arrays which normally increase the AMX size as well!
  226.  
  227. #define FADE_UPDATE_VALUE 15//this is the value been set for td color on every timer update. THe update rate of color!
  228.  
  229. enum TextDrawFadeEnum
  230. {
  231. PlayerText:player_fade_td,
  232. player_fade_color,
  233. player_fade_timer,
  234. player_fade_showtime,
  235. player_fade_updatetime
  236. }
  237. static gPlayerTextDrawFade[MAX_PLAYERS][MAX_FADES_AT_A_TIME][TextDrawFadeEnum];
  238.  
  239. //internal function
  240. stock static TD_SetTransparency(color, alpha = 0xFF)
  241. {
  242. static newcolor;
  243.  
  244. alpha = clamp(alpha, 0x00, 0xFF);
  245.  
  246. newcolor = (color & ~0xFF) | alpha;
  247. return newcolor;
  248. }
  249. //
  250.  
  251. public OnPlayerConnect(playerid)
  252. {
  253. for(new i; i < MAX_FADES_AT_A_TIME; i++)
  254. {
  255. gPlayerTextDrawFade[playerid][i][player_fade_td] = PlayerText:INVALID_TEXT_DRAW;
  256. gPlayerTextDrawFade[playerid][i][player_fade_color] = -1;
  257. gPlayerTextDrawFade[playerid][i][player_fade_timer] = -1;
  258. gPlayerTextDrawFade[playerid][i][player_fade_showtime] = 3000;
  259. gPlayerTextDrawFade[playerid][i][player_fade_updatetime] = 50;
  260. }
  261.  
  262. #if defined TD_OnPlayerConnect
  263. return TD_OnPlayerConnect(playerid);
  264. #else
  265. return 1;
  266. #endif
  267. }
  268. #if defined _ALS_OnPlayerConnect
  269. #undef OnPlayerConnect
  270. #else
  271. #define _ALS_OnPlayerConnect
  272. #endif
  273. #define OnPlayerConnect TD_OnPlayerConnect
  274. #if defined TD_OnPlayerConnect
  275. forward TD_OnPlayerConnect(playerid);
  276. #endif
  277.  
  278. public OnPlayerDisconnect(playerid, reason)
  279. {
  280. for(new i; i < MAX_FADES_AT_A_TIME; i++)
  281. {
  282. KillTimer(gPlayerTextDrawFade[playerid][i][player_fade_timer]);
  283. gPlayerTextDrawFade[playerid][i][player_fade_td] = PlayerText:INVALID_TEXT_DRAW;
  284. gPlayerTextDrawFade[playerid][i][player_fade_color] = -1;
  285. gPlayerTextDrawFade[playerid][i][player_fade_timer] = -1;
  286. gPlayerTextDrawFade[playerid][i][player_fade_showtime] = 3000;
  287. gPlayerTextDrawFade[playerid][i][player_fade_updatetime] = 50;
  288. }
  289.  
  290. #if defined TD_OnPlayerDisconnect
  291. return TD_OnPlayerDisconnect(playerid, reason);
  292. #else
  293. return 1;
  294. #endif
  295. }
  296. #if defined _ALS_OnPlayerDisconnect
  297. #undef OnPlayerDisconnect
  298. #else
  299. #define _ALS_OnPlayerDisconnect
  300. #endif
  301. #define OnPlayerDisconnect TD_OnPlayerDisconnect
  302. #if defined TD_OnPlayerDisconnect
  303. forward TD_OnPlayerDisconnect(playerid, reason);
  304. #endif
  305.  
  306. stock PlayerTextDrawFade(playerid, PlayerText:text, color, updatetick = 30, displaytime = 1500)
  307. {
  308. for(new i; i < MAX_FADES_AT_A_TIME; i++)
  309. {
  310. if(IsPlayerTextDrawFading(playerid, text)) PlayerTextDrawUnfade(playerid, text);
  311.  
  312. gPlayerTextDrawFade[playerid][i][player_fade_td] = text;
  313. gPlayerTextDrawFade[playerid][i][player_fade_showtime] = displaytime;
  314. gPlayerTextDrawFade[playerid][i][player_fade_updatetime] = updatetick;
  315. gPlayerTextDrawFade[playerid][i][player_fade_color] = color;
  316.  
  317. PlayerTextDrawColor(playerid, text, TD_SetTransparency(color, 0));
  318. PlayerTextDrawShow(playerid, text);
  319.  
  320. if(gPlayerTextDrawFade[playerid][i][player_fade_timer] != -1) KillTimer(gPlayerTextDrawFade[playerid][i][player_fade_timer]);
  321. gPlayerTextDrawFade[playerid][i][player_fade_timer] = SetTimerEx("TD_OnPlayerTextDrawFade", updatetick, false, "iiii", playerid, i, 0, 0);
  322. return i;
  323. }
  324. return -1;
  325. }
  326.  
  327. stock PlayerTextDrawUnfade(playerid, PlayerText:text)
  328. {
  329. for(new i; i < MAX_FADES_AT_A_TIME; i++)
  330. {
  331. if(gPlayerTextDrawFade[playerid][i][player_fade_td] == text)
  332. {
  333. KillTimer(gPlayerTextDrawFade[playerid][i][player_fade_timer]);
  334.  
  335. gPlayerTextDrawFade[playerid][i][player_fade_td] = PlayerText:INVALID_TEXT_DRAW;
  336. gPlayerTextDrawFade[playerid][i][player_fade_color] = -1;
  337. gPlayerTextDrawFade[playerid][i][player_fade_timer] = -1;
  338. gPlayerTextDrawFade[playerid][i][player_fade_showtime] = 3000;
  339. gPlayerTextDrawFade[playerid][i][player_fade_updatetime] = 50;
  340. return true;
  341. }
  342. }
  343. return false;
  344. }
  345.  
  346. stock IsPlayerTextDrawFading(playerid, PlayerText:text)
  347. {
  348. for(new i; i < MAX_FADES_AT_A_TIME; i++)
  349. {
  350. if(gPlayerTextDrawFade[playerid][i][player_fade_td] == text) return true;
  351. }
  352. return false;
  353. }
  354.  
  355. forward TD_OnPlayerTextDrawFade(playerid, slot, alpha, type);
  356. public TD_OnPlayerTextDrawFade(playerid, slot, alpha, type)
  357. {
  358. switch(type)
  359. {
  360. case 0:
  361. {
  362. alpha += FADE_UPDATE_VALUE;
  363. PlayerTextDrawColor(playerid, gPlayerTextDrawFade[playerid][slot][player_fade_td], TD_SetTransparency(gPlayerTextDrawFade[playerid][slot][player_fade_color], alpha));
  364. PlayerTextDrawShow(playerid, gPlayerTextDrawFade[playerid][slot][player_fade_td]);
  365.  
  366. if(alpha >= 255)
  367. {
  368. PlayerTextDrawColor(playerid, gPlayerTextDrawFade[playerid][slot][player_fade_td], gPlayerTextDrawFade[playerid][slot][player_fade_color]);
  369. PlayerTextDrawShow(playerid, gPlayerTextDrawFade[playerid][slot][player_fade_td]);
  370.  
  371. gPlayerTextDrawFade[playerid][slot][player_fade_timer] = SetTimerEx("TD_OnPlayerTextDrawFade", gPlayerTextDrawFade[playerid][slot][player_fade_showtime], false, "iiii", playerid, slot, 255, 1);
  372. return 1;
  373. }
  374.  
  375. gPlayerTextDrawFade[playerid][slot][player_fade_timer] = SetTimerEx("TD_OnPlayerTextDrawFade", gPlayerTextDrawFade[playerid][slot][player_fade_updatetime], false, "iiii", playerid, slot, alpha, 0);
  376. }
  377. case 1:
  378. {
  379. PlayerTextDrawColor(playerid, gPlayerTextDrawFade[playerid][slot][player_fade_td], gPlayerTextDrawFade[playerid][slot][player_fade_color]);
  380. PlayerTextDrawShow(playerid, gPlayerTextDrawFade[playerid][slot][player_fade_td]);
  381.  
  382. gPlayerTextDrawFade[playerid][slot][player_fade_timer] = SetTimerEx("TD_OnPlayerTextDrawFade", gPlayerTextDrawFade[playerid][slot][player_fade_showtime], false, "iiii", playerid, slot, 255, 2);
  383. }
  384. case 2:
  385. {
  386. alpha -= FADE_UPDATE_VALUE;
  387. PlayerTextDrawColor(playerid, gPlayerTextDrawFade[playerid][slot][player_fade_td], TD_SetTransparency(gPlayerTextDrawFade[playerid][slot][player_fade_color], alpha));
  388. PlayerTextDrawShow(playerid, gPlayerTextDrawFade[playerid][slot][player_fade_td]);
  389.  
  390. if(alpha <= 0)
  391. {
  392. PlayerTextDrawColor(playerid, gPlayerTextDrawFade[playerid][slot][player_fade_td], gPlayerTextDrawFade[playerid][slot][player_fade_color]);
  393. PlayerTextDrawHide(playerid, gPlayerTextDrawFade[playerid][slot][player_fade_td]);
  394.  
  395. gPlayerTextDrawFade[playerid][slot][player_fade_timer] = -1;
  396. CallLocalFunction("OnPlayerTextDrawFadeComplete", "ii", playerid, slot);
  397. return 1;
  398. }
  399.  
  400. gPlayerTextDrawFade[playerid][slot][player_fade_timer] = SetTimerEx("TD_OnPlayerTextDrawFade", gPlayerTextDrawFade[playerid][slot][player_fade_updatetime], false, "iiii", playerid, slot, alpha, 2);
  401. }
  402. }
  403. return 1;
  404. }
  405.  
  406. forward OnPlayerTextDrawFadeComplete(playerid, PlayerText:text);
  407.  
  408. //Auto destroyer
  409.  
  410. //Note: if you use this in a filterscript, please define "FILTERSCRIPT" in your script
  411. #if defined FILTERSCRIPT// if used in a filterscript
  412.  
  413. public OnFilterScriptInit()
  414. {
  415. for(new i; i < MAX_TEXT_DRAWS; i++)
  416. {
  417. gTextdrawExist[i] = false;
  418. }
  419.  
  420. #if defined TD_OnFilterScriptInit
  421. return TD_OnFilterScriptInit();
  422. #else
  423. return 1;
  424. #endif
  425. }
  426. #if defined _ALS_OnFilterScriptInit
  427. #undef OnFilterScriptInit
  428. #else
  429. #define _ALS_OnFilterScriptInit
  430. #endif
  431. #define OnFilterScriptInit TD_OnFilterScriptInit
  432. #if defined TD_OnFilterScriptInit
  433. forward TD_OnFilterScriptInit();
  434. #endif
  435.  
  436. public OnFilterScriptExit()
  437. {
  438. DestroyAllTextDraws();
  439.  
  440. #if defined TD_OnFilterScriptExit
  441. return TD_OnFilterScriptExit();
  442. #else
  443. return 1;
  444. #endif
  445. }
  446. #if defined _ALS_OnFilterScriptExit
  447. #undef OnFilterScriptExit
  448. #else
  449. #define _ALS_OnFilterScriptExit
  450. #endif
  451. #define OnFilterScriptExit TD_OnFilterScriptExit
  452. #if defined TD_OnFilterScriptExit
  453. forward TD_OnFilterScriptExit();
  454. #endif
  455.  
  456. #else// if used in a gamemode
  457.  
  458. public OnGameModeInit()
  459. {
  460. for(new i; i < MAX_TEXT_DRAWS; i++)
  461. {
  462. gTextdrawExist[i] = false;
  463. }
  464.  
  465. #if defined TD_OnGameModeInit
  466. return TD_OnGameModeInit();
  467. #else
  468. return 1;
  469. #endif
  470. }
  471. #if defined _ALS_OnGameModeInit
  472. #undef OnGameModeInit
  473. #else
  474. #define _ALS_OnGameModeInit
  475. #endif
  476. #define OnGameModeInit TD_OnGameModeInit
  477. #if defined TD_OnGameModeInit
  478. forward TD_OnGameModeInit();
  479. #endif
  480.  
  481. public OnGameModeExit()
  482. {
  483. DestroyAllTextDraws();
  484.  
  485. #if defined TD_OnGameModeExit
  486. return TD_OnGameModeExit();
  487. #else
  488. return 1;
  489. #endif
  490. }
  491. #if defined _ALS_OnGameModeExit
  492. #undef OnGameModeExit
  493. #else
  494. #define _ALS_OnGameModeExit
  495. #endif
  496. #define OnGameModeExit TD_OnGameModeExit
  497. #if defined TD_OnGameModeExit
  498. forward TD_OnGameModeExit();
  499. #endif
  500.  
  501. #endif
Advertisement
Add Comment
Please, Sign In to add comment