letzter rest

zauber, fast fertig
This commit is contained in:
Katja Zedel 2002-05-24 07:12:50 +00:00
parent 260ce356e3
commit 7a9a8da8f0
6 changed files with 125 additions and 7 deletions

View File

@ -3313,8 +3313,20 @@ monthly_healing(void)
region *r; region *r;
unit *u; unit *u;
int p; int p;
int healingcurse = 0;
curse *c = NULL;
static const curse_type * heal_ct;
heal_ct = ct_find("healingzone");
for (r = regions; r; r = r->next) { for (r = regions; r; r = r->next) {
if (heal_ct) {
/* bonus zurücksetzen */
healingcurse = 0;
c = get_curse(r->attribs, heal_ct);
if (c) {
healingcurse = curse_geteffect(c);
}
}
for (u = r->units; u; u = u->next) { for (u = r->units; u; u = u->next) {
int umhp; int umhp;
@ -3348,11 +3360,23 @@ monthly_healing(void)
max_unit = max_unit * 3 / 2; max_unit = max_unit * 3 / 2;
} }
#endif #endif
/* der healing curse verändert den Regenerationsprozentsatz.
* Wenn dies für negative Heilung benutzt wird, kann es zu
* negativen u->hp führen! */
if (healingcurse != 0) {
p += healingcurse;
}
/* Aufaddieren der geheilten HP. */ /* Aufaddieren der geheilten HP. */
u->hp = min(u->hp + max_unit/(100/p), umhp); u->hp = min(u->hp + max_unit*p/100, umhp);
if (u->hp < umhp && (rand() % 10 < max_unit % 10)) if (u->hp < umhp && (rand() % 10 < max_unit % 10)){
++u->hp; ++u->hp;
} }
/* soll man an negativer regeneration sterben können? */
if (u->hp <= 0){
u->hp = 1;
}
}
} }
} }
} }

View File

