Jump to content

Recommended Posts

Posted (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 by RedGun
  • Like 1
  • 3 months later...
  • 3 weeks later...
Posted
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.

Posted
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

Posted
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. 🙂

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

moduri samp