forked from github/server
refactor config.c, move the find* functions into the modules they belong to.
This commit is contained in:
parent
27f94783bc
commit
59c1c23324
10 changed files with 116 additions and 141 deletions
28
src/battle.c
28
src/battle.c
|
@ -210,34 +210,6 @@ static void message_faction(battle * b, faction * f, struct message *m)
|
||||||
add_message(&f->battles->msgs, m);
|
add_message(&f->battles->msgs, m);
|
||||||
}
|
}
|
||||||
|
|
||||||
int armedmen(const unit * u, bool siege_weapons)
|
|
||||||
{
|
|
||||||
item *itm;
|
|
||||||
int n = 0;
|
|
||||||
if (!(urace(u)->flags & RCF_NOWEAPONS)) {
|
|
||||||
if (effskill(u, SK_WEAPONLESS) >= 1) {
|
|
||||||
/* kann ohne waffen bewachen: fuer drachen */
|
|
||||||
n = u->number;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
/* alle Waffen werden gezaehlt, und dann wird auf die Anzahl
|
|
||||||
* Personen minimiert */
|
|
||||||
for (itm = u->items; itm; itm = itm->next) {
|
|
||||||
const weapon_type *wtype = resource2weapon(itm->type->rtype);
|
|
||||||
if (wtype == NULL || (!siege_weapons && (wtype->flags & WTF_SIEGE)))
|
|
||||||
continue;
|
|
||||||
if (effskill(u, wtype->skill) >= wtype->minskill)
|
|
||||||
n += itm->number;
|
|
||||||
/* if (effskill(u, wtype->skill) >= wtype->minskill) n += itm->number; */
|
|
||||||
if (n > u->number)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
n = _min(n, u->number);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
void message_all(battle * b, message * m)
|
void message_all(battle * b, message * m)
|
||||||
{
|
{
|
||||||
bfaction *bf;
|
bfaction *bf;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
Copyright (c) 1998-2010, Enno Rehling <enno@eressea.de>
|
Copyright (c) 1998-2014, Enno Rehling <enno@eressea.de>
|
||||||
Katja Zedel <katze@felidae.kn-bremen.de
|
Katja Zedel <katze@felidae.kn-bremen.de
|
||||||
Christian Schlittchen <corwin@amber.kn-bremen.de>
|
Christian Schlittchen <corwin@amber.kn-bremen.de>
|
||||||
|
|
||||||
|
|
|
@ -520,34 +520,6 @@ int shipspeed(const ship * sh, const unit * u)
|
||||||
return (int)k;
|
return (int)k;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FMAXHASH 2039
|
|
||||||
faction *factionhash[FMAXHASH];
|
|
||||||
|
|
||||||
void fhash(faction * f)
|
|
||||||
{
|
|
||||||
int index = f->no % FMAXHASH;
|
|
||||||
f->nexthash = factionhash[index];
|
|
||||||
factionhash[index] = f;
|
|
||||||
}
|
|
||||||
|
|
||||||
void funhash(faction * f)
|
|
||||||
{
|
|
||||||
int index = f->no % FMAXHASH;
|
|
||||||
faction **fp = factionhash + index;
|
|
||||||
while (*fp && (*fp) != f)
|
|
||||||
fp = &(*fp)->nexthash;
|
|
||||||
*fp = f->nexthash;
|
|
||||||
}
|
|
||||||
|
|
||||||
static faction *ffindhash(int no)
|
|
||||||
{
|
|
||||||
int index = no % FMAXHASH;
|
|
||||||
faction *f = factionhash[index];
|
|
||||||
while (f && f->no != no)
|
|
||||||
f = f->nexthash;
|
|
||||||
return f;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
|
|
||||||
void verify_data(void)
|
void verify_data(void)
|
||||||
|
@ -633,29 +605,6 @@ unsigned int atoip(const char *s)
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
region *findunitregion(const unit * su)
|
|
||||||
{
|
|
||||||
#ifndef SLOW_REGION
|
|
||||||
return su->region;
|
|
||||||
#else
|
|
||||||
region *r;
|
|
||||||
const unit *u;
|
|
||||||
|
|
||||||
for (r = regions; r; r = r->next) {
|
|
||||||
for (u = r->units; u; u = u->next) {
|
|
||||||
if (su == u) {
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This should never happen */
|
|
||||||
assert(!"Die unit wurde nicht gefunden");
|
|
||||||
|
|
||||||
return (region *) NULL;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
bool unit_has_cursed_item(unit * u)
|
bool unit_has_cursed_item(unit * u)
|
||||||
{
|
{
|
||||||
item *itm = u->items;
|
item *itm = u->items;
|
||||||
|
@ -1036,50 +985,11 @@ param_t getparam(const struct locale * lang)
|
||||||
return s ? findparam(s, lang) : NOPARAM;
|
return s ? findparam(s, lang) : NOPARAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
faction *findfaction(int n)
|
|
||||||
{
|
|
||||||
faction *f = ffindhash(n);
|
|
||||||
return f;
|
|
||||||
}
|
|
||||||
|
|
||||||
faction *getfaction(void)
|
faction *getfaction(void)
|
||||||
{
|
{
|
||||||
return findfaction(getid());
|
return findfaction(getid());
|
||||||
}
|
}
|
||||||
|
|
||||||
unit *findunitr(const region * r, int n)
|
|
||||||
{
|
|
||||||
unit *u;
|
|
||||||
|
|
||||||
/* findunit regional! */
|
|
||||||
|
|
||||||
for (u = r->units; u; u = u->next)
|
|
||||||
if (u->no == n)
|
|
||||||
return u;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
unit *findunit(int n)
|
|
||||||
{
|
|
||||||
if (n <= 0) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return ufindhash(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
unit *findunitg(int n, const region * hint)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* Abfangen von Syntaxfehlern. */
|
|
||||||
if (n <= 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
/* findunit global! */
|
|
||||||
hint = 0;
|
|
||||||
return ufindhash(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
unit *getnewunit(const region * r, const faction * f)
|
unit *getnewunit(const region * r, const faction * f)
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
|
|
@ -102,11 +102,6 @@ extern "C" {
|
||||||
|
|
||||||
#define i2b(i) ((bool)((i)?(true):(false)))
|
#define i2b(i) ((bool)((i)?(true):(false)))
|
||||||
|
|
||||||
typedef struct strlist {
|
|
||||||
struct strlist *next;
|
|
||||||
char *s;
|
|
||||||
} strlist;
|
|
||||||
|
|
||||||
#define fval(u, i) ((u)->flags & (i))
|
#define fval(u, i) ((u)->flags & (i))
|
||||||
#define fset(u, i) ((u)->flags |= (i))
|
#define fset(u, i) ((u)->flags |= (i))
|
||||||
#define freset(u, i) ((u)->flags &= ~(i))
|
#define freset(u, i) ((u)->flags &= ~(i))
|
||||||
|
@ -126,9 +121,13 @@ extern "C" {
|
||||||
/* special units */
|
/* special units */
|
||||||
void make_undead_unit(struct unit *);
|
void make_undead_unit(struct unit *);
|
||||||
|
|
||||||
void addstrlist(strlist ** SP, const char *s);
|
typedef struct strlist {
|
||||||
|
struct strlist *next;
|
||||||
|
char *s;
|
||||||
|
} strlist;
|
||||||
|
|
||||||
int armedmen(const struct unit *u, bool siege_weapons);
|
void addstrlist(strlist ** SP, const char *s);
|
||||||
|
void freestrlist(strlist * s);
|
||||||
|
|
||||||
unsigned int atoip(const char *s);
|
unsigned int atoip(const char *s);
|
||||||
unsigned int getuint(void);
|
unsigned int getuint(void);
|
||||||
|
@ -179,15 +178,8 @@ extern "C" {
|
||||||
int alliedgroup(const struct plane *pl, const struct faction *f,
|
int alliedgroup(const struct plane *pl, const struct faction *f,
|
||||||
const struct faction *f2, const struct ally *sf, int mode);
|
const struct faction *f2, const struct ally *sf, int mode);
|
||||||
|
|
||||||
struct faction *findfaction(int n);
|
|
||||||
struct faction *getfaction(void);
|
struct faction *getfaction(void);
|
||||||
|
|
||||||
struct unit *findunitg(int n, const struct region *hint);
|
|
||||||
struct unit *findunit(int n);
|
|
||||||
|
|
||||||
struct unit *findunitr(const struct region *r, int n);
|
|
||||||
struct region *findunitregion(const struct unit *su);
|
|
||||||
|
|
||||||
char *estring(const char *s);
|
char *estring(const char *s);
|
||||||
char *estring_i(char *s);
|
char *estring_i(char *s);
|
||||||
char *cstring(const char *s);
|
char *cstring(const char *s);
|
||||||
|
@ -240,7 +232,6 @@ extern "C" {
|
||||||
* sonst großes Unglück. Durch asserts an ein paar Stellen abgesichert. */
|
* sonst großes Unglück. Durch asserts an ein paar Stellen abgesichert. */
|
||||||
void verify_data(void);
|
void verify_data(void);
|
||||||
|
|
||||||
void freestrlist(strlist * s);
|
|
||||||
|
|
||||||
int change_hitpoints(struct unit *u, int value);
|
int change_hitpoints(struct unit *u, int value);
|
||||||
|
|
||||||
|
@ -251,9 +242,6 @@ extern "C" {
|
||||||
struct region *firstregion(struct faction *f);
|
struct region *firstregion(struct faction *f);
|
||||||
struct region *lastregion(struct faction *f);
|
struct region *lastregion(struct faction *f);
|
||||||
|
|
||||||
void fhash(struct faction *f);
|
|
||||||
void funhash(struct faction *f);
|
|
||||||
|
|
||||||
bool idle(struct faction *f);
|
bool idle(struct faction *f);
|
||||||
bool unit_has_cursed_item(struct unit *u);
|
bool unit_has_cursed_item(struct unit *u);
|
||||||
|
|
||||||
|
|
|
@ -99,6 +99,40 @@ void free_faction(faction * f)
|
||||||
freelist(f->ursprung);
|
freelist(f->ursprung);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define FMAXHASH 2039
|
||||||
|
faction *factionhash[FMAXHASH];
|
||||||
|
|
||||||
|
void fhash(faction * f)
|
||||||
|
{
|
||||||
|
int index = f->no % FMAXHASH;
|
||||||
|
f->nexthash = factionhash[index];
|
||||||
|
factionhash[index] = f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void funhash(faction * f)
|
||||||
|
{
|
||||||
|
int index = f->no % FMAXHASH;
|
||||||
|
faction **fp = factionhash + index;
|
||||||
|
while (*fp && (*fp) != f)
|
||||||
|
fp = &(*fp)->nexthash;
|
||||||
|
*fp = f->nexthash;
|
||||||
|
}
|
||||||
|
|
||||||
|
static faction *ffindhash(int no)
|
||||||
|
{
|
||||||
|
int index = no % FMAXHASH;
|
||||||
|
faction *f = factionhash[index];
|
||||||
|
while (f && f->no != no)
|
||||||
|
f = f->nexthash;
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
faction *findfaction(int n)
|
||||||
|
{
|
||||||
|
faction *f = ffindhash(n);
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
void set_show_item(faction * f, const struct item_type *itype)
|
void set_show_item(faction * f, const struct item_type *itype)
|
||||||
{
|
{
|
||||||
attrib *a = a_add(&f->attribs, a_new(&at_showitem));
|
attrib *a = a_add(&f->attribs, a_new(&at_showitem));
|
||||||
|
|
|
@ -112,6 +112,10 @@ typedef struct faction {
|
||||||
|
|
||||||
extern struct faction *factions;
|
extern struct faction *factions;
|
||||||
|
|
||||||
|
void fhash(struct faction *f);
|
||||||
|
void funhash(struct faction *f);
|
||||||
|
|
||||||
|
struct faction *findfaction(int n);
|
||||||
struct faction *get_monsters(void);
|
struct faction *get_monsters(void);
|
||||||
struct faction *get_or_create_monsters(void);
|
struct faction *get_or_create_monsters(void);
|
||||||
int max_magicians(const faction * f);
|
int max_magicians(const faction * f);
|
||||||
|
|
|
@ -72,6 +72,39 @@ attrib_type at_creator = {
|
||||||
/* Rest ist NULL; temporaeres, nicht alterndes Attribut */
|
/* Rest ist NULL; temporaeres, nicht alterndes Attribut */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
unit *findunitr(const region * r, int n)
|
||||||
|
{
|
||||||
|
unit *u;
|
||||||
|
|
||||||
|
/* findunit regional! */
|
||||||
|
|
||||||
|
for (u = r->units; u; u = u->next)
|
||||||
|
if (u->no == n)
|
||||||
|
return u;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
unit *findunit(int n)
|
||||||
|
{
|
||||||
|
if (n <= 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return ufindhash(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
unit *findunitg(int n, const region * hint)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* Abfangen von Syntaxfehlern. */
|
||||||
|
if (n <= 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* findunit global! */
|
||||||
|
hint = 0;
|
||||||
|
return ufindhash(n);
|
||||||
|
}
|
||||||
|
|
||||||
#define UMAXHASH MAXUNITS
|
#define UMAXHASH MAXUNITS
|
||||||
static unit *unithash[UMAXHASH];
|
static unit *unithash[UMAXHASH];
|
||||||
static unit *delmarker = (unit *)unithash; /* a funny hack */
|
static unit *delmarker = (unit *)unithash; /* a funny hack */
|
||||||
|
|
|
@ -114,6 +114,7 @@ extern "C" {
|
||||||
int wants; /* enno: attribut? */
|
int wants; /* enno: attribut? */
|
||||||
} unit;
|
} unit;
|
||||||
|
|
||||||
|
extern struct attrib_type at_creator;
|
||||||
extern struct attrib_type at_alias;
|
extern struct attrib_type at_alias;
|
||||||
extern struct attrib_type at_siege;
|
extern struct attrib_type at_siege;
|
||||||
extern struct attrib_type at_target;
|
extern struct attrib_type at_target;
|
||||||
|
@ -216,9 +217,9 @@ extern "C" {
|
||||||
int number, const struct race *rc, int id, const char *dname,
|
int number, const struct race *rc, int id, const char *dname,
|
||||||
struct unit *creator);
|
struct unit *creator);
|
||||||
|
|
||||||
extern void uhash(struct unit *u);
|
void uhash(struct unit *u);
|
||||||
extern void uunhash(struct unit *u);
|
void uunhash(struct unit *u);
|
||||||
extern struct unit *ufindhash(int i);
|
struct unit *ufindhash(int i);
|
||||||
|
|
||||||
const char *unit_getname(const struct unit *u);
|
const char *unit_getname(const struct unit *u);
|
||||||
void unit_setname(struct unit *u, const char *name);
|
void unit_setname(struct unit *u, const char *name);
|
||||||
|
@ -241,7 +242,11 @@ extern "C" {
|
||||||
void remove_empty_units_in_region(struct region * r);
|
void remove_empty_units_in_region(struct region * r);
|
||||||
void remove_empty_units(void);
|
void remove_empty_units(void);
|
||||||
|
|
||||||
extern struct attrib_type at_creator;
|
struct unit *findunitg(int n, const struct region *hint);
|
||||||
|
struct unit *findunit(int n);
|
||||||
|
|
||||||
|
struct unit *findunitr(const struct region *r, int n);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
28
src/laws.c
28
src/laws.c
|
@ -4182,6 +4182,34 @@ void process(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int armedmen(const unit * u, bool siege_weapons)
|
||||||
|
{
|
||||||
|
item *itm;
|
||||||
|
int n = 0;
|
||||||
|
if (!(urace(u)->flags & RCF_NOWEAPONS)) {
|
||||||
|
if (effskill(u, SK_WEAPONLESS) >= 1) {
|
||||||
|
/* kann ohne waffen bewachen: fuer drachen */
|
||||||
|
n = u->number;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* alle Waffen werden gezaehlt, und dann wird auf die Anzahl
|
||||||
|
* Personen minimiert */
|
||||||
|
for (itm = u->items; itm; itm = itm->next) {
|
||||||
|
const weapon_type *wtype = resource2weapon(itm->type->rtype);
|
||||||
|
if (wtype == NULL || (!siege_weapons && (wtype->flags & WTF_SIEGE)))
|
||||||
|
continue;
|
||||||
|
if (effskill(u, wtype->skill) >= wtype->minskill)
|
||||||
|
n += itm->number;
|
||||||
|
/* if (effskill(u, wtype->skill) >= wtype->minskill) n += itm->number; */
|
||||||
|
if (n > u->number)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
n = _min(n, u->number);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
int siege_cmd(unit * u, order * ord)
|
int siege_cmd(unit * u, order * ord)
|
||||||
{
|
{
|
||||||
region *r = u->region;
|
region *r = u->region;
|
||||||
|
|
|
@ -99,6 +99,7 @@ extern "C" {
|
||||||
int modifier);
|
int modifier);
|
||||||
bool seefaction(const struct faction *f, const struct region *r,
|
bool seefaction(const struct faction *f, const struct region *r,
|
||||||
const struct unit *u, int modifier);
|
const struct unit *u, int modifier);
|
||||||
|
int armedmen(const struct unit *u, bool siege_weapons);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
Loading…
Reference in a new issue