From a62aae90c40f6763cf2d67307721817eae7435cb Mon Sep 17 00:00:00 2001 From: Lorenc Pekaj Date: Sun, 3 Feb 2019 21:12:41 +1100 Subject: [PATCH] show changelogs in _changelogs.cfg file --- gamemodes/irresistible/cnr/changelog.pwn | 178 ++++++++++++++------- scriptfiles/changelogs/cnr/_changelogs.cfg | 1 + scriptfiles/changelogs/cnr/v11.50.142.txt | 2 + 3 files changed, 127 insertions(+), 54 deletions(-) create mode 100644 scriptfiles/changelogs/cnr/v11.50.142.txt diff --git a/gamemodes/irresistible/cnr/changelog.pwn b/gamemodes/irresistible/cnr/changelog.pwn index 4521e72..766e988 100644 --- a/gamemodes/irresistible/cnr/changelog.pwn +++ b/gamemodes/irresistible/cnr/changelog.pwn @@ -8,83 +8,153 @@ /* ** Includes ** */ #include < YSI\y_hooks > - #define GetServerVersion(%0) \ - ( "UNKNOWN" ) - #endinput /* ** Error Checking ** */ #if !defined SERVER_CHANGES_DIRECTORY - - + #define GetServerVersion(%0) ( "UNKNOWN" ) #endinput #endif /* ** Definitions ** */ #define CHANGELOG_INDEX_FILE ( SERVER_CHANGES_DIRECTORY # "/_changelogs.cfg" ) +#define DIALOG_CHANGELOGS ( 8372 ) /* ** Commands ** */ -// CMD:changes( playerid, params[ ] ) return cmd_updates( playerid, params ); // Command by Cloudy & Sponyy -// CMD:updates( playerid, params[ ] ) -// { -// new -// File: handle = fopen( SERVER_CHANGES_DIRECTORY # "/updates.txt", io_read ); +CMD:changes( playerid, params[ ] ) return cmd_updates( playerid, params ); +CMD:updates( playerid, params[ ] ) +{ + new + File: handle = fopen( CHANGELOG_INDEX_FILE, io_read ); -// if ( ! handle ) -// return SendError( playerid, "There are no updates to show." ); + if ( ! handle ) + return SendError( playerid, "There are no updates to show." ); -// erase( szNormalString ); -// erase( szHugeString ); + new + changelogs = 0; -// while ( fread( handle, szNormalString ) ) -// { -// new -// find = strfind( szNormalString, "(+)" ); + szHugeString = ""COL_WHITE"Version\t \n"; -// // additions -// if( find != -1 ) -// { -// strins( szNormalString, "{23D96F}added{FFFFFF}\t\t", find + 3 ); -// strdel( szNormalString, find, find + 3); -// } + // read each line in the changelog index file + while ( fread( handle, szNormalString ) ) + { + // remove white spaces + strreplace( szNormalString, "\n", "" ), trimString( szNormalString ); -// // removals -// find = strfind( szNormalString, "(-)" ); -// if( find != -1 ) -// { -// strins( szNormalString, "{D92323}removed{FFFFFF}\t", find + 3 ); -// strdel( szNormalString, find, find + 3 ); -// } + // format string + format( szHugeString, sizeof( szHugeString ), "%s%s\t%s\n", szHugeString, szNormalString, ! changelogs ? ( COL_GREEN # "CURRENT" ) : ( " " ) ); + changelogs ++; + } -// // fixes -// find = strfind( szNormalString, "(*)" ); -// if ( find != -1 ) -// { -// strins( szNormalString, "{D9A823}fixed{FFFFFF}\t\t", find + 3 ); -// strdel( szNormalString, find, find + 3 ); -// } + // list all changelogs + ShowPlayerDialog( playerid, DIALOG_CHANGELOGS, DIALOG_STYLE_TABLIST_HEADERS, "{FFFFFF}Changelogs", szHugeString, "Select", "Close" ); + return 1; +} -// // fixes -// find = strfind( szNormalString, "(/)" ); -// if ( find != -1 ) -// { -// strins( szNormalString, "{c0c0c0}changed{FFFFFF}\t", find + 3 ); -// strdel( szNormalString, find, find + 3 ); -// } +/* ** Hooks ** */ +hook OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] ) +{ + if ( dialogid == DIALOG_CHANGELOGS && response ) + { + new File: handle = fopen( CHANGELOG_INDEX_FILE, io_read ); -// // append -// strcat( szHugeString, szNormalString ); -// } + if ( ! handle ) + return SendError( playerid, "There are no updates to show." ); -// fclose( handle ); -// ShowPlayerDialog( playerid, DIALOG_NULL, DIALOG_STYLE_MSGBOX, sprintf( "{FFFFFF}Recent Updates - %s", GetServerVersion( ) ), szHugeString, "Okay", "" ); -// SendServerMessage( playerid, "You're now viewing the latest changes to the gamemode (version %s).", GetServerVersion( ) ); -// return 1; -// } + new version[ 32 ], x = 0; + + while ( fread( handle, version ) ) + { + if ( x == listitem ) + { + // remove white spaces + strreplace( version, "\n", "" ), trimString( version ); + + // open the single changelog + new File: changelog_handle = fopen( sprintf( SERVER_CHANGES_DIRECTORY # "/%s.txt", version ), io_read ); + + if ( ! changelog_handle ) + return SendError( playerid, "There are no updates to show for this version." ); + + erase( szNormalString ); + erase( szHugeString ); + + while ( fread( changelog_handle, szNormalString ) ) + { + new + find = strfind( szNormalString, "(+)" ); + + // additions + if( find != -1 ) + { + strins( szNormalString, "{23D96F}added{FFFFFF}\t\t", find + 3 ); + strdel( szNormalString, find, find + 3); + } + + // removals + find = strfind( szNormalString, "(-)" ); + if( find != -1 ) + { + strins( szNormalString, "{D92323}removed{FFFFFF}\t", find + 3 ); + strdel( szNormalString, find, find + 3 ); + } + + // fixes + find = strfind( szNormalString, "(*)" ); + if ( find != -1 ) + { + strins( szNormalString, "{D9A823}fixed{FFFFFF}\t\t", find + 3 ); + strdel( szNormalString, find, find + 3 ); + } + + // fixes + find = strfind( szNormalString, "(/)" ); + if ( find != -1 ) + { + strins( szNormalString, "{c0c0c0}changed{FFFFFF}\t", find + 3 ); + strdel( szNormalString, find, find + 3 ); + } + + // append + strcat( szHugeString, szNormalString ); + } + + fclose( changelog_handle ); + + ShowPlayerDialog( playerid, DIALOG_NULL, DIALOG_STYLE_MSGBOX, sprintf( "{FFFFFF}Recent Updates - %s", version ), szHugeString, "Okay", "" ); + SendServerMessage( playerid, "You're now viewing the changes to the gamemode (version %s).", version ); + } + x ++; + } + + fclose( handle ); + } + return 1; +} /* ** Functions ** */ stock GetServerVersion( ) { static version[ 32 ]; - printf( "Version: %s", version ); + + if ( version[ 0 ] == '\0' ) + { + new + File: handle = fopen( CHANGELOG_INDEX_FILE, io_read ); + + if ( handle ) + { + // read the first line of the index file + fread( handle, version ); + + // remove white spaces + strreplace( version, "\n", "" ), trimString( version ); + } + else + { + version = "UNKNOWN"; + } + + fclose( handle ); + } return version; } \ No newline at end of file diff --git a/scriptfiles/changelogs/cnr/_changelogs.cfg b/scriptfiles/changelogs/cnr/_changelogs.cfg index f741be1..08274aa 100644 --- a/scriptfiles/changelogs/cnr/_changelogs.cfg +++ b/scriptfiles/changelogs/cnr/_changelogs.cfg @@ -1 +1,2 @@ +v11.50.142 v11.50.140 \ No newline at end of file diff --git a/scriptfiles/changelogs/cnr/v11.50.142.txt b/scriptfiles/changelogs/cnr/v11.50.142.txt new file mode 100644 index 0000000..c0d5623 --- /dev/null +++ b/scriptfiles/changelogs/cnr/v11.50.142.txt @@ -0,0 +1,2 @@ +(+) You can now use /GPS to find the closest ATM or vehicle with /gps [ATM/VEHICLE]. +(+) /changes will show a list of changelogs from hereon out. \ No newline at end of file