forked from github/server
BUG 2415: eliminate at_potiondelay and WdL delay.
BUG 2419: refactor ointment and healing, add tests for USE
This commit is contained in:
parent
7d789d9896
commit
bf591ecec5
|
@ -28,7 +28,7 @@ end
|
||||||
|
|
||||||
function test_nestwarmth_insect()
|
function test_nestwarmth_insect()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("insect", "noreply@eressea.de", "de")
|
local f = faction.create("insect")
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
local flags = u.flags
|
local flags = u.flags
|
||||||
u:add_item("nestwarmth", 2)
|
u:add_item("nestwarmth", 2)
|
||||||
|
@ -44,7 +44,7 @@ end
|
||||||
|
|
||||||
function test_nestwarmth_other()
|
function test_nestwarmth_other()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("human", "noreply@eressea.de", "de")
|
local f = faction.create("human")
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
local flags = u.flags
|
local flags = u.flags
|
||||||
u:add_item("nestwarmth", 2)
|
u:add_item("nestwarmth", 2)
|
||||||
|
@ -60,7 +60,7 @@ end
|
||||||
|
|
||||||
function test_meow()
|
function test_meow()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("human", "noreply@eressea.de", "de")
|
local f = faction.create("human")
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
u:add_item("aoc", 1)
|
u:add_item("aoc", 1)
|
||||||
u:clear_orders()
|
u:clear_orders()
|
||||||
|
@ -74,7 +74,7 @@ end
|
||||||
|
|
||||||
function test_aurapotion50()
|
function test_aurapotion50()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("human", "noreply@eressea.de", "de")
|
local f = faction.create("human")
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
u:add_item("aurapotion50", 1)
|
u:add_item("aurapotion50", 1)
|
||||||
u:set_skill('magic', 10);
|
u:set_skill('magic', 10);
|
||||||
|
@ -92,7 +92,7 @@ end
|
||||||
|
|
||||||
function test_bagpipe()
|
function test_bagpipe()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("human", "noreply@eressea.de", "de")
|
local f = faction.create("human")
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
turn_begin()
|
turn_begin()
|
||||||
u:add_item("bagpipeoffear", 1)
|
u:add_item("bagpipeoffear", 1)
|
||||||
|
@ -109,9 +109,52 @@ function test_bagpipe()
|
||||||
assert_equal(0, r:get_curse('depression'))
|
assert_equal(0, r:get_curse('depression'))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function test_monthly_healing()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("human")
|
||||||
|
local u = unit.create(f, r, 30)
|
||||||
|
assert_equal(600, u.hp)
|
||||||
|
u.hp = 100
|
||||||
|
process_orders()
|
||||||
|
assert_equal(130, u.hp)
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_ointment()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("human")
|
||||||
|
local u = unit.create(f, r, 30)
|
||||||
|
assert_equal(600, u.hp)
|
||||||
|
u.hp = 100
|
||||||
|
turn_begin()
|
||||||
|
u:add_item("ointment", 1)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Wundsalbe")
|
||||||
|
turn_process()
|
||||||
|
assert_equal(530, u.hp)
|
||||||
|
assert_equal(0, u:get_item("ointment"))
|
||||||
|
turn_end()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_use_healing_potion()
|
||||||
|
-- Heiltrank kann (auch) mit BENUTZE eingesetzt werden
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("human")
|
||||||
|
local u = unit.create(f, r, 30)
|
||||||
|
assert_equal(600, u.hp)
|
||||||
|
u.hp = 100
|
||||||
|
turn_begin()
|
||||||
|
u:add_item("p14", 1)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Heiltrank")
|
||||||
|
turn_process()
|
||||||
|
assert_equal(530, u.hp)
|
||||||
|
assert_equal(0, u:get_item("p14"))
|
||||||
|
turn_end()
|
||||||
|
end
|
||||||
|
|
||||||
function test_speedsail()
|
function test_speedsail()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("human", "noreply@eressea.de", "de")
|
local f = faction.create("human")
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
|
|
||||||
turn_begin()
|
turn_begin()
|
||||||
|
@ -130,7 +173,7 @@ end
|
||||||
|
|
||||||
function disable_test_foolpotion()
|
function disable_test_foolpotion()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("human", "noreply@eressea.de", "de")
|
local f = faction.create("human")
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
turn_begin()
|
turn_begin()
|
||||||
u:add_item('p7', 2)
|
u:add_item('p7', 2)
|
||||||
|
@ -159,7 +202,7 @@ end
|
||||||
|
|
||||||
function test_snowman()
|
function test_snowman()
|
||||||
local r = region.create(0, 0, "glacier")
|
local r = region.create(0, 0, "glacier")
|
||||||
local f = faction.create("human", "noreply@eressea.de", "de")
|
local f = faction.create("human")
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
u:add_item("snowman", 1)
|
u:add_item("snowman", 1)
|
||||||
u:clear_orders()
|
u:clear_orders()
|
||||||
|
|
|
@ -53,7 +53,6 @@ function test_dwarf_no_mining_bonus()
|
||||||
local r = region.create(0, 0, 'mountain')
|
local r = region.create(0, 0, 'mountain')
|
||||||
local f = create_faction('dwarf')
|
local f = create_faction('dwarf')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
u.name = 'Xolgrim'
|
|
||||||
|
|
||||||
turn_begin()
|
turn_begin()
|
||||||
r:set_resource('iron', 100)
|
r:set_resource('iron', 100)
|
||||||
|
|
|
@ -211,7 +211,7 @@ void show_potions(faction *f, int sklevel)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int potion_healing(unit * u, int amount) {
|
static int potion_ointment(unit * u, int amount) {
|
||||||
int maxhp = unit_max_hp(u) * u->number;
|
int maxhp = unit_max_hp(u) * u->number;
|
||||||
u->hp = u->hp + 400 * amount;
|
u->hp = u->hp + 400 * amount;
|
||||||
if (u->hp > maxhp) u->hp = maxhp;
|
if (u->hp > maxhp) u->hp = maxhp;
|
||||||
|
@ -244,8 +244,8 @@ static int do_potion(unit * u, region *r, const item_type * itype, int amount)
|
||||||
if (itype == oldpotiontype[P_LIFE]) {
|
if (itype == oldpotiontype[P_LIFE]) {
|
||||||
return potion_water_of_life(u, r, amount);
|
return potion_water_of_life(u, r, amount);
|
||||||
}
|
}
|
||||||
else if (itype == oldpotiontype[P_HEILWASSER]) {
|
else if (itype == oldpotiontype[P_OINTMENT]) {
|
||||||
return potion_healing(u, amount);
|
return potion_ointment(u, amount);
|
||||||
}
|
}
|
||||||
else if (itype == oldpotiontype[P_PEOPLE]) {
|
else if (itype == oldpotiontype[P_PEOPLE]) {
|
||||||
return potion_luck(u, r, &at_peasantluck, amount);
|
return potion_luck(u, r, &at_peasantluck, amount);
|
||||||
|
@ -277,58 +277,6 @@ int use_potion(unit * u, const item_type * itype, int amount, struct order *ord)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct potiondelay {
|
|
||||||
unit *u;
|
|
||||||
region *r;
|
|
||||||
const item_type *itype;
|
|
||||||
int amount;
|
|
||||||
} potiondelay;
|
|
||||||
|
|
||||||
static void init_potiondelay(variant *var)
|
|
||||||
{
|
|
||||||
var->v = malloc(sizeof(potiondelay));
|
|
||||||
}
|
|
||||||
|
|
||||||
static int age_potiondelay(attrib * a, void *owner)
|
|
||||||
{
|
|
||||||
potiondelay *pd = (potiondelay *)a->data.v;
|
|
||||||
UNUSED_ARG(owner);
|
|
||||||
pd->amount = do_potion(pd->u, pd->r, pd->itype, pd->amount);
|
|
||||||
return AT_AGE_REMOVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
attrib_type at_potiondelay = {
|
|
||||||
"potiondelay",
|
|
||||||
init_potiondelay,
|
|
||||||
a_free_voidptr,
|
|
||||||
age_potiondelay, 0, 0
|
|
||||||
};
|
|
||||||
|
|
||||||
static attrib *make_potiondelay(unit * u, const item_type * itype, int amount)
|
|
||||||
{
|
|
||||||
attrib *a = a_new(&at_potiondelay);
|
|
||||||
potiondelay *pd = (potiondelay *)a->data.v;
|
|
||||||
pd->u = u;
|
|
||||||
pd->r = u->region;
|
|
||||||
pd->itype = itype;
|
|
||||||
pd->amount = amount;
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
use_potion_delayed(unit * u, const item_type * itype, int amount,
|
|
||||||
struct order *ord)
|
|
||||||
{
|
|
||||||
int result = begin_potion(u, itype, ord);
|
|
||||||
if (result)
|
|
||||||
return result;
|
|
||||||
|
|
||||||
a_add(&u->attribs, make_potiondelay(u, itype, amount));
|
|
||||||
|
|
||||||
end_potion(u, itype, amount);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****************/
|
/*****************/
|
||||||
/* at_effect */
|
/* at_effect */
|
||||||
/*****************/
|
/*****************/
|
||||||
|
|
|
@ -41,7 +41,7 @@ extern "C" {
|
||||||
P_LIFE,
|
P_LIFE,
|
||||||
/* Stufe 2 */
|
/* Stufe 2 */
|
||||||
P_DOMORE,
|
P_DOMORE,
|
||||||
P_HEILWASSER,
|
P_OINTMENT,
|
||||||
P_BAUERNBLUT,
|
P_BAUERNBLUT,
|
||||||
/* Stufe 3 */
|
/* Stufe 3 */
|
||||||
P_WISE, /* 6 */
|
P_WISE, /* 6 */
|
||||||
|
@ -64,8 +64,6 @@ extern "C" {
|
||||||
void herbsearch(struct unit *u, int max);
|
void herbsearch(struct unit *u, int max);
|
||||||
int use_potion(struct unit *u, const struct item_type *itype,
|
int use_potion(struct unit *u, const struct item_type *itype,
|
||||||
int amount, struct order *);
|
int amount, struct order *);
|
||||||
int use_potion_delayed(struct unit *u, const struct item_type *itype,
|
|
||||||
int amount, struct order *);
|
|
||||||
|
|
||||||
int get_effect(const struct unit *u, const struct item_type *effect);
|
int get_effect(const struct unit *u, const struct item_type *effect);
|
||||||
int change_effect(struct unit *u, const struct item_type *effect,
|
int change_effect(struct unit *u, const struct item_type *effect,
|
||||||
|
|
|
@ -28,6 +28,7 @@ extern "C" {
|
||||||
|
|
||||||
struct message;
|
struct message;
|
||||||
struct selist;
|
struct selist;
|
||||||
|
union variant;
|
||||||
|
|
||||||
/** more defines **/
|
/** more defines **/
|
||||||
#define FS_ENEMY 1
|
#define FS_ENEMY 1
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#define H_GC_CREPORT
|
#define H_GC_CREPORT
|
||||||
|
|
||||||
#include <kernel/types.h>
|
#include <kernel/types.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
16
src/items.c
16
src/items.c
|
@ -16,6 +16,7 @@
|
||||||
#include <spells/regioncurse.h>
|
#include <spells/regioncurse.h>
|
||||||
|
|
||||||
#include <kernel/curse.h>
|
#include <kernel/curse.h>
|
||||||
|
#include <kernel/config.h>
|
||||||
#include <kernel/faction.h>
|
#include <kernel/faction.h>
|
||||||
#include <kernel/item.h>
|
#include <kernel/item.h>
|
||||||
#include <kernel/messages.h>
|
#include <kernel/messages.h>
|
||||||
|
@ -321,8 +322,8 @@ static int heal(unit * user, int effect)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
use_healingpotion(struct unit *user, const struct item_type *itype, int amount,
|
use_healingpotion(struct unit *user, const struct item_type *itype,
|
||||||
struct order *ord)
|
int amount, struct order *ord)
|
||||||
{
|
{
|
||||||
int effect = amount * 400;
|
int effect = amount * 400;
|
||||||
unit *u = user->region->units;
|
unit *u = user->region->units;
|
||||||
|
@ -400,8 +401,7 @@ static int use_warmthpotion(unit *u, const item_type *itype,
|
||||||
cmistake(u, ord, 163, MSG_EVENT);
|
cmistake(u, ord, 163, MSG_EVENT);
|
||||||
return ECUSTOM;
|
return ECUSTOM;
|
||||||
}
|
}
|
||||||
use_pooled(u, itype->rtype, GET_SLACK | GET_RESERVE | GET_POOLED_SLACK,
|
use_pooled(u, itype->rtype, GET_DEFAULT, amount);
|
||||||
amount);
|
|
||||||
usetpotionuse(u, itype);
|
usetpotionuse(u, itype);
|
||||||
|
|
||||||
ADDMSG(&u->faction->msgs, msg_message("usepotion",
|
ADDMSG(&u->faction->msgs, msg_message("usepotion",
|
||||||
|
@ -422,9 +422,9 @@ void register_itemfunctions(void)
|
||||||
register_item_use(use_birthdayamulet, "use_aoc");
|
register_item_use(use_birthdayamulet, "use_aoc");
|
||||||
register_item_use(use_foolpotion, "use_p7");
|
register_item_use(use_foolpotion, "use_p7");
|
||||||
register_item_use(use_bloodpotion, "use_peasantblood");
|
register_item_use(use_bloodpotion, "use_peasantblood");
|
||||||
register_item_use(use_healingpotion, "use_ointment");
|
register_item_use(use_potion, "use_ointment");
|
||||||
|
register_item_use(use_healingpotion, "use_p14");
|
||||||
register_item_use(use_warmthpotion, "use_nestwarmth");
|
register_item_use(use_warmthpotion, "use_nestwarmth");
|
||||||
|
/* p2 = P_LIFE = Wasser des Lebens */
|
||||||
/* ungetestet: Wasser des Lebens */
|
register_item_use(use_potion, "use_p2");
|
||||||
register_item_use(use_potion_delayed, "use_p2");
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
#include <kernel/types.h>
|
#include <kernel/types.h>
|
||||||
#include <util/resolve.h>
|
#include <util/resolve.h>
|
||||||
|
#include <util/variant.h>
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
|
@ -16,7 +16,7 @@ void test_terraform(CuTest *tc) {
|
||||||
item_type *itype;
|
item_type *itype;
|
||||||
|
|
||||||
test_setup();
|
test_setup();
|
||||||
itype = test_create_itemtype("ointment");
|
itype = test_create_itemtype("oil");
|
||||||
itype->rtype->flags |= (RTF_ITEM | RTF_POOLED);
|
itype->rtype->flags |= (RTF_ITEM | RTF_POOLED);
|
||||||
new_luxurytype(itype, 0);
|
new_luxurytype(itype, 0);
|
||||||
|
|
||||||
|
|
|
@ -496,7 +496,7 @@ unit *read_unit(gamedata *data)
|
||||||
}
|
}
|
||||||
|
|
||||||
READ_INT(data->store, &n);
|
READ_INT(data->store, &n);
|
||||||
unit_setstatus(u, n);
|
unit_setstatus(u, (status_t)n);
|
||||||
READ_INT(data->store, &u->flags);
|
READ_INT(data->store, &u->flags);
|
||||||
u->flags &= UFL_SAVEMASK;
|
u->flags &= UFL_SAVEMASK;
|
||||||
if ((u->flags & UFL_ANON_FACTION) && !rule_stealth_anon()) {
|
if ((u->flags & UFL_ANON_FACTION) && !rule_stealth_anon()) {
|
||||||
|
|
|
@ -20,9 +20,6 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#define ERESSEA_TYPES_H
|
#define ERESSEA_TYPES_H
|
||||||
|
|
||||||
#include <settings.h>
|
#include <settings.h>
|
||||||
#include <util/variant.h>
|
|
||||||
|
|
||||||
typedef short item_t;
|
|
||||||
|
|
||||||
struct attrib;
|
struct attrib;
|
||||||
struct attrib_type;
|
struct attrib_type;
|
||||||
|
@ -77,15 +74,14 @@ typedef enum {
|
||||||
|
|
||||||
/* ------------------ Status von Einheiten --------------------- */
|
/* ------------------ Status von Einheiten --------------------- */
|
||||||
|
|
||||||
typedef unsigned char status_t;
|
typedef enum {
|
||||||
enum {
|
|
||||||
ST_AGGRO,
|
ST_AGGRO,
|
||||||
ST_FIGHT,
|
ST_FIGHT,
|
||||||
ST_BEHIND,
|
ST_BEHIND,
|
||||||
ST_CHICKEN,
|
ST_CHICKEN,
|
||||||
ST_AVOID,
|
ST_AVOID,
|
||||||
ST_FLEE
|
ST_FLEE
|
||||||
};
|
} status_t;
|
||||||
|
|
||||||
/* ----------------- Parameter --------------------------------- */
|
/* ----------------- Parameter --------------------------------- */
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#define H_KRNL_MAGIC
|
#define H_KRNL_MAGIC
|
||||||
|
|
||||||
#include <kernel/types.h>
|
#include <kernel/types.h>
|
||||||
|
#include <util/variant.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -19,6 +19,9 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
#ifndef H_GC_VOLCANO
|
#ifndef H_GC_VOLCANO
|
||||||
#define H_GC_VOLCANO
|
#define H_GC_VOLCANO
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue