Guest User

Untitled

a guest
Nov 23rd, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //This class controls a 2man team teleporter (can be coded to be different size, but for now an example
  2. //will require a manager actor (because further down the road you'll need another type of teleporter)
  3.  
  4. //THIS HAS NOT BEEN TESTED TO COMPILE ***MAY CONTAIN IMPROPER SYNTAX AND ERRORS***
  5.  
  6. /* THis would be the struct in the manager class
  7.  
  8. class DH_SeperatedTeamsManager
  9.  
  10. struct 2MTeamInfo
  11. {
  12.     var array<String>   TeamMemberIDs;
  13. };
  14.  
  15. needed variables
  16. var array<2MTeamInfo> AlliedTeamArray[25];
  17. var array<2MTeamInfo> AxisTeamArray[25];
  18.  
  19. void function CheckAndRemoveExistingTeams(string ROID)
  20. {
  21.     local int i;  //Not sure you need two different int variables here
  22.     local int n;
  23.  
  24.     for(i=0;i<AlliedTeamArray.Length;i++)
  25.     {
  26.         for(n=0;n<AlliedTeamArray[i].TeamMemberIDs.Length;n++)
  27.         {
  28.             if(ROID == AlliedTeamArray[i].TeamMemberIDs[n])
  29.             {
  30.                 //ROID was already on a team and will be removed
  31.                 AlliedTeamArray[i].TeamMemberIDs.Remove(n,1);
  32.             }
  33.         }
  34.     }
  35.     for(i=0;i<AxisTeamArray.Length;i++)
  36.     {
  37.         for(n=0;n<AxisTeamArray[i].TeamMemberIDs.Length;n++)
  38.         {
  39.             if(ROID == AxisTeamArray[i].TeamMemberIDs[n])
  40.             {
  41.                 //ROID was already on a team and will be removed
  42.                 AxisTeamArray[i].TeamMemberIDs.Remove(n,1);
  43.             }
  44.         }
  45.     }
  46. }
  47.  
  48. */
  49.  
  50.  
  51. class DH_2ManTeamTele extends DH_Teleporter;
  52.  
  53. var()   ROSideIndex                     TeamSide;
  54. var()   bool                            bLeaveTeamTele;  //If true this will stop anyone from behing added to a team and will remove them from all teams
  55. var     int                             nTeamNumber;
  56. var     DH_SeperatedTeamsManager        TeamsManager;
  57.  
  58. //Override to optimize and redo teleportation system
  59. function PostBeginPlay()
  60. {
  61.     local int i;
  62.     local DH_SeperatedTeamsManager Manager;
  63.  
  64.     //Call the super
  65.     super.PostBeginPlay();
  66.  
  67.     //Reduce teamnumber if greater than 16 (this might not be needed, jsut precaution!)
  68.     if(nTeamNumber > 25)
  69.         nTeamNumber = 25;
  70.  
  71.     //Setup references properly
  72.     //DH_SeperatedTeamsManager is bStatic so use AllActors list
  73.     foreach AllActors(class'DH_SeperatedTeamsManager', Manager)
  74.         TeamsManager = Manager;
  75. }
  76.  
  77. // Teleporter was touched by an actor.  Overridden to collect and deny players properly.
  78. simulated function PostTouch( actor Other )
  79. {
  80.     local Teleporter D,Dest[16];
  81.     local int i;
  82.     local string ROIDHash;
  83.  
  84.     if( (InStr( URL, "/" ) >= 0) || (InStr( URL, "#" ) >= 0) )
  85.     {
  86.         // Teleport to a level on the net.
  87.         if( (Role == ROLE_Authority) && (Pawn(Other) != None)
  88.             && Pawn(Other).IsHumanControlled() )
  89.             Level.Game.SendPlayer(PlayerController(Pawn(Other).Controller), URL);
  90.     }
  91.     else
  92.     {
  93.         if(!Other.IsA('Pawn'))
  94.             return;
  95.  
  96.         ROIDHash = PlayerController(Pawn(Other).Controller).GetPlayerIDHash();
  97.  
  98.         if(TeamSide==ALLIES) //This might be incorrect syntax, please validate
  99.         {
  100.             //Check if team is full
  101.             if(TeamsManager.AlliedTeamArray[nTeamNumber].TeamMemberIDs.Length >= 2)
  102.                 return;
  103.  
  104.             //Check if bLeaveTeamTele
  105.             if(bLeaveTeamTele)
  106.             {
  107.                 for(i=0;i<AlliedTeamArray[nTeamNumber].TeamMembersIDs.Length;i++)
  108.                 {
  109.                     if(PlayerController(ROIDHash == AlliedTeamArray[nTeamNumber].TeamMembersIDs[i])
  110.                         AlliedTeamArray[nTeamNumber].TeamMembersIDs.Remove(i,1);
  111.                 }
  112.             }
  113.             else
  114.             {   //It's not full so lets remove past teams (if any) and add the guy to the new team
  115.                 TeamsManager.CheckAndRemoveExistingTeams( ROIDHash );
  116.                 TeamsManager.AlliedTeamArray[nTeamNumber].TeamMemberIDs.Insert(0,1);
  117.                 TeamsManager.AlliedTeamArray[nTeamNumber].TeamMemberIDs[0] = ROIDHash;
  118.             }
  119.         }
  120.  
  121.         if(TeamSide==AXIS) //This might be incorrect syntax, please validate
  122.         {
  123.             //Check if team is full
  124.             if(TeamsManager.AxisTeamArray[nTeamNumber].TeamMemberIDs.Length >= 2)
  125.                 return;
  126.  
  127.             //Check if bLeaveTeamTele
  128.             if(bLeaveTeamTele)
  129.             {
  130.                 for(i=0;i<AxisTeamArray[nTeamNumber].TeamMembersIDs.Length;i++)
  131.                 {
  132.                     if(PlayerController(ROIDHash == AxisTeamArray[nTeamNumber].TeamMembersIDs[i])
  133.                         AxisTeamArray[nTeamNumber].TeamMembersIDs.Remove(i,1);
  134.                 }
  135.             }
  136.             else
  137.             {   //It's not full so lets remove past teams (if any) and add the guy to the new team
  138.                 TeamsManager.CheckAndRemoveExistingTeams( ROIDHash );
  139.                 TeamsManager.AxisTeamArray[nTeamNumber].TeamMemberIDs.Insert(0,1);
  140.                 TeamsManager.AxisTeamArray[nTeamNumber].TeamMemberIDs[0] = ROIDHash;
  141.             }
  142.         }
  143.  
  144.         // Okay we know the team wasn't full so the guy should teleport if we make it here.
  145.         // Teleport to a random teleporter in this local level, if more than one pick random.
  146.  
  147.         foreach AllActors( class 'Teleporter', D )
  148.             if( string(D.tag)~=URL && D!=Self )
  149.             {
  150.                 Dest[i] = D;
  151.                 i++;
  152.                 if ( i > arraycount(Dest) )
  153.                     break;
  154.             }
  155.  
  156.         i = rand(i);
  157.         if( Dest[i] != None )
  158.         {
  159.             // Teleport the actor into the other teleporter.
  160.             if ( Other.IsA('Pawn') )
  161.                 Other.PlayTeleportEffect(false, true);
  162.             Dest[i].Accept( Other, self );
  163.             if ( Pawn(Other) != None )
  164.                 TriggerEvent(Event, self, Pawn(Other));
  165.         }
  166.     }
  167. }
Add Comment
Please, Sign In to add comment