Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class TestMutator extends KFMutator
- config ( TestMutator )
- dependson( KFGFxObject_TraderItems );
- struct StructClient
- {
- var TraderReplicationInfo RepLink;
- var KFPlayerController KFPC;
- };
- var config array<string> TraderInventory;
- var private bool RepReadyBool;
- var private array<StructClient> RepClients;
- var private array<StructItem> ServerItems;
- function InitMutator()
- {
- super.InitMutator();
- InitTraderInventory();
- }
- function InitTraderInventory()
- {
- TraderInventory = DefaultItem;
- class'TraderReplicationInfo'.static.SaveSettings();
- SetTimer( 1.f, true, nameof( ItemsTimer ) );
- }
- private final function CreateRepLink( Controller C )
- {
- local KFPlayerController KFPC;
- local StructClient RepClient;
- KFPC = KFPlayerController( C );
- if ( KFPC == None || KFPC.Player == None || NetConnection( KFPC.Player) == None )
- return;
- RepClient.RepLink = Spawn( class'TraderReplicationInfo', KFPC );
- RepClient.KFPC = KFPC;
- RepClients.AddItem( RepClient );
- if ( RepReadyBool )
- SyncClient( RepClient );
- }
- private final function DestroyRepLink( Controller C )
- {
- local KFPlayerController KFPC;
- local int Index;
- KFPC = KFPlayerController( C );
- if ( KFPC == None )
- return;
- Index = RepClients.Find( 'KFPC', KFPC );
- if ( Index < 0 )
- return;
- if ( RepClients[Index].RepLink != None )
- RepClients[Index].RepLink.Destroy();
- RepClients.Remove( Index, 1 );
- }
- private final function DestroyClients()
- {
- local StructClient RepClient;
- foreach RepClients( RepClient )
- {
- if ( RepClient.RepLink != none)
- RepClient.RepLink.Destroy();
- }
- RepClients.Length = 0;
- }
- private final function SyncClients()
- {
- local StructClient RepClient;
- RepReadyBool = true;
- foreach RepClients( RepClient )
- {
- SyncClient( RepClient );
- }
- }
- private final function SyncClient( StructClient RepClient )
- {
- RepClient.RepLink.ClientItems = ServerItems;
- RepClient.RepLink.StartSyncItems();
- }
- function NotifyLogin( Controller C )
- {
- super.GenericPlayerInitialization( C );
- CreateRepLink( C );
- }
- function NotifyLogout(Controller C)
- {
- super.Logout ( C );
- DestroyRepLink( C );
- }
- event GetSeamlessTravelActorList( bool bToEntry, out array<Actor> ActorList )
- {
- super.GetSeamlessTravelActorList ( bToEntry, ActorList );
- DestroyClients();
- }
- private function ItemsTimer()
- {
- if ( AddItems() )
- {
- ClearTimer( nameof( ItemsTimer ) );
- SyncClients();
- }
- }
- final function bool AddItems()
- {
- local KFGameReplicationInfo KFGRI;
- local KFGFxObject_TraderItems TraderItems;
- local string CustomItem;
- local STraderItem Item;
- local int i, Number;
- local StructItem RepItem;
- if ( WorldInfo == None )
- {
- return false;
- }
- KFGRI = KFGameReplicationInfo( WorldInfo.GRI );
- if ( KFGRI == None )
- {
- return false;
- }
- TraderItems = new class'KFGFxObject_TraderItems';
- Number = 0;
- foreach TraderInventory( CustomItem, i )
- {
- Item.WeaponDef = class<KFWeaponDefinition>( DynamicLoadObject( CustomItem, class'Class' ) );
- if ( Item.WeaponDef == None )
- {
- continue;
- }
- RepItem.DefPath = CustomItem;
- RepItem.TraderId = Number;
- ServerItems.AddItem( RepItem );
- Item.ItemID = RepItem.TraderId;
- TraderItems.SaleItems.AddItem( Item );
- Number++;
- }
- if ( Number > 0 )
- TraderItems.SetItemsInfo( TraderItems.SaleItems );
- KFGRI.TraderItems = TraderItems;
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement