Merge branch 'i22-fix-sneakpunch' of whats_his_face/Traitor into master
commit
0e275beaa9
|
@ -342,16 +342,7 @@ minetest.register_node('lobby:button_1', {
|
||||||
color = {a = 0, r = 255, g = 255, b = 255}
|
color = {a = 0, r = 255, g = 255, b = 255}
|
||||||
})
|
})
|
||||||
puncher:set_properties({visual_size = {x = 0, y = 0}, collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}})
|
puncher:set_properties({visual_size = {x = 0, y = 0}, collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}})
|
||||||
player_attributes:set_string('mode', 'solo')
|
lobby.builder_to_player(puncher)
|
||||||
local privs = minetest.get_player_privs(name)
|
|
||||||
local player_inv = puncher:get_inventory()
|
|
||||||
player_inv:set_list('main', {})
|
|
||||||
player_inv:set_size('main', 16)
|
|
||||||
privs.fly = nil
|
|
||||||
privs.fast = nil
|
|
||||||
privs.creative = nil
|
|
||||||
privs.areas = nil
|
|
||||||
minetest.set_player_privs(name, privs)
|
|
||||||
puncher:set_pos(game_pos)
|
puncher:set_pos(game_pos)
|
||||||
lobby.game[name] = map_id..'_solo'
|
lobby.game[name] = map_id..'_solo'
|
||||||
minetest.chat_send_player(name, 'Travel back to the lobby with the /lobby chat command.')
|
minetest.chat_send_player(name, 'Travel back to the lobby with the /lobby chat command.')
|
||||||
|
|
|
@ -235,3 +235,63 @@ function lobby.traitor_win(traitor, map_id)
|
||||||
local map_name = game_data['map_name'] or map_id
|
local map_name = game_data['map_name'] or map_id
|
||||||
minetest.chat_send_all('The traitor was victorious on this round in the '..map_name)
|
minetest.chat_send_all('The traitor was victorious on this round in the '..map_name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--[[ is_builder(player: ObjectRef): bool
|
||||||
|
|
||||||
|
Return true if `player` has builder privs.
|
||||||
|
--]]
|
||||||
|
function lobby.is_builder(player)
|
||||||
|
if player == nil then return nil end
|
||||||
|
|
||||||
|
local name = player:get_player_name()
|
||||||
|
return minetest.check_player_privs(name, {builder = true})
|
||||||
|
end
|
||||||
|
|
||||||
|
--[[ builder_to_player(player: ObjectRef)
|
||||||
|
|
||||||
|
Cast builder into regular player, including switching inventories, revoking privs, etc.
|
||||||
|
--]]
|
||||||
|
function lobby.builder_to_player(player)
|
||||||
|
if player == nil then return end
|
||||||
|
|
||||||
|
local pl_name = player:get_player_name()
|
||||||
|
local pl_attr = player:get_meta()
|
||||||
|
local pl_priv = minetest.get_player_privs(pl_name)
|
||||||
|
pl_priv.creative = nil
|
||||||
|
pl_priv.fly = nil
|
||||||
|
pl_priv.fast = nil
|
||||||
|
pl_priv.worldedit = nil
|
||||||
|
pl_priv.areas = nil
|
||||||
|
minetest.set_player_privs(pl_name, pl_priv)
|
||||||
|
pl_attr:set_string('mode', 'solo')
|
||||||
|
local inv = player:get_inventory()
|
||||||
|
local old_inv = inv:get_list('main')
|
||||||
|
inv:set_list('builder', old_inv)
|
||||||
|
inv:set_size('main', 16)
|
||||||
|
inv:set_list('main', {})
|
||||||
|
end
|
||||||
|
|
||||||
|
--[[ player_to_builder(player: ObjectRef)
|
||||||
|
|
||||||
|
Cast regular player into builder, including switching inventories, granting privs, etc.
|
||||||
|
Does NOT check if the player has acquired the builder priv. Call lobby.is_builder()
|
||||||
|
beforehand to make sure player is allowed to be lifted.
|
||||||
|
--]]
|
||||||
|
function lobby.player_to_builder(player)
|
||||||
|
if player == nil then return end
|
||||||
|
|
||||||
|
local pl_name = player:get_player_name()
|
||||||
|
local pl_attr = player:get_meta()
|
||||||
|
local pl_priv = minetest.get_player_privs(pl_name)
|
||||||
|
pl_priv.creative = true
|
||||||
|
pl_priv.fly = true
|
||||||
|
pl_priv.fast = true
|
||||||
|
minetest.set_player_privs(pl_name, pl_priv)
|
||||||
|
pl_attr:set_string('mode', 'builder')
|
||||||
|
local inv = player:get_inventory()
|
||||||
|
local old_inv = inv:get_list('builder')
|
||||||
|
inv:set_list('builder', {})
|
||||||
|
inv:set_size('main', 32)
|
||||||
|
inv:set_list('main', old_inv)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,3 @@
|
||||||
local function not_builder(player)
|
|
||||||
local name = player:get_player_name()
|
|
||||||
return not minetest.check_player_privs(name, { builder = true })
|
|
||||||
end
|
|
||||||
|
|
||||||
local function lobby_shop_priv(player)
|
local function lobby_shop_priv(player)
|
||||||
local player_attributes = player:get_meta()
|
local player_attributes = player:get_meta()
|
||||||
local xp = player_attributes:get_float('xp')
|
local xp = player_attributes:get_float('xp')
|
||||||
|
@ -57,7 +52,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
if formname == 'lobby:shop_priv' then
|
if formname == 'lobby:shop_priv' then
|
||||||
local player_attributes = player:get_meta()
|
local player_attributes = player:get_meta()
|
||||||
if fields.builder then
|
if fields.builder then
|
||||||
if lobby.take_xp(player, 100) and not_builder(player) then
|
if lobby.take_xp(player, 100) and not lobby.is_builder(player) then
|
||||||
minetest.chat_send_player(player:get_player_name(), 'You just bought the Builder Privilege!')
|
minetest.chat_send_player(player:get_player_name(), 'You just bought the Builder Privilege!')
|
||||||
local privs = minetest.get_player_privs(name)
|
local privs = minetest.get_player_privs(name)
|
||||||
privs.builder = true
|
privs.builder = true
|
||||||
|
@ -72,35 +67,14 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
end
|
end
|
||||||
minetest.show_formspec(name, 'lobby:shop_priv', lobby_shop_priv(player))
|
minetest.show_formspec(name, 'lobby:shop_priv', lobby_shop_priv(player))
|
||||||
elseif fields.toggle_build then
|
elseif fields.toggle_build then
|
||||||
if not not_builder(player) then
|
if lobby.is_builder(player) then
|
||||||
local privs = minetest.get_player_privs(name)
|
local privs = minetest.get_player_privs(name)
|
||||||
if privs.creative == true then
|
if privs.creative == true then
|
||||||
local privs = minetest.get_player_privs(name)
|
lobby.builder_to_player(player)
|
||||||
privs.creative = nil
|
|
||||||
privs.fly = nil
|
|
||||||
privs.fast = nil
|
|
||||||
privs.worldedit = nil
|
|
||||||
privs.areas = nil
|
|
||||||
minetest.set_player_privs(name, privs)
|
|
||||||
minetest.chat_send_player(name, 'Privs revoked! Play some games in the lobby')
|
minetest.chat_send_player(name, 'Privs revoked! Play some games in the lobby')
|
||||||
player_attributes:set_string('mode', 'solo')
|
|
||||||
local inv = player:get_inventory()
|
|
||||||
local old_inv = inv:get_list('main')
|
|
||||||
inv:set_list('builder', old_inv)
|
|
||||||
inv:set_size('main', 16)
|
|
||||||
inv:set_list('main', {})
|
|
||||||
else
|
else
|
||||||
privs.creative = true
|
lobby.player_to_builder(player)
|
||||||
privs.fly = true
|
|
||||||
privs.fast = true
|
|
||||||
minetest.set_player_privs(name, privs)
|
|
||||||
minetest.chat_send_player(name, 'Privs restored!')
|
minetest.chat_send_player(name, 'Privs restored!')
|
||||||
player_attributes:set_string('mode', 'builder')
|
|
||||||
local inv = player:get_inventory()
|
|
||||||
local old_inv = inv:get_list('builder')
|
|
||||||
inv:set_list('builder', {})
|
|
||||||
inv:set_size('main', 32)
|
|
||||||
inv:set_list('main', old_inv)
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
minetest.chat_send_player(name, 'You need to buy the Builder priv first!')
|
minetest.chat_send_player(name, 'You need to buy the Builder priv first!')
|
||||||
|
|
|
@ -1,158 +1,17 @@
|
||||||
lu = require('luaunit/luaunit')
|
lu = require('luaunit/luaunit')
|
||||||
|
|
||||||
|
-- mtmock pulls in all other mocks atm
|
||||||
mtmock = require('mtmock')
|
mtmock = require('mtmock')
|
||||||
|
|
||||||
|
-- load in testable code, so the suites don't have to bother with it
|
||||||
dofile(mtmock.MODDIR .. 'lobby/lobby.lua')
|
dofile(mtmock.MODDIR .. 'lobby/lobby.lua')
|
||||||
dofile(mtmock.MODDIR .. 'lobby/chat.lua')
|
dofile(mtmock.MODDIR .. 'lobby/chat.lua')
|
||||||
dofile(mtmock.MODDIR .. 'lobby/stats.lua')
|
dofile(mtmock.MODDIR .. 'lobby/stats.lua')
|
||||||
|
dofile(mtmock.MODDIR .. 'lobby/functions.lua')
|
||||||
|
|
||||||
-- test stats.lua
|
-- include all test suites
|
||||||
TestStats = {}
|
dofile('suites/lobby_stats.lua')
|
||||||
function TestStats:setUp()
|
dofile('suites/lobby_functions.lua')
|
||||||
lobby.savedata = {}
|
|
||||||
lobby.savedata.stats = {}
|
|
||||||
end
|
|
||||||
|
|
||||||
function TestStats:testSoloVisit1()
|
|
||||||
lobby.update_stats('0', 'solo')
|
|
||||||
lu.assertNotNil(lobby.savedata)
|
|
||||||
lu.assertNotNil(lobby.savedata.stats)
|
|
||||||
stats = lobby.savedata.stats['0']
|
|
||||||
lu.assertNotNil(stats)
|
|
||||||
lu.assertEquals(stats.solo_play, 1)
|
|
||||||
lu.assertEquals(stats.multi_play, 0)
|
|
||||||
lu.assertEquals(stats.winner_traitor, 0)
|
|
||||||
lu.assertEquals(stats.winner_team, 0)
|
|
||||||
lu.assertEquals(stats.max_players, 0)
|
|
||||||
lu.assertEquals(stats.player_count, 0)
|
|
||||||
end
|
|
||||||
|
|
||||||
function TestStats:testSoloVisitN()
|
|
||||||
lobby.update_stats('1', 'solo')
|
|
||||||
lobby.update_stats('1', 'solo')
|
|
||||||
lobby.update_stats('1', 'solo')
|
|
||||||
lobby.update_stats('1', 'solo')
|
|
||||||
lobby.update_stats('1', 'solo')
|
|
||||||
lobby.update_stats('1', 'solo')
|
|
||||||
stats = lobby.savedata.stats['1']
|
|
||||||
lu.assertNotNil(stats)
|
|
||||||
lu.assertEquals(stats.solo_play, 6)
|
|
||||||
lu.assertEquals(stats.multi_play, 0)
|
|
||||||
lu.assertEquals(stats.winner_traitor, 0)
|
|
||||||
lu.assertEquals(stats.winner_team, 0)
|
|
||||||
lu.assertEquals(stats.max_players, 0)
|
|
||||||
lu.assertEquals(stats.player_count, 0)
|
|
||||||
end
|
|
||||||
|
|
||||||
function TestStats:testMultiVisit1()
|
|
||||||
lobby.update_stats('0', 'player', '', 0)
|
|
||||||
lobby.update_stats('5', 'player', '', 5)
|
|
||||||
lobby.update_stats('42', 'player', '', 42)
|
|
||||||
stats = lobby.savedata.stats['0']
|
|
||||||
lu.assertNotNil(stats)
|
|
||||||
lu.assertEquals(stats.solo_play, 0)
|
|
||||||
lu.assertEquals(stats.multi_play, 1)
|
|
||||||
lu.assertEquals(stats.winner_traitor, 0)
|
|
||||||
lu.assertEquals(stats.winner_team, 0)
|
|
||||||
lu.assertEquals(stats.max_players, 0)
|
|
||||||
lu.assertEquals(stats.player_count, 0)
|
|
||||||
stats = lobby.savedata.stats['5']
|
|
||||||
lu.assertNotNil(stats)
|
|
||||||
lu.assertEquals(stats.solo_play, 0)
|
|
||||||
lu.assertEquals(stats.multi_play, 1)
|
|
||||||
lu.assertEquals(stats.winner_traitor, 0)
|
|
||||||
lu.assertEquals(stats.winner_team, 0)
|
|
||||||
lu.assertEquals(stats.max_players, 5)
|
|
||||||
lu.assertEquals(stats.player_count, 5)
|
|
||||||
stats = lobby.savedata.stats['42']
|
|
||||||
lu.assertNotNil(stats)
|
|
||||||
lu.assertEquals(stats.solo_play, 0)
|
|
||||||
lu.assertEquals(stats.multi_play, 1)
|
|
||||||
lu.assertEquals(stats.winner_traitor, 0)
|
|
||||||
lu.assertEquals(stats.winner_team, 0)
|
|
||||||
lu.assertEquals(stats.max_players, 42)
|
|
||||||
lu.assertEquals(stats.player_count, 42)
|
|
||||||
end
|
|
||||||
|
|
||||||
function TestStats:testMultiVisitN()
|
|
||||||
lobby.update_stats('N', 'player', '', 3)
|
|
||||||
lobby.update_stats('N', 'player', '', 3)
|
|
||||||
lobby.update_stats('N', 'player', '', 3)
|
|
||||||
lobby.update_stats('N', 'player', '', 3)
|
|
||||||
lobby.update_stats('N', 'player', '', 3)
|
|
||||||
lobby.update_stats('N', 'player', '', 3)
|
|
||||||
lobby.update_stats('N', 'player', '', 3)
|
|
||||||
stats = lobby.savedata.stats['N']
|
|
||||||
lu.assertNotNil(stats)
|
|
||||||
lu.assertEquals(stats.multi_play, 7)
|
|
||||||
end
|
|
||||||
|
|
||||||
function TestStats:testTeamPlays()
|
|
||||||
-- stats #1
|
|
||||||
lobby.update_stats('2', 'player', '', 4)
|
|
||||||
lobby.update_stats('2', '', 'traitor')
|
|
||||||
stats = lobby.savedata.stats['2']
|
|
||||||
lu.assertEquals(stats.solo_play, 0)
|
|
||||||
lu.assertEquals(stats.multi_play, 1)
|
|
||||||
lu.assertEquals(stats.winner_traitor, 1)
|
|
||||||
lu.assertEquals(stats.winner_team, 0)
|
|
||||||
lu.assertEquals(stats.max_players, 4)
|
|
||||||
lu.assertEquals(stats.player_count, 4)
|
|
||||||
|
|
||||||
-- stats #2
|
|
||||||
lobby.update_stats('2', 'player', '', 2)
|
|
||||||
lobby.update_stats('2', '', 'team')
|
|
||||||
lu.assertEquals(stats.solo_play, 0)
|
|
||||||
lu.assertEquals(stats.multi_play, 2)
|
|
||||||
lu.assertEquals(stats.winner_traitor, 1)
|
|
||||||
lu.assertEquals(stats.winner_team, 1)
|
|
||||||
lu.assertEquals(stats.max_players, 4)
|
|
||||||
lu.assertEquals(stats.player_count, 3)
|
|
||||||
|
|
||||||
-- stats #3
|
|
||||||
lobby.update_stats('2', 'player', '', 3)
|
|
||||||
lobby.update_stats('2', '', 'traitor')
|
|
||||||
lu.assertEquals(stats.solo_play, 0)
|
|
||||||
lu.assertEquals(stats.multi_play, 3)
|
|
||||||
lu.assertEquals(stats.winner_traitor, 2)
|
|
||||||
lu.assertEquals(stats.winner_team, 1)
|
|
||||||
lu.assertEquals(stats.max_players, 4)
|
|
||||||
lu.assertEquals(stats.player_count, 3)
|
|
||||||
|
|
||||||
-- stats #4
|
|
||||||
lobby.update_stats('2', 'player', '', 7)
|
|
||||||
lobby.update_stats('2', '', 'team')
|
|
||||||
lu.assertEquals(stats.solo_play, 0)
|
|
||||||
lu.assertEquals(stats.multi_play, 4)
|
|
||||||
lu.assertEquals(stats.winner_traitor, 2)
|
|
||||||
lu.assertEquals(stats.winner_team, 2)
|
|
||||||
lu.assertEquals(stats.max_players, 7)
|
|
||||||
lu.assertEquals(stats.player_count, 4)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Test for mixed plays, ignoring solo plays completely
|
|
||||||
-- (i.e., player_count _only_ averages team plays)
|
|
||||||
function TestStats:testMixedPlays()
|
|
||||||
lobby.update_stats('3', 'player', '', 4)
|
|
||||||
lobby.update_stats('3', '', 'team')
|
|
||||||
lobby.update_stats('3', 'player', '', 4)
|
|
||||||
lobby.update_stats('3', '', 'team')
|
|
||||||
lobby.update_stats('3', 'player', '', 4)
|
|
||||||
lobby.update_stats('3', '', 'team')
|
|
||||||
lobby.update_stats('3', 'player', '', 4)
|
|
||||||
lobby.update_stats('3', '', 'traitor')
|
|
||||||
lobby.update_stats('3', 'solo')
|
|
||||||
lobby.update_stats('3', 'solo')
|
|
||||||
lobby.update_stats('3', 'solo')
|
|
||||||
stats = lobby.savedata.stats['3']
|
|
||||||
lu.assertEquals(stats.solo_play, 3)
|
|
||||||
lu.assertEquals(stats.multi_play, 4)
|
|
||||||
lu.assertEquals(stats.winner_traitor, 1)
|
|
||||||
lu.assertEquals(stats.winner_team, 3)
|
|
||||||
lu.assertEquals(stats.max_players, 4)
|
|
||||||
lu.assertEquals(stats.player_count, 4) -- 4 team plays x 4 players / 4 rounds
|
|
||||||
end
|
|
||||||
|
|
||||||
--[[ TestStats ]]--
|
|
||||||
|
|
||||||
os.exit(lu.LuaUnit.run())
|
os.exit(lu.LuaUnit.run())
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
-- inventory mock
|
||||||
|
InventoryMock = {}
|
||||||
|
InventoryMock.__index = InventoryMock
|
||||||
|
|
||||||
|
function InventoryMock:new()
|
||||||
|
inventory = {}
|
||||||
|
inventory.lists = {}
|
||||||
|
inventory.sizes = {}
|
||||||
|
inventory.lists.main = {}
|
||||||
|
inventory.sizes.main = 32
|
||||||
|
setmetatable(inventory, self)
|
||||||
|
return inventory
|
||||||
|
end
|
||||||
|
|
||||||
|
function InventoryMock:get_list(name)
|
||||||
|
return self.lists[name]
|
||||||
|
end
|
||||||
|
|
||||||
|
function InventoryMock:set_list(name, list)
|
||||||
|
self.lists[name] = list
|
||||||
|
end
|
||||||
|
|
||||||
|
function InventoryMock:get_size(name)
|
||||||
|
return self.sizes[name]
|
||||||
|
end
|
||||||
|
|
||||||
|
function InventoryMock:set_size(name, new_size)
|
||||||
|
self.sizes[name] = new_size
|
||||||
|
end
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
-- player mock
|
||||||
|
PlayerMock = {}
|
||||||
|
PlayerMock.__index = PlayerMock
|
||||||
|
|
||||||
|
function PlayerMock:new(pl_name)
|
||||||
|
player = {}
|
||||||
|
player.name = pl_name
|
||||||
|
player.meta = SettingsMock:new()
|
||||||
|
player.inventory = InventoryMock:new()
|
||||||
|
setmetatable(player, self)
|
||||||
|
return player
|
||||||
|
end
|
||||||
|
|
||||||
|
function PlayerMock:get_player_name()
|
||||||
|
return self.name
|
||||||
|
end
|
||||||
|
|
||||||
|
function PlayerMock:get_meta()
|
||||||
|
return self.meta
|
||||||
|
end
|
||||||
|
|
||||||
|
function PlayerMock:get_inventory()
|
||||||
|
return self.inventory
|
||||||
|
end
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
-- settings mock
|
||||||
|
SettingsMock = {}
|
||||||
|
SettingsMock.__index = SettingsMock
|
||||||
|
|
||||||
|
function SettingsMock:new()
|
||||||
|
settings = {}
|
||||||
|
setmetatable(settings, self)
|
||||||
|
return settings
|
||||||
|
end
|
||||||
|
|
||||||
|
function SettingsMock:get_bool(key)
|
||||||
|
-- TODO: add basic type checks
|
||||||
|
return self[key]
|
||||||
|
end
|
||||||
|
|
||||||
|
function SettingsMock:get_string(key)
|
||||||
|
return self[key]
|
||||||
|
end
|
||||||
|
|
||||||
|
function SettingsMock:set_string(key, value)
|
||||||
|
self[key] = value
|
||||||
|
end
|
||||||
|
|
|
@ -1,18 +1,46 @@
|
||||||
mtmock = {}
|
mtmock = {}
|
||||||
mtmock.settings = {}
|
mtmock.mod_storage = {}
|
||||||
dofile('mtmock.conf')
|
dofile('mtmock.conf')
|
||||||
|
dofile('mocks/settings.lua')
|
||||||
|
dofile('mocks/inventory.lua')
|
||||||
|
dofile('mocks/player.lua')
|
||||||
|
|
||||||
|
mtmock.settings = SettingsMock:new()
|
||||||
|
|
||||||
-- bind minetest and core aliases and
|
-- bind minetest and core aliases and
|
||||||
-- work with minetest alias from here on
|
-- work with minetest alias from here on
|
||||||
minetest = mtmock
|
minetest = mtmock
|
||||||
core = mtmock
|
core = mtmock
|
||||||
|
|
||||||
|
--[[ //////////////////// CORE STUBS -- BEGIN \\\\\\\\\\\\\\\\\\\\ ]]--
|
||||||
|
|
||||||
function core.get_builtin_path()
|
function core.get_builtin_path()
|
||||||
return core.SCRIPTDIR
|
return core.SCRIPTDIR
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function core.register_on_joinplayer(join_fun)
|
||||||
|
end
|
||||||
|
|
||||||
|
function core.register_on_leaveplayer(leave_fun)
|
||||||
|
end
|
||||||
|
|
||||||
|
--[[ \\\\\\\\\\\\\\\\\\\\ CORE STUBS -- END //////////////////// ]]--
|
||||||
|
|
||||||
|
|
||||||
|
--[[ //////////////////// MTMOCK API -- BEGIN \\\\\\\\\\\\\\\\\\\\ ]]--
|
||||||
|
|
||||||
|
function mtmock.add_player(pl_name)
|
||||||
|
player = PlayerMock:new(pl_name)
|
||||||
|
minetest.connected_players[pl_name] = player
|
||||||
|
return player
|
||||||
|
end
|
||||||
|
|
||||||
|
--[[ \\\\\\\\\\\\\\\\\\\\ MTMOCK API -- END //////////////////// ]]--
|
||||||
|
|
||||||
|
|
||||||
-- load MT's serialize functions
|
-- load MT's serialize functions
|
||||||
dofile(core.get_builtin_path() .. 'common/serialize.lua')
|
dofile(core.get_builtin_path() .. 'common/serialize.lua')
|
||||||
|
dofile(core.get_builtin_path() .. 'game/misc.lua')
|
||||||
|
|
||||||
minetest.connected_players = {}
|
minetest.connected_players = {}
|
||||||
minetest.worldpath = mtmock.WORLDDIR
|
minetest.worldpath = mtmock.WORLDDIR
|
||||||
|
@ -42,4 +70,20 @@ function minetest.setting_get_pos(setting)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function minetest.get_mod_storage()
|
||||||
|
return mtmock.mod_storage
|
||||||
|
end
|
||||||
|
|
||||||
|
function minetest.get_player_privs(pl_name)
|
||||||
|
if pl_name == nil or minetest.privs == nil then return nil end
|
||||||
|
return minetest.privs[pl_name]
|
||||||
|
end
|
||||||
|
|
||||||
|
function minetest.set_player_privs(pl_name, pl_privs)
|
||||||
|
if pl_name ~= nil and minetest.privs ~= nil then
|
||||||
|
minetest.privs[pl_name] = pl_privs
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
return mtmock
|
return mtmock
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
-- lobby/functions.lua
|
||||||
|
TestLobbyFunctions = {}
|
||||||
|
function TestLobbyFunctions:setUp()
|
||||||
|
mtmock.privs = {
|
||||||
|
['p1'] = {},
|
||||||
|
['p2'] = {creative=true, fly=true, fast=true},
|
||||||
|
['p3'] = {builder=false, creative=true, fly=true, fast=true},
|
||||||
|
['p4'] = {builder=false, creative=false, fly=true, fast=true},
|
||||||
|
['b1'] = {builder=true, creative=true, fly=true, fast=true},
|
||||||
|
['b2'] = {builder=true, creative=false, fly=true, fast=true},
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
function TestLobbyFunctions:testIsBuilder()
|
||||||
|
p1 = mtmock.add_player('p1')
|
||||||
|
p2 = mtmock.add_player('p2')
|
||||||
|
p3 = mtmock.add_player('p3')
|
||||||
|
p4 = mtmock.add_player('p4')
|
||||||
|
b1 = mtmock.add_player('b1')
|
||||||
|
b2 = mtmock.add_player('b2')
|
||||||
|
lu.assertIsNil(lobby.is_builder(nil))
|
||||||
|
lu.assertIsFalse(lobby.is_builder(p1))
|
||||||
|
lu.assertIsFalse(lobby.is_builder(p2))
|
||||||
|
lu.assertIsFalse(lobby.is_builder(p3))
|
||||||
|
lu.assertIsFalse(lobby.is_builder(p4))
|
||||||
|
lu.assertIsTrue(lobby.is_builder(b1))
|
||||||
|
lu.assertIsTrue(lobby.is_builder(b2))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- does lobby.builder_to_player() reset the player privileges?
|
||||||
|
function TestLobbyFunctions:testBuilderToPlayerResetsPrivs()
|
||||||
|
b1 = mtmock.add_player('b1')
|
||||||
|
lobby.builder_to_player(b1)
|
||||||
|
b1_privs = minetest.get_player_privs('b1')
|
||||||
|
lu.assertIsNil(b1_privs.creative)
|
||||||
|
lu.assertIsNil(b1_privs.fly)
|
||||||
|
lu.assertIsNil(b1_privs.fast)
|
||||||
|
|
||||||
|
b2 = mtmock.add_player('b2')
|
||||||
|
lobby.builder_to_player(b2)
|
||||||
|
b2_privs = minetest.get_player_privs('b2')
|
||||||
|
lu.assertIsNil(b2_privs.creative)
|
||||||
|
lu.assertIsNil(b2_privs.fly)
|
||||||
|
lu.assertIsNil(b2_privs.fast)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- does lobby.builder_to_player() set the player mode to 'solo'?
|
||||||
|
function TestLobbyFunctions:testBuilderToPlayerSetsSoloMode()
|
||||||
|
b1 = mtmock.add_player('b1')
|
||||||
|
lobby.builder_to_player(b1)
|
||||||
|
b1_attrs = b1:get_meta()
|
||||||
|
lu.assertEquals(b1_attrs:get_string('mode'), 'solo')
|
||||||
|
|
||||||
|
b2 = mtmock.add_player('b2')
|
||||||
|
lobby.builder_to_player(b2)
|
||||||
|
b2_attrs = b2:get_meta()
|
||||||
|
lu.assertEquals(b2_attrs:get_string('mode'), 'solo')
|
||||||
|
end
|
||||||
|
|
||||||
|
-- does lobby.player_to_builder() restore builder privs?
|
||||||
|
function TestLobbyFunctions:testPlayerToBuilderRestoresPrivs()
|
||||||
|
p1 = mtmock.add_player('p1')
|
||||||
|
lobby.player_to_builder(p1)
|
||||||
|
p1_privs = minetest.get_player_privs('p1')
|
||||||
|
lu.assertIsTrue(p1_privs.creative)
|
||||||
|
lu.assertIsTrue(p1_privs.fly)
|
||||||
|
lu.assertIsTrue(p1_privs.fast)
|
||||||
|
|
||||||
|
p2 = mtmock.add_player('p2')
|
||||||
|
lobby.player_to_builder(p2)
|
||||||
|
p2_privs = minetest.get_player_privs('p2')
|
||||||
|
lu.assertIsTrue(p2_privs.creative)
|
||||||
|
lu.assertIsTrue(p2_privs.fly)
|
||||||
|
lu.assertIsTrue(p2_privs.fast)
|
||||||
|
|
||||||
|
p3 = mtmock.add_player('p3')
|
||||||
|
lobby.player_to_builder(p3)
|
||||||
|
p3_privs = minetest.get_player_privs('p3')
|
||||||
|
lu.assertIsTrue(p3_privs.creative)
|
||||||
|
lu.assertIsTrue(p3_privs.fly)
|
||||||
|
lu.assertIsTrue(p3_privs.fast)
|
||||||
|
|
||||||
|
p4 = mtmock.add_player('p4')
|
||||||
|
lobby.player_to_builder(p4)
|
||||||
|
p4_privs = minetest.get_player_privs('p4')
|
||||||
|
lu.assertIsTrue(p4_privs.creative)
|
||||||
|
lu.assertIsTrue(p4_privs.fly)
|
||||||
|
lu.assertIsTrue(p4_privs.fast)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- does lobby.player_to_builder() set the player mode to 'builder'?
|
||||||
|
function TestLobbyFunctions:testPlayerToBuilderSetsBuilderMode()
|
||||||
|
p1 = mtmock.add_player('p1')
|
||||||
|
lobby.player_to_builder(p1)
|
||||||
|
p1_attrs = p1:get_meta()
|
||||||
|
lu.assertEquals(p1_attrs:get_string('mode'), 'builder')
|
||||||
|
|
||||||
|
p2 = mtmock.add_player('p2')
|
||||||
|
lobby.player_to_builder(p2)
|
||||||
|
p2_attrs = p2:get_meta()
|
||||||
|
lu.assertEquals(p2_attrs:get_string('mode'), 'builder')
|
||||||
|
|
||||||
|
p3 = mtmock.add_player('p3')
|
||||||
|
lobby.player_to_builder(p3)
|
||||||
|
p3_attrs = p3:get_meta()
|
||||||
|
lu.assertEquals(p3_attrs:get_string('mode'), 'builder')
|
||||||
|
|
||||||
|
p4 = mtmock.add_player('p4')
|
||||||
|
lobby.player_to_builder(p4)
|
||||||
|
p4_attrs = p4:get_meta()
|
||||||
|
lu.assertEquals(p4_attrs:get_string('mode'), 'builder')
|
||||||
|
end
|
||||||
|
|
||||||
|
--[[ TestLobbyFunctions ]]--
|
|
@ -0,0 +1,149 @@
|
||||||
|
-- lobby/stats.lua
|
||||||
|
TestLobbyStats = {}
|
||||||
|
function TestLobbyStats:setUp()
|
||||||
|
lobby.savedata = {}
|
||||||
|
lobby.savedata.stats = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
function TestLobbyStats:testSoloVisit1()
|
||||||
|
lobby.update_stats('0', 'solo')
|
||||||
|
lu.assertNotNil(lobby.savedata)
|
||||||
|
lu.assertNotNil(lobby.savedata.stats)
|
||||||
|
stats = lobby.savedata.stats['0']
|
||||||
|
lu.assertNotNil(stats)
|
||||||
|
lu.assertEquals(stats.solo_play, 1)
|
||||||
|
lu.assertEquals(stats.multi_play, 0)
|
||||||
|
lu.assertEquals(stats.winner_traitor, 0)
|
||||||
|
lu.assertEquals(stats.winner_team, 0)
|
||||||
|
lu.assertEquals(stats.max_players, 0)
|
||||||
|
lu.assertEquals(stats.player_count, 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
function TestLobbyStats:testSoloVisitN()
|
||||||
|
lobby.update_stats('1', 'solo')
|
||||||
|
lobby.update_stats('1', 'solo')
|
||||||
|
lobby.update_stats('1', 'solo')
|
||||||
|
lobby.update_stats('1', 'solo')
|
||||||
|
lobby.update_stats('1', 'solo')
|
||||||
|
lobby.update_stats('1', 'solo')
|
||||||
|
stats = lobby.savedata.stats['1']
|
||||||
|
lu.assertNotNil(stats)
|
||||||
|
lu.assertEquals(stats.solo_play, 6)
|
||||||
|
lu.assertEquals(stats.multi_play, 0)
|
||||||
|
lu.assertEquals(stats.winner_traitor, 0)
|
||||||
|
lu.assertEquals(stats.winner_team, 0)
|
||||||
|
lu.assertEquals(stats.max_players, 0)
|
||||||
|
lu.assertEquals(stats.player_count, 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
function TestLobbyStats:testMultiVisit1()
|
||||||
|
lobby.update_stats('0', 'player', '', 0)
|
||||||
|
lobby.update_stats('5', 'player', '', 5)
|
||||||
|
lobby.update_stats('42', 'player', '', 42)
|
||||||
|
stats = lobby.savedata.stats['0']
|
||||||
|
lu.assertNotNil(stats)
|
||||||
|
lu.assertEquals(stats.solo_play, 0)
|
||||||
|
lu.assertEquals(stats.multi_play, 1)
|
||||||
|
lu.assertEquals(stats.winner_traitor, 0)
|
||||||
|
lu.assertEquals(stats.winner_team, 0)
|
||||||
|
lu.assertEquals(stats.max_players, 0)
|
||||||
|
lu.assertEquals(stats.player_count, 0)
|
||||||
|
stats = lobby.savedata.stats['5']
|
||||||
|
lu.assertNotNil(stats)
|
||||||
|
lu.assertEquals(stats.solo_play, 0)
|
||||||
|
lu.assertEquals(stats.multi_play, 1)
|
||||||
|
lu.assertEquals(stats.winner_traitor, 0)
|
||||||
|
lu.assertEquals(stats.winner_team, 0)
|
||||||
|
lu.assertEquals(stats.max_players, 5)
|
||||||
|
lu.assertEquals(stats.player_count, 5)
|
||||||
|
stats = lobby.savedata.stats['42']
|
||||||
|
lu.assertNotNil(stats)
|
||||||
|
lu.assertEquals(stats.solo_play, 0)
|
||||||
|
lu.assertEquals(stats.multi_play, 1)
|
||||||
|
lu.assertEquals(stats.winner_traitor, 0)
|
||||||
|
lu.assertEquals(stats.winner_team, 0)
|
||||||
|
lu.assertEquals(stats.max_players, 42)
|
||||||
|
lu.assertEquals(stats.player_count, 42)
|
||||||
|
end
|
||||||
|
|
||||||
|
function TestLobbyStats:testMultiVisitN()
|
||||||
|
lobby.update_stats('N', 'player', '', 3)
|
||||||
|
lobby.update_stats('N', 'player', '', 3)
|
||||||
|
lobby.update_stats('N', 'player', '', 3)
|
||||||
|
lobby.update_stats('N', 'player', '', 3)
|
||||||
|
lobby.update_stats('N', 'player', '', 3)
|
||||||
|
lobby.update_stats('N', 'player', '', 3)
|
||||||
|
lobby.update_stats('N', 'player', '', 3)
|
||||||
|
stats = lobby.savedata.stats['N']
|
||||||
|
lu.assertNotNil(stats)
|
||||||
|
lu.assertEquals(stats.multi_play, 7)
|
||||||
|
end
|
||||||
|
|
||||||
|
function TestLobbyStats:testTeamPlays()
|
||||||
|
-- stats #1
|
||||||
|
lobby.update_stats('2', 'player', '', 4)
|
||||||
|
lobby.update_stats('2', '', 'traitor')
|
||||||
|
stats = lobby.savedata.stats['2']
|
||||||
|
lu.assertEquals(stats.solo_play, 0)
|
||||||
|
lu.assertEquals(stats.multi_play, 1)
|
||||||
|
lu.assertEquals(stats.winner_traitor, 1)
|
||||||
|
lu.assertEquals(stats.winner_team, 0)
|
||||||
|
lu.assertEquals(stats.max_players, 4)
|
||||||
|
lu.assertEquals(stats.player_count, 4)
|
||||||
|
|
||||||
|
-- stats #2
|
||||||
|
lobby.update_stats('2', 'player', '', 2)
|
||||||
|
lobby.update_stats('2', '', 'team')
|
||||||
|
lu.assertEquals(stats.solo_play, 0)
|
||||||
|
lu.assertEquals(stats.multi_play, 2)
|
||||||
|
lu.assertEquals(stats.winner_traitor, 1)
|
||||||
|
lu.assertEquals(stats.winner_team, 1)
|
||||||
|
lu.assertEquals(stats.max_players, 4)
|
||||||
|
lu.assertEquals(stats.player_count, 3)
|
||||||
|
|
||||||
|
-- stats #3
|
||||||
|
lobby.update_stats('2', 'player', '', 3)
|
||||||
|
lobby.update_stats('2', '', 'traitor')
|
||||||
|
lu.assertEquals(stats.solo_play, 0)
|
||||||
|
lu.assertEquals(stats.multi_play, 3)
|
||||||
|
lu.assertEquals(stats.winner_traitor, 2)
|
||||||
|
lu.assertEquals(stats.winner_team, 1)
|
||||||
|
lu.assertEquals(stats.max_players, 4)
|
||||||
|
lu.assertEquals(stats.player_count, 3)
|
||||||
|
|
||||||
|
-- stats #4
|
||||||
|
lobby.update_stats('2', 'player', '', 7)
|
||||||
|
lobby.update_stats('2', '', 'team')
|
||||||
|
lu.assertEquals(stats.solo_play, 0)
|
||||||
|
lu.assertEquals(stats.multi_play, 4)
|
||||||
|
lu.assertEquals(stats.winner_traitor, 2)
|
||||||
|
lu.assertEquals(stats.winner_team, 2)
|
||||||
|
lu.assertEquals(stats.max_players, 7)
|
||||||
|
lu.assertEquals(stats.player_count, 4)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Test for mixed plays, ignoring solo plays completely
|
||||||
|
-- (i.e., player_count _only_ averages team plays)
|
||||||
|
function TestLobbyStats:testMixedPlays()
|
||||||
|
lobby.update_stats('3', 'player', '', 4)
|
||||||
|
lobby.update_stats('3', '', 'team')
|
||||||
|
lobby.update_stats('3', 'player', '', 4)
|
||||||
|
lobby.update_stats('3', '', 'team')
|
||||||
|
lobby.update_stats('3', 'player', '', 4)
|
||||||
|
lobby.update_stats('3', '', 'team')
|
||||||
|
lobby.update_stats('3', 'player', '', 4)
|
||||||
|
lobby.update_stats('3', '', 'traitor')
|
||||||
|
lobby.update_stats('3', 'solo')
|
||||||
|
lobby.update_stats('3', 'solo')
|
||||||
|
lobby.update_stats('3', 'solo')
|
||||||
|
stats = lobby.savedata.stats['3']
|
||||||
|
lu.assertEquals(stats.solo_play, 3)
|
||||||
|
lu.assertEquals(stats.multi_play, 4)
|
||||||
|
lu.assertEquals(stats.winner_traitor, 1)
|
||||||
|
lu.assertEquals(stats.winner_team, 3)
|
||||||
|
lu.assertEquals(stats.max_players, 4)
|
||||||
|
lu.assertEquals(stats.player_count, 4) -- 4 team plays x 4 players / 4 rounds
|
||||||
|
end
|
||||||
|
|
||||||
|
--[[ TestLobbyStats ]]--
|
||||||
|
|
Loading…
Reference in New Issue