Akira_Yiin

PlayerTextDrawStreamer.inc

Nov 9th, 2014
964
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.53 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. #if !defined LIMIT_OF_PLAYER_TEXT_DRAWS
  4.     #define LIMIT_OF_PLAYER_TEXT_DRAWS 300
  5. #endif
  6.  
  7. #if LIMIT_OF_PLAYER_TEXT_DRAWS < 1
  8.     #error u stupid fk what r u doing
  9. #endif
  10.  
  11. static stock _G(n, p) return (n >> (4 * p)) & 0xF;
  12. static stock _S(&n, p, v) { n = n & ~(0xF << (p * 4)) | (v << (p * 4)); }
  13.  
  14. #define M_VAL -0xABCDEF
  15. #define M_COMPRESSED_VAL 15
  16.  
  17. enum { // Compressed data
  18.     /*
  19.      * Server data
  20.      */
  21.     epTD_Active,
  22.     /*
  23.      * SA-MP data
  24.      */
  25.     epTD_Alignment,
  26.     epTD_UseBox,
  27.     epTD_Shadow,
  28.     epTD_Outline,
  29.     epTD_Proportional,
  30.     epTD_Selectable,
  31.     epTD_Font
  32. };
  33.  
  34. enum _:ePlayerTextDrawProperties {
  35.     /*
  36.      * Server data
  37.      */
  38.     PlayerText:epTD_SAMP_ID,
  39.     /*
  40.      * SA-MP data
  41.      */
  42.     Float:epTD_Position_X,
  43.     Float:epTD_Position_Y,
  44.     Float:epTD_LetterSize_X,
  45.     Float:epTD_LetterSize_Y,
  46.     Float:epTD_TextSize_X,
  47.     Float:epTD_TextSize_Y,
  48.  
  49.     Float:epTD_PreviewRot_X,
  50.     Float:epTD_PreviewRot_Y,
  51.     Float:epTD_PreviewRot_Z,
  52.     Float:epTD_Preview_Zoom,
  53.  
  54.     epTD_Color,
  55.     epTD_BoxColor,
  56.     epTD_BackgroundColor,
  57.     epTD_PreviewModel,
  58.     epTD_PreviewVehCol_1,
  59.     epTD_PreviewVehCol_2
  60. };
  61.  
  62. new pTextDraws_Compressed[MAX_PLAYERS][LIMIT_OF_PLAYER_TEXT_DRAWS];
  63. new pTextDraws_String[MAX_PLAYERS][LIMIT_OF_PLAYER_TEXT_DRAWS][256 char];
  64.  
  65. new pTextDraws[MAX_PLAYERS][LIMIT_OF_PLAYER_TEXT_DRAWS][_:ePlayerTextDrawProperties];
  66.  
  67. PlayerText:pTD_GetIdx(playerid) {
  68.     for(new i; i < sizeof pTextDraws[]; ++i) {
  69.         if( ! _G(pTextDraws_Compressed[playerid][i], epTD_Active)) {
  70.             return PlayerText:i;
  71.         }
  72.     }
  73.     return PlayerText:INVALID_TEXT_DRAW;
  74. }
  75.  
  76. PlayerText:pTD_Create(playerid, Float:x, Float:y, text[]) {
  77.     new PlayerText:idx = pTD_GetIdx(playerid);
  78.     if(idx == PlayerText:INVALID_TEXT_DRAW) {
  79.         return PlayerText:INVALID_TEXT_DRAW;
  80.     }
  81.     pTextDraws[playerid][idx][epTD_SAMP_ID] = PlayerText:INVALID_TEXT_DRAW;
  82.     _S(pTextDraws_Compressed[playerid][idx], epTD_Active, 1);
  83.     _S(pTextDraws_Compressed[playerid][idx], epTD_UseBox, M_COMPRESSED_VAL);
  84.     _S(pTextDraws_Compressed[playerid][idx], epTD_Shadow, M_COMPRESSED_VAL);
  85.     _S(pTextDraws_Compressed[playerid][idx], epTD_Outline, M_COMPRESSED_VAL);
  86.     _S(pTextDraws_Compressed[playerid][idx], epTD_Font, M_COMPRESSED_VAL);
  87.     _S(pTextDraws_Compressed[playerid][idx], epTD_Proportional, M_COMPRESSED_VAL);
  88.     _S(pTextDraws_Compressed[playerid][idx], epTD_Selectable, M_COMPRESSED_VAL);
  89.     _S(pTextDraws_Compressed[playerid][idx], epTD_Alignment, M_COMPRESSED_VAL);
  90.     pTextDraws[playerid][idx][epTD_Position_X] = x;
  91.     pTextDraws[playerid][idx][epTD_Position_Y] = y;
  92.     pTextDraws[playerid][idx][epTD_LetterSize_X] = M_VAL;
  93.     pTextDraws[playerid][idx][epTD_LetterSize_Y] = M_VAL;
  94.     pTextDraws[playerid][idx][epTD_TextSize_X] = M_VAL;
  95.     pTextDraws[playerid][idx][epTD_TextSize_Y] = M_VAL;
  96.     pTextDraws[playerid][idx][epTD_Color] = M_VAL;
  97.     pTextDraws[playerid][idx][epTD_BoxColor] = M_VAL;
  98.     pTextDraws[playerid][idx][epTD_BackgroundColor] = M_VAL;
  99.     pTextDraws[playerid][idx][epTD_PreviewModel] = M_VAL;
  100.     pTextDraws[playerid][idx][epTD_PreviewRot_X] = M_VAL;
  101.     pTextDraws[playerid][idx][epTD_PreviewRot_Y] = M_VAL;
  102.     pTextDraws[playerid][idx][epTD_PreviewRot_Z] = M_VAL;
  103.     pTextDraws[playerid][idx][epTD_Preview_Zoom] = 1.0;
  104.     pTextDraws[playerid][idx][epTD_PreviewVehCol_1] = M_VAL;
  105.     pTextDraws[playerid][idx][epTD_PreviewVehCol_2] = M_VAL;
  106.     strpack(pTextDraws_String[playerid][idx], text);
  107.  
  108.     return idx;
  109. }
  110.  
  111. pTD_Destroy(playerid, PlayerText:text) {
  112.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  113.         PlayerTextDrawDestroy(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID]);
  114.     }
  115.     for(new i; i < sizeof pTextDraws[][]; ++i) {
  116.         pTextDraws[playerid][text][i] = 0;
  117.     }
  118. }
  119.  
  120. pTD_LetterSize(playerid, PlayerText:text, Float:x, Float:y) {
  121.     pTextDraws[playerid][text][epTD_LetterSize_X] = x;
  122.     pTextDraws[playerid][text][epTD_LetterSize_Y] = y;
  123.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  124.         PlayerTextDrawLetterSize(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], x, y);
  125.     }
  126. }
  127.  
  128. pTD_TextSize(playerid, PlayerText:text, Float:x, Float:y) {
  129.     pTextDraws[playerid][text][epTD_TextSize_X] = x;
  130.     pTextDraws[playerid][text][epTD_TextSize_Y] = y;
  131.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  132.         PlayerTextDrawTextSize(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], x, y);
  133.     }
  134. }
  135.  
  136. pTD_Alignment(playerid, PlayerText:text, alignment) {
  137.     _S(pTextDraws_Compressed[playerid][text], epTD_Alignment, alignment);
  138.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  139.         PlayerTextDrawAlignment(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], alignment);
  140.     }
  141. }
  142.  
  143. pTD_Color(playerid, PlayerText:text, color) {
  144.     pTextDraws[playerid][text][epTD_Color] = color;
  145.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  146.         PlayerTextDrawColor(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], color);
  147.     }
  148. }
  149.  
  150. pTD_UseBox(playerid, PlayerText:text, use) {
  151.     _S(pTextDraws_Compressed[playerid][text], epTD_UseBox, use);
  152.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  153.         PlayerTextDrawUseBox(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], use);
  154.     }
  155. }
  156.  
  157. pTD_BoxColor(playerid, PlayerText:text, color) {
  158.     pTextDraws[playerid][text][epTD_BoxColor] = color;
  159.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  160.         PlayerTextDrawBoxColor(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], color);
  161.     }
  162. }
  163.  
  164. pTD_SetShadow(playerid, PlayerText:text, size) {
  165.     _S(pTextDraws_Compressed[playerid][text], epTD_Shadow, size);
  166.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  167.         PlayerTextDrawSetShadow(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], size);
  168.     }
  169. }
  170.  
  171. pTD_SetOutline(playerid, PlayerText:text, size) {
  172.     _S(pTextDraws_Compressed[playerid][text], epTD_Outline, size);
  173.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  174.         PlayerTextDrawSetOutline(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], size);
  175.     }
  176. }
  177.  
  178. pTD_BackgroundColor(playerid, PlayerText:text, color) {
  179.     pTextDraws[playerid][text][epTD_BackgroundColor] = color;
  180.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  181.         PlayerTextDrawBackgroundColor(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], color);
  182.     }
  183. }
  184.  
  185. pTD_Font(playerid, PlayerText:text, font) {
  186.     _S(pTextDraws_Compressed[playerid][text], epTD_Font, font);
  187.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  188.         PlayerTextDrawFont(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], font);
  189.     }
  190. }
  191.  
  192. pTD_SetProportional(playerid, PlayerText:text, set) {
  193.     _S(pTextDraws_Compressed[playerid][text], epTD_Proportional, set);
  194.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  195.         PlayerTextDrawSetProportional(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], set);
  196.     }
  197. }
  198.  
  199. pTD_SetSelectable(playerid, PlayerText:text, set) {
  200.     _S(pTextDraws_Compressed[playerid][text], epTD_Selectable, set);
  201.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  202.         PlayerTextDrawSetSelectable(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], set);
  203.     }
  204. }
  205.  
  206. pTD_Show(playerid, PlayerText:text) {
  207.     if(pTextDraws[playerid][text][epTD_SAMP_ID] == PlayerText:INVALID_TEXT_DRAW) {
  208.         new unpackedString[256];
  209.         strunpack(unpackedString, pTextDraws_String[playerid][text]);
  210.  
  211.         pTextDraws[playerid][text][epTD_SAMP_ID] = CreatePlayerTextDraw(
  212.             playerid,
  213.             pTextDraws[playerid][text][epTD_Position_X],
  214.             pTextDraws[playerid][text][epTD_Position_Y],
  215.             unpackedString
  216.         );
  217.     }
  218.     #define __TD pTextDraws[playerid][text]
  219.     if(__TD[epTD_LetterSize_X] != M_VAL) {
  220.         pTD_LetterSize(playerid, text, __TD[epTD_LetterSize_X], __TD[epTD_LetterSize_Y]);
  221.     }
  222.     if(__TD[epTD_TextSize_X] != M_VAL) {
  223.         pTD_TextSize(playerid, text, __TD[epTD_TextSize_X], __TD[epTD_TextSize_Y]);
  224.     }
  225.     if(_G(pTextDraws_Compressed[playerid][text], epTD_Alignment) != M_COMPRESSED_VAL) {
  226.         pTD_Alignment(playerid, text, _G(pTextDraws_Compressed[playerid][text], epTD_Alignment));
  227.     }
  228.     if(__TD[epTD_Color] != M_VAL) {
  229.         pTD_Color(playerid, text, __TD[epTD_Color]);
  230.     }
  231.     if(_G(pTextDraws_Compressed[playerid][text], epTD_UseBox) != M_COMPRESSED_VAL) {
  232.         pTD_UseBox(playerid, text, _G(pTextDraws_Compressed[playerid][text], epTD_UseBox));
  233.     }
  234.     if(__TD[epTD_BoxColor] != M_VAL) {
  235.         pTD_BoxColor(playerid, text, __TD[epTD_BoxColor]);
  236.     }
  237.     if(_G(pTextDraws_Compressed[playerid][text], epTD_Shadow) != M_COMPRESSED_VAL) {
  238.         pTD_SetShadow(playerid, text, _G(pTextDraws_Compressed[playerid][text], epTD_Shadow));
  239.     }
  240.     if(_G(pTextDraws_Compressed[playerid][text], epTD_Outline) != M_COMPRESSED_VAL) {
  241.         pTD_SetOutline(playerid, text, _G(pTextDraws_Compressed[playerid][text], epTD_Outline));
  242.     }
  243.     if(__TD[epTD_BackgroundColor] != M_VAL) {
  244.         pTD_BackgroundColor(playerid, text, __TD[epTD_BackgroundColor]);
  245.     }
  246.     if(_G(pTextDraws_Compressed[playerid][text], epTD_Font) != M_COMPRESSED_VAL) {
  247.         pTD_Font(playerid, text, _G(pTextDraws_Compressed[playerid][text], epTD_Font));
  248.     }
  249.     if(_G(pTextDraws_Compressed[playerid][text], epTD_Proportional) != M_COMPRESSED_VAL) {
  250.         pTD_SetProportional(playerid, text, _G(pTextDraws_Compressed[playerid][text], epTD_Proportional));
  251.     }
  252.     if(_G(pTextDraws_Compressed[playerid][text], epTD_Selectable) != M_COMPRESSED_VAL) {
  253.         pTD_SetSelectable(playerid, text, _G(pTextDraws_Compressed[playerid][text], epTD_Selectable));
  254.     }
  255.     if(__TD[epTD_PreviewModel] != M_VAL) {
  256.         pTD_SetPreviewModel(playerid, text, __TD[epTD_PreviewModel]);
  257.     }
  258.     if(__TD[epTD_PreviewRot_X] != M_VAL) {
  259.         pTD_SetPreviewRot(playerid, text, __TD[epTD_PreviewRot_X], __TD[epTD_PreviewRot_Y], __TD[epTD_PreviewRot_Z], __TD[epTD_Preview_Zoom]);
  260.     }
  261.     if(__TD[epTD_PreviewVehCol_1] != M_VAL) {
  262.         pTD_SetPreviewVehCol(playerid, text, __TD[epTD_PreviewVehCol_1], __TD[epTD_PreviewVehCol_2]);
  263.     }
  264.     #undef __TD
  265.     PlayerTextDrawShow(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID]);
  266. }
  267.  
  268. pTD_Hide(playerid, PlayerText:text) {
  269.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  270.         PlayerTextDrawDestroy(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID]);
  271.         pTextDraws[playerid][text][epTD_SAMP_ID] = PlayerText:INVALID_TEXT_DRAW;
  272.     }
  273. }
  274.  
  275. pTD_SetString(playerid, PlayerText:text, string[]) {
  276.     strpack(pTextDraws_String[playerid][text], string);
  277.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  278.         PlayerTextDrawSetString(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], string);
  279.     }
  280. }
  281.  
  282. pTD_SetPreviewModel(playerid, PlayerText:text, modelindex) {
  283.     pTextDraws[playerid][text][epTD_PreviewModel] = modelindex;
  284.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  285.         PlayerTextDrawSetPreviewModel(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], modelindex);
  286.     }
  287. }
  288.  
  289. pTD_SetPreviewRot(playerid, PlayerText:text, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fZoom = 1.0) {
  290.     pTextDraws[playerid][text][epTD_PreviewRot_X] = fRotX;
  291.     pTextDraws[playerid][text][epTD_PreviewRot_Y] = fRotY;
  292.     pTextDraws[playerid][text][epTD_PreviewRot_Z] = fRotZ;
  293.     pTextDraws[playerid][text][epTD_Preview_Zoom] = fZoom;
  294.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  295.         PlayerTextDrawSetPreviewRot(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], fRotX, fRotY, fRotZ, fZoom);
  296.     }
  297. }
  298.  
  299. pTD_SetPreviewVehCol(playerid, PlayerText:text, color1, color2) {
  300.     pTextDraws[playerid][text][epTD_PreviewVehCol_1] = color1;
  301.     pTextDraws[playerid][text][epTD_PreviewVehCol_2] = color2;
  302.     if(pTextDraws[playerid][text][epTD_SAMP_ID] != PlayerText:INVALID_TEXT_DRAW) {
  303.         PlayerTextDrawSetPreviewVehCol(playerid, PlayerText:pTextDraws[playerid][text][epTD_SAMP_ID], color1, color2);
  304.     }
  305. }
  306.  
  307. public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid) {
  308.     for(new i; i < sizeof pTextDraws[]; ++i) {
  309.         if(pTextDraws[playerid][i][epTD_SAMP_ID] == playertextid) {
  310.             CallRemoteFunction("OnPlayerClickPTextdraw", "ii", playerid, i);
  311.             break;
  312.         }
  313.     }
  314. }
  315.  
  316. public OnPlayerDisconnect(playerid, reason)
  317. {
  318.     for(new i; i < sizeof pTextDraws[]; ++i) {
  319.         pTD_Destroy(playerid, PlayerText:i);
  320.     }
  321.     #if defined MyLib_OnPlayerDisconnect
  322.         PTDS_OnPlayerDisconnect(playerid, reason);
  323.     #endif
  324.     return 1;
  325. }
  326. #if defined _ALS_OnPlayerDisconnect
  327.     #undef OnPlayerDisconnect
  328. #else
  329.     #define _ALS_OnPlayerDisconnect
  330. #endif
  331. #define OnPlayerDisconnect PTDS_OnPlayerDisconnect
  332. #if defined PTDS_OnPlayerDisconnect
  333.     forward PTDS_OnPlayerDisconnect(playerid, reason);
  334. #endif
  335.  
  336.  
  337. #define CreatePlayerTextDraw pTD_Create
  338. #define PlayerTextDrawDestroy pTD_Destroy
  339. #define PlayerTextDrawLetterSize pTD_LetterSize
  340. #define PlayerTextDrawTextSize pTD_TextSize
  341. #define PlayerTextDrawAlignment pTD_Alignment
  342. #define PlayerTextDrawColor pTD_Color
  343. #define PlayerTextDrawUseBox pTD_UseBox
  344. #define PlayerTextDrawBoxColor pTD_BoxColor
  345. #define PlayerTextDrawSetShadow pTD_SetShadow
  346. #define PlayerTextDrawSetOutline pTD_SetOutline
  347. #define PlayerTextDrawBackgroundColor pTD_BackgroundColor
  348. #define PlayerTextDrawFont pTD_Font
  349. #define PlayerTextDrawSetProportional pTD_SetProportional
  350. #define PlayerTextDrawSetSelectable pTD_SetSelectable
  351. #define PlayerTextDrawShow pTD_Show
  352. #define PlayerTextDrawHide pTD_Hide
  353. #define PlayerTextDrawSetString pTD_SetString
  354. #define PlayerTextDrawSetPreviewModel pTD_SetPreviewModel
  355. #define PlayerTextDrawSetPreviewRot pTD_SetPreviewRot
  356. #define PlayerTextDrawSetPreviewVehCol pTD_SetPreviewVehCol
Add Comment
Please, Sign In to add comment