forked from github/server
bugfix reorder, fehlende FL_OWNER
This commit is contained in:
parent
0047482a8e
commit
ccc2a39eee
|
@ -1,6 +1,6 @@
|
|||
/* vi: set ts=2:
|
||||
*
|
||||
* $Id: laws.c,v 1.11 2001/02/10 22:02:10 enno Exp $
|
||||
* $Id: laws.c,v 1.12 2001/02/11 10:06:07 enno Exp $
|
||||
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||
|
@ -2110,6 +2110,63 @@ resolve_ship(void * id) {
|
|||
return findship((int)id);
|
||||
}
|
||||
|
||||
static void
|
||||
reorder_owners(region * r)
|
||||
{
|
||||
unit ** up=&r->units;
|
||||
building * b=NULL;
|
||||
ship * sh=NULL;
|
||||
while (*up) {
|
||||
unit * u = *up;
|
||||
if (u->building!=b) {
|
||||
/* if this is a new building */
|
||||
b = u->building;
|
||||
if (b && !fval(u, FL_OWNER)) {
|
||||
/* if the first unit is not the owner, find the real one */
|
||||
unit ** uo = &u->next;
|
||||
while (*uo && (!fval((*uo), FL_OWNER) || (*uo)->building!=b)) {
|
||||
uo=&(*uo)->next;
|
||||
}
|
||||
|
||||
if (*uo && (*uo)->building==b) {
|
||||
/* if successful, move *uo to the top */
|
||||
*up = *uo;
|
||||
*uo = (*uo)->next;
|
||||
(*up)->next = u;
|
||||
}
|
||||
else {
|
||||
fprintf(stderr, "WARNING: Gebäude %s hatte keinen Besitzer. Setze %s\n", buildingname(b), unitname(u));
|
||||
fset(u, FL_OWNER);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (u->ship!=sh) {
|
||||
/* if this is a new ship */
|
||||
sh = u->ship;
|
||||
if (sh && !fval(u, FL_OWNER)) {
|
||||
/* if the first unit is not the owner, find the real one */
|
||||
unit ** uo = &u->next;
|
||||
while (*uo && (!fval((*uo), FL_OWNER) || (*uo)->ship!=sh)) {
|
||||
uo=&(*uo)->next;
|
||||
}
|
||||
|
||||
if (*uo && (*uo)->ship==sh) {
|
||||
/* if successful, move *uo to the top */
|
||||
*up = *uo;
|
||||
*uo = (*uo)->next;
|
||||
(*up)->next = u;
|
||||
}
|
||||
else {
|
||||
fprintf(stderr, "WARNING: Das Schiff %s hatte keinen Besitzer. Setze %s\n", shipname(sh), unitname(u));
|
||||
fset(u, FL_OWNER);
|
||||
}
|
||||
}
|
||||
}
|
||||
up = &u->next;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void
|
||||
reorder_owners(region * r)
|
||||
{
|
||||
|
@ -2159,6 +2216,7 @@ reorder_owners(region * r)
|
|||
}
|
||||
*ui = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
static attrib_type at_number = {
|
||||
"faction_renum",
|
||||
|
@ -2238,7 +2296,6 @@ reorder(void)
|
|||
for (r=regions;r;r=r->next) {
|
||||
unit * u, ** up=&r->units;
|
||||
boolean sorted=false;
|
||||
for (u=r->units;u;u=u->next) freset(u, FL_DH);
|
||||
while (*up) {
|
||||
u = *up;
|
||||
if (!fval(u, FL_MARK)) {
|
||||
|
@ -2285,7 +2342,7 @@ reorder(void)
|
|||
}
|
||||
if (u==*up) up=&u->next;
|
||||
}
|
||||
if (sorted) for (u=r->units;u;u=u->next) freset(u, FL_OWNER);
|
||||
if (sorted) for (u=r->units;u;u=u->next) freset(u, FL_MARK);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* vi: set ts=2:
|
||||
*
|
||||
* $Id: save.c,v 1.15 2001/02/10 19:24:05 enno Exp $
|
||||
* $Id: save.c,v 1.16 2001/02/11 10:06:07 enno Exp $
|
||||
* Eressea PB(E)M host Copyright (C) 1998-2000
|
||||
* Christian Schlittchen (corwin@amber.kn-bremen.de)
|
||||
* Katja Zedel (katze@felidae.kn-bremen.de)
|
||||
|
@ -455,7 +455,7 @@ readfaction(void)
|
|||
* muß in "Gänsefüßchen" stehen!! */
|
||||
|
||||
/* War vorher in main.c:getgarbage() */
|
||||
if (!quiet) { printf(" %s;", factionid(f)); fflush(stdout); }
|
||||
if (!quiet) { printf(" %.4s;", factionid(f)); fflush(stdout); }
|
||||
freestrlist(f->mistakes);
|
||||
f->mistakes = 0;
|
||||
|
||||
|
|
|
@ -69,13 +69,22 @@ mit arbeit zu tun hat, keine boolean-variable die sagt ob man auf der
|
|||
arbeit ist.
|
||||
|
||||
- faction::units
|
||||
Die Variable funktioniert und kann benutzt werden. folgendes:
|
||||
Die Variable funktioniert und kann benutzt werden. folgendes:
|
||||
for (r=regions;r;r=r->next) for (u=r->units;u;u=u->next) if (u->faction==f) {}
|
||||
schreibt sich viel einfacher so:
|
||||
for (u=f->units;u;u=u->nextF) {}
|
||||
und ja, es wird garantiert, das das funktioiniert, und regionsreihenfolge einhalten tut es auch. weshalb wahlloses erzeugen von einheiten per calloc und ohne createunit() aufruf schon seit längerem ein NoNo ist.
|
||||
und ja, es wird garantiert, das das funktioiniert, und regionsreihenfolge
|
||||
einhalten tut es auch. weshalb wahlloses erzeugen von einheiten per calloc und
|
||||
ohne createunit() aufruf schon seit längerem ein NoNo ist.
|
||||
|
||||
- buffer length
|
||||
Namen von attributen, hashcodes für items, usw. sollten kurz sein.
|
||||
schliesslich landen sie im Datenfile. Eine Funktion, die sie einlädt,
|
||||
sollte mit 32 byte speicherbedarf rechnen.
|
||||
|
||||
- FL_MARK und FL_DH:
|
||||
Der unterschied zwischen diesen beiden Flags ist:
|
||||
FL_DH sollte man vor der Benutzung auf einen Wert setzen, den man coraussetzt
|
||||
(man kriegt keinen wert garanteirt).
|
||||
FL_MARK ist immer 0. jede routine die es setzt, muss es am ende wieder auf 0
|
||||
zurücksetzen. code-beispiel ist z.b. die SORTIERE-funktion.
|
||||
|
|
Loading…
Reference in New Issue