Text Draw list system.
Working vehicle tuning system from Open-GTO gamemode. You can see sources here.

TextList_Show(playerid, function[])TextList_Open(playerid, function[], list_items[][], list_size = sizeof(list_items), header[] = "",
              button1[] = "", button2[] = "", Float:pos_x = 89.0, Float:pos_y = 140.0,
              select_color = 0xFFA500FF,
              lists_bg_color[TEXTLIST_MAX_ITEMS] = {0x212121A0, ...},
              lists_fg_color[TEXTLIST_MAX_ITEMS] = {0xFFFFFFFF, ...},
              header_bg_color = 0xB71C1CAA, header_fg_color = 0xFFFFFFFF,
              paginator_bg_color = 0x21212160, paginator_fg_color = 0xFFFFFFFF,
              button1_bg_color = 0x6D4C41AA, button1_fg_color = 0xFFFFFFFF,
              button2_bg_color = 0x6D4C41AA, button2_fg_color = 0xFFFFFFFF)TextList_Close(playerid);TextList_IsOpen(playerid);Each TextList has its own handler function, it looks as follows:
TextListResponse:example_tl(playerid, TextListType:response, itemid, itemvalue[])
{
    return 1;
}This function is called when a user interacts with TextList.
TextListType can have these values:
- TextList_None
 - TextList_Button1
 - TextList_Button2
 - TextList_ListItem
 - TextList_ListUp
 - TextList_ListDown
 - TextList_Cancel
 
| Directive | Default value | Can be redefined | 
|---|---|---|
| TEXTLIST_MAX_ITEMS | 30 | yes | 
| TEXTLIST_MAX_ITEMS_ON_LIST | 10 | yes | 
| TEXTLIST_MAX_ITEM_NAME | 32 | no | 
| TEXTLIST_MAX_FUNCTION_NAME | 31 | no | 
| TEXTLIST_MAX_BUTTON_NAME | 12 | no | 
The system provides the ability to create a function to open TextList, this is useful when multiple calls one list (mostly used when creating nested menus):
TextListCreate:example_tl(playerid)
{
	new items[][TEXTLIST_MAX_ITEM_NAME] = {
		"Test 1",
		"Big Test 2"
	};
	new bg_colors[TEXTLIST_MAX_ITEMS] = {
		0xFF0000FF,
		0x00FF00FF
	};
	TextList_Open(playerid, TextList:example_tl, items, sizeof(items),
	              "Example header",
	              "Button 1", "Button 2",
	              .lists_bg_color = bg_colors);
}
TextListResponse:example_tl(playerid, TextListType:response, itemid, itemvalue[])
{
	new string[128];
	format(string, sizeof(string), " %d | %d | %d | %s", playerid, _:response, itemid, itemvalue);
	SendClientMessage(playerid, -1, string);
	return 1;
}And you should use TextList_Show for opening created TextList:
TextList_Show(playerid, TextList:example_tl);Of course you can not use the system, you can do everything without TextListCreate.
