"Einheit konnte sich nach Kampf nicht bewegen"

Die KAEMPFE FLIEHE logik hat drauf vertraut, das movement nur nach UFL_NOTMOVING schaut, nicht nach LONGACTION. dafuer muss aber eine Menge getan werden, das nicht wurde. Jetzt aber...
This commit is contained in:
Enno Rehling 2007-03-11 22:18:58 +00:00
parent f9a39f6717
commit 4ea302940f
7 changed files with 65 additions and 65 deletions

View File

@ -1824,7 +1824,7 @@ expandbuying(region * r, request * buyorders)
trade->number = 0; trade->number = 0;
++trade->multi; ++trade->multi;
} }
fset(u, UFL_LONGACTION); fset(u, UFL_LONGACTION|UFL_NOTMOVING);
} }
} }
free(oa); free(oa);
@ -2072,7 +2072,7 @@ expandselling(region * r, request * sellorders, int limit)
} }
u->n += price; u->n += price;
change_money(u, price); change_money(u, price);
fset(u, UFL_LONGACTION); fset(u, UFL_LONGACTION|UFL_NOTMOVING);
/* r->money -= price; --- dies wird eben nicht ausgeführt, denn die /* r->money -= price; --- dies wird eben nicht ausgeführt, denn die
* Produkte können auch als Steuern eingetrieben werden. In der Region * Produkte können auch als Steuern eingetrieben werden. In der Region
@ -2319,7 +2319,7 @@ expandstealing(region * r, request * stealorders)
ADDMSG(&u->faction->msgs, msg_message("stealeffect", "unit region amount", u, u->region, n)); ADDMSG(&u->faction->msgs, msg_message("stealeffect", "unit region amount", u, u->region, n));
} }
add_income(oa[i].unit, IC_STEAL, oa[i].unit->wants, oa[i].unit->n); add_income(oa[i].unit, IC_STEAL, oa[i].unit->wants, oa[i].unit->n);
fset(oa[i].unit, UFL_LONGACTION); fset(oa[i].unit, UFL_LONGACTION|UFL_NOTMOVING);
} }
free(oa); free(oa);
} }
@ -2822,7 +2822,7 @@ expandentertainment(region * r)
/* Nur soviel PRODUCEEXP wie auch tatsächlich gemacht wurde */ /* Nur soviel PRODUCEEXP wie auch tatsächlich gemacht wurde */
produceexp(u, SK_ENTERTAINMENT, min(u->n, u->number)); produceexp(u, SK_ENTERTAINMENT, min(u->n, u->number));
add_income(u, IC_ENTERTAIN, o->qty, u->n); add_income(u, IC_ENTERTAIN, o->qty, u->n);
fset(u, UFL_LONGACTION); fset(u, UFL_LONGACTION|UFL_NOTMOVING);
} }
} }
@ -2915,7 +2915,7 @@ expandwork(region * r)
change_money(u, u->n); change_money(u, u->n);
working -= o->unit->number; working -= o->unit->number;
add_income(u, IC_WORK, o->qty, u->n); add_income(u, IC_WORK, o->qty, u->n);
fset(u, UFL_LONGACTION); fset(u, UFL_LONGACTION|UFL_NOTMOVING);
} }
n = m * p_wage; n = m * p_wage;
@ -2987,7 +2987,7 @@ expandtax(region * r, request * taxorders)
for (u = r->units; u; u = u->next) { for (u = r->units; u; u = u->next) {
if (u->n >= 0) { if (u->n >= 0) {
add_income(u, IC_TAX, u->wants, u->n); add_income(u, IC_TAX, u->wants, u->n);
fset(u, UFL_LONGACTION); fset(u, UFL_LONGACTION|UFL_NOTMOVING);
} }
} }
} }
@ -3121,7 +3121,7 @@ produce(void)
if (a && a->data.i) { if (a && a->data.i) {
produceexp(u, SK_TRADE, u->number); produceexp(u, SK_TRADE, u->number);
} }
fset(u, UFL_LONGACTION); fset(u, UFL_LONGACTION|UFL_NOTMOVING);
continue; continue;
} }
} }

View File

