[EXTENSION] SteamWorks - получение SteamID владельца при использовании Family Sharing

KorDen

Atra esterní ono thelduin!
Сообщения
2,187
Реакции
1,425
Это расширение никак не связано со SteamTools!

WTF?
Не так давно Valve добавили в Steam новую возможность - Steam Family Sharing, позволяющий делиться библиотекой игр с другими людьми. Аккаунты с VAC-баном не могут им воспользоваться.
Однако это ввело довольно серьезную проблему для администраторов - читер может зайти с другого аккаунта, поделившись библиотекой основного. Появились даже вот такие группы.
После обсуждения Valve ввели новую функцию в библиотеку авторизации - возможность получения SteamID основного аккаунта.
KyleS с AlliedModders сделал простое расширение, которое добавляет возможность использования этого forward'а в SM.

ВНИМАНИЕ!
Поскольку игры не обновлялись с момента добавления этой возможности, вам нужно будет заменить библиотеки авторизации на обновленные! Старые библиотеки будут выдавать мусор в переменной OwnerID. Библиотеки взяты из последнего Steamworks SDK (126a), их нужно скинуть в папку bin в корне сервера. Помните, что при запуске обновления через SteamCMD они могут замениться стандартными!

Поставил. Что теперь?
Теперь появился новый форвард SW_OnValidateClient(OwnerID, ClientID), который при авторизации (обычно после OnClientAuthorized) передает ID пользователя в формате, аналогичном нативу GetSteamAccountID

Если вы используете SourceBans, то вам нужно добавить в конец плагина sourcebans.sp следующий код:
PHP:
#include <SteamWorks>
public SW_OnValidateClient(OwnerSteamID, ClientSteamID)
{
	if(OwnerSteamID && OwnerSteamID!=ClientSteamID)
	{
		new tmp;
		for(new i = 1; i <= MaxClients; i++)
		{
			if(IsClientConnected(i))
			{
				tmp = GetSteamAccountID(i);
				if(tmp && tmp == ClientSteamID)
				{
					decl String:steamid[32];
					Format(steamid,sizeof(steamid),"STEAM_0:%d:%d",OwnerSteamID%2,OwnerSteamID/2);
					LogMessage("[SB] Checking FamilySharing user %L Owner: %s (OSID: %d, CSID: %d)",i,steamid,OwnerSteamID,ClientSteamID);
					OnClientAuthorized(i,steamid);
					break;
				}
			}
		}
	}
}
Затем скопировать из архива SteamWorks.inc в папку scripting/include и скомпилировать плагин.
PS: плагин работает, но ругается добавление в лог банов..

Оригинал
 

Вложения

SaInT.P

Участник
Сообщения
1,276
Реакции
226
Не качает libraries_linux.zip , пишет нет такой страницы, перезалейте, а я покачто качну с оригинала ;)
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,187
Реакции
1,425

SaInT.P

Участник
Сообщения
1,276
Реакции
226
KorDen, Спасибо что перезалил, но я уже качнул с оригинала под линь)
как я понял, в сб при бане такого игрока будут указано два STeam ID?
и вообще как я понял, допустим, у чувака нет контры, я с ним поделился библеотекой и он может играть в контру?
я чето невкурил))
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,187
Реакции
1,425
SaInT.P, Поясню систему работы Family Sharing.
У твоего друга нет контры. Ты логинишься с его компа своим аккаунтом, утанавливаешь контру, авторизуешь этот комп в настройках. Далее перелогиниваешься в учетку друга, при первом запуске тебе на почту придет запрос на разрешение использования твоей библиотеки с аккаунта друга. Ты подтверждаешь (переходишь по ссылке в письме), и друг может играть.
При этом учти, что дается библиотека. Т.е. одновременно играть в игры нельзя, при этом нельзя в том числе играть и в разные игры. Т.е. грубо говоря все равно что если бы он сидел с твоего акка, однако достижения и статистика идет личная, а не твоя. Если ты зайдешь в какую-то игру, его выкинет через 5 минут, предварительно предупредив.

Если друг, играя в игру с твоей библиотеки сыграет с читом, который детектится VAC-ом, VAC-бан получат оба(!) аккаунта.

Теперь о расширении. Расширение просто передает ID аккаунтов. Текущий вариант изменения SB предполагает только проверку, не забанен ли владелец игры на сервере. Позже думаю допилить функцию бана, чтобы банило владельца.
 
Сверху