Author Topic: [Request] Teambalancer  (Read 1113 times)

0 Members and 1 Guest are viewing this topic.

Offline Silnikos

  • Soldier
  • **
  • Posts: 129
[Request] Teambalancer
« on: July 23, 2007, 02:59:00 am »
Could someone fix this script by cooz or make a new one, which will balance teams every x minutes or when player or admin execute it by command?

The old code for old core:
Code: [Select]
const
  CHECK_TIME = 2;

var
  i,j,temp,idtoswitch: integer;

function IDtoKills(PlayerID: integer):integer;
begin
  case PlayerID of
    1: Result:= Player_Kills_1;
    2: Result:= Player_Kills_2;
    3: Result:= Player_Kills_3;
    4: Result:= Player_Kills_4;
    5: Result:= Player_Kills_5;
    6: Result:= Player_Kills_6;
    7: Result:= Player_Kills_7;
    8: Result:= Player_Kills_8;
    9: Result:= Player_Kills_9;
    10: Result:= Player_Kills_10;
    11: Result:= Player_Kills_11;
    12: Result:= Player_Kills_12;
    13: Result:= Player_Kills_13;
    14: Result:= Player_Kills_14;
    15: Result:= Player_Kills_15;
    16: Result:= Player_Kills_16;
    17: Result:= Player_Kills_17;
    18: Result:= Player_Kills_18;
    19: Result:= Player_Kills_19;
    20: Result:= Player_Kills_20;
    21: Result:= Player_Kills_21;
    22: Result:= Player_Kills_22;
    23: Result:= Player_Kills_23;
    24: Result:= Player_Kills_24;
    25: Result:= Player_Kills_25;
    26: Result:= Player_Kills_26;
    27: Result:= Player_Kills_27;
    28: Result:= Player_Kills_28;
    29: Result:= Player_Kills_29;
    30: Result:= Player_Kills_30;
    31: Result:= Player_Kills_31;
    32: Result:= Player_Kills_32;
  end;
end;

function IDtoTeam(PlayerID: integer):integer;
begin
  case PlayerID of
    1: Result:= Player_Team_1;
    2: Result:= Player_Team_2;
    3: Result:= Player_Team_3;
    4: Result:= Player_Team_4;
    5: Result:= Player_Team_5;
    6: Result:= Player_Team_6;
    7: Result:= Player_Team_7;
    8: Result:= Player_Team_8;
    9: Result:= Player_Team_9;
    10: Result:= Player_Team_10;
    11: Result:= Player_Team_11;
    12: Result:= Player_Team_12;
    13: Result:= Player_Team_13;
    14: Result:= Player_Team_14;
    15: Result:= Player_Team_15;
    16: Result:= Player_Team_16;
    17: Result:= Player_Team_17;
    18: Result:= Player_Team_18;
    19: Result:= Player_Team_19;
    20: Result:= Player_Team_20;
    21: Result:= Player_Team_21;
    22: Result:= Player_Team_22;
    23: Result:= Player_Team_23;
    24: Result:= Player_Team_24;
    25: Result:= Player_Team_25;
    26: Result:= Player_Team_26;
    27: Result:= Player_Team_27;
    28: Result:= Player_Team_28;
    29: Result:= Player_Team_29;
    30: Result:= Player_Team_30;
    31: Result:= Player_Team_31;
    32: Result:= Player_Team_32;
  end;
end;

procedure switchPlayers(plrteam: byte; plramount: integer);
begin
  temp:=65535;
  for i:=1 to plramount do begin
    for j:=1 to NumPlayers do begin
      if((IDtoKills(j)<=temp)and(IDtoTeam(j)<>plrteam)) then begin
        temp:= IDtoKills(j);
        idtoswitch:=j;
      end;
    end;
    command('/setteam'+inttostr(plrteam)+' '+inttostr(idtoswitch));
  end;
end;

procedure AppOnIdle(Ticks: integer);
begin
  if Ticks mod(3600*CHECK_TIME)=0 then begin
    if BravoPlayers+2<=AlphaPlayers then begin switchPlayers(2,(AlphaPlayers-BravoPlayers)/2); end
     else if AlphaPlayers+2<=BravoPlayers then switchPlayers(1,(BravoPlayers-AlphaPlayers)/2);
  end;
end;

