diff --git a/core/scripts/callbacks.lua b/core/scripts/callbacks.lua deleted file mode 100644 index 33d34e4b5..000000000 --- a/core/scripts/callbacks.lua +++ /dev/null @@ -1,11 +0,0 @@ -callbacks = {} - -callbacks["attrib_init"] = function(attr) - if attr.name ~= nil then - local init = callbacks["init_" .. attr.name] - if init ~=nil then - init(attr) - end - end -end - diff --git a/core/scripts/default.lua b/core/scripts/default.lua deleted file mode 100755 index 6d22b4f32..000000000 --- a/core/scripts/default.lua +++ /dev/null @@ -1,118 +0,0 @@ -function change_locales(localechange) - for loc, flist in pairs(localechange) do - for index, name in pairs(flist) do - f = get_faction(atoi36(name)) - if f ~= nil then - f.locale = loc - print("LOCALECHANGE ", f, loc) - end - end - end -end - -function dbupdate() - update_scores() - edb = db.open(config.basepath.."/eressea.db") - if edb~=nil then - edb:update_factions() - edb:update_scores() - else - print("could not open "..config.basepath.."/eressea.db") - end -end - -function nmr_check(maxnmrs) - local nmrs = get_nmrs(1) - if nmrs >= maxnmrs then - print("Shit. More than " .. maxnmrs .. " factions with 1 NMR (" .. nmrs .. ")") - write_summary() - eressea.write_game("aborted.dat") - return -1 - end - print (nmrs .. " Factions with 1 NMR") - return 0 -end - -function open_game(turn) - file = "" .. get_turn() - return eressea.read_game(file .. ".dat") -end - -function write_emails(locales) - local files = {} - local key - local locale - local file - for key, locale in pairs(locales) do - files[locale] = io.open(config.basepath .. "/emails." .. locale, "w") - end - - local faction - for faction in factions() do - if faction.email~="" then - files[faction.locale]:write(faction.email .. "\n") - end - end - - for key, file in pairs(files) do - file:close() - end -end - -function write_addresses() - local file - local faction - - file = io.open(config.basepath .. "/adressen", "w") - for faction in factions() do - -- print(faction.id .. " - " .. faction.locale) - file:write(tostring(faction) .. ":" .. faction.email .. ":" .. faction.info .. "\n") - end - - file:close() -end - -function write_aliases() - local file - local faction - - file = io.open(config.basepath .. "/aliases", "w") - for faction in factions() do - local unit - if faction.email ~= "" then - file:write("partei-" .. itoa36(faction.id) .. ": " .. faction.email .. "\n") - for unit in faction.units do - file:write("einheit-" .. itoa36(unit.id) .. ": " .. faction.email .. "\n") - end - end - end - - file:close() -end - -function write_files(locales) - write_passwords() - write_reports() - write_summary() - -- write_emails(locales) - -- write_aliases() - -- write_addresses() -end - -function write_scores() - scores = {} - for r in regions() do - f = r.owner - if f~=nil then - value = scores[f.id] - if value==nil then value=0 end - value = value + r:get_resource("money")/100 - scores[f.id] = value - end - end - for f in factions() do - score=scores[f.id] - if score==nil then score=0 end - print(math.floor(score)..":"..f.name..":"..itoa36(f.id)) - end -end diff --git a/core/scripts/dumptable.lua b/core/scripts/dumptable.lua deleted file mode 100644 index 58f10e8df..000000000 --- a/core/scripts/dumptable.lua +++ /dev/null @@ -1,95 +0,0 @@ ---------------------------------------------- --- Return indentation string for passed level ---------------------------------------------- -local function tabs(i) - return string.rep(".",i).." " -- Dots followed by a space -end - ------------------------------------------------------------ --- Return string representation of parameter's value & type ------------------------------------------------------------ -local function toStrType(t) - local function fttu2hex(t) -- Grab hex value from tostring() output - local str = tostring(t); - if str == nil then - return "tostring() failure! \n" - else - local str2 = string.match(str,"[ :][ (](%x+)") - if str2 == nil then - return "string.match() failure: "..str.."\n" - else - return "0x"..str2 - end - end - end - -- Stringify a value of a given type using a table of functions keyed - -- by the name of the type (Lua's version of C's switch() statement). - local stringify = { - -- Keys are all possible strings that type() may return, - -- per http://www.lua.org/manual/5.1/manual.html#pdf-type. - ["nil"] = function(v) return "nil (nil)" end, - ["string"] = function(v) return '"'..v..'" (string)' end, - ["number"] = function(v) return v.." (number)" end, - ["boolean"] = function(v) return tostring(v).." (boolean)" end, - ["function"] = function(v) return fttu2hex(v).." (function)" end, - ["table"] = function(v) return fttu2hex(v).." (table)" end, - ["thread"] = function(v) return fttu2hex(v).." (thread)" end, - ["userdata"] = function(v) return fttu2hex(v).." (userdata)" end - } - return stringify[type(t)](t) -end - -------------------------------------- --- Count elements in the passed table -------------------------------------- -local function lenTable(t) -- What Lua builtin does this simple thing? - local n=0 -- '#' doesn't work with mixed key types - if ("table" == type(t)) then - for key in pairs(t) do -- Just count 'em - n = n + 1 - end - return n - else - return nil - end -end - --------------------------------- --- Pretty-print the passed table --------------------------------- -local function do_dumptable(t, indent, seen) - -- "seen" is an initially empty table used to track all tables - -- that have been dumped so far. No table is dumped twice. - -- This also keeps the code from following self-referential loops, - -- the need for which was found when first dumping "_G". - if ("table" == type(t)) then -- Dump passed table - seen[t] = 1 - if (indent == 0) then - print ("The passed table has "..lenTable(t).." entries:") - indent = 1 - end - for f,v in pairsByKeys(t) do - if ("table" == type(v)) and (seen[v] == nil) then -- Recurse - print( tabs(indent)..toStrType(f).." has "..lenTable(v).." entries: {") - do_dumptable(v, indent+1, seen) - print( tabs(indent).."}" ) - else - print( tabs(indent)..toStrType(f).." = "..toStrType(v)) - end - end - else - print (tabs(indent).."Not a table!") - end -end - --------------------------------- --- Wrapper to handle persistence --------------------------------- -function dumptable(t) -- Only global declaration in the package - -- This wrapper exists only to set the environment for the first run: - -- The second param is the indentation level. - -- The third param is the list of tables dumped during this call. - -- Getting this list allocated and freed was a pain, and this - -- wrapper was the best solution I came up with... - return do_dumptable(t, 0, {}) -end diff --git a/core/scripts/eventbus.lua b/core/scripts/eventbus.lua deleted file mode 100644 index e69de29bb..000000000 diff --git a/core/scripts/gates.lua b/core/scripts/gates.lua deleted file mode 100644 index aeb1e2a3c..000000000 --- a/core/scripts/gates.lua +++ /dev/null @@ -1,25 +0,0 @@ --- implements gates and travel between them --- used in HSE and Eressea - -function gate_travel(b, units) - -- we've found which units we want to exchange, now swap them: - local u - for key, u in pairs(units) do - u.region = b.region - u.building = b - end -end - -function gate_units(b, maxsize) - local size = maxsize - local units = {} - local u - - for u in b.units do - if u.number<=size and u.weight<=u.capacity then - units[u] = u - size = size - u.number - end - end - return units -end diff --git a/core/scripts/init.lua b/core/scripts/init.lua deleted file mode 100755 index c05d0b17a..000000000 --- a/core/scripts/init.lua +++ /dev/null @@ -1,43 +0,0 @@ -require(config.rules .. ".modules") -require "default" -require "resources" - -function run_editor() - local turn = get_turn() - if turn<0 then - turn = read_turn() - set_turn(turn) - end - eressea.read_game(turn .. ".dat") - gmtool.editor() -end - -function run_tests() - print("running tests") - require "lunit" - lunit.clearstats() - local argv = tests or {} - local stats = lunit.main(argv) - if stats.errors > 0 or stats.failed > 0 then - assert(stats.errors == 0 and stats.failed == 0) - end - return 0 -end - -function run_turn() - require(config.rules .. ".main") - - local turn = get_turn() - if turn<0 then - turn = read_turn() - set_turn(turn) - end - - orderfile = orderfile or config.basepath .. '/orders.' .. turn - print("executing turn " .. get_turn() .. " with " .. orderfile .. " with rules=" .. config.rules) - local result = process(orderfile) - if result==0 then - dbupdate() - end - return result -end diff --git a/core/scripts/multis.lua b/core/scripts/multis.lua deleted file mode 100644 index 45ad97ff2..000000000 --- a/core/scripts/multis.lua +++ /dev/null @@ -1,93 +0,0 @@ -function kill_multis(multis, destructive) - for idx, fno in ipairs(multis) do - local f = get_faction(fno) - if f~=nil and f.email=="doppelspieler@eressea.de" then - kill_faction(f, destructive) - end - end -end - -function mark_multis(multis, block) - if multis~=nil then - for idx, fno in ipairs(multis) do - local f = get_faction(fno) - if f~=nil and f.email~="doppelspieler@eressea.de" then - print("* multi-player " .. tostring(f)) - mark_multi(f, block) - end - end - end -end - --- destroy a faction --- destructive: kill all of its buildings and the home region, too. - -function kill_faction(f, destructive) - for u in f.units do - local r = u.region - local b = u.building - unit.destroy(u) - if destructive and b~=nil then - building.destroy(b) - local nuke = true - for v in r.units do - if v.faction.id~=f.id then - -- print("cannot nuke: " .. tostring(v.faction)) - nuke = false - break - end - end - r.terrain_name = nil - if nuke and num_oceans(r)<=1 then - -- print("nuke!") - r.terrain = "ocean" - else - -- print("cannot nuke: > 1 oceans") - r.terrain = "glacier" - r.peasants = 10 - r:set_resource("money", 100) - b = building.create(r, "monument") - b.size = 1 - b.name = "Memento Mori" - b.info = "Eine kleine " .. translate("race::" .. f.race .."_x") .. "-Statue erinnert hier an ein verschwundenes Volk" - end - end - end - faction.destroy(f) -end - -local function mark_multi(f, block) - f.password = "doppelspieler" - f.email = "doppelspieler@eressea.de" - f.banner = "Diese Partei steht wegen vermuteten Doppelspiels unter Beobachtung." - for u in f.units do - u.race_name = "toad" - if block and u.building~=nil then - local found = false - for u2 in u.region.units do - if u2.faction.id~=u.faction.id then - found = true - break - end - end - if not found then - u.region.terrain_name = "firewall" - u.region:set_flag(2) -- RF_BLOCKED - end - end - end -end - -local function num_oceans(r) - local oceans = 0 - local p = r:next(5) - for d = 0,5 do - local n = r:next(d) - if p.terrain~="ocean" and n.terrain=="ocean" then - oceans = oceans +1 - end - p = n - end - return oceans -end - diff --git a/core/scripts/resources.lua b/core/scripts/resources.lua deleted file mode 100644 index 688fe3d1d..000000000 --- a/core/scripts/resources.lua +++ /dev/null @@ -1,89 +0,0 @@ -function peasant_getresource(u) - return u.region:get_resource("peasant") -end - -function peasant_changeresource(u, delta) - local p = u.region:get_resource("peasant") - p = p + delta - if p < 0 then - p = 0 - end - u.region:set_resource("peasant", p) - return p -end - -function hp_getresource(u) - return u.hp -end - -function hp_changeresource(u, delta) - local hp = u.hp + delta - - if hp < u.number then - if hp < 0 then - hp = 0 - end - u.number = hp - end - u.hp = hp - return hp -end - -function horse_limit(r) - return r:get_resource("horse") -end - -function horse_produce(r, n) - local horses = r:get_resource("horse") - if horses>=n then - r:set_resource("horse", horses-n) - else - r:set_resource("horse", 0) - end -end - -function log_limit(r) --- if r:get_flag(1) then -- RF_MALLORN --- return 0 --- end - return r:get_resource("tree") + r:get_resource("sapling") -end - -function log_produce(r, n) - local trees = r:get_resource("tree") - if trees>=n then - r:set_resource("tree", trees-n) - else - r:set_resource("tree", 0) - n = n - trees - trees = r:get_resource("sapling") - if trees>=n then - r:set_resource("sapling", trees-n) - else - r:set_resource("sapling", 0) - end - end -end - -function mallorn_limit(r) - if not r:get_flag(1) then -- RF_MALLORN - return 0 - end - return r:get_resource("tree") + r:get_resource("sapling") -end - -function mallorn_produce(r, n) - local trees = r:get_resource("tree") - if trees>=n then - r:set_resource("tree", trees-n) - else - r:set_resource("tree", 0) - n = n - trees - trees = r:get_resource("sapling") - if trees>=n then - r:set_resource("sapling", trees-n) - else - r:set_resource("sapling", 0) - end - end -end diff --git a/core/scripts/schema.sql b/core/scripts/schema.sql deleted file mode 100644 index f2b88d16e..000000000 --- a/core/scripts/schema.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE email(id INTEGER PRIMARY KEY, md5 VARCHAR(32) UNIQUE NOT NULL, email VARCHAR(32), bounces INT DEFAULT 0, confirmed TIMESTAMP DEFAULT NULL); -CREATE TABLE faction (id INTEGER PRIMARY KEY, user_id INTEGER REFERENCES user(id), no INTEGER, name VARCHAR(64), game_id INTEGER REFERENCES game(id), race VARCHAR(10), lang CHAR(2)); -CREATE TABLE faction_email (faction_id INTEGER REFERENCES faction(id), email_id INTEGER REFERENCES email(id)); -CREATE TABLE game (id INTEGER PRIMARY KEY, name VARCHAR(20), last_turn INTEGER); -CREATE TABLE score (turn INTEGER, faction_id INTEGER REFERENCES faction(id), value INTEGER, UNIQUE(turn, faction_id)); -CREATE TABLE user(id INTEGER PRIMARY KEY, email_id INTEGER REFERENCES email(id), creation TIMESTAMP DEFAULT CURRENT_TIMESTAMP); diff --git a/core/scripts/setup.lua b/core/scripts/setup.lua deleted file mode 100644 index f54f36661..000000000 --- a/core/scripts/setup.lua +++ /dev/null @@ -1,16 +0,0 @@ -local srcpath = config.source_dir -local respath = srcpath .. '/' .. config.rules .. '/res/' -local paths = { config.rules..'/scripts/?.lua';'lunit/?.lua','external/lunit/?.lua','scripts/?.lua';'scripts/?' } - -tests = {'common'} -for idx, test in pairs(tests) do - tests[idx] = srcpath .. '/scripts/tests/' .. test .. '.lua' -end - -for idx, path in pairs(paths) do - package.path = srcpath .. '/' .. path .. ';' .. package.path -end - -read_xml('config.xml', 'catalog.xml') - -require "init" diff --git a/core/scripts/spells.lua b/core/scripts/spells.lua deleted file mode 100644 index 3ea9a859c..000000000 --- a/core/scripts/spells.lua +++ /dev/null @@ -1,156 +0,0 @@ -function creation_message(mage, type, number) - local msg = message.create("item_create_spell") - local err = 0 - err = err + msg:set_unit("mage", mage) - err = err + msg:set_int("number", number) - err = err + msg:set_resource("item", type) - if err ~= 0 then - return nil - else - return msg - end -end - -local function create_item(mage, level, name, number) - local count = number or 1 - mage:add_item(name, count); - local msg = creation_message(mage, name, count) - msg:send_faction(mage.faction) - return level -end - --- Wasser des Lebens -function create_potion_p2(r, mage, level, force) - return create_item(mage, level, "p2", level) -end - --- Siebenmeilentee -function create_potion_p0(r, mage, level, force) - return create_item(mage, level, "p0", level) -end - --- Wundsalbe -function create_potion_ointment(r, mage, level, force) - return create_item(mage, level, "ointment", level) -end - --- Bauernblut -function create_potion_peasantblood(r, mage, level, force) - return create_item(mage, level, "peasantblood", level) -end - --- Pferdeglueck -function create_potion_p9(r, mage, level, force) - return create_item(mage, level, "p9", level) -end - --- Schaffenstrunk -function create_potion_p3(r, mage, level, force) - return create_item(mage, level, "p3", level) -end - --- Heiltrank -function create_potion_p14(r, mage, level, force) - return create_item(mage, level, "p14", level) -end - --- Elixier der Macht -function create_potion_p13(r, mage, level, force) - return create_item(mage, level, "p13", level) -end - --- Erschaffe ein Flammenschwert -function create_firesword(r, mage, level, force) - return create_item(mage, level, "firesword") -end - --- Erschaffe einen Guertel der Trollstaerke -function create_trollbelt(r, mage, level, force) - return create_item(mage, level, "trollbelt") -end - --- Erschaffe einen Ring der Unsichtbarkeit -function create_roi(r, mage, level, force) - return create_item(mage, level, "roi") -end - --- Erschaffe einen Ring der flinken Finger -function create_roqf(r, mage, level, force) - return create_item(mage, level, "roqf") -end - --- Erschaffe ein Amulett des wahren Sehens -function create_aots(r, mage, level, force) - return create_item(mage, level, "aots") -end - --- Erschaffe einen magischen Kraeuterbeutel -function create_magicherbbag(r, mage, level, force) - return create_item(mage, level, "magicherbbag") -end - --- Erschaffe einen Taktikkristal -function create_dreameye(r, mage, level, force) - return create_item(mage, level, "dreameye") -end - --- Erschaffe einen Antimagiekristall -function create_antimagic(r, mage, level, force) - return create_item(mage, level, "antimagic") -end - --- Erschaffe eine Sphaere der Unsichtbarkeit -function create_invisibility_sphere(r, mage, level, force) - return create_item(mage, level, "sphereofinv") -end - --- Erschaffe einen Guertel der Keuschheit -function create_chastitybelt(r, mage, level, force) - return create_item(mage, level, "ao_chastity") -end - --- Erschaffe ein Runenschwert -function create_runesword(r, mage, level, force) - return create_item(mage, level, "runesword") -end - --- Erschaffe ein Aurafokus -function create_focus(r, mage, level, force) - return create_item(mage, level, "aurafocus") -end - --- Erschaffe einen Ring der Macht -function create_rop(r, mage, level, force) - return create_item(mage, level, "rop") -end - --- Erschaffe einen Ring der Regeneration -function create_ror(r, mage, level, force) - return create_item(mage, level, "ror") -end - --- Erschaffe einen Zauberbeutel -function create_bagofholding(r, mage, level, force) - return create_item(mage, level, "magicbag") -end - --- TODO: -function earn_silver(r, mage, level, force) - local money = r:get_resource("money") - local wanted = 50 * force - local amount = wanted - if wanted > money then - amount = money - end - r:set_resource("money", money - amount) - mage:add_item("money", amount) - - local msg = message.create("income") - msg:set_unit("unit", mage) - msg:set_region("region", r) - msg:set_int("mode", 6) - msg:set_int("wanted", wanted) - msg:set_int("amount", amount) - msg:send_faction(mage.faction) - return level -end diff --git a/core/scripts/tests/attrib.lua b/core/scripts/tests/attrib.lua deleted file mode 100755 index 73d961d94..000000000 --- a/core/scripts/tests/attrib.lua +++ /dev/null @@ -1,53 +0,0 @@ -require "lunit" - -module("tests.eressea.attrib", package.seeall, lunit.testcase) - -function has_attrib(u, value) - for a in u.attribs do - if (a.data==value) then return true end - end - return false -end - -function test_attrib_global() - a = attrib.create('global', {}) - eressea.write_game('attrib.dat') - eressea.free_game() - eressea.read_game('attrib.dat') -end - -function test_attrib() - local r = region.create(0,0, "plain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - local u2 = unit.create(f, r, 1) - data = { arr = { 'a', 'b', 'c' }, name = 'familiar', events = { die = 'familiar_died' }, data = { mage = u2 } } - a = { 'a' } - b = { 'a' } - uno = u.id - u2no = u2.id - a = attrib.create(u, 12) - a = attrib.create(u, "enno") - a = attrib.create(u, u2) - a = attrib.create(u, data) - eressea.write_game("attrib.dat") - eressea.free_game() - eressea.read_game("attrib.dat") - u = get_unit(uno) - u2 = get_unit(u2no) - assert_false(has_attrib(u, 42)) - assert_true(has_attrib(u, "enno")) - assert_true(has_attrib(u, 12)) - - for a in u.attribs do - x = a.data - if (type(x)=="table") then - assert_equal('a', x.arr[1]) - assert_equal('familiar', x.name) - assert_equal('familiar_died', x.events.die) - assert_equal(u2, x.data.mage) - break - end - end -end - diff --git a/core/scripts/tests/bindings.lua b/core/scripts/tests/bindings.lua deleted file mode 100755 index 189d34769..000000000 --- a/core/scripts/tests/bindings.lua +++ /dev/null @@ -1,61 +0,0 @@ -require "lunit" - -local eressea = eressea -local _G = _G - -module("tests.bindings", lunit.testcase) - -function test_eressea() - assert_equal("function", _G.type(eressea.free_game)) - assert_equal("function", _G.type(eressea.read_game)) - assert_equal("function", _G.type(eressea.write_game)) - assert_equal("function", _G.type(eressea.read_orders)) -end - -function test_process() - assert_equal("function", _G.type(eressea.process.update_long_order)) - assert_equal("function", _G.type(eressea.process.markets)) - assert_equal("function", _G.type(eressea.process.produce)) - - assert_equal("function", _G.type(eressea.process.make_temp)) - assert_equal("function", _G.type(eressea.process.settings)) - assert_equal("function", _G.type(eressea.process.set_allies)) - assert_equal("function", _G.type(eressea.process.set_prefix)) - assert_equal("function", _G.type(eressea.process.set_stealth)) - assert_equal("function", _G.type(eressea.process.set_status)) - assert_equal("function", _G.type(eressea.process.set_name)) - assert_equal("function", _G.type(eressea.process.set_group)) - assert_equal("function", _G.type(eressea.process.set_origin)) - assert_equal("function", _G.type(eressea.process.quit)) - assert_equal("function", _G.type(eressea.process.study)) - assert_equal("function", _G.type(eressea.process.movement)) - assert_equal("function", _G.type(eressea.process.use)) - assert_equal("function", _G.type(eressea.process.battle)) - assert_equal("function", _G.type(eressea.process.siege)) - assert_equal("function", _G.type(eressea.process.leave)) - assert_equal("function", _G.type(eressea.process.promote)) - assert_equal("function", _G.type(eressea.process.renumber)) - assert_equal("function", _G.type(eressea.process.restack)) - assert_equal("function", _G.type(eressea.process.set_spells)) - assert_equal("function", _G.type(eressea.process.set_help)) - assert_equal("function", _G.type(eressea.process.contact)) - assert_equal("function", _G.type(eressea.process.enter)) - assert_equal("function", _G.type(eressea.process.magic)) - assert_equal("function", _G.type(eressea.process.give_control)) - assert_equal("function", _G.type(eressea.process.regeneration)) - assert_equal("function", _G.type(eressea.process.guard_on)) - assert_equal("function", _G.type(eressea.process.guard_off)) - assert_equal("function", _G.type(eressea.process.explain)) - assert_equal("function", _G.type(eressea.process.messages)) - assert_equal("function", _G.type(eressea.process.reserve)) - assert_equal("function", _G.type(eressea.process.claim)) - assert_equal("function", _G.type(eressea.process.follow)) - assert_equal("function", _G.type(eressea.process.alliance)) - assert_equal("function", _G.type(eressea.process.idle)) - assert_equal("function", _G.type(eressea.process.set_default)) -end - -function test_settings() - assert_equal("function", _G.type(eressea.settings.set)) - assert_equal("function", _G.type(eressea.settings.get)) -end diff --git a/core/scripts/tests/bson.lua b/core/scripts/tests/bson.lua deleted file mode 100755 index ec0966bcd..000000000 --- a/core/scripts/tests/bson.lua +++ /dev/null @@ -1,65 +0,0 @@ -require "lunit" - -module("tests.eressea.bson", package.seeall, lunit.testcase) - -function setup() - eressea.free_game() -end - -function test_bson_create() - local a = attrib.create("global", 12) - assert_not_equal(nil, a) - for a in attrib.get("global") do - assert_equal(a.data, 12) - end -end - -function test_illegal_arg() - local a = attrib.create(nil, 42) - assert_equal(nil, a) - a = attrib.create("fred", 42) - assert_equal(nil, a) -end - -function test_bson_readwrite() - local i, r = region.create(0, 0, "mountain") - attrib.create(r, 42) - i = eressea.write_game("test_read_write.dat") - assert_equal(0, i) - eressea.free_game() - r = get_region(0, 0) - assert_equal(nil, r) - i = eressea.read_game("test_read_write.dat") - assert_equal(0, i) - r = get_region(0, 0) - assert_not_equal(nil, r) - for a in attrib.get(r) do - assert_equal(a.data, 42) - end -end - -function test_bson() - local r = region.create(0, 0, "mountain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - assert_not_equal(nil, u) - assert_not_equal(nil, r) - assert_not_equal(nil, f) - attrib.create(r, 1) - assert_equal(attrib.get(r)().data, 1) - attrib.create(u, 3) - assert_equal(attrib.get(u)().data, 3) - attrib.create(f, 5) - assert_equal(attrib.get(f)().data, 5) -end - -function test_bson_with_multiple_attribs() - local r = region.create(0, 0, "mountain") - attrib.create(r, { a=1}) - attrib.create(r, { a=5}) - local total = 0 - for a in attrib.get(r) do - total = total + a.data.a; - end - assert_equal(6, total) -end diff --git a/core/scripts/tests/common.lua b/core/scripts/tests/common.lua deleted file mode 100755 index 32d6e1825..000000000 --- a/core/scripts/tests/common.lua +++ /dev/null @@ -1,1450 +0,0 @@ -require "lunit" - -local function _test_create_ship(r) - local s = ship.create(r, config.ships[1]) - return s -end - -local function _test_unique_btype() - local utype = nil - for i = 1, #config.buildings do - bt = config.buildings[i] - if ((config.get_building(bt).flags / 4) % 2) ~= 0 then -- #define BTF_UNIQUE 0x04 - if ((config.get_building(bt).flags / 2) % 2) == 0 then -- #define BTF_NOBUILD 0x02 - utype = bt - end - end - end - return utype -end - -local function one_unit(r, f) - local u = unit.create(f, r, 1) - u:add_item("money", u.number * 100) - u:clear_orders() - return u -end - -local function two_units(r, f1, f2) - return one_unit(r, f1), one_unit(r, f2) -end - -local function two_factions() - local f1 = faction.create("one@eressea.de", "human", "de") - local f2 = faction.create("two@eressea.de", "elf", "de") - return f1, f2 -end - -module("tests.eressea.common", package.seeall, lunit.testcase) - -function setup() - eressea.free_game() - eressea.settings.set("nmr.removenewbie", "0") - eressea.settings.set("nmr.timeout", "0") - eressea.settings.set("NewbieImmunity", "0") - eressea.settings.set("rules.economy.food", "4") - eressea.settings.set("rules.encounters", "0") - eressea.settings.set("rules.peasants.growth", "1") -end - -function test_flags() - local r = region.create(0, 0, "plain") - local f = faction.create("flags@eressea.de", "halfling", "de") - local u = unit.create(f, r, 1) - local no = itoa36(f.id) - local flags = 587203585 - f.flags = flags - - eressea.write_game("test.dat") - eressea.free_game() - eressea.read_game("test.dat") - f = get_faction(no) - assert_equal(flags, f.flags) -end - -function test_elvenhorse_requires_riding_5() - local r = region.create(0, 0, "plain") - region.create(1, 0, "plain") - local goal = region.create(2, 0, "plain") - local f = faction.create("riding@eressea.de", "halfling", "de") - local u = unit.create(f, r, 1) - u:add_item("elvenhorse", 1) - u:set_skill("riding", 6)-- halfling has -1 modifier - u:clear_orders() - u:add_order("NACH O O") - process_orders() - assert_equal(goal, u.region) -end - -function test_cannot_ride_elvenhorse_without_enough_skill() - local r = region.create(0, 0, "plain") - local goal = region.create(1, 0, "plain") - region.create(2, 0, "plain") - local f = faction.create("elvenhorse@eressea.de", "halfling", "de") - local u = unit.create(f, r, 1) - u:add_item("elvenhorse", 1) - u:set_skill("riding", 5) -- halfling has -1 modifier - u:clear_orders() - u:add_order("NACH O O") - process_orders() - assert_equal(goal, u.region) -end - -function test_no_peasant_growth() - local r = region.create(0, 0, "plain") - r:set_resource("peasant", 2000) - eressea.settings.set("rules.peasants.growth", "0") - process_orders() - assert_equal(r:get_resource("peasant"), 2000) -end - -function test_demon_food() - local r = region.create(0, 0, "plain") - local f = faction.create("demonfood@eressea.de", "demon", "de") - local u = unit.create(f, r, 1) - local p = r:get_resource("peasant") - r:set_resource("peasant", 2000) - eressea.settings.set("rules.economy.food", "0") - eressea.settings.set("rules.peasants.growth", "0") - process_orders() - assert_not_nil(u) - assert_equal(1, u.number) - assert_equal(1999, r:get_resource("peasant")) -end - -function test_fleeing_units_can_be_transported() - local r = region.create(0, 0, "plain") - local r1 = region.create(1, 0, "plain") - local f1, f2 = two_factions() - local u1, u2 = two_units(r, f1, f2) - local u3 = one_unit(r, f2) - u1.number = 100 - u1:add_order("ATTACKIEREN " .. itoa36(u2.id)) - u2.number = 100 - u2:add_order("FAHREN " .. itoa36(u3.id)) - u2:add_order("KAEMPFE FLIEHE") - u3.number = 100 - u3:add_order("KAEMPFE FLIEHE") - u3:add_order("TRANSPORT " .. itoa36(u2.id)) - u3:add_order("NACH O ") - u3:set_skill("riding", 2) - u3:add_item("horse", u2.number) - u3:add_order("KAEMPFE FLIEHE") - process_orders() - assert_equal(u3.region.id, r1.id, "transporter did not move") - assert_equal(u2.region.id, r1.id, "transported unit did not move") -end - -function test_plane() - local pl = plane.create(0, -3, -3, 7, 7) - local nx, ny = plane.normalize(pl, 4, 4) - assert_equal(nx, -3, "normalization failed") - assert_equal(ny, -3, "normalization failed") - local f = faction.create("plan@eressea.de", "human", "de") - f.id = atoi36("tpla") - local r, x, y - for x = -3, 3 do for y = -3, 3 do - r = region.create(x, y, "plain") - if x==y then - local u = unit.create(f, r, 1) - end - end end -end - -function test_pure() - local r = region.create(0, 0, "plain") - assert_not_equal(nil, r) - assert_equal(r, get_region(0, 0)) -end - -function test_read_write() - local r = region.create(0, 0, "plain") - local f = faction.create("readwrite@eressea.de", "human", "de") - local u = unit.create(f, r) - u.number = 2 - local fno = f.id - local uno = u.id - local result = 0 - assert_equal(r.terrain, "plain") - result = eressea.write_game("test.dat") - assert_equal(result, 0) - assert_not_equal(get_region(0, 0), nil) - assert_not_equal(get_faction(fno), nil) - assert_not_equal(get_unit(uno), nil) - r = nil - f = nil - u = nil - eressea.free_game() - assert_equal(get_region(0, 0), nil) - assert_equal(nil, get_faction(fno)) - assert_equal(nil, get_unit(uno)) - result = eressea.read_game("test.dat") - assert_equal(0, result) - assert_not_equal(nil, get_region(0, 0)) - assert_not_equal(nil, get_faction(fno)) - assert_not_equal(nil, get_unit(uno)) -end - -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 r = region.create(0, 0, "plain") - local f = faction.create("descriptions@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - local s = _test_create_ship(r) - local b = building.create(r, "castle") - local uno = u.id - local fno = f.id - local sno = s.id - local bno = b.id - u.info = info - r.info = info - f.info = info - s.info = info - b.info = info - - filename = "test.dat" - eressea.write_game(filename) - eressea.free_game() - eressea.read_game(filename) - assert_equal(info, get_ship(sno).info) - assert_equal(info, get_unit(uno).info) - assert_equal(info, get_faction(fno).info) - assert_equal(info, get_building(bno).info) - assert_equal(info, get_region(0, 0).info) -end - -function test_gmtool() - local r1 = region.create(1, 0, "plain") - local r2 = region.create(1, 1, "plain") - local r3 = region.create(1, 2, "plain") - gmtool.open() - gmtool.select(r1, true) - gmtool.select_at(0, 1, true) - gmtool.select(r2, true) - gmtool.select_at(0, 2, true) - gmtool.select(r3, false) - gmtool.select(r3, true) - gmtool.select_at(0, 3, false) - gmtool.select(r3, false) - - local selections = 0 - for r in gmtool.get_selection() do - selections=selections+1 - end - assert_equal(2, selections) - assert_equal(nil, gmtool.get_cursor()) - - gmtool.close() -end - -function test_faction() - local r = region.create(0, 0, "plain") - local f = faction.create("testfaction@eressea.de", "human", "de") - assert(f) - f.info = "Spazz" - assert(f.info=="Spazz") - f:add_item("donotwant", 42) - f:add_item("stone", 42) - f:add_item("sword", 42) - local items = 0 - for u in f.items do - items = items + 1 - end - assert(items==2) - unit.create(f, r) - unit.create(f, r) - local units = 0 - for u in f.units do - units = units + 1 - end - assert(units==2) -end - -function test_unit() - local r = region.create(0, 0, "plain") - local f = faction.create("testunit@eressea.de", "human", "de") - local u = unit.create(f, r) - u.number = 20 - u.name = "Enno" - assert(u.name=="Enno") - u.info = "Spazz" - assert(u.info=="Spazz") - u:add_item("sword", 4) - assert(u:get_item("sword")==4) - assert(u:get_pooled("sword")==4) - u:use_pooled("sword", 2) - assert(u:get_item("sword")==2) -end - -function test_region() - local r = region.create(0, 0, "plain") - r:set_resource("horse", 42) - r:set_resource("money", 45) - r:set_resource("peasant", 200) - assert(r:get_resource("horse") == 42) - assert(r:get_resource("money") == 45) - assert(r:get_resource("peasant") == 200) - r.name = nil - r.info = nil - assert(r.name=="") - assert(r.info=="") - r.name = "Alabasterheim" - r.info = "Hier wohnen die siebzehn Zwerge" - assert(tostring(r) == "Alabasterheim (0,0)") -end - -function test_building() - local u - local f = faction.create("testbuilding@eressea.de", "human", "de") - local r = region.create(0, 0, "plain") - local b = building.create(r, "castle") - u = unit.create(f, r) - u.number = 1 - u.building = b - u = unit.create(f, r) - u.number = 2 - -- u.building = b - u = unit.create(f, r) - u.number = 3 - u.building = b - local units = 0 - for u in b.units do - units = units + 1 - end - assert(units==2) - local r2 = region.create(0, 1, "plain") - assert(b.region==r) - b.region = r2 - assert(b.region==r2) - assert(r2.buildings()==b) -end - -function test_message() - local r = region.create(0, 0, "plain") - local f = faction.create("testmessage@eressea.de", "human", "de") - local u = unit.create(f, r) - local msg = message.create("item_create_spell") - msg:set_unit("mage", u) - msg:set_int("number", 1) - msg:set_resource("item", "sword") - msg:send_region(r) - msg:send_faction(f) - - return msg -end - -function test_hashtable() - local f = faction.create("noreply1@eressea.de", "human", "de") - f.objects:set("enno", "smart guy") - f.objects:set("age", 10) - assert(f.objects:get("jesus") == nil) - assert(f.objects:get("enno") == "smart guy") - assert(f.objects:get("age") == 10) - f.objects:set("age", nil) - assert(f.objects:get("age") == nil) -end - -function test_events() - local fail = 1 - local function msg_handler(u, evt) - str = evt:get(0) - u2 = evt:get(1) - assert(u2~=nil) - assert(str=="Du Elf stinken") - message_unit(u, u2, "thanks unit, i got your message: " .. str) - message_faction(u, u2.faction, "thanks faction, i got your message: " .. str) - message_region(u, "thanks region, i got your message: " .. str) - fail = 0 - end - - plain = region.create(0, 0, "plain") - skill = 8 - - f = faction.create("noreply2@eressea.de", "elf", "de") - f.age = 20 - - u = unit.create(f, plain) - u.number = 1 - u:add_item("money", u.number*100) - u:clear_orders() - u:add_order("NUMMER PARTEI test") - u:add_handler("message", msg_handler) - msg = "BOTSCHAFT EINHEIT " .. itoa36(u.id) .. " Du~Elf~stinken" - f = faction.create("noreply3@eressea.de", "elf", "de") - f.age = 20 - - u = unit.create(f, plain) - u.number = 1 - u:add_item("money", u.number*100) - u:clear_orders() - u:add_order("NUMMER PARTEI eviL") - u:add_order(msg) - process_orders() - assert(fail==0) -end - -function test_recruit2() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply4@eressea.de", "human", "de") - local u = unit.create(f, r) - u.number = 1 - u:add_item("money", 2000) - u:clear_orders() - u:add_order("MACHE TEMP 1") - u:add_order("REKRUTIERE 1 Elf") - u:add_order("REKRUTIERE 1 Mensch") - u:add_order("REKRUTIERE 1") - process_orders() -end - -function test_guard() - region.create(1, 0, "plain") - local r = region.create(0, 0, "plain") - local f1 = faction.create("noreply5@eressea.de", "human", "de") - f1.age = 20 - local u1 = unit.create(f1, r, 10) - u1:add_item("sword", 10) - u1:add_item("money", 10) - u1:set_skill("melee", 10) - u1:clear_orders() - u1:add_order("NACH O") - u1.name="Kalle Pimp" - - local f2 = faction.create("noreply6@eressea.de", "human", "de") - f2.age = 20 - local u2 = unit.create(f2, r, 1) - local u3 = unit.create(f2, r, 1) - local b = building.create(r, "castle") - b.size = 10 - u2.building = b - u3.building = b - u2:clear_orders() - u2:add_order("ATTACKIEREN " .. itoa36(u1.id)) -- you will die... - u2:add_item("money", 100) - u3:add_item("money", 100) - process_orders() - assert_equal(r, u1.region, "unit may not move after combat") -end - -function test_recruit() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply7@eressea.de", "human", "de") - local u = unit.create(f, r) - u.number = 1 - local n = 3 - r:set_resource("peasant", 200) - u:clear_orders() - u:add_item("money", 110*n+20) - u:add_order("REKRUTIERE " .. n) - process_orders() - assert(u.number == n+1) - local p = r:get_resource("peasant") - assert(p<200 and p>=200-n) - -- assert(u:get_item("money")==10) -end - -function test_produce() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply8@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - u:clear_orders() - local sword = config.get_resource('sword') - u:set_skill(sword.build_skill_name, 3) - u:add_item("iron", 10) - u:add_item("money", u.number * 10) - u:add_order("MACHE Schwert") - process_orders() - assert_equal(10-3/sword.build_skill_min*sword.materials['iron'], u:get_item("iron")) - assert_equal(3/sword.build_skill_min, u:get_item("sword")) -end - -function test_work() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply9@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - u:add_item("money", u.number * 10) -- humans cost 10 - u:set_skill("herbalism", 5) - u:clear_orders() - u:add_order("ARBEITEN") - process_orders() - assert(u:get_item("money")>=10) -end - -function test_upkeep() - eressea.settings.set("rules.economy.food", "0") - local r = region.create(0, 0, "plain") - local f = faction.create("noreply10@eressea.de", "human", "de") - local u = unit.create(f, r, 5) - u:add_item("money", u.number * 11) - u:clear_orders() - u:add_order("LERNE Waffenbau") - process_orders() - assert(u:get_item("money")==u.number) -end - -function test_id() - local r = region.create(0, 0, "plain") - - local f = faction.create("noreply11@eressea.de", "human", "de") - f.id = atoi36("42") - assert(get_faction(42)~=f) - assert(get_faction("42")==f) - assert(get_faction(atoi36("42"))==f) - - local u = unit.create(f, r, 1) - u.id = atoi36("42") - assert(get_unit(42)~=u) - assert(get_unit("42")==u) - assert(get_unit(atoi36("42"))==u) - - local b = building.create(r, "castle") - -- b.id = atoi36("42") - local fortytwo = itoa36(b.id) - assert(get_building(fortytwo)==b) - assert(get_building(atoi36(fortytwo))==b) - - local s = _test_create_ship(r) - assert_not_nil(s) - -- s.id = atoi36("42") - local fortytwo = itoa36(s.id) - assert(get_ship(fortytwo)==s) - assert(get_ship(atoi36(fortytwo))==s) -end - -function test_herbalism() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply12@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - u:add_item("money", u.number * 100) - u:set_skill("herbalism", 5) - u:clear_orders() - u:add_order("MACHE Samen") - process_orders() -end - -function test_mallorn() - local r = region.create(0, 0, "plain") - r:set_flag(1, false) -- not mallorn - r:set_resource("tree", 100) - assert(r:get_resource("tree")==100) - local m = region.create(0, 0, "plain") - m:set_flag(1, true) -- mallorn - m:set_resource("tree", 100) - assert(m:get_resource("tree")==100) - - local f = faction.create("noreply13@eressea.de", "human", "de") - - local u1 = unit.create(f, r, 1) - u1:add_item("money", u1.number * 100) - u1:set_skill("forestry", 2) - u1:clear_orders() - u1:add_order("MACHE HOLZ") - - local u2 = unit.create(f, m, 1) - u2:add_item("money", u2.number * 100) - u2:set_skill("forestry", 2) - u2:clear_orders() - u2:add_order("MACHE HOLZ") - - local u3 = unit.create(f, m, 1) - u3:add_item("money", u3.number * 100) - u3:set_skill("forestry", 2) - u3:clear_orders() - u3:add_order("MACHE Mallorn") - - process_orders() - - assert_equal(2, u1:get_item("log")) - assert_equal(2, u2:get_item("log")) - local mallorn_cfg = config.get_resource("mallorn") - if mallorn_cfg then - assert_equal(1, u3:get_item("mallorn")) - else - assert_equal(-1, u3:get_item("mallorn")) - assert_equal(0, u3:get_item("log")) - end -end - -function test_coordinate_translation() - local pl = plane.create(1, 500, 500, 1001, 1001) -- astralraum - local pe = plane.create(1, -8761, 3620, 23, 23) -- eternath - local r = region.create(1000, 1000, "plain") - local f = faction.create("noreply14@eressea.de", "human", "de") - assert_not_equal(nil, r) - assert_equal(r.x, 1000) - assert_equal(r.y, 1000) - local nx, ny = plane.normalize(pl, r.x, r.y) - assert_equal(nx, 1000) - assert_equal(ny, 1000) - local r1 = region.create(500, 500, "plain") - f:set_origin(r1) - nx, ny = f:normalize(r1) - assert_equal(0, nx) - assert_equal(0, ny) - local r0 = region.create(0, 0, "plain") - nx, ny = f:normalize(r0) - assert_equal(0, nx) - assert_equal(0, ny) - nx, ny = f:normalize(r) - assert_equal(500, nx) - assert_equal(500, ny) - local rn = region.create(1010, 1010, "plain") - nx, ny = f:normalize(rn) - assert_equal(-491, nx) - assert_equal(-491, ny) - - local re = region.create(-8760, 3541, "plain") -- eternath - nx, ny = f:normalize(rn) - assert_equal(-491, nx) - assert_equal(-491, ny) -end - -function test_control() - local u1, u2 = two_units(region.create(0, 0, "plain"), two_factions()) - local r = u1.region - local b = building.create(r, "castle") - u1.building = b - u2.building = b - assert_equal(u1, b.owner) - u1:clear_orders() - u1:add_order("GIB " .. itoa36(u2.id) .. " KOMMANDO") - u1:add_order("VERLASSE") - process_orders() - assert_equal(u2, b.owner) -end - -function test_store_unit() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply15@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - local fid = f.id - u:add_item("money", u.number * 100) - local filename = config.basepath .. "/data/test.dat" - store = storage.create(filename, "wb") - assert_not_equal(store, nil) - store:write_unit(u) - store:close() - eressea.free_game() - -- recreate world: - r = region.create(0, 0, "plain") - f = faction.create("noreply16@eressea.de", "human", "de") - f.id = fid - store = storage.create(filename, "rb") - assert_not_nil(store) - u = store:read_unit() - store:close() - assert(u) - assert(u:get_item("money") == u.number * 100) -end - -function test_building_other() - local r = region.create(0,0, "plain") - local f1 = faction.create("noreply17@eressea.de", "human", "de") - local f2 = faction.create("noreply18@eressea.de", "human", "de") - local b = building.create(r, "castle") - b.size = 10 - local u1 = unit.create(f1, r, 3) - u1.building = b - u1:add_item("money", 100) - - local u2 = unit.create(f2, r, 3) - u2:set_skill("building", 10) - u2:add_item("money", 100) - u2:add_item("stone", 100) - u2:clear_orders() - u2:add_order("MACHEN BURG " .. itoa36(b.id)) - process_orders() - assert_not_equal(10, b.size) -end - -function test_config() - assert_not_equal(nil, config.basepath) - assert_not_equal(nil, config.locales) -end - -local function _test_create_laen() - eressea.settings.set("rules.terraform.all", "1") - local r = region.create(0,0, "mountain") - local f1 = faction.create("noreply19@eressea.de", "human", "de") - local u1 = unit.create(f1, r, 1) - r:set_resource("laen", 50) - return r, u1 -end - -function test_laen1() - local r, u1 = _test_create_laen() - - u1:add_item("money", 1000) - u1:set_skill("mining", 14) - u1:clear_orders() - u1:add_order("MACHEN Laen") - - process_orders() - assert_equal(0, u1:get_item("laen")) -end - -function test_laen2() - local r, u1 = _test_create_laen() - - u1:add_item("money", 1000) - u1:set_skill("mining", 15) - u1:clear_orders() - u1:add_order("MACHEN Laen") - u1.name = "Laenmeister" - - local b = building.create(r, "mine") - b.size = 10 - u1.building = b - local laen = r:get_resource("laen") - - process_orders() - init_reports() - write_report(u1.faction) - assert_equal(laen - 2, r:get_resource("laen")) - assert_equal(2, u1:get_item("laen")) -end - -function test_mine() - local r = region.create(0,0, "mountain") - local f1 = faction.create("noreply20@eressea.de", "human", "de") - local u1 = unit.create(f1, r, 1) - - u1:add_item("money", 1000) - u1:set_skill("mining", 1) - u1:clear_orders() - u1:add_order("MACHEN Eisen") - - local b = building.create(r, "mine") - b.size = 10 - u1.building = b - local iron = r:get_resource("iron") - - process_orders() - assert_equal(2, u1:get_item("iron")) -- skill +1 - assert_equal(iron - 1, r:get_resource("iron")) -- only 1/2 is taken away -end - -function test_guard_resources() - -- this is not quite http://bugs.eressea.de/view.php?id=1756 - local r = region.create(0,0, "mountain") - local f1 = faction.create("noreply21@eressea.de", "human", "de") - f1.age=20 - local f2 = faction.create("noreply22@eressea.de", "human", "de") - f2.age=20 - local u1 = unit.create(f1, r, 1) - u1:add_item("money", 100) - u1:set_skill("melee", 3) - u1:add_item("sword", 1) - u1:clear_orders() - u1:add_order("BEWACHEN") - - local u2 = unit.create(f2, r, 1) - u2:add_item("money", 100) - u2:set_skill("mining", 3) - u2:clear_orders() - u2:add_order("MACHEN EISEN") - - process_orders() - local iron = u2:get_item("iron") - assert_true(iron > 0) - process_orders() - assert_equal(iron, u2:get_item("iron")) -end - -local function is_flag_set(flags, flag) - return math.fmod(flags, flag*2) - math.fmod(flags, flag) == flag; -end - -function test_hero_hero_transfer() - local r = region.create(0,0, "mountain") - local f = faction.create("noreply23@eressea.de", "human", "de") - f.age=20 - local UFL_HERO = 128 - - local u1 = unit.create(f, r, 1) - local u2 = unit.create(f, r, 1) - u1:add_item("money", 10000) - u1.flags = u1.flags + UFL_HERO - u2.flags = u2.flags + UFL_HERO - u1:clear_orders() - u1:add_order("GIB " .. itoa36(u2.id) .. " 1 PERSONEN") - u1:add_order("REKRUTIEREN 1") - process_orders() - assert_equal(2, u2.number) - assert_true(is_flag_set(u2.flags, 128), 128, "unit is not a hero?") - assert_equal(1, u1.number) - assert_false(is_flag_set(u1.flags, 128), 128, "recruiting into an empty hero unit should not create a hero") -end - -function test_hero_normal_transfer() - local r = region.create(0,0, "mountain") - local f = faction.create("noreply24@eressea.de", "human", "de") - f.age=20 - local UFL_HERO = 128 - - local u1 = unit.create(f, r, 1) - local u2 = unit.create(f, r, 1) - u1:add_item("money", 10000) - u1.flags = u1.flags + UFL_HERO - u1:clear_orders() - u1:add_order("GIB " .. itoa36(u2.id) .. " 1 PERSONEN") - process_orders() - assert_equal(1, u1.number) - assert_equal(1, u2.number) - assert_true(is_flag_set(u1.flags, 128), "unit is not a hero?") - assert_false(is_flag_set(u2.flags, 128), "unit turned into a hero") -end - -function test_expensive_skills_cost_money() - local r = region.create(0,0, "mountain") - local f = faction.create("noreply25@eressea.de", "elf", "de") - local u = unit.create(f, r, 1) - u:add_item("money", 10000) - u:clear_orders() - u:add_order("LERNEN MAGIE Gwyrrd") - process_orders() - assert_equal(9900, u:get_item("money")) - assert_equal(1, u:get_skill("magic")) -end - -function test_food_is_consumed() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply26@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - u:add_item("money", 100) - u:clear_orders() - u:add_order("LERNEN Reiten") -- don't work - eressea.settings.set("rules.economy.food", "4") - process_orders() - assert_equal(100, u:get_item("money")) -end - -function test_food_can_override() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply27@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - u:add_item("money", 100) - u:clear_orders() - u:add_order("LERNEN Reiten") -- don't work - eressea.settings.set("rules.economy.food", "0") - process_orders() - assert_equal(90, u:get_item("money")) -end - -function test_swim_and_survive() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply28@eressea.de", "human", "de") - f.nam = "chaos" - local u = unit.create(f, r, 1) - process_orders() - r.terrain = "ocean" - local s = _test_create_ship(r) - u:clear_orders() - u:add_order("BETRETE SCHIFF " .. itoa36(s.id)) - process_orders() - assert_equal(u.number, 1) -end - -function test_swim_and_die() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply29@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - local uid = u.id - process_orders() - r.terrain = "ocean" - u = get_unit(uid) - assert_not_equal(get_unit(uid), nil) - process_orders() - assert_equal(get_unit(uid), nil) -end - -function test_ride_with_horse() - region.create(1, 0, "plain") - region.create(2, 0, "plain") - local r = region.create(0, 0, "plain") - local f = faction.create("noreply30@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - u:add_item("horse", 1) - local horse_cfg = config.get_resource("horse") - u:add_item("sword", (horse_cfg.capacity - u.weight)/100) - u:set_skill("riding", 2) - - u:clear_orders() - u:add_order("NACH O O") - process_orders() - assert_equal(u.region.x, 2) - - u:add_item("sword", 1) - u:clear_orders() - u:add_order("NACH W W") - process_orders() - assert_equal(u.region.x, 1) -end - -function test_ride_with_horses_and_cart() - region.create(1, 0, "plain") - region.create(2, 0, "plain") - local r = region.create(0, 0, "plain") - local f = faction.create("noreply31@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - local horse_cfg = config.get_resource("horse") - local cart_cfg = config.get_resource("cart") - local sword_cfg = config.get_resource("sword") - - u:set_skill("riding", 3) - - local capacity = (horse_cfg.capacity-horse_cfg.weight)*2 - u.weight - if cart_cfg~=nil then - capacity = capacity + cart_cfg.capacity-cart_cfg.weight - end - u:add_item("sword", capacity / sword_cfg.weight) - - u:add_item("horse", 1) - if cart_cfg~=nil then - -- we need 2 horses for a cart, so this should fail: - u:add_item("cart", 1) - u:clear_orders() - u:add_order("NACH O O") - process_orders() - assert_equal(0, u.region.x) - end - - -- here is your second horse, milord: - u:add_item("horse", 1) - assert_equal(2, u:get_item("horse")) - - -- ride - u:clear_orders() - u:add_order("NACH O O") - process_orders() - assert_equal(2, u.region.x) - - -- walk - u:add_item("sword", 1000/sword_cfg.weight) - u:clear_orders() - u:add_order("NACH W W") - process_orders() - assert_equal(1, u.region.x) - - -- make this fellow too heavy - u:add_item("sword", 1000/sword_cfg.weight) - u:clear_orders() - u:add_order("NACH W W") - process_orders() - assert_equal(1, u.region.x) -end - -function test_walk_and_carry_the_cart() - region.create(1, 0, "plain") - local r = region.create(2, 0, "plain") - local r = region.create(0, 0, "plain") - local f = faction.create("noreply32@eressea.de", "human", "de") - local u = unit.create(f, r, 10) - u:add_item("cart", 1) - - -- walk - u:clear_orders() - u:add_order("NACH O O") - process_orders() - assert_equal(1, u.region.x) -end - -module("tests.recruit", package.seeall, lunit.testcase) - -function setup() - eressea.free_game() - eressea.settings.set("rules.economy.food", "4") - eressea.settings.set("rules.peasants.growth", "0") -end - -function test_bug_1795_limit() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u1 = one_unit(r,f) - u1:add_item("money", 100000000) - u1:add_order("REKRUTIEREN 9999") - r:set_resource("peasant", 2000) -- no fractional growth! - local peasants = r:get_resource("peasant") - local limit,frac = math.modf(peasants/40) -- one day this should be a parameter - - process_orders() - assert_equal(limit+1, u1.number, u1.number .. "!=" .. (limit+1)) - assert_equal(peasants-limit, r:get_resource("peasant")) -end - -function test_bug_1795_demons() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply@eressea.de", "demon", "de") - local u1 = one_unit(r,f) - r:set_resource("peasant", 2000) - local peasants = r:get_resource("peasant") - local limit,frac = math.modf(peasants/40) - - u1:add_item("money", 100000000) - u1:add_order("REKRUTIEREN 9999") - - process_orders() - - assert_equal(limit+1, u1.number, u1.number .. "!=" .. (limit+1)) - assert_equal(peasants, r:get_resource("peasant")) -end - -module("tests.report", package.seeall, lunit.testcase) - -function setup() - eressea.free_game() - eressea.settings.set("nmr.removenewbie", "0") - eressea.settings.set("nmr.timeout", "0") - eressea.settings.set("rules.economy.food", "4") -end - -local function find_in_report(f, pattern, extension) - extension = extension or "nr" - local filename = config.reportpath .. "/" .. get_turn() .. "-" .. itoa36(f.id) .. "." .. extension - local report = io.open(filename, 'r'); - assert_not_nil(report) - t = report:read("*all") - report:close() - - local start, _ = string.find(t, pattern) --- posix.unlink(filename) - return start~=nil -end - -function test_coordinates_no_plane() - local r = region.create(0, 0, "mountain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - init_reports() - write_report(f) - assert_true(find_in_report(f, r.name .. " %(0,0%), Berg")) -end - -function test_show_shadowmaster_attacks() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - u.race = "shadowmaster" - u:clear_orders() - u:add_order("ZEIGE Schattenmeister") - process_orders() - init_reports() - write_report(f) - assert_false(find_in_report(f, ", ,")) -end - -function test_coordinates_named_plane() - local p = plane.create(0, -3, -3, 7, 7, "Hell") - local r = region.create(0, 0, "mountain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - init_reports() - write_report(f) - assert_true(find_in_report(f, r.name .. " %(0,0,Hell%), Berg")) -end - -function test_coordinates_unnamed_plane() - local p = plane.create(0, -3, -3, 7, 7) - local r = region.create(0, 0, "mountain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - init_reports() - write_report(f) - assert_true(find_in_report(f, r.name .. " %(0,0%), Berg")) -end - -function test_coordinates_noname_plane() - local p = plane.create(0, -3, -3, 7, 7, "") - local r = region.create(0, 0, "mountain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - init_reports() - write_report(f) - assert_true(find_in_report(f, r.name .. " %(0,0%), Berg")) -end - -function test_lighthouse() - local r = region.create(0, 0, "mountain") - local f = faction.create("noreply@eressea.de", "human", "de") - region.create(1, 0, "mountain") - region.create(2, 0, "ocean") - region.create(0, 1, "firewall") - region.create(3, 0, "mountain") - region.create(4, 0, "plain") - local u = unit.create(f, r, 1) - local b = building.create(r, "lighthouse") - b.size = 100 - b.working = true - u.building = b - u:set_skill("perception", 9) - u:add_item("money", 1000) - assert_not_nil(b) - - init_reports() - write_report(f) - assert_true(find_in_report(f, " %(1,0%) %(vom Turm erblickt%)")) - assert_true(find_in_report(f, " %(2,0%) %(vom Turm erblickt%)")) - assert_true(find_in_report(f, " %(3,0%) %(vom Turm erblickt%)")) - - assert_false(find_in_report(f, " %(0,0%) %(vom Turm erblickt%)")) - assert_false(find_in_report(f, " %(0,1%) %(vom Turm erblickt%)")) - assert_false(find_in_report(f, " %(4,0%) %(vom Turm erblickt%)")) -end - -module("tests.parser", package.seeall, lunit.testcase) - -function setup() - eressea.free_game() - eressea.settings.set("rules.economy.food", "4") -- FOOD_IS_FREE - eressea.settings.set("rules.encounters", "0") - eressea.settings.set("rules.move.owner_leave", "0") -end - -function test_parser() - local r = region.create(0, 0, "mountain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - local filename = config.basepath .. "/data/orders.txt" - - local file = io.open(filename, "w") - assert_not_nil(file) - file:write('ERESSEA ' .. itoa36(f.id) .. ' "' .. f.password .. '"\n') - file:write('EINHEIT ' .. itoa36(u.id) .. "\n") - file:write("BENENNEN EINHEIT 'Goldene Herde'\n") - file:close() - - eressea.read_orders(filename) - process_orders() - assert_equal("Goldene Herde", u.name) -end - -function test_bug_1922() - -- see http://bugs.eressea.de/view.php?id=1922 - local r = region.create(0, 0, "ocean") - local r2 = region.create(1, 0, "plain") - r2:set_flag(2) -- region should not be accessible - - local f = faction.create("noreply@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - - local s = _test_create_ship(r) - - eressea.settings.set("rules.ship.drifting","0") -- ships are not drifting - eressea.settings.set("rules.economy.food","4") -- does not need silver - - u.ship = s - u:clear_orders() - u:add_order("NACH O") - u:set_skill("sailing",120) -- supadupa captain able to drive a trireme - process_orders() - assert_not_equal(r2.id, u.region.id) -- unit should not reach r2. - -end - - -function test_bug_1922_by_foot() - -- see http://bugs.eressea.de/view.php?id=1922 - local r = region.create(0, 0, "plain") - local r2 = region.create(1, 0, "plain") - r2:set_flag(2) -- region should not be accessible - - local f = faction.create("noreply@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - - eressea.settings.set("rules.economy.food","4") -- does not need silver - - u:clear_orders() - u:add_order("NACH O") - - process_orders() - assert_not_equal(r2.id, u.region.id) -- unit should not reach r2. - -end - - -function test_bug_1814() - -- see http://bugs.eressea.de/view.php?id=1814 - local r = region.create(0, 0, "mountain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - local filename = config.basepath .. "/data/1814.txt" - - local file = io.open(filename, "w") - file:write('ERESSEA ' .. itoa36(f.id) .. ' "' .. f.password .. '"\n') - file:write('EINHEIT ' .. itoa36(u.id) .. "\n") - file:write("; parse error follows: '\n") - file:write("; ARBEITE\n") - file:close() - - eressea.read_orders(filename) - process_orders() - init_reports() - write_report(f) - assert_false(find_in_report(f, "Der Befehl wurde nicht erkannt", "cr")) -end - -function test_bug_1679() - -- see http://bugs.eressea.de/view.php?id=1679 - local r = region.create(0, 0, "mountain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u = unit.create(f, r, 1) - local filename = config.basepath .. "/data/1679.txt" - - local file = io.open(filename, "w") - file:write('ERESSEA ' .. itoa36(f.id) .. ' "' .. f.password .. '"\n') - file:write('EINHEIT ' .. itoa36(u.id) .. "\n") - file:write("ARBEITEN\n") - file:write("NACH W\n") - file:close() - - eressea.read_orders(filename) - process_orders() - init_reports() - write_report(f) - assert_true(find_in_report(f, "Die Einheit kann keine weiteren langen Befehle", "cr")) - assert_false(find_in_report(f, "entdeckt, dass es keinen Weg nach Westen gibt")) -end - -function test_building_unique0() - local r = region.create(0, 0, "mountain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u = unit.create(f, r, 20) - local f2 = faction.create("noreply@eressea.de", "human", "de") - local u2 = unit.create(f2, r, 20) - local utype = _test_unique_btype() - - if utype ~= nil then - assert_equal("harbour", utype) - u:set_skill("building", 20) - u:add_item("log", 10000) - u:add_item("iron", 10000) - u:add_item("stone", 10000) - u:add_item("money", 10000) - u2:set_skill("building", 20) - u2:add_item("log", 10000) - u2:add_item("iron", 10000) - u2:add_item("stone", 10000) - u2:add_item("money", 10000) - - -- build two harbours in one go - u:clear_orders() - u:add_order("MACHEN ".. translate(utype)) - u2:clear_orders() - u2:add_order("MACHEN ".. translate(utype)) - process_orders() - assert_not_nil(r.buildings) - bcount = 0 - for bs in r.buildings do - assert_equal(1, string.find(bs.name, translate(utype))) - if bs.size >= config.get_building(utype).maxsize then - bcount = bcount + 1 - end - end - assert_equal(1, bcount) -- only one should be completed - else - -- fail() -- no unique building in rules - end -end - -function test_building_unique() - local r = region.create(0, 0, "mountain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u = unit.create(f, r, 20) - local f2 = faction.create("noreply@eressea.de", "human", "de") - local u2 = unit.create(f2, r, 20) - local utype = _test_unique_btype() - - if utype ~= nil then - u:set_skill("building", 20) - u:add_item("log", 10000) - u:add_item("iron", 10000) - u:add_item("stone", 10000) - u:add_item("money", 10000) - u2:set_skill("building", 20) - u2:add_item("log", 10000) - u2:add_item("iron", 10000) - u2:add_item("stone", 10000) - u2:add_item("money", 10000) - - -- start building two harbours - u:clear_orders() - u:add_order("MACHEN 1 Hafen") - u2:clear_orders() - u2:add_order("MACHEN 1 Hafen") - process_orders() - -- finish building partial harbours - u:clear_orders() - u:add_order("MACHEN ".. translate("harbour")) - u2:clear_orders() - u2:add_order("MACHEN Hafen") - process_orders() - if r.buildings == nil then - process_orders() - end - assert_not_nil(r.buildings) - bcount = 0 - local h1 = nil - for bs in r.buildings do - if h1 == nil then - h1 = bs.name - else - assert_equal(h1, bs.name) - end - assert_equal(1, string.find(bs.name, "Hafen")) - if bs.size >= config.get_building(utype).maxsize then - bcount = bcount + 1 - end - end - assert_equal(1, bcount) -- only one should be completed - end -end - -function test_bug_1875_use_normal() - -- see http://bugs.eressea.de/view.php?id=1875 - local r = region.create(0, 0, "plain") - r:set_resource("peasant", 0) - - eressea.settings.set("rules.economy.food", "0") -- food is not free - - local f = faction.create("noreply@eressea.de", "demon", "de") - local u = unit.create(f, r, 1) - - u:add_item("peasantblood", 1) - u:add_order("BENUTZE 1 Bauernblut") - - assert_equal(1, u:get_item("peasantblood")) - assert_equal(0, u:get_potion("peasantblood")) - - process_orders() - - assert_equal(0, u:get_item("peasantblood")) - assert_equal(0, r:get_resource("peasant")) - assert_equal(99, u:get_potion("peasantblood")) -- unit used one peasantblood effect -end - -function test_bug_1875_use_help() - -- see http://bugs.eressea.de/view.php?id=1875 - local r = region.create(0, 0, "plain") - r:set_resource("peasant", 0) - - eressea.settings.set("rules.economy.food", "0") -- food is not free - - local f = faction.create("noreply@eressea.de", "demon", "de") - local u = unit.create(f, r, 1) - local u2 = unit.create(f, r, 1) - - u:add_item("peasantblood", 1) - u:add_order("BENUTZE 1 Bauernblut") - - assert_equal(1, u:get_item("peasantblood")) - assert_equal(0, u:get_potion("peasantblood")) - assert_equal(0, u2:get_item("peasantblood")) - assert_equal(0, u2:get_potion("peasantblood")) - - process_orders() - - assert_equal(0, u:get_item("peasantblood")) - assert_equal(0, r:get_resource("peasant")) - assert_equal(0, r:get_resource("peasant")) - assert_equal(0, u2:get_potion("peasantblood")) -- first unit helps this unit - if 98~=u:get_potion("peasantblood") then - print(get_turn(), f, u) - write_reports() - end - assert_equal(98, u:get_potion("peasantblood")) -- unit uses one peasantblood effect -end - -function test_bug_1875_use_own_first() - -- see http://bugs.eressea.de/view.php?id=1875 - local r = region.create(0, 0, "plain") - r:set_resource("peasant", 0) - - eressea.settings.set("rules.economy.food", "0") -- food is not free - - local f = faction.create("noreply@eressea.de", "demon", "de") - local u = unit.create(f, r, 1) - local u2 = unit.create(f, r, 1) - - u:add_item("peasantblood", 1) - u:add_order("BENUTZE 1 Bauernblut") - u2:add_item("peasantblood", 1) - u2:add_order("BENUTZE 1 Bauernblut") - - assert_equal(1, u:get_item("peasantblood")) - assert_equal(0, u:get_potion("peasantblood")) - assert_equal(1, u2:get_item("peasantblood")) - assert_equal(0, u2:get_potion("peasantblood")) - - process_orders() - - assert_equal(0, u:get_item("peasantblood")) - assert_equal(0, r:get_resource("peasant")) - assert_equal(99, u:get_potion("peasantblood")) -- unit uses one peasantblood effect - assert_equal(99, u2:get_potion("peasantblood")) -- u2 uses its own effect before u's -end - - -function test_bug_1879_follow_unit() - local r = region.create(0, 0, "plain") - local r1 = region.create(1, 0, "plain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u1, u2 = two_units(r, f, f) - u1:clear_orders() - u1:set_skill("magic", 10) - u1:add_order("ZAUBERE STUFE 1 Kleine Flüche") - u1:add_order("FOLGEN EINHEIT " .. itoa36(u2.id)) - u2:clear_orders() - u2:add_order("NACH o") - process_orders() - assert_equal(u1.region.id, r1.id) - assert_equal(u2.region.id, r1.id) -end - -function test_bug_1870_leave_enter_e2() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u1, u2 = two_units(r, f, f) - local mine = building.create(r, "mine") - mine.size = 10 - u1.building = mine - - local b = building.create(r, "castle") - b.size = 10 - u2.building = b - - u1:clear_orders() - u1:add_order("LERNEN Burgenbau ") - u1:add_order("BETRETEN BURG " .. itoa36(b.id)) - - eressea.settings.set("rules.move.owner_leave", "0") - process_orders() - assert_equal(u1.building.id, b.id) -end - -function test_bug_1870_leave_enter_e3() - local r = region.create(0, 0, "plain") - local f = faction.create("noreply@eressea.de", "human", "de") - local u1, u2 = two_units(r, f, f) - local mine = building.create(r, "mine") - mine.size = 10 - u1.building = mine - - local b = building.create(r, "castle") - b.size = 10 - u2.building = b - - u1:clear_orders() - u1:add_order("LERNEN Burgenbau ") - u1:add_order("BETRETEN BURG " .. itoa36(b.id)) - - eressea.settings.set("rules.move.owner_leave", "1") - process_orders() - assert_equal(u1.building.id, mine.id) -end - -function test_faction_flags() - f = faction.create("noreply@eressea.de", "human", "de") - assert_equal(0, f.flags) - f.flags = 42 - assert_equal(42, f.flags) -end diff --git a/core/scripts/tests/orders.lua b/core/scripts/tests/orders.lua deleted file mode 100755 index a2e568525..000000000 --- a/core/scripts/tests/orders.lua +++ /dev/null @@ -1,266 +0,0 @@ -require "lunit" - -local _G = _G -local eressea = eressea -local default_ship = config.ships[1] -local default_building = config.buildings[1] - -module("tests.orders", lunit.testcase) - -local r, f, u - -function setup() - eressea.free_game() - r = _G.region.create(0, 0, "mountain") - f = _G.faction.create("noreply@eressea.de", "human", "de") - u = _G.unit.create(f, r, 1) - u:clear_orders() - eressea.settings.set("rules.economy.food", "4") - eressea.settings.set("nmr.removenewbie", "0") - eressea.settings.set("nmr.timeout", "0") - eressea.settings.set("NewbieImmunity", "0") -end - -function test_learn() - u:add_order("LERNEN Hiebwaffen") - _G.process_orders() - assert_not_equal(0, u:get_skill("melee")) -end - -function test_give() - local u2 = _G.unit.create(f, r, 1) - u:add_item("money", 10) - u:add_order("GIB " .. u2.id .. "5 SILBER") - _G.process_orders() - assert_not_equal(5, u:get_item("money")) - assert_not_equal(5, u2:get_item("money")) -end - -function test_make_temp() - u:add_order("MACHE TEMP 123 'Herpderp'") - u:add_order("// this comment will be copied") - u:add_order("ENDE") - eressea.process.make_temp() - - for x in f.units do - if x.name == 'Herpderp' then u=x end - end - assert_equal('Herpderp', u.name) - assert_equal(0, u.number) - local c = 0 - for o in u.orders do - assert_equal('// this comment will be copied', o) - c = c + 1 - end - assert_equal(1, c) -end - -function test_give_temp() - u.number = 2 - u:add_order("GIB TEMP 123 1 PERSON") - u:add_order("MACHE TEMP 123 'Herpderp'") - u:add_order("ENDE") - _G.process_orders() - assert_equal(1, u.number) - - for x in f.units do - if x.name == 'Herpderp' then u=x end - end - assert_equal('Herpderp', u.name) - assert_equal(1, u.number) -end - -function test_process_settings() - f.options = 0 - u:add_order("EMAIL herp@derp.com") - u:add_order("BANNER 'Herpderp'") - u:add_order("PASSWORT 'HerpDerp'") - u:add_order("OPTION AUSWERTUNG") - eressea.process.settings() - assert_equal("herp@derp.com", f.email) - assert_equal("Herpderp", f.info) - assert_equal("HerpDerp", f.password) - assert_equal(1, f.options) -end - -function test_process_group() - u:add_order("GRUPPE herp") - eressea.process.set_group() - assert_equal('herp', u.group) -end - -function test_process_origin() - u:add_order("URSPRUNG 1 2") - eressea.process.set_origin() - x, y = u.faction:get_origin() - assert_equal(1, x) - assert_equal(2, y) -end - -function test_process_quit() - fno = f.id - u:add_order("STIRB '" .. u.faction.password .. "'") - assert_not_equal(nil, _G.get_faction(fno)) - eressea.process.quit() - eressea.write_game('test.dat') - eressea.free_game() - eressea.read_game('test.dat') - assert_equal(nil, _G.get_faction(fno)) -end - -function test_process_make() - u.region:set_resource('tree', 100) - u:set_skill('forestry', 1) - u:add_order('MACHE HOLZ') - eressea.process.produce() - assert_equal(1, u:get_item('log')) -end - -function test_process_study() - u:add_order("LERNEN Holzfaellen") - eressea.process.update_long_order() - eressea.process.study() - x, y = u.faction:get_origin() - assert_equal(1, u:get_skill('forestry')) -end - -function test_process_teach() - eressea.settings.set("study.random_progress", "0") - u:set_skill('forestry', 3) - u2 = _G.unit.create(f, r, 10) - u2:clear_orders() - u2:set_skill('forestry', 1) - u2:add_order("LERNEN Holzfaellen") - u:add_order("LEHREN " .. _G.itoa36(u2.id)) - eressea.process.update_long_order() - eressea.process.study() - assert_equal(2, u2:get_skill('forestry')) -end - -function test_process_move() - r2 = _G.region.create(1, 0, 'plain') - u:add_order('NACH O') - assert_not_equal(r2.id, u.region.id) - eressea.process.update_long_order() - eressea.process.movement() - assert_equal(r2, u.region) -end - -function test_process_leave() - r2 = _G.region.create(1, 0, 'plain') - b = _G.building.create(r, default_building) - u.building = b - assert_equal(b, u.building) - u:add_order('VERLASSEN') - eressea.process.leave() - assert_not_equal(b, u.building) -end - -function test_process_name_unit() - u:add_order("BENENNE EINHEIT 'Weasel'") - u:add_order("BESCHREIBE EINHEIT 'Juanita'") - eressea.process.set_name() - assert_equal('Weasel', u.name) - assert_equal('Juanita', u.info) -end - -function test_process_name_faction() - u:add_order("BENENNE PARTEI 'Herpderp'") - eressea.process.set_name() - assert_equal('Herpderp', f.name) -end - -function test_process_name_building() - u:add_order("BENENNE GEBAEUDE 'Herpderp'") - u.building = _G.building.create(r, default_building) - eressea.process.set_name() - assert_equal('Herpderp', u.building.name) -end - -function test_process_name_ship() - u:add_order("BENENNE SCHIFF 'Herpderp'") - u.ship = _G.ship.create(r, default_ship) - eressea.process.set_name() - assert_equal('Herpderp', u.ship.name) -end - -function test_process_renumber() - u:add_order("NUMMER EINHEIT 'ii'") - eressea.process.renumber() - assert_equal(666, u.id) -end - -function test_process_enter() - b = _G.building.create(r, default_building) - u:add_order("BETRETEN GEBAEUDE " .. _G.itoa36(b.id)) - eressea.process.enter(1) - assert_equal(b, u.building) -end - -function test_process_restack() - eressea.process.restack() -end - -function test_process_setspells() - eressea.process.set_spells() -end - -function test_process_help() - eressea.process.set_help() -end - -function test_process_contact() - eressea.process.contact() -end - -function test_process_battle() - eressea.process.battle() -end - -function test_process_magic() - eressea.process.magic() -end - -function test_process_give_control() - eressea.process.give_control() -end - -function test_process_regeneration() - eressea.process.regeneration() -end - -function test_process_guard_on() - eressea.process.guard_on() -end - -function test_process_guard_off() - eressea.process.guard_off() -end - -function test_process_explain() - eressea.process.explain() -end - -function test_process_messages() - eressea.process.messages() -end - -function test_process_reserve() - eressea.process.reserve() -end - -function test_process_claim() - eressea.process.claim() -end - -function test_process_follow() - eressea.process.follow() -end - -function test_process_idle() - eressea.process.idle() -end - -function test_process_set_default() - eressea.process.set_default() -end diff --git a/core/scripts/tests/spells.lua b/core/scripts/tests/spells.lua deleted file mode 100755 index 14ad12c87..000000000 --- a/core/scripts/tests/spells.lua +++ /dev/null @@ -1,97 +0,0 @@ -require "lunit" - -module("tests.eressea.spells", package.seeall, lunit.testcase) - -local r, f, u - -function setup() - eressea.free_game() - eressea.settings.set("magic.regeneration.enable", "0") - eressea.settings.set("magic.fumble.enable", "0") - eressea.settings.set("rules.economy.food", "4") - - r = region.create(0, 0, "plain") - f = faction.create("spell_payment@eressea.de", "elf", "de") - u = unit.create(f, r, 1) - u.magic = "gray" - u:set_skill("magic", 12) -end - -function test_spell_payment() - u:add_spell("create_roi") - - local permaura = u:get_pooled("permaura") - u:add_item("money", 3000) - u.aura = 50 - u:clear_orders() - u:add_order("ZAUBERE 'Erschaffe einen Ring der Unsichtbarkeit' ") - process_orders() - write_reports() - assert_equal(1, u:get_item("roi")) - assert_equal(0, u:get_item("money")) - assert_equal(0, u.aura) - assert_equal(permaura-1, u:get_pooled("permaura")) -end - -function test_spell_not_found_no_payment() - local permaura = u:get_pooled("permaura") - u:add_item("money", 3000) - u.aura = 50 - - u:clear_orders() - u:add_order("ZAUBERE 'Erschaffe einen Ring der Unsichtbarkeit' ") - process_orders() - - assert_equal(0, u:get_item("roi")) - assert_equal(3000, u:get_item("money")) - assert_equal(50, u.aura) - assert_equal(permaura, u:get_pooled("permaura")) -end - -function test_create_roi() - u:add_spell('create_roi') - u:cast_spell('create_roi') - assert_equal(1, u:get_item("roi")) -end - -function test_create_roqf() - u:add_spell('create_roqf') - u:cast_spell('create_roqf') - assert_equal(1, u:get_item("roqf")) -end - -function test_create_aots() - u:add_spell('create_aots') - u:cast_spell('create_aots') - assert_equal(1, u:get_item("aots")) -end - -function test_create_ror() - u:add_spell('create_ror') - u:cast_spell('create_ror') - assert_equal(1, u:get_item("ror")) -end - -function test_create_trollbelt() - u:add_spell('create_trollbelt') - u:cast_spell('create_trollbelt') - assert_equal(1, u:get_item("trollbelt")) -end - -function test_create_dreameye() - u:add_spell('create_dreameye') - u:cast_spell('create_dreameye') - assert_equal(1, u:get_item("dreameye")) -end - -function test_create_antimagic() - u:add_spell('create_antimagic') - u:cast_spell('create_antimagic') - assert_equal(1, u:get_item("antimagic")) -end - -function test_create_rop() - u:add_spell('create_rop') - u:cast_spell('create_rop') - assert_equal(1, u:get_item("rop")) -end diff --git a/core/tools/atoi36.c b/core/tools/atoi36.c deleted file mode 100644 index b93fab3a4..000000000 --- a/core/tools/atoi36.c +++ /dev/null @@ -1,36 +0,0 @@ -/* vi: set ts=2: - +-------------------+ Christian Schlittchen - | | Enno Rehling - | Eressea PBEM host | Katja Zedel - | (c) 1998 - 2001 | Henning Peters - | | Ingo Wilken - +-------------------+ Stefan Reich - - This program may not be used, modified or distributed - without prior permission by the authors of Eressea. -*/ - -#include -#include -#include -#include - -int main(int argc, char **argv) -{ - int i = 1, reverse = 0; - if (strstr(argv[0], "itoa36")) - reverse = 1; - if (argc > 1) { - if (strcmp(argv[1], "-r") == 0) { - i = 2; - reverse = 1; - } - } - for (; i != argc; ++i) { - if (reverse) { - printf("%s -> %s\n", argv[i], itoa36(atoi(argv[i]))); - } else - printf("%s -> %d\n", argv[i], atoi36(argv[i])); - } - return 0; -} diff --git a/core/tools/gethash.c b/core/tools/gethash.c deleted file mode 100644 index 75054b11e..000000000 --- a/core/tools/gethash.c +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include -#include - -int main(int argc, char **argv) -{ - char key[4]; - char code[4]; - char result[4]; - int a, i, rot; - for (a = 1; a < argc; ++a) { - const char *str = argv[a]; - size_t len = strlen(str); - str = str + len - 6; - memcpy(key, str, 3); - memcpy(code, str + 3, 3); - result[3] = key[3] = code[3] = 0; - rot = atoi(key); - for (i = 0; i != 3; ++i) - result[(i + rot) % 3] = ((code[i] + 10 - key[i]) % 10) + '0'; - printf("%s %s\n", argv[a], result); - } - return 0; -} diff --git a/core/tools/namegen.c b/core/tools/namegen.c deleted file mode 100644 index 924524179..000000000 --- a/core/tools/namegen.c +++ /dev/null @@ -1,244 +0,0 @@ -/* vi: set ts=2: - +-------------------+ Christian Schlittchen - | | Enno Rehling - | Eressea PBEM host | Katja Zedel - | (c) 1998 - 2001 | Henning Peters - | | Ingo Wilken - +-------------------+ Stefan Reich - - This program may not be used, modified or distributed - without prior permission by the authors of Eressea. - - */ - -#include -#include -#include - -static char *dwarf_syllable1[] = { - "B", "D", "F", "G", "Gl", "H", "K", "L", "M", "N", "R", "S", "T", "Th", "V", -}; - -static char *dwarf_syllable2[] = { - "a", "e", "i", "o", "oi", "u", -}; - -static char *dwarf_syllable3[] = { - "bur", "fur", "gan", "gnus", "gnar", "li", "lin", "lir", "mli", "nar", "nus", - "rin", "ran", "sin", "sil", "sur", -}; - -static char *elf_syllable1[] = { - "Al", "An", "Bal", "Bel", "Cal", "Cel", "El", "Elr", "Elv", "Eow", "Ear", "F", - "Fal", "Fel", "Fin", "G", "Gal", "Gel", "Gl", "Is", "Lan", "Leg", "Lom", - "N", "Nal", "Nel", "S", "Sal", "Sel", "T", "Tal", "Tel", "Thr", "Tin", -}; - -static char *elf_syllable2[] = { - "a", "adrie", "ara", "e", "ebri", "ele", "ere", "i", "io", "ithra", "ilma", - "il-Ga", "ili", "o", "orfi", "u", "y", -}; - -static char *elf_syllable3[] = { - "l", "las", "lad", "ldor", "ldur", "linde", "lith", "mir", "n", "nd", "ndel", - "ndil", "ndir", "nduil", "ng", "mbor", "r", "rith", "ril", "riand", "rion", - "s", "thien", "viel", "wen", "wyn", -}; - -static char *gnome_syllable1[] = { - "Aar", "An", "Ar", "As", "C", "H", "Han", "Har", "Hel", "Iir", "J", "Jan", - "Jar", "K", "L", "M", "Mar", "N", "Nik", "Os", "Ol", "P", "R", "S", "Sam", - "San", "T", "Ter", "Tom", "Ul", "V", "W", "Y", -}; - -static char *gnome_syllable2[] = { - "a", "aa", "ai", "e", "ei", "i", "o", "uo", "u", "uu", -}; - -static char *gnome_syllable3[] = { - "ron", "re", "la", "ki", "kseli", "ksi", "ku", "ja", "ta", "na", "namari", - "neli", "nika", "nikki", "nu", "nukka", "ka", "ko", "li", "kki", "rik", - "po", "to", "pekka", "rjaana", "rjatta", "rjukka", "la", "lla", "lli", "mo", - "nni", -}; - -static char *hobbit_syllable1[] = { - "B", "Ber", "Br", "D", "Der", "Dr", "F", "Fr", "G", "H", "L", "Ler", "M", - "Mer", "N", "P", "Pr", "Per", "R", "S", "T", "W", -}; - -static char *hobbit_syllable2[] = { - "a", "e", "i", "ia", "o", "oi", "u", -}; - -static char *hobbit_syllable3[] = { - "bo", "ck", "decan", "degar", "do", "doc", "go", "grin", "lba", "lbo", "lda", - "ldo", "lla", "ll", "lo", "m", "mwise", "nac", "noc", "nwise", "p", "ppin", - "pper", "tho", "to", -}; - -static char *human_syllable1[] = { - "Ab", "Ac", "Ad", "Af", "Agr", "Ast", "As", "Al", "Adw", "Adr", "Ar", "B", - "Br", "C", "Cr", "Ch", "Cad", "D", "Dr", "Dw", "Ed", "Eth", "Et", "Er", - "El", "Eow", "F", "Fr", "G", "Gr", "Gw", "Gal", "Gl", "H", "Ha", "Ib", - "Jer", "K", "Ka", "Ked", "L", "Loth", "Lar", "Leg", "M", "Mir", "N", "Nyd", - "Ol", "Oc", "On", "P", "Pr", "R", "Rh", "S", "Sev", "T", "Tr", "Th", "V", - "Y", "Z", "W", "Wic", -}; - -static char *human_syllable2[] = { - "a", "ae", "au", "ao", "are", "ale", "ali", "ay", "ardo", "e", "ei", "ea", - "eri", "era", "ela", "eli", "enda", "erra", "i", "ia", "ie", "ire", "ira", - "ila", "ili", "ira", "igo", "o", "oa", "oi", "oe", "ore", "u", "y", -}; - -static char *human_syllable3[] = { - "a", "and", "b", "bwyn", "baen", "bard", "c", "ctred", "cred", "ch", "can", - "d", "dan", "don", "der", "dric", "dfrid", "dus", "f", "g", "gord", "gan", - "l", "li", "lgrin", "lin", "lith", "lath", "loth", "ld", "ldric", "ldan", - "m", "mas", "mos", "mar", "mond", "n", "nydd", "nidd", "nnon", "nwan", - "nyth", "nad", "nn", "nnor", "nd", "p", "r", "ron", "rd", "s", "sh", "seth", - "sean", "t", "th", "tha", "tlan", "trem", "tram", "v", "vudd", "w", "wan", - "win", "wyn", "wyr", "wyr", "wyth", -}; - -static char *orc_syllable1[] = { - "B", "Er", "G", "Gr", "H", "P", "Pr", "R", "V", "Vr", "T", "Tr", "M", "Dr", -}; - -static char *orc_syllable2[] = { - "a", "i", "o", "oo", "u", "ui", -}; - -static char *orc_syllable3[] = { - "dash", "dish", "dush", "gar", "gor", "gdush", "lo", "gdish", "k", "lg", - "nak", "rag", "rbag", "rg", "rk", "ng", "nk", "rt", "ol", "urk", "shnak", - "mog", "mak", "rak", -}; - -static char *entish_syllable1[] = { - "Baum", "Wurzel", "Rinden", "Ast", "Blatt", -}; - -static char *entish_syllable2[] = { - "-", -}; - -static char *entish_syllable3[] = { - "Hüter", "Pflanzer", "Hirte", "Wächter", "Wachser", "Beschützer", -}; - -static char *cthuloid_syllable1[] = { - "Cth", "Az", "Fth", "Ts", "Xo", "Q'N", "R'L", "Ghata", "L", "Zz", "Fl", "Cl", - "S", "Y", -}; - -static char *cthuloid_syllable2[] = { - "nar", "loi", "ul", "lu", "noth", "thon", "ath", "'N", "rhy", "oth", "aza", - "agn", "oa", "og", -}; - -static char *cthuloid_syllable3[] = { - "l", "a", "u", "oa", "oggua", "oth", "ath", "aggua", "lu", "lo", "loth", - "lotha", "agn", "axl", -}; - -static char *create_random_name(race_t race) -{ - static char name[64]; - - switch (race) { - case RC_DWARF: - strcpy(name, - dwarf_syllable1[rng_int() % (sizeof(dwarf_syllable1) / - sizeof(char *))]); - strcat(name, - dwarf_syllable2[rand() % (sizeof(dwarf_syllable2) / sizeof(char *))]); - strcat(name, - dwarf_syllable3[rand() % (sizeof(dwarf_syllable3) / sizeof(char *))]); - break; - case RC_ELF: - strcpy(name, - elf_syllable1[rand() % (sizeof(elf_syllable1) / sizeof(char *))]); - strcat(name, - elf_syllable2[rand() % (sizeof(elf_syllable2) / sizeof(char *))]); - strcat(name, - elf_syllable3[rand() % (sizeof(elf_syllable3) / sizeof(char *))]); - break; -/* - case RACE_GNOME: - strcpy(name, gnome_syllable1[rand()%(sizeof(gnome_syllable1) / sizeof(char*))]); - strcat(name, gnome_syllable2[rand()%(sizeof(gnome_syllable2) / sizeof(char*))]); - strcat(name, gnome_syllable3[rand()%(sizeof(gnome_syllable3) / sizeof(char*))]); - break; -*/ - case RC_HALFLING: - strcpy(name, - hobbit_syllable1[rand() % (sizeof(hobbit_syllable1) / sizeof(char *))]); - strcat(name, - hobbit_syllable2[rand() % (sizeof(hobbit_syllable2) / sizeof(char *))]); - strcat(name, - hobbit_syllable3[rand() % (sizeof(hobbit_syllable3) / sizeof(char *))]); - break; - case RC_HUMAN: - case RC_AQUARIAN: - case RC_CAT: - strcpy(name, - human_syllable1[rand() % (sizeof(human_syllable1) / sizeof(char *))]); - strcat(name, - human_syllable2[rand() % (sizeof(human_syllable2) / sizeof(char *))]); - strcat(name, - human_syllable3[rand() % (sizeof(human_syllable3) / sizeof(char *))]); - break; - case RC_ORC: - case RC_TROLL: - case RC_GOBLIN: - strcpy(name, - orc_syllable1[rand() % (sizeof(orc_syllable1) / sizeof(char *))]); - strcat(name, - orc_syllable2[rand() % (sizeof(orc_syllable2) / sizeof(char *))]); - strcat(name, - orc_syllable3[rand() % (sizeof(orc_syllable3) / sizeof(char *))]); - break; -/* - case RC_TREEMAN: - strcpy(name, entish_syllable1[rand()%(sizeof(entish_syllable1) / sizeof(char*))]); - strcat(name, entish_syllable2[rand()%(sizeof(entish_syllable2) / sizeof(char*))]); - strcat(name, entish_syllable3[rand()%(sizeof(entish_syllable3) / sizeof(char*))]); - break; -*/ - case RC_DAEMON: - case RC_INSECT: - strcpy(name, - cthuloid_syllable1[rand() % (sizeof(cthuloid_syllable1) / - sizeof(char *))]); - strcat(name, - cthuloid_syllable2[rand() % (sizeof(cthuloid_syllable2) / - sizeof(char *))]); - strcat(name, - cthuloid_syllable3[rand() % (sizeof(cthuloid_syllable3) / - sizeof(char *))]); - break; - default: - name[0] = 0; - break; - } - - return name; -} - -int main(void) -{ - race_t race; - - for (race = 0; race < 11; race++) { - int i; - printf("%d:", (int)race); - for (i = 0; i < 20; i++) { - printf(" %s", create_random_name(race)); - } - printf("\n"); - } - - return 0; -}