forked from github/server
refactor: extract function parse_ids for readability
This commit is contained in:
parent
4c028bceac
commit
d252286f4c
1 changed files with 35 additions and 23 deletions
58
src/piracy.c
58
src/piracy.c
|
@ -76,26 +76,10 @@ static bool validate_pirate(unit *u, order *ord) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void piracy_cmd(unit * u, order *ord)
|
int *parse_ids(const order *ord) {
|
||||||
{
|
|
||||||
region *r = u->region;
|
|
||||||
ship *sh = u->ship, *sh2;
|
|
||||||
direction_t dir, target_dir = NODIRECTION;
|
|
||||||
struct {
|
|
||||||
const faction *target;
|
|
||||||
int value;
|
|
||||||
} aff[MAXDIRECTIONS];
|
|
||||||
int saff = 0;
|
|
||||||
int *il = NULL;
|
|
||||||
const char *s;
|
const char *s;
|
||||||
attrib *a;
|
int *il = NULL;
|
||||||
|
|
||||||
if (!validate_pirate(u, ord)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Feststellen, ob schon ein anderer alliierter Pirat ein
|
|
||||||
* Ziel gefunden hat. */
|
|
||||||
init_order(ord);
|
init_order(ord);
|
||||||
s = getstrtoken();
|
s = getstrtoken();
|
||||||
if (s != NULL && *s) {
|
if (s != NULL && *s) {
|
||||||
|
@ -105,6 +89,12 @@ void piracy_cmd(unit * u, order *ord)
|
||||||
s = getstrtoken();
|
s = getstrtoken();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return il;
|
||||||
|
}
|
||||||
|
|
||||||
|
direction_t find_piracy_target(unit *u, int *il) {
|
||||||
|
attrib *a;
|
||||||
|
region *r = u->region;
|
||||||
|
|
||||||
for (a = a_find(r->attribs, &at_piracy_direction);
|
for (a = a_find(r->attribs, &at_piracy_direction);
|
||||||
a && a->type == &at_piracy_direction; a = a->next) {
|
a && a->type == &at_piracy_direction; a = a->next) {
|
||||||
|
@ -114,11 +104,34 @@ void piracy_cmd(unit * u, order *ord)
|
||||||
|
|
||||||
if (alliedunit(u, p, HELP_FIGHT)) {
|
if (alliedunit(u, p, HELP_FIGHT)) {
|
||||||
if (il == 0 || (t && intlist_find(il, t->no))) {
|
if (il == 0 || (t && intlist_find(il, t->no))) {
|
||||||
target_dir = data->dir;
|
return data->dir;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return NODIRECTION;
|
||||||
|
}
|
||||||
|
|
||||||
|
void piracy_cmd(unit * u, order *ord)
|
||||||
|
{
|
||||||
|
region *r = u->region;
|
||||||
|
ship *sh = u->ship, *sh2;
|
||||||
|
direction_t dir, target_dir;
|
||||||
|
struct {
|
||||||
|
const faction *target;
|
||||||
|
int value;
|
||||||
|
} aff[MAXDIRECTIONS];
|
||||||
|
int saff = 0;
|
||||||
|
int *il;
|
||||||
|
|
||||||
|
if (!validate_pirate(u, ord)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
il = parse_ids(ord);
|
||||||
|
/* Feststellen, ob schon ein anderer alliierter Pirat ein
|
||||||
|
* Ziel gefunden hat. */
|
||||||
|
|
||||||
|
target_dir = find_piracy_target(u, il);
|
||||||
|
|
||||||
/* Wenn nicht, sehen wir, ob wir ein Ziel finden. */
|
/* Wenn nicht, sehen wir, ob wir ein Ziel finden. */
|
||||||
|
|
||||||
|
@ -138,7 +151,7 @@ void piracy_cmd(unit * u, order *ord)
|
||||||
faction *f = visible_faction(cap->faction, cap);
|
faction *f = visible_faction(cap->faction, cap);
|
||||||
if (alliedunit(u, f, HELP_FIGHT))
|
if (alliedunit(u, f, HELP_FIGHT))
|
||||||
continue;
|
continue;
|
||||||
if (il == 0 || intlist_find(il, cap->faction->no)) {
|
if (!il || intlist_find(il, cap->faction->no)) { // TODO: shouldn't this be f->no?
|
||||||
++aff[dir].value;
|
++aff[dir].value;
|
||||||
if (rng_int() % aff[dir].value == 0) {
|
if (rng_int() % aff[dir].value == 0) {
|
||||||
aff[dir].target = f;
|
aff[dir].target = f;
|
||||||
|
@ -160,8 +173,7 @@ void piracy_cmd(unit * u, order *ord)
|
||||||
saff -= aff[dir].value;
|
saff -= aff[dir].value;
|
||||||
}
|
}
|
||||||
target_dir = dir;
|
target_dir = dir;
|
||||||
a =
|
a_add(&r->attribs, mk_piracy(u->faction, aff[dir].target, target_dir));
|
||||||
a_add(&r->attribs, mk_piracy(u->faction, aff[dir].target, target_dir));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue