forked from github/server
- hungernde, die einen NMR haben, arbeiteten nicht Crashbug falsche Messageparameter (Magie)
This commit is contained in:
parent
6e5da8ac25
commit
75ea8e150b
|
@ -3178,147 +3178,148 @@ new_units (void)
|
||||||
static void
|
static void
|
||||||
setdefaults (void)
|
setdefaults (void)
|
||||||
{
|
{
|
||||||
region *r;
|
region *r;
|
||||||
unit *u;
|
|
||||||
strlist *S;
|
|
||||||
|
|
||||||
for (r = regions; r; r = r->next){
|
for (r = regions; r; r = r->next) {
|
||||||
for (u = r->units; u; u = u->next) {
|
unit *u;
|
||||||
boolean trade = false;
|
|
||||||
|
|
||||||
set_string(&u->thisorder, u->lastorder);
|
for (u = r->units; u; u = u->next) {
|
||||||
for(S = u->orders; S; S = S->next) {
|
strlist *slist;
|
||||||
const char * cmd;
|
boolean trade = false;
|
||||||
keyword_t keyword = igetkeyword(S->s, u->faction->locale);
|
|
||||||
|
|
||||||
switch (keyword) {
|
if (LongHunger() && fval(u, UFL_HUNGER)) {
|
||||||
|
/* Hungernde Einheiten führen NUR den default-Befehl aus */
|
||||||
|
const char * cmd = locale_string(u->faction->locale, "defaultorder");
|
||||||
|
set_string(&u->thisorder, cmd);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/* Wenn gehandelt wird, darf kein langer Befehl ausgeführt
|
/* by default the default long order becomes the new long order. */
|
||||||
* werden. Da Handel erst nach anderen langen Befehlen kommt,
|
set_string(&u->thisorder, u->lastorder);
|
||||||
* muß das vorher abgefangen werden. Wir merken uns also
|
|
||||||
* hier, ob die Einheit handelt. */
|
/* check all orders for a potential new long order this round: */
|
||||||
|
for (slist=u->orders; !trade && slist!=NULL; slist=slist->next) {
|
||||||
|
const char * cmd = slist->s;
|
||||||
|
|
||||||
case K_BUY:
|
keyword_t keyword = igetkeyword(cmd, u->faction->locale);
|
||||||
case K_SELL:
|
switch (keyword) {
|
||||||
trade = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case K_CAST:
|
case K_BUY:
|
||||||
set_string(&u->thisorder, "");
|
case K_SELL:
|
||||||
break;
|
/* Wenn die Einheit handelt, muß der Default-Befehl gelöscht
|
||||||
/* dient dazu, das neben Zaubern kein weiterer Befehl
|
* werden. */
|
||||||
* ausgeführt werden kann, Zaubern ist ein kurzer Befehl */
|
set_string(&u->thisorder, "");
|
||||||
|
trade = true;
|
||||||
|
break;
|
||||||
|
|
||||||
/* Falls wir MACHE TEMP haben, ignorieren wir es. Alle anderen
|
case K_CAST:
|
||||||
* Arten von MACHE zaehlen aber als neue defaults und werden
|
/* dient dazu, das neben Zaubern kein weiterer Befehl
|
||||||
* behandelt wie die anderen (deswegen kein break nach case
|
* ausgeführt werden kann, Zaubern ist ein kurzer Befehl */
|
||||||
* K_MAKE) - und in thisorder (der aktuelle 30-Tage Befehl)
|
set_string(&u->thisorder, "");
|
||||||
* abgespeichert). */
|
break;
|
||||||
|
|
||||||
|
case K_MAKE:
|
||||||
|
/* Falls wir MACHE TEMP haben, ignorieren wir es. Alle anderen
|
||||||
|
* Arten von MACHE zaehlen aber als neue defaults und werden
|
||||||
|
* behandelt wie die anderen (deswegen kein break nach case
|
||||||
|
* K_MAKE) - und in thisorder (der aktuelle 30-Tage Befehl)
|
||||||
|
* abgespeichert). */
|
||||||
|
if (getparam(u->faction->locale) == P_TEMP) break;
|
||||||
|
/* else fall through */
|
||||||
|
|
||||||
case K_MAKE:
|
|
||||||
if (getparam(u->faction->locale) == P_TEMP) break;
|
|
||||||
case K_BESIEGE:
|
|
||||||
case K_ENTERTAIN:
|
|
||||||
case K_TAX:
|
|
||||||
case K_RESEARCH:
|
|
||||||
case K_SPY:
|
|
||||||
case K_STEAL:
|
|
||||||
case K_SABOTAGE:
|
|
||||||
case K_STUDY:
|
|
||||||
case K_TEACH:
|
|
||||||
case K_ZUECHTE:
|
|
||||||
#if GROWING_TREES
|
#if GROWING_TREES
|
||||||
case K_PFLANZE:
|
case K_PFLANZE:
|
||||||
#endif
|
#endif
|
||||||
case K_BIETE:
|
case K_BESIEGE:
|
||||||
case K_PIRACY:
|
case K_ENTERTAIN:
|
||||||
if (idle (u->faction)) {
|
case K_TAX:
|
||||||
set_string (&u->thisorder, locale_string(u->faction->locale, "defaultorder"));
|
case K_RESEARCH:
|
||||||
break;
|
case K_SPY:
|
||||||
}
|
case K_STEAL:
|
||||||
/* Ab hier Befehle, die auch eine idle
|
case K_SABOTAGE:
|
||||||
* Faction machen darf: */
|
case K_STUDY:
|
||||||
case K_ROUTE:
|
case K_TEACH:
|
||||||
case K_WORK:
|
case K_ZUECHTE:
|
||||||
case K_DRIVE:
|
case K_BIETE:
|
||||||
case K_MOVE:
|
case K_PIRACY:
|
||||||
case K_WEREWOLF:
|
/* Über dieser Zeile nur Befehle, die auch eine idle Faction machen darf */
|
||||||
cmd = S->s;
|
if (idle (u->faction)) {
|
||||||
if (LongHunger() && fval(u, UFL_HUNGER)) {
|
set_string (&u->thisorder, locale_string(u->faction->locale, "defaultorder"));
|
||||||
cmd = locale_string(u->faction->locale, "defaultorder");
|
break;
|
||||||
}
|
}
|
||||||
set_string(&u->thisorder, cmd);
|
/* else fall through */
|
||||||
break;
|
|
||||||
|
|
||||||
/* Wird je diese Ausschliesslichkeit aufgehoben, muss man aufpassen
|
case K_ROUTE:
|
||||||
* mit der Reihenfolge von Kaufen, Verkaufen etc., damit es Spielern
|
case K_WORK:
|
||||||
* nicht moeglich ist, Schulden zu machen. */
|
case K_DRIVE:
|
||||||
}
|
case K_MOVE:
|
||||||
}
|
case K_WEREWOLF:
|
||||||
|
set_string(&u->thisorder, cmd);
|
||||||
|
break;
|
||||||
|
|
||||||
/* Wenn die Einheit handelt, muß der Default-Befehl gelöscht
|
/* Wird je diese Ausschliesslichkeit aufgehoben, muss man aufpassen
|
||||||
* werden. */
|
* mit der Reihenfolge von Kaufen, Verkaufen etc., damit es Spielern
|
||||||
|
* nicht moeglich ist, Schulden zu machen. */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(trade == true) {
|
/* thisorder kopieren wir nun nach lastorder. in lastorder steht
|
||||||
/* fset(u, UFL_LONGACTION); */
|
* der DEFAULT befehl der einheit. da MOVE kein default werden
|
||||||
set_string(&u->thisorder, "");
|
* darf, wird MOVE nicht in lastorder kopiert. MACHE TEMP wurde ja
|
||||||
}
|
* schon gar nicht erst in thisorder kopiert, so dass MACHE TEMP
|
||||||
/* thisorder kopieren wir nun nach lastorder. in lastorder steht
|
* durch diesen code auch nicht zum default wird Ebenso soll BIETE
|
||||||
* der DEFAULT befehl der einheit. da MOVE kein default werden
|
* nicht hierher, da i.A. die Einheit dann ja weg ist (und damit
|
||||||
* darf, wird MOVE nicht in lastorder kopiert. MACHE TEMP wurde ja
|
* die Einheitsnummer ungueltig). Auch Attackiere sollte nie in
|
||||||
* schon gar nicht erst in thisorder kopiert, so dass MACHE TEMP
|
* den Default übernommen werden */
|
||||||
* durch diesen code auch nicht zum default wird Ebenso soll BIETE
|
switch (igetkeyword (u->thisorder, u->faction->locale)) {
|
||||||
* nicht hierher, da i.A. die Einheit dann ja weg ist (und damit
|
case K_MOVE:
|
||||||
* die Einheitsnummer ungueltig). Auch Attackiere sollte nie in
|
case K_BIETE:
|
||||||
* den Default übernommen werden */
|
case K_ATTACK:
|
||||||
|
case K_WEREWOLF:
|
||||||
|
case NOKEYWORD:
|
||||||
|
break;
|
||||||
|
|
||||||
switch (igetkeyword (u->thisorder, u->faction->locale)) {
|
default:
|
||||||
case K_MOVE:
|
set_string(&u->lastorder, u->thisorder);
|
||||||
case K_BIETE:
|
}
|
||||||
case K_ATTACK:
|
|
||||||
case K_WEREWOLF:
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
/* Attackiere sollte niemals Default werden */
|
||||||
set_string(&u->lastorder, u->thisorder);
|
if (igetkeyword(u->lastorder, u->faction->locale) == K_ATTACK) {
|
||||||
}
|
set_string(&u->lastorder, locale_string(u->faction->locale, "defaultorder"));
|
||||||
/* Attackiere sollte niemals Default werden */
|
}
|
||||||
if (igetkeyword(u->lastorder, u->faction->locale) == K_ATTACK)
|
}
|
||||||
set_string(&u->lastorder, locale_string(u->faction->locale, "defaultorder"));
|
}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
use_item(unit * u, const item_type * itype, int amount, const char * cmd)
|
use_item(unit * u, const item_type * itype, int amount, const char * cmd)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int target = read_unitid(u->faction, u->region);
|
int target = read_unitid(u->faction, u->region);
|
||||||
|
|
||||||
i = new_get_pooled(u, itype->rtype, GET_DEFAULT);
|
i = new_get_pooled(u, itype->rtype, GET_DEFAULT);
|
||||||
|
|
||||||
if (amount>i) {
|
if (amount>i) {
|
||||||
amount = i;
|
amount = i;
|
||||||
}
|
}
|
||||||
if (i==0) {
|
if (i==0) {
|
||||||
cmistake(u, cmd, 43, MSG_PRODUCE);
|
cmistake(u, cmd, 43, MSG_PRODUCE);
|
||||||
return ENOITEM;
|
return ENOITEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (target==-1) {
|
if (target==-1) {
|
||||||
if (itype->use==NULL) {
|
if (itype->use==NULL) {
|
||||||
cmistake(u, cmd, 76, MSG_PRODUCE);
|
cmistake(u, cmd, 76, MSG_PRODUCE);
|
||||||
return EUNUSABLE;
|
return EUNUSABLE;
|
||||||
}
|
}
|
||||||
return itype->use(u, itype, amount, cmd);
|
return itype->use(u, itype, amount, cmd);
|
||||||
} else {
|
} else {
|
||||||
if (itype->useonother==NULL) {
|
if (itype->useonother==NULL) {
|
||||||
cmistake(u, cmd, 76, MSG_PRODUCE);
|
cmistake(u, cmd, 76, MSG_PRODUCE);
|
||||||
return EUNUSABLE;
|
return EUNUSABLE;
|
||||||
}
|
}
|
||||||
return itype->useonother(u, target, itype, amount, cmd);
|
return itype->useonother(u, target, itype, amount, cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2824,7 +2824,7 @@ magic(void)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (range > 1024) { /* (2^10) weiter als 10 Regionen entfernt */
|
if (range > 1024) { /* (2^10) weiter als 10 Regionen entfernt */
|
||||||
ADDMSG(&u->faction->msgs, msg_message("spellfail::nolevel",
|
ADDMSG(&u->faction->msgs, msg_message("spellfail::nocontact",
|
||||||
"mage region command target", u, u->region, so->s,
|
"mage region command target", u, u->region, so->s,
|
||||||
gc_add(strdup(regionid(target_r)))));
|
gc_add(strdup(regionid(target_r)))));
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in New Issue