]> git.pond.sub.org Git - empserver/blobdiff - src/lib/commands/improve.c
commands: Rename the command functions
[empserver] / src / lib / commands / improve.c
index b84b7d4a3aa7e1921a6d34cb20766ac03448fbfe..fa135c7b9f99735817a9af4bb9419a623c2d64a3 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2016, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *  Copyright (C) 1986-2021, Dave Pare, Jeff Bailey, Thomas Ruschak,
  *                Ken Stevens, Steve McClure, Markus Armbruster
  *
  *  Empire is free software: you can redistribute it and/or modify
@@ -37,7 +37,7 @@
 #include "commands.h"
 
 int
-improve(void)
+c_improve(void)
 {
     struct sctintrins *incp;
     struct sctstr sect;
@@ -49,10 +49,8 @@ improve(void)
     int type;
     int value;
     int ovalue;
-    int maxup, lim;
+    int maxup, i, lim;
     struct natstr *natp;
-    int lneeded;
-    int hneeded;
     int wanted;
 
     p = getstarg(player->argp[1],
@@ -104,26 +102,6 @@ improve(void)
            maxup = wanted;
        if (!maxup)
            continue;
-       lneeded = incp->in_lcms * maxup;
-       if (sect.sct_item[I_LCM] < lneeded) {
-           lneeded = sect.sct_item[I_LCM];
-           maxup = lneeded / incp->in_lcms;
-           if (maxup <= 0) {
-               pr("Not enough lcms in %s\n",
-                  xyas(sect.sct_x, sect.sct_y, player->cnum));
-               continue;
-           }
-       }
-       hneeded = incp->in_hcms * maxup;
-       if (sect.sct_item[I_HCM] < hneeded) {
-           hneeded = sect.sct_item[I_HCM];
-           maxup = hneeded / incp->in_hcms;
-           if (maxup <= 0) {
-               pr("Not enough hcms in %s\n",
-                  xyas(sect.sct_x, sect.sct_y, player->cnum));
-               continue;
-           }
-       }
 
        lim = (sect. sct_mobil - 1) * 100 / incp->in_bmobil;
        if (lim <= 0) {
@@ -134,6 +112,21 @@ improve(void)
        if (maxup > lim)
            maxup = lim;
 
+       for (i = I_NONE + 1; i <= I_MAX; i++) {
+           if (!incp->in_mat[i])
+               continue;
+           lim = sect.sct_item[i] * 100 / incp->in_mat[i];
+           if (lim <= 0) {
+               pr("Not enough %s in %s\n",
+                  ichr[i].i_name,
+                  xyas(sect.sct_x, sect.sct_y, player->cnum));
+           }
+           if (maxup > lim)
+               maxup = lim;
+       }
+       if (maxup <= 0)
+           continue;
+
        natp = getnatp(player->cnum);
        lim = (natp->nat_money - player->dolcost) * 100 / incp->in_cost;
        if (lim <= 0) {
@@ -144,10 +137,8 @@ improve(void)
        if (maxup > lim)
            maxup = lim;
 
-       lneeded = incp->in_lcms * maxup;
-       hneeded = incp->in_hcms * maxup;
-       sect.sct_item[I_LCM] -= lneeded;
-       sect.sct_item[I_HCM] -= hneeded;
+       for (i = I_NONE + 1; i <= I_MAX; i++)
+           sect.sct_item[i] -= roundavg(maxup * incp->in_mat[i] / 100.0);
        sect.sct_mobil -= roundavg(maxup * incp->in_bmobil / 100.0);
        player->dolcost += maxup * incp->in_cost / 100.0;
        ovalue = value;