Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Gammix's Vars Include (g_vars.inc)
- * This is a type of new generation Database system!
- * No SQL knowledge required, its even more easier than INI files but fastes (SQLITE)
- Author: (creator)
- * Gammix
- (c) Copyright 2015
- * This file is provided as is (no warranties).
- */
- /*
- FUNCTIONS:
- native Var_SetString(varname[], value[]);
- native Var_SetInt(varname[], value);
- native Var_SetFloat(varname[], Float:value);
- native Var_GetString(varname[], value[], len = sizeof(value));
- native Var_GetInt(varname[]);
- native Float:Var_GetFloat(varname[]);
- native Var_Delete(varname[]);
- */
- #define DATABASE_NAME "g_vars.db"
- #define RECORD_NAME "GlobalVars"
- #define MAX_VAR_VALUE 128
- #define TYPE_STRING 0
- #define TYPE_INTEGER 1
- #define TYPE_FLOAT 2
- static DB:gDatabase;
- static DBResult:gResult;
- static bool:gActivated;
- //Note: if you use this in a filterscript, please define "FILTERSCRIPT" in your script
- #if defined FILTERSCRIPT// if used in a filterscript
- public OnFilterScriptInit()
- {
- gDatabase = db_open(DATABASE_NAME);
- gResult = db_query( gDatabase,
- "CREATE TABLE IF NOT EXISTS `"RECORD_NAME"` \
- (`name` VARCHAR(24) COLLATE NOCASE, \
- `value` VARCHAR("#MAX_VAR_VALUE"), \
- `type` INTEGER DEFAULT -1 NOT NULL)"
- );
- db_free_result(gResult);
- if(gDatabase == DB:0)
- {
- printf("Failed to open a connection to \"%s\".", DATABASE_NAME);
- gActivated = false;
- }
- else gActivated = true;
- return CallLocalFunction("VAR_OnFilterScriptInit", "");
- }
- #if defined _ALS_OnFilterScriptInit
- #undef OnFilterScriptInit
- #else
- #define _ALS_OnFilterScriptInit
- #endif
- #define OnFilterScriptInit VAR_OnFilterScriptInit
- forward VAR_OnFilterScriptInit();
- public OnFilterScriptExit()
- {
- db_close(gDatabase);
- return CallLocalFunction("VAR_OnFilterScriptExit", "");
- }
- #if defined _ALS_OnFilterScriptExit
- #undef OnFilterScriptExit
- #else
- #define _ALS_OnFilterScriptExit
- #endif
- #define OnFilterScriptExit VAR_OnFilterScriptExit
- forward VAR_OnFilterScriptExit();
- #else// if used in a gamemode
- public OnGameModeInit()
- {
- gDatabase = db_open(DATABASE_NAME);
- gResult = db_query( gDatabase,
- "CREATE TABLE IF NOT EXISTS `"RECORD_NAME"` \
- (`name` VARCHAR(24) COLLATE NOCASE, \
- `value` VARCHAR("#MAX_VAR_VALUE"), \
- `type` INTEGER DEFAULT 0 NOT NULL)"
- );
- db_free_result(gResult);
- if(gDatabase == DB:0)
- {
- printf("Failed to open a connection to \"%s\".", DATABASE_NAME);
- gActivated = false;
- }
- else gActivated = true;
- return CallLocalFunction("VAR_OnGameModeInit", "");
- }
- #if defined _ALS_OnGameModeInit
- #undef OnGameModeInit
- #else
- #define _ALS_OnGameModeInit
- #endif
- #define OnGameModeInit VAR_OnGameModeInit
- forward VAR_OnGameModeInit();
- public OnGameModeExit()
- {
- db_close(gDatabase);
- return CallLocalFunction("VAR_OnGameModeExit", "");
- }
- #if defined _ALS_OnGameModeExit
- #undef OnGameModeExit
- #else
- #define _ALS_OnGameModeExit
- #endif
- #define OnGameModeExit VAR_OnGameModeExit
- forward VAR_OnGameModeExit();
- #endif
- //internal functions
- stock static Var_Escape(str[])
- {
- new
- ret[80* 2],
- ch,
- i,
- j;
- while ((ch = str[i++]) && j < sizeof (ret))
- {
- if (ch == '\'')
- {
- if (j < sizeof (ret) - 2)
- {
- ret[j++] = '\'';
- ret[j++] = '\'';
- }
- }
- else if (j < sizeof (ret))
- {
- ret[j++] = ch;
- }
- else
- {
- j++;
- }
- }
- ret[sizeof (ret) - 1] = '\0';
- return ret;
- }
- stock static Var_IsValidName(varname[])
- {
- for(new i; varname[i] != EOS; ++i)
- {
- switch(varname[i])
- {
- case '0'..'9', 'A'..'Z', 'a'..'z', '@', '!', '$', '&', '*': continue;
- default: return false;
- }
- }
- return true;
- }
- stock static Var_Set(varname[], value[], type)
- {
- new gQuery[256];
- format( gQuery,
- sizeof(gQuery),
- "SELECT `name` FROM `%s` WHERE `name` = '%s' COLLATE NOCASE",
- RECORD_NAME, Var_Escape(varname)
- );
- gResult = db_query(gDatabase, gQuery);
- if(! db_num_rows(gResult))
- {
- format( gQuery,
- sizeof(gQuery),
- "INSERT INTO `%s` (`name`, `value`, `type`) VALUES ('%s', '%s', '%i')",
- RECORD_NAME, Var_Escape(varname), Var_Escape(value), type
- );
- gResult = db_query(gDatabase, gQuery);
- if(db_num_rows(gResult))
- {
- db_free_result(gResult);
- return true;
- }
- }
- else
- {
- new _string[5];
- db_get_field_assoc(gResult, "type", _string, sizeof(_string));
- new _type;
- _type = strval(_string);
- if(_type == type)
- {
- format( gQuery,
- sizeof(gQuery),
- "UPDATE `%s` SET `value` = '%s' WHERE `name` = '%s'",
- RECORD_NAME, Var_Escape(value), Var_Escape(varname)
- );
- gResult = db_query(gDatabase, gQuery);
- if(! db_num_rows(gResult))
- {
- db_free_result(gResult);
- return true;
- }
- }
- }
- db_free_result(gResult);
- return false;
- }
- stock static Var_Get(varname[], value[], type, len = sizeof(value))
- {
- new gQuery[256];
- format( gQuery,
- sizeof(gQuery),
- "SELECT `name` FROM `%s` WHERE `name` = '%s' COLLATE NOCASE",
- RECORD_NAME, Var_Escape(varname)
- );
- gResult = db_query(gDatabase, gQuery);
- if(! db_num_rows(gResult))
- {
- db_free_result(gResult);
- format(value, len, "");
- return false;
- }
- else
- {
- new _string[5];
- db_get_field_assoc(gResult, "type", _string, sizeof(_string));
- new _type;
- _type = strval(_string);
- if(_type == type)
- {
- db_free_result(gResult);
- format( gQuery,
- sizeof(gQuery),
- "SELECT `value` FROM `%s` WHERE `name` = '%s' COLLATE NOCASE",
- RECORD_NAME, Var_Escape(varname)
- );
- gResult = db_query(gDatabase, gQuery);
- db_get_field_assoc(gResult, "value", value, len);
- db_free_result(gResult);
- return true;
- }
- db_free_result(gResult);
- }
- return false;
- }
- stock static Var_IsNumeric(str[])
- {
- new ch, i;
- while ((ch = str[i++])) if (!('0' <= ch <= '9')) return false;
- return true;
- }
- stock static Var_IsFloat(str[])
- {
- new l = strlen(str);
- new dcount = 0;
- for(new i=0; i<l; i++)
- {
- if(str[i] == '.')
- {
- if(i == 0 || i == l-1) return false;
- else
- {
- dcount++;
- }
- }
- if((str[i] > '9' || str[i] < '0') && str[i] != '+' && str[i] != '-' && str[i] != '.') return false;
- if(str[i] == '+' || str[i] == '-')
- {
- if(i != 0 || l == 1) return false;
- }
- }
- if(dcount == 0 || dcount > 1) return false;
- return true;
- }
- //main functions
- stock Var_SetString(varname[], value[])
- {
- if(! gActivated) return false;
- if(strlen(value) > MAX_VAR_VALUE) return false;
- if(! Var_IsValidName(varname)) return false;
- return Var_Set(varname, value, TYPE_STRING);
- }
- stock Var_SetInt(varname[], value)
- {
- if(! gActivated) return false;
- if(value > MAX_VAR_VALUE) return false;
- if(! Var_IsValidName(varname)) return false;
- new gQuery[256];
- format(gQuery, sizeof(gQuery), "%i", value);
- return Var_Set(varname, gQuery, TYPE_INTEGER);
- }
- stock Var_SetFloat(varname[], Float:value)
- {
- if(! gActivated) return false;
- if(value > float(MAX_VAR_VALUE)) return false;
- if(! Var_IsValidName(varname)) return false;
- new gQuery[256];
- format(gQuery, sizeof(gQuery), "%f", value);
- return Var_Set(varname, gQuery, TYPE_FLOAT);
- }
- stock Var_GetString(varname[], value[], len = sizeof(value))
- {
- if(! gActivated) return false;
- if(! Var_IsValidName(varname)) return false;
- return Var_Get(varname, value, TYPE_STRING, len);
- }
- stock Var_GetInt(varname[])
- {
- if(! gActivated) return -1;
- if(! Var_IsValidName(varname)) return -1;
- new value[MAX_VAR_VALUE];
- Var_Get(varname, value, TYPE_INTEGER, sizeof(value));
- if(Var_IsNumeric(value))
- {
- return strval(value);
- }
- return -1;
- }
- stock Float:Var_GetFloat(varname[])
- {
- if(! gActivated) return -1000.0;
- if(! Var_IsValidName(varname)) return -1000.0;
- new value[MAX_VAR_VALUE];
- Var_Get(varname, value, TYPE_FLOAT, sizeof(value));
- if(Var_IsFloat(value))
- {
- return floatstr(value);
- }
- return -1000.0;
- }
- stock Var_Delete(varname[])
- {
- if(! Var_IsValidName(varname)) return false;
- new gQuery[256];
- format( gQuery,
- sizeof(gQuery),
- "DELETE FROM `%s` WHERE `name` = '%s'",
- RECORD_NAME, Var_Escape(varname)
- );
- gResult = db_query(gDatabase, gQuery);
- if(db_num_rows(gResult))
- {
- db_free_result(gResult);
- return true;
- }
- return false;
- }
- //
Advertisement
Add Comment
Please, Sign In to add comment