45.png
44.png
43.png
42.png
41.png
40.png
39.png
38.png
37.png
36.png
35.png
34.png
33.png
32.png
31.png
30.png
29.png
28.png
27.png
26.png
24.png
23.png
22.png
21.png

Бесплатный сервис SOWPROJECT разработан специально для серверов arma 3 EPOCH,EXILE. Мы разрабатываем продукты для серверов arma III

Реклама на сайте

Сервис фотографий девушек
Мир и бизнес
AC Studio
UHOT.RU
FILMKINO

Контактная информация

Информация для связи

info@sowproject.ru - отдел по работе с клиентами. Решение общих вопросов и для информации. Любые вопросы касательно проекта SOWPROJECT.

support@sowproject.ru - технический отдел. Решение технических вопросов касательно проекта SOWPROJECT.

Не даем игрокам заходить на сервер под другим логином EXILE EPOCH

74.jpg
03 Декабря 2017

Я думаю такое введение поможет владельцам серверов EXILE и EPOCH облегчить администрирование. Часто игроки меняют логин, чтоб наделать какую-то пакасть, но зачастую не серверу, а именно игрокам, чтоб не определили его конект другие игроки. В ряду безопасности сервера и поднятия её на +1 )))), будет очень даже актуален вопрос.

И так, разберем в начале EPOCH. Нам нужно найти файл @epochhive\addons\epoch_server\compile\epoch_player\EPOCH_server_loadPlayer.sqf при этом нужно epoch_server.pbo разархивировать с помощью PBO manager. Дальше открываем данный файл на редактирование и ищем строки:

_playerUID = getPlayerUID _player;

if (_playerUID != "") then {

Нам нужно добавить перед строкой if (_playerUID != "") then {, строку 

_playerName = name _player;

Благодаря данной строки мы получим логин игрока. Теперь нам нужно получить логин из базы по UID. После строки, которую мы написали, нам нужно написать следующую строку

_playerNameBase = ["PlayerData",_playerUID] call EPOCH_fnc_server_hiveGETRANGE;

После данной строки нам нужно проверить, что мы получили с базы или вообще ни чего не получили. Если ни чего не получили, значит данного игрока в нашей системе нет и поэтому мы можем его пропустить, а не блокировать. Давайте напишем следом

if(count(_playerNameBase select 1) == 0)then{
     _playerNamePlayer = _playerName;
}else{
     _playerNamePlayer = (_playerNameBase select 1) select 0;
};

Теперь само условие if (_playerUID != "") then {, нам нужно изменить на

if (_playerUID != "" && _playerNamePlayer == _playerName) then {

Для EPOCH все. Обратно архивируем папку epoch_server в epoch_server.pbo.

Теперь разберем как сделать на EXILE. Для начала нам нужно отредактировать файл с настройками SQL базы данных. Открываем exile.ini по пути @ExileServer\extDB\sql_custom_v2\exile.ini ищем в нем такие строки

[startAccountSession]
SQL1_1 = UPDATE account SET name = ?, last_connect_at = NOW(), total_connections = total_connections + 1 WHERE uid = ?
Number Of Inputs = 2
SQL1_INPUTS = 2,1

Меняем на

[startAccountSession]
SQL1_1 = UPDATE account SET last_connect_at = NOW(), total_connections = total_connections + 1 WHERE uid = ?
Number Of Inputs = 1
SQL1_INPUTS = 1

Сразу хочу обратить внимание, если у кого extDB3 вам просто нужно убрать строку с парамметром Number Of Inputs. А так все по аналогии. Дальше в этом же файле находим строчки

[getAccountStats]
SQL1_1 = SELECT score, kills, deaths, clan_id, locker FROM account WHERE uid = ?
Number of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1,2,3,4,5

И заменяем на

[getAccountStats]
SQL1_1 = SELECT score, kills, deaths, clan_id, locker, name FROM account WHERE uid = ?
Number of Inputs = 1
SQL1_INPUTS = 1
OUTPUT = 1,2,3,4,5,6-STRING

Теперь осталось исправить два файла. Первый файл это @ExileServer\addons\exile_server\code\ExileServer_system_network_event_onPlayerConnected.sqf. В нем находим строку

format["startAccountSession:%1:%2", _uid,_name] call ExileServer_system_database_query_fireAndForget;

И заменяем на

format["startAccountSession:%1", _uid] call ExileServer_system_database_query_fireAndForget;

Дальше ищим файл @ExileServer\addons\exile_server\code\ExileServer_object_player_network_loadPlayerRequest.sqf. В нем находим две строки

_playerData = format["loadPlayer:%1", _playerUID] call ExileServer_system_database_query_selectSingle;
[_playerData, _playerObject, _playerUID, _sessionID] call ExileServer_object_player_database_load;

И заменяем на

_allowData = format["getAccountStats:%1", _playerUID] call ExileServer_system_database_query_selectSingle;
_names = _allowData select 5;
if(_names == _name)then{
   _playerData = format["loadPlayer:%1", _playerUID] call ExileServer_system_database_query_selectSingle;
  [_playerData, _playerObject, _playerUID, _sessionID] call ExileServer_object_player_database_load;
};

И добавляем после строки 

_playerUID = getPlayerUID _playerObject;

Вот эту строку

_name = name _playerObject;

Все! Сохраняем, архивируем exile_server в pbo. Так же не забываем сохранить exile.ini.

loading.gif