| Home Page | Recent Changes | Preferences

Evolution/EvoETV

00001  //-----------------------------------------------------------
00002  //
00003  //-----------------------------------------------------------
00004  class EvoETV extends Mutator;
00005  
00006  var TeamInfo Teams[4];
00007  var int MessageCount;
00008  var Pawn MovingPawn;
00009  var bool debug;
00010  var string MyIP;
00011  var string MyLocalIP;
00012  
00013  function PostBeginPlay()
00014  {
00015      local int i;
00016      super.PostBeginPlay();
00017      Level.Game.RegisterMessageMutator(Self);
00018      
00019      for (i=0;i<TeamGamePlus(Level.Game).MaxTeams;i++)
00020          Teams[i]=TeamGamePlus(Level.Game).Teams[i];
00021          
00022      if ((TeamGamePlus(Level.Game)!=None)&&(TeamGamePlus(Level.Game).TimeLimit!=0))
00023          SetTimer(float((TeamGamePlus(Level.Game).TimeLimit*60)/3),true);
00024      else SetTimer(600.0,true);
00025      
00026      Timer();
00027  }
00028  
00029  function Timer()
00030  {
00031      BroadcastMessage("SYSTEM: type 'mutate et' in your console to even the teams.");
00032  }
00033  
00034  function bool MutatorBroadcastLocalizedMessage( Actor Sender, Pawn Receiver, out class<LocalMessage> Message, out optional int Switch, out optional PlayerReplicationInfo RelatedPRI_1, out optional PlayerReplicationInfo RelatedPRI_2, out optional Object OptionalObject )
00035  {
00036      local int OldTeam;
00037      if ((Message==class'DeathMatchMessage')&&(switch==3))
00038      {
00039          if (RelatedPRI_1!=None)
00040          {
00041              if ((MovingPawn!=None)&&(RelatedPRI_1.Owner==MovingPawn))
00042              {
00043                  if (++MessageCount<NumPlayers())
00044                  {
00045                      if (debug)
00046                      {
00047                          log(class@"Intercepting message to"@Receiver.PlayerReplicationInfo.PlayerName@"that"@RelatedPRI_1.PlayerName@"is changing teams.");
00048                          log(class@"Count:"@MessageCount@"NumPlayers:"@NumPlayers());
00049                      }
00050                      return false;
00051                  }
00052                  else
00053                  {
00054                      MovingPawn=None;
00055                      RelatedPRI_1.TweenRate=0;
00056                      MessageCount=0;
00057                      if (debug)
00058                      {
00059                          if (RelatedPRI_1.Team==0)
00060                              OldTeam=1;
00061                          log(class@"Teams were successfully balanced."@RelatedPRI_1.PlayerName@"was moved to"@TeamGamePlus(Level.Game).TeamColor[OldTeam]);
00062                      }
00063                  }
00064              }
00065              else
00066              {
00067                  RelatedPRI_1.TweenRate = Level.TimeSeconds;
00068                  if (debug)
00069                      log(class@"TEAMCHANGE("$Level.TimeSeconds$"):"@RelatedPRI_1.PlayerName@RelatedPRI_1.Team@RelatedPRI_1.TweenRate);
00070              }
00071          }
00072      }
00073  
00074      if ( NextMessageMutator != None )
00075          return NextMessageMutator.MutatorBroadcastLocalizedMessage( Sender, Receiver, Message, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject );
00076      else
00077          return true;
00078  }
00079  
00080  function Mutate(string MutateString, PlayerPawn Sender)
00081  {
00082      local int pos;
00083      local string address;
00084      local Pawn P;
00085      if (MutateString~="et")
00086      {
00087          if (debug)
00088              log("*************************ET CALLED****************************");
00089          if ((Max(Teams[0].Size,Teams[1].Size) - Min(Teams[0].Size,Teams[1].Size))>1)
00090          {
00091              EvenTeams(Sender);
00092              if (debug)
00093                  log(class@"Call to EvenTeams from"@Sender.PlayerReplicationInfo.PlayerName@"complete - team were NOT even");
00094          }
00095          else
00096          {
00097              Sender.ClientMessage("Teams are even,"@Sender.PlayerReplicationInfo.PlayerName);
00098              if (debug)
00099              {
00100                  log(class@"Call to EvenTeams from"@Sender.PlayerReplicationInfo.PlayerName@"complete - teams were even");
00101                  log(class@"Red Size:"$Teams[0].Size@"Blue Size:"$Teams[1].Size);
00102                  for (P=Level.PawnList;P!=None;P=P.NextPawn)
00103                      if (P.PlayerReplicationInfo!=None)
00104                          log(Class@p.playerreplicationinfo.playername@"on team"@p.playerreplicationinfo.team);
00105              }
00106                  
00107          }
00108          return;
00109      }
00110      else if (MutateString~="etdebug")
00111      {
00112          address = Sender.GetPlayerNetworkAddress();
00113          if (((InStr(Address,MyIP)!=-1)||(InStr(Address,MyLocalIP)!=-1))||Sender.bAdmin)
00114          {
00115              log(class@"etdebug was called!!!"@Address);
00116              debug=true;
00117              Sender.ClientMessage("Debug has been enabled!!!");
00118              return;
00119          }
00120      }
00121      else if (MutateString~="etalert")
00122      {
00123          address = Sender.GetPlayerNetworkAddress();
00124          if (((InStr(Address,MyIP)!=-1)||(InStr(Address,MyLocalIP)!=-1))||Sender.bAdmin)
00125              log(class@"ETALERT:"@Level.TimeSeconds@"Red:"$TeamGamePlus(Level.Game).TeamColor[0]@"Blue:"$TeamGamePlus(Level.Game).TeamColor[1]);
00126          return;
00127      }
00128  
00129      else if (NextMutator!=None)
00130          NextMutator.Mutate(MutateString, Sender);
00131  }
00132  
00133  function EvenTeams(PlayerPawn Sender)
00134  {
00135      local Pawn P;
00136      local float NewestTime;
00137      local Pawn NewestPawn;
00138      local int Smallest,Biggest,i;
00139  
00140      for (i=1;i<TeamGamePlus(Level.Game).MaxTeams;i++)
00141          if (Teams[i].Size>Teams[Biggest].Size)
00142              Biggest=i;
00143              
00144      if (debug)
00145          log(class@"Biggest Team:"@TeamGamePlus(Level.Game).TeamColor[Biggest]);
00146          
00147      for (P=Level.PawnList;P!=None;P=P.NextPawn)
00148      {
00149          if ((P.PlayerReplicationInfo!=None)&&(P.PlayerReplicationInfo.Team==Biggest) && (P.PlayerReplicationInfo.HasFlag==None)&&(Spectator(P)==None))
00150          {
00151              if (debug)
00152                  log(class@"Checking"@P@P.PlayerReplicationInfo.PlayerName@TeamGamePlus(Level.Game).TeamColor[P.PlayerReplicationInfo.Team]@P.PlayerReplicationInfo.TweenRate);
00153          
00154          if (P.PlayerReplicationInfo.TweenRate > NewestTime)
00155              {
00156                  if (debug)
00157                      log(class@"Found newer time than"@NewestTime@P@P.PlayerReplicationInfo.PlayerName);
00158                  NewestTime = P.PlayerReplicationInfo.TweenRate;
00159                  NewestPawn = P;
00160              }
00161          }
00162      }
00163      if (newestPawn!=none)
00164      {
00165          
00166          if (debug)
00167              log(class@"Attempting to move"@NewestPawn.PlayerReplicationInfo.PlayerName@PlayerPawn(NewestPawn).GetPlayerNetworkaddress());
00168          if (newestPawn.PlayerReplicationInfo.HasFlag!=None)
00169          {
00170              Sender.ClientMessage("Not allowed to switch"@NewestPawn.PlayerReplicationInfo.PlayerName@"while the player is holding a flag.");
00171              if (debug)
00172                  log(class@"Failed to switch"@NewestPawn.PlayerReplicationInfo.PlayerName$", FC");
00173              return;
00174          }
00175          
00176          MovingPawn=NewestPawn;
00177          NewestPawn.Died( None, '', NewestPawn.Location );
00178          Smallest = 0;
00179          
00180          for( i=1; i<TeamGamePlus(Level.Game).MaxTeams; i++ )
00181              if ( Teams[Smallest].Size > Teams[i].Size )
00182                  Smallest = i;
00183          
00184          if (TeamGamePlus(Level.Game).ChangeTeam(NewestPawn, Smallest))
00185              BroadcastMessage(NewestPawn.PlayerReplicationInfo.PlayerName@"was moved to the"@TeamGamePlus(Level.Game).TeamColor[Smallest]@"team.");
00186          else BroadcastMessage(NewestPawn.PlayerReplicationInfo.PlayerName@"could not be moved!!!");
00187      }
00188      else
00189      {
00190          log(class@"NEWEST PAWN WAS NONE!");
00191          Sender.ClientMessage("There was an error balancing the teams.  Please try again in a few seconds.");
00192      }
00193  }
00194  
00195  function int NumPlayers()
00196  {
00197      if (debug)
00198          log(class@"NumPlayer()::NumPlayers:"$DeathMatchPlus(Level.Game).NumPlayers@"NumBots:"$DeathMatchPlus(Level.Game).NumBots);
00199      if (LastManStanding(Level.Game)!=None)
00200          return DeathMatchPlus(Level.Game).NumPlayers+DeathMatchPlus(Level.Game).NumBots-LastManStanding(Level.Game).NumGhosts;
00201      else return DeathMatchPlus(Level.Game).NumPlayers+DeathMatchPlus(Level.Game).NumBots;
00202  }

The Unreal Engine Documentation Site

Wiki Community

Topic Categories

Image Uploads

Random Page

Recent Changes

Offline Wiki

Unreal Engine

Console Commands

Terminology

FAQs

Help Desk

Mapping Topics

Mapping Lessons

UnrealEd Interface

UnrealScript Topics

UnrealScript Lessons

Making Mods

Class Tree

Modeling Topics

Chongqing Page

Log In