Страница 20 от 44

OciXCrom's Rank System [XP|Levels|Ranks]

Публикувано на: 01 Дек 2018, 17:27
от OciXCrom
Промени името на файла където се запазва XP-то (настройката VAULT_NAME в конфигурационния файл).

OciXCrom's Rank System [XP|Levels|Ranks]

Публикувано на: 01 Дек 2018, 22:59
от viewsonic
благодаря !!!

OciXCrom's Rank System [XP|Levels|Ranks]

Публикувано на: 04 Дек 2018, 15:25
от mar1anx
I have a problem with save xp on name.

I change map i have level 0.

I change the vault_name, is save xp only if you type retry in console and after change map.


EDIT :

I have solved, I changed amxmodx

OciXCrom's Rank System [XP|Levels|Ranks]

Публикувано на: 05 Дек 2018, 13:44
от OciXCrom
mar1anx написа: 04 Дек 2018, 15:25 I have a problem with save xp on name.

I change map i have level 0.

I change the vault_name, is save xp only if you type retry in console and after change map.


EDIT :

I have solved, I changed amxmodx
Can you please tell me how you solved so I can work on improving the plugin? Which AMXX version were you using when the bug occured and which one fixed it?

OciXCrom's Rank System [XP|Levels|Ranks]

Публикувано на: 06 Дек 2018, 06:48
от mar1anx
amxx 1.8.3 last build - problem with save
amxx 1.9 last build - solved


EDIT: I think it was not from amxmodx I think it was from the nvault module

OciXCrom's Rank System [XP|Levels|Ranks]

Публикувано на: 12 Дек 2018, 22:18
от OciXCrom
Изображение
  • Добавена е MySQL поддръжка. Вече можете да ползвате MySQL за запазване на XP-то, вместо nVault.
  • При неуспешна връзка с MySQL сървъра, плъгинът автоматично ще се прехвърли да ползва nVault за запазване на XP-то, вместо напълно да спре да работи.
  • За да ъпдетйнете от версия 2.7.1 до най-новата версия 3.0 без да загубите настройките в RankSystem.ini, заместете всички останали файлове, а в конфигурационния файл добавете следните неща в раздела [Settings] под настройката SAVE_TYPE:

    Код за потвърждение: Избери целия код

    # If set to 1, player XP will be saved and loaded using MySQL rather than nVault.
    # If the MySQL connection fails, the plugin will automatically switch to using nVault.
    USE_MYSQL = 0
    
    # SQL information to use if USE_MYSQL is set to 1.
    SQL_HOST = 127.0.0.1
    SQL_USER = root
    SQL_PASSWORD = 
    SQL_DATABASE = amx
    SQL_TABLE = CRXRanks
  • Сложете настройката USE_MYSQL на 1 и настройте си данните за да ползвате MySQL опцията.
  • Интересна идея: можете да ползвате същите MySQL данни в повече от един сървър за играчите да имат същото XP във всички налични сървъри.
Благодаря на HueHue за написването на примерния SQL код който ползвах в плъгина.

OciXCrom's Rank System [XP|Levels|Ranks]

Публикувано на: 13 Дек 2018, 00:22
от mar1anx
Can you make a plugin to transfer from nvault in mysql ?
Like this

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <sqlx>

new g_host, g_user, g_pass, g_db;
new Host[64], User[32], Pass[32], DB[128];
new Handle:g_SQLTuple, Handle:SqlConnection;
new g_error[512], errorcode;
new reg_file[256], text[128], name[32], pass[34], status[11], query[512], counter = 0;

public plugin_init()
{
	register_plugin("Register System Data Transferor", "1.0", "m0skVi4a ;]")

	g_host = get_cvar_pointer("rs_host")
	g_user = get_cvar_pointer("rs_user")
	g_pass = get_cvar_pointer("rs_pass")
	g_db = get_cvar_pointer("rs_db")

	register_srvcmd("file_to_mysql", "FileToMYSQL")
	register_srvcmd("mysql_to_file", "MYSQLToFile")

	new configs_dir[64];

	get_localinfo("amxx_configsdir", configs_dir, charsmax(configs_dir))	
	formatex(reg_file, charsmax(reg_file), "%s/regusers.ini", configs_dir)
}

public MYSQLToFile()
{
	server_print("Connecting to MYSQL...")

	get_pcvar_string(g_host, Host, charsmax(Host))
	get_pcvar_string(g_user, User, charsmax(User))
	get_pcvar_string(g_pass, Pass, charsmax(Pass))
	get_pcvar_string(g_db, DB, charsmax(DB))

	g_SQLTuple = SQL_MakeDbTuple(Host, User, Pass, DB)

	SqlConnection = SQL_Connect(g_SQLTuple, errorcode, g_error, charsmax(g_error))

	if(SqlConnection == Empty_Handle) 
	{
		server_print("MYSQL connection failed!")
		server_print(g_error)
		return PLUGIN_HANDLED
	}
	else
	{
		server_print("MYSQL connection succesful!")
	}

	server_print("Checking Register System file...")

	if(!file_exists(reg_file))
	{
		server_print("Register System file -  %s   not found! Creating new...", reg_file)
		write_file(reg_file,";Register System file^n;Modifying may cause the clients to can not Login!^n^n")
	}
	else
	{
		server_print("Register System file found!")
	}

	server_print("Starting to transfer!")

	formatex(query, charsmax(query), "SELECT * FROM `registersystem`;")
	SQL_ThreadQuery(g_SQLTuple, "QuerySelectData", query)

	return PLUGIN_CONTINUE	
}

