From e1dc630bcd66de4ab73306421113702c6893f6f2 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 10 Jul 2005 16:32:47 +0000 Subject: [PATCH] double commit (I know it's bad, but I messed up): MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit http://eressea.upb.de/mantis/view.php?id=595 Durchreise von unsichtbaren Einheiten wird angezeigt - invisible() war an vielen Stellen in ein #if geklammert, das dazu führte, das der alte ROI nicht funktioniert. http://eressea.upb.de/mantis/view.php?id=581 Bewachen von Untoten (Skelette, Skelettherren, Dämonen) - Untote lernen jetzt in der ersten Woche waffenlosen Kampf, und bewachen damit. Der alte CANGUARD Hack wird vorerst von keinem Monster mehr genutzt. ACHTUNG! Die letztgenannte Änderung führt dazu dass Monster in der kommenden Woche evtl. aufhören, Regionen zu bewachen, bis sie's wieder gelernt haben. --- src/common/gamecode/monster.c | 13 +++++++++ src/common/gamecode/spy.c | 4 +-- src/common/gamecode/study.c | 2 +- src/common/kernel/battle.c | 2 +- src/common/kernel/build.c | 6 +---- src/common/kernel/eressea.c | 12 ++------- src/common/kernel/movement.c | 3 +-- src/common/kernel/spell.c | 2 +- src/common/kernel/unit.c | 14 +++++++--- src/common/kernel/unit.h | 2 +- src/res/races.xml | 50 +++++++++++++++++------------------ 11 files changed, 57 insertions(+), 53 deletions(-) diff --git a/src/common/gamecode/monster.c b/src/common/gamecode/monster.c index 2f79020e7..64e697edd 100644 --- a/src/common/gamecode/monster.c +++ b/src/common/gamecode/monster.c @@ -947,6 +947,19 @@ plan_monsters(void) } } } + + if (long_order==NULL) { + /* Einheiten, die Waffenlosen Kampf lernen könnten, lernen es um + * zu bewachen: */ + if (u->race->bonus[SK_WEAPONLESS] != -99) { + if (eff_skill(u, SK_WEAPONLESS, u->region) < 1) { + sprintf(buf, "%s %s", locale_string(f->locale, keywords[K_STUDY]), + skillname(SK_WEAPONLESS, f->locale)); + long_order = parse_order(buf, f->locale); + } + } + } + if (long_order==NULL) { /* Ab hier noch nicht generalisierte Spezialbehandlungen. */ diff --git a/src/common/gamecode/spy.c b/src/common/gamecode/spy.c index d494ceb90..b4608341b 100644 --- a/src/common/gamecode/spy.c +++ b/src/common/gamecode/spy.c @@ -96,11 +96,9 @@ spy_cmd(unit * u, struct order * ord) observe = eff_skill(target, SK_OBSERVATION, r) - (effskill(u, SK_STEALTH) + eff_skill(u, SK_SPY, r)/2); -#if NEWATSROI == 0 - if (invisible(u) >= u->number && get_item(target, I_AMULET_OF_TRUE_SEEING) == 0) { + if (invisible(u, target) >= u->number) { observe = min(observe, 0); } -#endif /* Anschließend wird - unabhängig vom Erfolg - gewürfelt, ob der * Spionageversuch bemerkt wurde. Die Wahrscheinlich dafür ist (100 - diff --git a/src/common/gamecode/study.c b/src/common/gamecode/study.c index 7c2530583..f74d4aa03 100644 --- a/src/common/gamecode/study.c +++ b/src/common/gamecode/study.c @@ -677,7 +677,7 @@ learn(void) of all units in the region, to be able to make it cumulative with with an academy */ - if(buildingtype_exists(r, bt_find("artacademy"))) { + if (buildingtype_exists(r, bt_find("artacademy"))) { days *= 2; } diff --git a/src/common/kernel/battle.c b/src/common/kernel/battle.c index ba8cc4fa2..31f13382a 100644 --- a/src/common/kernel/battle.c +++ b/src/common/kernel/battle.c @@ -240,7 +240,7 @@ armedmen(const unit * u) int n = 0; if (!(urace(u)->flags & RCF_NOWEAPONS)) { if ((urace(u)->ec_flags & CANGUARD) || effskill(u, SK_WEAPONLESS)>=1) { - /* kann ohne waffen bewachen: fuer untote und drachen */ + /* kann ohne waffen bewachen: fuer drachen */ n = u->number; } else { /* alle Waffen werden gezaehlt, und dann wird auf die Anzahl diff --git a/src/common/kernel/build.c b/src/common/kernel/build.c index 483b22045..62073b534 100644 --- a/src/common/kernel/build.c +++ b/src/common/kernel/build.c @@ -98,11 +98,7 @@ slipthru(const region * r, const unit * u, const building * b) for (u2 = r->units; u2; u2 = u2->next) if (usiege(u2) == b) { -#if NEWATSROI == 0 - if (invisible(u) >= u->number && - !get_item(u2, I_AMULET_OF_TRUE_SEEING)) - continue; -#endif + if (invisible(u, u2) >= u->number) continue; o = eff_skill(u2, SK_OBSERVATION, r); diff --git a/src/common/kernel/eressea.c b/src/common/kernel/eressea.c index 6bd6bd978..af7381eab 100644 --- a/src/common/kernel/eressea.c +++ b/src/common/kernel/eressea.c @@ -1085,11 +1085,7 @@ cansee(const faction * f, const region * r, const unit * u, int modifier) break; } -#if NEWATSROI == 0 - if (invisible(u) >= u->number - && !get_item(u2, I_AMULET_OF_TRUE_SEEING)) - continue; -#endif + if (invisible(u, u2) >= u->number) continue; o = eff_skill(u2, SK_OBSERVATION, r); #ifdef NIGHTEYES @@ -1132,11 +1128,7 @@ cansee_durchgezogen(const faction * f, const region * r, const unit * u, int mod if (u2->faction == f) { int o; -#if NEWATSROI == 0 - if (invisible(u) >= u->number - && !get_item(u2, I_AMULET_OF_TRUE_SEEING)) - continue; -#endif + if (invisible(u, u2) >= u->number) continue; o = eff_skill(u2, SK_OBSERVATION, r); diff --git a/src/common/kernel/movement.c b/src/common/kernel/movement.c index e304cbb10..2e524366c 100644 --- a/src/common/kernel/movement.c +++ b/src/common/kernel/movement.c @@ -793,8 +793,7 @@ bewegung_blockiert_von(unit * reisender, region * r) for (u=r->units;u && !contact;u=u->next) { if (getguard(u) & GUARD_TRAVELTHRU) { int sk = eff_skill(u, SK_OBSERVATION, r); - if (invisible(reisender) >= reisender->number && - !get_item(u, I_AMULET_OF_TRUE_SEEING)) continue; + if (invisible(reisender, u) >= reisender->number) continue; if (u->faction==reisender->faction) contact = true; else if (ucontact(u, reisender)) contact = true; else if (alliedunit(u, reisender->faction, HELP_GUARD)) contact = true; diff --git a/src/common/kernel/spell.c b/src/common/kernel/spell.c index d4935c282..1752f80e8 100644 --- a/src/common/kernel/spell.c +++ b/src/common/kernel/spell.c @@ -4950,7 +4950,7 @@ sp_raisepeasants(castorder *co) bauern = (int)min(rpeasants(r), power*250); rsetpeasants(r, rpeasants(r) - bauern); - u2 = create_unit(r,mage->faction, bauern, new_race[RC_PEASANT], 0,"Wilder Bauernmob",mage); + u2 = create_unit(r, mage->faction, bauern, new_race[RC_PEASANT], 0, "Wilder Bauernmob", mage); set_string(&u2->name, "Erzürnte Bauern"); fset(u2, UFL_LOCKED); diff --git a/src/common/kernel/unit.c b/src/common/kernel/unit.c index 4db9795e2..e621b8b4d 100644 --- a/src/common/kernel/unit.c +++ b/src/common/kernel/unit.c @@ -1110,14 +1110,20 @@ eff_skill_study(const unit * u, skill_t sk, const region * r) } int -invisible(const unit *u) +invisible(const unit *target, const unit * viewer) { #if NEWATSROI == 1 return 0; #else - return get_item(u, I_RING_OF_INVISIBILITY) - + 100 * get_item(u, I_SPHERE_OF_INVISIBILITY); - + if (viewer->faction==target->faction) return 0; + else { + int hidden = get_item(target, I_RING_OF_INVISIBILITY) + 100 * get_item(target, I_SPHERE_OF_INVISIBILITY); + if (hidden) { + hidden = min(hidden, target->number); + hidden -= get_item(viewer, I_AMULET_OF_TRUE_SEEING); + } + return hidden; + } #endif } diff --git a/src/common/kernel/unit.h b/src/common/kernel/unit.h index c5f5392ac..19687a809 100644 --- a/src/common/kernel/unit.h +++ b/src/common/kernel/unit.h @@ -217,7 +217,7 @@ extern void set_number(struct unit * u, int count); extern boolean learn_skill(struct unit * u, skill_t sk, double chance); -extern int invisible(const unit *u); +extern int invisible(const struct unit *target, const struct unit * viewer); #ifdef __cplusplus } diff --git a/src/res/races.xml b/src/res/races.xml index db09d3911..4206150fe 100644 --- a/src/res/races.xml +++ b/src/res/races.xml @@ -565,11 +565,11 @@ - + - + @@ -611,7 +611,7 @@ - + @@ -648,7 +648,7 @@ - + @@ -663,12 +663,12 @@ - + - + @@ -681,7 +681,7 @@ - + @@ -695,7 +695,7 @@ - + @@ -716,7 +716,7 @@ - + @@ -967,11 +967,11 @@ - + - + @@ -979,7 +979,7 @@ - + @@ -993,7 +993,7 @@ - + @@ -1011,7 +1011,7 @@ - + @@ -1029,7 +1029,7 @@ - + @@ -1045,7 +1045,7 @@ - + @@ -1060,7 +1060,7 @@ - + @@ -1075,7 +1075,7 @@ - + @@ -1122,7 +1122,7 @@ - + @@ -1282,7 +1282,7 @@ - + @@ -1319,7 +1319,7 @@ - + @@ -1330,7 +1330,7 @@ - + @@ -1380,7 +1380,7 @@ - + @@ -1392,7 +1392,7 @@ - + @@ -1410,7 +1410,7 @@