diff --git a/src/buildno.h b/src/buildno.h index b04d7a51f..ddec7caa5 100644 --- a/src/buildno.h +++ b/src/buildno.h @@ -1,3 +1,3 @@ #define VERSION_MAJOR 3 #define VERSION_MINOR 4 -#define VERSION_BUILD 689 +#define VERSION_BUILD 691 diff --git a/src/economy.c b/src/economy.c index 02c609a73..692a8dfdf 100644 --- a/src/economy.c +++ b/src/economy.c @@ -1488,11 +1488,11 @@ static void create_item(unit * u, const item_type * itype, int want) int make_cmd(unit * u, struct order *ord) { region *r = u->region; - const building_type *btype; - const ship_type *stype; - param_t p; - int m; - const item_type *itype; + const building_type *btype = 0; + const ship_type *stype = 0; + const item_type *itype = 0; + param_t p = NOPARAM; + int m = INT_MAX; const char *s; const struct locale *lang = u->faction->locale; char ibuf[16]; @@ -1502,17 +1502,19 @@ int make_cmd(unit * u, struct order *ord) assert(kwd == K_MAKE); s = getstrtoken(); - m = atoi((const char *)s); - sprintf(ibuf, "%d", m); - if (!strcmp(ibuf, (const char *)s)) { - /* first came a want-paramter */ - s = getstrtoken(); + if (s) { + m = atoi((const char *)s); + sprintf(ibuf, "%d", m); + if (!strcmp(ibuf, (const char *)s)) { + /* a quantity was given */ + s = getstrtoken(); + } else { + m = INT_MAX; + } + if (s) { + p = findparam(s, u->faction->locale); + } } - else { - m = INT_MAX; - } - - p = findparam(s, u->faction->locale); if (p == P_ROAD) { plane *pl = rplane(r); @@ -1551,10 +1553,11 @@ int make_cmd(unit * u, struct order *ord) * '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 (s) { + 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 */ diff --git a/src/magic.c b/src/magic.c index 5a4cc6404..f31d6afb5 100644 --- a/src/magic.c +++ b/src/magic.c @@ -2580,7 +2580,7 @@ static castorder *cast_cmd(unit * u, order * ord) } s = getstrtoken(); } - if (!s[0] || strlen(s) == 0) { + if (!s || !s[0] || strlen(s) == 0) { /* Fehler "Es wurde kein Zauber angegeben" */ cmistake(u, ord, 172, MSG_MAGIC); return 0; diff --git a/src/move.c b/src/move.c index c4b6b4202..b7fa6feb4 100644 --- a/src/move.c +++ b/src/move.c @@ -914,6 +914,8 @@ static unit *bewegung_blockiert_von(unit * reisender, region * r) int sk = eff_skill(u, SK_PERCEPTION, r); if (invisible(reisender, u) >= reisender->number) continue; + if (!(u_race(u)->flags & RCF_FLY) && u_race(reisender)->flags & RCF_FLY) + continue; if ((u->faction == reisender->faction) || (ucontact(u, reisender)) || (alliedunit(u, reisender->faction, HELP_GUARD))) guard_count = guard_count - u->number; else if (sk >= stealth) { @@ -963,6 +965,8 @@ static bool is_guardian_u(const unit * guard, unit * u, unsigned int mask) return false; if (!cansee(guard->faction, u->region, u, 0)) return false; + if (!(u_race(guard)->flags & RCF_FLY) && u_race(u)->flags & RCF_FLY) + return false; return true; }