- bessere Überprüfung, was denn der Spieler bei MACHE eigentlich gemeint hat.
This commit is contained in:
Enno Rehling 2004-09-29 22:17:49 +00:00
parent a43b493fce
commit 388216d6d3
1 changed files with 39 additions and 8 deletions

View File

@ -53,6 +53,7 @@
#include <util/attrib.h>
#include <util/base36.h>
#include <util/event.h>
#include <util/goodies.h>
#include <util/message.h>
/* libs includes */
@ -1503,6 +1504,7 @@ make_cmd(unit * u, struct order * ord)
int m;
const item_type * itype;
const char *s;
const struct locale * lang = u->faction->locale;
init_tokens(ord);
skip_token();
@ -1523,12 +1525,6 @@ make_cmd(unit * u, struct order * ord)
* thisorder abgespeichert werden - und auf den ist getstrtoken() beim
* aufruf von make geeicht */
itype = finditemtype(s, u->faction->locale);
if (itype!=NULL) {
create_item(u, itype, m);
return;
}
if (p == P_ROAD) {
direction_t d;
if(r->planep && fval(r->planep, PFL_NOBUILD)) {
@ -1556,7 +1552,38 @@ make_cmd(unit * u, struct order * ord)
return;
}
stype = findshiptype(s, u->faction->locale);
/* since the string can match several objects, like in 'academy' and
* 'academy of arts', we need to figure out what the player meant.
* This is not 100% safe.
*/
stype = findshiptype(s, lang);
btype = findbuildingtype(s, lang);
itype = finditemtype(s, lang);
if (itype!=NULL && (btype!=NULL || stype!=NULL)) {
if (itype->construction==NULL) {
/* if the item cannot be made, we probably didn't mean to make it */
itype = NULL;
} else if (stype!=NULL) {
const char * sname = LOC(lang, stype->name[0]);
const char * iname = LOC(lang, resourcename(itype->rtype, 0));
if (strlen(iname)<strlen(sname)) stype = NULL;
else itype = NULL;
} else {
const char * bname = LOC(lang, btype->_name);
const char * iname = LOC(lang, resourcename(itype->rtype, 0));
if (strlen(iname)<strlen(bname)) btype = NULL;
else itype = NULL;
}
}
if (btype!=NULL && stype!=NULL) {
const char * bname = LOC(lang, btype->_name);
const char * sname = LOC(lang, stype->name[0]);
if (strlen(sname)<strlen(bname)) btype = NULL;
else stype = NULL;
}
if (stype != NOSHIP) {
if(r->planep && fval(r->planep, PFL_NOBUILD)) {
cmistake(u, u->thisorder, 276, MSG_PRODUCE);
@ -1566,7 +1593,6 @@ make_cmd(unit * u, struct order * ord)
return;
}
btype = findbuildingtype(s, u->faction->locale);
if (btype != NOBUILDING) {
if(r->planep && fval(r->planep, PFL_NOBUILD)) {
cmistake(u, u->thisorder, 94, MSG_PRODUCE);
@ -1576,6 +1602,11 @@ make_cmd(unit * u, struct order * ord)
return;
}
if (itype!=NULL) {
create_item(u, itype, m);
return;
}
cmistake(u, u->thisorder, 125, MSG_PRODUCE);
}
/* ------------------------------------------------------------- */