@ -285,6 +285,9 @@ unit_max_hp(const unit * u)
int h; int h;
double p; double p;
h = u->race->hitpoints; h = u->race->hitpoints;
static const curse_type * heal_ct;
heal_ct = ct_find("healingzone");
p = pow(effskill(u, SK_AUSDAUER) / 2.0, 1.5) * 0.2; p = pow(effskill(u, SK_AUSDAUER) / 2.0, 1.5) * 0.2;
h += (int) (h * p + 0.5); h += (int) (h * p + 0.5);
@ -293,6 +296,14 @@ unit_max_hp(const unit * u)
h *= 2; h *= 2;
} }
/* der healing curse verändert die maximalen hp */
if (heal_ct) {
curse *c = get_curse(u->region->attribs, heal_ct);
if (c) {
h = (int) (h * (1.0+(curse_geteffect(c)/100)));
}
}
return h; return h;
} }
/* /*

View File

@ -4481,8 +4481,12 @@ sp_recruit(castorder *co)
return 0; return 0;
} }
/* Immer noch zuviel auf niedrigen Stufen. Deshalb die Rekrutierungskosten /* Immer noch zuviel auf niedrigen Stufen. Deshalb die Rekrutierungskosten
* mit einfliessen lassen und dafür den Exponenten etwas größer. */ * mit einfliessen lassen und dafür den Exponenten etwas größer.
n = (int)((pow(force, 1.6) * 50)/f->race->recruitcost); * Wenn die Rekrutierungskosten deutlich höher sind als der Faktor,
* ist das Verhältniss von ausgegebene Aura pro Bauer bei Stufe 2
* ein mehrfaches von Stufe 1, denn in beiden Fällen gibt es nur 1
* Bauer, nur die Kosten steigen. */
n = (int)((pow(force, 1.6) * 100)/f->race->recruitcost);
n = min(rpeasants(r),n); n = min(rpeasants(r),n);
n = max(n, 1); n = max(n, 1);
@ -4501,6 +4505,55 @@ sp_recruit(castorder *co)
return cast_level; return cast_level;
} }
/* ------------------------------------------------------------- */
/* Name: Wanderprediger - Große Anwerbung
* Stufe: 14
* Gebiet: Cerddor
* Wirkung:
* Bauern schliessen sich der eigenen Partei an
* ist zusätzlich zur Rekrutierungsmenge in der Region
* */
static int
sp_bigrecruit(castorder *co)
{
unit *u;
faction *f;
int n;
region *r = co->rt;
unit *mage = (unit *)co->magician;
int cast_level = co->level;
int force = co->force;
f = mage->faction;
if (rpeasants(r) == 0){
report_failure(mage, co->order);
return 0;
}
/* Für vergleichbare Erfolge bei unterschiedlichen Rassen die
* Rekrutierungskosten mit einfliessen lassen. */
n = (int)((force * force * 1000)/f->race->recruitcost);
/* Zufälliger Wert mit n/2 Maximum, mindestens aber force Anzahl */
n = force+lovar(n);
/* natürlich nur maximal soviele Bauern, wie auch in der Region sind */
n = min(rpeasants(r),n);
if(n <= 0){
report_failure(mage, co->order);
return 0;
}
rsetpeasants(r, rpeasants(r) - n);
u = create_unit(r, f, n, f->race, 0, (n == 1 ? "Bauer" : "Bauern"), mage);
set_string(&u->thisorder, locale_string(u->faction->locale, "defaultorder"));
sprintf(buf, "%s konnte %d %s anwerben", unitname(mage), n,
n == 1 ? "Bauer" : "Bauern");
addmessage(r, mage->faction, buf, MSG_MAGIC, ML_INFO);
return cast_level;
}
/* ------------------------------------------------------------- */ /* ------------------------------------------------------------- */
/* Name: Aushorchen /* Name: Aushorchen
* Stufe: 7 * Stufe: 7
@ -7660,7 +7713,7 @@ spell spelldaten[] =
5, 4, 5, 4,
{ {
{R_AURA, 6, SPC_LEVEL}, {R_AURA, 6, SPC_LEVEL},
{R_MALLORN, 2, SPC_LEVEL}, {R_MALLORN, 1, SPC_LEVEL},
{R_TREES, 1, SPC_FIX}, {R_TREES, 1, SPC_FIX},
{0, 0, 0}, {0, 0, 0},
{0, 0, 0}}, {0, 0, 0}},
@ -9513,6 +9566,27 @@ spell spelldaten[] =
(spell_f)sp_charmingsong, patzer (spell_f)sp_charmingsong, patzer
}, },
{SPL_BIGRECRUIT, "Hohe Kunst der Überzeugung",
"Aus 'Wanderungen' von Firudin dem Weisen: "
"'In Weilersweide, nahe dem Wytharhafen, liegt ein kleiner Gasthof, der "
"nur wenig besucht ist. Niemanden bekannt ist, das dieser Hof "
"bis vor einigen Jahren die Bleibe des verbannten Wanderpredigers Grauwolf "
"war. Nachdem er bei einer seiner berüchtigten flammenden Reden fast die "
"gesammte Bauernschaft angeworben hatte, wurde er wegen Aufruhr verurteilt "
"und verbannt. Nur zögerlich war er bereit mir das Geheimniss seiner "
"Überzeugungskraft zu lehren.'",
NULL,
NULL,
M_BARDE, (SPELLLEVEL), 5, 14,
{
{R_AURA, 20, SPC_LEVEL},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0},
{0, 0, 0}},
(spell_f)sp_bigrecruit, patzer
},
{SPL_RALLYPEASANTMOB, "Aufruhr beschwichtigen", {SPL_RALLYPEASANTMOB, "Aufruhr beschwichtigen",
"Mit Hilfe dieses magischen Gesangs kann der Magier eine Region in " "Mit Hilfe dieses magischen Gesangs kann der Magier eine Region in "
"Aufruhr wieder beruhigen. Die Bauernhorden werden sich verlaufen " "Aufruhr wieder beruhigen. Die Bauernhorden werden sich verlaufen "

View File

@ -204,6 +204,7 @@ enum {
SPL_SHADOWCALL, /* 176? */ SPL_SHADOWCALL, /* 176? */
SPL_MALLORNTREEGROW, SPL_MALLORNTREEGROW,
SPL_INVISIBILITY2_ILLAUN, SPL_INVISIBILITY2_ILLAUN,
SPL_BIGRECRUIT,
MAXALLSPELLS, MAXALLSPELLS,
NO_SPELL = (spellid_t) -1 NO_SPELL = (spellid_t) -1
}; };

View File

@ -359,6 +359,13 @@ static struct curse_type ct_holyground = {
"beschützen diese vor dem der dunklen Magie des lebenden Todes.", "beschützen diese vor dem der dunklen Magie des lebenden Todes.",
cinfo_region cinfo_region
}; };
static struct curse_type ct_healing = {
"healingzone",
CURSETYP_NORM, 0, (M_VIGOUR | M_DURATION),
"Heilung ist in dieser Region magisch beeinflusst.",
cinfo_region
};
void void
register_regioncurse(void) register_regioncurse(void)
@ -388,6 +395,7 @@ register_regioncurse(void)
ct_register(&ct_riotzone); ct_register(&ct_riotzone);
ct_register(&ct_godcursezone); ct_register(&ct_godcursezone);
ct_register(&ct_holyground); ct_register(&ct_holyground);
ct_register(&ct_healing);
} }

View File

@ -620,7 +620,7 @@ show_newspells(void)
* terminieren */ * terminieren */
spellid_t newspellids[] = { spellid_t newspellids[] = {
SPL_INVISIBILITY2_ILLAUN, SPL_BIGRECRUIT,
SPL_NOSPELL }; SPL_NOSPELL };
/* die id's der neuen oder veränderten Sprüche werden in newspellids[] /* die id's der neuen oder veränderten Sprüche werden in newspellids[]