From fb8ec1a69f91e8fa7c9530136493623843b73b7a Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Fri, 4 Jul 2008 09:19:12 +0000 Subject: [PATCH] http://bugs.eressea.de/view.php?id=1453 "Mit Katapulten kann man Steuern eintreiben" - added a parameter that checks for siege-weapons. Issue: 1453 --- src/common/gamecode/economy.c | 46 +++++++++++++++++------------------ src/common/gamecode/laws.c | 2 +- src/common/gamecode/summary.c | 2 +- src/common/kernel/battle.c | 4 +-- src/common/kernel/build.c | 3 ++- src/common/kernel/eressea.h | 2 +- src/common/kernel/item.h | 1 + src/common/kernel/move.c | 2 +- src/common/kernel/xmlreader.c | 1 + src/res/resources.xml | 2 +- 10 files changed, 34 insertions(+), 31 deletions(-) diff --git a/src/common/gamecode/economy.c b/src/common/gamecode/economy.c index c217b3eb9..215a65648 100644 --- a/src/common/gamecode/economy.c +++ b/src/common/gamecode/economy.c @@ -1305,7 +1305,7 @@ can_guard(const unit * guard, const unit * u) { if (fval(guard, UFL_ISNEW)) return false; if (guard->number<=0 || !cansee(guard->faction, guard->region, u, 0)) return false; - if (besieged(guard) || !(fval(guard->race, RCF_UNARMEDGUARD) || armedmen(guard))) return false; + if (besieged(guard) || !(fval(guard->race, RCF_UNARMEDGUARD) || armedmen(guard, true))) return false; return !alliedunit(guard, u->faction, HELP_GUARD); } @@ -3056,33 +3056,33 @@ expandtax(region * r, request * taxorders) void tax_cmd(unit * u, struct order * ord, request ** taxorders) { - /* Steuern werden noch vor der Forschung eingetrieben */ + /* Steuern werden noch vor der Forschung eingetrieben */ region * r = u->region; - unit *u2; - int n; - request *o; - int max; + unit *u2; + int n; + request *o; + int max; - if (!humanoidrace(u->race) && !is_monsters(u->faction)) { - cmistake(u, ord, 228, MSG_INCOME); - return; - } + if (!humanoidrace(u->race) && !is_monsters(u->faction)) { + cmistake(u, ord, 228, MSG_INCOME); + return; + } - if (fval(u, UFL_WERE)) { - cmistake(u, ord, 228, MSG_INCOME); - return; - } + if (fval(u, UFL_WERE)) { + cmistake(u, ord, 228, MSG_INCOME); + return; + } - if (besieged(u)) { - cmistake(u, ord, 60, MSG_INCOME); - return; - } - n = armedmen(u); + if (besieged(u)) { + cmistake(u, ord, 60, MSG_INCOME); + return; + } + n = armedmen(u, false); - if (!n) { - cmistake(u, ord, 48, MSG_INCOME); - return; - } + if (!n) { + cmistake(u, ord, 48, MSG_INCOME); + return; + } init_tokens(ord); skip_token(); diff --git a/src/common/gamecode/laws.c b/src/common/gamecode/laws.c index 37ba5f94b..e0e258adb 100644 --- a/src/common/gamecode/laws.c +++ b/src/common/gamecode/laws.c @@ -2423,7 +2423,7 @@ can_start_guarding(const unit * u) { if (u->status>=ST_FLEE) return E_GUARD_FLEEING; if (fval(u->race, RCF_UNARMEDGUARD)) return E_GUARD_OK; - if (!armedmen(u)) return E_GUARD_UNARMED; + if (!armedmen(u, true)) return E_GUARD_UNARMED; if (u->faction->age < NewbieImmunity()) return E_GUARD_NEWBIE; return E_GUARD_OK; } diff --git a/src/common/gamecode/summary.c b/src/common/gamecode/summary.c index 0f963c4c5..97e608f91 100644 --- a/src/common/gamecode/summary.c +++ b/src/common/gamecode/summary.c @@ -379,7 +379,7 @@ make_summary(void) } s->spielerpferde += get_item(u, I_HORSE); s->playermoney += get_money(u); - s->armed_men += armedmen(u); + s->armed_men += armedmen(u, true); for (itm=u->items;itm;itm=itm->next) { if (itm->type->rtype->wtype) { s->waffen += itm->number; diff --git a/src/common/kernel/battle.c b/src/common/kernel/battle.c index 675bedc02..498576b36 100644 --- a/src/common/kernel/battle.c +++ b/src/common/kernel/battle.c @@ -198,7 +198,7 @@ message_faction(battle * b, faction * f, struct message * m) } int -armedmen(const unit * u) +armedmen(const unit * u, boolean siege_weapons) { item * itm; int n = 0; @@ -211,7 +211,7 @@ armedmen(const unit * u) * Personen minimiert */ for (itm=u->items;itm;itm=itm->next) { const weapon_type * wtype = resource2weapon(itm->type->rtype); - if (wtype==NULL) continue; + if (wtype==NULL || (wtype->flags & WTF_SIEGE)) continue; if (effskill(u, wtype->skill) >= 1) n += itm->number; /* if (effskill(u, wtype->skill) >= wtype->minskill) n += itm->number; */ if (n>u->number) break; diff --git a/src/common/kernel/build.c b/src/common/kernel/build.c index 0f7e8f950..2ccaf2543 100644 --- a/src/common/kernel/build.c +++ b/src/common/kernel/build.c @@ -233,7 +233,8 @@ siege_cmd(unit * u, order * ord) d = 0; } - if ((bewaffnete = armedmen(u)) == 0 && d == 0) { + bewaffnete = armedmen(u, true); + if (d == 0 && bewaffnete == 0) { /* abbruch, falls unbewaffnet oder unfaehig, katapulte zu benutzen */ cmistake(u, ord, 80, MSG_EVENT); return; diff --git a/src/common/kernel/eressea.h b/src/common/kernel/eressea.h index c063e6ce6..0b93b9146 100644 --- a/src/common/kernel/eressea.h +++ b/src/common/kernel/eressea.h @@ -170,7 +170,7 @@ extern struct faction *factions; void addstrlist(strlist ** SP, const char *s); -int armedmen(const struct unit * u); +int armedmen(const struct unit * u, boolean siege_weapons); unsigned int atoip(const char *s); unsigned int getuint(void); diff --git a/src/common/kernel/item.h b/src/common/kernel/item.h index 3fc40b7ea..7eaa54bd7 100644 --- a/src/common/kernel/item.h +++ b/src/common/kernel/item.h @@ -192,6 +192,7 @@ typedef struct armor_type { #define WTF_PIERCE 0x04 #define WTF_CUT 0x08 #define WTF_BLUNT 0x10 +#define WTF_SIEGE 0x20 #define WTF_ARMORPIERCING 0x40 /* armor has only half value */ typedef struct weapon_type { diff --git a/src/common/kernel/move.c b/src/common/kernel/move.c index 3888d1811..712ea343b 100644 --- a/src/common/kernel/move.c +++ b/src/common/kernel/move.c @@ -870,7 +870,7 @@ is_guardian_r(unit * u2) if (u2->number == 0) return false; if ((u2->flags&UFL_GUARD)==0) return false; if (besieged(u2)) return false; - if (!armedmen(u2) && !fval(u2->race, RCF_UNARMEDGUARD)) return false; + if (!armedmen(u2, true) && !fval(u2->race, RCF_UNARMEDGUARD)) return false; return true; } diff --git a/src/common/kernel/xmlreader.c b/src/common/kernel/xmlreader.c index 5464bfcb9..7bb529952 100644 --- a/src/common/kernel/xmlreader.c +++ b/src/common/kernel/xmlreader.c @@ -644,6 +644,7 @@ xml_readweapon(xmlXPathContextPtr xpath, item_type * itype) if (xml_bvalue(node, "pierce", false)) flags |= WTF_PIERCE; if (xml_bvalue(node, "cut", false)) flags |= WTF_CUT; if (xml_bvalue(node, "blunt", false)) flags |= WTF_BLUNT; + if (xml_bvalue(node, "siege", false)) flags |= WTF_SIEGE; propValue = xmlGetProp(node, BAD_CAST "skill"); assert(propValue!=NULL); diff --git a/src/res/resources.xml b/src/res/resources.xml index 4bdc0d38e..55be4f60f 100644 --- a/src/res/resources.xml +++ b/src/res/resources.xml @@ -439,7 +439,7 @@ - +