crashbugs in randenc und rostregen

This commit is contained in:
Enno Rehling 2005-10-09 19:52:21 +00:00
parent 9ba5ebedb9
commit 873404d8f4
4 changed files with 149 additions and 142 deletions

View File

@ -167,130 +167,133 @@ dissolve_units(void)
}
static int
improve_all(faction * f, skill_t sk, int weeks)
improve_all(faction * f, skill_t sk, int by_weeks)
{
unit *u;
for (u = f->units; u; u = u->nextF) {
if (has_skill(u, sk)) {
while (weeks--) {
learn_skill(u, sk, 1.0);
}
}
}
return weeks;
unit *u;
boolean ret = by_weeks;
for (u = f->units; u; u = u->nextF) {
if (has_skill(u, sk)) {
int weeks = 0;
for (;weeks!=by_weeks;++weeks) {
learn_skill(u, sk, 1.0);
ret = 0;
}
}
}
return ret;
}
void
find_manual(region * r, unit * u)
{
skill_t skill = NOSKILL;
sprintf(buf, "%s stolper%c bei der Erforschung der Region über ",
unitname(u), "nt"[u->number == 1]);
skill_t skill = NOSKILL;
sprintf(buf, "%s stolper%c bei der Erforschung der Region über ",
unitname(u), "nt"[u->number == 1]);
switch (rand() % 4) {
case 0:
scat("die Ruine eines alten Tempels");
break;
case 1:
scat("eine alte Burgruine");
break;
case 2:
scat("ein zerfallenes Bauernhaus");
break;
case 3:
scat("eine Leiche am Wegesrand");
break;
}
scat(". Bei der Durchsuchung ");
if (u->number == 1) {
scat("stößt");
} else {
scat("stoßen");
}
scat(" sie auf das zerfledderte Exemplar eines alten Buches, betitelt ");
switch (rand() % 36) {
case 0:
scat("\'Magie der Elemente\'");
skill = SK_MAGIC;
break;
case 1:
case 2:
case 3:
case 4:
scat("\'Schwerter, Armbrüste, Langbögen\'");
skill = SK_WEAPONSMITH;
break;
case 5:
case 6:
scat("\'Gorms Almanach der Rationellen Kriegsführung\'");
skill = SK_TACTICS;
break;
case 7:
case 8:
case 9:
case 10:
scat("\'Katamarane, Koggen, Karavellen\'");
skill = SK_SHIPBUILDING;
break;
case 11:
case 12:
case 13:
case 14:
scat("\'Wege der Sterne\'");
skill = SK_SAILING;
break;
case 15:
case 16:
case 17:
scat("\'Nadishahs Kleine Gift- und Kräuterkunde\'");
skill = SK_HERBALISM;
break;
case 18:
case 19:
scat("\'Mandricks Kompendium der Alchemie\'");
skill = SK_ALCHEMY;
break;
case 20:
case 21:
case 22:
case 23:
scat("\'Die Konstruktion der Burgen und Schlösser von Zentralandune\'");
skill = SK_BUILDING;
break;
case 24:
case 25:
case 26:
case 27:
scat("\'Die Esse\'");
skill = SK_ARMORER;
break;
case 28:
case 29:
case 30:
case 31:
scat("\'Über die Gewinnung von Erzen\'");
skill = SK_MINING;
break;
case 32:
case 33:
case 34:
case 35:
scat("\'Barinions Lieder, eine Einführung für Unbedarfte\'");
skill = SK_ENTERTAINMENT;
break;
}
scat(". Der Wissensschub ist enorm.");
addmessage(r, u->faction, buf, MSG_EVENT, ML_IMPORTANT);
switch (rand() % 4) {
case 0:
scat("die Ruine eines alten Tempels");
break;
case 1:
scat("eine alte Burgruine");
break;
case 2:
scat("ein zerfallenes Bauernhaus");
break;
case 3:
scat("eine Leiche am Wegesrand");
break;
}
scat(". Bei der Durchsuchung ");
if (u->number == 1) {
scat("stößt");
} else {
scat("stoßen");
}
scat(" sie auf das zerfledderte Exemplar eines alten Buches, betitelt ");
switch (rand() % 36) {
case 0:
scat("\'Magie der Elemente\'");
skill = SK_MAGIC;
break;
case 1:
case 2:
case 3:
case 4:
scat("\'Schwerter, Armbrüste, Langbögen\'");
skill = SK_WEAPONSMITH;
break;
case 5:
case 6:
scat("\'Gorms Almanach der Rationellen Kriegsführung\'");
skill = SK_TACTICS;
break;
case 7:
case 8:
case 9:
case 10:
scat("\'Katamarane, Koggen, Karavellen\'");
skill = SK_SHIPBUILDING;
break;
case 11:
case 12:
case 13:
case 14:
scat("\'Wege der Sterne\'");
skill = SK_SAILING;
break;
case 15:
case 16:
case 17:
scat("\'Nadishahs Kleine Gift- und Kräuterkunde\'");
skill = SK_HERBALISM;
break;
case 18:
case 19:
scat("\'Mandricks Kompendium der Alchemie\'");
skill = SK_ALCHEMY;
break;
case 20:
case 21:
case 22:
case 23:
scat("\'Die Konstruktion der Burgen und Schlösser von Zentralandune\'");
skill = SK_BUILDING;
break;
case 24:
case 25:
case 26:
case 27:
scat("\'Die Esse\'");
skill = SK_ARMORER;
break;
case 28:
case 29:
case 30:
case 31:
scat("\'Über die Gewinnung von Erzen\'");
skill = SK_MINING;
break;
case 32:
case 33:
case 34:
case 35:
scat("\'Barinions Lieder, eine Einführung für Unbedarfte\'");
skill = SK_ENTERTAINMENT;
break;
}
scat(". Der Wissensschub ist enorm.");
addmessage(r, u->faction, buf, MSG_EVENT, ML_IMPORTANT);
if (improve_all(u->faction, skill, 3) == 3) {
int i;
for (i=0;i!=9;++i) learn_skill(u, skill, 1.0);
}
if (improve_all(u->faction, skill, 3) == 3) {
int i;
for (i=0;i!=9;++i) learn_skill(u, skill, 1.0);
}
}
static void

