Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //This class controls a 2man team teleporter (can be coded to be different size, but for now an example
- //will require a manager actor (because further down the road you'll need another type of teleporter)
- //THIS HAS NOT BEEN TESTED TO COMPILE ***MAY CONTAIN IMPROPER SYNTAX AND ERRORS***
- /* THis would be the struct in the manager class
- class DH_SeperatedTeamsManager
- struct 2MTeamInfo
- {
- var array<String> TeamMemberIDs;
- };
- needed variables
- var array<2MTeamInfo> AlliedTeamArray[25];
- var array<2MTeamInfo> AxisTeamArray[25];
- void function CheckAndRemoveExistingTeams(string ROID)
- {
- local int i; //Not sure you need two different int variables here
- local int n;
- for(i=0;i<AlliedTeamArray.Length;i++)
- {
- for(n=0;n<AlliedTeamArray[i].TeamMemberIDs.Length;n++)
- {
- if(ROID == AlliedTeamArray[i].TeamMemberIDs[n])
- {
- //ROID was already on a team and will be removed
- AlliedTeamArray[i].TeamMemberIDs.Remove(n,1);
- }
- }
- }
- for(i=0;i<AxisTeamArray.Length;i++)
- {
- for(n=0;n<AxisTeamArray[i].TeamMemberIDs.Length;n++)
- {
- if(ROID == AxisTeamArray[i].TeamMemberIDs[n])
- {
- //ROID was already on a team and will be removed
- AxisTeamArray[i].TeamMemberIDs.Remove(n,1);
- }
- }
- }
- }
- */
- class DH_2ManTeamTele extends DH_Teleporter;
- var() ROSideIndex TeamSide;
- var() bool bLeaveTeamTele; //If true this will stop anyone from behing added to a team and will remove them from all teams
- var int nTeamNumber;
- var DH_SeperatedTeamsManager TeamsManager;
- //Override to optimize and redo teleportation system
- function PostBeginPlay()
- {
- local int i;
- local DH_SeperatedTeamsManager Manager;
- //Call the super
- super.PostBeginPlay();
- //Reduce teamnumber if greater than 16 (this might not be needed, jsut precaution!)
- if(nTeamNumber > 25)
- nTeamNumber = 25;
- //Setup references properly
- //DH_SeperatedTeamsManager is bStatic so use AllActors list
- foreach AllActors(class'DH_SeperatedTeamsManager', Manager)
- TeamsManager = Manager;
- }
- // Teleporter was touched by an actor. Overridden to collect and deny players properly.
- simulated function PostTouch( actor Other )
- {
- local Teleporter D,Dest[16];
- local int i;
- local string ROIDHash;
- if( (InStr( URL, "/" ) >= 0) || (InStr( URL, "#" ) >= 0) )
- {
- // Teleport to a level on the net.
- if( (Role == ROLE_Authority) && (Pawn(Other) != None)
- && Pawn(Other).IsHumanControlled() )
- Level.Game.SendPlayer(PlayerController(Pawn(Other).Controller), URL);
- }
- else
- {
- if(!Other.IsA('Pawn'))
- return;
- ROIDHash = PlayerController(Pawn(Other).Controller).GetPlayerIDHash();
- if(TeamSide==ALLIES) //This might be incorrect syntax, please validate
- {
- //Check if team is full
- if(TeamsManager.AlliedTeamArray[nTeamNumber].TeamMemberIDs.Length >= 2)
- return;
- //Check if bLeaveTeamTele
- if(bLeaveTeamTele)
- {
- for(i=0;i<AlliedTeamArray[nTeamNumber].TeamMembersIDs.Length;i++)
- {
- if(PlayerController(ROIDHash == AlliedTeamArray[nTeamNumber].TeamMembersIDs[i])
- AlliedTeamArray[nTeamNumber].TeamMembersIDs.Remove(i,1);
- }
- }
- else
- { //It's not full so lets remove past teams (if any) and add the guy to the new team
- TeamsManager.CheckAndRemoveExistingTeams( ROIDHash );
- TeamsManager.AlliedTeamArray[nTeamNumber].TeamMemberIDs.Insert(0,1);
- TeamsManager.AlliedTeamArray[nTeamNumber].TeamMemberIDs[0] = ROIDHash;
- }
- }
- if(TeamSide==AXIS) //This might be incorrect syntax, please validate
- {
- //Check if team is full
- if(TeamsManager.AxisTeamArray[nTeamNumber].TeamMemberIDs.Length >= 2)
- return;
- //Check if bLeaveTeamTele
- if(bLeaveTeamTele)
- {
- for(i=0;i<AxisTeamArray[nTeamNumber].TeamMembersIDs.Length;i++)
- {
- if(PlayerController(ROIDHash == AxisTeamArray[nTeamNumber].TeamMembersIDs[i])
- AxisTeamArray[nTeamNumber].TeamMembersIDs.Remove(i,1);
- }
- }
- else
- { //It's not full so lets remove past teams (if any) and add the guy to the new team
- TeamsManager.CheckAndRemoveExistingTeams( ROIDHash );
- TeamsManager.AxisTeamArray[nTeamNumber].TeamMemberIDs.Insert(0,1);
- TeamsManager.AxisTeamArray[nTeamNumber].TeamMemberIDs[0] = ROIDHash;
- }
- }
- // Okay we know the team wasn't full so the guy should teleport if we make it here.
- // Teleport to a random teleporter in this local level, if more than one pick random.
- foreach AllActors( class 'Teleporter', D )
- if( string(D.tag)~=URL && D!=Self )
- {
- Dest[i] = D;
- i++;
- if ( i > arraycount(Dest) )
- break;
- }
- i = rand(i);
- if( Dest[i] != None )
- {
- // Teleport the actor into the other teleporter.
- if ( Other.IsA('Pawn') )
- Other.PlayTeleportEffect(false, true);
- Dest[i].Accept( Other, self );
- if ( Pawn(Other) != None )
- TriggerEvent(Event, self, Pawn(Other));
- }
- }
- }
Add Comment
Please, Sign In to add comment