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);
|
||||
}
|
||||
|
||||
#if GROWING_TREES
|
||||
|
||||
static int
|
||||
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
|
||||
extern attrib_type at_laen;
|
||||
|
|
|
@ -225,16 +225,36 @@ setstealth_cmd(unit * u, struct order * ord)
|
|||
a_removeall(&u->attribs, &at_otherfaction);
|
||||
} else {
|
||||
struct faction * f = findfaction(nr);
|
||||
/* TODO: Prüfung ob Partei sichtbar */
|
||||
if(f==NULL) {
|
||||
cmistake(u, ord, 66, MSG_EVENT);
|
||||
} else {
|
||||
attrib *a;
|
||||
a = a_find(u->attribs, &at_otherfaction);
|
||||
region * lastr = NULL;
|
||||
/* 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));
|
||||
else a->data.v = f;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
cmistake(u, ord, 289, MSG_EVENT);
|
||||
}
|
||||
|
|
|
@ -852,7 +852,7 @@ ucansee(const struct faction *f, const struct unit *u, const struct unit *x)
|
|||
faction *
|
||||
visible_faction(const faction *f, const unit * u)
|
||||
{
|
||||
if(!alliedunit(u, f, HELP_FSTEALTH)) {
|
||||
if (!alliedunit(u, f, HELP_FSTEALTH)) {
|
||||
attrib *a = a_find(u->attribs, &at_otherfaction);
|
||||
if (a) {
|
||||
faction *fv = get_otherfaction(a);
|
||||
|
|
|
@ -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 spy_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 CANAL_SWIMMER_CHANCE 0.9
|
||||
|
|
Loading…
Reference in New Issue