Ця служба дозволяє вашій грі повідомляти про чіти й чітерів до системи
VAC, а також надає набори інструментів системи
ігрових блокувань. Вона активує два незалежних рішення для виявлення і вживання заходів стосовно чітерства у вашій грі:
- Збір повідомлень спільноти про чітерство й надсилання запитів на блокування/відсторонення на основі цієї інформації.
- Надсилання докладної інформації про відомі чітерські програми до системи VAC. Після передання цю інформацію буде використано для автоматичного виявлення і блокування гравців, які використовують відомі чіти.
Для користування цим інтерфейсом вам спершу потрібно підключити підтримку VAC. Це можна зробити на сторінці
конфігурації античіту на панелі адміністрування застосунку.
ПРИМІТКА: це службовий інтерфейс. Методи в цьому інтерфейсі викликаються з параметром
input_json
.
Докладнішу інформацію про використання веб-API Steamworks можна знайти
тут.
ReportPlayerCheating
POST https://partner.steam-api.com/ICheatReportingService/ReportPlayerCheating/v1/
Назва | Тип | Обов’язково | Опис |
key | string | ✔ | Ключ веб-API Steamworks для автентифікації видавця. |
steamid | uint64 | ✔ | SteamID користувача, про чітерство якого надсилається інформація. |
appid | uint32 | ✔ | AppID гри. |
steamidreporter | uint64 | | (Необов’язково) SteamID користувача чи ігрового сервера, що повідомляють про чітерство. |
appdata | uint64 | | (Необов’язково) Дані про вказаний розробником тип чіту для цього застосунку (наприклад: 1 = Aimbot, 2 = Wallhack, 3 = Griefing). |
heuristic | bool | | (Необов’язково) Додаткова інформація про джерело чітерства — евристичний аналіз. |
detection | bool | | (Необов’язково) Додаткова інформація про джерело чітерства — виявлення. |
playerreport | bool | | (Необов’язково) Додаткова інформація про джерело чітерства — скарга користувача. |
noreportid | bool | | (Необов’язково) Не повертає reportid. Потрібно передавати, лише якщо ви не плануєте застосовувати блокування на основі цієї скарги. |
gamemode | uint32 | | (Необов’язково) Додаткова інформація про стан гри — особливий тип ігроладу чи ігрового режиму (0 = універсальний). |
suspicionstarttime | uint32 | | (Необов’язково) Додаткова інформація про час, коли гра вперше запідозрила користувача в чітерстві. Час у форматі UNIX (з 1 січня 1970 року). |
severity | uint32 | | (Необов’язково) Рівень серйозності порушення, про яке повідомляється. Шкала встановлюється розробником. |
ReportPlayerCheating розроблено для збирання скарг спільноти на чітерство, де один гравець може поскаржитися в грі на іншого.
Призначається для ненадійних даних від користувачів у грі (напівнадійні джерела). Внутрішній сервер, який повідомляє дані, має переконатися в авторизації обох сторін, але самі дані розглядаються як ненадійні. Можна використовувати необов’язкові параметри для кодування підозрюваного типу чітерства чи додаткових доказів (ідентифікатор, що вказує матч чи демоверсію для подальшої перевірки).
ПРИМІТКА: для цього виклику необхідний API-ключ видавця. Тому цей API
ОБОВ’ЯЗКОВО викликати із захищеного сервера й за жодних умов не допускати його використання клієнтами!
RequestPlayerGameBan
POST https://partner.steam-api.com/ICheatReportingService/RequestPlayerGameBan/v1/
Назва | Тип | Обов’язково | Опис |
key | string | ✔ | Ключ веб-API Steamworks для автентифікації видавця. |
steamid | uint64 | ✔ | SteamID користувача, про чітерство якого надсилається інформація. |
appid | uint32 | ✔ | AppID гри. |
reportid | uint64 | ✔ | Початково використаний для повідомлення про чітерство reportid. |
cheatdescription | string | ✔ | Опис чітерства. |
duration | uint32 | ✔ | Тривалість запитів на блокування в секундах (значення 0 накладе безкінечне блокування, тривалість зі значенням менше року призведе до тимчасового блокування й не показуватиметься в профілі). |
delayban | bool | ✔ | Відкладає блокування відповідно до стандартних правил блокування. |
flags | uint32 | ✔ | Додаткова інформація про запит на блокування (не використовується). |
Надсилає запит на ігрове блокування певного користувача.
Створено для використання після перевірки випадків із
ICheatReportingService/ReportPlayerCheating та підтвердження чітерства.
ПРИМІТКА: для цього виклику необхідний API-ключ видавця. Тому цей API
ОБОВ’ЯЗКОВО викликати із захищеного сервера й за жодних умов не допускати його використання клієнтами!
RemovePlayerGameBan
POST https://partner.steam-api.com/ICheatReportingService/RemovePlayerGameBan/v1/
Назва | Тип | Обов’язково | Опис |
key | string | ✔ | Ключ веб-API Steamworks для автентифікації видавця. |
steamid | uint64 | ✔ | SteamID користувача, з якого слід зняти ігрове блокування. |
appid | uint32 | ✔ | AppID гри. |
Вилучає ігрове блокування користувача.
Використовується у випадках, коли ігрове блокування виявилося хибним.
ПРИМІТКА: для цього виклику необхідний API-ключ видавця. Тому цей API
ОБОВ’ЯЗКОВО викликати із захищеного сервера й за жодних умов не допускати його використання клієнтами!
GetCheatingReports
GET https://partner.steam-api.com/ICheatReportingService/GetCheatingReports/v1/
Назва | Тип | Обов’язково | Опис |
key | string | ✔ | Ключ веб-API Steamworks для автентифікації видавця. |
appid | uint32 | ✔ | AppID гри. |
timeend | uint32 | ✔ | Кінець часового діапазону. Час у форматі UNIX (з 1 січня 1970 року). |
timebegin | uint32 | ✔ | Початок часового діапазону. Час у форматі UNIX (з 1 січня 1970 року). |
reportidmin | uint64 | ✔ | Мінімальна кількість reportID для включення (можна передати 0 до кінця попереднього періоду повідомлень). |
includereports | bool | ✔ | (Необов’язково) Включає скарги. Якщо значення false, то параметр includebans повинен мати значення true. |
includebans | bool | ✔ | (Необов’язково) Включає запити на блокування. Якщо значення false, то параметр includereports повинен мати значення true. |
steamid | uint64 | ✔ | (Необов’язково) Запит лише цього SteamID. |
Отримує список повідомлень про чітерство для цього застосунку.
Використовується для збирання повідомлень про чітерство, щоби їх можна було перевірити і прийняти рішення.
ПРИМІТКА: для цього виклику необхідний API-ключ видавця. Тому цей API
ОБОВ’ЯЗКОВО викликати із захищеного сервера й за жодних умов не допускати його використання клієнтами!
ReportCheatData
POST https://api.steampowered.com/ICheatReportingService/ReportCheatData/v1/
Назва | Тип | Обов’язково | Опис |
key | string | ✔ | Ключ веб-API Steamworks для автентифікації користувача. |
steamid | uint64 | ✔ | SteamID користувача, що використовує чіт і повідомляє про нього. |
appid | uint32 | ✔ | AppID гри. |
pathandfilename | string | ✔ | Шлях і назва файлу програми-чіта. |
webcheaturl | string | ✔ | URL-адреса, за якою чіт було знайдено та завантажено. |
time_now | uint64 | ✔ | Час локальної системи зараз. 64-бітний системний час Windows. |
time_started | uint64 | ✔ | Час локальної системи в момент початку використання чіта (0, якщо програму ще не запущено). 64-бітний системний час Windows. |
time_stopped | uint64 | ✔ | Час локальної системи в момент припинення роботи чіта (0, якщо програма ще працює). 64-бітний системний час Windows. |
cheatname | string | ✔ | Описова назва чіта. |
game_process_id | uint32 | ✔ | ID процесу запущеної гри. |
cheat_process_id | uint32 | ✔ | ID процесу запущеного чіта. |
cheat_param_1 | uint64 | ✔ | Додаткові дані про чіт. |
cheat_param_2 | uint64 | ✔ | Додаткові дані про чіт. |
Повідомляє дані про чіт. Слід використовувати лише на тестовому акаунті, на якому запушено гру, але не в багатокористувацьких сеансах.
Призначено для повідомлення конкретних чітів до системи VAC. Працює шляхом запуску гри й чіта з подальшим викликом цього веб-API.
ПРИМІТКА: через це тестовий акаунт потрібно використовувати лише на недорогому комп’ютері за межами вашої мережі. Також необхідно використовувати стандартний ключ веб-API, отриманий на сайті
https://steamcommunity.com/developer для цього тестового акаунта, а не ключ веб-API партнера. Після виклику функції систему слід лишити в режимі бездіяльності щонайменше на півгодини, аби VAC міг повністю просканувати систему. Тестовий акаунт буде позначено й не допущено до автентифікації для багатокористувацьких ігор у майбутньому. Через це переконайтеся, що завжди використовуєте тестовий акаунт, призначений виключно для надсилання повідомлень про чіти.
Якщо виклик не повернув результатів, то повідомлення ігнорується.
Приклад виклику:
import sys, os, time
if sys.version_info >= ( 2, 7 ):
print "Виявлено python версії 2.7 або новішої"
else:
print "Потрібен python версії 2.7 або новішої"
exit()
import urllib
import urllib2
import json
g_mapUniverseToWebapiServer = {
'public' : {
'host' : 'api.steampowered.com',
'port_http' : 80,
'port_https' : 443,
},
}
g_bReadied = False
def readyAPIRequest( universe ):
global g_bReadied
proxyneeded = 0
if proxyneeded == 1:
urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler( {"http":"http://proxy.valvesoftware.com:80"} ) ) )
else:
urllib2.install_opener( urllib2.build_opener( urllib2.ProxyHandler({}) ) )
g_bReadied = True
def issueWebAPIRequest( universe=None, interface=None, request=None,
method='GET', protocol='http', version='0001', timeout=120,
**kwargs ):
if not universe or not request or not interface:
raise NameError( 'Need universe, interface, and request' )
if not g_bReadied:
raise RuntimeError( 'call readyAPIRequest first to ensure the proxy is set' )
entry = g_mapUniverseToWebapiServer[ universe ]
server = entry[ 'host' ]
port = entry[ 'port_' + protocol ]
url = '%s://%s:%s/%s/%s/v%s/' % ( protocol, server, port, interface, request, version )
if method == 'GET':
sep = '?'
for kw in kwargs:
url = url + sep + kw + '=' + str( kwargs[ kw ] )
sep = '&'
rf = urllib2.urlopen( url, timeout=timeout )
else:
rf = urllib2.urlopen( url, urllib.urlencode( kwargs ), timeout=timeout )
return json.load( rf )
def sendcheatreport():
readyAPIRequest( 'public' )
print "Current time is ",int(time.time())
steamid = 0
key = ''
gameappid = 0
cheatprocid = 0
timecheatran = 0
cheatterminated = 0
timecheatstopped = 0
if steamid == 0:
steamid = raw_input( 'Input steam ID: ' )
if not key:
key = raw_input( 'Input web api key: ' )
if gameappid == 0:
gameappid = raw_input( 'Input game appid: ' )
cheatnamestring = raw_input( 'Input cheat descriptive name: ' )
cheatpathstring = raw_input( 'Input full path to cheat file: ' )
webcheaturlstring = raw_input( 'Input full URL to cheat download page (optional): ' )
cheatfiletype = int(raw_input( 'Input 1 if .exe or input 2 if other file type: ' ))
if cheatfiletype == 1:
cheatprocid = raw_input( 'Input cheat process id (Input 0 if stopped or unsure): ' )
timecheatran = int(time.time())
cheatterminated = int(raw_input( 'Input 1 if cheat is still running or input 0 if it has stopped: ' ))
timecheatstopped = int(time.time())
if cheatterminated == 1:
timecheatstopped = 0
gameprocid = raw_input( 'Input game process id: ' )
print "sending webapi data now "
print "steamid: ", steamid
print "key: ", key
print "appid: ", appid
print "cheatnamestring: ", cheatnamestring
print "cheatpathstring: ", cheatpathstring
print "webcheaturlstring: ", webcheaturlstring
print "cheatprocid: ", cheatprocid
print "timecheatran: ", timecheatran
print "timecheatstopped: ", timecheatstopped
print "gameprocid: ", gameprocid
results = issueWebAPIRequest( universe='public', interface='icheatreportingservice', request='reportcheatdata',
key=key,
protocol='https',
method='POST',
cheatname=cheatnamestring,
appid=gameappid,
game_process_id=gameprocid,
cheat_process_id=cheatprocid,
pathandfilename=cheatpathstring,
webcheaturl=webcheaturlstring,
time_now=int(time.time()),
time_started=timecheatran,
time_stopped=timecheatstopped,
steamid=steamid
)
print "webapi results:", results
def main():
sendcheatreport()
if __name__ == '__main__':
main()
RequestVacStatusForUser
POST https://partner.steam-api.com/ICheatReportingService/RequestVacStatusForUser/v1/
Назва | Тип | Обов’язково | Опис |
key | string | ✔ | Ключ веб-API Steamworks для автентифікації видавця. |
steamid | uint64 | ✔ | SteamID користувача. |
appid | uint32 | ✔ | AppID гри, у яку грає користувач. |
session_id | uint64 | | ID сеансу, отриманий із виклику ICheatReportingService/StartSecureMultiplayerSession. |
Перевіряє стан блокування VAC користувача й підтверджує стан сеансу VAC користувача. Якщо підтвердження не станеться, то користувач не буде допущений до пошуку матчів на захищеному ігровому сервері.
Використовується до того, як користувач почне пошук матчів чи приєднається до гри. Якщо гравець якось заблокував VAC і VAC не може відсканувати комп’ютер на чіти, то результатом буде success = true та session_verified = false. Перевірка цього веб-API дозволить вам уникнути ситуації, за якої користувач спочатку допускається до пошуку матчів чи приєднується до сервера та незабаром виганяється за допомогою VAC (через результат
k_EAuthSessionResponseVACCheckTimedOut
зі зворотного виклику автентифікації). Система VAC не завжди має час повністю визначити, чи система клієнта співпрацює, і в таких випадках буде результат success = false. Також система гравця може пройти початкову перевірку, але не дати відповідь пізніше. У цьому випадку перевірка буде успішною, але
k_EAuthSessionResponseVACCheckTimedOut
відбудеться пізніше.
ПРИМІТКА: для цього виклику необхідний API-ключ видавця. Тому цей API
ОБОВ’ЯЗКОВО викликати із захищеного сервера й за жодних умов не допускати його використання клієнтами!
Сеанси веб-API
ПРИМІТКА: для ігор із впровадженою автентифікацією Steam не варто використовувати наведені нижче виклики API. Ці ігри натомість мають використовувати налаштування
однорангового інтерфейсу ISteamUser або ігрових серверів. Співробітники Valve мають вручну надати доступ до цього набору викликів, які можна використовувати лише в іграх, котрі виконують автентифікацію користувача повністю незалежно від Steam.
StartSecureMultiplayerSession
POST https://partner.steam-api.com/ICheatReportingService/StartSecureMultiplayerSession/v1/
Назва | Тип | Обов’язково | Опис |
key | string | ✔ | Ключ веб-API Steamworks для автентифікації видавця. |
steamid | uint64 | ✔ | SteamID користувача. |
appid | uint32 | ✔ | AppID гри. |
Повідомляє серверам VAC, що почався захищений багатокористувацький сеанс.
ПРИМІТКА: для цього виклику необхідний API-ключ видавця. Тому цей API
ОБОВ’ЯЗКОВО викликати із захищеного сервера й за жодних умов не допускати його використання клієнтами!
EndSecureMultiplayerSession
POST https://partner.steam-api.com/ICheatReportingService/EndSecureMultiplayerSession/v1/
Повідомляє серверам VAC, що закінчився захищений багатокористувацький сеанс.
ПРИМІТКА: для цього виклику необхідний API-ключ видавця. Тому цей API
ОБОВ’ЯЗКОВО викликати із захищеного сервера й за жодних умов не допускати його використання клієнтами!
Відповідь:[
{
"name": "success",
"type": "bool",
"description": ""
}
]