Update of /cvsroot/netrek/server/Vanilla/ntserv
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3659/ntserv
Modified Files:
Makefile.in ntscmds.c
Log Message:
fix compilation errors on sequencer following previous commands.c change
Index: Makefile.in
===================================================================
RCS file: /cvsroot/netrek/server/Vanilla/ntserv/Makefile.in,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- Makefile.in 24 Apr 2006 10:12:17 -0000 1.6
+++ Makefile.in 6 May 2006 13:12:56 -0000 1.7
@@ -11,7 +11,7 @@
# libnetrek object files
-L_OBJS = bay.o \
+L_OBJS = balance.o bay.o \
coup.o \
data.o db.o detonate.o distress.o \
enter.o \
Index: ntscmds.c
===================================================================
RCS file: /cvsroot/netrek/server/Vanilla/ntserv/ntscmds.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- ntscmds.c 6 May 2006 12:06:39 -0000 1.10
+++ ntscmds.c 6 May 2006 13:12:56 -0000 1.11
@@ -42,10 +42,6 @@
void do_start_mars(void);
#endif
-#if defined (TRIPLE_PLANET_MAYHEM)
-void do_balance(void);
-void do_triple_planet_mayhem(void);
-#endif
void do_password(char *comm, struct message *mess);
void do_nodock(char *comm, struct message *mess);
void do_transwarp(char *comm, struct message *mess);
@@ -749,426 +745,6 @@
nowobble ? "on (new test mode)" : "off (classic mode)", nowobble, comm );
}
-#ifdef TRIPLE_PLANET_MAYHEM
-/*
-** 16-Jul-1994 James Cameron
-**
-** Balances teams according to player statistics.
-** Intended for use with Triple Planet Mayhem
-*/
-
-/*
-** Tell all that player will be moved
-*/
-static void moveallmsg(int p_no, int ours, int theirs, int p_value)
-{
- struct player *k = &players[p_no];
- pmessage(0, MALL, addr_mess(p_no, MALL),
- "Balance: %16s (slot %c, rating %.2f) is to join the %s",
- k->p_name, shipnos[p_no],
- (float) ( p_value / 100.0 ),
- team_name(ours));
-
- /* annoying compiler warning */
- if (theirs) ;
-}
-
-/*
-** Move a player to the specified team, if they are not yet there.
-** Make them peaceful with the new team, and hostile/at war with the
-** other team.
-*/
-static void move(int p_no, int ours, int theirs)
-{
- struct player *k = &players[p_no];
- int queue;
-
- if ( k->p_team != ours ) {
- pmessage(k->p_no, MINDIV, addr_mess(k->p_no,MINDIV),
- "%s: please SWAP SIDES to the --> %s <--", k->p_name, team_name(ours));
- }
- else {
- pmessage(k->p_no, MINDIV, addr_mess(k->p_no,MINDIV),
- "%s: please remain with the --> %s <--", k->p_name, team_name(ours));
- }
-
- printf("Balance: %16s (%s) is to join the %s\n",
- k->p_name, k->p_mapchars, team_name(ours));
-
- /* cope with a balance during INL pre-game, if we don't shift players who
- are on the QU_HOME or QU_AWAY queues then the queue masks will force
- them to join the team they were on anyway. */
- queue = ( ours == FED ) ? QU_HOME : QU_AWAY;
- if (k->w_queue != QU_PICKUP && k->w_queue != queue) {
- queues[k->w_queue].free_slots++;
- k->w_queue = queue;
- queues[k->w_queue].free_slots--;
- }
-
- k->p_hostile |= theirs;
- k->p_swar |= theirs;
- k->p_hostile &= ~ours;
- k->p_swar &= ~ours;
- k->p_war = (k->p_hostile | k->p_swar);
- k->p_team = ours;
- sprintf(k->p_mapchars, "%c%c", teamlet[k->p_team], shipnos[p_no]);
- sprintf(k->p_longname, "%s (%s)", k->p_name, k->p_mapchars);
-
- k->p_status = PEXPLODE;
- k->p_whydead = KPROVIDENCE; /* should be KTOURNSTART? */
- if (k->p_ship.s_type == STARBASE)
- k->p_explode = 2 * SBEXPVIEWS;
- else
- k->p_explode = 10;
- k->p_ntorp = 0;
- k->p_nplasmatorp = 0;
- k->p_hostile = (FED | ROM | ORI | KLI);
- k->p_war = (k->p_hostile | k->p_swar);
-}
-
-/*
-** Return two team masks corresponding to the teams of the first two
-** teams found in the player list.
-*/
-static void sides (int *one, int *two)
-{
- struct player *k;
- int i;
- int unseen;
-
- unseen = (FED | ROM | ORI | KLI);
- *one = 0;
- *two = 0;
- k = &players[0];
- for(i=0;i<MAXPLAYER;i++)
- {
- if ( (k->p_status != PFREE) && (!(k->p_flags & PFROBOT)))
- {
- if ( ( unseen & k->p_team ) != 0 )
- {
- if ( *one == 0 )
- {
- *one = k->p_team;
- unseen &= ~k->p_team;
- k++;
- continue;
- }
- *two = k->p_team;
- return;
- }
- }
- k++;
- }
-}
-
-/*
-** Calculate a player value
-*/
-static int value (struct player *k)
-{
- return
- (int)
- (
- (float)
- (
-#ifdef LTD_STATS
- ltd_bombing_rating(k) * BALANCE_BOMBING +
- ltd_planet_rating(k) * BALANCE_PLANET +
- ltd_defense_rating(k) * BALANCE_DEFENSE +
- ltd_offense_rating(k) * BALANCE_OFFENSE
-#else
- bombingRating(k) * BALANCE_BOMBING +
- planetRating(k) * BALANCE_PLANET +
- defenseRating(k) * BALANCE_DEFENSE +
- offenseRating(k) * BALANCE_OFFENSE
-#endif /* LTD_STATS */
- )
- );
-}
-
-/*
-** Balance the teams
-**
-** Uses an exhaustive algorithm (I'm exhausted!) to find the best combination
-** of the current players that balances the teams in terms of statistics.
-** The algorithm will support only the number of players that fits into the
-** number of bits in an int.
-**
-** If there are multiple "best" combinations, then the combination
-** involving the least number of team swaps will be chosen.
-*/
-void do_balance(void)
-{
- int i, j; /* miscellaneous counters */
- int records; /* number of players in game */
- int one; /* team number one mask */
- int two; /* team number two mask */
-
- struct player *k; /* pointer to current player */
-
- struct item
- {
- int p_no; /* player number */
- int p_value; /* calculated player value */
- int p_team; /* team player on previously */
- } list[MAXPLAYER]; /* working array */
-
- struct
- {
- int combination; /* combination number */
- int value; /* team balance difference */
- int one; /* team one total value */
- int two; /* team two total value */
- int swaps; /* number of swaps involved */
- } best; /* best team combination */
-
- /* which teams are playing? give up if only one found */
- sides ( &one, &two );
- if ( two == 0 )
- {
- /* addr_mess shouldn't be called with 0 as first arg
- * for MALL, but we don't have a player numer here.
- * Let addr_mess catch it. -da
- */
-
- pmessage ( 0, MALL, addr_mess(0 ,MALL),
- "Can't balance only one team!" );
- pmessage ( 0, MALL, addr_mess(0 ,MALL),
- "Please could somebody move to another team, then all vote again?" );
- return;
- }
-
- /* initialise best to worst case */
- best.combination = -1;
- best.value = 1<<30;
- best.one = 0;
- best.two = 0;
- best.swaps = 1<<30;
-
- /* reset working array */
- for(i=0;i<MAXPLAYER;i++)
- {
- list[i].p_no = 0;
- list[i].p_value = 0;
- }
-
- /* insert players in working array */
- records = 0;
- k = &players[0];
- for(i=0;i<MAXPLAYER;i++)
- {
- if ( (k->p_status != PFREE) && (!(k->p_flags & PFROBOT)))
- {
- list[records].p_no = k->p_no;
- list[records].p_value = value ( k );
- list[records].p_team = k->p_team;
- records++;
- }
- k++;
- }
-
- /* randomise the working array; may cause different team mixes */
- for(i=0;i<records;i++)
- {
- int a, b;
- struct item swapper;
-
- a = random() % records;
- b = random() % records;
-
- swapper = list[a];
- list[a] = list[b];
- list[b] = swapper;
- }
-
- /* loop for every _possible_ combination to find the best */
- for(i=0;i<(1<<records);i++)
- {
- int difference; /* difference in team total */
- int value_a, value_b; /* total stats per team */
- int count_a, count_b; /* total count of players on team */
- int swaps; /* number of swaps involved */
-
- /* if this a shadow combination already considered, ignore it */
- /* if ( ( i ^ ( ( 1<<records ) - 1 ) ) < i ) continue; */
- /* disabled - it will interfere with swap minimisation goal */
-
- /* is this combination an equal number of players each side? */
- count_a = 0;
- count_b = 0;
-
- for(j=0;j<records;j++)
- if((1<<j)&i)
- count_a++;
- else
- count_b++;
-
- /* skip this combination if teams are significantly unequal */
- if ( abs ( count_a - count_b ) > 1 ) continue;
-
- /* reset team total for attempt */
- value_a = 0;
- value_b = 0;
-
- /* calculate team total stats */
- for(j=0;j<records;j++)
- if((1<<j)&i)
- value_a += list[j].p_value;
- else
- value_b += list[j].p_value;
-
- /* calculate number of swaps this combination produces */
- swaps = 0;
- for(j=0;j<records;j++)
- if((1<<j)&i)
- {
- if ( list[j].p_team != one ) swaps++;
- }
- else
- {
- if ( list[j].p_team != two ) swaps++;
- }
-
- /* calculate difference in team total stats */
- difference = abs ( value_a - value_b );
-
- /* if this combo is better than the previous one we had,
- or the combo is the same and the number of swaps is lower... */
- if ( ( difference < best.value )
- || ( ( difference == best.value )
- && ( swaps < best.swaps ) ) )
- {
- /* remember it */
- best.value = difference;
- best.combination = i;
- best.one = value_a;
- best.two = value_b;
- best.swaps = swaps;
- }
- }
-
- /* don't do balance if not worth it */
- if ( best.swaps != 0 )
- {
- /* move players to their teams */
- for(j=0;j<records;j++)
- if ( (1<<j)&best.combination )
- move ( list[j].p_no, one, two );
- else
- move ( list[j].p_no, two, one );
-
- /* build messages to ALL about the results */
- for(j=0;j<records;j++)
- if ( (1<<j)&best.combination )
- moveallmsg ( list[j].p_no, one, two, list[j].p_value );
-
- /* addr_mess ignores first arg if second is MALL. -da
- */
-
- pmessage(0, MALL, addr_mess(0, MALL),
- "Balance: total rating %.2f",
- (float) ( best.one / 100.0 ) );
-
- for(j=0;j<records;j++)
- if ( !((1<<j)&best.combination) )
- moveallmsg ( list[j].p_no, two, one, list[j].p_value );
-
- pmessage(0, MALL, addr_mess(0, MALL),
- "Balance: total rating %.2f",
- (float) ( best.two / 100.0 ) );
- }
- else
- {
- pmessage ( 0, MALL, addr_mess(0, MALL),
- "No balance performed, this is the best: %-3s %.2f, %-3s %.2f",
- team_name(one), (float) ( best.one / 100.0 ),
- team_name(two), (float) ( best.two / 100.0 ) );
- }
-
-}
-
-void do_triple_planet_mayhem(void)
-{
- int i;
-
- /* balance the teams */
- do_balance();
-
- /* move all planets off the galaxy */
- for (i=0; i<MAXPLANETS; i++)
- {
- planets[i].pl_flags = 0;
- planets[i].pl_owner = 0;
- planets[i].pl_x = -10000;
- planets[i].pl_y = -10000;
- planets[i].pl_info = 0;
- planets[i].pl_armies = 0;
- strcpy ( planets[i].pl_name, "" );
- }
-
- /* disable Klingon and Orion teams; stop people from joining them */
- planets[20].pl_couptime = 999999; /* no Klingons */
- planets[30].pl_couptime = 999999; /* no Orions */
-
- /* initialise earth */
- i = 0;
- planets[i].pl_flags |= FED | PLHOME | PLCORE | PLAGRI | PLFUEL | PLREPAIR;
- planets[i].pl_x = 40000;
- planets[i].pl_y = 65000;
- planets[i].pl_armies = 40;
- planets[i].pl_info = FED;
- planets[i].pl_owner = FED;
- strcpy ( planets[i].pl_name, "Earth" );
-
- /* initialise romulus */
- i = 10;
- planets[i].pl_flags |= ROM | PLHOME | PLCORE | PLAGRI | PLFUEL | PLREPAIR;
- planets[i].pl_x = 40000;
- planets[i].pl_y = 35000;
- planets[i].pl_armies = 40;
- planets[i].pl_info = ROM;
- planets[i].pl_owner = ROM;
- strcpy ( planets[i].pl_name, "Romulus" );
-
- /* initialise indi */
- i = 18;
- planets[i].pl_flags |= PLFUEL | PLREPAIR;
- planets[i].pl_flags &= ~PLAGRI;
- planets[i].pl_x = 15980;
- planets[i].pl_y = 50000;
- planets[i].pl_armies = 4;
- planets[i].pl_info &= ~ALLTEAM;
- strcpy ( planets[i].pl_name, "Indi" );
-
- /* fix all planet name lengths */
- for (i=0; i<MAXPLANETS; i++)
- {
- planets[i].pl_namelen = strlen(planets[i].pl_name);
- }
-
- /* advise players */
- {
- char *list[] =
- {
- "Galaxy reset for triple planet mayhem!",
- "Rule 1: they take Indi, they win,",
- "Rule 2: they take your home planet, they win,",
- "Rule 3: you can't bomb Indi,",
- "Rule 4: you may bomb their home planet, and;",
- "Rule 5: all planets are FUEL & REPAIR, home planets are AGRI.",
- ""
- };
-
- for ( i=0; strlen(list[i])!=0; i++ )
-
- /* addr_mess ignores first arg for MALL. -da
- */
-
- pmessage ( 0, MALL, addr_mess(0,MALL), list[i] );
- }
-}
-#endif /* TRIPLE_PLANET_MAYHEM */
-
void do_password(char *comm, struct message *mess)
{
int who = mess->m_from;