From 802b9332c762819b69c0c48c5c74eb1db9b42a36 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Thu, 28 Aug 2008 15:16:13 +0000 Subject: [PATCH] =?UTF-8?q?http://bugs.eressea.de/view.php=3Fid=3D1461=20"?= =?UTF-8?q?Tragekapazit=C3=A4t=20von=20Monstern=20zu=20hoch"=20throwing=20?= =?UTF-8?q?away=20carts=20because=20monsters=20don't=20know=20what=20to=20?= =?UTF-8?q?do=20with=20them.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/gamecode/monster.c | 20 +++++++++--- src/common/kernel/binarystore.c | 2 +- src/common/kernel/move.c | 56 ++++++++++++++++----------------- src/common/spells/regioncurse.c | 2 +- 4 files changed, 46 insertions(+), 34 deletions(-) diff --git a/src/common/gamecode/monster.c b/src/common/gamecode/monster.c index 93aafe68c..32fedc206 100644 --- a/src/common/gamecode/monster.c +++ b/src/common/gamecode/monster.c @@ -78,18 +78,30 @@ static void reduce_weight(unit * u) { - int horses = get_resource(u, oldresourcetype[R_HORSE]); - int capacity = walkingcapacity(u); + int capacity, weight = 0; item ** itmp = &u->items; - int weight = 0; + int horses = get_resource(u, oldresourcetype[R_HORSE]); if (horses > 0) { horses = MIN(horses, (u->number*2)); change_resource(u, oldresourcetype[R_HORSE], - horses); } + /* 0. ditch any vehicles */ + while (*itmp!=NULL) { + item * itm = *itmp; + const item_type * itype = itm->type; + weight += itm->number*itype->weight; + if (itype->flags & ITF_VEHICLE) { + give_item(itm->number, itm->type, u, NULL, NULL); + } + if (*itmp==itm) itmp=&itm->next; + } + + capacity = walkingcapacity(u); + /* 1. get rid of anything that isn't silver or really lightweight or helpful in combat */ - while (capacity>0 && *itmp!=NULL) { + for (itmp = &u->items;*itmp && capacity>0;) { item * itm = *itmp; const item_type * itype = itm->type; weight += itm->number*itype->weight; diff --git a/src/common/kernel/binarystore.c b/src/common/kernel/binarystore.c index 463ebc13f..8621abcb2 100644 --- a/src/common/kernel/binarystore.c +++ b/src/common/kernel/binarystore.c @@ -190,7 +190,7 @@ bin_r_str_buf(struct storage * store, char * result, size_t size) result[0] = 0; } else { len = (size_t)i; - rd = MIN(len, size); + rd = MIN(len, size-1); fread(result, sizeof(char), rd, file(store)); if (rditems, &animals, &acap, &vehicles, &vcap); /* Das Gewicht, welches die Pferde tragen, plus das Gewicht, welches - * die Leute tragen */ + * die Leute tragen */ pferde_fuer_wagen = MIN(animals, effskill(u, SK_RIDING) * u->number * 4); - if (fval(u->race, RCF_HORSE)) { - animals += u->number; - people = 0; - } else { - people = u->number; - } + if (fval(u->race, RCF_HORSE)) { + animals += u->number; + people = 0; + } else { + people = u->number; + } - /* maximal diese Pferde können zum Ziehen benutzt werden */ - wagen_mit_pferden = MIN(vehicles, pferde_fuer_wagen / HORSESNEEDED); + /* maximal diese Pferde können zum Ziehen benutzt werden */ + wagen_mit_pferden = MIN(vehicles, pferde_fuer_wagen / HORSESNEEDED); - n = wagen_mit_pferden * vcap; + n = wagen_mit_pferden * vcap; - if (u->race == new_race[RC_TROLL]) { - /* 4 Trolle ziehen einen Wagen. */ - /* Unbesetzte Wagen feststellen */ - wagen_ohne_pferde = vehicles - wagen_mit_pferden; + if (u->race == new_race[RC_TROLL]) { + /* 4 Trolle ziehen einen Wagen. */ + /* Unbesetzte Wagen feststellen */ + wagen_ohne_pferde = vehicles - wagen_mit_pferden; - /* Genug Trolle, um die Restwagen zu ziehen? */ - wagen_mit_trollen = MIN(u->number / 4, wagen_ohne_pferde); + /* Genug Trolle, um die Restwagen zu ziehen? */ + wagen_mit_trollen = MIN(u->number / 4, wagen_ohne_pferde); - /* Wagenkapazität hinzuzählen */ - n += wagen_mit_trollen * vcap; - wagen_ohne_pferde -= wagen_mit_trollen; - } + /* Wagenkapazität hinzuzählen */ + n += wagen_mit_trollen * vcap; + wagen_ohne_pferde -= wagen_mit_trollen; + } - n += animals * acap; - n += people * personcapacity(u); - /* Goliathwasser */ + n += animals * acap; + n += people * personcapacity(u); + /* Goliathwasser */ tmp = get_effect(u, oldpotiontype[P_STRONG]); if (tmp>0) { int horsecap = olditemtype[I_HORSE]->capacity; if (tmp>people) tmp = people; - n += tmp * (horsecap - personcapacity(u)); + n += tmp * (horsecap - personcapacity(u)); } /* change_effect wird in ageing gemacht */ tmp = get_item(u, I_TROLLBELT); - n += MIN(people, tmp) * (STRENGTHMULTIPLIER-1) * personcapacity(u); + n += MIN(people, tmp) * (STRENGTHMULTIPLIER-1) * personcapacity(u); - return n; + return n; } enum { diff --git a/src/common/spells/regioncurse.c b/src/common/spells/regioncurse.c index 44864c4e4..70902aca9 100644 --- a/src/common/spells/regioncurse.c +++ b/src/common/spells/regioncurse.c @@ -194,7 +194,7 @@ static struct curse_type ct_fogtrap = { static struct curse_type ct_maelstrom = { "maelstrom", CURSETYP_NORM, CURSE_ISNEW, (M_DURATION | M_VIGOUR), - NULL + cinfo_simple }; static struct curse_type ct_blessedharvest = { "blessedharvest",