2010-08-08 08:05:54 +02:00
|
|
|
|
/*
|
|
|
|
|
Copyright (c) 1998-2010, Enno Rehling <enno@eressea.de>
|
|
|
|
|
Katja Zedel <katze@felidae.kn-bremen.de
|
|
|
|
|
Christian Schlittchen <corwin@amber.kn-bremen.de>
|
|
|
|
|
|
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
|
|
|
purpose with or without fee is hereby granted, provided that the above
|
|
|
|
|
copyright notice and this permission notice appear in all copies.
|
|
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
|
|
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
|
|
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
|
|
|
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
|
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
|
|
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
|
|
|
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
|
|
#ifndef H_KRNL_FACTION
|
|
|
|
|
#define H_KRNL_FACTION
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
extern "C" {
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
struct player;
|
|
|
|
|
struct alliance;
|
|
|
|
|
struct item;
|
|
|
|
|
struct seen_region;
|
|
|
|
|
|
|
|
|
|
/* SMART_INTERVALS: define to speed up finding the interval of regions that a
|
|
|
|
|
faction is in. defining this speeds up the turn by 30-40% */
|
|
|
|
|
#define SMART_INTERVALS
|
|
|
|
|
|
|
|
|
|
/* faction flags */
|
|
|
|
|
#define FFL_NEWID (1<<0) /* Die Partei hat bereits einmal ihre no gewechselt */
|
|
|
|
|
#define FFL_ISNEW (1<<1)
|
|
|
|
|
#define FFL_RESTART (1<<2)
|
|
|
|
|
#define FFL_QUIT (1<<3)
|
|
|
|
|
#define FFL_DEFENDER (1<<10)
|
|
|
|
|
#define FFL_SELECT (1<<18) /* ehemals f->dh, u->dh, r->dh, etc... */
|
|
|
|
|
#define FFL_NOAID (1<<21) /* Hilfsflag Kampf */
|
|
|
|
|
#define FFL_MARK (1<<23) /* f<>r markierende algorithmen, die das
|
|
|
|
|
* hinterher auch wieder l<EFBFBD>schen m<EFBFBD>ssen!
|
|
|
|
|
* (FFL_SELECT muss man vorher initialisieren,
|
|
|
|
|
* FL_MARK hinterher l<EFBFBD>schen) */
|
|
|
|
|
#define FFL_NOIDLEOUT (1<<24) /* Partei stirbt nicht an NMRs */
|
|
|
|
|
#define FFL_OVERRIDE (1<<27) /* Override-Passwort wurde benutzt */
|
|
|
|
|
#define FFL_DBENTRY (1<<28) /* Partei ist in Datenbank eingetragen */
|
|
|
|
|
#define FFL_NOTIMEOUT (1<<29) /* ignore MaxAge() */
|
|
|
|
|
#define FFL_GM (1<<30) /* eine Partei mit Sonderrechten */
|
|
|
|
|
#define FFL_NPC (1<<31) /* eine Partei mit Monstern */
|
|
|
|
|
|
|
|
|
|
#define FFL_SAVEMASK (FFL_DEFENDER|FFL_NEWID|FFL_GM|FFL_NPC|FFL_NOTIMEOUT|FFL_DBENTRY|FFL_NOTIMEOUT)
|
|
|
|
|
|
|
|
|
|
struct faction * get_monsters(void);
|
|
|
|
|
#define is_monsters(f) ((f)->flags&FFL_NPC)
|
|
|
|
|
|
|
|
|
|
typedef struct faction {
|
|
|
|
|
struct faction *next;
|
|
|
|
|
struct faction *nexthash;
|
|
|
|
|
|
|
|
|
|
struct player *owner;
|
|
|
|
|
#ifdef SMART_INTERVALS
|
|
|
|
|
struct region *first;
|
|
|
|
|
struct region *last;
|
|
|
|
|
#endif
|
|
|
|
|
int no;
|
|
|
|
|
int subscription;
|
|
|
|
|
unsigned int flags;
|
|
|
|
|
char *name;
|
|
|
|
|
char *banner;
|
|
|
|
|
char *email;
|
|
|
|
|
char *passw;
|
|
|
|
|
char *override;
|
|
|
|
|
int max_spelllevel;
|
|
|
|
|
struct spell_list * spellbook;
|
|
|
|
|
const struct locale * locale;
|
|
|
|
|
int lastorders; /* enno: short? */
|
|
|
|
|
int age; /* enno: short? */
|
|
|
|
|
struct ursprung *ursprung;
|
|
|
|
|
const struct race * race;
|
|
|
|
|
magic_t magiegebiet;
|
|
|
|
|
int newbies;
|
|
|
|
|
int num_people; /* Anzahl Personen ohne Monster */
|
|
|
|
|
int num_total; /* Anzahl Personen mit Monstern */
|
|
|
|
|
int options;
|
|
|
|
|
int no_units;
|
|
|
|
|
struct ally *allies;
|
|
|
|
|
struct group *groups;
|
|
|
|
|
boolean alive; /* enno: sollte ein flag werden */
|
|
|
|
|
int nregions;
|
|
|
|
|
int money;
|
|
|
|
|
#if SCORE_MODULE
|
|
|
|
|
int score;
|
|
|
|
|
#endif
|
|
|
|
|
struct alliance * alliance;
|
|
|
|
|
int alliance_joindate; /* the turn on which the faction joined its current alliance (or left the last one) */
|
|
|
|
|
#ifdef VICTORY_DELAY
|
|
|
|
|
unsigned char victory_delay;
|
|
|
|
|
#endif
|
|
|
|
|
struct unit * units;
|
|
|
|
|
struct attrib *attribs;
|
|
|
|
|
struct message_list * msgs;
|
|
|
|
|
struct bmsg {
|
|
|
|
|
struct bmsg * next;
|
|
|
|
|
struct region * r;
|
|
|
|
|
struct message_list * msgs;
|
|
|
|
|
} * battles;
|
|
|
|
|
struct item * items; /* items this faction can claim */
|
|
|
|
|
struct seen_region ** seen;
|
|
|
|
|
} faction;
|
|
|
|
|
|
|
|
|
|
extern struct faction *factions;
|
|
|
|
|
|
|
|
|
|
typedef struct faction_list {
|
|
|
|
|
struct faction_list * next;
|
|
|
|
|
struct faction * data;
|
|
|
|
|
} faction_list;
|
|
|
|
|
|
|
|
|
|
extern const struct unit * random_unit_in_faction(const struct faction *f);
|
|
|
|
|
extern const char * factionname(const struct faction * f);
|
|
|
|
|
extern struct unit * addplayer(struct region *r, faction * f);
|
|
|
|
|
extern struct faction * addfaction(const char *email, const char* password,
|
|
|
|
|
const struct race * frace,
|
|
|
|
|
const struct locale *loc, int subscription);
|
|
|
|
|
extern boolean checkpasswd(const faction * f, const char * passwd, boolean shortp);
|
|
|
|
|
extern void destroyfaction(faction * f);
|
|
|
|
|
|
|
|
|
|
extern void set_alliance(struct faction * a, struct faction * b, int status);
|
|
|
|
|
extern int get_alliance(const struct faction * a, const struct faction * b);
|
|
|
|
|
|
|
|
|
|
extern struct alliance * f_get_alliance(const struct faction * a);
|
|
|
|
|
|
|
|
|
|
extern void write_faction_reference(const struct faction * f, struct storage * store);
|
|
|
|
|
extern variant read_faction_reference(struct storage * store);
|
|
|
|
|
extern int resolve_faction(variant data, void * addr);
|
|
|
|
|
|
|
|
|
|
extern void renumber_faction(faction * f, int no);
|
|
|
|
|
void free_faction(struct faction * f);
|
|
|
|
|
|
|
|
|
|
#ifdef SMART_INTERVALS
|
|
|
|
|
extern void update_interval(struct faction * f, struct region * r);
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
const char * faction_getbanner(const struct faction * self);
|
|
|
|
|
void faction_setbanner(struct faction * self, const char * name);
|
|
|
|
|
|
|
|
|
|
const char * faction_getname(const struct faction * self);
|
|
|
|
|
void faction_setname(struct faction * self, const char * name);
|
|
|
|
|
|
|
|
|
|
const char * faction_getemail(const struct faction * self);
|
|
|
|
|
void faction_setemail(struct faction * self, const char * email);
|
|
|
|
|
|
|
|
|
|
const char * faction_getpassword(const struct faction * self);
|
|
|
|
|
void faction_setpassword(struct faction * self, const char * password);
|
|
|
|
|
boolean valid_race(const struct faction * f, const struct race * rc);
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
#endif
|