From ee2026924351f26bc5e36fa667e58a92ff02812c Mon Sep 17 00:00:00 2001 From: CTD Date: Thu, 14 Aug 2014 23:53:32 +0200 Subject: [PATCH 1/2] Kleiner Fix bei den Regionen Es gibt Zeiten da sollte man einfach nicht Programmieren. So ist es richtig. --- src/kernel/move.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/kernel/move.c b/src/kernel/move.c index 9912ad4a6..c2a17f9c6 100644 --- a/src/kernel/move.c +++ b/src/kernel/move.c @@ -891,17 +891,17 @@ static unit *bewegung_blockiert_von(unit * reisender, region * r) } if (guard) { prob += base_prob; /* 30% base chance */ - prob = +guard_count*guard_number_prob; - if (r->terrain = newterrain(T_GLACIER)) - prob = +region_type_prob*2; - if (r->terrain = newterrain(T_SWAMP)) - prob = +region_type_prob*2; - if (r->terrain = newterrain(T_MOUNTAIN)) - prob = +region_type_prob; - if (r->terrain = newterrain(T_VOLCANO)) - prob = +region_type_prob; - if (r->terrain = newterrain(T_VOLCANO_SMOKING)) - prob = +region_type_prob; + prob += guard_count*guard_number_prob; + if (r->terrain == newterrain(T_GLACIER)) + prob += region_type_prob * 2; + if (r->terrain == newterrain(T_SWAMP)) + prob += region_type_prob * 2; + if (r->terrain == newterrain(T_MOUNTAIN)) + prob += region_type_prob; + if (r->terrain == newterrain(T_VOLCANO)) + prob += region_type_prob; + if (r->terrain == newterrain(T_VOLCANO_SMOKING)) + prob += region_type_prob; if (prob > 0 && chance(prob)) { return guard; From 2875fdddd1fc7bf333e55e451e3ebc8284eb65f7 Mon Sep 17 00:00:00 2001 From: CTD Date: Mon, 1 Sep 2014 15:42:56 +0200 Subject: [PATCH 2/2] Fixing Monsters Drachen haben die Attacke-Chance Einstellung komplett ignoriert. Jetzt machen sie zumindest bei 0 nicht mehr. --- src/monsters.c | 89 ++++++++++++++++++++++++++------------------------ 1 file changed, 47 insertions(+), 42 deletions(-) diff --git a/src/monsters.c b/src/monsters.c index 9bcc87919..c0047c3f3 100644 --- a/src/monsters.c +++ b/src/monsters.c @@ -151,51 +151,56 @@ static order *monster_attack(unit * u, const unit * target) static order *get_money_for_dragon(region * r, unit * u, int wanted) { - unit *u2; - int n; - - /* attackiere bewachende einheiten */ - for (u2 = r->units; u2; u2 = u2->next) { - if (u2 != u && is_guard(u2, GUARD_TAX)) { - order *ord = monster_attack(u, u2); - if (ord) - addlist(&u->orders, ord); - } - } - - /* falls genug geld in der region ist, treiben wir steuern ein. */ - if (rmoney(r) >= wanted) { - /* 5% chance, dass der drache aus einer laune raus attackiert */ - if (chance(1.0 - u_race(u)->aggression)) { - return create_order(K_TAX, default_locale, NULL); - } - } - - /* falls der drache launisch ist, oder das regionssilber knapp, greift er alle an */ - n = 0; - for (u2 = r->units; u2; u2 = u2->next) { - if (inside_building(u2)!=u->building && u2->faction != u->faction && cansee(u->faction, r, u2, 0)) { - int m = get_money(u2); - if (m == 0 || is_guard(u2, GUARD_TAX)) - continue; - else { - order *ord = monster_attack(u, u2); - if (ord) { - addlist(&u->orders, ord); - n += m; + unit *u2; + int n; + double attack_chance = monster_attack_chance(); + + if (attack_chance > 0.0 && is_guard(u, GUARD_TAX)) { + /* attackiere bewachende Einheiten nur wenn wir selbst schon bewachen */ + for (u2 = r->units; u2; u2 = u2->next) { + if (u2 != u && is_guard(u2, GUARD_TAX)) { + /*In E3 + E4 etwas problematisch, da der Regionsbesitzer immer bewacht. Der Drache greift also immer die Burg an!*/ + order *ord = monster_attack(u, u2); + if (ord) + addlist(&u->orders, ord); + } } - } } - } - /* falls die einnahmen erreicht werden, bleibt das monster noch eine - * runde hier. */ - if (n + rmoney(r) >= wanted) { - return create_order(K_TAX, default_locale, NULL); - } + /* falls genug geld in der region ist, treiben wir steuern ein. */ + if (rmoney(r) >= wanted) { + /* 5% chance, dass der drache aus einer laune raus attackiert */ + if (attack_chance <= 0.0 || chance(1.0 - u_race(u)->aggression)) { + /* Drachen haben in E3 und E4 keine Einnahmen. Neuer Befehl Pluendern erstmal nur fuer Monster?*/ + return create_order(K_TAX, default_locale, NULL); + } + } - /* wenn wir NULL zurückliefern, macht der drache was anderes, z.b. weggehen */ - return NULL; + /* falls der drache launisch ist, oder das regionssilber knapp, greift er alle an */ + n = 0; + for (u2 = r->units; u2; u2 = u2->next) { + if (inside_building(u2) != u->building && is_guard(u, GUARD_TAX) && u2->faction != u->faction && cansee(u->faction, r, u2, 0)) { + int m = get_money(u2); + if (m == 0 || is_guard(u2, GUARD_TAX) || attack_chance <= 0.0) + continue; + else { + order *ord = monster_attack(u, u2); + if (ord) { + addlist(&u->orders, ord); + n += m; + } + } + } + } + + /* falls die einnahmen erreicht werden, bleibt das monster noch eine */ + /* runde hier. */ + if (n + rmoney(r) >= wanted) { + return create_order(K_TAX, default_locale, NULL); + } + + /* wenn wir NULL zurueckliefern, macht der drache was anderes, z.b. weggehen */ + return NULL; } static int all_money(region * r, faction * f) @@ -780,7 +785,7 @@ void plan_monsters(faction * f) /* Befehle müssen jede Runde neu gegeben werden: */ free_orders(&u->orders); - if (attacking) { + if (attacking && is_guard(u, GUARD_TAX)) { monster_attacks(u); } /* units with a plan to kill get ATTACK orders: */