View File

@ -1348,7 +1348,7 @@ sp_rosthauch(castorder *co)
for (;iweapon!=NULL;iweapon=iweapon->next) {
item ** ip = i_find(&u->items, iweapon->type);
if (ip) {
if (*ip) {
int i = min((*ip)->number, force);
if (iweapon->chance<1.0) {
i = (int)(i*iweapon->chance);
@ -1365,27 +1365,27 @@ sp_rosthauch(castorder *co)
if (force<=0) break;
}
if (ironweapon>0) {
/* {$mage mage} legt einen Rosthauch auf {target}. {amount} Waffen
* wurden vom Rost zerfressen */
ADDMSG(&mage->faction->msgs, msg_message(
"rust_effect", "mage target amount", mage, u, ironweapon));
ADDMSG(&u->faction->msgs, msg_message(
"rust_effect", "mage target amount",
cansee(u->faction, r, mage, 0) ? mage:NULL, u, ironweapon));
success += ironweapon;
} else {
/* {$mage mage} legt einen Rosthauch auf {target}, doch der
* Rosthauch fand keine Nahrung */
ADDMSG(&mage->faction->msgs, msg_message(
"rust_fail", "mage target", mage, u));
}
}
/* in success stehen nun die insgesamt zerstörten Waffen. Im
* ungünstigsten Fall kann pro Stufe nur eine Waffe verzaubert werden,
* darum wird hier nur für alle Fälle in denen noch weniger Waffen
* betroffen wurden ein Kostennachlass gegeben */
return min(success, cast_level);
if (ironweapon>0) {
/* {$mage mage} legt einen Rosthauch auf {target}. {amount} Waffen
* wurden vom Rost zerfressen */
ADDMSG(&mage->faction->msgs, msg_message("rust_effect",
"mage target amount", mage, u, ironweapon));
ADDMSG(&u->faction->msgs, msg_message("rust_effect",
"mage target amount",
cansee(u->faction, r, mage, 0) ? mage:NULL, u, ironweapon));
success += ironweapon;
} else {
/* {$mage mage} legt einen Rosthauch auf {target}, doch der
* Rosthauch fand keine Nahrung */
ADDMSG(&mage->faction->msgs, msg_message(
"rust_fail", "mage target", mage, u));
}
}
/* in success stehen nun die insgesamt zerstörten Waffen. Im
* ungünstigsten Fall kann pro Stufe nur eine Waffe verzaubert werden,
* darum wird hier nur für alle Fälle in denen noch weniger Waffen
* betroffen wurden ein Kostennachlass gegeben */
return min(success, cast_level);
}

View File

@ -408,7 +408,7 @@ get_island(region * root, region_list ** rlist)
}
}
int
static int
island_size(region * r)
{
int size = 0;
@ -424,7 +424,11 @@ island_size(region * r)
for (d=0;d!=MAXDIRECTIONS;++d) {
region * rn = rconnect(r, d);
if (rn && !fval(rn, FL_MARK) && rn->land) {
add_regionlist(&rlist->next, rn);
region_list * rnew = malloc(sizeof(region_list));
rnew->data = rn;
rnew->next = rlist->next;
rlist->next = rnew;
fset(rn, FL_MARK);
}
}
rlist = rlist->next;

View File

@ -8,7 +8,7 @@ end
function change_locales()
-- local localechange = { }
local localechange = { en = { "bLub" } }
local localechange = { de = { "2xwr" } }
for loc, flist in localechange do
for index, name in flist do