"Watchers", Parteien die eine komplette Plane einsehen können.

This commit is contained in:
Enno Rehling 2002-02-18 21:41:11 +00:00
parent 472254020c
commit fa8c86084b
5 changed files with 83 additions and 9 deletions

View File

@ -2606,12 +2606,23 @@ prepare_report(faction * f)
for (r = firstregion(f); r != end; r = r->next) {
attrib *ru;
unit * u;
plane * p = rplane(r);
unsigned char mode = see_none;
boolean dis = false;
#if DBG_CACHE
++ctries;
#endif
for (u = r->units; u; u = u->next) {
if (p) {
watcher * w = p->watchers;
while (w) {
if (f==w->faction) {
mode = w->mode;
break;
}
w = w->next;
}
}
if (mode<see_unit) for (u = r->units; u; u = u->next) {
if (u->faction == f) {
if (u->race != new_race[RC_SPELL] || u->number == RS_FARVISION) {
mode = see_unit;
@ -2623,7 +2634,7 @@ prepare_report(faction * f)
}
}
if (mode==see_none) for (ru = a_find(r->attribs, &at_travelunit); ru; ru = ru->nexttype) {
if (mode<see_travel) for (ru = a_find(r->attribs, &at_travelunit); ru; ru = ru->nexttype) {
unit * u = (unit*)ru->data.v;
if (u->faction == f) {
mode = see_travel;
@ -2631,7 +2642,7 @@ prepare_report(faction * f)
}
}
if (mode==see_none && rterrain(r) == T_OCEAN) {
if (mode<see_lighthouse && rterrain(r) == T_OCEAN) {
if (check_leuchtturm(r, f)) mode = see_lighthouse;
}

View File

@ -150,12 +150,14 @@ struct xml_stack;
#define GROWTREE_VERSION 305
#define RANDOMIZED_RESOURCES_VERSION 306 /* should be the same, but doesn't work */
#define NEWRACE_VERSION 307
#define NEWSKILL_VERSION 308
#define INTERIM_VERSION 309
#define NEWSKILL_VERSION 309
#define WATCHERS_VERSION 310
#if SKILLPOINTS
# define RELEASE_VERSION NEWRACE_VERSION
# define RELEASE_VERSION INTERIM_VERSION
#else
# define RELEASE_VERSION NEWSKILL_VERSION
# define RELEASE_VERSION WATCHERS_VERSION
#endif
#define UGROUPS_VERSION 400 /* nicht aktivieren, nicht fertig */

View File

@ -38,8 +38,15 @@
#define PFL_MUSEUM PFL_NOCOORDS | PFL_NORECRUITS | PFL_NOGIVE | PFL_NOATTACK | PFL_NOTERRAIN | PFL_NOMAGIC | PFL_NOSTEALTH | PFL_NOTEACH | PFL_NOBUILD | PFL_NOFEED
typedef struct watcher {
struct watcher * next;
struct faction * faction;
unsigned char mode;
} watcher;
typedef struct plane {
struct plane *next;
struct watcher * watchers;
int id;
char *name;
int minx,maxx,miny,maxy;

View File

@ -863,6 +863,19 @@ readgame(boolean backup)
pl->miny = ri(F);
pl->maxy = ri(F);
pl->flags = ri(F);
if (global.data_version>WATCHERS_VERSION) {
char * s = NULL;
rds(F, &s);
while (strcmp(s, "end")!=0) {
watcher * w = calloc(sizeof(watcher),1);
int fno = ri36(F);
w->mode = (unsigned char)ri(F);
w->next = pl->watchers;
pl->watchers = w;
ur_add((void*)fno, &w->faction, resolve_faction);
}
free(s);
}
a_read(F, &pl->attribs);
addlist(&planes, pl);
}
@ -1796,6 +1809,9 @@ writegame(char *path, char quiet)
wnl(F);
for(pl = planes; pl; pl=pl->next) {
#if RELEASE_VERSION >= WATCHERS_VERSION
watcher * w;
#endif
wi(F, pl->id);
ws(F, pl->name);
wi(F, pl->minx);
@ -1803,6 +1819,17 @@ writegame(char *path, char quiet)
wi(F, pl->miny);
wi(F, pl->maxy);
wi(F, pl->flags);
#if RELEASE_VERSION >= WATCHERS_VERSION
w = pl->watchers;
while (w) {
if (w->faction) {
wi36(F, w->faction->no);
wi(F, w->mode);
}
w = w->next;
}
ws(F, "end");
#endif
a_write(F, pl->attribs);
wnl(F);
}

View File

@ -2470,7 +2470,7 @@ peasant_adjustment(void)
terrain_t ter;
int sum, avg, c;
double freeall, pool; /* long long is illegal */
long long s;
double s;
region *r;
s = 0;
@ -2601,8 +2601,34 @@ static int
fix_astralplane(void)
{
plane * astralplane = getplanebyname("Astralraum");
freset(astralplane, PFL_NOCOORDS);
set_ursprung(findfaction(MONSTER_FACTION), astralplane->id, 0, 0);
if (astralplane) {
freset(astralplane, PFL_NOCOORDS);
set_ursprung(findfaction(MONSTER_FACTION), astralplane->id, 0, 0);
}
return 0;
}
static int
fix_watchers(void)
{
plane * p = getplanebyid (59034966);
if (p) {
faction * f = findfaction(atoi36("gm04"));
watcher * w = calloc(sizeof(watcher), 1);
w->faction = f;
w->mode = see_unit;
w->next = p->watchers;
p->watchers = w;
}
p = getplanebyid(1137);
if (p) {
faction * f = findfaction(atoi36("rr"));
watcher * w = calloc(sizeof(watcher), 1);
w->faction = f;
w->mode = see_unit;
w->next = p->watchers;
p->watchers = w;
}
return 0;
}
@ -2654,6 +2680,7 @@ korrektur(void)
/* fix_unitrefs(); */
stats();
do_once("sql2", dump_sql());
do_once("fw01", fix_watchers());
#if NEW_RESOURCEGROWTH
/* do not remove do_once calls - old datafiles need them! */
do_once("rgrw", convert_resources());