Akira_Yiin

PlayerTextDrawStreamer.inc

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