Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**************
- * "Menu Editor" by EnzoMetlc - forum.sa-mp.com
- * Feel free to use/edit this as you like. Just respect credits.
- * Enjoy!
- **************/
- #include <a_samp>
- #include <ZCMD>
- #define MSG_COLOR 0xFFFF00
- #define MAX_NAME_LEN (30)
- #define EDIT_POSITION (1)
- #define EDIT_WIDTH (2)
- #define _fdi (700) // first dialog id
- #define DIALOG_MAIN (_fdi + 0)
- #define DIALOG_PROJECT (_fdi + 1)
- #define DIALOG_CHANGETITTLE (_fdi + 2)
- #define DIALOG_COLUMN1 (_fdi + 3)
- #define DIALOG_COLUMN2 (_fdi + 4)
- #define DIALOG_COLUMN1HEADER (_fdi + 5)
- #define DIALOG_COLUMN2HEADER (_fdi + 6)
- #define DIALOG_COLUMN1_ITEM (_fdi + 7)
- #define DIALOG_COLUMN2_ITEM (_fdi + 8)
- #define DIALOG_SELECTCOLUMN (_fdi + 9)
- #if !defined SFM // Send Formated Message
- #define SFM(%1,%2,%3) format(gStr, 128, %2, %3); SendClientMessage(playerid, %1, gStr)
- #endif
- enum MenuInfo_main
- {
- Menu:Menu_ID,
- Menu_Tittle[32],
- Float:Menu_fX,
- Float:Menu_fY,
- Float:Menu_Width1,
- Float:Menu_Width2,
- Menu_Columns
- };
- static MenuInfo[MenuInfo_main];
- static ColumnsText[2][32];
- static ItemsText[2][12][128];
- static ProjectName[MAX_NAME_LEN + 1];
- static Editing;
- static gStr[1028];
- static ItemEditing;
- public OnFilterScriptInit()
- {
- if(fexist("Menu Editor/")) return SendRconCommand("hostname [Menu Editor v1.0] Thanks for download!");
- print("\n \n* Menu Editor WARNING:");
- printf("* Folder 'Menu Editor' doesn't exists in scriptfiles folder!");
- SendRconCommand("hostname Menu Editor Warning: check out the console!"); // For lazy guys who never see the console
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- SendClientMessage(playerid, MSG_COLOR, "[*] Type (/Menu) to start.");
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- switch(dialogid)
- {
- case DIALOG_MAIN: // Create a new project
- {
- if(!response) return TogglePlayerControllable(playerid, true);
- if(!(1 <= strlen(inputtext) <= MAX_NAME_LEN)) return ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, "{00FFFF}New Menu.", "The project name is too long or small! (min 1 - max 30).", "Create", "Exit");
- format(MenuInfo[Menu_Tittle], 32, "New Menu");
- MenuInfo[Menu_ID] = CreateMenu("test", 2, 200.0, 100.0, 150.0, 150.0);
- MenuInfo[Menu_Columns] = 2;
- MenuInfo[Menu_fX] = 200.0;
- MenuInfo[Menu_fY] = 100.0;
- MenuInfo[Menu_Width1] = 150.0;
- MenuInfo[Menu_Width2] = 000.0;
- ColumnsText[0] = "Column 1";
- ColumnsText[1] = "Culumn 2";
- ItemsText[0][0] = "New Item";
- ItemsText[1][0] = "New Item";
- format(ProjectName, sizeof(ProjectName), "%s", inputtext);
- Menu_Update(playerid);
- SFM(MSG_COLOR, "[*] Project created as '%s'.", inputtext);
- return ShowDialog(playerid, DIALOG_PROJECT);
- }
- case DIALOG_PROJECT: // Main dialog
- {
- if(!response) return TogglePlayerControllable(playerid, true);
- switch(listitem)
- {
- case 0: // Save project
- {
- new str[512], File:INI, i, date[3], time[3];
- format(str, 128, "Menu Editor/%s.pwn", ProjectName);
- INI = fopen(str, io_append);
- getdate(date[0], date[1], date[2]);
- gettime(time[0], time[1], time[2]);
- if(flength(INI) <= 1) fwrite(INI, "/* Menu Editor done by EnzoMetlc - forum.sa-mp.com. Enjoy! */\r\n\r\n");
- format(str, 128, "// [date] This project was made in: %i/%02i/%02i around at %02i:%02i.", date[0], date[1], date[2], time[0], time[1]);
- fwrite(INI, str);
- fwrite(INI, "\r\n\r\n#include <a_samp>\r\n\r\n");
- format(str, sizeof(str), "static Menu:%s;\r\n\r\n", ProjectName);
- fwrite(INI, str);
- fwrite(INI, "public OnFilterScriptInit()\r\n{\r\n");
- format(str, sizeof(str), " %s = CreateMenu(\"%s\", %i, %.6f, %.6f, %.6f, %.6f);\r\n", ProjectName, MenuInfo[Menu_Tittle], MenuInfo[Menu_Columns], MenuInfo[Menu_fX], MenuInfo[Menu_fY], MenuInfo[Menu_Width1], MenuInfo[Menu_Width2]);
- fwrite(INI, str);
- for(new c = 0; c < MenuInfo[Menu_Columns]; c++)
- {
- format(str, sizeof(str), "\r\n SetMenuColumnHeader(%s, %i, \"%s\");\r\n", ProjectName, c, ColumnsText[c]);
- fwrite(INI, str);
- for(i = 0; i < 12; i++)
- {
- if(ItemsText[c][i][0] == EOS) break; // There's no more items
- format(str, sizeof(str), " AddMenuItem(%s, %i, \"%s\");\r\n", ProjectName, c, ItemsText[c][i]);
- fwrite(INI, str);
- }
- }
- fwrite(INI, " return 1;\r\n}\r\n\r\npublic OnPlayerSelectedMenuRow(playerid, row)\r\n{\r\n");
- format(str, sizeof(str), " if(GetPlayerMenu(playerid) == %s)\r\n", ProjectName);
- fwrite(INI, str);
- fwrite(INI, " {\r\n switch(row)\r\n {\r\n");
- for(i = 0; i < 12; i++)
- {
- if(ItemsText[0][i][0] == EOS) break;
- format(str, sizeof(str), " case %i: { } // %s\r\n", i, ItemsText[0][i]);
- fwrite(INI, str);
- }
- fwrite(INI, " }\r\n }\r\n return 1;\r\n}\r\n\r\n\r\n\r\n\r\n//-----------------------------------\r\n");
- fclose(INI);
- SFM(MSG_COLOR, "[*] Project saved as '%s.txt' in 'scriptfiles/Menu Editor/'.", ProjectName);
- return ShowDialog(playerid, DIALOG_PROJECT);
- }
- case 1: // Finish/cancel project
- {
- //Clear data
- MenuInfo[Menu_Tittle] = '\0';
- MenuInfo[Menu_Columns] = 0;
- MenuInfo[Menu_fX] = MenuInfo[Menu_fY] = MenuInfo[Menu_Width1] = MenuInfo[Menu_Width2] = 0.0;
- for(new i = 0; i < 24; i++) ItemsText[i / 12][i % 12] = "";
- // Destroy menu
- HideMenuForPlayer(MenuInfo[Menu_ID], playerid);
- DestroyMenu(MenuInfo[Menu_ID]);
- MenuInfo[Menu_ID] = Menu:0;
- SFM(MSG_COLOR, "[*] Project finished/canceled: %s.", ProjectName);
- ProjectName = "";
- }
- case 2: // Change menu tittle
- {
- return ShowPlayerDialog(playerid, DIALOG_CHANGETITTLE, DIALOG_STYLE_INPUT, "{00FFFF}Change menu tittle.", \
- "{FFFFFF}Write the menu tittle in 32 chars.", "Aceptar", "Atrรกs");
- }
- case 3: // Change menu pos
- {
- Editing = EDIT_POSITION;
- SFM(MSG_COLOR, " ", 0);
- SFM(MSG_COLOR, "[*] Changing menu's position.", 0);
- if(!GetPlayerVehicleID(playerid))
- {
- SFM(MSG_COLOR, "[*] Use ~k~~GO_FORWARD~, ~k~~GO_BACK~, ~k~~GO_LEFT~, ~k~~GO_RIGHT~ to move. And ~k~~VEHICLE_ENTER_EXIT~ to finish.", 0);
- SFM(MSG_COLOR, "[*] Boost: [~k~~PED_SPRINT~ = fast] - [~k~~SNEAK_ABOUT~ = slow] - [Nothing = normal]", 0);
- }
- else
- {
- SFM(MSG_COLOR, "[*] Use ~k~~VEHICLE_STEERUP~, ~k~~VEHICLE_STEERDOWN~, ~k~~VEHICLE_STEERLEFT~, ~k~~VEHICLE_STEERRIGHT~~n~ to move. And ~k~~VEHICLE_ENTER_EXIT~ to finish.", 0);
- SFM(MSG_COLOR, "[*] Boost: [~k~~VEHICLE_ACCELERATE~ = fast] - [~k~~SNEAK_ABOUT~ = slow] - [Nothing = normal]", 0);
- }
- return 1;
- }
- case 4: // Change menu width
- {
- Editing = EDIT_WIDTH;
- SFM(MSG_COLOR, "[*] Changing menu's width.", 0);
- if(!GetPlayerVehicleID(playerid))
- {
- SFM(MSG_COLOR, "[*] Use ~k~~GO_FORWARD~, ~k~~GO_BACK~, ~k~~GO_LEFT~, ~k~~GO_RIGHT~ to move. And ~k~~VEHICLE_ENTER_EXIT~ to finish.", 0);
- SFM(MSG_COLOR, "[*] Boost: [~k~~PED_SPRINT~ = fast] - [~k~~SNEAK_ABOUT~ = slow] - [Nothing = normal]", 0);
- }
- else
- {
- SFM(MSG_COLOR, "[*] Use ~k~~VEHICLE_STEERUP~, ~k~~VEHICLE_STEERDOWN~, ~k~~VEHICLE_STEERLEFT~, ~k~~VEHICLE_STEERRIGHT~~n~ to move. And ~k~~VEHICLE_ENTER_EXIT~ to finish.", 0);
- SFM(MSG_COLOR, "[*] Boost: [~k~~VEHICLE_ACCELERATE~ = fast] - [~k~~SNEAK_ABOUT~ = slow] - [Nothing = normal]", 0);
- }
- return 1;
- }
- case 5: // View column 1
- {
- ShowDialog(playerid, DIALOG_COLUMN1);
- SFM(MSG_COLOR, "[*] Column #1", 0);
- return 1;
- }
- case 6: // View column 2
- {
- ShowDialog(playerid, DIALOG_COLUMN2);
- SFM(MSG_COLOR, "[*] Column #2.", 0);
- return 1;
- }
- }
- }
- case DIALOG_CHANGETITTLE:
- {
- if(!response) return ShowDialog(playerid, DIALOG_PROJECT);
- if(strlen(inputtext) > 31) return ShowPlayerDialog(playerid, DIALOG_CHANGETITTLE, DIALOG_STYLE_INPUT, "{00FFFF}Change tittle", "{FFFFFF}The tittle lenght shouldn't be more than 31 chars.", "Next", "Back");
- format(MenuInfo[Menu_Tittle], 32, "%s", inputtext);
- SFM(MSG_COLOR, "[*] Menu's tittle has setted to '%s'.", inputtext);
- return ShowDialog(playerid, DIALOG_PROJECT);
- }
- case DIALOG_COLUMN1:
- {
- if(!response) return ShowDialog(playerid, DIALOG_PROJECT);
- switch(listitem)
- {
- case 0: // Add item
- {
- for(new i = 0; i < 12; i++)
- {
- if(ItemsText[0][i][0] == EOS)
- {
- ItemsText[0][i] = "New item";
- SortItemsList(0);
- ShowDialog(playerid, DIALOG_COLUMN1);
- SFM(MSG_COLOR, "[*] Item #%i added to column 1.", i + 1);
- return 1;
- }
- }
- SendClientMessage(playerid, 0xFF0000FF, "[*] Unable to add a new item in the column 1.");
- return ShowDialog(playerid, DIALOG_COLUMN1);
- }
- case 1: ShowPlayerDialog(playerid, DIALOG_COLUMN1HEADER, DIALOG_STYLE_INPUT, "{00FFFF}[Column 1] - Change header:", "{FFFFFF}Write the header for the column 1.", "Next", "Back");
- default: // An item selected
- {
- ItemEditing = listitem - 2;
- ShowPlayerDialog(playerid, DIALOG_COLUMN1_ITEM, DIALOG_STYLE_INPUT, "{00FFFF}[Column 1] - Edit item:", \
- "{FFFFFF}Write in 128 chars the item text.\nIf you want to delete this item, leave the input in blank.", "Next", "Back");
- }
- }
- }
- case DIALOG_COLUMN2:
- {
- if(!response) return ShowDialog(playerid, DIALOG_PROJECT);
- switch(listitem)
- {
- case 0: // Add item
- {
- for(new i = 0; i < 12; i++)
- {
- if(ItemsText[1][i][0] == EOS)
- {
- ItemsText[1][i] = "New item";
- SortItemsList(1);
- ShowDialog(playerid, DIALOG_COLUMN2);
- SFM(MSG_COLOR, "[*] Item #%i added to column 2.", i + 1);
- return 1;
- }
- }
- SendClientMessage(playerid, 0xFF0000FF, "[*] Unable to add a new item in the column 2.");
- return ShowDialog(playerid, DIALOG_COLUMN2);
- }
- case 1: ShowPlayerDialog(playerid, DIALOG_COLUMN2HEADER, DIALOG_STYLE_INPUT, "{00FFFF}[Column 2] - Change header:", "{FFFFFF}Write the header for the column 1.\n\n{FFFF00}1. If you don't want to use this column, leave the input in blank.\n2. If you want to keep using this column but in blank, just type \"_\" (sin comillas)", "Next", "Back");
- default: // An item selected
- {
- new str[400];
- ItemEditing = listitem - 2;
- if(MenuInfo[Menu_Columns] == 1) format(str, 300, "{FFFFFF}Write in 128 chars the item text.\nIf you want to delete this item, leave the input in blank.\n{FF0000}IMPORTANT: This item won't be shown on the menu. See \"Change header\" for more info.\n\n{FFFFFF}This item in columm 1:\n{00FF00}%s", ItemsText[0][ItemEditing]);
- else format(str, 300, "{FFFFFF}Write in 128 chars the item text.\nIf you want to delete this item, leave the input in blank.\n\nThis item in columm 1:\n{00FF00}%s", ItemsText[0][ItemEditing]);
- ShowPlayerDialog(playerid, DIALOG_COLUMN2_ITEM, DIALOG_STYLE_INPUT, "{00FFFF}[Column 2] - Edit item:", str, "Next", "Back");
- }
- }
- }
- case DIALOG_COLUMN1HEADER: // Change column1 header
- {
- if(!(1 <= strlen(inputtext) <= 32)) return ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, "{00FFFF}[Column 1] - Change header:", "{FF0000}Header's lenght should be between 0 and 32!\r\n{FFFFFF}Try again:", "Next", "Back");
- if(response)
- {
- format(ColumnsText[0], 32, "%s", inputtext);
- SFM(MSG_COLOR, "[*] Colum 1 header setted to '%s'.", inputtext);
- }
- return ShowDialog(playerid, DIALOG_COLUMN1);
- }
- case DIALOG_COLUMN2HEADER: // Change column2 header
- {
- if(response)
- {
- format(ColumnsText[1], 32, "%s", inputtext);
- MenuInfo[Menu_Columns] = (strlen(inputtext) == 0) ? (1) : (2);
- SFM(MSG_COLOR, "[*] Colum 2 header setted to '%s'.", inputtext);
- }
- return ShowDialog(playerid, DIALOG_COLUMN2);
- }
- case DIALOG_COLUMN1_ITEM: // Edit an item text in column1
- {
- if(response)
- {
- format(ItemsText[0][ItemEditing], 128, "%s", inputtext);
- SFM(MSG_COLOR, "[*] Item %i column 1 text setted to '%s'.", ItemEditing, inputtext);
- SortItemsList(0);
- }
- return ShowDialog(playerid, DIALOG_COLUMN1);
- }
- case DIALOG_COLUMN2_ITEM: // Edit an item text in column2
- {
- if(response)
- {
- format(ItemsText[1][ItemEditing], 128, "%s", inputtext);
- SFM(MSG_COLOR, "[*] Item %i column 2 text setted to '%s'.", ItemEditing, inputtext);
- SortItemsList(1);
- }
- return ShowDialog(playerid, DIALOG_COLUMN2);
- }
- case DIALOG_SELECTCOLUMN:
- {
- if(!response) return 1;
- OnDialogResponse(playerid, (listitem == 0) ? (DIALOG_COLUMN1) : (DIALOG_COLUMN2), true, ItemEditing + 2, "\0");
- }
- }
- return 1;
- }
- public OnPlayerUpdate(playerid)
- {
- if(Editing == 0) return 1; // Is editing
- static key, ud, lr, Float:speed;
- GetPlayerKeys(playerid, key, ud, lr);
- if(key == KEY_SPRINT) speed = 10.0;
- else if(key == KEY_WALK) speed = 0.5;
- else speed = 1.0;
- switch(Editing)
- {
- case EDIT_POSITION:
- {
- if(ud < 0) MenuInfo[Menu_fY] -= speed; // Up
- if(ud > 0) MenuInfo[Menu_fY] += speed; // Down
- if(lr < 0) MenuInfo[Menu_fX] -= speed; // Left
- if(lr > 0) MenuInfo[Menu_fX] += speed; // Right
- format(gStr, sizeof(gStr), "~n~~n~~n~~n~~n~~n~~n~~w~-position-~n~~r~~h~X: ~w~%0.3f~n~~r~~h~Y: ~w~%0.3f~n~~y~Speed: ~w~%0.1f", MenuInfo[Menu_fX], MenuInfo[Menu_fY], speed);
- GameTextForPlayer(playerid, gStr, 60000, 3);
- }
- case EDIT_WIDTH:
- {
- if(ud < 0) MenuInfo[Menu_Width2] -= speed; // Up
- if(ud > 0) MenuInfo[Menu_Width2] += speed; // Down
- if(lr < 0) MenuInfo[Menu_Width1] -= speed; // Left
- if(lr > 0) MenuInfo[Menu_Width1] += speed; // Right
- format(gStr, sizeof(gStr), "~n~~n~~n~~n~~n~~n~~n~~w~-width-~n~~r~~h~X: ~w~%0.3f~n~~r~~h~Y: ~w~%0.3f~n~~y~Speed: ~w~%0.1f", MenuInfo[Menu_Width1], MenuInfo[Menu_Width2], speed);
- GameTextForPlayer(playerid, gStr, 60000, 3);
- }
- }
- TogglePlayerControllable(playerid, false);
- Menu_Update(playerid);
- return 1;
- }
- public OnPlayerSelectedMenuRow(playerid, row)
- {
- if(!Editing && GetPlayerMenu(playerid) == MenuInfo[Menu_ID]) // He pressed "ENTER" while editing
- {
- ItemEditing = row;
- ShowPlayerDialog(playerid, DIALOG_SELECTCOLUMN, DIALOG_STYLE_LIST, "{00FFFF}Edit item - Select Column",\
- "{FFFFFF}Edit in column 1\nEdit in column 2", "Next", "Back");
- return 1;
- }
- return 1;
- }
- public OnPlayerExitedMenu(playerid)
- {
- if(GetPlayerMenu(playerid) == MenuInfo[Menu_ID] && Editing) // He pressed "ENTER" while editing
- {
- SetTimerEx("ShowDialog", 200, false, "dd", playerid, DIALOG_PROJECT);
- GameTextForPlayer(playerid, "_", 10, 3);
- SFM(MSG_COLOR, "[*] %s edition finished.", (Editing == 1) ? ("Pos") : ("Width"));
- Editing = 0;
- }
- return 1;
- }
- CMD:menu(playerid)
- {
- ShowDialog(playerid, (!IsValidMenu(MenuInfo[Menu_ID])) ? (DIALOG_MAIN) : (DIALOG_PROJECT));
- return 1;
- }
- /* Functions */
- forward ShowDialog(playerid, dialogid);
- public ShowDialog(playerid, dialogid)
- {
- if(IsValidMenu(MenuInfo[Menu_ID])) Menu_Update(playerid);
- switch(dialogid)
- {
- case DIALOG_MAIN: return ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, "{00FFFF}Main Menu.", "Type your project name below.\nNote that the project name will be your var name for the menu.", "Next", "Exit");
- case DIALOG_PROJECT:
- {
- new str[20 + MAX_NAME_LEN];
- format(str, sizeof(str), "[%s] - Main.", ProjectName);
- ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, str, \
- "{FFFF00}Save project.\n" \
- "{FFFF00}Finish/Cancel edition.\n" \
- "{FFFFFF}Change tittle.\n" \
- "Change pos\n" \
- "Change width\n" \
- "View column 1\n" \
- "View column 2", \
- "Next", "Exit");
- return 1;
- }
- case DIALOG_COLUMN1:
- {
- gStr = "{FFFF00}[+] Add item\n{FFFF00}Change header\n";
- new tmp[300], len;
- for(new i = 0; i < 12; i++)
- {
- if((len = strlen(ItemsText[0][i])) != 0)
- {
- if(len < 12) format(tmp, 128, "{00FF00}Item[%02i] {FFFFFF}- %s\n", i + 1, ItemsText[0][i]);
- else format(tmp, 128, "{00FF00}Item[%02i] {FFFFFF}- %12s[...]\n", i + 1, ItemsText[0][i]);
- strcat(gStr, tmp);
- }
- }
- ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, "{00FFFF}Column 1", gStr, "Next", "Back");
- return 1;
- }
- case DIALOG_COLUMN2:
- {
- gStr = "{FFFF00}[+] Add item\n{FFFF00}Change header\n";
- new tmp[300], len;
- for(new i = 0; i < 12; i++)
- {
- if((len = strlen(ItemsText[1][i])) != 0)
- {
- if(len < 12) format(tmp, 128, "{%s}Item[%02i] {FFFFFF}- %s\n", (MenuInfo[Menu_Columns] == 1) ? ("FF0000") : ("00FF00"), i + 1, ItemsText[1][i]);
- else format(tmp, 128, "{%s}Item[%02i] {FFFFFF}- %12s[...]\n", (MenuInfo[Menu_Columns] == 1) ? ("FF0000") : ("00FF00"), i + 1, ItemsText[1][i]);
- strcat(gStr, tmp);
- }
- }
- ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, "{00FFFF}Column 2", gStr, "Next", "Back");
- return 1;
- }
- }
- return 0;
- }
- stock Menu_Update(playerid) // Update current menu with the new info
- {
- static c, i;
- HideMenuForPlayer(MenuInfo[Menu_ID], playerid);
- DestroyMenu(MenuInfo[Menu_ID]);
- MenuInfo[Menu_ID] = CreateMenu(MenuInfo[Menu_Tittle], MenuInfo[Menu_Columns], MenuInfo[Menu_fX], MenuInfo[Menu_fY], MenuInfo[Menu_Width1], MenuInfo[Menu_Width2]);
- for(c = 0; c < MenuInfo[Menu_Columns]; c++)
- {
- SetMenuColumnHeader(MenuInfo[Menu_ID], c, ColumnsText[c]);
- for(i = 0; i < 12; i++)
- {
- if(ItemsText[c][i][0] != EOS) AddMenuItem(MenuInfo[Menu_ID], c, ItemsText[c][i]);
- }
- }
- ShowMenuForPlayer(MenuInfo[Menu_ID], playerid);
- return 1;
- }
- stock SortItemsList(idx)
- {
- new tmp[12][128], i, count;
- for(i = 0; i < 12; i++)
- {
- if(ItemsText[idx][i][0] != EOS) format(tmp[count++], 128, "%s", ItemsText[idx][i]);
- }
- for(i = 0; i < 12; i++) format(ItemsText[idx][i], 128, "%s", tmp[i]);
- return 1;
- }
- // --- End of script
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement