forked from github/server
TARNE PARTEI NUMMER <NR> auch wenn man die Partei nicht sieht
This commit is contained in:
parent
a436127625
commit
3691f8c9ca
|
@ -665,8 +665,6 @@ horses(region * r)
|
||||||
assert(rhorses(r) >= 0);
|
assert(rhorses(r) >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if GROWING_TREES
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
count_race(const region *r, const race *rc)
|
count_race(const region *r, const race *rc)
|
||||||
{
|
{
|
||||||
|
@ -811,95 +809,6 @@ trees(region * r, const int current_season, const int last_weeks_season)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
static void
|
|
||||||
trees(region * r)
|
|
||||||
{
|
|
||||||
int i, maxtrees;
|
|
||||||
int tree = rtrees(r);
|
|
||||||
direction_t d;
|
|
||||||
|
|
||||||
/* Bäume vermehren sich. m ist die Anzahl Bäume, für die es Land
|
|
||||||
* gibt. Der Wald besiedelt keine bebauten Gebiete, wird den Pferden
|
|
||||||
* aber Land wegnehmen. Gibt es zuviele Bauern, werden sie den Wald
|
|
||||||
* nicht fällen, sondern verhungern. Der Wald kann nur von Spielern gefällt
|
|
||||||
* werden! Der Wald wandert nicht. Auch bei magischen Terrainveränderungen
|
|
||||||
* darf m nicht negativ werden! */
|
|
||||||
|
|
||||||
if(production(r) <= 0) return;
|
|
||||||
|
|
||||||
maxtrees = production(r) - rpeasants(r)/MAXPEASANTS_PER_AREA;
|
|
||||||
maxtrees = max(0, maxtrees);
|
|
||||||
|
|
||||||
/* Solange es noch freie Plätze gibt, darf jeder Baum versuchen, sich
|
|
||||||
* fortzupflanzen. Da Bäume nicht sofort eingehen, wenn es keinen
|
|
||||||
* Platz gibt (wie zB. die Pferde), darf nicht einfach drauflos vermehrt
|
|
||||||
* werden und dann ein min () gemacht werden, sondern es muß auf diese
|
|
||||||
* Weise vermehrt werden. */
|
|
||||||
|
|
||||||
if(is_cursed(r->attribs, C_CURSED_BY_THE_GODS, 0)) {
|
|
||||||
tree = (int)(tree*0.9);
|
|
||||||
} else if(maxtrees > 0) {
|
|
||||||
int growth = (int)((FORESTGROWTH * 200 * ((maxtrees*1.2)-tree))/maxtrees);
|
|
||||||
growth = max(FORESTGROWTH*50, growth);
|
|
||||||
growth = min(FORESTGROWTH*400, growth);
|
|
||||||
/* printf("Trees: <%d> %d -> ", growth, tree); */
|
|
||||||
for(i=0;i<tree;i++) {
|
|
||||||
if(rand()%10000 < growth) tree++;
|
|
||||||
}
|
|
||||||
/* printf("%d (max: %d)\n", tree, maxtrees); */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Bäume breiten sich in Nachbarregionen aus.
|
|
||||||
* warnung: früher kamen bäume aus nachbarregionen, heute
|
|
||||||
* gehen sie von der aktuellen in die benachbarten.
|
|
||||||
* Die Chance, das ein Baum in eine Region r2 einwandert, ist
|
|
||||||
* (production-rtrees(r2))/10000.
|
|
||||||
* Die Richtung, in der sich ein Baum vermehrt, ist zufällig.
|
|
||||||
* Es ibt also genausoviel Versuche, in einen Geltscher zu
|
|
||||||
* wandern, wie in eine ebene - nur halt weniger Erfolge.
|
|
||||||
* Die Summe der Versuche ist rtrees(r), jeder Baum
|
|
||||||
* versucht es also einmal pro Woche, mit maximal 10% chance
|
|
||||||
* (wenn ein voller wald von lauter leeren ebenen umgeben ist)
|
|
||||||
*/
|
|
||||||
|
|
||||||
for (d=0;d!=MAXDIRECTIONS;++d) {
|
|
||||||
region * r2 = rconnect(r, d);
|
|
||||||
if (r2
|
|
||||||
&& (terrain[r2->terrain].flags & WALK_INTO)
|
|
||||||
&& fval(r2, RF_MALLORN) == fval(r, RF_MALLORN)) {
|
|
||||||
/* Da hier rtrees(r2) abgefragt wird, macht es einen Unterschied,
|
|
||||||
* ob das wachstum in r2 schon stattgefunden hat, oder nicht.
|
|
||||||
* leider nicht einfach zu verhindern */
|
|
||||||
int pt = (production(r2)-rtrees(r2));
|
|
||||||
pt = tree*max(0, pt) /
|
|
||||||
(MAXDIRECTIONS*terrain[T_PLAIN].production_max*10);
|
|
||||||
if (fval(r2, RF_MIGRATION))
|
|
||||||
rsettrees(r2, rtrees(r2) + pt);
|
|
||||||
else {
|
|
||||||
migration * nb;
|
|
||||||
/* haben wir die Migration schonmal benutzt?
|
|
||||||
* wenn nicht, müssen wir sie suchen.
|
|
||||||
* Wandernde Pferde vermehren sich nicht.
|
|
||||||
*/
|
|
||||||
nb = get_migrants(r2);
|
|
||||||
nb->trees += pt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rsettrees(r, tree);
|
|
||||||
assert(tree >= 0);
|
|
||||||
|
|
||||||
/* Jetzt die Kräutervermehrung. Vermehrt wird logistisch:
|
|
||||||
*
|
|
||||||
* Jedes Kraut hat eine Wahrscheinlichkeit von (100-(vorhandene
|
|
||||||
* Kräuter))% sich zu vermehren. */
|
|
||||||
|
|
||||||
for(i = rherbs(r); i > 0; i--) {
|
|
||||||
if (rand()%100 < (100-rherbs(r))) rsetherbs(r, (short)(rherbs(r)+1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if NEW_RESOURCEGROWTH == 0
|
#if NEW_RESOURCEGROWTH == 0
|
||||||
extern attrib_type at_laen;
|
extern attrib_type at_laen;
|
||||||
|
|
|
@ -225,16 +225,36 @@ setstealth_cmd(unit * u, struct order * ord)
|
||||||
a_removeall(&u->attribs, &at_otherfaction);
|
a_removeall(&u->attribs, &at_otherfaction);
|
||||||
} else {
|
} else {
|
||||||
struct faction * f = findfaction(nr);
|
struct faction * f = findfaction(nr);
|
||||||
/* TODO: Prüfung ob Partei sichtbar */
|
|
||||||
if(f==NULL) {
|
if(f==NULL) {
|
||||||
cmistake(u, ord, 66, MSG_EVENT);
|
cmistake(u, ord, 66, MSG_EVENT);
|
||||||
} else {
|
} else {
|
||||||
attrib *a;
|
region * lastr = NULL;
|
||||||
a = a_find(u->attribs, &at_otherfaction);
|
/* for all units mu of our faction, check all the units in the region
|
||||||
|
* they are in, if their visible faction is f, it's ok. use lastr to
|
||||||
|
* avoid testing the same region twice in a row. */
|
||||||
|
unit * mu = u->faction->units;
|
||||||
|
while (mu!=NULL) {
|
||||||
|
unit * ru = mu->region->units;
|
||||||
|
if (mu->region==lastr) continue;
|
||||||
|
while (ru!=NULL) {
|
||||||
|
attrib *a = a_find(ru->attribs, &at_otherfaction);
|
||||||
|
if (a) {
|
||||||
|
faction *fv = get_otherfaction(a);
|
||||||
|
if (fv==f) break;
|
||||||
|
}
|
||||||
|
ru = ru->next;
|
||||||
|
}
|
||||||
|
if (ru!=NULL) break;
|
||||||
|
lastr = mu->region;
|
||||||
|
mu = mu->nextF;
|
||||||
|
}
|
||||||
|
if (mu!=NULL) {
|
||||||
|
attrib * a = a_find(u->attribs, &at_otherfaction);
|
||||||
if (!a) a = a_add(&u->attribs, make_otherfaction(f));
|
if (!a) a = a_add(&u->attribs, make_otherfaction(f));
|
||||||
else a->data.v = f;
|
else a->data.v = f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
cmistake(u, ord, 289, MSG_EVENT);
|
cmistake(u, ord, 289, MSG_EVENT);
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ extern int setwere_cmd(struct unit * u, struct order * ord);
|
||||||
extern int setstealth_cmd(struct unit * u, struct order * ord);
|
extern int setstealth_cmd(struct unit * u, struct order * ord);
|
||||||
extern int spy_cmd(struct unit * u, struct order * ord);
|
extern int spy_cmd(struct unit * u, struct order * ord);
|
||||||
extern int sabotage_cmd(struct unit * u, struct order * ord);
|
extern int sabotage_cmd(struct unit * u, struct order * ord);
|
||||||
void spy_message(int spy, struct unit *u, struct unit *target);
|
extern void spy_message(int spy, struct unit *u, struct unit *target);
|
||||||
|
|
||||||
#define OCEAN_SWIMMER_CHANCE 0.1
|
#define OCEAN_SWIMMER_CHANCE 0.1
|
||||||
#define CANAL_SWIMMER_CHANCE 0.9
|
#define CANAL_SWIMMER_CHANCE 0.9
|
||||||
|
|
Loading…
Reference in New Issue