Update of /cvsroot/netrek/server/Vanilla/ntserv
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15815/ntserv
Modified Files:
daemonII.c death.c detonate.c getentry.c phaser.c torp.c
Log Message:
conquer gloating
Index: getentry.c
===================================================================
RCS file: /cvsroot/netrek/server/Vanilla/ntserv/getentry.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- getentry.c 21 Mar 2005 10:17:17 -0000 1.2
+++ getentry.c 23 Apr 2006 13:30:41 -0000 1.3
@@ -144,6 +144,7 @@
(me->p_team != ALLTEAM) &&
(switching != teamPick) &&
(me->p_whydead != KGENOCIDE) &&
+ (me->p_whydead != KWINNER) &&
(me->p_whydead != KPROVIDENCE) ) {
switching = teamPick;
new_warning(10,"Please confirm change of teams. Select the new team again.");
@@ -277,7 +278,7 @@
/* Is the server closed, or did the daemond die. */
if ((!time_access()) || !(status->gameup & GU_GAMEOK)) return 0;
/* You must leave */
- if (mustexit) return (0);
+ if (mustexit) return 0;
/* Special modes */
if (chaos || topgun) return (allteams);
/* Only continue if the queue has mask restrictions */
Index: phaser.c
===================================================================
RCS file: /cvsroot/netrek/server/Vanilla/ntserv/phaser.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- phaser.c 21 Mar 2005 05:23:44 -0000 1.1
+++ phaser.c 23 Apr 2006 13:30:41 -0000 1.2
@@ -29,6 +29,8 @@
U_LONG range_sq, this_range_sq;
struct phaser *mine = &phasers[me->p_no];
+ if (status->gameup & GU_GLOAT_CONQUER) return;
+
if (mine->ph_status != PHFREE) {
new_warning(32, "Phasers have not recharged.");
return;
Index: death.c
===================================================================
RCS file: /cvsroot/netrek/server/Vanilla/ntserv/death.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- death.c 21 Mar 2005 05:23:43 -0000 1.1
+++ death.c 23 Apr 2006 13:30:41 -0000 1.2
@@ -42,9 +42,14 @@
case TOURNEND:
case TOURNSTART:
break;
+ case KWINNER:
+ if ((queues[QU_PICKUP].q_flags & QU_OPEN) &&
+ (queues[QU_PICKUP].count > 0)){
+ mustexit = 1;
+ }
+ break;
case KQUIT:
case KDAEMON:
- case KWINNER:
case KOVER:
case KBADBIN:
mustexit = 1;
Index: torp.c
===================================================================
RCS file: /cvsroot/netrek/server/Vanilla/ntserv/torp.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- torp.c 21 Mar 2005 05:23:44 -0000 1.1
+++ torp.c 23 Apr 2006 13:30:41 -0000 1.2
@@ -53,6 +53,8 @@
static LONG last_torp_fired_update = 0;
struct torp *k;
+ if (status->gameup & GU_GLOAT_CONQUER) return;
+
/*
* Prevent player from firing more than one torp per update. */
if (me->p_updates == last_torp_fired_update)
Index: detonate.c
===================================================================
RCS file: /cvsroot/netrek/server/Vanilla/ntserv/detonate.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- detonate.c 21 Mar 2005 05:23:43 -0000 1.1
+++ detonate.c 23 Apr 2006 13:30:41 -0000 1.2
@@ -20,6 +20,8 @@
struct player *j;
struct torp *t;
+ if (status->gameup & GU_GLOAT_CONQUER) return;
+
if (me->p_fuel < myship->s_detcost) {
new_warning(UNDEF, "Not enough fuel to detonate");
return;
Index: daemonII.c
===================================================================
RCS file: /cvsroot/netrek/server/Vanilla/ntserv/daemonII.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- daemonII.c 23 Apr 2006 10:39:10 -0000 1.9
+++ daemonII.c 23 Apr 2006 13:30:41 -0000 1.10
@@ -101,6 +101,7 @@
static void exitDaemon(int sig);
static void save_planets(void);
static void checkgen(int loser, struct player *winner);
+static void gloat_conquer_timer();
static int checkwin(struct player *winner);
static void ghostmess(struct player *victim);
static void saveplayer(struct player *victim);
@@ -568,7 +569,7 @@
if (status->gameup & GU_PAUSED){ /* Game is paused */
if (fuse(PLAYERFUSE))
udplayerpause();
-
+ if (status->gameup & GU_GLOAT_CONQUER) gloat_conquer_timer();
signal_servers();
(void) SIGNAL(SIGALRM, move);
return;
@@ -3709,6 +3710,105 @@
/* constants (now in defs.h). 30-60 min for a coup. 4/15/92 TC */
}
+#define GLOAT_TIMER_BEGIN 100
+#define GLOAT_TIMER_DECLOAK 90
+#define GLOAT_TIMER_PARADE 40
+#define GLOAT_TIMER_GOODBYE 10
+
+int gloat_player;
+int gloat_planet;
+int gloat_timer;
+
+static void gloat_conquer_decloak()
+{
+ int h;
+ struct player *j;
+
+ for (h = 0, j = &players[0]; h < MAXPLAYER; h++, j++) {
+ if (j->p_status == PFREE) continue;
+ if (j->p_flags & PFCLOAK) {
+ j->p_flags &= ~PFCLOAK;
+ // players[i].p_cloakphase--;
+ }
+ }
+}
+
+static void gloat_conquer_parade()
+{
+ int i, h;
+ struct player *j;
+
+ for (i = 0, h = 0, j = &players[0]; h < MAXPLAYER; h++, j++) {
+ if (j->p_status == PFREE) continue;
+ if (j->p_no == gloat_player) continue;
+ i++;
+ }
+ for (h = 0, j = &players[0]; h < MAXPLAYER; h++, j++) {
+ if (j->p_status == PFREE) continue;
+ if (j->p_no == gloat_player) continue;
+ j->p_dir = h*256/i;
+ j->p_desdir = j->p_dir;
+ j->p_x = planets[gloat_planet].pl_x + (ORBDIST * 5)
+ * Cos[(u_char) (j->p_dir - (u_char) 64)];
+ j->p_y = planets[gloat_planet].pl_y + (ORBDIST * 5)
+ * Sin[(u_char) (j->p_dir - (u_char) 64)];
+ }
+}
+
+static void gloat_conquer_kill()
+{
+ int h;
+ struct player *j;
+
+ for (h = 0, j = &players[0]; h < MAXPLAYER; h++, j++) {
+ if (j->p_status == PFREE) continue;
+#ifdef NEWBIESERVER
+ /* Don't kill newbie robot. */
+ if (status->gameup & GU_NEWBIE && j->p_flags & PFROBOT) continue;
+#endif
+#ifdef PRETSERVER
+ /* Don't kill pre-T robot. */
+ if (status->gameup & GU_PRET && j->p_flags & PFROBOT) continue;
+#endif
+ j->p_status = PEXPLODE;
+ j->p_whydead = KWINNER;
+ j->p_whodead = gloat_player;
+ if (j->p_ship.s_type == STARBASE)
+ j->p_explode = 2*SBEXPVIEWS/PLAYERFUSE;
+ else
+ j->p_explode = 10/PLAYERFUSE;
+ j->p_ntorp = 0;
+ j->p_nplasmatorp = 0;
+ }
+}
+
+static void gloat_conquer_reset()
+{
+ int i;
+
+ doResources();
+ ERROR(2,("Resetting galaxy after Conquer.\n"));
+ for (i = 0; i <= MAXTEAM; i++) {
+ teams[i].s_turns = 0;
+ teams[i].s_surrender = 0;
+ }
+}
+
+static void gloat_conquer_timer()
+{
+ gloat_timer--;
+ if (gloat_timer == GLOAT_TIMER_DECLOAK)
+ gloat_conquer_decloak();
+ if (gloat_timer == GLOAT_TIMER_PARADE)
+ gloat_conquer_parade();
+ if (gloat_timer == GLOAT_TIMER_GOODBYE)
+ pmessage(0, MALL, "GOD->ALL", "Goodbye.");
+ if (gloat_timer > 0) return;
+
+ status->gameup &= ~(GU_PAUSED|GU_GLOAT_CONQUER);
+ gloat_conquer_kill();
+ gloat_conquer_reset();
+}
/* This function is called when a planet has been taken over.
It checks all the planets to see if the victory conditions
@@ -3768,35 +3868,12 @@
for (i = 0; i < 4; i++) {
if (team[1<<i] >= VICTORY) {
- /* We have a winning team */
conquerMessage(winner->p_team);
- for (h = 0, j = &players[0]; h < MAXPLAYER; h++, j++) {
- if (j->p_status == PFREE) continue;
-#ifdef NEWBIESERVER
- /* Don't kill newbie robot. */
- if (status->gameup & GU_NEWBIE && j->p_flags & PFROBOT) continue;
-#endif
-#ifdef PRETSERVER
- /* Don't kill pre-T robot. */
- if (status->gameup & GU_PRET && j->p_flags & PFROBOT) continue;
-#endif
- j->p_status = PEXPLODE;
- j->p_whydead = KWINNER;
- j->p_whodead = winner->p_no;
- if (j->p_ship.s_type == STARBASE)
- j->p_explode = 2*SBEXPVIEWS/PLAYERFUSE;
- else
- j->p_explode = 10/PLAYERFUSE;
- j->p_ntorp = 0;
- j->p_nplasmatorp = 0;
- }
- doResources();
- ERROR(2,("Resetting galaxy after Conquer.\n"));
- for (i = 0; i <= MAXTEAM; i++) {
- teams[i].s_turns = 0;
- teams[i].s_surrender = 0;
- }
- return 1;
+ status->gameup |= GU_GLOAT_CONQUER|GU_PAUSED;
+ gloat_player = winner->p_no;
+ gloat_planet = winner->p_planet;
+ gloat_timer = GLOAT_TIMER_BEGIN;
+ return 1;
}
}
return 0;
@@ -4213,7 +4290,7 @@
for (i = 0, j = &players[0]; i < MAXPLAYER; i++, j++) {
if (j->p_team != team || j->p_status == PFREE) continue;
#ifdef GENO_COUNT
- if (type==KWINNER) j->p_stats.st_genos++;
+ if (type == KWINNER) j->p_stats.st_genos++;
#endif
if (type == KGENOCIDE) {
planets=j->p_genoplanets;