KF Server Redirect. Редирект на другой сервер
Полная версия:
Class RedirectMut extends Mutator Config(RedirectMut);
var config string NewAddress;
var int currentPort;
replication
{
reliable if(Role == ROLE_Authority)
currentPort;
}
//для клиента ставим таймер, чтобы запустить перенаправление на другой сервер
//через 5 секунд после присоединения
//для сервера ищем порт текущего сервака и реплицируем его на клиент
simulated function PostBeginPlay()
{
if(Level.NetMode == NM_Client)
SetTimer(5.0,false);
else
currentPort=Level.Game.GetServerPort();
}
//В таймере на клиенте получаем текущий адрес сервера, добавляем ему порт,
//полученный на сервере и реплицированный на клиента
//(не нашёл сходу функций для того, чтобы получить текущий порт из под клиента)
//Сравниваем текущий и новый адреса и если не совпадают - перенаправляем клиента
simulated function Timer()
{
local string currentIP,currentAddress;
local PlayerController PC;
PC=Level.GetLocalPlayerController();
if(PC==none) return;
currentIP=PC.GetServerIP();
currentAddress=currentIP$":"$currentPort;
if(currentAddress!=NewAddress)
PC.ConsoleCommand("open"@NewAddress);
}
defaultproperties
{
NewAddress="127.0.0.1:7707"
GroupName="KF-RedirectMut"
FriendlyName="RedirectMut"
Description="RedirectMut"
bAddToServerPackages=True
bAlwaysRelevant=True
RemoteRole=ROLE_SimulatedProxy
}
Если ставить мутатор только на тот сервак с которого redirect, то можно и таким ограничиться:
Class RedirectMut extends Mutator Config(RedirectMut);
var config string NewAddress;
simulated function PostBeginPlay()
{
local PlayerController PC;
if(Level.NetMode == NM_Client)
{
PC=Level.GetLocalPlayerController();
PC.ConsoleCommand("open"@NewAddress);
}
}
defaultproperties
{
NewAddress="127.0.0.1:7707"
GroupName="KF-RedirectMut"
FriendlyName="RedirectMut"
Description="RedirectMut"
bAddToServerPackages=True
bAlwaysRelevant=True
RemoteRole=ROLE_SimulatedProxy
}
Автор: Flame