forked from github/server
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
c90182ea3a
|
@ -6,6 +6,7 @@
|
||||||
<construction skill="mining" minskill="8"/>
|
<construction skill="mining" minskill="8"/>
|
||||||
</item>
|
</item>
|
||||||
<resourcelimit>
|
<resourcelimit>
|
||||||
|
<modifier building="mine" type="skill" value="1"/>
|
||||||
<modifier type="require" building="mine"/>
|
<modifier type="require" building="mine"/>
|
||||||
</resourcelimit>
|
</resourcelimit>
|
||||||
</resource>
|
</resource>
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
<construction skill="mining" minskill="7"/>
|
<construction skill="mining" minskill="7"/>
|
||||||
</item>
|
</item>
|
||||||
<resourcelimit>
|
<resourcelimit>
|
||||||
|
<modifier building="mine" type="skill" value="1"/>
|
||||||
<modifier type="require" building="mine"/>
|
<modifier type="require" building="mine"/>
|
||||||
</resourcelimit>
|
</resourcelimit>
|
||||||
</resource>
|
</resource>
|
||||||
|
|
|
@ -5,6 +5,10 @@ local function _test_create_ship(r)
|
||||||
return s
|
return s
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function create_faction(race)
|
||||||
|
return faction.create(race .. '@eressea.de', race, "de")
|
||||||
|
end
|
||||||
|
|
||||||
local function one_unit(r, f)
|
local function one_unit(r, f)
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
u:add_item("money", u.number * 100)
|
u:add_item("money", u.number * 100)
|
||||||
|
@ -17,8 +21,8 @@ local function two_units(r, f1, f2)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function two_factions()
|
local function two_factions()
|
||||||
local f1 = faction.create("one@eressea.de", "human", "de")
|
local f1 = create_faction('human')
|
||||||
local f2 = faction.create("two@eressea.de", "elf", "de")
|
local f2 = create_faction('elf')
|
||||||
return f1, f2
|
return f1, f2
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -44,7 +48,7 @@ end
|
||||||
|
|
||||||
function test_flags()
|
function test_flags()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("flags@eressea.de", "halfling", "de")
|
local f = create_faction('halfling')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
local no = itoa36(f.id)
|
local no = itoa36(f.id)
|
||||||
local flags = 50332673
|
local flags = 50332673
|
||||||
|
@ -62,7 +66,7 @@ function test_elvenhorse_requires_riding_5()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
region.create(1, 0, "plain")
|
region.create(1, 0, "plain")
|
||||||
local goal = region.create(2, 0, "plain")
|
local goal = region.create(2, 0, "plain")
|
||||||
local f = faction.create("riding@eressea.de", "halfling", "de")
|
local f = create_faction('halfling')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
u:add_item("elvenhorse", 1)
|
u:add_item("elvenhorse", 1)
|
||||||
u:set_skill("riding", 6)-- halfling has -1 modifier
|
u:set_skill("riding", 6)-- halfling has -1 modifier
|
||||||
|
@ -76,7 +80,7 @@ function test_cannot_ride_elvenhorse_without_enough_skill()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local goal = region.create(1, 0, "plain")
|
local goal = region.create(1, 0, "plain")
|
||||||
region.create(2, 0, "plain")
|
region.create(2, 0, "plain")
|
||||||
local f = faction.create("elvenhorse@eressea.de", "halfling", "de")
|
local f = create_faction('halfling')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
u:add_item("elvenhorse", 1)
|
u:add_item("elvenhorse", 1)
|
||||||
u:set_skill("riding", 5) -- halfling has -1 modifier
|
u:set_skill("riding", 5) -- halfling has -1 modifier
|
||||||
|
@ -96,7 +100,7 @@ end
|
||||||
|
|
||||||
function test_demon_food()
|
function test_demon_food()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("demonfood@eressea.de", "demon", "de")
|
local f = create_faction('demon')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
local p = r:get_resource("peasant")
|
local p = r:get_resource("peasant")
|
||||||
r:set_resource("peasant", 2000)
|
r:set_resource("peasant", 2000)
|
||||||
|
@ -136,7 +140,7 @@ function test_plane()
|
||||||
local nx, ny = plane.normalize(pl, 4, 4)
|
local nx, ny = plane.normalize(pl, 4, 4)
|
||||||
assert_equal(nx, -3, "normalization failed")
|
assert_equal(nx, -3, "normalization failed")
|
||||||
assert_equal(ny, -3, "normalization failed")
|
assert_equal(ny, -3, "normalization failed")
|
||||||
local f = faction.create("plan@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
f.id = atoi36("tpla")
|
f.id = atoi36("tpla")
|
||||||
local r, x, y
|
local r, x, y
|
||||||
for x = -3, 3 do for y = -3, 3 do
|
for x = -3, 3 do for y = -3, 3 do
|
||||||
|
@ -155,7 +159,7 @@ end
|
||||||
|
|
||||||
function test_read_write()
|
function test_read_write()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("readwrite@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r)
|
local u = unit.create(f, r)
|
||||||
u.number = 2
|
u.number = 2
|
||||||
local fno = f.id
|
local fno = f.id
|
||||||
|
@ -184,7 +188,7 @@ end
|
||||||
function test_descriptions()
|
function test_descriptions()
|
||||||
local info = "Descriptions can be very long. Bug 1984 behauptet, dass es Probleme gibt mit Beschreibungen die laenger als 120 Zeichen sind. This description is longer than 120 characters."
|
local info = "Descriptions can be very long. Bug 1984 behauptet, dass es Probleme gibt mit Beschreibungen die laenger als 120 Zeichen sind. This description is longer than 120 characters."
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("descriptions@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
local s = _test_create_ship(r)
|
local s = _test_create_ship(r)
|
||||||
local b = building.create(r, "castle")
|
local b = building.create(r, "castle")
|
||||||
|
@ -236,7 +240,7 @@ end
|
||||||
|
|
||||||
function test_faction()
|
function test_faction()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("testfaction@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
assert(f)
|
assert(f)
|
||||||
f.info = "Spazz"
|
f.info = "Spazz"
|
||||||
assert(f.info=="Spazz")
|
assert(f.info=="Spazz")
|
||||||
|
@ -259,7 +263,7 @@ end
|
||||||
|
|
||||||
function test_unit()
|
function test_unit()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("testunit@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r)
|
local u = unit.create(f, r)
|
||||||
u.number = 20
|
u.number = 20
|
||||||
u.name = "Enno"
|
u.name = "Enno"
|
||||||
|
@ -292,7 +296,7 @@ end
|
||||||
|
|
||||||
function test_building()
|
function test_building()
|
||||||
local u
|
local u
|
||||||
local f = faction.create("testbuilding@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local b = building.create(r, "castle")
|
local b = building.create(r, "castle")
|
||||||
u = unit.create(f, r)
|
u = unit.create(f, r)
|
||||||
|
@ -318,7 +322,7 @@ end
|
||||||
|
|
||||||
function test_message()
|
function test_message()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("testmessage@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r)
|
local u = unit.create(f, r)
|
||||||
local msg = message.create("item_create_spell")
|
local msg = message.create("item_create_spell")
|
||||||
msg:set_unit("mage", u)
|
msg:set_unit("mage", u)
|
||||||
|
@ -346,7 +350,7 @@ function test_events()
|
||||||
plain = region.create(0, 0, "plain")
|
plain = region.create(0, 0, "plain")
|
||||||
skill = 8
|
skill = 8
|
||||||
|
|
||||||
f = faction.create("noreply2@eressea.de", "elf", "de")
|
f = create_faction('elf')
|
||||||
f.age = 20
|
f.age = 20
|
||||||
|
|
||||||
u = unit.create(f, plain)
|
u = unit.create(f, plain)
|
||||||
|
@ -356,7 +360,7 @@ function test_events()
|
||||||
u:add_order("NUMMER PARTEI test")
|
u:add_order("NUMMER PARTEI test")
|
||||||
u:add_handler("message", msg_handler)
|
u:add_handler("message", msg_handler)
|
||||||
msg = "BOTSCHAFT EINHEIT " .. itoa36(u.id) .. " Du~Elf~stinken"
|
msg = "BOTSCHAFT EINHEIT " .. itoa36(u.id) .. " Du~Elf~stinken"
|
||||||
f = faction.create("noreply3@eressea.de", "elf", "de")
|
f = create_faction('elf')
|
||||||
f.age = 20
|
f.age = 20
|
||||||
|
|
||||||
u = unit.create(f, plain)
|
u = unit.create(f, plain)
|
||||||
|
@ -371,7 +375,7 @@ end
|
||||||
|
|
||||||
function test_renumber_ship()
|
function test_renumber_ship()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply4@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r)
|
local u = unit.create(f, r)
|
||||||
local s = ship.create(r, config.ships[1])
|
local s = ship.create(r, config.ships[1])
|
||||||
u.ship = s
|
u.ship = s
|
||||||
|
@ -386,7 +390,7 @@ end
|
||||||
|
|
||||||
function test_recruit2()
|
function test_recruit2()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply4@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r)
|
local u = unit.create(f, r)
|
||||||
u.number = 1
|
u.number = 1
|
||||||
u:add_item("money", 2000)
|
u:add_item("money", 2000)
|
||||||
|
@ -401,7 +405,7 @@ end
|
||||||
function test_guard()
|
function test_guard()
|
||||||
region.create(1, 0, "plain")
|
region.create(1, 0, "plain")
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f1 = faction.create("noreply5@eressea.de", "human", "de")
|
local f1 = create_faction('human')
|
||||||
f1.age = 20
|
f1.age = 20
|
||||||
local u1 = unit.create(f1, r, 10)
|
local u1 = unit.create(f1, r, 10)
|
||||||
u1:add_item("sword", 10)
|
u1:add_item("sword", 10)
|
||||||
|
@ -411,7 +415,7 @@ function test_guard()
|
||||||
u1:add_order("NACH O")
|
u1:add_order("NACH O")
|
||||||
u1.name="Kalle Pimp"
|
u1.name="Kalle Pimp"
|
||||||
|
|
||||||
local f2 = faction.create("noreply6@eressea.de", "human", "de")
|
local f2 = create_faction('human')
|
||||||
f2.age = 20
|
f2.age = 20
|
||||||
local u2 = unit.create(f2, r, 1)
|
local u2 = unit.create(f2, r, 1)
|
||||||
local u3 = unit.create(f2, r, 1)
|
local u3 = unit.create(f2, r, 1)
|
||||||
|
@ -429,7 +433,7 @@ end
|
||||||
|
|
||||||
function test_recruit()
|
function test_recruit()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply7@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r)
|
local u = unit.create(f, r)
|
||||||
u.number = 1
|
u.number = 1
|
||||||
local n = 3
|
local n = 3
|
||||||
|
@ -445,7 +449,7 @@ end
|
||||||
|
|
||||||
function test_produce()
|
function test_produce()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply8@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
u:clear_orders()
|
u:clear_orders()
|
||||||
local sword = config.get_resource('sword')
|
local sword = config.get_resource('sword')
|
||||||
|
@ -460,7 +464,7 @@ end
|
||||||
|
|
||||||
function test_work()
|
function test_work()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply9@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
u:add_item("money", u.number * 10) -- humans cost 10
|
u:add_item("money", u.number * 10) -- humans cost 10
|
||||||
u:set_skill("herbalism", 5)
|
u:set_skill("herbalism", 5)
|
||||||
|
@ -473,7 +477,7 @@ end
|
||||||
function test_upkeep()
|
function test_upkeep()
|
||||||
eressea.settings.set("rules.food.flags", "0")
|
eressea.settings.set("rules.food.flags", "0")
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply10@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r, 5)
|
local u = unit.create(f, r, 5)
|
||||||
u:add_item("money", u.number * 11)
|
u:add_item("money", u.number * 11)
|
||||||
u:clear_orders()
|
u:clear_orders()
|
||||||
|
@ -485,7 +489,7 @@ end
|
||||||
function test_id()
|
function test_id()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
|
|
||||||
local f = faction.create("noreply11@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
f.id = atoi36("42")
|
f.id = atoi36("42")
|
||||||
assert_not_equal(f, get_faction(42))
|
assert_not_equal(f, get_faction(42))
|
||||||
assert_equal(f, get_faction("42"))
|
assert_equal(f, get_faction("42"))
|
||||||
|
@ -521,7 +525,7 @@ function test_mallorn()
|
||||||
m:set_resource("tree", 100)
|
m:set_resource("tree", 100)
|
||||||
assert_equal(100, m:get_resource("tree"))
|
assert_equal(100, m:get_resource("tree"))
|
||||||
|
|
||||||
local f = faction.create("noreply13@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
|
|
||||||
local u1 = unit.create(f, r, 1)
|
local u1 = unit.create(f, r, 1)
|
||||||
u1:add_item("money", u1.number * 100)
|
u1:add_item("money", u1.number * 100)
|
||||||
|
@ -558,7 +562,7 @@ function test_coordinate_translation()
|
||||||
local pl = plane.create(1, 500, 500, 1001, 1001) -- astralraum
|
local pl = plane.create(1, 500, 500, 1001, 1001) -- astralraum
|
||||||
local pe = plane.create(1, -8761, 3620, 23, 23) -- eternath
|
local pe = plane.create(1, -8761, 3620, 23, 23) -- eternath
|
||||||
local r = region.create(1000, 1000, "plain")
|
local r = region.create(1000, 1000, "plain")
|
||||||
local f = faction.create("noreply14@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
assert_not_equal(nil, r)
|
assert_not_equal(nil, r)
|
||||||
assert_equal(r.x, 1000)
|
assert_equal(r.x, 1000)
|
||||||
assert_equal(r.y, 1000)
|
assert_equal(r.y, 1000)
|
||||||
|
@ -604,8 +608,8 @@ end
|
||||||
|
|
||||||
function test_building_other()
|
function test_building_other()
|
||||||
local r = region.create(0,0, "plain")
|
local r = region.create(0,0, "plain")
|
||||||
local f1 = faction.create("noreply17@eressea.de", "human", "de")
|
local f1 = create_faction('human')
|
||||||
local f2 = faction.create("noreply18@eressea.de", "human", "de")
|
local f2 = create_faction('human')
|
||||||
local b = building.create(r, "castle")
|
local b = building.create(r, "castle")
|
||||||
b.size = 10
|
b.size = 10
|
||||||
local u1 = unit.create(f1, r, 3)
|
local u1 = unit.create(f1, r, 3)
|
||||||
|
@ -632,7 +636,7 @@ end
|
||||||
local function _test_create_laen()
|
local function _test_create_laen()
|
||||||
eressea.settings.set("rules.terraform.all", "1")
|
eressea.settings.set("rules.terraform.all", "1")
|
||||||
local r = region.create(0,0, "mountain")
|
local r = region.create(0,0, "mountain")
|
||||||
local f1 = faction.create("noreply19@eressea.de", "human", "de")
|
local f1 = create_faction('human')
|
||||||
local u1 = unit.create(f1, r, 1)
|
local u1 = unit.create(f1, r, 1)
|
||||||
r:set_resource("laen", 50)
|
r:set_resource("laen", 50)
|
||||||
return r, u1
|
return r, u1
|
||||||
|
@ -671,7 +675,7 @@ end
|
||||||
|
|
||||||
function test_mine()
|
function test_mine()
|
||||||
local r = region.create(0,0, "mountain")
|
local r = region.create(0,0, "mountain")
|
||||||
local f1 = faction.create("noreply20@eressea.de", "human", "de")
|
local f1 = create_faction('human')
|
||||||
local u1 = unit.create(f1, r, 1)
|
local u1 = unit.create(f1, r, 1)
|
||||||
|
|
||||||
u1:add_item("money", 1000)
|
u1:add_item("money", 1000)
|
||||||
|
@ -692,9 +696,9 @@ end
|
||||||
function test_guard_resources()
|
function test_guard_resources()
|
||||||
-- this is not quite http://bugs.eressea.de/view.php?id=1756
|
-- this is not quite http://bugs.eressea.de/view.php?id=1756
|
||||||
local r = region.create(0,0, "mountain")
|
local r = region.create(0,0, "mountain")
|
||||||
local f1 = faction.create("noreply21@eressea.de", "human", "de")
|
local f1 = create_faction('human')
|
||||||
f1.age=20
|
f1.age=20
|
||||||
local f2 = faction.create("noreply22@eressea.de", "human", "de")
|
local f2 = create_faction('human')
|
||||||
f2.age=20
|
f2.age=20
|
||||||
local u1 = unit.create(f1, r, 1)
|
local u1 = unit.create(f1, r, 1)
|
||||||
u1:add_item("money", 100)
|
u1:add_item("money", 100)
|
||||||
|
@ -722,7 +726,7 @@ end
|
||||||
|
|
||||||
function test_hero_hero_transfer()
|
function test_hero_hero_transfer()
|
||||||
local r = region.create(0,0, "mountain")
|
local r = region.create(0,0, "mountain")
|
||||||
local f = faction.create("noreply23@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
f.age=20
|
f.age=20
|
||||||
local UFL_HERO = 128
|
local UFL_HERO = 128
|
||||||
|
|
||||||
|
@ -743,7 +747,7 @@ end
|
||||||
|
|
||||||
function test_hero_normal_transfer()
|
function test_hero_normal_transfer()
|
||||||
local r = region.create(0,0, "mountain")
|
local r = region.create(0,0, "mountain")
|
||||||
local f = faction.create("noreply24@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
f.age=20
|
f.age=20
|
||||||
local UFL_HERO = 128
|
local UFL_HERO = 128
|
||||||
|
|
||||||
|
@ -762,7 +766,7 @@ end
|
||||||
|
|
||||||
function test_expensive_skills_cost_money()
|
function test_expensive_skills_cost_money()
|
||||||
local r = region.create(0,0, "mountain")
|
local r = region.create(0,0, "mountain")
|
||||||
local f = faction.create("noreply25@eressea.de", "elf", "de")
|
local f = create_faction('elf')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
u:add_item("money", 10000)
|
u:add_item("money", 10000)
|
||||||
u:clear_orders()
|
u:clear_orders()
|
||||||
|
@ -775,7 +779,7 @@ end
|
||||||
|
|
||||||
function test_food_is_consumed()
|
function test_food_is_consumed()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply26@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
u:add_item("money", 100)
|
u:add_item("money", 100)
|
||||||
u:clear_orders()
|
u:clear_orders()
|
||||||
|
@ -787,7 +791,7 @@ end
|
||||||
|
|
||||||
function test_food_can_override()
|
function test_food_can_override()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply27@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
u:add_item("money", 100)
|
u:add_item("money", 100)
|
||||||
u:clear_orders()
|
u:clear_orders()
|
||||||
|
@ -799,7 +803,7 @@ end
|
||||||
|
|
||||||
function test_swim_and_survive()
|
function test_swim_and_survive()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply28@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
f.nam = "chaos"
|
f.nam = "chaos"
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
process_orders()
|
process_orders()
|
||||||
|
@ -813,7 +817,7 @@ end
|
||||||
|
|
||||||
function test_swim_and_die()
|
function test_swim_and_die()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply29@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
local uid = u.id
|
local uid = u.id
|
||||||
process_orders()
|
process_orders()
|
||||||
|
@ -828,7 +832,7 @@ function test_ride_with_horse()
|
||||||
region.create(1, 0, "plain")
|
region.create(1, 0, "plain")
|
||||||
region.create(2, 0, "plain")
|
region.create(2, 0, "plain")
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply30@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
u:add_item("horse", 1)
|
u:add_item("horse", 1)
|
||||||
local horse_cfg = config.get_resource("horse")
|
local horse_cfg = config.get_resource("horse")
|
||||||
|
@ -851,7 +855,7 @@ function test_ride_with_horses_and_cart()
|
||||||
region.create(1, 0, "plain")
|
region.create(1, 0, "plain")
|
||||||
region.create(2, 0, "plain")
|
region.create(2, 0, "plain")
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply31@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
local horse_cfg = config.get_resource("horse")
|
local horse_cfg = config.get_resource("horse")
|
||||||
local cart_cfg = config.get_resource("cart")
|
local cart_cfg = config.get_resource("cart")
|
||||||
|
@ -904,7 +908,7 @@ function test_walk_and_carry_the_cart()
|
||||||
region.create(1, 0, "plain")
|
region.create(1, 0, "plain")
|
||||||
local r = region.create(2, 0, "plain")
|
local r = region.create(2, 0, "plain")
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply32@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r, 10)
|
local u = unit.create(f, r, 10)
|
||||||
u:add_item("cart", 1)
|
u:add_item("cart", 1)
|
||||||
|
|
||||||
|
@ -925,7 +929,7 @@ end
|
||||||
|
|
||||||
function test_bug_1795_limit()
|
function test_bug_1795_limit()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u1 = one_unit(r,f)
|
local u1 = one_unit(r,f)
|
||||||
u1:add_item("money", 100000000)
|
u1:add_item("money", 100000000)
|
||||||
u1:add_order("REKRUTIEREN 9999")
|
u1:add_order("REKRUTIEREN 9999")
|
||||||
|
@ -940,7 +944,7 @@ end
|
||||||
|
|
||||||
function test_bug_1795_demons()
|
function test_bug_1795_demons()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply@eressea.de", "demon", "de")
|
local f = create_faction('demon')
|
||||||
local u1 = one_unit(r,f)
|
local u1 = one_unit(r,f)
|
||||||
r:set_resource("peasant", 2000)
|
r:set_resource("peasant", 2000)
|
||||||
local peasants = r:get_resource("peasant")
|
local peasants = r:get_resource("peasant")
|
||||||
|
@ -966,7 +970,7 @@ end
|
||||||
|
|
||||||
function test_parser()
|
function test_parser()
|
||||||
local r = region.create(0, 0, "mountain")
|
local r = region.create(0, 0, "mountain")
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
local filename = "orders.txt"
|
local filename = "orders.txt"
|
||||||
|
|
||||||
|
@ -991,7 +995,7 @@ end
|
||||||
|
|
||||||
function test_prefix()
|
function test_prefix()
|
||||||
local r0 = region.create(0, 0, "plain")
|
local r0 = region.create(0, 0, "plain")
|
||||||
local f1 = faction.create("noreply@eressea.de", "human", "de")
|
local f1 = create_faction('human')
|
||||||
local u1 = unit.create(f1, r0, 1)
|
local u1 = unit.create(f1, r0, 1)
|
||||||
|
|
||||||
set_order(u1, "PRAEFIX See")
|
set_order(u1, "PRAEFIX See")
|
||||||
|
@ -1018,7 +1022,7 @@ end
|
||||||
|
|
||||||
function test_recruit()
|
function test_recruit()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("noreply@eressea.de", "human", "de")
|
local f = create_faction('human')
|
||||||
local u = unit.create(f, r, 1)
|
local u = unit.create(f, r, 1)
|
||||||
|
|
||||||
u:add_item("money", 1000)
|
u:add_item("money", 1000)
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
require "lunit"
|
||||||
|
|
||||||
|
module("tests.e2.adamantium", package.seeall, lunit.testcase )
|
||||||
|
|
||||||
|
function setup()
|
||||||
|
eressea.free_game()
|
||||||
|
eressea.settings.set("nmr.timeout", "0")
|
||||||
|
eressea.settings.set("rules.food.flags", "4")
|
||||||
|
eressea.settings.set("rules.ship.storms", "0")
|
||||||
|
eressea.settings.set("rules.encounters", "0")
|
||||||
|
end
|
||||||
|
|
||||||
|
local function create_faction(race)
|
||||||
|
return faction.create(race .. '@eressea.de', race, "de")
|
||||||
|
end
|
||||||
|
|
||||||
|
local function _test_create_adamantium()
|
||||||
|
eressea.settings.set("rules.terraform.all", "1")
|
||||||
|
local r = region.create(0,0, "mountain")
|
||||||
|
local f1 = create_faction('human')
|
||||||
|
local u1 = unit.create(f1, r, 1)
|
||||||
|
r:set_resource("adamantium", 50)
|
||||||
|
assert_equal(50, r:get_resource("adamantium"))
|
||||||
|
return r, u1
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_adamantium1()
|
||||||
|
local r, u1 = _test_create_adamantium()
|
||||||
|
|
||||||
|
u1:add_item("money", 1000)
|
||||||
|
u1:set_skill("mining", 14)
|
||||||
|
u1:clear_orders()
|
||||||
|
u1:add_order("MACHEN Adamantium")
|
||||||
|
|
||||||
|
process_orders()
|
||||||
|
assert_equal(0, u1:get_item("adamantium"))
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_adamantium2()
|
||||||
|
local r, u1 = _test_create_adamantium()
|
||||||
|
|
||||||
|
u1:add_item("money", 1000)
|
||||||
|
u1:set_skill("mining", 15)
|
||||||
|
u1:clear_orders()
|
||||||
|
u1:add_order("MACHEN Adamantium")
|
||||||
|
|
||||||
|
local b = building.create(r, "mine")
|
||||||
|
b.size = 10
|
||||||
|
u1.building = b
|
||||||
|
local adamantium = r:get_resource("adamantium")
|
||||||
|
|
||||||
|
process_orders()
|
||||||
|
assert_equal(2, u1:get_item("adamantium"))
|
||||||
|
assert_equal(adamantium - 2, r:get_resource("adamantium"))
|
||||||
|
end
|
||||||
|
|
|
@ -39,6 +39,29 @@ function test_herbalism()
|
||||||
assert_equal(98, r:get_resource("seed"))
|
assert_equal(98, r:get_resource("seed"))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function test_dwarf_bonus()
|
||||||
|
local r = region.create(0, 0, "mountain")
|
||||||
|
r:set_resource("iron", 100)
|
||||||
|
local level = r:get_resourcelevel("iron")
|
||||||
|
assert_equal(1, level)
|
||||||
|
local u = unit.create(faction.create('test@example.com', "dwarf"), r)
|
||||||
|
assert_equal("dwarf", u.faction.race)
|
||||||
|
assert_equal("dwarf", u.race)
|
||||||
|
u.faction.name = "Zwerge"
|
||||||
|
u.number = 10
|
||||||
|
u:set_skill("mining", 1)
|
||||||
|
u:add_order("MACHE EISEN")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(30, u:get_item("iron"))
|
||||||
|
assert_equal(82, r:get_resource("iron"))
|
||||||
|
u.building = building.create(r, "mine")
|
||||||
|
u.building.size = 10
|
||||||
|
u:add_item("money", 500) -- maintenance
|
||||||
|
process_orders()
|
||||||
|
assert_equal(70, u:get_item("iron"))
|
||||||
|
assert_equal(70, r:get_resource("iron"))
|
||||||
|
end
|
||||||
|
|
||||||
function test_build_harbour()
|
function test_build_harbour()
|
||||||
-- try to reproduce mantis bug 2221
|
-- try to reproduce mantis bug 2221
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
require 'tests.e2.adamantium'
|
||||||
require 'tests.e2.undead'
|
require 'tests.e2.undead'
|
||||||
require 'tests.e2.shiplanding'
|
require 'tests.e2.shiplanding'
|
||||||
require 'tests.e2.e2features'
|
require 'tests.e2.e2features'
|
||||||
|
|
|
@ -0,0 +1,115 @@
|
||||||
|
require "lunit"
|
||||||
|
|
||||||
|
module("tests.e2.items", package.seeall, lunit.testcase )
|
||||||
|
|
||||||
|
function setup()
|
||||||
|
eressea.free_game()
|
||||||
|
eressea.settings.set("nmr.timeout", "0")
|
||||||
|
eressea.settings.set("rules.food.flags", "4")
|
||||||
|
eressea.settings.set("rules.ship.storms", "0")
|
||||||
|
eressea.settings.set("rules.encounters", "0")
|
||||||
|
eressea.settings.set("magic.regeneration.enable", "0")
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_meow()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u:add_item("aoc", 1)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Katzenamulett")
|
||||||
|
turn_begin()
|
||||||
|
turn_process()
|
||||||
|
assert_equal(1, u:get_item("aoc"))
|
||||||
|
assert_equal(1, r:count_msg_type('meow'))
|
||||||
|
turn_end()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_aurapotion50()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u:add_item("aurapotion50", 1)
|
||||||
|
u:set_skill('magic', 10);
|
||||||
|
u.magic = 'gwyrrd'
|
||||||
|
u.aura = 0
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Auratrank")
|
||||||
|
turn_begin()
|
||||||
|
turn_process()
|
||||||
|
assert_equal(0, u:get_item("aurapotion50"))
|
||||||
|
assert_equal(1, f:count_msg_type('aurapotion50'))
|
||||||
|
assert_equal(50, u.aura)
|
||||||
|
turn_end()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_bagpipe()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u:add_item("bagpipeoffear", 1)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Dudelsack")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(1, u:get_item("bagpipeoffear"))
|
||||||
|
assert_equal(1, f:count_msg_type('bagpipeoffear_faction'))
|
||||||
|
assert_equal(1, r:count_msg_type('bagpipeoffear_region'))
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_speedsail()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u.ship = ship.create(r, "boat")
|
||||||
|
u:add_item("speedsail", 2)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Sonnensegel")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(1, u:get_item("speedsail"))
|
||||||
|
assert_equal(1, f:count_msg_type('use_speedsail'))
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_foolpotion()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
turn_begin()
|
||||||
|
u:add_item("p7", 1)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Dumpfbackenbrot 4242")
|
||||||
|
turn_process()
|
||||||
|
assert_equal(1, u:get_item("p7"))
|
||||||
|
assert_equal(1, f:count_msg_type('feedback_unit_not_found'))
|
||||||
|
local u2 = unit.create(f, r, 1)
|
||||||
|
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Dumpfbackenbrot " .. itoa36(u2.id))
|
||||||
|
turn_process()
|
||||||
|
assert_equal(1, u:get_item("p7"))
|
||||||
|
assert_equal(1, f:count_msg_type('error64'))
|
||||||
|
|
||||||
|
u:set_skill("stealth", 1);
|
||||||
|
turn_process()
|
||||||
|
assert_equal(0, u:get_item("p7"))
|
||||||
|
assert_equal(1, f:count_msg_type('givedumb'))
|
||||||
|
turn_end()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_snowman()
|
||||||
|
local r = region.create(0, 0, "glacier")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u:add_item("snowman", 1)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Schneemann")
|
||||||
|
process_orders()
|
||||||
|
for u2 in r.units do
|
||||||
|
if u2.id~=u.id then
|
||||||
|
assert_equal("snowman", u2.race)
|
||||||
|
assert_equal(1000, u2.hp)
|
||||||
|
u = nil
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assert_equal(nil, u)
|
||||||
|
end
|
|
@ -1,3 +1,4 @@
|
||||||
|
require 'tests.e3.production'
|
||||||
require 'tests.e3.castles'
|
require 'tests.e3.castles'
|
||||||
require 'tests.e3.stealth'
|
require 'tests.e3.stealth'
|
||||||
require 'tests.e3.spells'
|
require 'tests.e3.spells'
|
||||||
|
|
|
@ -0,0 +1,179 @@
|
||||||
|
require "lunit"
|
||||||
|
|
||||||
|
module("tests.e3.production", package.seeall, lunit.testcase )
|
||||||
|
|
||||||
|
function setup()
|
||||||
|
eressea.game.reset()
|
||||||
|
eressea.settings.set("rules.food.flags", "4") -- food is free
|
||||||
|
eressea.settings.set("NewbieImmunity", "0")
|
||||||
|
end
|
||||||
|
|
||||||
|
local function create_faction(race)
|
||||||
|
return faction.create(race .. '@eressea.de', race, "de")
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_laen_needs_mine()
|
||||||
|
-- some resources require a building
|
||||||
|
-- i.e. you cannot create laen without a mine
|
||||||
|
local r = region.create(0, 0, "mountain")
|
||||||
|
local f = create_faction('human')
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
|
||||||
|
turn_begin()
|
||||||
|
r:set_resource('laen', 100)
|
||||||
|
u:add_order("MACHE Laen")
|
||||||
|
u:set_skill('mining', 7)
|
||||||
|
turn_process()
|
||||||
|
assert_equal(0, u:get_item('laen'))
|
||||||
|
assert_equal(100, r:get_resource('laen'))
|
||||||
|
assert_equal(1, f:count_msg_type("error104")) -- requires building
|
||||||
|
|
||||||
|
u.building = building.create(u.region, "mine")
|
||||||
|
u.building.working = true
|
||||||
|
u.building.size = 10
|
||||||
|
turn_process()
|
||||||
|
assert_equal(1, u:get_item('laen'))
|
||||||
|
assert_equal(99, r:get_resource('laen'))
|
||||||
|
|
||||||
|
turn_end()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_mine_laen_bonus()
|
||||||
|
-- some buildings grant a bonus on the production skill
|
||||||
|
-- i.e. a mine adds +1 to mining
|
||||||
|
local r = region.create(0, 0, 'mountain')
|
||||||
|
local f = create_faction('human')
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
|
||||||
|
turn_begin()
|
||||||
|
r:set_resource('laen', 100)
|
||||||
|
assert_equal(100, r:get_resource('laen'))
|
||||||
|
u:add_order("MACHE Laen")
|
||||||
|
u:set_skill('mining', 6)
|
||||||
|
u.building = building.create(u.region, "mine")
|
||||||
|
u.building.working = true
|
||||||
|
u.building.size = 10
|
||||||
|
u.number = 2
|
||||||
|
turn_process() -- T6 is not enough for laen
|
||||||
|
assert_equal(0, u:get_item('laen'))
|
||||||
|
assert_equal(100, r:get_resource('laen'))
|
||||||
|
assert_equal(1, f:count_msg_type("manufacture_skills"))
|
||||||
|
|
||||||
|
u:set_skill('mining', 13)
|
||||||
|
turn_process() -- T13 is enough, the +1 produces one extra Laen
|
||||||
|
assert_equal(4, u:get_item('laen')) -- FAIL (3)
|
||||||
|
assert_equal(96, r:get_resource('laen'))
|
||||||
|
|
||||||
|
turn_end()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_mine_iron_bonus()
|
||||||
|
-- some buildings grant a bonus on the production skill
|
||||||
|
-- i.e. a mine adds +1 to mining iron
|
||||||
|
--
|
||||||
|
local r = region.create(0, 0, 'mountain')
|
||||||
|
local f = create_faction('human')
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
|
||||||
|
turn_begin()
|
||||||
|
r:set_resource('iron', 100)
|
||||||
|
assert_equal(100, r:get_resource('iron'))
|
||||||
|
u:add_order("MACHE Eisen")
|
||||||
|
u:set_skill('mining', 1)
|
||||||
|
u.building = building.create(u.region, "mine")
|
||||||
|
u.building.working = false
|
||||||
|
u.building.size = 10
|
||||||
|
u.number = 2
|
||||||
|
turn_process() -- iron can be made without a working mine
|
||||||
|
assert_equal(2, u:get_item('iron'))
|
||||||
|
assert_equal(98, r:get_resource('iron'))
|
||||||
|
|
||||||
|
u.building.working = true
|
||||||
|
turn_process()
|
||||||
|
assert_equal(6, u:get_item('iron'))
|
||||||
|
assert_equal(96, r:get_resource('iron'))
|
||||||
|
|
||||||
|
turn_end()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_quarry_bonus()
|
||||||
|
-- a quarry grants +1 to quarrying, and saves 50% stone
|
||||||
|
--
|
||||||
|
local r = region.create(0, 0, 'mountain')
|
||||||
|
local f = create_faction('human')
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
|
||||||
|
turn_begin()
|
||||||
|
r:set_resource('stone', 100)
|
||||||
|
assert_equal(100, r:get_resource('stone'))
|
||||||
|
u:add_order("MACHE Stein")
|
||||||
|
u:set_skill('quarrying', 1)
|
||||||
|
u.number = 2
|
||||||
|
u.building = building.create(u.region, 'quarry')
|
||||||
|
u.building.working = false
|
||||||
|
u.building.size = 10
|
||||||
|
turn_process()
|
||||||
|
assert_equal(2, u:get_item('stone'))
|
||||||
|
assert_equal(98, r:get_resource('stone'))
|
||||||
|
|
||||||
|
u.building.working = true
|
||||||
|
turn_process()
|
||||||
|
assert_equal(6, u:get_item('stone'))
|
||||||
|
assert_equal(96, r:get_resource('stone'))
|
||||||
|
|
||||||
|
turn_end()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_smithy_bonus_iron()
|
||||||
|
-- a smithy adds +1 to weaponsmithing, and saves 50% iron
|
||||||
|
local r = region.create(0, 0, 'mountain')
|
||||||
|
local f = create_faction('human')
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
|
||||||
|
turn_begin()
|
||||||
|
u.building = building.create(u.region, 'smithy')
|
||||||
|
u.building.working = false
|
||||||
|
u.building.size = 10
|
||||||
|
u:set_skill('weaponsmithing', 5) -- needs 3
|
||||||
|
u:add_item('iron', 100)
|
||||||
|
u:add_order("MACHE Schwert")
|
||||||
|
turn_process() -- building disabled
|
||||||
|
assert_equal(1, u:get_item('sword'))
|
||||||
|
assert_equal(99, u:get_item('iron'))
|
||||||
|
|
||||||
|
u.building.working = true
|
||||||
|
turn_process() -- building active
|
||||||
|
assert_equal(3, u:get_item('sword'))
|
||||||
|
assert_equal(98, u:get_item('iron'))
|
||||||
|
|
||||||
|
turn_end()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_smithy_bonus_mixed()
|
||||||
|
-- a smithy adds +1 to weaponsmithing, and saves 50% iron
|
||||||
|
-- it does not save any other resource, though.
|
||||||
|
local r = region.create(0, 0, 'mountain')
|
||||||
|
local f = create_faction('human')
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
|
||||||
|
turn_begin()
|
||||||
|
u.building = building.create(u.region, 'smithy')
|
||||||
|
u.building.working = false
|
||||||
|
u.building.size = 10
|
||||||
|
u:set_skill('weaponsmithing', 5) -- needs 3
|
||||||
|
u:add_item('iron', 100)
|
||||||
|
u:add_item('log', 100)
|
||||||
|
u:add_order("MACHE Kriegsaxt")
|
||||||
|
turn_process() -- building disabled
|
||||||
|
assert_equal(1, u:get_item('axe'))
|
||||||
|
assert_equal(99, u:get_item('iron'))
|
||||||
|
assert_equal(99, u:get_item('log'))
|
||||||
|
|
||||||
|
u.building.working = true
|
||||||
|
turn_process() -- building active
|
||||||
|
assert_equal(3, u:get_item('axe'))
|
||||||
|
assert_equal(98, u:get_item('iron'))
|
||||||
|
assert_equal(97, u:get_item('log'))
|
||||||
|
|
||||||
|
turn_end()
|
||||||
|
end
|
|
@ -11,6 +11,46 @@ function setup()
|
||||||
eressea.settings.set("rules.encounters", "0")
|
eressea.settings.set("rules.encounters", "0")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function test_mine_bonus()
|
||||||
|
local r = region.create(0, 0, "mountain")
|
||||||
|
r:set_resource("iron", 100)
|
||||||
|
local level = r:get_resourcelevel("iron")
|
||||||
|
assert_equal(1, level)
|
||||||
|
local u = unit.create(faction.create("human"), r)
|
||||||
|
u.number = 10
|
||||||
|
u:set_skill("mining", 1)
|
||||||
|
u:add_order("MACHE EISEN")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(10, u:get_item("iron"))
|
||||||
|
assert_equal(90, r:get_resource("iron"))
|
||||||
|
|
||||||
|
u.building = building.create(r, "mine")
|
||||||
|
u.building.size = 10
|
||||||
|
u:add_item("money", 500) -- maintenance
|
||||||
|
process_orders()
|
||||||
|
assert_equal(30, u:get_item("iron"))
|
||||||
|
assert_equal(80, r:get_resource("iron"))
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_smithy_bonus()
|
||||||
|
local r = region.create(0, 0, "mountain")
|
||||||
|
local u = unit.create(faction.create("human"), r)
|
||||||
|
u:set_skill("weaponsmithing", 5)
|
||||||
|
u:add_item("iron", 20)
|
||||||
|
u:add_order("MACHE SCHWERT")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(1, u:get_item('sword'))
|
||||||
|
assert_equal(19, u:get_item('iron'))
|
||||||
|
|
||||||
|
u.building = building.create(r, "smithy")
|
||||||
|
u.building.size = 10
|
||||||
|
u:add_item("money", 300) -- maintenance
|
||||||
|
u:add_item("log", 1) -- maintenance
|
||||||
|
process_orders()
|
||||||
|
assert_equal(3, u:get_item('sword'))
|
||||||
|
assert_equal(18, u:get_item('iron'))
|
||||||
|
end
|
||||||
|
|
||||||
function test_no_guards()
|
function test_no_guards()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
r:set_resource("tree", 100)
|
r:set_resource("tree", 100)
|
||||||
|
|
|
@ -0,0 +1,140 @@
|
||||||
|
require "lunit"
|
||||||
|
|
||||||
|
module("tests.items", package.seeall, lunit.testcase )
|
||||||
|
|
||||||
|
function setup()
|
||||||
|
eressea.free_game()
|
||||||
|
eressea.settings.set("nmr.timeout", "0")
|
||||||
|
eressea.settings.set("rules.food.flags", "4")
|
||||||
|
eressea.settings.set("rules.ship.storms", "0")
|
||||||
|
eressea.settings.set("rules.encounters", "0")
|
||||||
|
eressea.settings.set("magic.regeneration.enable", "0")
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_mistletoe()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u:add_item('mistletoe', 2)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Mistelzweig")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(1, u:get_item('mistletoe'))
|
||||||
|
assert_equal(1, f:count_msg_type('use_item'))
|
||||||
|
u.number = 2
|
||||||
|
process_orders()
|
||||||
|
assert_equal(1, u:get_item('mistletoe'))
|
||||||
|
assert_equal(1, f:count_msg_type('use_singleperson'))
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_dreameye()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u:add_item("dreameye", 2)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Traumauge")
|
||||||
|
assert_false(u:is_cursed('skillmod'))
|
||||||
|
turn_begin()
|
||||||
|
turn_process()
|
||||||
|
assert_true(u:is_cursed('skillmod'))
|
||||||
|
assert_equal(1, u:get_item("dreameye"))
|
||||||
|
assert_equal(1, f:count_msg_type('use_tacticcrystal'))
|
||||||
|
turn_end()
|
||||||
|
assert_false(u:is_cursed('skillmod'))
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_manacrystal()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u:add_item("manacrystal", 2)
|
||||||
|
u:clear_orders()
|
||||||
|
u.magic = "gwyrrd"
|
||||||
|
u:set_skill('magic', 1)
|
||||||
|
u.aura = 0
|
||||||
|
u:add_order("BENUTZEN 1 Astralkristall")
|
||||||
|
turn_begin()
|
||||||
|
turn_process()
|
||||||
|
assert_equal(1, u:get_item("manacrystal"))
|
||||||
|
assert_equal(25, u.aura)
|
||||||
|
assert_equal(1, f:count_msg_type('manacrystal_use'))
|
||||||
|
turn_end()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_skillpotion()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u:add_item("skillpotion", 2)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Talenttrunk")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(1, u:get_item("skillpotion"))
|
||||||
|
assert_equal(1, f:count_msg_type('skillpotion_use'))
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_studypotion()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u:add_item("studypotion", 2)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("LERNE Unterhaltung")
|
||||||
|
u:add_order("BENUTZEN 1 Lerntrank")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(1, u:get_item("studypotion"))
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_antimagic()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u:add_item("antimagic", 2)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Antimagiekristall")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(1, r:count_msg_type('use_antimagiccrystal'))
|
||||||
|
assert_equal(1, u:get_item("antimagic"))
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_ointment()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
local hp = u.hp
|
||||||
|
u.hp = 1
|
||||||
|
u:add_item("ointment", 1)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Wundsalbe")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(0, u:get_item("ointment"))
|
||||||
|
assert_equal(1, f:count_msg_type('usepotion'))
|
||||||
|
assert_equal(hp, u.hp)
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_bloodpotion_demon()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "demon", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u:add_item("peasantblood", 1)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Bauernblut")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(0, u:get_item("peasantblood"))
|
||||||
|
assert_equal(1, f:count_msg_type('usepotion'))
|
||||||
|
assert_equal("demon", u.race)
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_bloodpotion_other()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f = faction.create("noreply@eressea.de", "human", "de")
|
||||||
|
local u = unit.create(f, r, 1)
|
||||||
|
u:add_item("peasantblood", 1)
|
||||||
|
u:clear_orders()
|
||||||
|
u:add_order("BENUTZEN 1 Bauernblut")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(0, u:get_item("peasantblood"))
|
||||||
|
assert_equal(1, f:count_msg_type('usepotion'))
|
||||||
|
assert_equal("smurf", u.race)
|
||||||
|
end
|
|
@ -330,7 +330,7 @@ static int tolua_region_get_resourcelevel(lua_State * L)
|
||||||
if (rtype != NULL) {
|
if (rtype != NULL) {
|
||||||
const rawmaterial *rm;
|
const rawmaterial *rm;
|
||||||
for (rm = r->resources; rm; rm = rm->next) {
|
for (rm = r->resources; rm; rm = rm->next) {
|
||||||
if (rm->type->rtype == rtype) {
|
if (rm->rtype == rtype) {
|
||||||
lua_pushinteger(L, rm->level);
|
lua_pushinteger(L, rm->level);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@ without prior permission by the authors of Eressea.
|
||||||
/* kernel includes */
|
/* kernel includes */
|
||||||
#include <kernel/building.h>
|
#include <kernel/building.h>
|
||||||
#include <kernel/config.h>
|
#include <kernel/config.h>
|
||||||
|
#include <kernel/curse.h>
|
||||||
#include <kernel/faction.h>
|
#include <kernel/faction.h>
|
||||||
#include <kernel/group.h>
|
#include <kernel/group.h>
|
||||||
#include <kernel/item.h>
|
#include <kernel/item.h>
|
||||||
|
@ -770,6 +771,21 @@ static int tolua_unit_get_orders(lua_State * L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int tolua_unit_is_cursed(lua_State *L) {
|
||||||
|
unit *self = (unit *)tolua_tousertype(L, 1, 0);
|
||||||
|
const char *name = tolua_tostring(L, 2, 0);
|
||||||
|
lua_pushboolean(L, self->attribs && curse_active(get_curse(self->attribs, ct_find(name))));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tolua_unit_has_attrib(lua_State *L) {
|
||||||
|
unit *self = (unit *)tolua_tousertype(L, 1, 0);
|
||||||
|
const char *name = tolua_tostring(L, 2, 0);
|
||||||
|
attrib * a = a_find(self->attribs, at_find(name));
|
||||||
|
lua_pushboolean(L, a != NULL);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int tolua_unit_get_flag(lua_State * L)
|
static int tolua_unit_get_flag(lua_State * L)
|
||||||
{
|
{
|
||||||
unit *self = (unit *)tolua_tousertype(L, 1, 0);
|
unit *self = (unit *)tolua_tousertype(L, 1, 0);
|
||||||
|
@ -956,6 +972,9 @@ void tolua_unit_open(lua_State * L)
|
||||||
tolua_function(L, TOLUA_CAST "clear_orders", &tolua_unit_clear_orders);
|
tolua_function(L, TOLUA_CAST "clear_orders", &tolua_unit_clear_orders);
|
||||||
tolua_variable(L, TOLUA_CAST "orders", &tolua_unit_get_orders, 0);
|
tolua_variable(L, TOLUA_CAST "orders", &tolua_unit_get_orders, 0);
|
||||||
|
|
||||||
|
tolua_function(L, TOLUA_CAST "is_cursed", &tolua_unit_is_cursed);
|
||||||
|
tolua_function(L, TOLUA_CAST "has_attrib", &tolua_unit_has_attrib);
|
||||||
|
|
||||||
/* key-attributes for named flags: */
|
/* key-attributes for named flags: */
|
||||||
tolua_function(L, TOLUA_CAST "set_flag", &tolua_unit_set_flag);
|
tolua_function(L, TOLUA_CAST "set_flag", &tolua_unit_set_flag);
|
||||||
tolua_function(L, TOLUA_CAST "get_flag", &tolua_unit_get_flag);
|
tolua_function(L, TOLUA_CAST "get_flag", &tolua_unit_get_flag);
|
||||||
|
|
|
@ -480,44 +480,30 @@ static int tolua_write_reports(lua_State * L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reset_game(void)
|
|
||||||
{
|
|
||||||
region *r;
|
|
||||||
faction *f;
|
|
||||||
for (r = regions; r; r = r->next) {
|
|
||||||
unit *u;
|
|
||||||
building *b;
|
|
||||||
r->flags &= RF_SAVEMASK;
|
|
||||||
for (u = r->units; u; u = u->next) {
|
|
||||||
u->flags &= UFL_SAVEMASK;
|
|
||||||
}
|
|
||||||
for (b = r->buildings; b; b = b->next) {
|
|
||||||
b->flags &= BLD_SAVEMASK;
|
|
||||||
}
|
|
||||||
if (r->land && r->land->ownership && r->land->ownership->owner) {
|
|
||||||
faction *owner = r->land->ownership->owner;
|
|
||||||
if (owner == get_monsters()) {
|
|
||||||
/* some compat-fix, i believe. */
|
|
||||||
owner = update_owners(r);
|
|
||||||
}
|
|
||||||
if (owner) {
|
|
||||||
fset(r, RF_GUARDED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (f = factions; f; f = f->next) {
|
|
||||||
f->flags &= FFL_SAVEMASK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int tolua_process_orders(lua_State * L)
|
static int tolua_process_orders(lua_State * L)
|
||||||
{
|
{
|
||||||
++turn;
|
|
||||||
reset_game();
|
|
||||||
processorders();
|
processorders();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int tolua_turn_begin(lua_State * L)
|
||||||
|
{
|
||||||
|
turn_begin();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tolua_turn_process(lua_State * L)
|
||||||
|
{
|
||||||
|
turn_process();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tolua_turn_end(lua_State * L)
|
||||||
|
{
|
||||||
|
turn_end();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int tolua_write_passwords(lua_State * L)
|
static int tolua_write_passwords(lua_State * L)
|
||||||
{
|
{
|
||||||
int result = writepasswd();
|
int result = writepasswd();
|
||||||
|
@ -1063,6 +1049,9 @@ int tolua_bindings_open(lua_State * L, const dictionary *inifile)
|
||||||
tolua_function(L, TOLUA_CAST "factions", tolua_get_factions);
|
tolua_function(L, TOLUA_CAST "factions", tolua_get_factions);
|
||||||
tolua_function(L, TOLUA_CAST "regions", tolua_get_regions);
|
tolua_function(L, TOLUA_CAST "regions", tolua_get_regions);
|
||||||
tolua_function(L, TOLUA_CAST "read_turn", tolua_read_turn);
|
tolua_function(L, TOLUA_CAST "read_turn", tolua_read_turn);
|
||||||
|
tolua_function(L, TOLUA_CAST "turn_begin", tolua_turn_begin);
|
||||||
|
tolua_function(L, TOLUA_CAST "turn_process", tolua_turn_process);
|
||||||
|
tolua_function(L, TOLUA_CAST "turn_end", tolua_turn_end);
|
||||||
tolua_function(L, TOLUA_CAST "process_orders", tolua_process_orders);
|
tolua_function(L, TOLUA_CAST "process_orders", tolua_process_orders);
|
||||||
tolua_function(L, TOLUA_CAST "init_reports", tolua_init_reports);
|
tolua_function(L, TOLUA_CAST "init_reports", tolua_init_reports);
|
||||||
tolua_function(L, TOLUA_CAST "write_reports", tolua_write_reports);
|
tolua_function(L, TOLUA_CAST "write_reports", tolua_write_reports);
|
||||||
|
|
|
@ -1091,7 +1091,7 @@ leveled_allocation(const resource_type * rtype, region * r, allocation * alist)
|
||||||
avail = MIN(avail, nreq);
|
avail = MIN(avail, nreq);
|
||||||
if (need > 0) {
|
if (need > 0) {
|
||||||
int use = 0;
|
int use = 0;
|
||||||
for (al = alist; al; al = al->next)
|
for (al = alist; al; al = al->next) {
|
||||||
if (!fval(al, AFL_DONE)) {
|
if (!fval(al, AFL_DONE)) {
|
||||||
if (avail > 0) {
|
if (avail > 0) {
|
||||||
int want = required(al->want - al->get, al->save);
|
int want = required(al->want - al->get, al->save);
|
||||||
|
@ -1106,9 +1106,13 @@ leveled_allocation(const resource_type * rtype, region * r, allocation * alist)
|
||||||
al->get = MIN(al->want, al->get + x * al->save.sa[1] / al->save.sa[0]);
|
al->get = MIN(al->want, al->get + x * al->save.sa[1] / al->save.sa[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (use) {
|
if (use) {
|
||||||
assert(use <= rm->amount);
|
rawmaterial_type *raw = rmt_get(rm->rtype);
|
||||||
rm->type->use(rm, r, use);
|
if (raw && raw->use) {
|
||||||
|
assert(use <= rm->amount);
|
||||||
|
raw->use(rm, r, use);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
assert(avail == 0 || nreq == 0);
|
assert(avail == 0 || nreq == 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -382,13 +382,13 @@ static void test_make_item(CuTest *tc) {
|
||||||
rmt_create(rtype);
|
rmt_create(rtype);
|
||||||
rdata = rtype->limit = calloc(1, sizeof(resource_limit));
|
rdata = rtype->limit = calloc(1, sizeof(resource_limit));
|
||||||
add_resource(u->region, 1, 300, 150, rtype);
|
add_resource(u->region, 1, 300, 150, rtype);
|
||||||
u->region->resources->amount = 300; /* there are 300 stones at level 1 */
|
CuAssertIntEquals(tc, 300, region_getresource(u->region, rtype));
|
||||||
set_level(u, SK_ALCHEMY, 10);
|
set_level(u, SK_ALCHEMY, 10);
|
||||||
|
|
||||||
make_item(u, itype, 10);
|
make_item(u, itype, 10);
|
||||||
split_allocations(u->region);
|
split_allocations(u->region);
|
||||||
CuAssertIntEquals(tc, 11, get_item(u, itype));
|
CuAssertIntEquals(tc, 11, get_item(u, itype));
|
||||||
CuAssertIntEquals(tc, 290, u->region->resources->amount); /* used 10 stones to make 10 stones */
|
CuAssertIntEquals(tc, 290, region_getresource(u->region, rtype)); /* used 10 stones to make 10 stones */
|
||||||
|
|
||||||
rdata->modifiers = calloc(2, sizeof(resource_mod));
|
rdata->modifiers = calloc(2, sizeof(resource_mod));
|
||||||
rdata->modifiers[0].flags = RMF_SAVEMATERIAL;
|
rdata->modifiers[0].flags = RMF_SAVEMATERIAL;
|
||||||
|
@ -398,18 +398,18 @@ static void test_make_item(CuTest *tc) {
|
||||||
make_item(u, itype, 10);
|
make_item(u, itype, 10);
|
||||||
split_allocations(u->region);
|
split_allocations(u->region);
|
||||||
CuAssertIntEquals(tc, 21, get_item(u, itype));
|
CuAssertIntEquals(tc, 21, get_item(u, itype));
|
||||||
CuAssertIntEquals(tc, 284, u->region->resources->amount); /* 60% saving = 6 stones make 10 stones */
|
CuAssertIntEquals(tc, 284, region_getresource(u->region, rtype)); /* 60% saving = 6 stones make 10 stones */
|
||||||
|
|
||||||
make_item(u, itype, 1);
|
make_item(u, itype, 1);
|
||||||
split_allocations(u->region);
|
split_allocations(u->region);
|
||||||
CuAssertIntEquals(tc, 22, get_item(u, itype));
|
CuAssertIntEquals(tc, 22, get_item(u, itype));
|
||||||
CuAssertIntEquals(tc, 283, u->region->resources->amount); /* no free lunches */
|
CuAssertIntEquals(tc, 283, region_getresource(u->region, rtype)); /* no free lunches */
|
||||||
|
|
||||||
rdata->modifiers[0].value = frac_make(1, 2);
|
rdata->modifiers[0].value = frac_make(1, 2);
|
||||||
make_item(u, itype, 6);
|
make_item(u, itype, 6);
|
||||||
split_allocations(u->region);
|
split_allocations(u->region);
|
||||||
CuAssertIntEquals(tc, 28, get_item(u, itype));
|
CuAssertIntEquals(tc, 28, get_item(u, itype));
|
||||||
CuAssertIntEquals(tc, 280, u->region->resources->amount); /* 50% saving = 3 stones make 6 stones */
|
CuAssertIntEquals(tc, 280, region_getresource(u->region, rtype)); /* 50% saving = 3 stones make 6 stones */
|
||||||
|
|
||||||
rdata->modifiers[0].flags = RMF_REQUIREDBUILDING;
|
rdata->modifiers[0].flags = RMF_REQUIREDBUILDING;
|
||||||
rdata->modifiers[0].race = NULL;
|
rdata->modifiers[0].race = NULL;
|
||||||
|
|
|
@ -823,7 +823,7 @@ void region_setresource(region * r, const resource_type * rtype, int value)
|
||||||
{
|
{
|
||||||
rawmaterial *rm = r->resources;
|
rawmaterial *rm = r->resources;
|
||||||
while (rm) {
|
while (rm) {
|
||||||
if (rm->type->rtype == rtype) {
|
if (rm->rtype == rtype) {
|
||||||
rm->amount = value;
|
rm->amount = value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -837,14 +837,27 @@ void region_setresource(region * r, const resource_type * rtype, int value)
|
||||||
else if (rtype == get_resourcetype(R_HORSE))
|
else if (rtype == get_resourcetype(R_HORSE))
|
||||||
rsethorses(r, value);
|
rsethorses(r, value);
|
||||||
else {
|
else {
|
||||||
int i;
|
rawmaterial *rm;
|
||||||
for (i = 0; r->terrain->production[i].type; ++i) {
|
if (r->terrain->production) {
|
||||||
const terrain_production *production = r->terrain->production + i;
|
int i;
|
||||||
if (production->type == rtype) {
|
for (i = 0; r->terrain->production[i].type; ++i) {
|
||||||
add_resource(r, 1, value, dice_rand(production->divisor), rtype);
|
const terrain_production *production = r->terrain->production + i;
|
||||||
break;
|
if (production->type == rtype) {
|
||||||
|
add_resource(r, 1, value, dice_rand(production->divisor), rtype);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* adamantium etc are not usually terraformed: */
|
||||||
|
for (rm = r->resources; rm; rm = rm->next) {
|
||||||
|
if (rm->rtype == rtype) {
|
||||||
|
rm->amount = value;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!rm) {
|
||||||
|
add_resource(r, 1, value, 150, rtype);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -853,7 +866,7 @@ int region_getresource(const region * r, const resource_type * rtype)
|
||||||
{
|
{
|
||||||
const rawmaterial *rm;
|
const rawmaterial *rm;
|
||||||
for (rm = r->resources; rm; rm = rm->next) {
|
for (rm = r->resources; rm; rm = rm->next) {
|
||||||
if (rm->type->rtype == rtype) {
|
if (rm->rtype == rtype) {
|
||||||
return rm->amount;
|
return rm->amount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1044,8 +1057,8 @@ void terraform_region(region * r, const terrain_type * terrain)
|
||||||
if (terrain->production != NULL) {
|
if (terrain->production != NULL) {
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; terrain->production[i].type; ++i) {
|
for (i = 0; terrain->production[i].type; ++i) {
|
||||||
if (rm->type->rtype == terrain->production[i].type) {
|
if (rm->rtype == terrain->production[i].type) {
|
||||||
rtype = rm->type->rtype;
|
rtype = rm->rtype;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include <platform.h>
|
#include <platform.h>
|
||||||
|
|
||||||
#include "region.h"
|
#include "region.h"
|
||||||
|
#include "resources.h"
|
||||||
#include "building.h"
|
#include "building.h"
|
||||||
#include "unit.h"
|
#include "unit.h"
|
||||||
#include "terrain.h"
|
#include "terrain.h"
|
||||||
|
@ -52,10 +53,36 @@ static void test_region_get_owner(CuTest *tc) {
|
||||||
test_cleanup();
|
test_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_region_getset_resource(CuTest *tc) {
|
||||||
|
region *r;
|
||||||
|
item_type *itype;
|
||||||
|
|
||||||
|
test_setup();
|
||||||
|
init_resources();
|
||||||
|
itype = test_create_itemtype("iron");
|
||||||
|
itype->construction = calloc(1, sizeof(construction));
|
||||||
|
rmt_create(itype->rtype);
|
||||||
|
r = test_create_region(0, 0, NULL);
|
||||||
|
|
||||||
|
region_setresource(r, itype->rtype, 50);
|
||||||
|
CuAssertIntEquals(tc, 50, region_getresource(r, itype->rtype));
|
||||||
|
|
||||||
|
region_setresource(r, get_resourcetype(R_HORSE), 10);
|
||||||
|
CuAssertIntEquals(tc, 10, region_getresource(r, get_resourcetype(R_HORSE)));
|
||||||
|
CuAssertIntEquals(tc, 10, rhorses(r));
|
||||||
|
|
||||||
|
region_setresource(r, get_resourcetype(R_PEASANT), 10);
|
||||||
|
CuAssertIntEquals(tc, 10, region_getresource(r, get_resourcetype(R_PEASANT)));
|
||||||
|
CuAssertIntEquals(tc, 10, rpeasants(r));
|
||||||
|
|
||||||
|
test_cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
CuSuite *get_region_suite(void)
|
CuSuite *get_region_suite(void)
|
||||||
{
|
{
|
||||||
CuSuite *suite = CuSuiteNew();
|
CuSuite *suite = CuSuiteNew();
|
||||||
SUITE_ADD_TEST(suite, test_terraform);
|
SUITE_ADD_TEST(suite, test_terraform);
|
||||||
|
SUITE_ADD_TEST(suite, test_region_getset_resource);
|
||||||
SUITE_ADD_TEST(suite, test_region_get_owner);
|
SUITE_ADD_TEST(suite, test_region_get_owner);
|
||||||
return suite;
|
return suite;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,8 +36,10 @@ void update_resources(region * r)
|
||||||
{
|
{
|
||||||
struct rawmaterial *res = r->resources;
|
struct rawmaterial *res = r->resources;
|
||||||
while (res) {
|
while (res) {
|
||||||
if (res->type->update)
|
struct rawmaterial_type *raw = rmt_get(res->rtype);
|
||||||
res->type->update(res, r);
|
if (raw && raw->update) {
|
||||||
|
raw->update(res, r);
|
||||||
|
}
|
||||||
res = res->next;
|
res = res->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,7 +57,7 @@ static void update_resource(struct rawmaterial *res, double modifier)
|
||||||
assert(res->amount > 0);
|
assert(res->amount > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
struct rawmaterial *
|
||||||
add_resource(region * r, int level, int base, int divisor,
|
add_resource(region * r, int level, int base, int divisor,
|
||||||
const resource_type * rtype)
|
const resource_type * rtype)
|
||||||
{
|
{
|
||||||
|
@ -66,11 +68,11 @@ const resource_type * rtype)
|
||||||
rm->level = level;
|
rm->level = level;
|
||||||
rm->startlevel = level;
|
rm->startlevel = level;
|
||||||
rm->base = base;
|
rm->base = base;
|
||||||
|
rm->amount = base;
|
||||||
rm->divisor = divisor;
|
rm->divisor = divisor;
|
||||||
rm->flags = 0;
|
rm->flags = 0;
|
||||||
rm->type = rmt_get(rtype);
|
rm->rtype = rtype;
|
||||||
update_resource(rm, 1.0);
|
return rm;
|
||||||
rm->type->terraform(rm, r);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void terraform_resources(region * r)
|
void terraform_resources(region * r)
|
||||||
|
@ -87,7 +89,7 @@ void terraform_resources(region * r)
|
||||||
const resource_type *rtype = production->type;
|
const resource_type *rtype = production->type;
|
||||||
|
|
||||||
for (rm = r->resources; rm; rm = rm->next) {
|
for (rm = r->resources; rm; rm = rm->next) {
|
||||||
if (rm->type->rtype == rtype)
|
if (rm->rtype == rtype)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (rm) {
|
if (rm) {
|
||||||
|
@ -95,9 +97,16 @@ void terraform_resources(region * r)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (terraform_all || chance(production->chance)) {
|
if (terraform_all || chance(production->chance)) {
|
||||||
add_resource(r, dice_rand(production->startlevel),
|
rawmaterial *rm;
|
||||||
|
rawmaterial_type *raw;
|
||||||
|
rm = add_resource(r, dice_rand(production->startlevel),
|
||||||
dice_rand(production->base), dice_rand(production->divisor),
|
dice_rand(production->base), dice_rand(production->divisor),
|
||||||
production->type);
|
production->type);
|
||||||
|
update_resource(rm, 1.0);
|
||||||
|
raw = rmt_get(rm->rtype);
|
||||||
|
if (raw && raw->terraform) {
|
||||||
|
raw->terraform(rm, r);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -142,7 +151,7 @@ static int visible_default(const rawmaterial * res, int skilllevel)
|
||||||
/* resources are visible, if skill equals minimum skill to mine them
|
/* resources are visible, if skill equals minimum skill to mine them
|
||||||
* plus current level of difficulty */
|
* plus current level of difficulty */
|
||||||
{
|
{
|
||||||
const struct item_type *itype = res->type->rtype->itype;
|
const struct item_type *itype = res->rtype->itype;
|
||||||
if (res->level <= 1
|
if (res->level <= 1
|
||||||
&& res->level + itype->construction->minskill <= skilllevel + 1) {
|
&& res->level + itype->construction->minskill <= skilllevel + 1) {
|
||||||
assert(res->amount > 0);
|
assert(res->amount > 0);
|
||||||
|
@ -166,7 +175,7 @@ static void use_default(rawmaterial * res, const region * r, int amount)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; r->terrain->production[i].type; ++i) {
|
for (i = 0; r->terrain->production[i].type; ++i) {
|
||||||
if (res->type->rtype == r->terrain->production[i].type)
|
if (res->rtype == r->terrain->production[i].type)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,8 +187,9 @@ static void use_default(rawmaterial * res, const region * r, int amount)
|
||||||
struct rawmaterial *rm_get(region * r, const struct resource_type *rtype)
|
struct rawmaterial *rm_get(region * r, const struct resource_type *rtype)
|
||||||
{
|
{
|
||||||
struct rawmaterial *rm = r->resources;
|
struct rawmaterial *rm = r->resources;
|
||||||
while (rm && rm->type->rtype != rtype)
|
while (rm && rm->rtype != rtype) {
|
||||||
rm = rm->next;
|
rm = rm->next;
|
||||||
|
}
|
||||||
return rm;
|
return rm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ extern "C" {
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct rawmaterial {
|
typedef struct rawmaterial {
|
||||||
const struct rawmaterial_type *type;
|
const struct resource_type *rtype;
|
||||||
#ifdef LOMEM
|
#ifdef LOMEM
|
||||||
int amount:16;
|
int amount:16;
|
||||||
int level:8;
|
int level:8;
|
||||||
|
@ -79,8 +79,8 @@ extern "C" {
|
||||||
struct rawmaterial_type *rmt_find(const char *str);
|
struct rawmaterial_type *rmt_find(const char *str);
|
||||||
struct rawmaterial_type *rmt_get(const struct resource_type *);
|
struct rawmaterial_type *rmt_get(const struct resource_type *);
|
||||||
|
|
||||||
void add_resource(struct region *r, int level, int base, int divisor,
|
struct rawmaterial *add_resource(struct region *r, int level,
|
||||||
const struct resource_type *rtype);
|
int base, int divisor, const struct resource_type *rtype);
|
||||||
struct rawmaterial_type *rmt_create(struct resource_type *rtype);
|
struct rawmaterial_type *rmt_create(struct resource_type *rtype);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -955,11 +955,14 @@ static region *readregion(struct gamedata *data, int x, int y)
|
||||||
if (strcmp(name, "end") == 0)
|
if (strcmp(name, "end") == 0)
|
||||||
break;
|
break;
|
||||||
res = malloc(sizeof(rawmaterial));
|
res = malloc(sizeof(rawmaterial));
|
||||||
res->type = rmt_find(name);
|
res->rtype = rt_find(name);
|
||||||
if (res->type == NULL) {
|
if (!res->rtype && strncmp("rm_", name, 3) == 0) {
|
||||||
|
res->rtype = rt_find(name + 3);
|
||||||
|
}
|
||||||
|
if (!res->rtype || !res->rtype->raw) {
|
||||||
log_error("invalid resourcetype %s in data.", name);
|
log_error("invalid resourcetype %s in data.", name);
|
||||||
}
|
}
|
||||||
assert(res->type != NULL);
|
assert(res->rtype);
|
||||||
READ_INT(data->store, &n);
|
READ_INT(data->store, &n);
|
||||||
res->level = n;
|
res->level = n;
|
||||||
READ_INT(data->store, &n);
|
READ_INT(data->store, &n);
|
||||||
|
@ -1068,7 +1071,7 @@ void writeregion(struct gamedata *data, const region * r)
|
||||||
WRITE_INT(data->store, rhorses(r));
|
WRITE_INT(data->store, rhorses(r));
|
||||||
|
|
||||||
while (res) {
|
while (res) {
|
||||||
WRITE_TOK(data->store, res->type->rtype->_name);
|
WRITE_TOK(data->store, res->rtype->_name);
|
||||||
WRITE_INT(data->store, res->level);
|
WRITE_INT(data->store, res->level);
|
||||||
WRITE_INT(data->store, res->amount);
|
WRITE_INT(data->store, res->amount);
|
||||||
WRITE_INT(data->store, res->startlevel);
|
WRITE_INT(data->store, res->startlevel);
|
||||||
|
|
49
src/laws.c
49
src/laws.c
|
@ -4194,16 +4194,54 @@ void init_processor(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void processorders(void)
|
static void reset_game(void)
|
||||||
|
{
|
||||||
|
region *r;
|
||||||
|
faction *f;
|
||||||
|
for (r = regions; r; r = r->next) {
|
||||||
|
unit *u;
|
||||||
|
building *b;
|
||||||
|
r->flags &= RF_SAVEMASK;
|
||||||
|
for (u = r->units; u; u = u->next) {
|
||||||
|
u->flags &= UFL_SAVEMASK;
|
||||||
|
}
|
||||||
|
for (b = r->buildings; b; b = b->next) {
|
||||||
|
b->flags &= BLD_SAVEMASK;
|
||||||
|
}
|
||||||
|
if (r->land && r->land->ownership && r->land->ownership->owner) {
|
||||||
|
faction *owner = r->land->ownership->owner;
|
||||||
|
if (owner == get_monsters()) {
|
||||||
|
/* some compat-fix, i believe. */
|
||||||
|
owner = update_owners(r);
|
||||||
|
}
|
||||||
|
if (owner) {
|
||||||
|
fset(r, RF_GUARDED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (f = factions; f; f = f->next) {
|
||||||
|
f->flags &= FFL_SAVEMASK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void turn_begin(void)
|
||||||
|
{
|
||||||
|
++turn;
|
||||||
|
reset_game();
|
||||||
|
}
|
||||||
|
|
||||||
|
void turn_process(void)
|
||||||
{
|
{
|
||||||
init_processor();
|
init_processor();
|
||||||
process();
|
process();
|
||||||
/*************************************************/
|
|
||||||
|
|
||||||
if (config_get_int("modules.markets", 0)) {
|
if (config_get_int("modules.markets", 0)) {
|
||||||
do_markets();
|
do_markets();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void turn_end(void)
|
||||||
|
{
|
||||||
log_info(" - Attribute altern");
|
log_info(" - Attribute altern");
|
||||||
ageing();
|
ageing();
|
||||||
remove_empty_units();
|
remove_empty_units();
|
||||||
|
@ -4218,6 +4256,13 @@ void processorders(void)
|
||||||
update_spells();
|
update_spells();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void processorders(void)
|
||||||
|
{
|
||||||
|
turn_begin();
|
||||||
|
turn_process();
|
||||||
|
turn_end();
|
||||||
|
}
|
||||||
|
|
||||||
void update_subscriptions(void)
|
void update_subscriptions(void)
|
||||||
{
|
{
|
||||||
FILE *F;
|
FILE *F;
|
||||||
|
|
|
@ -53,8 +53,10 @@ extern "C" {
|
||||||
int enter_building(struct unit *u, struct order *ord, int id, bool report);
|
int enter_building(struct unit *u, struct order *ord, int id, bool report);
|
||||||
int enter_ship(struct unit *u, struct order *ord, int id, bool report);
|
int enter_ship(struct unit *u, struct order *ord, int id, bool report);
|
||||||
|
|
||||||
/* eressea-specific. put somewhere else, please. */
|
|
||||||
void processorders(void);
|
void processorders(void);
|
||||||
|
void turn_begin(void);
|
||||||
|
void turn_process(void);
|
||||||
|
void turn_end(void);
|
||||||
|
|
||||||
void new_units(void);
|
void new_units(void);
|
||||||
void defaultorders(void);
|
void defaultorders(void);
|
||||||
|
|
|
@ -81,20 +81,6 @@ const terrain_type *random_terrain(const terrain_type * terrains[],
|
||||||
return terrain;
|
return terrain;
|
||||||
}
|
}
|
||||||
|
|
||||||
int seed_adamantium(region * r, int base)
|
|
||||||
{
|
|
||||||
const resource_type *rtype = rt_find("adamantium");
|
|
||||||
rawmaterial *rm;
|
|
||||||
for (rm = r->resources; rm; rm = rm->next) {
|
|
||||||
if (rm->type->rtype == rtype)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (!rm) {
|
|
||||||
add_resource(r, 1, base, 150, rtype);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int count_demand(const region * r)
|
static int count_demand(const region * r)
|
||||||
{
|
{
|
||||||
struct demand *dmd;
|
struct demand *dmd;
|
||||||
|
|
|
@ -95,8 +95,7 @@ static void test_report_region(CuTest *tc) {
|
||||||
|
|
||||||
mstream_init(&out);
|
mstream_init(&out);
|
||||||
r = test_create_region(0, 0, 0);
|
r = test_create_region(0, 0, 0);
|
||||||
add_resource(r, 1, 100, 10, rt_stone);
|
add_resource(r, 1, 135, 10, rt_stone);
|
||||||
r->resources->amount = 135;
|
|
||||||
CuAssertIntEquals(tc, 1, r->resources->level);
|
CuAssertIntEquals(tc, 1, r->resources->level);
|
||||||
r->land->peasants = 5;
|
r->land->peasants = 5;
|
||||||
r->land->horses = 7;
|
r->land->horses = 7;
|
||||||
|
|
|
@ -448,12 +448,13 @@ const faction * viewer, bool see_unit)
|
||||||
rawmaterial *res = r->resources;
|
rawmaterial *res = r->resources;
|
||||||
while (res) {
|
while (res) {
|
||||||
int maxskill = 0;
|
int maxskill = 0;
|
||||||
const item_type *itype = resource2item(res->type->rtype);
|
const item_type *itype = resource2item(res->rtype);
|
||||||
int minskill = itype->construction->minskill;
|
int minskill = itype->construction->minskill;
|
||||||
skill_t skill = itype->construction->skill;
|
skill_t skill = itype->construction->skill;
|
||||||
int level = res->level + minskill - 1;
|
int level = res->level + minskill - 1;
|
||||||
int visible = -1;
|
int visible = -1;
|
||||||
if (res->type->visible == NULL) {
|
rawmaterial_type *raw = rmt_get(res->rtype);
|
||||||
|
if (raw->visible == NULL) {
|
||||||
visible = res->amount;
|
visible = res->amount;
|
||||||
level = res->level + minskill - 1;
|
level = res->level + minskill - 1;
|
||||||
}
|
}
|
||||||
|
@ -464,7 +465,7 @@ const faction * viewer, bool see_unit)
|
||||||
int s = effskill(u, skill, 0);
|
int s = effskill(u, skill, 0);
|
||||||
if (s > maxskill) {
|
if (s > maxskill) {
|
||||||
maxskill = s;
|
maxskill = s;
|
||||||
visible = res->type->visible(res, maxskill);
|
visible = raw->visible(res, maxskill);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -472,7 +473,7 @@ const faction * viewer, bool see_unit)
|
||||||
if (level >= 0 && visible >= 0) {
|
if (level >= 0 && visible >= 0) {
|
||||||
if (n >= size)
|
if (n >= size)
|
||||||
return -1;
|
return -1;
|
||||||
report_resource(result + n, res->type->rtype, visible, level);
|
report_resource(result + n, res->rtype, visible, level);
|
||||||
n++;
|
n++;
|
||||||
}
|
}
|
||||||
res = res->next;
|
res = res->next;
|
||||||
|
|
|
@ -179,7 +179,17 @@ void at_register(attrib_type * at)
|
||||||
at_hash[at->hashkey % MAXATHASH] = at;
|
at_hash[at->hashkey % MAXATHASH] = at;
|
||||||
}
|
}
|
||||||
|
|
||||||
static attrib_type *at_find(unsigned int hk)
|
struct attrib_type *at_find(const char *name) {
|
||||||
|
attrib_type *find;
|
||||||
|
unsigned int hash = __at_hashkey(name);
|
||||||
|
find = at_hash[hash % MAXATHASH];
|
||||||
|
while (find && hash != find->hashkey) {
|
||||||
|
find = find->nexthash;
|
||||||
|
}
|
||||||
|
return find;
|
||||||
|
}
|
||||||
|
|
||||||
|
static attrib_type *at_find_key(unsigned int hk)
|
||||||
{
|
{
|
||||||
const char *translate[3][2] = {
|
const char *translate[3][2] = {
|
||||||
{ "zielregion", "targetregion" }, /* remapping: from 'zielregion, heute targetregion */
|
{ "zielregion", "targetregion" }, /* remapping: from 'zielregion, heute targetregion */
|
||||||
|
@ -193,7 +203,7 @@ static attrib_type *at_find(unsigned int hk)
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (translate[i][0]) {
|
while (translate[i][0]) {
|
||||||
if (__at_hashkey(translate[i][0]) == hk)
|
if (__at_hashkey(translate[i][0]) == hk)
|
||||||
return at_find(__at_hashkey(translate[i][1]));
|
return at_find_key(__at_hashkey(translate[i][1]));
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -408,7 +418,7 @@ void at_deprecate(const char * name, int(*reader)(attrib *, void *, struct gamed
|
||||||
static int a_read_i(gamedata *data, attrib ** attribs, void *owner, unsigned int key) {
|
static int a_read_i(gamedata *data, attrib ** attribs, void *owner, unsigned int key) {
|
||||||
int retval = AT_READ_OK;
|
int retval = AT_READ_OK;
|
||||||
int(*reader)(attrib *, void *, struct gamedata *) = 0;
|
int(*reader)(attrib *, void *, struct gamedata *) = 0;
|
||||||
attrib_type *at = at_find(key);
|
attrib_type *at = at_find_key(key);
|
||||||
attrib * na = 0;
|
attrib * na = 0;
|
||||||
|
|
||||||
if (at) {
|
if (at) {
|
||||||
|
|
|
@ -65,19 +65,19 @@ extern "C" {
|
||||||
unsigned int hashkey;
|
unsigned int hashkey;
|
||||||
} attrib_type;
|
} attrib_type;
|
||||||
|
|
||||||
extern void at_register(attrib_type * at);
|
void at_register(attrib_type * at);
|
||||||
extern void at_deprecate(const char * name, int(*reader)(attrib *, void *, struct gamedata *));
|
void at_deprecate(const char * name, int(*reader)(attrib *, void *, struct gamedata *));
|
||||||
|
struct attrib_type *at_find(const char *name);
|
||||||
|
|
||||||
void write_attribs(struct storage *store, struct attrib *alist, const void *owner);
|
void write_attribs(struct storage *store, struct attrib *alist, const void *owner);
|
||||||
int read_attribs(struct gamedata *store, struct attrib **alist, void *owner);
|
int read_attribs(struct gamedata *store, struct attrib **alist, void *owner);
|
||||||
|
|
||||||
extern attrib *a_select(attrib * a, const void *data,
|
attrib *a_select(attrib * a, const void *data, bool(*compare) (const attrib *, const void *));
|
||||||
bool(*compare) (const attrib *, const void *));
|
attrib *a_find(attrib * a, const attrib_type * at);
|
||||||
extern attrib *a_find(attrib * a, const attrib_type * at);
|
attrib *a_add(attrib ** pa, attrib * at);
|
||||||
extern attrib *a_add(attrib ** pa, attrib * at);
|
int a_remove(attrib ** pa, attrib * at);
|
||||||
extern int a_remove(attrib ** pa, attrib * at);
|
void a_removeall(attrib ** a, const attrib_type * at);
|
||||||
extern void a_removeall(attrib ** a, const attrib_type * at);
|
attrib *a_new(const attrib_type * at);
|
||||||
extern attrib *a_new(const attrib_type * at);
|
|
||||||
int a_age(attrib ** attribs, void *owner);
|
int a_age(attrib ** attribs, void *owner);
|
||||||
|
|
||||||
int a_read_orig(struct gamedata *data, attrib ** attribs, void *owner);
|
int a_read_orig(struct gamedata *data, attrib ** attribs, void *owner);
|
||||||
|
|
Loading…
Reference in New Issue