From 640652ef9934de1353324d5114ee83a83bb02303 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 5 Feb 2006 15:48:52 +0000 Subject: [PATCH] earn_silver Zauber in script/xml ausgelagert. bugfix snowman avoid huge amounts of log-messages handle renaming of spells. --- src/common/kernel/battle.c | 2 +- src/common/kernel/magic.c | 19 +- src/common/kernel/magic.h | 5 +- src/common/kernel/save.c | 10 +- src/common/kernel/save.h | 2 - src/common/kernel/spell.c | 2 +- src/common/kernel/spellid.h | 9 +- src/common/kernel/xmlreader.c | 1 + src/common/spells/alp.c | 2 +- src/common/spells/spells.c | 297 +++++++++++-------------------- src/common/util/attrib.c | 10 +- src/common/util/attrib.h | 2 +- src/common/util/log.c | 82 ++++++--- src/eressea/lua/script.cpp | 12 +- src/eressea/lua/unit.cpp | 2 +- src/eressea/server.cpp | 5 +- src/res/de/strings.xml | 24 +-- src/res/spells.xml | 25 +++ src/scripts/eressea/xmas2004.lua | 2 +- src/scripts/spells.lua | 5 +- 20 files changed, 251 insertions(+), 267 deletions(-) diff --git a/src/common/kernel/battle.c b/src/common/kernel/battle.c index 31a4a1545..66d4d6452 100644 --- a/src/common/kernel/battle.c +++ b/src/common/kernel/battle.c @@ -1478,7 +1478,7 @@ do_combatmagic(battle *b, combatmagic_t was) } for (spellrank = 0; spellrank < MAX_SPELLRANK; spellrank++) { for (co = cll[spellrank]; co; co = co->next) { - fighter * fig = (fighter*)co->magician; + fighter * fig = co->magician.fig; const spell * sp = co->sp; int level = co->level; double power = co->force; diff --git a/src/common/kernel/magic.c b/src/common/kernel/magic.c index 683a725b9..a0cb54b7f 100644 --- a/src/common/kernel/magic.c +++ b/src/common/kernel/magic.c @@ -202,6 +202,7 @@ static int read_mage(attrib * a, FILE * F) { int i, mtype; + boolean update = false; sc_mage * mage = (sc_mage*)a->data.v; char spname[64]; @@ -234,7 +235,11 @@ read_mage(attrib * a, FILE * F) if (strcmp(spname, "end")==0) break; sp = find_spell(mage->magietyp, spname); } - if (sp==NULL) continue; + if (sp==NULL) { + /* flag upstream to show that updatespellist() is necessary (hackish) */ + mage->spellcount = -1; + continue; + } add_spell(mage, sp); } return AT_READ_OK; @@ -373,7 +378,7 @@ read_seenspell(attrib * a, FILE * f) sp = find_spell((magic_t)mtype, buf); } if (sp==NULL) { - log_error(("could not find seenspell '%s'\n", buf)); + /* log_error(("could not find seenspell '%s'\n", buf)); */ return AT_READ_FAIL; } a->data.v = sp; @@ -1275,7 +1280,7 @@ fumble(region * r, unit * u, const spell * sp, int cast_grade) static void patzer(castorder *co) { - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; cmistake(mage, co->order, 180, MSG_MAGIC); @@ -1290,7 +1295,7 @@ do_fumble(castorder *co) { curse * c; region * r = co->rt; - unit * u = (unit*)co->magician; + unit * u = co->magician.u; const spell *sp = co->sp; int level = co->level; int duration; @@ -1558,7 +1563,7 @@ verify_unit(region * r, unit * mage, const spell * sp, spllprm * spobj, order * static int verify_targets(castorder *co) { - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; const spell *sp = co->sp; region *target_r = co->rt; spellparameter *sa = co->par; @@ -2009,7 +2014,7 @@ new_castorder(void *u, unit *u2, const spell *sp, region *r, int lev, castorder *corder; corder = calloc(1, sizeof(castorder)); - corder->magician = u; + corder->magician.u = u; corder->familiar = u2; corder->sp = sp; corder->level = lev; @@ -2680,7 +2685,7 @@ magic(void) order * ord = co->order; int verify, cast_level = co->level; boolean fumbled = false; - unit * u = (unit *)co->magician; + unit * u = co->magician.u; const spell *sp = co->sp; region * target_r = co->rt; diff --git a/src/common/kernel/magic.h b/src/common/kernel/magic.h index ecb367110..9dfd5b2cb 100644 --- a/src/common/kernel/magic.h +++ b/src/common/kernel/magic.h @@ -124,7 +124,10 @@ typedef struct sc_mage { typedef struct castorder { struct castorder *next; - void *magician; /* Magier (kann vom Typ struct unit oder fighter sein) */ + union { + struct unit * u; + struct fighter * fig; + } magician; /* Magier (kann vom Typ struct unit oder fighter sein) */ struct unit *familiar; /* Vertrauter, gesetzt, wenn der Spruch durch den Vertrauten gezaubert wird */ const struct spell *sp; /* Spruch */ diff --git a/src/common/kernel/save.c b/src/common/kernel/save.c index 3ff44c060..acdaa400e 100644 --- a/src/common/kernel/save.c +++ b/src/common/kernel/save.c @@ -1110,9 +1110,9 @@ readunit(FILE * F) if (i != -1){ attrib * a; int csp = 0; - sc_mage * mage = calloc(1, sizeof(sc_mage)); - mage->magietyp = (magic_t) i; + + mage->magietyp = (magic_t) i; mage->spellpoints = ri(F); mage->spchange = ri(F); while ((i = ri(F)) != -1) { @@ -1878,10 +1878,16 @@ readgame(const char * filename, int backup) while (--p >= 0) { unit * u = readunit(F); + sc_mage * mage; assert(u->region==NULL); u->region = r; addlist2(up,u); update_interval(u->faction, u->region); + mage = get_mage(u); + if (mage && mage->spellcount<0) { + mage->spellcount = 0; + updatespelllist(u); + } } } printf("\n"); diff --git a/src/common/kernel/save.h b/src/common/kernel/save.h index 06bb45b01..ad8004893 100644 --- a/src/common/kernel/save.h +++ b/src/common/kernel/save.h @@ -53,8 +53,6 @@ extern int lastturn(void); extern void read_items(FILE *f, struct item **it); extern void write_items(FILE *f, struct item *it); -extern void a_read(FILE * f, struct attrib ** attribs); -extern void a_write(FILE * f, const struct attrib * attribs); extern const char * datapath(void); diff --git a/src/common/kernel/spell.c b/src/common/kernel/spell.c index c7361569d..a5386a2de 100644 --- a/src/common/kernel/spell.c +++ b/src/common/kernel/spell.c @@ -57,7 +57,7 @@ register_spell(spell * sp) spelllist_add(&spells, sp); } -/** versucht einen Spruch über gebiet + bame zu identifizieren. +/** versucht einen Spruch über gebiet + name zu identifizieren. * gibt ansonsten NULL zurück */ spell * find_spell(magic_t mtype, const char * name) diff --git a/src/common/kernel/spellid.h b/src/common/kernel/spellid.h index 0e9f51d2c..47a7f343a 100644 --- a/src/common/kernel/spellid.h +++ b/src/common/kernel/spellid.h @@ -149,13 +149,8 @@ enum { SPL_SPARKLE_CHAOS, SPL_SPARKLE_DREAM = 154, SPL_PULLASTRAL = 156, - SPL_FETCHASTRAL, - SPL_ILLAUN_EARN_SILVER, - SPL_GWYRRD_EARN_SILVER, - SPL_DRAIG_EARN_SILVER, - SPL_TYBIED_EARN_SILVER, - SPL_CERDDOR_EARN_SILVER, - SPL_SHOCKWAVE, + SPL_FETCHASTRAL = 157, + SPL_SHOCKWAVE = 163, SPL_UNDEADHERO = 164, SPL_BECOMEWYRM = 166, SPL_ETERNIZEWALL, diff --git a/src/common/kernel/xmlreader.c b/src/common/kernel/xmlreader.c index 0e1fdaf8e..bf24e0892 100644 --- a/src/common/kernel/xmlreader.c +++ b/src/common/kernel/xmlreader.c @@ -1211,6 +1211,7 @@ parse_spells(xmlDocPtr doc) if (xml_bvalue(node, "ship", false)) sp->sptyp |= ONSHIPCAST; if (xml_bvalue(node, "ocean", false)) sp->sptyp |= OCEANCASTABLE; if (xml_bvalue(node, "far", false)) sp->sptyp |= FARCASTING; + if (xml_bvalue(node, "variable", false)) sp->sptyp |= SPELLLEVEL; if (gamecode_enabled) { /* reading eressea/spells/spell/function */ diff --git a/src/common/spells/alp.c b/src/common/spells/alp.c index 21499e842..80944c499 100644 --- a/src/common/spells/alp.c +++ b/src/common/spells/alp.c @@ -91,7 +91,7 @@ sp_summon_alp(struct castorder *co) { unit *alp, *opfer; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; spellparameter *pa = co->par; diff --git a/src/common/spells/spells.c b/src/common/spells/spells.c index 110976f52..aebc1a9d2 100644 --- a/src/common/spells/spells.c +++ b/src/common/spells/spells.c @@ -569,7 +569,7 @@ sp_summon_familiar(castorder *co) unit *familiar; region *r = co->rt; region *target_region = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; const race * rc; skill_t sk; @@ -672,7 +672,7 @@ sp_summon_familiar(castorder *co) static int sp_destroy_magic(castorder *co) { - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; spellparameter *pa = co->par; @@ -763,7 +763,7 @@ static int sp_transferaura(castorder *co) { int aura, gain, multi = 2; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; spellparameter *pa = co->par; unit * u; @@ -831,7 +831,7 @@ static int sp_goodwinds(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; int duration = cast_level+1; @@ -886,7 +886,7 @@ static int sp_magicstreet(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; if (!fval(r->terrain, LAND_REGION)) { cmistake(mage, co->order, 186, MSG_MAGIC); @@ -927,7 +927,7 @@ static int sp_summonent(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; unit *u; @@ -982,7 +982,7 @@ sp_blessstonecircle(castorder *co) { building *b; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; spellparameter *p = co->par; @@ -1029,7 +1029,7 @@ static int sp_maelstrom(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; curse * c; double power = co->force; @@ -1077,7 +1077,7 @@ sp_mallorn(castorder *co) { region *r = co->rt; int cast_level = co->level; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; if (!fval(r->terrain, LAND_REGION)) { cmistake(mage, co->order, 290, MSG_MAGIC); @@ -1122,7 +1122,7 @@ static int sp_blessedharvest(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; int duration = (int)power+1; @@ -1162,7 +1162,7 @@ sp_hain(castorder *co) { int trees; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; @@ -1207,7 +1207,7 @@ sp_mallornhain(castorder *co) { int trees; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; @@ -1241,7 +1241,7 @@ patzer_ents(castorder *co) int ents; unit *u; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; /* int cast_level = co->level; */ double force = co->force; @@ -1306,7 +1306,7 @@ sp_rosthauch(castorder *co) int n; int success = 0; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; int force = (int)co->force; spellparameter *pa = co->par; @@ -1401,7 +1401,7 @@ sp_kaelteschutz(castorder *co) int n, i = 0; int men; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; int duration = max(cast_level, (int)force) + 1; @@ -1462,7 +1462,7 @@ static int sp_sparkle(castorder *co) { unit *u; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; spellparameter *pa = co->par; int duration = cast_level+1; @@ -1522,7 +1522,7 @@ sp_create_irongolem(castorder *co) unit *u2; attrib *a; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; int number = lovar(force*8*RESOURCE_QUANTITY); @@ -1585,7 +1585,7 @@ sp_create_stonegolem(castorder *co) unit *u2; attrib *a; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; int number = lovar(co->force*5*RESOURCE_QUANTITY); if (number<1) number = 1; @@ -1649,7 +1649,7 @@ sp_great_drought(castorder *co) unit *u; boolean terraform = false; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; int duration = 2; @@ -1781,7 +1781,7 @@ static int sp_treewalkenter(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; spellparameter *pa = co->par; double power = co->force; int cast_level = co->level; @@ -1874,7 +1874,7 @@ sp_treewalkexit(castorder *co) int n; int erfolg = 0; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; double power = co->force; spellparameter *pa = co->par; int cast_level = co->level; @@ -1996,7 +1996,7 @@ static int sp_holyground(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; curse * c; @@ -2032,7 +2032,7 @@ sp_homestone(castorder *co) unit *u; curse * c; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; variant effect; @@ -2095,7 +2095,7 @@ sp_drought(castorder *co) curse *c; unit *u; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; int duration = (int)power+1; @@ -2163,7 +2163,7 @@ sp_fog_of_confusion(castorder *co) { unit *u; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; double range; @@ -2237,7 +2237,7 @@ sp_ironkeeper(castorder *co) { unit *keeper; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; if (rterrain(r) != T_MOUNTAIN && rterrain(r) != T_GLACIER) { @@ -2290,7 +2290,7 @@ sp_stormwinds(castorder *co) unit *u; int erfolg = 0; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; double power = co->force; spellparameter *pa = co->par; int n, force = (int)power; @@ -2373,7 +2373,7 @@ sp_earthquake(castorder *co) building *burg; unit *u; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; for (burg = r->buildings; burg; burg = burg->next){ @@ -2430,7 +2430,7 @@ patzer_peasantmob(castorder *co) unit *u; attrib *a; region *r; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; if (mage->region->land){ r = mage->region; @@ -2499,7 +2499,7 @@ sp_forest_fire(castorder *co) region *nr; direction_t i; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double probability; double percentage = (rand() % 8 + 1) * 0.1; /* 10 - 80% */ @@ -2594,7 +2594,7 @@ sp_fumblecurse(castorder *co) unit *target; int rx, sx; int duration; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; variant effect; @@ -2628,7 +2628,7 @@ sp_fumblecurse(castorder *co) void patzer_fumblecurse(castorder *co) { - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; int duration = (cast_level/2)+1; @@ -2669,7 +2669,7 @@ static int sp_summondragon(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; unit *u; int cast_level = co->level; double power = co->force; @@ -2954,7 +2954,7 @@ sp_firewall(castorder *co) wall_data * fd; attrib * a; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; spellparameter *pa = co->par; @@ -3066,7 +3066,7 @@ sp_wisps(castorder *co) region * r2; direction_t dir; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; spellparameter *pa = co->par; @@ -3116,7 +3116,7 @@ sp_wisps(castorder *co) static int sp_unholypower(castorder *co) { - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; spellparameter *pa = co->par; int i; @@ -3326,7 +3326,7 @@ static int sp_deathcloud(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; attrib *a = a_find(r->attribs, &at_deathcloud); @@ -3343,7 +3343,7 @@ sp_deathcloud(castorder *co) void patzer_deathcloud(castorder *co) { - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int hp = (mage->hp - 2); change_hitpoints(mage, -rand()%hp); @@ -3369,7 +3369,7 @@ static int sp_plague(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; plagues(r, true); @@ -3399,7 +3399,7 @@ static int sp_summonshadow(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; unit *u; @@ -3442,7 +3442,7 @@ sp_summonshadowlords(castorder *co) { unit *u; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; @@ -3476,7 +3476,7 @@ sp_chaossuction(castorder *co) region *rt; faction *f; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; if (getplane(r)!=get_normalplane()) { @@ -3547,7 +3547,7 @@ static int sp_magicboost(castorder *co) { curse * c; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; variant effect; @@ -3608,7 +3608,7 @@ sp_magicboost(castorder *co) static int sp_bloodsacrifice(castorder *co) { - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; int aura; int skill = eff_skill(mage, SK_MAGIC, mage->region); @@ -3666,7 +3666,7 @@ sp_summonundead(castorder *co) int undead; unit *u; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; int force = (int)(co->force*10); const race * race = new_race[RC_SKELETON]; @@ -3731,7 +3731,7 @@ sp_auraleak(castorder *co) double lost; unit *u; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; lost = min(0.95, cast_level * 0.05); @@ -3786,7 +3786,7 @@ sp_babbler(castorder *co) { unit *target; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; spellparameter *pa = co->par; @@ -3841,7 +3841,7 @@ sp_analysesong_obj(castorder *co) { int obj; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; spellparameter *pa = co->par; @@ -3891,7 +3891,7 @@ static int sp_analysesong_unit(castorder *co) { unit *u; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; spellparameter *pa = co->par; @@ -3941,7 +3941,7 @@ sp_charmingsong(castorder *co) unit *target; int duration; skill_t i; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; spellparameter *pa = co->par; @@ -4027,7 +4027,7 @@ sp_song_resistmagic(castorder *co) { variant mr_bonus; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; int duration = (int)force+1; @@ -4059,7 +4059,7 @@ sp_song_susceptmagic(castorder *co) { variant mr_malus; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; int duration = (int)force+1; @@ -4091,7 +4091,7 @@ sp_rallypeasantmob(castorder *co) unit *u, *un; int erfolg = 0; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; /* TODO @@ -4160,7 +4160,7 @@ sp_raisepeasantmob(castorder *co) int n; variant anteil; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; int duration = (int)force+1; @@ -4225,7 +4225,7 @@ sp_migranten(castorder *co) order * ord; int kontaktiert = 0; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; spellparameter *pa = co->par; const spell *sp = co->sp; @@ -4332,7 +4332,7 @@ sp_song_of_peace(castorder *co) { unit *u; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; int duration = 2 + lovar(force/2); @@ -4373,7 +4373,7 @@ sp_generous(castorder *co) { unit *u; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; int duration = (int)force+1; @@ -4424,7 +4424,7 @@ sp_recruit(castorder *co) unit *u; region *r = co->rt; int n, maxp = rpeasants(r); - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; faction *f = mage->faction; @@ -4477,7 +4477,7 @@ sp_bigrecruit(castorder *co) unit *u; region *r = co->rt; int n, maxp = rpeasants(r); - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; faction *f = mage->faction; @@ -4530,7 +4530,7 @@ sp_pump(castorder *co) region *rt; boolean see = false; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; spellparameter *pa = co->par; int cast_level = co->level; const spell *sp = co->sp; @@ -4600,7 +4600,7 @@ sp_seduce(castorder *co) int loot; item **itmp; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; spellparameter *pa = co->par; int cast_level = co->level; const spell *sp = co->sp; @@ -4682,7 +4682,7 @@ sp_calm_monster(castorder *co) curse * c; unit *target; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; spellparameter *pa = co->par; int cast_level = co->level; double force = co->force; @@ -4737,7 +4737,7 @@ sp_headache(castorder *co) int i; unit *target; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; spellparameter *pa = co->par; int cast_level = co->level; @@ -4795,7 +4795,7 @@ sp_raisepeasants(castorder *co) unit *u, *u2; attrib *a; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; @@ -4847,7 +4847,7 @@ sp_depression(castorder *co) { unit *u; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; int duration = (int)force+1; @@ -4885,7 +4885,7 @@ static int sp_dragonsong(castorder *co) { region *r = co->rt; /* Zauberregion */ - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; unit *u; int cast_level = co->level; double power = co->force; @@ -4939,7 +4939,7 @@ static int sp_songofAttraction(castorder *co) { region *r = co->rt; /* Zauberregion */ - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; /* double power = co->force; */ @@ -4971,7 +4971,7 @@ int sp_puttorest(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int dead = deathcount(r); int laid_to_rest = dice((int)(co->force * 2), 100); message * seen = msg_message("puttorest", "mage", mage); @@ -5005,7 +5005,7 @@ sp_icastle(castorder *co) const building_type * type; attrib *a; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; spellparameter *pa = co->par; @@ -5069,7 +5069,7 @@ sp_illusionary_shapeshift(castorder *co) unit *u; const race * rc; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; spellparameter *pa = co->par; @@ -5129,7 +5129,7 @@ int sp_readmind(castorder *co) { unit *target; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; spellparameter *pa = co->par; @@ -5171,7 +5171,7 @@ int sp_analyseregionsdream(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; magicanalyse_region(r, mage, cast_level); @@ -5195,7 +5195,7 @@ int sp_analysedream(castorder *co) { unit *u; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; spellparameter *pa = co->par; @@ -5229,7 +5229,7 @@ int sp_baddreams(castorder *co) { int duration; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; region *r = co->rt; @@ -5272,7 +5272,7 @@ sp_gooddreams(castorder *co) int duration; curse * c; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; variant effect; @@ -5310,7 +5310,7 @@ sp_clonecopy(castorder *co) unit *clone; region *r = co->rt; region *target_region = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; if (get_clone(mage) != NULL ) { @@ -5337,7 +5337,7 @@ sp_dreamreading(castorder *co) { unit *u,*u2; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; spellparameter *pa = co->par; double power = co->force; @@ -5385,7 +5385,7 @@ int sp_sweetdreams(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; spellparameter *pa = co->par; @@ -5432,7 +5432,7 @@ int sp_disturbingdreams(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; int duration = 1 + (int)(power/6); @@ -5456,7 +5456,7 @@ sp_dream_of_confusion(castorder *co) unit *u; region_list *rl,*rl2; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; double range = (power-14)/2-1; @@ -5522,7 +5522,7 @@ int sp_analysemagic(castorder *co) { int obj; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; spellparameter *pa = co->par; @@ -5572,7 +5572,7 @@ int sp_itemcloak(castorder *co) { unit *target; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; int duration = (int)power+1; @@ -5613,7 +5613,7 @@ sp_resist_magic_bonus(castorder *co) int n, m, opfer; variant resistbonus; int duration = 6; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; spellparameter *pa = co->par; @@ -5676,7 +5676,7 @@ sp_enterastral(castorder *co) int remaining_cap; int n, w; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; spellparameter *pa = co->par; @@ -5791,7 +5791,7 @@ sp_pullastral(castorder *co) int remaining_cap; int n, w; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; spellparameter *pa = co->par; @@ -5918,7 +5918,7 @@ sp_leaveastral(castorder *co) int remaining_cap; int n, w; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; spellparameter *pa = co->par; @@ -6033,7 +6033,7 @@ int sp_fetchastral(castorder *co) { int n; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; spellparameter *pa = co->par; double power = co->force; @@ -6143,7 +6143,7 @@ sp_showastral(castorder *co) int c = 0; region_list *rl, *rl2; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; @@ -6232,7 +6232,7 @@ sp_viewreality(castorder *co) region_list *rl, *rl2; unit *u; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; if(getplaneid(r) != 1) { @@ -6273,7 +6273,7 @@ sp_disruptastral(castorder *co) region *rt; unit *u; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; int duration = (int)(power/3)+1; @@ -6379,7 +6379,7 @@ sp_eternizewall(castorder *co) curse * c; building *b; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; spellparameter *pa = co->par; @@ -6440,7 +6440,7 @@ sp_permtransfer(castorder *co) int aura; unit *tu; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; spellparameter *pa = co->par; const spell *sp = co->sp; @@ -6490,7 +6490,7 @@ sp_movecastle(castorder *co) region *target_region; unit *u, *unext; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; spellparameter *pa = co->par; const spell *sp = co->sp; @@ -6584,7 +6584,7 @@ sp_flying_ship(castorder *co) ship *sh; unit *u; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; spellparameter *pa = co->par; @@ -6649,7 +6649,7 @@ sp_stealaura(castorder *co) { int taura; unit *u; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double power = co->force; spellparameter *pa = co->par; @@ -6720,7 +6720,7 @@ sp_antimagiczone(castorder *co) double power; variant effect; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; int duration = (int)force+1; @@ -6779,7 +6779,7 @@ static int sp_magicrunes(castorder *co) { int duration; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; spellparameter *pa = co->par; @@ -6840,7 +6840,7 @@ sp_speed2(castorder *co) { int n, maxmen, used = 0, dur, men; unit *u; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; spellparameter *pa = co->par; @@ -6901,7 +6901,7 @@ sp_q_antimagie(castorder *co) curse * c = NULL; int succ; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; spellparameter *pa = co->par; @@ -6983,7 +6983,7 @@ sp_destroy_curse(castorder *co) int obj; curse * c; region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; double force = co->force; spellparameter *pa = co->par; @@ -7072,7 +7072,7 @@ sp_destroy_curse(castorder *co) int sp_becomewyrm(castorder *co) { - unit *u = (unit *)co->magician; + unit *u = co->magician.u; int wyrms_already_created = 0; int wyrms_allowed; attrib *a; @@ -7115,7 +7115,7 @@ static int sp_wdwpyramid(castorder *co) { region *r = co->rt; - unit *mage = (unit *)co->magician; + unit *mage = co->magician.u; int cast_level = co->level; if(a_find(r->attribs, &at_wdwpyramid) != NULL) { @@ -7149,32 +7149,6 @@ sp_wdwpyramid(castorder *co) return cast_level; } -/* ------------------------------------------------------------- */ -/* Name: Alltagszauber, hat je nach Gebiet anderen Namen - * Stufe: 1 - * Gebiet: alle - * Wirkung: der Magier verdient $50 pro Spruchstufe - * Kosten: 1 SP pro Stufe - */ -#include "../gamecode/economy.h" -/* TODO: das ist scheisse, aber spells gehören eh nicht in den kernel */ -int -sp_earn_silver(castorder *co) -{ - unit *mage = (unit *)co->magician; - double force = co->force; - region *r = co->rt; - int wanted = (int)(force * 50); - int earned = min(rmoney(r), wanted); - - rsetmoney(r, rmoney(r) - earned); - change_money(mage, earned); - /* TODO klären: ist das Silber damit schon reserviert? */ - - add_income(mage, IC_MAGIC, wanted, earned); - return co->level; -} - typedef struct spelldata { spellid_t id; const char *sname; @@ -7211,21 +7185,6 @@ static spelldata spelldaten[] = }, (spell_f)sp_blessedharvest, NULL }, - { - SPL_GWYRRD_EARN_SILVER, "gwyrrdearnsilver", NULL, - NULL, NULL, - M_DRUIDE, - (SPELLLEVEL|ONSHIPCAST), - 5, 1, - { - { "aura", 1, SPC_LEVEL }, - { 0, 0, 0 }, - { 0, 0, 0 }, - { 0, 0, 0 }, - { 0, 0, 0 } - }, - (spell_f)sp_earn_silver, NULL - }, { SPL_STONEGOLEM, "stonegolem", NULL, NULL, NULL, M_DRUIDE, (SPELLLEVEL), 4, 1, @@ -7703,20 +7662,6 @@ static spelldata spelldaten[] = }, (spell_f)sp_sparkle, NULL }, - { - SPL_DRAIG_EARN_SILVER, "draigearnsilver", NULL, - NULL, - NULL, - M_CHAOS, (SPELLLEVEL|ONSHIPCAST), 5, 1, - { - { "aura", 1, SPC_LEVEL }, - { 0, 0, 0 }, - { 0, 0, 0 }, - { 0, 0, 0 }, - { 0, 0, 0 } - }, - (spell_f)sp_earn_silver, NULL - }, { SPL_FIREBALL, "fireball", NULL, NULL, NULL, M_CHAOS, (COMBATSPELL | SPELLLEVEL), 5, 2, @@ -8027,20 +7972,6 @@ static spelldata spelldaten[] = }, (spell_f)sp_sparkle, NULL }, - { - SPL_ILLAUN_EARN_SILVER, "illaunearnsilver", NULL, - NULL, - NULL, - M_TRAUM, (SPELLLEVEL|ONSHIPCAST), 5, 1, - { - { "aura", 1, SPC_LEVEL }, - { 0, 0, 0 }, - { 0, 0, 0 }, - { 0, 0, 0 }, - { 0, 0, 0 } - }, - (spell_f)sp_earn_silver, NULL - }, { SPL_SHADOWKNIGHTS, "shadowknights", NULL, NULL, NULL, M_TRAUM, (PRECOMBATSPELL | SPELLLEVEL), 4, 1, @@ -8373,18 +8304,6 @@ static spelldata spelldaten[] = }, (spell_f)sp_denyattack, NULL }, - { - SPL_CERDDOR_EARN_SILVER, "jugglery", NULL, NULL, NULL, - M_BARDE, (SPELLLEVEL|ONSHIPCAST), 5, 1, - { - { "aura", 1, SPC_LEVEL }, - { 0, 0, 0 }, - { 0, 0, 0 }, - { 0, 0, 0 }, - { 0, 0, 0 } - }, - (spell_f)sp_earn_silver, NULL - }, { SPL_HEALINGSONG, "song_of_healing", NULL, NULL, NULL, M_BARDE, (POSTCOMBATSPELL | SPELLLEVEL), 5, 2, @@ -8926,18 +8845,6 @@ static spelldata spelldaten[] = }, (spell_f)sp_itemcloak, NULL }, - { - SPL_TYBIED_EARN_SILVER, "miracle_doctor", NULL, NULL, NULL, - M_ASTRAL, (SPELLLEVEL|ONSHIPCAST), 5, 1, - { - { "aura", 1, SPC_LEVEL }, - { 0, 0, 0 }, - { 0, 0, 0 }, - { 0, 0, 0 }, - { 0, 0, 0 } - }, - (spell_f)sp_earn_silver, NULL - }, { SPL_TYBIED_FUMBLESHIELD, "tybiedfumbleshield", NULL, NULL, NULL, M_ASTRAL, (PRECOMBATSPELL | SPELLLEVEL), 2, 2, diff --git a/src/common/util/attrib.c b/src/common/util/attrib.c index af4dd5788..261c0e428 100644 --- a/src/common/util/attrib.c +++ b/src/common/util/attrib.c @@ -247,18 +247,16 @@ a_age(attrib ** p) return (*p!=NULL); } -void +int a_read(FILE * f, attrib ** attribs) { - int key; + int key, retval = AT_READ_OK; char zText[128]; strcpy(zText, "unknown"); key = -1; fscanf(f, "%s", zText); - if (!strcmp(zText, "end")) return; -/* { fgets(zText, sizeof(zText), f); ENNO: was ist das? "always ends with \n" ? */ -/* key=-1; }*/ + if (strcmp(zText, "end")==0) return retval; else key = __at_hashkey(zText); while(key!=-1) { @@ -275,6 +273,7 @@ a_read(FILE * f, attrib ** attribs) a_add(attribs, na); break; case AT_READ_FAIL: + retval = AT_READ_FAIL; a_free(na); break; default: @@ -289,6 +288,7 @@ a_read(FILE * f, attrib ** attribs) if (!strcmp(zText, "end")) break; key = __at_hashkey(zText); } + return retval; } void diff --git a/src/common/util/attrib.h b/src/common/util/attrib.h index 2347ea8c6..64318c962 100644 --- a/src/common/util/attrib.h +++ b/src/common/util/attrib.h @@ -74,7 +74,7 @@ extern attrib * a_new(const attrib_type * at); extern void a_free(attrib * a); extern int a_age(attrib ** attribs); -extern void a_read(FILE * f, attrib ** attribs); +extern int a_read(FILE * f, attrib ** attribs); extern void a_write(FILE * f, const attrib * attribs); #define DEFAULT_AGE NULL diff --git a/src/common/util/log.c b/src/common/util/log.c index f61ee7e1b..666411727 100644 --- a/src/common/util/log.c +++ b/src/common/util/log.c @@ -13,6 +13,7 @@ without prior permission by the authors of Eressea. #include "log.h" #include +#include #include #include #include @@ -75,25 +76,52 @@ log_close(void) logfile = 0; } +static int +check_dupe(const char * format, const char * type) +{ + static const char * last_type; + static char last_message[32]; + static int dupes = 0; + if (strncmp(last_message, format, sizeof(last_message))==0) { + ++dupes; + return 1; + } + if (dupes) { + fprintf(logfile, "%s: last error repeated %d times\n", last_type, dupes+1); + if (logfile!=stderr) { + if (flags & LOG_CPERROR) { + fprintf(stderr, "%s: last error repeated %d times\n", last_type, dupes+1); + } + } + dupes = 0; + } + strncpy(last_message, format, sizeof(last_message)); + last_type = type; + return 0; +} + void _log_warn(const char * format, ...) { - va_list marker; fflush(stdout); if (!logfile) logfile = stderr; - fputs("WARNING: ", logfile); - va_start(marker, format); - vfprintf(logfile, format, marker); - va_end(marker); - if (logfile!=stderr) { - if (flags & LOG_CPWARNING) { - fputs("WARNING: ", stderr); - va_start(marker, format); - vfprintf(stderr, format, marker); - va_end(marker); - } - if (flags & LOG_FLUSH) { - log_flush(); + + if (!check_dupe(format, "WARNING")) { + va_list marker; + fputs("WARNING: ", logfile); + va_start(marker, format); + vfprintf(logfile, format, marker); + va_end(marker); + if (logfile!=stderr) { + if (flags & LOG_CPWARNING) { + fputs("WARNING: ", stderr); + va_start(marker, format); + vfprintf(stderr, format, marker); + va_end(marker); + } + if (flags & LOG_FLUSH) { + log_flush(); + } } } } @@ -101,22 +129,24 @@ _log_warn(const char * format, ...) void _log_error(const char * format, ...) { - va_list marker; fflush(stdout); if (!logfile) logfile = stderr; - fputs("ERROR: ", logfile); - va_start(marker, format); - vfprintf(logfile, format, marker); - va_end(marker); - if (logfile!=stderr) { - if (flags & LOG_CPERROR) { - fputs("ERROR: ", stderr); - va_start(marker, format); - vfprintf(stderr, format, marker); - va_end(marker); + if (!check_dupe(format, "ERROR")) { + va_list marker; + fputs("ERROR: ", logfile); + va_start(marker, format); + vfprintf(logfile, format, marker); + va_end(marker); + if (logfile!=stderr) { + if (flags & LOG_CPERROR) { + fputs("ERROR: ", stderr); + va_start(marker, format); + vfprintf(stderr, format, marker); + va_end(marker); + } + log_flush(); } - log_flush(); } } diff --git a/src/eressea/lua/script.cpp b/src/eressea/lua/script.cpp index 139b73a7f..d3d74c8d6 100644 --- a/src/eressea/lua/script.cpp +++ b/src/eressea/lua/script.cpp @@ -90,11 +90,17 @@ static int lua_callspell(castorder *co) { const char * fname = co->sp->sname; - unit * mage = (unit*)co->magician; + unit * mage = co->familiar?co->familiar:co->magician.u; int retval = -1; + const char * hashpos = strchr(fname, '#'); + char fbuf[64]; - if (co->familiar) { - mage = co->familiar; + if (hashpos!=NULL) { + ptrdiff_t len = hashpos - fname; + assert(lenfamiliar = NULL; co->force = sp->level; co->level = sp->level; - co->magician = &u; + co->magician.u = &u; co->order = NULL; co->par = NULL; co->rt = u.region; diff --git a/src/eressea/server.cpp b/src/eressea/server.cpp index 8eee66cd4..e823b55b4 100644 --- a/src/eressea/server.cpp +++ b/src/eressea/server.cpp @@ -155,6 +155,7 @@ extern "C" { static char * orders = NULL; static int nowrite = 0; static boolean g_writemap = false; +static boolean g_ignore_errors = false; static boolean opt_reportonly = false; static const char * luafile = "default.lua"; static const char * script_path = "scripts"; @@ -446,6 +447,7 @@ usage(const char * prog, const char * arg) "-R : erstellt nur die Reports neu\n" "--lomem : keine Messages (RAM sparen)\n" "--nobattle : keine Kämpfe\n" + "--ignore-errors : ignore errors in scripts (please don\'t)\n" "--nomonsters : keine monster KI\n" "--nodebug : keine Logfiles für Kämpfe\n" "--noreports : absolut keine Reporte schreiben\n" @@ -497,6 +499,7 @@ read_args(int argc, char **argv, lua_State * luaState) nocr = true; } else if (strcmp(argv[i]+2, "xml")==0) xmlfile = argv[++i]; + else if (strcmp(argv[i]+2, "ignore-errors")==0) g_ignore_errors = true; else if (strcmp(argv[i]+2, "dirtyload")==0) dirtyload = true; else if (strcmp(argv[i]+2, "nonr")==0) nonr = true; else if (strcmp(argv[i]+2, "nosh")==0) nosh = true; @@ -610,7 +613,7 @@ my_lua_error(lua_State * L) log_error(("A LUA error occured: %s\n", error)); lua_pop(L, 1); - std::terminate(); + if (!g_ignore_errors) std::terminate(); return 1; } diff --git a/src/res/de/strings.xml b/src/res/de/strings.xml index 733024924..23ef7935c 100644 --- a/src/res/de/strings.xml +++ b/src/res/de/strings.xml @@ -2299,6 +2299,10 @@ REPORT + + XML + XML + URSPRUNG @@ -4057,7 +4061,7 @@ Schutz vor Magie Protection from Magic - + Wunderdoktor Miracle Doctor @@ -4121,7 +4125,7 @@ Regentanz Rain Dance - + Gaukeleien Jugglery @@ -4129,7 +4133,7 @@ Friedenslied Appeasing Song - + Viehheilung Cattle Healing @@ -4305,7 +4309,7 @@ Verwünschung Hex - + Kleine Flüche Minor Curses @@ -4423,7 +4427,7 @@ Traumsenden Dream - + Wahrsagen Divination @@ -4722,7 +4726,7 @@ spies. - + Wenn einem der Alchemist nicht weiterhelfen kann, geht man zu dem gelehrten Tybiedmagier. Seine Tränke und Tinkturen helfen gegen @@ -4922,7 +4926,7 @@ enchanted will realize that they probably talked too much. - + Cerddormagier sind _die_ Gaukler unter den Magiern, sie lieben es das Volk zu unterhalten und im Mittelpunkt zu stehen. Schon Anfänger lernen die @@ -4939,7 +4943,7 @@ the end of the week, the bard will have earned 50 silver per level. - + Die Fähigkeiten der Gwyrrd-Magier in der Viehzucht und Heilung sind bei den Bauern sehr begehrt. Gerade auf Märkten sind ihre Dienste häufig sehr @@ -5533,7 +5537,7 @@ subject to a harmless curse. - + In den dunkleren Gassen gibt es sie, die Flüche und Verhexungen auf Bestellung. Aber auch Gegenzauber hat der Jünger des Draigs @@ -5990,7 +5994,7 @@ cible du sort. - + Personne n'interprète aussi bien les rêves que les mages d'Illaun. Ils sont également versés dans l'utilisation des objets utilisés diff --git a/src/res/spells.xml b/src/res/spells.xml index e4d2bf565..4702a7023 100644 --- a/src/res/spells.xml +++ b/src/res/spells.xml @@ -8,6 +8,11 @@ + + + + + @@ -37,6 +42,11 @@ + + + + + @@ -59,6 +69,11 @@ + + + + + @@ -87,6 +102,11 @@ + + + + + @@ -109,6 +129,11 @@ + + + + + diff --git a/src/scripts/eressea/xmas2004.lua b/src/scripts/eressea/xmas2004.lua index b91e5913b..b7a720da3 100644 --- a/src/scripts/eressea/xmas2004.lua +++ b/src/scripts/eressea/xmas2004.lua @@ -1,4 +1,4 @@ -function use_snomwan(u, amount) +function use_snowman(u, amount) if u.region.terrain == "glacier" then local man = add_unit(u.faction, u.region) u.race = "snowman" diff --git a/src/scripts/spells.lua b/src/scripts/spells.lua index f2c96b63f..230c78f65 100644 --- a/src/scripts/spells.lua +++ b/src/scripts/spells.lua @@ -90,7 +90,7 @@ function create_bagofholding(r, mage, level, force) end -- TODO: -function earnsilver(r, mage, level, force) +function earn_silver(r, mage, level, force) local money = r:get_resource("money") local wanted = 50 * force local amount = wanted @@ -100,11 +100,12 @@ function earnsilver(r, mage, level, force) r:set_resource("money", money - amount) mage:add_item("money", amount) - msg = message("income") + local msg = message("income") msg:set_unit("unit", mage) msg:set_region("region", r) msg:set_int("mode", 6) msg:set_int("wanted", wanted) msg:set_int("amount", amount) msg:send_faction(mage.faction) + return level end