Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * In-Game File Editor (Version: R1) *
- Author: Pedro P. L. Papadópolis (A.K.A. Mandrakke)
- Credits:
- - JaTochNietDan (FileManager plugin)
- My sa-mp forums profile: http://forum.sa-mp.com/member.php?u=87086
- The most updated release can be found at:
- http://forum.sa-mp.com/showthread.php?p=2129186
- **/
- #include <a_samp>
- #include <filemanager>
- //----------------------------------------------------------------------------------------------------------------------------------------
- //#pragma unused strtok
- #define SERVER_PLAYERS 20
- #define AUTO_SETUP
- //----------------------------------------------------------------------------------------------------------------------------------------
- #define FILTERSCRIPT 1
- //----------------------------------------------------------------------------------------------------------------------------------------
- #define DIALOG_GERRESPONSE 560
- #define DIALOG_FMDIR 559
- #define DIALOG_FMFILE 558
- #define DIALOG_FMVAR 557
- //----------------------------------------------------------------------------------------------------------------------------------------
- new
- exp[7][128],
- _dirContainer[SERVER_PLAYERS][500],
- _dirContainerSize,
- _dialogClose[SERVER_PLAYERS],
- _dPage[SERVER_PLAYERS],
- _dIndexes[600],
- sInds[SERVER_PLAYERS][300][128],
- sVals[SERVER_PLAYERS][300][20],
- vals[600],
- globListitem[SERVER_PLAYERS],
- _pDir[SERVER_PLAYERS][150],
- _itemsPerList,
- _lastDir[SERVER_PLAYERS][8][50],
- _output[500],
- varEdit[SERVER_PLAYERS],
- _selected[SERVER_PLAYERS][50],
- _currentDir[SERVER_PLAYERS][50],
- _currentFile[SERVER_PLAYERS][50]
- ;
- public OnFilterScriptInit()
- {
- print(" -------------------------------------------- ");
- print(" In-Game File Editor Started (By: Mandrakke) ");
- print(" -------------------------------------------- ");
- _dirContainerSize = sizeof(_dirContainer[]);
- _itemsPerList = 15;
- return 1;
- }
- //----------------------------------------------------------------------------------------------------------------------------------------
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- new path[150], lastchar[2], newpath[150], clean[50];
- strmid(_selected[playerid], inputtext, 0, strlen(inputtext) - 1);
- strmid(lastchar, _pDir[playerid], strlen(_pDir[playerid]) - 1, strlen(_pDir[playerid]));
- format(clean, sizeof(clean), "%s", _selected[playerid]);
- if(strcmp(lastchar, "/", true) == 1) {
- format(_pDir[playerid], sizeof(_pDir[]), "%s/", _pDir[playerid]);
- }
- /*
- format(_output, sizeof(_output), "%d %d %d %d %s", playerid, dialogid, response, listitem, inputtext);
- SendClientMessage(playerid, 0xEE4000FF, _output);
- */
- if(dialogid == DIALOG_FMDIR) {
- if(response == 1) {
- if(_dialogClose[playerid] == 1 && listitem == 0) return 0;
- else {
- if(listitem > 0) {
- globListitem[playerid] = listitem - 1;
- if(strcmp(_selected[playerid], "/\\ Above directory", true) == 0) {
- strmid(newpath, _pDir[playerid], 0, (strlen(_pDir[playerid]) - (strlen(getLastDir(playerid)) + 1)));
- format(path, sizeof(path), "%s", newpath);
- rmLastDir(playerid, getLastDir(playerid));
- strmid(_output, path, strlen(path) - (strlen(getLastDir(playerid)) + 1), strlen(path));
- format(_selected[playerid], sizeof(_selected[]), "%s", _output);
- } else {
- format(path, sizeof(path), "%s%s", _pDir[playerid], _selected[playerid]);
- }
- if(file_exists(path)) {
- format(_currentFile[playerid], sizeof(_currentFile[]), "%s", _selected[playerid]);
- _showFileVars(playerid, path, 1);
- } else if(dir_exists(path)) {
- format(_currentDir[playerid], sizeof(_currentFile[]), "%s", _selected[playerid]);
- if(strcmp(clean, "/\\ Above directory", true) == 1) {
- addLastDir(playerid, clean);
- }
- _listDir(path, 1, playerid, 1);
- } else {
- ShowPlayerDialog(playerid, 666, DIALOG_STYLE_MSGBOX, "Message", "{FF0000} File or directory not found.", "Close", "");
- }
- } else {
- if(_dPage[playerid] > 1) _dPage[playerid]--;
- _listDir(_pDir[playerid], 1, playerid, _dPage[playerid]);
- }
- }
- } else if(response == 0) {
- if(_dialogClose[playerid] == 2) return 0;
- else {
- if(listitem == 0) {
- _dPage[playerid]++;
- _listDir(_pDir[playerid], 1, playerid, _dPage[playerid]);
- }
- }
- }
- return 1;
- } else if(dialogid == DIALOG_FMFILE) {
- format(path, sizeof(path), "%s%s", _pDir[playerid], _currentFile[playerid]);
- if(response == 1) {
- if(_dialogClose[playerid] == 1 && listitem == 0) return _listDir(_pDir[playerid], 1, playerid, _dPage[playerid]);
- else {
- if(listitem > 0) {
- new valNum, line[128], k;
- globListitem[playerid] = ((_dPage[playerid] - 1) * _itemsPerList) + (listitem - 1);
- valNum = globListitem[playerid];
- varEdit[playerid] = 0;
- for(k = 0; k < 300; k++) {
- if(strlen(sInds[playerid][varEdit[playerid]]) > 0) {
- explode(exp, line, "=");
- if(varEdit[playerid] == valNum) break;
- }
- ++varEdit[playerid];
- }
- format(vals, sizeof(vals), "File %s", _currentFile[playerid]);
- if(strlen(sVals[playerid][varEdit[playerid]]) > 0) {
- format(_dIndexes, sizeof(_dIndexes), "{FFFFFF}Variable: {FF0000}%s\r\n{FFFFFF}Value: {FF0000}%s\r\n\r\n{AAAAAA}Insert a new value:", sInds[playerid][varEdit[playerid]], sVals[playerid][varEdit[playerid]]);
- } else {
- format(_dIndexes, sizeof(_dIndexes), "{FF0000}Warning: This IS NOT an common variable/value line.\r\n\r\n{00FF00}Line: {FFFFFF}%s\r\n\r\nType its new value below:", sInds[playerid][varEdit[playerid]]);
- }
- ShowPlayerDialog(playerid, DIALOG_FMVAR, DIALOG_STYLE_INPUT, vals, _dIndexes, "update", "back");
- } else {
- if(_dPage[playerid] > 1) _dPage[playerid]--;
- _showFileVars(playerid, path, _dPage[playerid]);
- }
- }
- } else if(response == 0) {
- if(_dialogClose[playerid] == 2) return _listDir(_pDir[playerid], 1, playerid, _dPage[playerid]);
- else {
- if(listitem == 0) {
- _dPage[playerid]++;
- _showFileVars(playerid, path, _dPage[playerid]);
- }
- }
- }
- } else if(dialogid == DIALOG_FMVAR) {
- new text[2000], t;
- format(path, sizeof(path), "%s%s", _pDir[playerid], _currentFile[playerid]);
- if(response == 1) {
- if(strlen(sVals[playerid][varEdit[playerid]]) > 0) {
- format(sVals[playerid][varEdit[playerid]], 20, "%s", inputtext);
- } else {
- format(sInds[playerid][varEdit[playerid]], 128, "%s", inputtext);
- }
- for(t = 0; t < 300; t++) {
- if(strlen(sInds[playerid][t]) > 0) {
- if(strlen(sVals[playerid][t]) > 0) {
- format(text, sizeof(text), "%s%s=%s\n", text, sInds[playerid][t], sVals[playerid][t]);
- } else {
- format(text, sizeof(text), "%s%s\n", text, sInds[playerid][t]);
- }
- }
- }
- new File:ofile = f_open(path, "w");
- f_write(ofile, text);
- f_close(ofile);
- _showFileVars(playerid, path, _dPage[playerid]);
- } else {
- format(path, sizeof(path), "%s%s", _pDir[playerid], _currentFile[playerid]);
- _showFileVars(playerid, path, 1);
- }
- }
- return 0;
- }
- //----------------------------------------------------------------------------------------------------------------------------------------
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- if(strcmp(cmdtext, "/fileeditor", true) == 0) {
- if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, 0xEE4000FF, "[SERVERE] Only admins can use this command.");
- _resetVars(playerid);
- _listDir("./", 1, playerid, 1);
- return 1;
- }
- return 0;
- }
- //----------------------------------------------------------------------------------------------------------------------------------------
- forward _showFileVars(playerid, file[], page);
- public _showFileVars(playerid, file[], page) {
- new _line[128], x, y, z, _limit, t;
- format(_dIndexes, 600, "");
- x = 0;
- y = (page - 1) * _itemsPerList;
- z = 0;
- _limit = y + _itemsPerList;
- _dPage[playerid] = page;
- format(_dIndexes, sizeof(_dIndexes), "{00FF00}Page %d:\r\n", page);
- for(t = 0; t < 300; t++) {
- format(sInds[playerid][t], 20, "");
- }
- for(t = 0; t < 300; t++) {
- format(sVals[playerid][t], 20, "");
- }
- new File:ofile = f_open(file, "r");
- while(f_read(ofile, _line, 128)) {
- explode(exp, _line, "=");
- if(x >= y && x < _limit) {
- if(strlen(_line) && strlen(exp[1]) > 0) {
- format(_dIndexes, sizeof(_dIndexes), "%s%s : %s\r\n", _dIndexes, exp[0], exp[1]);
- } else {
- format(_dIndexes, sizeof(_dIndexes), "%s%s\r\n", _dIndexes, exp[0]);
- }
- ++z;
- }
- format(sInds[playerid][x], 50, "%s", exp[0]);
- format(sVals[playerid][x], 50, "%s", exp[1]);
- ++x;
- }
- if(ofile) f_close(ofile);
- format(vals, sizeof(vals), "File %s", file);
- if(z < _itemsPerList && page == 1) {
- _dialogClose[playerid] = 1;
- ShowPlayerDialog(playerid, DIALOG_FMFILE, DIALOG_STYLE_LIST, vals, _dIndexes, "Back", "");
- } else if(z == _itemsPerList && page == 1) {
- _dialogClose[playerid] = 1;
- ShowPlayerDialog(playerid, DIALOG_FMFILE, DIALOG_STYLE_LIST, vals, _dIndexes, "Back", "Next >>");
- } else if(z < _itemsPerList && page > 1){
- _dialogClose[playerid] = 2;
- ShowPlayerDialog(playerid, DIALOG_FMFILE, DIALOG_STYLE_LIST, vals, _dIndexes, "<< Prev.", "");
- } else {
- _dialogClose[playerid] = 0;
- ShowPlayerDialog(playerid, DIALOG_FMFILE, DIALOG_STYLE_LIST, vals, _dIndexes, "<< Prev.", "Next >>");
- }
- return 1;
- }
- //----------------------------------------------------------------------------------------------------------------------------------------
- forward _listDir(_dir[], start, playerid, page);
- public _listDir(_dir[], start, playerid, page) {
- new dir:_handle, item[40], type, _color[9], _c, _dialogLabel[150], _z, _o;
- _handle = dir_open(_dir);
- _dPage[playerid] = page;
- format(_dirContainer[playerid], _dirContainerSize, "");
- start = start * (page - 1) * _itemsPerList;
- _c = (page - 1) * _itemsPerList;
- _z = 0;
- _o = 0;
- format(_pDir[playerid], sizeof(_pDir[]), "%s", _dir);
- while(dir_list(_handle, item, type)) {
- if(_z > start && _o <= _itemsPerList - 1) {
- ++_o;
- if(type == FM_FILE) format(_color, sizeof(_color), "%s", "{FFFFFF}");
- else if(type == FM_DIR) {
- if(strcmp(item, "..", true) == 1) {
- format(_color, sizeof(_color), "%s", "{FF0000}");
- } else {
- format(_color, sizeof(_color), "%s", "{DF00FF}");
- if(strlen(getLastDir(playerid)) > 0) {
- format(item, sizeof(item), "/\\ Above directory");
- } else {
- format(item, sizeof(item), "");
- }
- }
- }
- if(strlen(item) > 0) {
- format(_dirContainer[playerid], _dirContainerSize, "%s%s%s\r\n", _dirContainer[playerid], _color, item);
- }
- }
- ++_c;
- ++_z;
- }
- format(_dirContainer[playerid], sizeof(_dirContainer[]), "{00FF00}Page %d/%d\r\n%s", page, floatround(float(_z) / float(_itemsPerList), floatround_ceil), _dirContainer[playerid]);
- dir_close(_handle);
- format(_dialogLabel, sizeof(_dialogLabel), "File Editor - Dir %s", _dir);
- if(_z <= _itemsPerList && page == 1) {
- _dialogClose[playerid] = 1;
- ShowPlayerDialog(playerid, DIALOG_FMDIR, DIALOG_STYLE_LIST, _dialogLabel, _dirContainer[playerid], "Close", "");
- } else if(_o == _itemsPerList && page == 1) {
- _dialogClose[playerid] = 1;
- ShowPlayerDialog(playerid, DIALOG_FMDIR, DIALOG_STYLE_LIST, _dialogLabel, _dirContainer[playerid], "Close", "Next >>");
- } else if(_o < _itemsPerList && page > 1){
- _dialogClose[playerid] = 2;
- ShowPlayerDialog(playerid, DIALOG_FMDIR, DIALOG_STYLE_LIST, _dialogLabel, _dirContainer[playerid], "<< Prev.", "");
- } else {
- _dialogClose[playerid] = 0;
- ShowPlayerDialog(playerid, DIALOG_FMDIR, DIALOG_STYLE_LIST, _dialogLabel, _dirContainer[playerid], "<< Prev.", "Next >>");
- }
- return 1;
- }
- //----------------------------------------------------------------------------------------------------------------------------------------
- stock explode(aExplode[][], const sSource[], const sDelimiter[] = " ", iVertices = sizeof aExplode, iLength = sizeof aExplode[]){
- new
- iNode,
- iPointer,
- iPrevious = -1,
- iDelimiter = strlen(sDelimiter);
- while(iNode < iVertices){
- iPointer = strfind(sSource, sDelimiter, false, iPointer);
- if(iPointer == -1){
- strmid(aExplode[iNode], sSource, iPrevious, strlen(sSource), iLength);
- break;
- }
- else {
- strmid(aExplode[iNode], sSource, iPrevious, iPointer, iLength);
- }
- iPrevious = (iPointer += iDelimiter);
- ++iNode;
- }
- return iPrevious;
- }
- //----------------------------------------------------------------------------------------------------------------------------------------
- forward _resetVars(playerid);
- public _resetVars(playerid) {
- new t;
- _dPage[playerid] = 0;
- _dialogClose[playerid] = 0;
- globListitem[playerid] = 0;
- format(_dIndexes, sizeof(_dIndexes), "");
- format(vals, sizeof(vals), "");
- for(t = 0; t < 300; t++) {
- format(sInds[playerid][t], 20, "");
- }
- for(t = 0; t < 300; t++) {
- format(sVals[playerid][t], 20, "");
- }
- for(t = 0; t < sizeof(_lastDir[]); ++t) {
- format(_lastDir[playerid][t], 50, "");
- }
- return 1;
- }
- //----------------------------------------------------------------------------------------------------------------------------------------
- forward addLastDir(playerid, dir[]);
- public addLastDir(playerid, dir[]) {
- new i;
- for(i = 0; i < sizeof(_lastDir[]); ++i) {
- if(strlen(_lastDir[playerid][i]) == 0) {
- format(_lastDir[playerid][i], 50, "%s", dir);
- break;
- }
- }
- return 1;
- }
- //----------------------------------------------------------------------------------------------------------------------------------------
- forward rmLastDir(playerid, dir[]);
- public rmLastDir(playerid, dir[]) {
- new i;
- for(i = 0; i < sizeof(_lastDir[]); ++i) {
- if(strcmp(_lastDir[playerid][i], dir, true) == 0) {
- format(_lastDir[playerid][i], 50, "");
- break;
- }
- }
- return 1;
- }
- //----------------------------------------------------------------------------------------------------------------------------------------
- stock getLastDir(playerid) {
- new dir[50], i;
- for(i = 0; i < sizeof(_lastDir[]); ++i) {
- if(strlen(_lastDir[playerid][(i + 1)]) == 0 || (i + 1) > sizeof(_lastDir[])) {
- format(dir, sizeof(dir), "%s", _lastDir[playerid][i]);
- break;
- }
- }
- return dir;
- }
- //----------------------------------------------------------------------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement