forked from github/server
Added a test for expensive skills.
When resetting the game rules, make sure basic resources (money, hp, person) are initialized.
This commit is contained in:
parent
43dc69d94a
commit
2c831230a0
|
@ -360,7 +360,7 @@ static int do_recruiting(recruitment * recruits, int available)
|
||||||
|
|
||||||
number = _min(req->qty, (int)(get / multi));
|
number = _min(req->qty, (int)(get / multi));
|
||||||
if (rc->recruitcost) {
|
if (rc->recruitcost) {
|
||||||
int afford = get_pooled(u, oldresourcetype[R_SILVER], GET_DEFAULT,
|
int afford = get_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT,
|
||||||
number * rc->recruitcost) / rc->recruitcost;
|
number * rc->recruitcost) / rc->recruitcost;
|
||||||
number = _min(number, afford);
|
number = _min(number, afford);
|
||||||
}
|
}
|
||||||
|
@ -371,7 +371,7 @@ static int do_recruiting(recruitment * recruits, int available)
|
||||||
assert(number >= 0);
|
assert(number >= 0);
|
||||||
}
|
}
|
||||||
if (rc->recruitcost) {
|
if (rc->recruitcost) {
|
||||||
use_pooled(u, oldresourcetype[R_SILVER], GET_DEFAULT,
|
use_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT,
|
||||||
rc->recruitcost * number);
|
rc->recruitcost * number);
|
||||||
}
|
}
|
||||||
add_recruits(u, number, req->qty);
|
add_recruits(u, number, req->qty);
|
||||||
|
@ -578,7 +578,7 @@ static void recruit(unit * u, struct order *ord, request ** recruitorders)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (get_pooled(u, oldresourcetype[R_SILVER], GET_DEFAULT,
|
if (get_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT,
|
||||||
recruitcost) < recruitcost) {
|
recruitcost) < recruitcost) {
|
||||||
cmistake(u, ord, 142, MSG_EVENT);
|
cmistake(u, ord, 142, MSG_EVENT);
|
||||||
return;
|
return;
|
||||||
|
@ -603,7 +603,7 @@ static void recruit(unit * u, struct order *ord, request ** recruitorders)
|
||||||
}
|
}
|
||||||
if (recruitcost > 0) {
|
if (recruitcost > 0) {
|
||||||
int pooled =
|
int pooled =
|
||||||
get_pooled(u, oldresourcetype[R_SILVER], GET_DEFAULT, recruitcost * n);
|
get_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT, recruitcost * n);
|
||||||
n = _min(n, pooled / recruitcost);
|
n = _min(n, pooled / recruitcost);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1866,7 +1866,7 @@ static void expandbuying(region * r, request * buyorders)
|
||||||
multi = trade->multi;
|
multi = trade->multi;
|
||||||
price = ltype->price * multi;
|
price = ltype->price * multi;
|
||||||
|
|
||||||
if (get_pooled(oa[j].unit, oldresourcetype[R_SILVER], GET_DEFAULT,
|
if (get_pooled(oa[j].unit, get_resourcetype(R_SILVER), GET_DEFAULT,
|
||||||
price) >= price) {
|
price) >= price) {
|
||||||
unit *u = oa[j].unit;
|
unit *u = oa[j].unit;
|
||||||
item *items;
|
item *items;
|
||||||
|
@ -1883,7 +1883,7 @@ static void expandbuying(region * r, request * buyorders)
|
||||||
i_change(&items, ltype->itype, 1);
|
i_change(&items, ltype->itype, 1);
|
||||||
a->data.v = items;
|
a->data.v = items;
|
||||||
i_change(&oa[j].unit->items, ltype->itype, 1);
|
i_change(&oa[j].unit->items, ltype->itype, 1);
|
||||||
use_pooled(u, oldresourcetype[R_SILVER], GET_DEFAULT, price);
|
use_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT, price);
|
||||||
if (u->n < 0)
|
if (u->n < 0)
|
||||||
u->n = 0;
|
u->n = 0;
|
||||||
u->n += price;
|
u->n += price;
|
||||||
|
@ -2674,7 +2674,7 @@ static void breed_cmd(unit * u, struct order *ord)
|
||||||
if (rtype == rt_mallornseed || rtype == rt_seed) {
|
if (rtype == rt_mallornseed || rtype == rt_seed) {
|
||||||
breedtrees(r, u, m);
|
breedtrees(r, u, m);
|
||||||
break;
|
break;
|
||||||
} else if (rtype != oldresourcetype[R_HORSE]) {
|
} else if (rtype != get_resourcetype(R_HORSE)) {
|
||||||
ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "error_cannotmake", ""));
|
ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "error_cannotmake", ""));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -315,7 +315,7 @@ void build_road(region * r, unit * u, int size, direction_t d)
|
||||||
if (u_race(u) == new_race[RC_STONEGOLEM]) {
|
if (u_race(u) == new_race[RC_STONEGOLEM]) {
|
||||||
n = u->number * GOLEM_STONE;
|
n = u->number * GOLEM_STONE;
|
||||||
} else {
|
} else {
|
||||||
n = get_pooled(u, oldresourcetype[R_STONE], GET_DEFAULT, left);
|
n = get_pooled(u, get_resourcetype(R_STONE), GET_DEFAULT, left);
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
cmistake(u, u->thisorder, 151, MSG_PRODUCE);
|
cmistake(u, u->thisorder, 151, MSG_PRODUCE);
|
||||||
return;
|
return;
|
||||||
|
@ -359,7 +359,7 @@ void build_road(region * r, unit * u, int size, direction_t d)
|
||||||
}
|
}
|
||||||
scale_number(u, u->number - golemsused);
|
scale_number(u, u->number - golemsused);
|
||||||
} else {
|
} else {
|
||||||
use_pooled(u, oldresourcetype[R_STONE], GET_DEFAULT, n);
|
use_pooled(u, get_resourcetype(R_STONE), GET_DEFAULT, n);
|
||||||
/* Nur soviel PRODUCEEXP wie auch tatsaechlich gemacht wurde */
|
/* Nur soviel PRODUCEEXP wie auch tatsaechlich gemacht wurde */
|
||||||
produceexp(u, SK_ROAD_BUILDING, _min(n, u->number));
|
produceexp(u, SK_ROAD_BUILDING, _min(n, u->number));
|
||||||
}
|
}
|
||||||
|
|
|
@ -278,7 +278,7 @@ static int sm_smithy(const unit * u, const region * r, skill_t sk, int value)
|
||||||
|
|
||||||
static int mm_smithy(const unit * u, const resource_type * rtype, int value)
|
static int mm_smithy(const unit * u, const resource_type * rtype, int value)
|
||||||
{ /* material-mod */
|
{ /* material-mod */
|
||||||
if (rtype == oldresourcetype[R_IRON])
|
if (rtype == get_resourcetype(R_IRON))
|
||||||
return value * 2;
|
return value * 2;
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2848,6 +2848,8 @@ void free_gamedata(void)
|
||||||
a_remove(&global.attribs, global.attribs);
|
a_remove(&global.attribs, global.attribs);
|
||||||
}
|
}
|
||||||
++global.cookie; /* readgame() already does this, but sjust in case */
|
++global.cookie; /* readgame() already does this, but sjust in case */
|
||||||
|
|
||||||
|
init_resources();
|
||||||
}
|
}
|
||||||
|
|
||||||
void load_inifile(dictionary * d)
|
void load_inifile(dictionary * d)
|
||||||
|
|
|
@ -104,14 +104,14 @@ static int res_changepeasants(unit * u, const resource_type * rtype, int delta)
|
||||||
static int res_changeitem(unit * u, const resource_type * rtype, int delta)
|
static int res_changeitem(unit * u, const resource_type * rtype, int delta)
|
||||||
{
|
{
|
||||||
int num;
|
int num;
|
||||||
if (rtype == oldresourcetype[R_STONE] && u_race(u) == new_race[RC_STONEGOLEM]
|
if (rtype == get_resourcetype(R_STONE) && u_race(u) == new_race[RC_STONEGOLEM]
|
||||||
&& delta <= 0) {
|
&& delta <= 0) {
|
||||||
int reduce = delta / GOLEM_STONE;
|
int reduce = delta / GOLEM_STONE;
|
||||||
if (delta % GOLEM_STONE != 0)
|
if (delta % GOLEM_STONE != 0)
|
||||||
--reduce;
|
--reduce;
|
||||||
scale_number(u, u->number + reduce);
|
scale_number(u, u->number + reduce);
|
||||||
num = u->number;
|
num = u->number;
|
||||||
} else if (rtype == oldresourcetype[R_IRON]
|
} else if (rtype == get_resourcetype(R_IRON)
|
||||||
&& u_race(u) == new_race[RC_IRONGOLEM] && delta <= 0) {
|
&& u_race(u) == new_race[RC_IRONGOLEM] && delta <= 0) {
|
||||||
int reduce = delta / GOLEM_IRON;
|
int reduce = delta / GOLEM_IRON;
|
||||||
if (delta % GOLEM_IRON != 0)
|
if (delta % GOLEM_IRON != 0)
|
||||||
|
@ -598,11 +598,24 @@ give_money(unit * s, unit * d, const item_type * itype, int n,
|
||||||
#define MAXLUXURIES (LASTLUXURY - FIRSTLUXURY)
|
#define MAXLUXURIES (LASTLUXURY - FIRSTLUXURY)
|
||||||
|
|
||||||
const item_type *olditemtype[MAXITEMS + 1];
|
const item_type *olditemtype[MAXITEMS + 1];
|
||||||
const resource_type *oldresourcetype[MAXRESOURCES + 1];
|
|
||||||
const potion_type *oldpotiontype[MAXPOTIONS + 1];
|
const potion_type *oldpotiontype[MAXPOTIONS + 1];
|
||||||
|
|
||||||
/*** alte items ***/
|
/*** alte items ***/
|
||||||
|
|
||||||
|
const char *itemnames[MAX_RESOURCES] = {
|
||||||
|
"iron", "stone", "horse", "ao_healing",
|
||||||
|
"aots", "roi", "rop", "ao_chastity",
|
||||||
|
"laen", "fairyboot", "aoc", "pegasus",
|
||||||
|
"elvenhorse", "dolphin", "roqf", "trollbelt",
|
||||||
|
"presspass", "aurafocus", "sphereofinv", "magicbag",
|
||||||
|
"magicherbbag", "dreameye", "money", "aura", "permaura"
|
||||||
|
};
|
||||||
|
|
||||||
|
const resource_type *get_resourcetype(resource_t type) {
|
||||||
|
const resource_type *rtype = rt_find(itemnames[type]);
|
||||||
|
return rtype;
|
||||||
|
}
|
||||||
|
|
||||||
int get_item(const unit * u, item_t it)
|
int get_item(const unit * u, item_t it)
|
||||||
{
|
{
|
||||||
const item_type *type = olditemtype[it];
|
const item_type *type = olditemtype[it];
|
||||||
|
@ -698,15 +711,6 @@ typedef struct t_item {
|
||||||
struct order *);
|
struct order *);
|
||||||
} t_item;
|
} t_item;
|
||||||
|
|
||||||
const char *itemnames[MAXITEMS] = {
|
|
||||||
"iron", "stone", "horse", "ao_healing",
|
|
||||||
"aots", "roi", "rop", "ao_chastity",
|
|
||||||
"laen", "fairyboot", "aoc", "pegasus",
|
|
||||||
"elvenhorse", "dolphin", "roqf", "trollbelt",
|
|
||||||
"presspass", "aurafocus", "sphereofinv", "magicbag",
|
|
||||||
"magicherbbag", "dreameye"
|
|
||||||
};
|
|
||||||
|
|
||||||
#include "move.h"
|
#include "move.h"
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -737,7 +741,6 @@ static void init_olditems(void)
|
||||||
|
|
||||||
if (itype) {
|
if (itype) {
|
||||||
olditemtype[i] = itype;
|
olditemtype[i] = itype;
|
||||||
oldresourcetype[i] = itype->rtype;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -970,26 +973,25 @@ static const char *names[] = {
|
||||||
|
|
||||||
void init_resources(void)
|
void init_resources(void)
|
||||||
{
|
{
|
||||||
resource_type *rtype;
|
resource_type *rtype;
|
||||||
if (r_hp) {
|
if (r_hp) {
|
||||||
return;
|
// we have done this already
|
||||||
}
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
rtype = new_resourcetype(names + 8, NULL, RTF_NONE);
|
rtype = new_resourcetype(names + 8, NULL, RTF_NONE);
|
||||||
rtype->uchange = res_changepeasants;
|
rtype->uchange = res_changepeasants;
|
||||||
rt_register(rtype);
|
rt_register(rtype);
|
||||||
|
|
||||||
/* silver was never an item: */
|
|
||||||
r_silver = new_resourcetype(&names[0], NULL, RTF_ITEM | RTF_POOLED);
|
r_silver = new_resourcetype(&names[0], NULL, RTF_ITEM | RTF_POOLED);
|
||||||
i_silver = new_itemtype(r_silver, ITF_NONE, 1 /*weight */ , 0);
|
i_silver = new_itemtype(r_silver, ITF_NONE, 1 /*weight */ , 0);
|
||||||
r_silver->uchange = res_changeitem;
|
r_silver->uchange = res_changeitem;
|
||||||
i_silver->give = give_money;
|
i_silver->give = give_money;
|
||||||
oldresourcetype[R_SILVER] = r_silver;
|
rt_register(r_silver);
|
||||||
|
|
||||||
r_permaura = new_resourcetype(&names[4], NULL, RTF_NONE);
|
r_permaura = new_resourcetype(&names[4], NULL, RTF_NONE);
|
||||||
r_permaura->uchange = res_changepermaura;
|
r_permaura->uchange = res_changepermaura;
|
||||||
rt_register(r_permaura);
|
rt_register(r_permaura);
|
||||||
oldresourcetype[R_PERMAURA] = r_permaura;
|
|
||||||
|
|
||||||
r_hp = new_resourcetype(&names[6], NULL, RTF_NONE);
|
r_hp = new_resourcetype(&names[6], NULL, RTF_NONE);
|
||||||
r_hp->uchange = res_changehp;
|
r_hp->uchange = res_changehp;
|
||||||
|
@ -998,7 +1000,6 @@ void init_resources(void)
|
||||||
r_aura = new_resourcetype(&names[10], NULL, RTF_NONE);
|
r_aura = new_resourcetype(&names[10], NULL, RTF_NONE);
|
||||||
r_aura->uchange = res_changeaura;
|
r_aura->uchange = res_changeaura;
|
||||||
rt_register(r_aura);
|
rt_register(r_aura);
|
||||||
oldresourcetype[R_AURA] = r_aura;
|
|
||||||
|
|
||||||
r_unit = new_resourcetype(&names[12], NULL, RTF_NONE);
|
r_unit = new_resourcetype(&names[12], NULL, RTF_NONE);
|
||||||
r_unit->uchange = res_changeperson;
|
r_unit->uchange = res_changeperson;
|
||||||
|
@ -1211,7 +1212,6 @@ void test_clear_resources(void)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
memset((void *)olditemtype, 0, sizeof(olditemtype));
|
memset((void *)olditemtype, 0, sizeof(olditemtype));
|
||||||
memset((void *)oldresourcetype, 0, sizeof(oldresourcetype));
|
|
||||||
memset((void *)oldpotiontype, 0, sizeof(oldpotiontype));
|
memset((void *)oldpotiontype, 0, sizeof(oldpotiontype));
|
||||||
|
|
||||||
cb_foreach(&cb_items, "", 0, free_itype_cb, 0);
|
cb_foreach(&cb_items, "", 0, free_itype_cb, 0);
|
||||||
|
|
|
@ -300,7 +300,7 @@ extern "C" {
|
||||||
MAX_ITEMS /* do not use outside item.c ! */
|
MAX_ITEMS /* do not use outside item.c ! */
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
typedef enum {
|
||||||
/* ITEMS: */
|
/* ITEMS: */
|
||||||
R_IRON,
|
R_IRON,
|
||||||
R_STONE,
|
R_STONE,
|
||||||
|
@ -332,11 +332,11 @@ extern "C" {
|
||||||
|
|
||||||
MAX_RESOURCES, /* do not use outside item.c ! */
|
MAX_RESOURCES, /* do not use outside item.c ! */
|
||||||
NORESOURCE = -1
|
NORESOURCE = -1
|
||||||
};
|
} resource_t;
|
||||||
|
|
||||||
extern const struct potion_type *oldpotiontype[];
|
extern const struct potion_type *oldpotiontype[];
|
||||||
extern const struct item_type *olditemtype[];
|
extern const struct item_type *olditemtype[];
|
||||||
extern const struct resource_type *oldresourcetype[];
|
const struct resource_type *get_resourcetype(resource_t type);
|
||||||
|
|
||||||
int get_item(const struct unit *, item_t);
|
int get_item(const struct unit *, item_t);
|
||||||
int set_item(struct unit *, item_t, int);
|
int set_item(struct unit *, item_t, int);
|
||||||
|
|
|
@ -66,9 +66,9 @@ int get_resource(const unit * u, const resource_type * rtype)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (rtype == oldresourcetype[R_AURA])
|
if (rtype == get_resourcetype(R_AURA))
|
||||||
return get_spellpoints(u);
|
return get_spellpoints(u);
|
||||||
if (rtype == oldresourcetype[R_PERMAURA])
|
if (rtype == get_resourcetype(R_PERMAURA))
|
||||||
return max_spellpoints(u->region, u);
|
return max_spellpoints(u->region, u);
|
||||||
log_error("trying to get unknown resource '%s'.\n", rtype->_name[0]);
|
log_error("trying to get unknown resource '%s'.\n", rtype->_name[0]);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -80,9 +80,9 @@ int change_resource(unit * u, const resource_type * rtype, int change)
|
||||||
|
|
||||||
if (rtype->uchange)
|
if (rtype->uchange)
|
||||||
i = rtype->uchange(u, rtype, change);
|
i = rtype->uchange(u, rtype, change);
|
||||||
else if (rtype == oldresourcetype[R_AURA])
|
else if (rtype == get_resourcetype(R_AURA))
|
||||||
i = change_spellpoints(u, change);
|
i = change_spellpoints(u, change);
|
||||||
else if (rtype == oldresourcetype[R_PERMAURA])
|
else if (rtype == get_resourcetype(R_PERMAURA))
|
||||||
i = change_maxspellpoints(u, change);
|
i = change_maxspellpoints(u, change);
|
||||||
else
|
else
|
||||||
assert(!"undefined resource detected. rtype->uchange not initialized.");
|
assert(!"undefined resource detected. rtype->uchange not initialized.");
|
||||||
|
@ -98,9 +98,9 @@ int get_reservation(const unit * u, const resource_type * rtype)
|
||||||
{
|
{
|
||||||
reservation *res = u->reservations;
|
reservation *res = u->reservations;
|
||||||
|
|
||||||
if (rtype == oldresourcetype[R_STONE] && (u_race(u)->flags & RCF_STONEGOLEM))
|
if (rtype == get_resourcetype(R_STONE) && (u_race(u)->flags & RCF_STONEGOLEM))
|
||||||
return (u->number * GOLEM_STONE);
|
return (u->number * GOLEM_STONE);
|
||||||
if (rtype == oldresourcetype[R_IRON] && (u_race(u)->flags & RCF_IRONGOLEM))
|
if (rtype == get_resourcetype(R_IRON) && (u_race(u)->flags & RCF_IRONGOLEM))
|
||||||
return (u->number * GOLEM_IRON);
|
return (u->number * GOLEM_IRON);
|
||||||
while (res && res->type != rtype)
|
while (res && res->type != rtype)
|
||||||
res = res->next;
|
res = res->next;
|
||||||
|
|
|
@ -133,7 +133,7 @@ enter_arena(unit * u, const item_type * itype, int amount, order * ord)
|
||||||
return -1;
|
return -1;
|
||||||
if (u->number != 1 && enter_fail(u))
|
if (u->number != 1 && enter_fail(u))
|
||||||
return -1;
|
return -1;
|
||||||
if (get_pooled(u, oldresourcetype[R_SILVER], GET_DEFAULT, fee) < fee
|
if (get_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT, fee) < fee
|
||||||
&& enter_fail(u))
|
&& enter_fail(u))
|
||||||
return -1;
|
return -1;
|
||||||
for (sk = 0; sk != MAXSKILLS; ++sk) {
|
for (sk = 0; sk != MAXSKILLS; ++sk) {
|
||||||
|
@ -166,7 +166,7 @@ enter_arena(unit * u, const item_type * itype, int amount, order * ord)
|
||||||
ADDMSG(&u->faction->msgs, msg_message("arena_enter_fail", "region unit",
|
ADDMSG(&u->faction->msgs, msg_message("arena_enter_fail", "region unit",
|
||||||
u->region, u));
|
u->region, u));
|
||||||
use_pooled(u, itype->rtype, GET_SLACK | GET_RESERVE, 1);
|
use_pooled(u, itype->rtype, GET_SLACK | GET_RESERVE, 1);
|
||||||
use_pooled(u, oldresourcetype[R_SILVER], GET_DEFAULT, fee);
|
use_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT, fee);
|
||||||
set_money(u, 109);
|
set_money(u, 109);
|
||||||
fset(u, UFL_ANON_FACTION);
|
fset(u, UFL_ANON_FACTION);
|
||||||
move_unit(u, start_region[rng_int() % 6], NULL);
|
move_unit(u, start_region[rng_int() % 6], NULL);
|
||||||
|
|
|
@ -78,11 +78,11 @@ static void reduce_weight(unit * u)
|
||||||
{
|
{
|
||||||
int capacity, weight = 0;
|
int capacity, weight = 0;
|
||||||
item **itmp = &u->items;
|
item **itmp = &u->items;
|
||||||
int horses = get_resource(u, oldresourcetype[R_HORSE]);
|
int horses = get_resource(u, get_resourcetype(R_HORSE));
|
||||||
|
|
||||||
if (horses > 0) {
|
if (horses > 0) {
|
||||||
horses = _min(horses, (u->number * 2));
|
horses = _min(horses, (u->number * 2));
|
||||||
change_resource(u, oldresourcetype[R_HORSE], -horses);
|
change_resource(u, get_resourcetype(R_HORSE), -horses);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 0. ditch any vehicles */
|
/* 0. ditch any vehicles */
|
||||||
|
|
|
@ -240,8 +240,10 @@ void find_manual(region * r, unit * u)
|
||||||
slprintf(zBook, sizeof(zLocation), "manual_title_%s", skillnames[skill]);
|
slprintf(zBook, sizeof(zLocation), "manual_title_%s", skillnames[skill]);
|
||||||
|
|
||||||
msg = msg_message("find_manual", "unit location book", u, zLocation, zBook);
|
msg = msg_message("find_manual", "unit location book", u, zLocation, zBook);
|
||||||
r_addmessage(r, u->faction, msg);
|
if (msg) {
|
||||||
msg_release(msg);
|
r_addmessage(r, u->faction, msg);
|
||||||
|
msg_release(msg);
|
||||||
|
}
|
||||||
|
|
||||||
if (improve_all(u->faction, skill, 3) == 3) {
|
if (improve_all(u->faction, skill, 3) == 3) {
|
||||||
int i;
|
int i;
|
||||||
|
|
|
@ -1035,7 +1035,7 @@ static void describe(FILE * F, const seen_region * sr, faction * f)
|
||||||
if (wrptr(&bufp, &size, bytes) != 0)
|
if (wrptr(&bufp, &size, bytes) != 0)
|
||||||
WARN_STATIC_BUFFER();
|
WARN_STATIC_BUFFER();
|
||||||
bytes =
|
bytes =
|
||||||
(int)strlcpy(bufp, LOC(f->locale, resourcename(oldresourcetype[R_SILVER],
|
(int)strlcpy(bufp, LOC(f->locale, resourcename(get_resourcetype(R_SILVER),
|
||||||
rmoney(r) != 1)), size);
|
rmoney(r) != 1)), size);
|
||||||
if (wrptr(&bufp, &size, bytes) != 0)
|
if (wrptr(&bufp, &size, bytes) != 0)
|
||||||
WARN_STATIC_BUFFER();
|
WARN_STATIC_BUFFER();
|
||||||
|
@ -1047,7 +1047,7 @@ static void describe(FILE * F, const seen_region * sr, faction * f)
|
||||||
if (wrptr(&bufp, &size, bytes) != 0)
|
if (wrptr(&bufp, &size, bytes) != 0)
|
||||||
WARN_STATIC_BUFFER();
|
WARN_STATIC_BUFFER();
|
||||||
bytes =
|
bytes =
|
||||||
(int)strlcpy(bufp, LOC(f->locale, resourcename(oldresourcetype[R_HORSE],
|
(int)strlcpy(bufp, LOC(f->locale, resourcename(get_resourcetype(R_HORSE),
|
||||||
(rhorses(r) > 1) ? GR_PLURAL : 0)), size);
|
(rhorses(r) > 1) ? GR_PLURAL : 0)), size);
|
||||||
if (wrptr(&bufp, &size, bytes) != 0)
|
if (wrptr(&bufp, &size, bytes) != 0)
|
||||||
WARN_STATIC_BUFFER();
|
WARN_STATIC_BUFFER();
|
||||||
|
|
|
@ -326,7 +326,7 @@ int sp_combatrosthauch(struct castorder * co)
|
||||||
requirement *mat = wp->type->itype->construction->materials;
|
requirement *mat = wp->type->itype->construction->materials;
|
||||||
bool iron = false;
|
bool iron = false;
|
||||||
while (mat && mat->number > 0) {
|
while (mat && mat->number > 0) {
|
||||||
if (mat->rtype == oldresourcetype[R_IRON]) {
|
if (mat->rtype == get_resourcetype(R_IRON)) {
|
||||||
iron = true;
|
iron = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1578,7 +1578,7 @@ int sp_reanimate(struct castorder * co)
|
||||||
if (use_item) {
|
if (use_item) {
|
||||||
msg =
|
msg =
|
||||||
msg_message("reanimate_effect_1", "mage amount item", mage, j,
|
msg_message("reanimate_effect_1", "mage amount item", mage, j,
|
||||||
oldresourcetype[R_AMULET_OF_HEALING]);
|
get_resourcetype(R_AMULET_OF_HEALING));
|
||||||
} else {
|
} else {
|
||||||
msg = msg_message("reanimate_effect_0", "mage amount", mage, j);
|
msg = msg_message("reanimate_effect_0", "mage amount", mage, j);
|
||||||
}
|
}
|
||||||
|
@ -1682,7 +1682,7 @@ int sp_healing(struct castorder * co)
|
||||||
if (use_item) {
|
if (use_item) {
|
||||||
msg =
|
msg =
|
||||||
msg_message("healing_effect_1", "mage amount item", mage, j,
|
msg_message("healing_effect_1", "mage amount item", mage, j,
|
||||||
oldresourcetype[R_AMULET_OF_HEALING]);
|
get_resourcetype(R_AMULET_OF_HEALING));
|
||||||
} else {
|
} else {
|
||||||
msg = msg_message("healing_effect_0", "mage amount", mage, j);
|
msg = msg_message("healing_effect_0", "mage amount", mage, j);
|
||||||
}
|
}
|
||||||
|
|
|
@ -225,7 +225,7 @@ teach_unit(unit * teacher, unit * student, int nteaching, skill_t sk,
|
||||||
int j = study_cost(student, sk);
|
int j = study_cost(student, sk);
|
||||||
j = _max(50, j * 2);
|
j = _max(50, j * 2);
|
||||||
/* kann Einheit das zahlen? */
|
/* kann Einheit das zahlen? */
|
||||||
if (get_pooled(student, oldresourcetype[R_SILVER], GET_DEFAULT, j) >= j) {
|
if (get_pooled(student, get_resourcetype(R_SILVER), GET_DEFAULT, j) >= j) {
|
||||||
/* Jeder Schueler zusaetzlich +10 Tage wenn in Uni. */
|
/* Jeder Schueler zusaetzlich +10 Tage wenn in Uni. */
|
||||||
teach->value += (n / 30) * 10; /* learning erhoehen */
|
teach->value += (n / 30) * 10; /* learning erhoehen */
|
||||||
/* Lehrer zusaetzlich +1 Tag pro Schueler. */
|
/* Lehrer zusaetzlich +1 Tag pro Schueler. */
|
||||||
|
@ -684,7 +684,7 @@ int learn_cmd(unit * u, order * ord)
|
||||||
}
|
}
|
||||||
if (studycost) {
|
if (studycost) {
|
||||||
int cost = studycost * u->number;
|
int cost = studycost * u->number;
|
||||||
money = get_pooled(u, oldresourcetype[R_SILVER], GET_DEFAULT, cost);
|
money = get_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT, cost);
|
||||||
money = _min(money, cost);
|
money = _min(money, cost);
|
||||||
}
|
}
|
||||||
if (money < studycost * u->number) {
|
if (money < studycost * u->number) {
|
||||||
|
@ -702,7 +702,7 @@ int learn_cmd(unit * u, order * ord)
|
||||||
teach->teachers[0] = 0;
|
teach->teachers[0] = 0;
|
||||||
}
|
}
|
||||||
if (money > 0) {
|
if (money > 0) {
|
||||||
use_pooled(u, oldresourcetype[R_SILVER], GET_DEFAULT, money);
|
use_pooled(u, get_resourcetype(R_SILVER), GET_DEFAULT, money);
|
||||||
ADDMSG(&u->faction->msgs, msg_message("studycost",
|
ADDMSG(&u->faction->msgs, msg_message("studycost",
|
||||||
"unit region cost skill", u, u->region, money, sk));
|
"unit region cost skill", u, u->region, money, sk));
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,16 +13,19 @@ static void test_recreate_world(CuTest * tc)
|
||||||
{
|
{
|
||||||
test_cleanup();
|
test_cleanup();
|
||||||
CuAssertPtrEquals(tc, 0, get_locale("de"));
|
CuAssertPtrEquals(tc, 0, get_locale("de"));
|
||||||
CuAssertPtrEquals(tc, 0, it_find("money"));
|
|
||||||
CuAssertPtrEquals(tc, 0, it_find("horse"));
|
CuAssertPtrEquals(tc, 0, it_find("horse"));
|
||||||
|
CuAssertPtrNotNull(tc, rt_find("hp"));
|
||||||
|
CuAssertPtrNotNull(tc, rt_find("permaura"));
|
||||||
|
CuAssertPtrNotNull(tc, rt_find("aura"));
|
||||||
|
CuAssertPtrNotNull(tc, it_find("money"));
|
||||||
|
|
||||||
test_create_world();
|
test_create_world();
|
||||||
CuAssertPtrEquals(tc, default_locale, get_locale("de"));
|
CuAssertPtrEquals(tc, default_locale, get_locale("de"));
|
||||||
CuAssertPtrNotNull(tc, default_locale);
|
CuAssertPtrNotNull(tc, default_locale);
|
||||||
CuAssertPtrNotNull(tc, findregion(0, 0));
|
CuAssertPtrNotNull(tc, findregion(0, 0));
|
||||||
CuAssertPtrNotNull(tc, it_find("money"));
|
|
||||||
CuAssertPtrNotNull(tc, it_find("horse"));
|
CuAssertPtrNotNull(tc, it_find("horse"));
|
||||||
CuAssertPtrNotNull(tc, rt_find("horse"));
|
CuAssertPtrNotNull(tc, rt_find("horse"));
|
||||||
|
CuAssertPtrNotNull(tc, it_find("money"));
|
||||||
CuAssertPtrNotNull(tc, rt_find("hp"));
|
CuAssertPtrNotNull(tc, rt_find("hp"));
|
||||||
CuAssertPtrNotNull(tc, rt_find("money"));
|
CuAssertPtrNotNull(tc, rt_find("money"));
|
||||||
CuAssertPtrNotNull(tc, rt_find("aura"));
|
CuAssertPtrNotNull(tc, rt_find("aura"));
|
||||||
|
@ -32,15 +35,15 @@ static void test_recreate_world(CuTest * tc)
|
||||||
|
|
||||||
test_cleanup();
|
test_cleanup();
|
||||||
CuAssertPtrEquals(tc, 0, get_locale("de"));
|
CuAssertPtrEquals(tc, 0, get_locale("de"));
|
||||||
CuAssertPtrEquals(tc, 0, it_find("money"));
|
|
||||||
CuAssertPtrEquals(tc, 0, it_find("horse"));
|
CuAssertPtrEquals(tc, 0, it_find("horse"));
|
||||||
CuAssertPtrEquals(tc, 0, rt_find("horse"));
|
CuAssertPtrEquals(tc, 0, rt_find("horse"));
|
||||||
CuAssertPtrEquals(tc, 0, rt_find("hp"));
|
CuAssertPtrNotNull(tc, it_find("money"));
|
||||||
CuAssertPtrEquals(tc, 0, rt_find("money"));
|
CuAssertPtrNotNull(tc, rt_find("hp"));
|
||||||
CuAssertPtrEquals(tc, 0, rt_find("aura"));
|
CuAssertPtrNotNull(tc, rt_find("money"));
|
||||||
CuAssertPtrEquals(tc, 0, rt_find("permaura"));
|
CuAssertPtrNotNull(tc, rt_find("aura"));
|
||||||
CuAssertPtrEquals(tc, 0, rt_find("peasant"));
|
CuAssertPtrNotNull(tc, rt_find("permaura"));
|
||||||
CuAssertPtrEquals(tc, 0, rt_find("unit"));
|
CuAssertPtrNotNull(tc, rt_find("peasant"));
|
||||||
|
CuAssertPtrNotNull(tc, rt_find("unit"));
|
||||||
CuAssertPtrEquals(tc, 0, findregion(0, 0));
|
CuAssertPtrEquals(tc, 0, findregion(0, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,11 +23,15 @@ function test_study()
|
||||||
assert_equal(1, u:get_skill("crossbow"))
|
assert_equal(1, u:get_skill("crossbow"))
|
||||||
end
|
end
|
||||||
|
|
||||||
function dsabled_test_study_expensive()
|
function test_study_expensive()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("test@example.com", "human", "de")
|
local f = faction.create("test@example.com", "human", "de")
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
|
eressea.settings.set("skills.cost.alchemy", "50")
|
||||||
|
eressea.settings.set("rules.encounters", "0")
|
||||||
u:add_order("LERNEN Alchemie")
|
u:add_order("LERNEN Alchemie")
|
||||||
|
u:add_item("money", 50)
|
||||||
process_orders()
|
process_orders()
|
||||||
assert_equal(1, u:get_skill("alchemy"))
|
assert_equal(1, u:get_skill("alchemy"))
|
||||||
|
assert_equal(0, u:get_item("money"))
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue