mirror of
https://github.com/wesnoth/wesnoth
synced 2025-04-14 00:19:19 +00:00
90 lines
2.4 KiB
Lua
90 lines
2.4 KiB
Lua
-- simulate-lobby-activity.lua --
|
|
-- Goes to the MP lobby and chats and creates and leaves games forever. --
|
|
|
|
local function create_game(context)
|
|
local events, info
|
|
|
|
context.create({})
|
|
|
|
repeat
|
|
events, context, info = coroutine.yield()
|
|
until info.name == "Multiplayer Create"
|
|
|
|
context.select_type({type = "scenario"})
|
|
local s = info.find_level({id = "test1"})
|
|
context.select_level({index = s.index})
|
|
context.set_name({name = tostring(mathx.random(999999))})
|
|
context.update_settings({registered_users = false})
|
|
|
|
events, context, info = coroutine.yield()
|
|
|
|
context.create({})
|
|
end
|
|
|
|
local function exit_game(context)
|
|
local events, info
|
|
|
|
repeat
|
|
context.quit({})
|
|
events, context, info = coroutine.yield()
|
|
until info.name == "titlescreen"
|
|
|
|
context.exit({code = 0})
|
|
coroutine.yield()
|
|
end
|
|
|
|
return function()
|
|
local events, context, info
|
|
|
|
repeat
|
|
events, context, info = coroutine.yield()
|
|
until info.name == "titlescreen" or info.name == "Multiplayer Lobby"
|
|
|
|
while info.name == "titlescreen" do
|
|
context.play_multiplayer({})
|
|
events, context, info = coroutine.yield()
|
|
end
|
|
|
|
repeat
|
|
events, context, info = coroutine.yield()
|
|
until info.name == "Multiplayer Lobby"
|
|
|
|
-- Reached the lobby. Random delay before we start actually simulating activity.
|
|
-- This is here to avoid a situation where activity arrives in bursts after a script
|
|
-- has launched, say, 100 copies of Wesnoth at the same time.
|
|
wesnoth.interface.delay(mathx.random(15000))
|
|
|
|
events, context, info = coroutine.yield()
|
|
|
|
local in_staging = false
|
|
|
|
while true do
|
|
if info.name ~= "Multiplayer Lobby" and info.name ~= "Multiplayer Staging" then
|
|
-- most often, this means that the server was terminated -> stop generating traffic
|
|
exit_game(context)
|
|
end
|
|
|
|
if mathx.random() > 0.1 then
|
|
-- chat message
|
|
local messages = {"asdf", "qwerty", "zxc"}
|
|
context.chat({message = messages[mathx.random(#messages)]})
|
|
else
|
|
-- toggle between creating a game and leaving it
|
|
if not in_staging then
|
|
create_game(context)
|
|
in_staging = true
|
|
else
|
|
repeat
|
|
context.quit({})
|
|
events, context, info = coroutine.yield()
|
|
until info.name == "Multiplayer Lobby"
|
|
in_staging = false
|
|
end
|
|
end
|
|
|
|
wesnoth.interface.delay(15000)
|
|
|
|
events, context, info = coroutine.yield()
|
|
end
|
|
end
|