From c580b96da80f190efe14c28a677306196041fcc9 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 18 Feb 2005 12:20:29 +0000 Subject: [PATCH] http://eressea.upb.de/mantis/view.php?id=446 Zauber mit REGION als letztem Parameter beschwerten sich ueber fehlende Parameter. --- src/common/kernel/magic.c | 158 ++++++++++++++++++++------------------ src/common/kernel/spell.c | 14 ++-- 2 files changed, 92 insertions(+), 80 deletions(-) diff --git a/src/common/kernel/magic.c b/src/common/kernel/magic.c index c352cba21..398a7a47b 100644 --- a/src/common/kernel/magic.c +++ b/src/common/kernel/magic.c @@ -1862,7 +1862,13 @@ add_spellparameter(region *target_r, unit *u, const char *syntax, char ** param, int minlen = 0; for (c=syntax;*c!=0;++c) { - if (*c!='+' && *c!='k') ++minlen; + /* this makes sure that: + * minlen("kc?") = 0 + * minlen("kc+") = 1 + * minlen("cccc+c?") = 4 + */ + if (*c=='?') --minlen; + else if (*c!='+' && *c!='k') ++minlen; } c = syntax; @@ -1883,78 +1889,84 @@ add_spellparameter(region *target_r, unit *u, const char *syntax, char ** param, param_t pword; int j = -1; switch (*c) { - case '+': - /* das vorhergehende Element kommt ein oder mehrmals vor, wir - * springen zum key zurück */ - j = 0; - --c; - break; - case 'u': - /* Parameter ist eine Einheit, evtl. TEMP */ - j = addparam_unit(param+i, &spobj, u, ord); - ++c; - break; - case 'r': - /* Parameter sind zwei Regionskoordinaten */ - j = addparam_region(param+i, &spobj, u, ord); - ++c; - break; - case 'b': - /* Parameter ist eine Burgnummer */ - j = addparam_building(param+i, &spobj); - ++c; - break; - case 's': - j = addparam_ship(param+i, &spobj); - ++c; - break; - case 'c': - /* Text, wird im Spruch ausgewertet */ - j = addparam_string(param+i, &spobj); - ++c; - break; - case 'i': /* Zahl */ - j = addparam_int(param+i, &spobj); - ++c; - break; - case 'k': - ++c; - pword = findparam(param[i++], u->faction->locale); - switch (pword) { - case P_REGION: - spobj = malloc(sizeof(spllprm)); - spobj->flag = 0; - spobj->typ = SPP_REGION; - spobj->data.r = u->region; - j = 0; - ++c; - break; - case P_UNIT: - if (ifaction->locale); + switch (pword) { + case P_REGION: + spobj = malloc(sizeof(spllprm)); + spobj->flag = 0; + spobj->typ = SPP_REGION; + spobj->data.r = u->region; + j = 0; + ++c; + break; + case P_UNIT: + if (i\n" "ZAUBERE [REGION x y] [STUFE n] \'Geister bannen\' SCHIFF ", - "kc", + "kc?", M_DRUIDE, (FARCASTING | SPELLLEVEL | ONSHIPCAST | ONETARGET | TESTCANSEE), 2, 8, @@ -8522,7 +8522,7 @@ static spell spelldaten[] = "ZAUBERE [REGION x y] [STUFE n] \'Pentagramm\' EINHEIT \n" "ZAUBERE [REGION x y] [STUFE n] \'Pentagramm\' GEBÄUDE \n" "ZAUBERE [REGION x y] [STUFE n] \'Pentagramm\' SCHIFF ", - "kc", + "kc?", M_CHAOS, (FARCASTING | SPELLLEVEL | ONSHIPCAST | ONETARGET | TESTCANSEE), 2, 10, @@ -8877,7 +8877,7 @@ static spell spelldaten[] = "ZAUBERE [REGION x y] [STUFE n] \'Traumbilder entwirren\' EINHEIT \n" "ZAUBERE [REGION x y] [STUFE n] \'Traumbilder entwirren\' GEBÄUDE \n" "ZAUBERE [REGION x y] [STUFE n] \'Traumbilder entwirren\' SCHIFF ", - "kc", + "kc?", M_TRAUM, (FARCASTING | SPELLLEVEL | ONSHIPCAST | ONETARGET | TESTCANSEE), 2, 8, @@ -9354,7 +9354,7 @@ static spell spelldaten[] = "ZAUBERE [STUFE n] \'Lied des Ortes analysieren\' REGION\n" "ZAUBERE [STUFE n] \'Lied des Ortes analysieren\' GEBÄUDE \n" "ZAUBERE [STUFE n] \'Lied des Ortes analysieren\' SCHIFF ", - "kc", + "kc?", M_BARDE, (SPELLLEVEL|ONSHIPCAST), 5, 8, { { R_AURA, 3, SPC_LEVEL }, @@ -9374,7 +9374,7 @@ static spell spelldaten[] = "ZAUBERE [REGION x y] [STUFE n] \'Lebenslied festigen\' EINHEIT \n" "ZAUBERE [REGION x y] [STUFE n] \'Lebenslied festigen\' GEBÄUDE \n" "ZAUBERE [REGION x y] [STUFE n] \'Lebenslied festigen\' SCHIFF ", - "kc", + "kc?", M_BARDE, (FARCASTING | SPELLLEVEL | ONSHIPCAST | ONETARGET | TESTCANSEE), 2, 8, @@ -9612,7 +9612,7 @@ static spell spelldaten[] = "ZAUBERE [STUFE n] \'Magie analysieren\' EINHEIT \n" "ZAUBERE [STUFE n] \'Magie analysieren\' GEBÄUDE \n" "ZAUBERE [STUFE n] \'Magie analysieren\' SCHIFF ", - "kc", + "kc?", M_ASTRAL, (SPELLLEVEL | UNITSPELL | ONSHIPCAST | TESTCANSEE), 5, 1, { { R_AURA, 1, SPC_LEVEL }, @@ -9830,7 +9830,7 @@ static spell spelldaten[] = "ZAUBERE [REGION x y] [STUFE n] \'Magiefresser\' EINHEIT \n" "ZAUBERE [REGION x y] [STUFE n] \'Magiefresser\' GEBÄUDE \n" "ZAUBERE [REGION x y] [STUFE n] \'Magiefresser\' SCHIFF ", - "kc", + "kc?", M_ASTRAL, (FARCASTING | SPELLLEVEL | ONSHIPCAST | ONETARGET | TESTCANSEE), 2, 5,