forked from github/server
create a lua module that can handle simple euipments.
lua test for equip_unit, with callbacks.
This commit is contained in:
parent
b12050ac2a
commit
271352d0ba
10 changed files with 88 additions and 33 deletions
|
@ -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",
|
||||
|
|
|
@ -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')
|
||||
}
|
||||
|
|
|
@ -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')
|
||||
}
|
||||
|
|
50
scripts/eressea/equipment.lua
Normal file
50
scripts/eressea/equipment.lua
Normal 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
|
|
@ -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
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
-- new tests 2014-06-11
|
||||
require 'tests.config'
|
||||
require 'tests.faction'
|
||||
require 'tests.locale'
|
||||
require 'tests.movement'
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue