Advertisement
Guest User

Мутатор

a guest
Aug 22nd, 2018
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class TestMutator extends KFMutator
  2.     config ( TestMutator )
  3.     dependson( KFGFxObject_TraderItems );
  4.  
  5. struct StructClient
  6. {
  7.     var TraderReplicationInfo RepLink;
  8.     var KFPlayerController KFPC;
  9. };
  10.  
  11. var config array<string>                TraderInventory;
  12.  
  13. var private bool                        RepReadyBool;
  14.  
  15. var private array<StructClient>         RepClients;
  16. var private array<StructItem>           ServerItems;
  17.  
  18. function InitMutator()
  19. {
  20.     super.InitMutator();
  21.     InitTraderInventory();
  22. }
  23.  
  24. function InitTraderInventory()
  25. {
  26.     TraderInventory = DefaultItem;
  27.    
  28.     class'TraderReplicationInfo'.static.SaveSettings();
  29.    
  30.     SetTimer( 1.f, true, nameof( ItemsTimer ) );
  31. }
  32.  
  33. private final function CreateRepLink( Controller C )
  34. {
  35.     local KFPlayerController KFPC;
  36.     local StructClient RepClient;
  37.    
  38.     KFPC = KFPlayerController( C );
  39.    
  40.     if ( KFPC == None || KFPC.Player == None || NetConnection( KFPC.Player) == None )
  41.         return;
  42.    
  43.     RepClient.RepLink = Spawn( class'TraderReplicationInfo', KFPC );
  44.     RepClient.KFPC = KFPC;
  45.    
  46.     RepClients.AddItem( RepClient );
  47.    
  48.     if ( RepReadyBool )
  49.         SyncClient( RepClient );
  50. }
  51.  
  52. private final function DestroyRepLink( Controller C )
  53. {
  54.     local KFPlayerController KFPC;
  55.     local int Index;
  56.    
  57.     KFPC = KFPlayerController( C );
  58.    
  59.     if ( KFPC == None )
  60.         return;
  61.    
  62.     Index = RepClients.Find( 'KFPC', KFPC );
  63.    
  64.     if ( Index < 0 )
  65.         return;
  66.    
  67.     if ( RepClients[Index].RepLink != None )
  68.         RepClients[Index].RepLink.Destroy();
  69.    
  70.     RepClients.Remove( Index, 1 );
  71. }
  72.  
  73. private final function DestroyClients()
  74. {
  75.     local StructClient RepClient;
  76.    
  77.     foreach RepClients( RepClient )
  78.     {
  79.         if ( RepClient.RepLink != none)
  80.             RepClient.RepLink.Destroy();
  81.     }
  82.    
  83.     RepClients.Length = 0;
  84. }
  85.  
  86. private final function SyncClients()
  87. {
  88.     local StructClient RepClient;
  89.    
  90.     RepReadyBool = true;
  91.    
  92.     foreach RepClients( RepClient )
  93.     {
  94.         SyncClient( RepClient );
  95.     }
  96. }
  97.  
  98. private final function SyncClient( StructClient RepClient )
  99. {
  100.     RepClient.RepLink.ClientItems = ServerItems;
  101.     RepClient.RepLink.StartSyncItems();
  102. }
  103.  
  104. function NotifyLogin( Controller C )
  105. {
  106.     super.GenericPlayerInitialization( C );
  107.     CreateRepLink( C );
  108. }
  109.  
  110. function NotifyLogout(Controller C)
  111. {
  112.     super.Logout ( C );
  113.     DestroyRepLink( C );
  114. }
  115.  
  116. event GetSeamlessTravelActorList( bool bToEntry, out array<Actor> ActorList )
  117. {
  118.     super.GetSeamlessTravelActorList ( bToEntry, ActorList );
  119.     DestroyClients();
  120. }
  121.  
  122. private function ItemsTimer()
  123. {
  124.     if ( AddItems() )
  125.     {
  126.         ClearTimer( nameof( ItemsTimer ) );
  127.         SyncClients();
  128.     }
  129. }
  130.  
  131. final function bool AddItems()
  132. {
  133.     local KFGameReplicationInfo KFGRI;
  134.     local KFGFxObject_TraderItems TraderItems;
  135.     local string CustomItem;
  136.     local STraderItem Item;
  137.     local int i, Number;
  138.     local StructItem RepItem;
  139.  
  140.     if ( WorldInfo == None )
  141.     {
  142.         return false;
  143.     }
  144.  
  145.     KFGRI = KFGameReplicationInfo( WorldInfo.GRI );
  146.    
  147.     if ( KFGRI == None )
  148.     {
  149.         return false;
  150.     }
  151.  
  152.     TraderItems = new class'KFGFxObject_TraderItems';
  153.  
  154.     Number = 0;
  155.    
  156.     foreach TraderInventory( CustomItem, i )
  157.     {
  158.         Item.WeaponDef = class<KFWeaponDefinition>( DynamicLoadObject( CustomItem, class'Class' ) );
  159.        
  160.         if ( Item.WeaponDef == None )
  161.         {
  162.             continue;
  163.         }
  164.  
  165.         RepItem.DefPath = CustomItem;
  166.         RepItem.TraderId = Number;
  167.         ServerItems.AddItem( RepItem );
  168.  
  169.         Item.ItemID = RepItem.TraderId;
  170.         TraderItems.SaleItems.AddItem( Item );
  171.  
  172.         Number++;
  173.     }
  174.  
  175.     if ( Number > 0 )
  176.         TraderItems.SetItemsInfo( TraderItems.SaleItems );
  177.  
  178.     KFGRI.TraderItems = TraderItems;
  179.    
  180.     return true;
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement