RedGun Posted July 6, 2019 Posted July 6, 2019 (edited) In principiu am facut un sistem de svar ca n-aveam ce face. Este asemanator bugged (adica poate fi folosit ca cel de pe bugged). Credite: Shad0w. Momentan are doar 2 tipuri de salvari, Folosire: Pratic pentru un giftbox (sa puteti folosi /getgift) ati putea face asta: Codul in gamemode: CMD:getgift(playerid) { if(GetSavedVarInt("giftbox_enabled") > 0) { SendClientMessage(playerid, -1, "Ai primit $69."); } else { SendClientMessage(playerid, -1, "The giftbox is not enabled."); } return 1; } Practic va trebuie sa creati un svar, /setsavedvar giftbox_enabled 0 1 (aici veti da valoarea 0 pentru int, si 1 pentru char). Acum svar-ul va fi activ, il puteti verifica si folosind /svars sau direct /getgift. Folositi /deletesavedvar pentru a sterge un svar. Cod: Spoiler // uitasem de asta #define INVALID_DATA_ID INVALID_PLAYER_ID #include <YSI\y_hooks> #define MAX_VARIABLES 100 // token #define _INVALID_TOKEN "" // no variable set #define INVALID_VALUE -INVALID_DATA_ID // macro? #define GetServerVar GetSavedVarInt // types #define VAR_TYPE_INT 0 #define VAR_TYPE_CHAR 1 // aici e o lista cu ce optiuni nu are voie sa modifice (puteti sa adaugati ce vreti voi aici) new not_remove[][] = { "jail_free", "weekly_id", "weekly_last_update", "block_setsavedvar", "block_deletesavedvar", "block_quit", // "block_q" // }; enum SavedVar { var_type, // 0 - int, 1 - char var_name[100], var_value[100], bool: var_pending }; new SavedVariables[MAX_VARIABLES][SavedVar]; new Iterator: SavedVariables<MAX_VARIABLES>; stock GetSavedVarInt(name[]) { foreach(new i : SavedVariables) { if(!strcmp(SavedVariables[i][var_name], name, true) && SavedVariables[i][var_type] == 0) { return strval(SavedVariables[i][var_value]); } } return 0; } stock GetSavedVarString(name[]) { new _token[100]; format(_token, sizeof(_token), _INVALID_TOKEN); foreach(new i : SavedVariables) { if(!strcmp(SavedVariables[i][var_name], name, true) && SavedVariables[i][var_type] == 1) { format(_token, sizeof(_token), "%s", SavedVariables[i][var_value]); break; } } return _token; } CMD:svars(playerid) { check_owner SS(playerid, COLOR_WHITE, "--- Saved Vars list ---"); foreach(new i : SavedVariables) { S(playerid, COLOR_WHITE, "%s = %s (pending %d)", "", SavedVariables[i][var_name], SavedVariables[i][var_value], _:SavedVariables[i][var_pending]); } SS(playerid, COLOR_WHITE, "Help: /SetSavedVar, /DeleteSavedVar"); return 1; } stock LoadSavedVariables() { new query[200]; format(query, sizeof(query), "SELECT * FROM `savedvar` ORDER BY id ASC LIMIT %d", MAX_VARIABLES); // mysql_tquery(db, query, "OnSavedVarLoad", ""); } CB:OnSavedVarLoad() { new rows, fields; cache_get_data(rows, fields); if(rows) { new handle_text[100]; for(new row = 0; row < MAX_VARIABLES; row++) { if(row < rows) { cache_get_row(row, 1, SavedVariables[row][var_name], db, 100); cache_get_row(row, 2, handle_text, db, 100); if(IsNumeric(handle_text)) { SavedVariables[row][var_type] = 0; format(SavedVariables[row][var_value], 100, "%d", strval(handle_text)); } else { SavedVariables[row][var_type] = 1; format(SavedVariables[row][var_value], 100, "%s", handle_text); } Iter_Add(SavedVariables, row); } else { format(SavedVariables[row][var_value], 100, ""); } SavedVariables[row][var_pending] = false; } } printf("[LOADING] %d saved variables loaded.", rows); } stock SetSavedVarInt(name[], value) { foreach(new i : SavedVariables) { if(!strcmp(SavedVariables[i][var_name], name, true) && SavedVariables[i][var_type] == VAR_TYPE_INT) { format(SavedVariables[i][var_value], 100, "%d", value); SaveSavedVars(); return true; } } return false; } stock SetSavedVarString(name[], value[]) { foreach(new i : SavedVariables) { if(!strcmp(SavedVariables[i][var_name], name, true) && SavedVariables[i][var_type] == VAR_TYPE_CHAR) { format(SavedVariables[i][var_value], 100, "%s", value); SaveSavedVars(); return true; } } return false; } CMD:setsavedvar(playerid, params[]) { check_owner new name[100], value[100]; new type = 0; if(sscanf(params, "s[100]ds[100]", name, type, value)) { return SS(playerid, COLOR_LGREEN, "/SetSavedVar [var. name] [TYPE: 0=int, 1=char] [var. value]"); } if(type == 0 && !IsNumeric(value)) return SS(playerid, COLOR_LGREEN, "Ai ales integer. Aici poti folosi doar cifre. Ex: 0, 1, 2. Pentru litere/cuvinte alege char (2)."); if(type == 1 && IsNumeric(value)) { SS(playerid, COLOR_LGREEN, "Ai ales char. Aici poti folosi doar cuvinte/litere. Ex: comanda dezactivata."); SS(playerid, COLOR_LGREEN, "Pentru cifre/numere alege int (1)."); return 1; } for(new t = 0; t < strlen(name); t++) { name[t] = tolower(name[t]); } for(new n = 0; n < sizeof(not_remove); n++) { if(!strcmp(not_remove[n], name, true)) { return SS(playerid, COLOR_LGREEN, "You are not allowed to edit, create or delete this variable."); } } new message[200]; if(GetSavedVarActive(name)) { if(type != GetSavedVarType(name)) { return S(playerid, COLOR_LGREEN, "This variable doesn't accept this type. TYPE MUST BE %d.", "", GetSavedVarType(name)); } if(type==VAR_TYPE_INT) { if(GetSavedVarInt(name) == strval(value)) return SS(playerid, COLOR_LGREEN, "This value is already set for the current variable."); } else { if(!strcmp(GetSavedVarString(name), value, true)) return SS(playerid, COLOR_LGREEN, "This value is already set for the current variable."); } if(type==VAR_TYPE_INT) format(message, sizeof(message), "AdmCmd: %s created variable (%s) with value (%d). Old: %d", A(playerid), name, strval(value), GetSavedVarInt(name)); else format(message, sizeof(message), "AdmCmd: %s set variable (%s) with value (%s). Old: %s", A(playerid), name, value, GetSavedVarString(name)); } else{ if(type==VAR_TYPE_INT) format(message, sizeof(message), "AdmCmd: %s created variable (%s) with value (%d).", A(playerid), name, strval(value)); else format(message, sizeof(message), "AdmCmd: %s set variable (%s) with value (%s).", A(playerid), name, value); } submitToAdmins(message, COLOR_INFO); Adminlog(message); if(!GetSavedVarActive(name)) // not set. { new i = Iter_Free(SavedVariables); if(i != -1) { format(SavedVariables[i][var_name], 100, "%s", name); if(type==VAR_TYPE_INT) { format(SavedVariables[i][var_value], 100, "%d", strval(value)); SavedVariables[i][var_type] = 0; } else{ format(SavedVariables[i][var_value], 100, "%s", value); SavedVariables[i][var_type] = 1; } SavedVariables[i][var_pending] = true; Iter_Add(SavedVariables, i); } else { SA(COLOR_RED, "[ERROR] No more variables can't be stored. Limit reached..."); SA(COLOR_RED, "[ERROR] Chemati scripterul !!!!!!!!!!!!"); } } else { foreach(new i : SavedVariables) { if(!strcmp(SavedVariables[i][var_name], name, true)) { format(SavedVariables[i][var_value], 100, "%s", value); S(playerid, COLOR_LGREEN, "Modify old value...to %s", "", value); break; } } } SaveSavedVars(); return 1; } CMD:deletesavedvar(playerid, params[]) { check_owner new name[100]; if(sscanf(params, "s[100]d", name)) { return SS(playerid, COLOR_LGREEN, "/DeleteSavedVar [var. name]"); } for(new t = 0; t < strlen(name); t++) { name[t] = tolower(name[t]); } if(!GetSavedVarActive(name)) return SS(playerid, COLOR_LGREEN, "This variable is not set."); else { for(new n = 0; n < sizeof(not_remove); n++) { if(!strcmp(not_remove[n], name, true)) { return SS(playerid, COLOR_LGREEN, "You are not allowed to edit, create or delete this variable."); } } } new message[200]; format(message, sizeof(message), "AdmCmd: %s deleted variable (%s) with value (%s).", A(playerid), name, SavedVariables[GetSavedVarID(name)][var_value]); submitToAdmins(message, COLOR_INFO); Adminlog(message); new query[200]; new handle_text[128]; foreach(new i : SavedVariables) { if(!strcmp(SavedVariables[i][var_name], name, true)) { SavedVariables[i][var_name][0] = (EOS); format(SavedVariables[i][var_value], 100, ""); SavedVariables[i][var_pending] = false; mysql_escape_string(name, handle_text); format(query, sizeof(query), "DELETE FROM `savedvar` WHERE `name` = '%s'", handle_text); mysql_tquery(db, query, "OnSavedVarDeleted", "ds", playerid, name); SS(playerid, COLOR_RED, "I: Removing.."); Iter_SafeRemove(SavedVariables, i, i); } } return 1; } CB:OnSavedVarDeleted(playerid, name[]) { if(cache_affected_rows()) { S(playerid, COLOR_RED, "M: Removed (%s var) succesfully.", "", name); SaveSavedVars(); } return 1; } stock GetSavedVarActive(name[]) { foreach(new i : SavedVariables) { if(!strcmp(SavedVariables[i][var_name], name, true)) { return true; } } return false; } stock GetSavedVarType(name[]) { foreach(new i : SavedVariables) { if(!strcmp(SavedVariables[i][var_name], name, true)) { return SavedVariables[i][var_type]; } } return -1; } stock GetSavedVarID(name[]) { foreach(new i : SavedVariables) { if(!strcmp(SavedVariables[i][var_name], name, true)) { return i; } } return -1; } stock SaveSavedVars() { new query[200]; //new handle_text[100]; new pending = 0; new not_pending = 0; // save pending foreach(new i : SavedVariables) { if(SavedVariables[i][var_pending] == true) { mysql_format(db, query, sizeof(query), "INSERT INTO `savedvar` SET `name` = '%e', `value` = '%e';", SavedVariables[i][var_name], SavedVariables[i][var_value]); mysql_tquery(db, query, "", ""); pending ++; } } // save not in pending (no modified) foreach(new i : SavedVariables) { if(SavedVariables[i][var_pending] == false) { mysql_format(db, query, sizeof(query), "UPDATE `savedvar` SET `value` = '%e' WHERE `name` = '%e';", SavedVariables[i][var_value], SavedVariables[i][var_name]); mysql_tquery(db, query, "", ""); not_pending ++; } SavedVariables[i][var_pending] = false; } debug_log("savedvar", "%d variables saved | pending: %d | not pending: %d", Iter_Count(SavedVariables), pending, not_pending); } Tabela baza de date: Spoiler /* Direct o interogare */ CREATE TABLE `savedvar` ( `id` int(11) NOT NULL, `name` varchar(128) NOT NULL DEFAULT '', `value` varchar(128) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=latin1; ALTER TABLE `savedvar` ADD PRIMARY KEY (`id`); Daca nu stiti ceva, puteti sa lasati un reply :). Edited July 6, 2019 by RedGun 1 Quote
ReloadKK Posted July 8, 2019 Posted July 8, 2019 el are 2 sisteme de svar, unul care este in mysql cel care l-ai facut si tu si unu care e in gm si il foloseste pt getgift din ce stiu 1 Quote
ReloadK Posted October 24, 2019 Posted October 24, 2019 asta nu se poate numi tutorial, pentru ca unii nu au functia CB: si cel mai precis o sa dea eroare... Quote
RedGun Posted November 17, 2019 Author Posted November 17, 2019 On 10/24/2019 at 5:36 PM, ReloadK said: asta nu se poate numi tutorial, pentru ca unii nu au functia CB: si cel mai precis o sa dea eroare... Nu e tutorial. E un simplu sistem pe care l-am facut cand n-aveam ce face. Quote
ReloadK Posted November 19, 2019 Posted November 19, 2019 On 11/17/2019 at 8:10 PM, RedGun said: Nu e tutorial. E un simplu sistem pe care l-am facut cand n-aveam ce face. Indiferent, daca X ia acest sistem o sa ii dea eroare ca nu are definita functia CB Quote
RedGun Posted November 19, 2019 Author Posted November 19, 2019 5 hours ago, ReloadK said: Indiferent, daca X ia acest sistem o sa ii dea eroare ca nu are definita functia CB Daca are putina experienta, o poate rezolva, daca nu, poate lasa reply si il voi ajuta. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.