forked from github/server
parent
260ce356e3
commit
7a9a8da8f0
|
@ -3313,8 +3313,20 @@ monthly_healing(void)
|
|||
region *r;
|
||||
unit *u;
|
||||
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) {
|
||||
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) {
|
||||
int umhp;
|
||||
|
||||
|
@ -3348,11 +3360,23 @@ monthly_healing(void)
|
|||
max_unit = max_unit * 3 / 2;
|
||||
}
|
||||
#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. */
|
||||
u->hp = min(u->hp + max_unit/(100/p), umhp);
|
||||
if (u->hp < umhp && (rand() % 10 < max_unit % 10))
|
||||
u->hp = min(u->hp + max_unit*p/100, umhp);
|
||||
if (u->hp < umhp && (rand() % 10 < max_unit % 10)){
|
||||
++u->hp;
|
||||
}
|
||||
/* soll man an negativer regeneration sterben können? */
|
||||
if (u->hp <= 0){
|
||||
u->hp = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -285,6 +285,9 @@ unit_max_hp(const unit * u)
|
|||
int h;
|
||||
double p;
|
||||
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;
|
||||
h += (int) (h * p + 0.5);
|
||||
|
@ -293,6 +296,14 @@ unit_max_hp(const unit * u)
|
|||
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;
|
||||
}
|
||||
/*
|
||||
|
|
|
@ -4481,8 +4481,12 @@ sp_recruit(castorder *co)
|
|||
return 0;
|
||||
}
|
||||
/* Immer noch zuviel auf niedrigen Stufen. Deshalb die Rekrutierungskosten
|
||||
* mit einfliessen lassen und dafür den Exponenten etwas größer. */
|
||||
n = (int)((pow(force, 1.6) * 50)/f->race->recruitcost);
|
||||
* mit einfliessen lassen und dafür den Exponenten etwas größer.
|
||||
* 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 = max(n, 1);
|
||||
|
||||
|
@ -4501,6 +4505,55 @@ sp_recruit(castorder *co)
|
|||
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
|
||||
* Stufe: 7
|
||||
|
@ -7660,7 +7713,7 @@ spell spelldaten[] =
|
|||
5, 4,
|
||||
{
|
||||
{R_AURA, 6, SPC_LEVEL},
|
||||
{R_MALLORN, 2, SPC_LEVEL},
|
||||
{R_MALLORN, 1, SPC_LEVEL},
|
||||
{R_TREES, 1, SPC_FIX},
|
||||
{0, 0, 0},
|
||||
{0, 0, 0}},
|
||||
|
@ -9513,6 +9566,27 @@ spell spelldaten[] =
|
|||
(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",
|
||||
"Mit Hilfe dieses magischen Gesangs kann der Magier eine Region in "
|
||||
"Aufruhr wieder beruhigen. Die Bauernhorden werden sich verlaufen "
|
||||
|
|
|
@ -204,6 +204,7 @@ enum {
|
|||
SPL_SHADOWCALL, /* 176? */
|
||||
SPL_MALLORNTREEGROW,
|
||||
SPL_INVISIBILITY2_ILLAUN,
|
||||
SPL_BIGRECRUIT,
|
||||
MAXALLSPELLS,
|
||||
NO_SPELL = (spellid_t) -1
|
||||
};
|
||||
|
|
|
@ -359,6 +359,13 @@ static struct curse_type ct_holyground = {
|
|||
"beschützen diese vor dem der dunklen Magie des lebenden Todes.",
|
||||
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
|
||||
register_regioncurse(void)
|
||||
|
@ -388,6 +395,7 @@ register_regioncurse(void)
|
|||
ct_register(&ct_riotzone);
|
||||
ct_register(&ct_godcursezone);
|
||||
ct_register(&ct_holyground);
|
||||
ct_register(&ct_healing);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -620,7 +620,7 @@ show_newspells(void)
|
|||
* terminieren */
|
||||
|
||||
spellid_t newspellids[] = {
|
||||
SPL_INVISIBILITY2_ILLAUN,
|
||||
SPL_BIGRECRUIT,
|
||||
SPL_NOSPELL };
|
||||
|
||||
/* die id's der neuen oder veränderten Sprüche werden in newspellids[]
|
||||
|
|
Loading…
Reference in New Issue