public QuerySelectData(FailState, Handle:Query, error[], errorcode, data[], datasize, Float:fQueueTime)
{ 
	if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
	{
		server_print(error)
		return
	}
	else
	{
		new col_name = SQL_FieldNameToNum(Query, "Name")
		new col_pass = SQL_FieldNameToNum(Query, "Password")
		new col_status = SQL_FieldNameToNum(Query, "Status")

		new file_pointer = fopen(reg_file, "a")

		counter = 0

		while(SQL_MoreResults(Query)) 
		{
			SQL_ReadResult(Query, col_name, name, charsmax(name))
			SQL_ReadResult(Query, col_pass, pass, charsmax(pass))
			SQL_ReadResult(Query, col_status, status, charsmax(status))

			if(!equal(status, "LOGGED_IN"))
			{
				status = "LOGGED_OUT"
			}			

			formatex(text, charsmax(text), "^n^"%s^" ^"%s^" ^"%s^"", name, pass, status)
			fprintf(file_pointer, text)
			counter++
			server_print("%d. Transfering  %s  's registration, password hash: %s  Status: %s", counter, name, pass, status)
			SQL_NextRow(Query)
		}
		fclose(file_pointer)
		server_print("Transfer finished!  %d registration were transferred!", counter)
	}
}

public FileToMYSQL()
{
	server_print("Checking Register System file...")

	if(!file_exists(reg_file))
	{
		server_print("Register System file -  %s   not find!", reg_file)
		return PLUGIN_HANDLED
	}
	else
	{
		server_print("Register System file found!")
	}

	server_print("Connecting to MYSQL...")

	get_pcvar_string(g_host, Host, charsmax(Host))
	get_pcvar_string(g_user, User, charsmax(User))
	get_pcvar_string(g_pass, Pass, charsmax(Pass))
	get_pcvar_string(g_db, DB, charsmax(DB))

	g_SQLTuple = SQL_MakeDbTuple(Host, User, Pass, DB)

	SqlConnection = SQL_Connect(g_SQLTuple, errorcode, g_error, charsmax(g_error))

	if(SqlConnection == Empty_Handle) 
	{
		server_print("MYSQL connection failed!")
		server_print(g_error)
		return PLUGIN_HANDLED
	}
	else
	{
		server_print("MYSQL connection succesful!")
	}

	new Handle:Query

	Query = SQL_PrepareQuery(SqlConnection, "CREATE TABLE IF NOT EXISTS registersystem (Name VARCHAR(32), Password VARCHAR(34), Status VARCHAR(11))")

	if(!SQL_Execute(Query)) 
	{
		SQL_QueryError(Query, g_error, charsmax(g_error))
		server_print(g_error)
	}

	SQL_FreeHandle(Query)
	SQL_FreeHandle(SqlConnection)

	server_print("Starting to transfer!")

	new length, line = 0;
	counter = 0

	while(read_file(reg_file, line++ , text, charsmax(text), length))
	{
		if(!text[0] || text[0] == '^n' || text[0] == ';')
			continue

		parse(text, name, charsmax(name), pass, charsmax(pass), status, charsmax(status))

		if(!equal(status, "LOGGED_IN"))
		{
			status = "LOGGED_OUT"
		}

		formatex(query, charsmax(query), "INSERT INTO `registersystem` (`Name`, `Password`, `Status`) VALUES (^"%s^", ^"%s^", ^"%s^");", name, pass, status)
		SQL_ThreadQuery(g_SQLTuple, "QuerySetData", query)
		counter++
		server_print("%d. Transfering  %s  's registration, password hash: %s  Status: %s", counter, name, pass, status)
	}

	server_print("Transfer finished!  %d registration were transferred!", counter)

	return PLUGIN_CONTINUE
}

public QuerySetData(FailState, Handle:Query, error[],errcode, data[], datasize)
{
	if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
	{
		server_print(error)
		return
	}
}

OciXCrom's Rank System [XP|Levels|Ranks]

Публикувано на: 14 Дек 2018, 14:34
от OciXCrom
I'll try to make a transfer plugin soon.

OciXCrom's Rank System [XP|Levels|Ranks]

Публикувано на: 14 Дек 2018, 14:55
от esc-Fiv3
Updated? It works good the last one too. What is the difference between 2.7 to 3.0? Should I update it too? It works great the last one and I have amxx 1.8.2

OciXCrom's Rank System [XP|Levels|Ranks]

Публикувано на: 14 Дек 2018, 14:59
от OciXCrom
Look at the changelog above. In 3.0 you can use MySQL to save the XP - this was a highly requested feature. In 2.7 you can only use nVault which doesn't allow any actions outside the server. With MySQL you can connect the XP with your website for example.