forked from github/server
parent
260ce356e3
commit
7a9a8da8f0
|
@ -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,10 +3360,22 @@ 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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -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 "
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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[]
|
||||||
|
|
Loading…
Reference in New Issue