create a lua module that can handle simple euipments.

lua test for equip_unit, with callbacks.
This commit is contained in:
Enno Rehling 2018-05-12 19:10:40 +02:00
parent b12050ac2a
commit 271352d0ba
10 changed files with 88 additions and 33 deletions

View File

@ -6,7 +6,6 @@
"config://conf/e2/locales.json",
"config://conf/e2/terrains.json",
"config://conf/e2/items.json",
"config://conf/e2/rules.xml",
"config://res/core/ships.xml",
"config://res/core/common/buildings.xml",
"config://res/eressea/buildings.xml",

View File

@ -11,8 +11,8 @@ return {
require('eressea.tunnels'),
require('eressea.ponnuki'),
require('eressea.astral'),
-- require('eressea.locales'),
require('eressea.jsreport'),
require('eressea.ents'),
require('eressea.equipment'),
require('eressea.cursed')
}

View File

@ -5,7 +5,7 @@ eressea.log.debug("rules for game E3")
return {
require('eressea'),
require('eressea.xmasitems'),
-- require('eressea.markets'),
require('eressea.frost'),
require('eressea.equipment'),
require('eressea.ents')
}

View File

@ -0,0 +1,50 @@
-- Equipment
local sets = {
['first_unit'] = {
['items'] = {
['money'] = 2500,
['log'] = 10,
['stone'] = 4
}
},
['seed_unit'] = {
['items'] = {
['log'] = 50,
['stone'] = 50,
['iron'] = 50,
['laen'] = 10,
['sword'] = 1,
['mallorn'] = 10,
['skillpotion'] = 5,
['lifepotion'] = 5,
['money'] = 20000
},
['skills'] = {
['perception'] = 30,
['melee'] = 1
}
}
}
function equip_unit(u, name, flags)
set = sets[name]
if set then
items = set['items']
if items then
for k,v in pairs(items) do
u:add_item(k, v)
end
end
skills = set['skills']
if skills then
for k,v in pairs(skills) do
u:set_skill(k, v)
end
end
return true
end
return false
end
return nil

View File

@ -8,27 +8,32 @@ end
function test_read_race()
local f
eressea.free_game()
assert_not_nil(eressea.config)
eressea.config.parse('{ "races": { "orc" : {}}}')
f = faction.create("orc", "orc@example.com", "en")
assert_not_nil(f)
end
function disable_test_read_ship()
local s
eressea.free_game()
assert_not_nil(eressea.config)
conf = [[{
"ships": {
"boat" : {
"construction" : {
"maxsize" : 20
}
}
}
}]]
eressea.config.parse(conf);
s = ship.create(nil, "boat")
assert_not_nil(s)
function test_seed_unit()
local r = region.create(0, 0, "plain")
local f = faction.create('human')
local u = unit.create(f, r, 1)
u:equip('seed_unit')
assert_equal(20000, u:get_item('money'))
assert_equal(50, u:get_item('log'))
assert_equal(50, u:get_item('stone'))
assert_equal(1, u:get_skill('melee'))
end
function test_seed_elf()
local r = region.create(0, 0, "plain")
local f = faction.create('human')
local u = unit.create(f, r, 1)
-- quirk: independent of the race, seed_elf contains a fairyboot
u:equip('seed_elf')
assert_equal(1, u:get_item('fairyboot'))
-- all humans start in a building:
assert_not_nil(u.building)
assert_equal('castle', u.building.type)
assert_equal(10, u.building.size)
end

View File

@ -13,6 +13,7 @@ require 'tests.e2.guard'
require 'tests.e2.stealth'
require 'tests.e2.items'
require 'tests.e2.ships'
require 'tests.config'
require 'tests.items'
require 'tests.economy'
require 'tests.orders'

View File

@ -6,6 +6,7 @@ require 'tests.e3.parser'
require 'tests.e3.morale'
require 'tests.e3.items'
require 'tests.e3.production'
require 'tests.config'
require 'tests.spells'
require 'tests.economy'
require 'tests.orders'

View File

@ -1,5 +1,4 @@
-- new tests 2014-06-11
require 'tests.config'
require 'tests.faction'
require 'tests.locale'
require 'tests.movement'

View File

@ -17,6 +17,7 @@
#include <kernel/building.h>
#include <kernel/config.h>
#include <kernel/curse.h>
#include "kernel/equipment.h"
#include <kernel/faction.h>
#include <kernel/group.h>
#include <kernel/item.h>
@ -962,6 +963,16 @@ static int tolua_event_get(lua_State * L)
return 0;
}
static int tolua_equipunit(lua_State * L)
{
unit *u = (unit *)tolua_tousertype(L, 1, 0);
const char *eqname = tolua_tostring(L, 2, 0);
int mask = (int)tolua_tonumber(L, 3, EQUIP_ALL);
assert(u && mask > 0);
equip_unit_mask(u, eqname, mask);
return 0;
}
void tolua_unit_open(lua_State * L)
{
/* register user types */
@ -1062,6 +1073,7 @@ void tolua_unit_open(lua_State * L)
tolua_variable(L, TOLUA_CAST "hp_max", tolua_unit_get_hpmax, 0);
tolua_variable(L, TOLUA_CAST "aura_max", tolua_unit_get_auramax, 0);
tolua_function(L, TOLUA_CAST "equip", tolua_equipunit);
tolua_function(L, TOLUA_CAST "show", tolua_bufunit);
}
tolua_endmodule(L);

View File

@ -9,7 +9,6 @@
#include "kernel/alliance.h"
#include "kernel/building.h"
#include "kernel/curse.h"
#include "kernel/equipment.h"
#include "kernel/unit.h"
#include "kernel/terrain.h"
#include "kernel/messages.h"
@ -393,16 +392,6 @@ static int tolua_get_nmrs(lua_State * L)
return 1;
}
static int tolua_equipunit(lua_State * L)
{
unit *u = (unit *)tolua_tousertype(L, 1, 0);
const char *eqname = tolua_tostring(L, 2, 0);
int mask = (int)tolua_tonumber(L, 3, EQUIP_ALL);
assert(u && mask > 0);
equip_unit_mask(u, eqname, mask);
return 0;
}
static int tolua_spawn_braineaters(lua_State * L)
{
float chance = (float)tolua_tonumber(L, 1, 0);
@ -1019,7 +1008,6 @@ int tolua_bindings_open(lua_State * L, const dictionary *inifile)
tolua_function(L, TOLUA_CAST "set_turn", &tolua_set_turn);
tolua_function(L, TOLUA_CAST "get_turn", &tolua_get_turn);
tolua_function(L, TOLUA_CAST "get_season", tolua_get_season);
tolua_function(L, TOLUA_CAST "equip_unit", tolua_equipunit);
tolua_function(L, TOLUA_CAST "atoi36", tolua_atoi36);
tolua_function(L, TOLUA_CAST "itoa36", tolua_itoa36);
tolua_function(L, TOLUA_CAST "dice_roll", tolua_dice_rand);