Пример #1
0
void report_summary(summary * s, summary * o, bool full)
{
  FILE *F = NULL;
  int i, newplayers = 0;
  faction *f;
  char zText[MAX_PATH];

  if (full) {
    sprintf(zText, "%s/parteien.full", basepath());
  } else {
    sprintf(zText, "%s/parteien", basepath());
  }
  F = fopen(zText, "w");
  if (!F) {
    perror(zText);
    return;
  }
#ifdef SUMMARY_BOM
  else {
    const unsigned char utf8_bom[4] = { 0xef, 0xbb, 0xbf, 0 };
    fwrite(utf8_bom, 1, 3, F);
  }
#endif
  log_info("writing summary to file: parteien.\n");
  fprintf(F, "%s\n%s\n\n", game_name(), gamedate2(default_locale));
  fprintf(F, "Auswertung Nr:         %d\n\n", turn);
  fprintf(F, "Parteien:              %s\n", pcomp(s->factions, o->factions));
  fprintf(F, "Einheiten:             %s\n", pcomp(s->nunits, o->nunits));
  fprintf(F, "Spielerpopulation:     %s\n", pcomp(s->playerpop, o->playerpop));
  fprintf(F, " davon bewaffnet:      %s\n", pcomp(s->armed_men, o->armed_men));
  fprintf(F, " Helden:               %s\n", pcomp(s->heroes, o->heroes));

  if (full) {
    fprintf(F, "Regionen:              %d\n", listlen(regions));
    fprintf(F, "Bewohnte Regionen:     %d\n", s->inhabitedregions);
    fprintf(F, "Landregionen:          %d\n", s->landregionen);
    fprintf(F, "Spielerregionen:       %d\n", s->regionen_mit_spielern);
    fprintf(F, "Landspielerregionen:   %d\n", s->landregionen_mit_spielern);
    fprintf(F, "Orkifizierte Regionen: %d\n", s->orkifizierte_regionen);
    fprintf(F, "Inaktive Vulkane:      %d\n", s->inactive_volcanos);
    fprintf(F, "Aktive Vulkane:        %d\n\n", s->active_volcanos);
  }

  for (i = 0; i < MAXRACES; i++) {
      if (i != RC_TEMPLATE && i != RC_CLONE && s->factionrace[i]) {
          const race *rc = get_race(i);
          if (rc && playerrace(rc)) {
              fprintf(F, "%13s%s: %s\n", LOC(default_locale, rc_name(rc, NAME_CATEGORY)),
                  LOC(default_locale, "stat_tribe_p"), pcomp(s->factionrace[i],
                  o->factionrace[i]));
          }
      }
  }

  if (full) {
    fprintf(F, "\n");
    {
      struct language *plang = s->languages;
      while (plang != NULL) {
        struct language *olang = o->languages;
        int nold = 0;
        while (olang && olang->locale != plang->locale)
          olang = olang->next;
        if (olang)
          nold = olang->number;
        fprintf(F, "Sprache %12s: %s\n", locale_name(plang->locale),
          rcomp(plang->number, nold));
        plang = plang->next;
      }
    }
  }

  fprintf(F, "\n");
  if (full) {
    for (i = 0; i < MAXRACES; i++) {
      if (s->poprace[i]) {
          const race *rc = get_race(i);
          fprintf(F, "%20s: %s\n", LOC(default_locale, rc_name(rc, NAME_PLURAL)),
          rcomp(s->poprace[i], o->poprace[i]));
      }
    }
  } else {
      for (i = 0; i < MAXRACES; i++) {
          if (i != RC_TEMPLATE && i != RC_CLONE && s->poprace[i]) {
              const race *rc = get_race(i);
              if (playerrace(rc)) {
                  fprintf(F, "%20s: %s\n", LOC(default_locale, rc_name(rc, NAME_PLURAL)),
                      rcomp(s->poprace[i], o->poprace[i]));
              }
          }
      }
    }

  if (full) {
    fprintf(F, "\nWaffen:               %s\n", pcomp(s->waffen, o->waffen));
    fprintf(F, "Ruestungen:           %s\n",
      pcomp(s->ruestungen, o->ruestungen));
    fprintf(F, "ungezaehmte Pferde:   %s\n", pcomp(s->pferde, o->pferde));
    fprintf(F, "gezaehmte Pferde:     %s\n",
      pcomp(s->spielerpferde, o->spielerpferde));
    fprintf(F, "Schiffe:              %s\n", pcomp(s->schiffe, o->schiffe));
    fprintf(F, "Gebaeude:             %s\n", pcomp(s->gebaeude, o->gebaeude));

    fprintf(F, "\nBauernpopulation:     %s\n", pcomp(s->peasants, o->peasants));

    fprintf(F, "Population gesamt:    %d\n\n", s->playerpop + s->peasants);

    fprintf(F, "Reichtum Spieler:     %s Silber\n",
      pcomp(s->playermoney, o->playermoney));
    fprintf(F, "Reichtum Bauern:      %s Silber\n",
      pcomp(s->peasantmoney, o->peasantmoney));
    fprintf(F, "Reichtum gesamt:      %s Silber\n\n",
      pcomp(s->playermoney + s->peasantmoney,
        o->playermoney + o->peasantmoney));
  }

  fprintf(F, "\n\n");

  newplayers = update_nmrs();

  for (i = 0; i <= NMRTimeout(); ++i) {
    if (i == NMRTimeout()) {
      fprintf(F, "+ NMR:\t\t %d\n", nmrs[i]);
    } else {
      fprintf(F, "%d NMR:\t\t %d\n", i, nmrs[i]);
    }
  }
  if (age) {
    if (age[2] != 0) {
      fprintf(F, "Erstabgaben:\t %d%%\n", 100 - (dropouts[0] * 100 / age[2]));
    }
    if (age[3] != 0) {
      fprintf(F, "Zweitabgaben:\t %d%%\n", 100 - (dropouts[1] * 100 / age[3]));
    }
  }
  fprintf(F, "Neue Spieler:\t %d\n", newplayers);

  if (full) {
    if (factions)
      fprintf(F, "\nParteien:\n\n");

    for (f = factions; f; f = f->next) {
      out_faction(F, f);
    }

    if (NMRTimeout() && full) {
      fprintf(F, "\n\nFactions with NMRs:\n");
      for (i = NMRTimeout(); i > 0; --i) {
        for (f = factions; f; f = f->next) {
          if (i == NMRTimeout()) {
            if (turn - f->lastorders >= i) {
              out_faction(F, f);
            }
          } else {
            if (turn - f->lastorders == i) {
              out_faction(F, f);
            }
          }
        }
      }
    }
  }

  fclose(F);

  if (full) {
    log_info("writing date & turn\n");
    writeturn();
  }
  free(nmrs);
  nmrs = NULL;
}
Пример #2
0
void report_summary(const summary * s, bool full)
{
    FILE *F = NULL;
    int newplayers = 0;
    faction *f;
    char zText[4096];
    int timeout = NMRTimeout();

    if (full) {
        path_join(basepath(), "parteien.full", zText, sizeof(zText));
    }
    else {
        path_join(basepath(), "parteien", zText, sizeof(zText));
    }
    F = fopen(zText, "w");
    if (!F) {
        perror(zText);
        return;
    }
#ifdef SUMMARY_BOM
    else {
        const unsigned char utf8_bom[4] = { 0xef, 0xbb, 0xbf, 0 };
        fwrite(utf8_bom, 1, 3, F);
    }
#endif
    log_info("writing summary to file: parteien.\n");
    fprintf(F, "%s\n%s\n\n", game_name(), gamedate2(default_locale));
    fprintf(F, "Auswertung Nr:         %8d\n\n", turn);
    fprintf(F, "Parteien:              %8d\n", s->factions);
    fprintf(F, "Einheiten:             %8d\n", s->nunits);
    fprintf(F, "Spielerpopulation:     %8d\n", s->playerpop);
    fprintf(F, " davon bewaffnet:      %8d\n", s->armed_men);
    fprintf(F, " Helden:               %8d\n", s->heroes);

    if (full) {
        fprintf(F, "Regionen:              %8d\n", (int)listlen(regions));
        fprintf(F, "Bewohnte Regionen:     %8d\n", s->inhabitedregions);
        fprintf(F, "Landregionen:          %8d\n", s->landregionen);
        fprintf(F, "Spielerregionen:       %8d\n", s->regionen_mit_spielern);
        fprintf(F, "Landspielerregionen:   %8d\n", s->landregionen_mit_spielern);
        fprintf(F, "Inaktive Vulkane:      %8d\n", s->inactive_volcanos);
        fprintf(F, "Aktive Vulkane:        %8d\n\n", s->active_volcanos);
    }

    summarize_players(s, F);

    if (full) {
        fprintf(F, "\n");
        {
            struct language *plang = s->languages;
            while (plang != NULL) {
                fprintf(F, "Sprache %2s:            %8d\n", locale_name(plang->locale),
                    plang->number);
                plang = plang->next;
            }
        }
    }

    fprintf(F, "\n");
    summarize_races(s, F, full);

    if (full) {
        fprintf(F, "\nWaffen:               %8d\n", s->waffen);
        fprintf(F, "Ruestungen:           %8d\n", s->ruestungen);
        fprintf(F, "ungezaehmte Pferde:   %8d\n", s->pferde);
        fprintf(F, "gezaehmte Pferde:     %8d\n", s->spielerpferde);
        fprintf(F, "Schiffe:              %8d\n", s->schiffe);
        fprintf(F, "Gebaeude:             %8d\n", s->gebaeude);

        fprintf(F, "\nBauernpopulation:     %8d\n", s->peasants);

        fprintf(F, "Population gesamt:    %8d\n\n", s->playerpop + s->peasants);

        fprintf(F, "Reichtum Spieler: %12lld Silber\n", s->playermoney);
        fprintf(F, "Reichtum Bauern:  %12lld Silber\n", s->peasantmoney);
        fprintf(F, "Reichtum gesamt:  %12lld Silber\n\n", 
            s->playermoney + s->peasantmoney);
    }

    fprintf(F, "\n");

    newplayers = update_nmrs();

    if (nmrs) {
        int i;
        for (i = 0; i <= timeout; ++i) {
            if (i == timeout) {
                fprintf(F, "+ NMR: %3d\n", nmrs[i]);
            }
            else {
                fprintf(F, "%d NMR: %3d\n", i, nmrs[i]);
            }
        }
    }
    if (age) {
        if (age[2] != 0) {
            fprintf(F, "Erstabgaben:  %3d%%\n", 100 - (dropouts[0] * 100 / age[2]));
        }
        if (age[3] != 0) {
            fprintf(F, "Zweitabgaben: %3d%%\n", 100 - (dropouts[1] * 100 / age[3]));
        }
    }
    fprintf(F, "Neue Spieler: %d\n", newplayers);

    if (full) {
        if (factions) {
            fprintf(F, "\nParteien:\n\n");
            for (f = factions; f; f = f->next) {
                out_faction(F, f);
            }
        }

        if (timeout>0 && full) {
            int i;
            fprintf(F, "\n\nFactions with NMRs:\n");
            for (i = timeout; i > 0; --i) {
                for (f = factions; f; f = f->next) {
                    if (i == timeout) {
                        if (turn - f->lastorders >= i) {
                            out_faction(F, f);
                        }
                    }
                    else {
                        if (turn - f->lastorders == i) {
                            out_faction(F, f);
                        }
                    }
                }
            }
        }
    }

    fclose(F);

    if (full) {
        log_info("writing date & turn\n");
        writeturn();
    }
    free(nmrs);
    nmrs = NULL;
}