| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- //
- // #LB_TDBox
- // Text Draw Message Box
- // ---------------------
- // Sends a message box to a playerid. If the input text is to long the function
- // automaticly stops, creates a new line and continues writing. Also supports
- // ~n~ to not exceed the background box.
- //
- // If you wish to send the text without the background box just use an invisible
- // color for the box (e.g. 0xFFAAFF00). If you want to change the text color use
- // as following ~y~, ~r~ ...
- //
- // 'padding' defines the space between text and box while 'BaseX' and 'BaseY'
- // set the actual text and box position. Note that the function checks whether
- // the text would exceed the screen and aligns the position of the box!
- //
- // If 'hide_in' is set to 0 or anything below the text box will not disappear
- // after time. You then have to use 'TD_HideMessage()' or the box will be hidden
- // when the function gets used a second time for a player!
- //
- // !!! Max amount of Lines that can be used is 10 !!!
- //
- // Version 1.0
- //
- // ~ LeBoyce 2013
- //
- #if defined _LBYC_TDBox_included
- #endinput
- #endif
- #define _LBYC_TDBox_included
- /*
- native TD_SendMessage(playerid, const string_[], header[], hide_in = 5000, bgcolor = 12840, Float:padding = 24.0000, Float:BaseX = 319.000000, Float:BaseY = 231.000000, length = 90);
- native TD_HideMessage(playerid);
- */
- #define LIMIT_LEFT 2.0000
- #define LIMIT_RIGHT 634.0000
- #define LIMIT_BOTTOM 436.0000
- #define LIMIT_TOP 2.0000
- // Callbacks
- forward TD_HideAll(playerid, hide_in);
- // settings player lists
- new
- Text:G_TEXTDRAW[MAX_PLAYERS][12],
- G_TEXTDRAW_MESSAGE[MAX_PLAYERS][12][128],
- P_TDRAWS[MAX_PLAYERS],
- bool:P_HEADER[MAX_PLAYERS],
- E_TD_TIMER[MAX_PLAYERS],
- P_TEXTDRAW_SIZE[MAX_PLAYERS],
- P_TEXTDRAW_SIZE_LONGEST[MAX_PLAYERS],
- E_LAST[MAX_PLAYERS],
- Text:Td_Header[MAX_PLAYERS]
- ;
- //------------------------------------------------
- TD_CreateBgBox(playerid, bgcolor, Float:startX, Float:BaseY, Float:padding, Float:length)
- {
- G_TEXTDRAW[playerid][0] = TextDrawCreate((startX - padding), BaseY + (P_HEADER[playerid] ? 1.0 : 0.0), "_");TextDrawLetterSize(G_TEXTDRAW[playerid][0], 0.169999, 0.899999+float(P_TDRAWS[playerid]));
- TextDrawBoxColor(G_TEXTDRAW[playerid][0], bgcolor);TextDrawTextSize(G_TEXTDRAW[playerid][0], (startX + length + padding + 3.0000), 24.000000);
- TextDrawBackgroundColor(G_TEXTDRAW[playerid][0], 255);TextDrawFont(G_TEXTDRAW[playerid][0], 1);TextDrawColor(G_TEXTDRAW[playerid][0], -1);
- TextDrawSetOutline(G_TEXTDRAW[playerid][0], 0);TextDrawSetProportional(G_TEXTDRAW[playerid][0], 1);TextDrawSetShadow(G_TEXTDRAW[playerid][0], 1);
- TextDrawUseBox(G_TEXTDRAW[playerid][0], 1);TextDrawShowForPlayer(playerid, G_TEXTDRAW[playerid][0]);
- }
- //------------------------------------------------
- TD_CreateTextMessages(playerid, Float:startX, Float:BaseY)
- {
- for(new i = 1; i != P_TDRAWS[playerid]; i++)
- {
- G_TEXTDRAW[playerid][i] = TextDrawCreate(startX, BaseY+(9.0*float(i)), G_TEXTDRAW_MESSAGE[playerid][i]);
- TextDrawBackgroundColor(G_TEXTDRAW[playerid][i], 255);TextDrawFont(G_TEXTDRAW[playerid][i], 2);TextDrawLetterSize(G_TEXTDRAW[playerid][i], 0.170000, 1.000000);
- TextDrawColor(G_TEXTDRAW[playerid][i], -1);TextDrawSetOutline(G_TEXTDRAW[playerid][i], 0);TextDrawSetProportional(G_TEXTDRAW[playerid][i], 1);
- TextDrawSetShadow(G_TEXTDRAW[playerid][i], 0);TextDrawShowForPlayer(playerid, G_TEXTDRAW[playerid][i]);format(G_TEXTDRAW_MESSAGE[playerid][i], 128, "0");
- }
- }
- //------------------------------------------------
- TD_CreateHeader(playerid, header[], Float:startX, Float:BaseY, Float:padding)
- {
- if(header[0] == '\0' || header[0] == ' ') header[0] = '_', P_HEADER[playerid] = true;
- else P_HEADER[playerid] = false;
- Td_Header[playerid] = TextDrawCreate(startX - 1.0 - padding, BaseY - 7.0, header);TextDrawBackgroundColor(Td_Header[playerid], 255);TextDrawFont(Td_Header[playerid], 2);
- TextDrawLetterSize(Td_Header[playerid], 0.260000, 1.000000);TextDrawColor(Td_Header[playerid], -1);TextDrawSetOutline(Td_Header[playerid], 0);
- TextDrawSetProportional(Td_Header[playerid], 1);TextDrawSetShadow(Td_Header[playerid], 1);TextDrawShowForPlayer(playerid, Td_Header[playerid]);
- }
- //------------------------------------------------
- stock TD_HideMessage(playerid)
- {
- if(P_TDRAWS[playerid] != 0) { KillTimer(E_TD_TIMER[playerid]);TD_HideAll(playerid, 0); }
- return 1;
- }
- //------------------------------------------------
- stock require_LetterLength(player_id, string[])
- {
- new
- var[1]
- ;
- var[0] = tolower(string[0]);
- switch(var[0])
- {
- case 'a', 'c', 'f', 'h', 'l', 'm', 'o', 'p', 'r', 's', 'u', 'v', 'x', 'z', /**/'b', 'd', 'e', 'g', 'j', 'k', 'n', 'q', 't', 'y'/**/, 0..9, '!', '.', ',', ':', ';':
- {
- if(E_LAST[player_id] == 4)
- {
- E_LAST[player_id] = 5;
- return 5;
- }
- else
- {
- E_LAST[player_id] = 4;
- return 4;
- }
- }
- case 'w': return 6;
- }
- return 2;
- }
- //------------------------------------------------
- stock TD_SendMessage(playerid, const string_[], header[], hide_in = 5000, bgcolor = 12840, Float:padding = 24.0000, Float:BaseX = 319.000000, Float:BaseY = 231.000000, length = 90)
- {
- P_TEXTDRAW_SIZE_LONGEST[playerid] = 0;
- if(P_TDRAWS[playerid] != 0) { KillTimer(E_TD_TIMER[playerid]); TD_HideAll(playerid, 0); }
- if(length > 90) length = 90;
-
- new
- count,
- pos,
- td = 1,
- string[1024]
- ;
- do { string[pos] = string_[pos]; pos++; } while(string_[pos] != '\0');
- pos = 0;
- do
- {
- new
- bMessage[128]
- ;
- do
- {
- while(!count && !!pos && string[++pos] == ' ') continue;
- if(string[pos] == '~' && string[pos+1] == 'n' && string[pos+2] == '~') { string[pos] = '_'; string[pos+1] = '_'; pos += 2; string[pos] = ' '; break; }
- bMessage[count] = string[pos];
- count++;
- pos++;
- }
- while(count < length && string[pos] != '\0' || count > length - 1 && string[pos] != ' ' && string[pos] != '\0');
- new
- stringPos = 0
- ;
- P_TEXTDRAW_SIZE[playerid] = 0;
- while(bMessage[stringPos++] != '\0') { P_TEXTDRAW_SIZE[playerid] += require_LetterLength(playerid, bMessage[stringPos]); }
- if(P_TEXTDRAW_SIZE[playerid] > P_TEXTDRAW_SIZE_LONGEST[playerid]) { P_TEXTDRAW_SIZE_LONGEST[playerid] = P_TEXTDRAW_SIZE[playerid]; }
- format(G_TEXTDRAW_MESSAGE[playerid][td], 128, "%s", bMessage);
- count = 0;
- td++;
- }
- while(string[pos] != '\0');
- P_TDRAWS[playerid] = (td);
- new
- Float:Length = float(P_TEXTDRAW_SIZE_LONGEST[playerid]),
- Float:X = BaseX - Length / 2,
- Float:Y = BaseY,
- Rows = P_TDRAWS[playerid]
- ;
- if(X - padding < LIMIT_LEFT) {
- X += (LIMIT_LEFT - (X - padding));
- }
- else if(X + Length + padding > LIMIT_RIGHT) {
- X += (LIMIT_RIGHT - (X + Length + padding));
- }
- if(Y < LIMIT_TOP) {
- Y = LIMIT_TOP;
- }
- else if (Y + float(Rows * 9) > LIMIT_BOTTOM) {
- Y = LIMIT_BOTTOM - (float(Rows * 9));
- }
- TD_CreateHeader(playerid, header, X, Y, padding);
- TD_CreateBgBox(playerid, bgcolor, X, Y, padding, Length);
- TD_CreateTextMessages(playerid, X, Y);
- if(hide_in != 0) SetTimerEx("TD_HideAll", 100, false, "ii", playerid, hide_in);
- return 1;
- }
- //------------------------------------------------
- public TD_HideAll(playerid, hide_in)
- {
- if(hide_in != 0) { E_TD_TIMER[playerid] = SetTimerEx("TD_HideAll", hide_in, false, "ii", playerid, 0); }
- else {
- for(new i = 0; i != P_TDRAWS[playerid]; i++) { TextDrawHideForPlayer(playerid, G_TEXTDRAW[playerid][i]);TextDrawDestroy(G_TEXTDRAW[playerid][i]); }
- TextDrawHideForPlayer(playerid, Td_Header[playerid]);TextDrawDestroy(Td_Header[playerid]);P_TDRAWS[playerid] = 0;
- }
- return 1;
- }
|