tPlayers that have left fights (or are killed) are now marked as such in GUI client; player lists properly updated on server termination and switch to single-player mode - vaccinewars - be a doctor and try to vaccinate the world
git clone git://src.adamsgaard.dk/vaccinewars
Log
Files
Refs
README
LICENSE
---
commit dc982dd81a76f2a8fcc599bdfe23552a230638de
parent d1e4cc1a14d5d36bd7c653f6819579fcd8c2d70c
Author: Ben Webb 
Date:   Sat, 12 Jan 2002 18:28:16 +0000

Players that have left fights (or are killed) are now marked as such in GUI
client; player lists properly updated on server termination and switch to
single-player mode


Diffstat:
  M src/gtk_client.c                    |      51 ++++++++++++++++++++++---------

1 file changed, 36 insertions(+), 15 deletions(-)
---
diff --git a/src/gtk_client.c b/src/gtk_client.c
t@@ -326,6 +326,7 @@ void GetClientMessage(gpointer data,gint socket,
        g_warning(_("Connection to server lost - switching to "
                  "single player mode"));
        SwitchToSinglePlayer(ClientData.Play);
+       UpdatePlayerLists();
        UpdateMenus();
      } else {
        ShutdownNetworkBuffer(&ClientData.Play->NetBuf);
t@@ -381,6 +382,7 @@ void HandleClientMessage(char *pt,Player *Play) {
          g_warning(_("You have been pushed from the server.\n"
                      "Switching to single player mode."));
          SwitchToSinglePlayer(Play);
+         UpdatePlayerLists();
          UpdateMenus();
          break;
       case C_QUIT:
t@@ -388,6 +390,7 @@ void HandleClientMessage(char *pt,Player *Play) {
          g_warning(_("The server has terminated.\n"
                      "Switching to single player mode."));
          SwitchToSinglePlayer(Play);
+         UpdatePlayerLists();
          UpdateMenus();
          break;
       case C_NEWNAME:
t@@ -806,7 +809,8 @@ static void UpdateCombatant(gchar *DefendName,int DefendBitches,
                             gchar *BitchName,int DefendHealth) {
 /* Updates the display of information for a player/cop in the Fight dialog. */
 /* If the player's name (DefendName) already exists, updates the display of */
-/* total health and number of bitches - otherwise, adds a new entry.        */
+/* total health and number of bitches - otherwise, adds a new entry. If     */
+/* DefendBitches is -1, then the player has left.                           */
    guint i,RowIndex;
    gchar *name;
    struct combatant *compt;
t@@ -847,23 +851,33 @@ static void UpdateCombatant(gchar *DefendName,int DefendBitches,
                                DefendBitches,BitchName);
 
 /* Display of health during combat */
-   HealthText=g_strdup_printf(_("Health: %d"),DefendHealth);
+   if (DefendBitches == -1) {
+     HealthText = g_strdup(_("(Left)"));
+   } else if (DefendHealth == 0 && DefendBitches == 0) {
+     HealthText = g_strdup(_("(Dead)"));
+   } else {
+     HealthText=g_strdup_printf(_("Health: %d"),DefendHealth);
+   }
 
    ProgPercent=(gfloat)DefendHealth/100.0;
 
    if (compt->name) {
-      if (DefendName[0]) gtk_label_set_text(GTK_LABEL(compt->name),DefendName);
-      gtk_label_set_text(GTK_LABEL(compt->bitches),BitchText);
-      gtk_label_set_text(GTK_LABEL(compt->healthlabel),HealthText);
-      gtk_progress_bar_update(GTK_PROGRESS_BAR(compt->healthprog),
-                              ProgPercent);
+     if (DefendName[0]) {
+       gtk_label_set_text(GTK_LABEL(compt->name),DefendName);
+     }
+     if (DefendBitches>=0) {
+       gtk_label_set_text(GTK_LABEL(compt->bitches),BitchText);
+     }
+     gtk_label_set_text(GTK_LABEL(compt->healthlabel),HealthText);
+     gtk_progress_bar_update(GTK_PROGRESS_BAR(compt->healthprog),
+                             ProgPercent);
    } else {
 /* Display of the current player's name during combat */
       compt->name = gtk_label_new(DefendName[0] ? DefendName : _("You"));
 
       gtk_table_attach_defaults(GTK_TABLE(table),compt->name,0,1,
                                 RowIndex,RowIndex+1);
-      compt->bitches = gtk_label_new(BitchText);
+      compt->bitches = gtk_label_new(DefendBitches>=0 ? BitchText : "");
       gtk_table_attach_defaults(GTK_TABLE(table),compt->bitches,1,2,
                                 RowIndex,RowIndex+1);
       compt->healthprog = gtk_progress_bar_new();
t@@ -937,13 +951,20 @@ void DisplayFightMessage(char *Data) {
       ReceiveFightMessage(Data,&AttackName,&DefendName,&DefendHealth,
                           &DefendBitches,&BitchName,&BitchesKilled,&ArmPercent,
                           &fp,&CanRunHere,&Loot,&CanFire,&Message);
-      if (fp==F_HIT || fp==F_ARRIVED || fp==F_MISS) {
-         UpdateCombatant(DefendName,DefendBitches,BitchName,DefendHealth);
-      }
-      if (fp==F_LASTLEAVE) {
-         Play->Flags&= ~FIGHTING;
-      } else {
-         Play->Flags|=FIGHTING;
+      Play->Flags|=FIGHTING;
+      switch(fp) {
+        case F_HIT: case F_ARRIVED: case F_MISS:
+          UpdateCombatant(DefendName,DefendBitches,BitchName,DefendHealth);
+          break;
+        case F_LEAVE:
+          if (AttackName[0]) {
+            UpdateCombatant(AttackName,-1,BitchName,0);
+          }
+          break;
+        case F_LASTLEAVE:
+          Play->Flags&= ~FIGHTING;
+          break;
+        default:
       }
       accel_group=(GtkAccelGroup *)
              gtk_object_get_data(GTK_OBJECT(ClientData.window),"accel_group");