@ -3373,7 +3373,7 @@ setdefaults(unit *u)
* werden. */ * werden. */
if (trade == true) { if (trade == true) {
/* fset(u, UFL_LONGACTION); */ /* fset(u, UFL_LONGACTION|UFL_NOTMOVING); */
set_order(&u->thisorder, NULL); set_order(&u->thisorder, NULL);
} }
/* thisorder kopieren wir nun nach lastorder. in lastorder steht /* thisorder kopieren wir nun nach lastorder. in lastorder steht

View File

@ -720,7 +720,7 @@ learn_cmd(unit * u, order * ord)
a_remove(&u->attribs, a); a_remove(&u->attribs, a);
a = NULL; a = NULL;
} }
fset(u, UFL_LONGACTION); fset(u, UFL_LONGACTION|UFL_NOTMOVING);
/* Anzeigen neuer Tränke */ /* Anzeigen neuer Tränke */
/* Spruchlistenaktualiesierung ist in Regeneration */ /* Spruchlistenaktualiesierung ist in Regeneration */

View File

@ -2596,7 +2596,7 @@ aftermath(battle * b)
du->hp = df->run.hp; du->hp = df->run.hp;
set_order(&du->thisorder, NULL); set_order(&du->thisorder, NULL);
setguard(du, GUARD_NONE); setguard(du, GUARD_NONE);
fset(du, UFL_LONGACTION); fset(du, UFL_LONGACTION|UFL_NOTMOVING);
#ifdef SIMPLE_ESCAPE #ifdef SIMPLE_ESCAPE
if (du->status<=ST_FLEE) leave(du->region, du); if (du->status<=ST_FLEE) leave(du->region, du);
#else #else

View File

@ -2698,7 +2698,7 @@ magic(void)
add_castorder(&cll[(int)(sp->rank)], co); add_castorder(&cll[(int)(sp->rank)], co);
} }
} }
if (casted) fset(u, UFL_LONGACTION); if (casted) fset(u, UFL_LONGACTION|UFL_NOTMOVING);
} }
} }

View File

