hedgewars/uTeams.pas
changeset 14481 65b25ca6ff31
parent 14478 35724823b0d3
child 14510 bcb418530a1c
equal deleted inserted replaced
14480:208359558642 14481:65b25ca6ff31
   765     s:= cPathz[ptTeams] + '/' + s + '.hwt';
   765     s:= cPathz[ptTeams] + '/' + s + '.hwt';
   766 
   766 
   767     loadBinds('bind', s);
   767     loadBinds('bind', s);
   768 end;
   768 end;
   769 
   769 
       
   770 // Make sure the team name of chTeam is unique.
       
   771 // If it isn't, the name is changed to be unique.
       
   772 procedure makeTeamNameUnique(chTeam: PTeam);
       
   773 var tail: shortstring;
       
   774     t, numLen, numTail: LongInt;
       
   775     valOK: Word;
       
   776     nameDupeCheck: boolean;
       
   777     chChar: char;
       
   778 begin
       
   779     nameDupeCheck:= false;
       
   780     while(nameDupeCheck = false) do
       
   781         begin
       
   782         nameDupeCheck:= true;
       
   783         for t:=0 to TeamsCount - 1 do
       
   784             begin
       
   785             // Name collision?
       
   786             if (chTeam <> teamsArray[t]) and (TeamsArray[t]^.TeamName = chTeam^.TeamName) then
       
   787                 begin
       
   788                 // Change the name by appending a sequence number, starting from 2
       
   789                 numLen:= 0;
       
   790                 chChar:= chTeam^.TeamName[Length(chTeam^.TeamName) - numLen];
       
   791                 // Parse number at end of team name (if any)
       
   792                 while (chChar >= '0') and (chChar <= '9') and (numLen < Length(chTeam^.TeamName)) do
       
   793                     begin
       
   794                     inc(numLen);
       
   795                     chChar:= chTeam^.TeamName[Length(chTeam^.TeamName) - numLen];
       
   796                     end;
       
   797 
       
   798                 if numLen > 0 then
       
   799                     // Number found: Increment it by 1
       
   800                     begin
       
   801                     tail:= Copy(chTeam^.TeamName, Length(chTeam^.TeamName) - numLen + 1, numLen);
       
   802                     valOK:= 1;
       
   803                     Val(tail, numTail, valOK);
       
   804                     Inc(numTail);
       
   805                     if valOK = 0 then
       
   806                         tail:= IntToStr(numTail)
       
   807                     else
       
   808                         // This should not happen
       
   809                         tail:= 'X';
       
   810                     chTeam^.TeamName:= Copy(chTeam^.TeamName, 0, Length(chTeam^.TeamName) - numLen) + tail;
       
   811                     end
       
   812                 else
       
   813                     // No number at team end: Just append a '2'
       
   814                     chTeam^.TeamName:= chTeam^.TeamName + ' 2';
       
   815                 nameDupeCheck:= false;
       
   816                 break;
       
   817                 end;
       
   818             end;
       
   819         end;
       
   820 end;
       
   821 
   770 procedure chAddTeam(var s: shortstring);
   822 procedure chAddTeam(var s: shortstring);
   771 var Color: Longword;
   823 var Color: Longword;
   772     ts, cs: shortstring;
   824     ts, cs: shortstring;
   773 begin
   825 begin
   774 cs:= '';
   826 cs:= '';
   784     AddTeam(Color);
   836     AddTeam(Color);
   785 
   837 
   786     if CurrentTeam <> nil then
   838     if CurrentTeam <> nil then
   787         begin
   839         begin
   788         CurrentTeam^.TeamName:= ts;
   840         CurrentTeam^.TeamName:= ts;
       
   841         makeTeamNameUnique(CurrentTeam);
       
   842 
   789         CurrentTeam^.PlayerHash:= s;
   843         CurrentTeam^.PlayerHash:= s;
   790         loadTeamBinds(ts);
   844         loadTeamBinds(ts);
   791 
   845 
   792         if GameType in [gmtDemo, gmtSave, gmtRecord] then
   846         if GameType in [gmtDemo, gmtSave, gmtRecord] then
   793             CurrentTeam^.ExtDriven:= true;
   847             CurrentTeam^.ExtDriven:= true;