Einheiten folgen sich selbst nicht.
Remove unused copy of follow_ship logic from follow_unit.
This commit is contained in:
Enno Rehling 2020-08-12 01:19:40 +02:00
parent d8a824631c
commit 05a200698a
1 changed files with 16 additions and 56 deletions

View File

@ -884,7 +884,7 @@ static void caught_target(region * r, unit * u)
if (a) { if (a) {
unit *target = (unit *)a->data.v; unit *target = (unit *)a->data.v;
if (!present(r, target)) { if (target == u || !present(r, target)) {
ADDMSG(&u->faction->msgs, msg_message("followfail", "unit follower", ADDMSG(&u->faction->msgs, msg_message("followfail", "unit follower",
target, u)); target, u));
} }
@ -1946,8 +1946,9 @@ static void sail(unit * u, order * ord, bool drifting)
* starting_point nach current_point verschoben */ * starting_point nach current_point verschoben */
/* Verfolgungen melden */ /* Verfolgungen melden */
if (fval(u, UFL_FOLLOWING)) if (fval(u, UFL_FOLLOWING)) {
caught_target(current_point, u); caught_target(current_point, u);
}
move_ship(sh, starting_point, current_point, route); move_ship(sh, starting_point, current_point, route);
@ -2304,7 +2305,7 @@ int follow_ship(unit * u, order * ord)
* bewegen sich. * bewegen sich.
* Following the trails of other ships. * Following the trails of other ships.
*/ */
static void move_hunters(void) static void move_followers(void)
{ {
region *r; region *r;
@ -2482,7 +2483,7 @@ void movement(void)
} }
} }
move_hunters(); move_followers();
move_pirates(); move_pirates();
} }
@ -2494,8 +2495,6 @@ void follow_unit(unit * u)
region *r = u->region; region *r = u->region;
attrib *a = NULL; attrib *a = NULL;
order *ord; order *ord;
unit *u2 = NULL;
int followship = false;
if (fval(u, UFL_NOTMOVING) || LongHunger(u)) if (fval(u, UFL_NOTMOVING) || LongHunger(u))
return; return;
@ -2510,6 +2509,11 @@ void follow_unit(unit * u)
p = getparam(lang); p = getparam(lang);
if (p == P_UNIT) { if (p == P_UNIT) {
id = read_unitid(u->faction, r); id = read_unitid(u->faction, r);
if (id == u->no) {
ADDMSG(&u->faction->msgs, msg_message("followfail", "unit follower",
u, u));
continue;
}
if (a != NULL) { if (a != NULL) {
a = a_find(u->attribs, &at_follow); a = a_find(u->attribs, &at_follow);
} }
@ -2528,73 +2532,29 @@ void follow_unit(unit * u)
a = NULL; a = NULL;
} }
} }
else if (p == P_SHIP) {
id = getid();
if (id <= 0) {
/* cmistake(u, ord, 20, MSG_MOVE); */
}
else {
ship *sh = findship(id);
if (sh == NULL || (sh->region != r && hunted_dir(r->attribs, id) == NODIRECTION)) {
cmistake(u, ord, 20, MSG_MOVE);
}
else if (!u->ship) {
/* cmistake(u, ord, 144, MSG_MOVE); */
}
else if (u != ship_owner(u->ship)) {
/* cmistake(u, ord, 146, MSG_MOVE); */
}
else if (!can_move(u)) {
/* cmistake(u, ord, 55, MSG_MOVE); */
}
else {
u2 = ship_owner(sh);
followship = true;
}
}
}
} }
} }
if ((a || followship) && !fval(u, UFL_MOVED | UFL_NOTMOVING)) { if (a && !fval(u, UFL_MOVED | UFL_NOTMOVING)) {
bool follow = false; bool follow = false;
if (!followship) { unit *u2 = a->data.v;
u2 = a->data.v;
}
if (!u2 || (!followship && (u2->region != r || !cansee(u->faction, r, u2, 0)))) { if (!u2 || u2->region != r || !cansee(u->faction, r, u2, 0)) {
return; return;
} }
switch (getkeyword(u2->thisorder)) { switch (getkeyword(u2->thisorder)) {
case K_MOVE: case K_MOVE:
case K_ROUTE: case K_ROUTE:
follow = true;
break;
case K_DRIVE: case K_DRIVE:
if (!followship) {
follow = true; follow = true;
}
break; break;
default: default:
for (ord = u2->orders; ord; ord = ord->next) { for (ord = u2->orders; ord; ord = ord->next) {
switch (getkeyword(ord)) { if (K_FOLLOW == getkeyword(ord)) {
case K_FOLLOW:
follow = true;
break;
case K_PIRACY:
if (followship) {
follow = true;
}
break;
default:
if (followship && u2->region != r) {
follow = true; follow = true;
break; break;
} }
continue;
}
break;
} }
break; break;
} }