You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.8 KiB
119 lines
3.8 KiB
/** |
|
* Main and only Acedia mutator. Used for providing access to mutator |
|
* events' calls and detecting server travel. |
|
* Copyright 2020-2023 Anton Tarasenko |
|
* 2023 Shtoyan |
|
*------------------------------------------------------------------------------ |
|
* This file is part of Acedia. |
|
* |
|
* Acedia is free software: you can redistribute it and/or modify |
|
* it under the terms of the GNU General Public License as published by |
|
* the Free Software Foundation, version 3 of the License, or |
|
* (at your option) any later version. |
|
* |
|
* Acedia is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
* GNU General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU General Public License |
|
* along with Acedia. If not, see <https://www.gnu.org/licenses/>. |
|
*/ |
|
class AcediaLauncherMut extends Mutator; |
|
|
|
// Acedia's reference to a `Global` object. |
|
var private Global _; |
|
|
|
// Responsible for setting up Acedia's game modes in current voting system |
|
var private VotingHandlerAdapter votingAdapter; |
|
|
|
var Mutator_OnMutate_Signal onMutateSignal; |
|
var Mutator_OnModifyLogin_Signal onModifyLoginSignal; |
|
var Mutator_OnCheckReplacement_Signal onCheckReplacementSignal; |
|
|
|
simulated function PreBeginPlay() |
|
{ |
|
local StartUp startUpActor; |
|
|
|
_ = class'Global'.static.GetInstance(); |
|
if (level.netMode == NM_DedicatedServer) |
|
{ |
|
foreach AllActors(class'StartUp', startUpActor) |
|
{ |
|
votingAdapter = startUpActor.GetVotingHandlerAdapter(); |
|
startUpActor.Destroy(); |
|
break; |
|
} |
|
if (votingAdapter != none) { |
|
votingAdapter.InjectIntoVotingHandler(); |
|
} |
|
SetupMutatorSignals(); |
|
} |
|
else { |
|
class'ClientLevelCore'.static.CreateLevelCore(self); |
|
} |
|
} |
|
|
|
function ServerTraveling(string URL, bool bItems) |
|
{ |
|
if (votingAdapter != none) |
|
{ |
|
votingAdapter.PrepareForServerTravel(); |
|
votingAdapter.RestoreVotingHandlerConfigBackup(); |
|
_.memory.Free(votingAdapter); |
|
votingAdapter = none; |
|
} |
|
_.environment.ShutDown(); |
|
if (nextMutator != none) { |
|
nextMutator.ServerTraveling(URL, bItems); |
|
} |
|
Destroy(); |
|
} |
|
|
|
// Fetches and sets up signals that `Mutator` needs to provide |
|
private function SetupMutatorSignals() |
|
{ |
|
local ServerUnrealService service; |
|
|
|
service = ServerUnrealService(class'ServerUnrealService'.static.Require()); |
|
onMutateSignal = Mutator_OnMutate_Signal( |
|
service.GetSignal(class'Mutator_OnMutate_Signal')); |
|
onModifyLoginSignal = Mutator_OnModifyLogin_Signal( |
|
service.GetSignal(class'Mutator_OnModifyLogin_Signal')); |
|
onCheckReplacementSignal = Mutator_OnCheckReplacement_Signal( |
|
service.GetSignal(class'Mutator_OnCheckReplacement_Signal')); |
|
} |
|
|
|
function bool CheckReplacement(Actor other, out byte isSuperRelevant) |
|
{ |
|
if (onCheckReplacementSignal != none) { |
|
return onCheckReplacementSignal.Emit(other, isSuperRelevant); |
|
} |
|
return true; |
|
} |
|
|
|
function Mutate(string command, PlayerController sendingController) |
|
{ |
|
if (onMutateSignal != none) { |
|
onMutateSignal.Emit(command, sendingController); |
|
} |
|
super.Mutate(command, sendingController); |
|
} |
|
|
|
function ModifyLogin(out string portal, out string options) |
|
{ |
|
if (onModifyLoginSignal != none) { |
|
onModifyLoginSignal.Emit(portal, options); |
|
} |
|
super.ModifyLogin(portal, options); |
|
} |
|
|
|
defaultproperties |
|
{ |
|
remoteRole = ROLE_SimulatedProxy |
|
bAlwaysRelevant = true |
|
// Mutator description |
|
GroupName = "Package loader" |
|
FriendlyName = "Acedia loader" |
|
Description = "Launcher for Acedia packages" |
|
} |