procedure OnCommand(ID: integer;Text: string);
begin
  if Text = '/sbalance' then begin
    if BravoPlayers+2<=AlphaPlayers then begin switchPlayers(2,(AlphaPlayers-BravoPlayers)/2); end
     else if AlphaPlayers+2<=BravoPlayers then switchPlayers(1,(BravoPlayers-AlphaPlayers)/2);
  end;
end;

Offline Toumaz

  • Veteran
  • *****
  • Posts: 1906
Re: [Request] Teambalancer
« Reply #1 on: July 23, 2007, 03:17:35 am »
This should hopefully work properly (I haven't really tested it thoroughly):

Code: [Select]
const
  CHECK_TIME = 2;

var
  i,j,temp,idtoswitch: integer;

procedure switchPlayers(plrteam: byte; plramount: integer);
begin
  temp:=65535;
  for i:=1 to plramount do begin
    for j:=1 to NumPlayers do begin
      if (GetPlayerStat(j,'kills') <= temp) and (GetPlayerStat(j,'team') <> plrteam) then begin
        temp:=GetPlayerStat(j,'kills');
        idtoswitch:=j;
      end;
    end;
    command('/setteam'+inttostr(plrteam)+' '+inttostr(idtoswitch));
  end;
end;

procedure AppOnIdle(Ticks: integer);
begin
  if Ticks mod(3600*CHECK_TIME)=0 then begin
    if BravoPlayers+2<=AlphaPlayers then begin switchPlayers(2,(AlphaPlayers-BravoPlayers)/2); end
     else if AlphaPlayers+2<=BravoPlayers then switchPlayers(1,(BravoPlayers-AlphaPlayers)/2);
  end;
end;

function OnCommand(ID: Byte; Text: string): boolean;
begin
  if Text = '/sbalance' then begin
    if BravoPlayers+2<=AlphaPlayers then begin switchPlayers(2,(AlphaPlayers-BravoPlayers)/2); end
     else if AlphaPlayers+2<=BravoPlayers then switchPlayers(1,(BravoPlayers-AlphaPlayers)/2);
  end;
end;

Offline Silnikos

  • Soldier
  • **
  • Posts: 129
Re: [Request] Teambalancer
« Reply #2 on: July 23, 2007, 03:46:14 am »
Nothing happens when i do /sbalance... :/

Offline Toumaz

  • Veteran
  • *****
  • Posts: 1906
Re: [Request] Teambalancer
« Reply #3 on: July 23, 2007, 03:55:38 am »
It seems to be working fine for me.

Just to make sure you're doing it properly: Go use the Script Combiner. Tick "Use template" and pop the script I posted in the editbox on the right. Save the result in a .pas file in the script directory, add the filename of it in includes.txt. And, of course, Scripting=1 in server.ini. You need to be admin in the server as well.

Offline Silnikos

  • Soldier
  • **
  • Posts: 129
Re: [Request] Teambalancer
« Reply #4 on: July 23, 2007, 03:59:29 am »
Yeah, i know all that, i own dedicated server in germany and im actually using few other scripts, i'll try to redo it all again, maybe i made a mistake somewhere.

EDIT: I've used the template + it and it works now, so the problem is i did something wrong adding the script ;).
Thanks a lot, now im going to re-add it.
« Last Edit: July 23, 2007, 04:08:23 am by Silnikos »

Offline SkyBoy

  • Major(1)
  • Posts: 4
  • To be or not to be... that is the question.
Re: [Request] Teambalancer
« Reply #5 on: September 28, 2007, 12:42:15 am »
ага, что-то нефига не робит! +1

Offline Kitty

  • Major
  • *
  • Posts: 60
Re: [Request] Teambalancer
« Reply #6 on: September 28, 2007, 11:37:41 am »
Why dont u just use ARSSE? ARSSE has team balance.  ::)
-A female soldat player.


Offline Silnikos

  • Soldier
  • **
  • Posts: 129
Re: [Request] Teambalancer
« Reply #7 on: September 29, 2007, 12:59:17 am »
Just because ARSSE sux on scripting? I use server-side scripting, so why should i run arsse only for teambalancer?
Yes it can balance teams, but only if its running. If you own dedicated server its better to have server-side scripting, which is 24/7.

Offline BurnedKirby

  • Major(1)
  • Posts: 39
Re: [Request] Teambalancer
« Reply #8 on: September 29, 2007, 05:50:40 pm »
Isn't this an old topic? Why has it been bumped up? Anyway, ARSSE may be a good idea, but seriously, why bump up this old topic?