Выполнение функции перед сменой карты

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Добрый день.

Потребовалось выполнение некоторых функций перед сменой карты.
Т.е. нужно выполнить функцию перед тем, как сменится карта.
Как отловить смену карты?
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
И тут я встал в ступор...
Как мне сохранить в такой функции данные для каждого игрока? :D

Будет ли такой вариант кода правильным?
PHP:
public OnMapEnd()
{
	decl String:sAuth[32];
	for (new client=1; client<=GetMaxClients(); client++ && !IsFakeClient(client))
	{
		GetClientAuthString(client, sAuth, sizeof(sAuth) - 1);
		new String:pName[256];
		GetClientName(client, pName, 256);
		decl String:query[256];
		Format(query, sizeof(query), "INSERT OR REPLACE INTO users('Steam', 'Nick', 'Level', 'XP', 'Kills', 'Deaths', 'Credits') VALUES ('%s', '%s', %d, %d, %d, %d, %d);", sAuth, pName, Player[pLevel][client], Player[pXP][client], Player[pKills][client], Player[pDeaths][client], Player[pCredits][client]);
		SQL_TQuery(db, SQL_SelectPlayerCallback, query, 0);
	}
}
 

Primo

типа серьёзный тип
Сообщения
1,532
Реакции
759
Попробовал, но не сохраняет при смене карты...

PHP:
	HookEvent("player_disconnect", ClientDisconnect);

PHP:
public ClientDisconnect(Handle:event, const String:name[], bool:dontBroadcast)
{
	decl String:sAuth[32];
	new client = GetClientOfUserId(GetEventInt(event, "userid"));
	GetClientAuthString(client, sAuth, sizeof(sAuth) - 1);
	if(0 < client <= MaxClients && !IsFakeClient(client))
	{

		new String:pName[256];
		GetClientName(client, pName, 256);
		decl String:query[256];
		Format(query, sizeof(query), "INSERT OR REPLACE INTO users('Steam', 'Nick', 'Level', 'XP', 'Kills', 'Deaths', 'Credits') VALUES ('%s', '%s', %d, %d, %d, %d, %d);", sAuth, pName, Player[pLevel][client], Player[pXP][client], Player[pKills][client], Player[pDeaths][client], Player[pCredits][client]);
		SQL_TQuery(db, SQL_SelectPlayerCallback, query, 0);
	}
}
 
Сверху Снизу