@ -94,7 +94,7 @@ get_followers(unit * target, region * r, region_list * route_end, follower ** fo
{ {
unit * uf; unit * uf;
for (uf=r->units;uf;uf=uf->next) { for (uf=r->units;uf;uf=uf->next) {
if (fval(uf, UFL_FOLLOWING) && !fval(uf, UFL_LONGACTION)) { if (fval(uf, UFL_FOLLOWING) && !fval(uf, UFL_NOTMOVING)) {
const attrib * a = a_findc(uf->attribs, &at_follow); const attrib * a = a_findc(uf->attribs, &at_follow);
if (a && a->data.v == target) { if (a && a->data.v == target) {
follower * fnew = malloc(sizeof(follower)); follower * fnew = malloc(sizeof(follower));
@ -997,7 +997,7 @@ init_transportation(void)
* K_DRIVE. This is time consuming for an error check, but there * K_DRIVE. This is time consuming for an error check, but there
* doesn't seem to be an easy way to speed this up. */ * doesn't seem to be an easy way to speed this up. */
for (u=r->units; u; u=u->next) { for (u=r->units; u; u=u->next) {
if (get_keyword(u->thisorder) == K_DRIVE && can_move(u) && !fval(u, UFL_LONGACTION) && !LongHunger(u)) { if (get_keyword(u->thisorder) == K_DRIVE && can_move(u) && !fval(u, UFL_NOTMOVING) && !LongHunger(u)) {
unit * ut; unit * ut;
init_tokens(u->thisorder); init_tokens(u->thisorder);
@ -1034,7 +1034,7 @@ init_transportation(void)
unit * ut = getunit(r, u->faction); unit * ut = getunit(r, u->faction);
if (ut == NULL) break; if (ut == NULL) break;
if (get_keyword(ut->thisorder) == K_DRIVE && can_move(ut) && !fval(ut, UFL_LONGACTION) && !LongHunger(ut)) { if (get_keyword(ut->thisorder) == K_DRIVE && can_move(ut) && !fval(ut, UFL_NOTMOVING) && !LongHunger(ut)) {
init_tokens(ut->thisorder); init_tokens(ut->thisorder);
skip_token(); skip_token();
if (getunit(r, ut->faction) == u) { if (getunit(r, ut->faction) == u) {
@ -1507,7 +1507,7 @@ travel_route(unit * u, region_list * route_begin, region_list * route_end, order
/* make orders for the followers */ /* make orders for the followers */
} }
fset(u, UFL_LONGACTION); fset(u, UFL_LONGACTION|UFL_NOTMOVING);
setguard(u, GUARD_NONE); setguard(u, GUARD_NONE);
assert(u->region == current); assert(u->region == current);
return iroute; return iroute;
@ -1961,7 +1961,7 @@ travel_i(unit * u, region_list * route_begin, region_list * route_end, order * o
if (ut!=NULL) { if (ut!=NULL) {
boolean found = false; boolean found = false;
if (get_keyword(ut->thisorder) == K_DRIVE && can_move(ut)) { if (get_keyword(ut->thisorder) == K_DRIVE && can_move(ut)) {
if (!fval(ut, UFL_LONGACTION) && !LongHunger(ut)) { if (!fval(ut, UFL_NOTMOVING) && !LongHunger(ut)) {
init_tokens(ut->thisorder); init_tokens(ut->thisorder);
skip_token(); skip_token();
if (getunit(u->region, ut->faction) == u) { if (getunit(u->region, ut->faction) == u) {
@ -2076,7 +2076,7 @@ move(unit * u, boolean move_on_land)
travel(u, &route); travel(u, &route);
} }
fset(u, UFL_LONGACTION); fset(u, UFL_LONGACTION|UFL_NOTMOVING);
set_order(&u->thisorder, NULL); set_order(&u->thisorder, NULL);
if (route!=NULL) free_regionlist(route); if (route!=NULL) free_regionlist(route);
@ -2281,23 +2281,23 @@ hunt(unit *u, order * ord)
char command[256]; char command[256];
direction_t dir; direction_t dir;
if (fval(u, UFL_LONGACTION)) { if (fval(u, UFL_NOTMOVING)) {
return 0; return 0;
} else if (u->ship == NULL) { } else if (u->ship == NULL) {
cmistake(u, ord, 144, MSG_MOVE); cmistake(u, ord, 144, MSG_MOVE);
fset(u, UFL_LONGACTION); /* FOLGE SCHIFF ist immer lang */ fset(u, UFL_LONGACTION|UFL_NOTMOVING); /* FOLGE SCHIFF ist immer lang */
return 0; return 0;
} else if (!fval(u, UFL_OWNER)) { } else if (!fval(u, UFL_OWNER)) {
cmistake(u, ord, 146, MSG_MOVE); cmistake(u, ord, 146, MSG_MOVE);
fset(u, UFL_LONGACTION); /* FOLGE SCHIFF ist immer lang */ fset(u, UFL_LONGACTION|UFL_NOTMOVING); /* FOLGE SCHIFF ist immer lang */
return 0; return 0;
} else if (fval(u, UFL_NOTMOVING)) { } else if (fval(u, UFL_NOTMOVING)) {
cmistake(u, ord, 319, MSG_MOVE); cmistake(u, ord, 319, MSG_MOVE);
fset(u, UFL_LONGACTION); /* FOLGE SCHIFF ist immer lang */ fset(u, UFL_LONGACTION|UFL_NOTMOVING); /* FOLGE SCHIFF ist immer lang */
return 0; return 0;
} else if (!can_move(u)) { } else if (!can_move(u)) {
cmistake(u, ord, 55, MSG_MOVE); cmistake(u, ord, 55, MSG_MOVE);
fset(u, UFL_LONGACTION); /* FOLGE SCHIFF ist immer lang */ fset(u, UFL_LONGACTION|UFL_NOTMOVING); /* FOLGE SCHIFF ist immer lang */
return 0; return 0;
} }
@ -2305,7 +2305,7 @@ hunt(unit *u, order * ord)
if (id <= 0) { if (id <= 0) {
cmistake(u, ord, 20, MSG_MOVE); cmistake(u, ord, 20, MSG_MOVE);
fset(u, UFL_LONGACTION); /* FOLGE SCHIFF ist immer lang */ fset(u, UFL_LONGACTION|UFL_NOTMOVING); /* FOLGE SCHIFF ist immer lang */
return 0; return 0;
} }
@ -2316,7 +2316,7 @@ hunt(unit *u, order * ord)
if (sh == NULL || sh->region!=rc) { if (sh == NULL || sh->region!=rc) {
cmistake(u, ord, 20, MSG_MOVE); cmistake(u, ord, 20, MSG_MOVE);
} }
fset(u, UFL_LONGACTION); /* FOLGE SCHIFF ist immer lang */ fset(u, UFL_LONGACTION|UFL_NOTMOVING); /* FOLGE SCHIFF ist immer lang */
return 0; return 0;
} }
@ -2397,7 +2397,7 @@ move_hunters(void)
/* wir folgen definitiv einem Schiff. */ /* wir folgen definitiv einem Schiff. */
if (fval(u, UFL_LONGACTION)) { if (fval(u, UFL_NOTMOVING)) {
cmistake(u, ord, 52, MSG_MOVE); cmistake(u, ord, 52, MSG_MOVE);
break; break;
} else if (!can_move(u)) { } else if (!can_move(u)) {
@ -2405,7 +2405,7 @@ move_hunters(void)
break; break;
} }
if (!fval(u, UFL_LONGACTION) && !LongHunger(u) && hunt(u, ord)) { if (!fval(u, UFL_NOTMOVING) && !LongHunger(u) && hunt(u, ord)) {
up = &r->units; up = &r->units;
break; break;
} }
@ -2431,9 +2431,9 @@ move_pirates(void)
while (*up) { while (*up) {
unit *u = *up; unit *u = *up;
if (!fval(u, UFL_LONGACTION) && get_keyword(u->thisorder) == K_PIRACY) { if (!fval(u, UFL_NOTMOVING) && get_keyword(u->thisorder) == K_PIRACY) {
piracy_cmd(u, u->thisorder); piracy_cmd(u, u->thisorder);
fset(u, UFL_LONGACTION); fset(u, UFL_LONGACTION|UFL_NOTMOVING);
} }
if (*up == u) { if (*up == u) {
@ -2487,10 +2487,11 @@ movement(void)
* UFL_NOTMOVING is set in combat if the unit is not allowed * UFL_NOTMOVING is set in combat if the unit is not allowed
* to move because it was involved in a battle. * to move because it was involved in a battle.
*/ */
if (fval(u, UFL_NOTMOVING)) {
if (fval(u, UFL_LONGACTION)) { if (fval(u, UFL_LONGACTION)) {
cmistake(u, u->thisorder, 52, MSG_MOVE); cmistake(u, u->thisorder, 52, MSG_MOVE);
set_order(&u->thisorder, NULL); set_order(&u->thisorder, NULL);
} else if (fval(u, UFL_NOTMOVING)) { }
cmistake(u, u->thisorder, 319, MSG_MOVE); cmistake(u, u->thisorder, 319, MSG_MOVE);
set_order(&u->thisorder, NULL); set_order(&u->thisorder, NULL);
} else if (fval(u, UFL_MOVED)) { } else if (fval(u, UFL_MOVED)) {
@ -2554,7 +2555,7 @@ follow_unit(unit * u)
attrib * a = NULL; attrib * a = NULL;
order * ord; order * ord;
if (fval(u, UFL_LONGACTION) || LongHunger(u)) return; if (fval(u, UFL_NOTMOVING) || LongHunger(u)) return;
for (ord=u->orders;ord;ord=ord->next) { for (ord=u->orders;ord;ord=ord->next) {
const struct locale * lang = u->faction->locale; const struct locale * lang = u->faction->locale;

View File

@ -264,7 +264,7 @@ destroy_unit(unit * u)
if (a!=NULL) a_remove(&u->attribs, a); if (a!=NULL) a_remove(&u->attribs, a);
a = a_find(clone->attribs, &at_clonemage); a = a_find(clone->attribs, &at_clonemage);
if (a!=NULL) a_remove(&clone->attribs, a); if (a!=NULL) a_remove(&clone->attribs, a);
fset(u, UFL_LONGACTION); fset(u, UFL_LONGACTION|UFL_NOTMOVING);
set_number(clone, 0); set_number(clone, 0);
} else } else
#endif #endif
@ -727,12 +727,10 @@ urace(const struct unit * u)
boolean boolean
can_survive(const unit *u, const region *r) can_survive(const unit *u, const region *r)
{ {
if ((fval(r->terrain, WALK_INTO) if ((fval(r->terrain, WALK_INTO) && (u->race->flags & RCF_WALK))
&& (u->race->flags & RCF_WALK)) || || (fval(r->terrain, SWIM_INTO) && (u->race->flags & RCF_SWIM))
(fval(r->terrain, SWIM_INTO) || (fval(r->terrain, FLY_INTO) && (u->race->flags & RCF_FLY)))
&& (u->race->flags & RCF_SWIM)) || {
(fval(r->terrain, FLY_INTO)
&& (u->race->flags & RCF_FLY))) {
if (get_item(u, I_HORSE) && !fval(r->terrain, WALK_INTO)) if (get_item(u, I_HORSE) && !fval(r->terrain, WALK_INTO))
return false; return false;
@ -762,8 +760,9 @@ move_unit(unit * u, region * r, unit ** ulist)
fset(u, UFL_MOVED); fset(u, UFL_MOVED);
if (u->ship || u->building) leave(u->region, u); if (u->ship || u->building) leave(u->region, u);
translist(&u->region->units, ulist, u); translist(&u->region->units, ulist, u);
} else } else {
addlist(ulist, u); addlist(ulist, u);
}
#ifdef SMART_INTERVALS #ifdef SMART_INTERVALS
update_interval(u->faction, r); update_interval(u->faction, r);