forked from github/server
BUG: at_hate stores a unit, never an int.
https://bugs.eressea.de/view.php?id=2432
This commit is contained in:
parent
ef96ec9de0
commit
915706d6f8
3 changed files with 18 additions and 9 deletions
|
@ -11,7 +11,7 @@ extern "C"
|
||||||
|
|
||||||
struct locale;
|
struct locale;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum keyword_t {
|
||||||
K_KOMMENTAR,
|
K_KOMMENTAR,
|
||||||
K_BANNER,
|
K_BANNER,
|
||||||
K_WORK,
|
K_WORK,
|
||||||
|
|
|
@ -173,6 +173,9 @@ static order *monster_attack(unit * u, const unit * target)
|
||||||
if (monster_is_waiting(u))
|
if (monster_is_waiting(u))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
if (u->region->land) {
|
||||||
|
assert(u->region->flags & RF_GUARDED);
|
||||||
|
}
|
||||||
return create_order(K_ATTACK, u->faction->locale, "%i", target->no);
|
return create_order(K_ATTACK, u->faction->locale, "%i", target->no);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -747,7 +750,14 @@ void plan_monsters(faction * f)
|
||||||
|
|
||||||
for (r = regions; r; r = r->next) {
|
for (r = regions; r; r = r->next) {
|
||||||
unit *u;
|
unit *u;
|
||||||
bool attacking = chance(attack_chance);
|
bool attacking = false;
|
||||||
|
/* Tiny optimization: Monsters on land only attack randomly when
|
||||||
|
* they are guarding. If nobody is guarding this region (RF_GUARDED),
|
||||||
|
* there can't be any random attacks.
|
||||||
|
*/
|
||||||
|
if (!r->land || r->flags & RF_GUARDED) {
|
||||||
|
attacking = chance(attack_chance);
|
||||||
|
}
|
||||||
|
|
||||||
for (u = r->units; u; u = u->next) {
|
for (u = r->units; u; u = u->next) {
|
||||||
const race *rc = u_race(u);
|
const race *rc = u_race(u);
|
||||||
|
@ -768,8 +778,7 @@ void plan_monsters(faction * f)
|
||||||
if (attacking && (!r->land || is_guard(u))) {
|
if (attacking && (!r->land || is_guard(u))) {
|
||||||
monster_attacks(u, false);
|
monster_attacks(u, false);
|
||||||
}
|
}
|
||||||
|
/* units with a plan to kill get ATTACK orders (even if they don't guard): */
|
||||||
/* units with a plan to kill get ATTACK orders: */
|
|
||||||
ta = a_find(u->attribs, &at_hate);
|
ta = a_find(u->attribs, &at_hate);
|
||||||
if (ta && !monster_is_waiting(u)) {
|
if (ta && !monster_is_waiting(u)) {
|
||||||
unit *tu = (unit *)ta->data.v;
|
unit *tu = (unit *)ta->data.v;
|
||||||
|
@ -780,15 +789,15 @@ void plan_monsters(faction * f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (tu) {
|
else if (tu) {
|
||||||
tu = findunit(ta->data.i);
|
bool(*allowed)(const struct region * src, const struct region * r) = allowed_walk;
|
||||||
if (tu != NULL) {
|
if (canfly(u)) {
|
||||||
long_order = make_movement_order(u, tu->region, 2, allowed_walk);
|
allowed = allowed_fly;
|
||||||
}
|
}
|
||||||
|
long_order = make_movement_order(u, tu->region, 2, allowed);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
a_remove(&u->attribs, ta);
|
a_remove(&u->attribs, ta);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* All monsters guard the region: */
|
/* All monsters guard the region: */
|
||||||
if (u->status < ST_FLEE && !monster_is_waiting(u) && r->land) {
|
if (u->status < ST_FLEE && !monster_is_waiting(u) && r->land) {
|
||||||
addlist(&u->orders, create_order(K_GUARD, u->faction->locale, NULL));
|
addlist(&u->orders, create_order(K_GUARD, u->faction->locale, NULL));
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
struct locale;
|
struct locale;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum skill_t {
|
||||||
SK_ALCHEMY,
|
SK_ALCHEMY,
|
||||||
SK_CROSSBOW,
|
SK_CROSSBOW,
|
||||||
SK_MINING,
|
SK_MINING,
|
||||||
|
|
Loading…
Reference in a new issue