• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

(0.6.6) OTClient startup.ogg alternate

dantexd

Member
Joined
Sep 1, 2010
Messages
97
Reaction score
23
Hello, I am curious if -
Is it possible to make OTClient choose a random startup music from (1 to 5) ?

Have a good day and thanks for reading me.
 
Solution
Hello, I am curious if -
Is it possible to make OTClient choose a random startup music from (1 to 5) ?

Have a good day and thanks for reading me.

In modules\client\client.lua, on the start of the script, add:

Lua:
local startupMusicTracks = {
    "/sounds/startup1",
    "/sounds/startup2",
    "/sounds/startup3",
    "/sounds/startup4",
    "/sounds/startup5",
}
Now edit it to contain the filenames/locations of all of your various soundtracks (it can have any amount of them).

Then find:
Lua:
local musicFilename = "/sounds/startup"
and change it to:
Lua:
local musicFilename = startupMusicTracks[math.random(1,#startupMusicTracks)]
Then move that line of code below
Lua:
function startup()
  -- Play startup music (The Silver...
You were right about randomseed.
But it has a issue that you can fix it forcing a first unused random as the first time you use the random.
That was mine solution:

Lua:
local musicPaths = {
  "/sounds/startup1",
  "/sounds/startup2",
  "/sounds/startup3",
  "/sounds/startup4",
}

math.randomseed(os.time())
local musicPath = musicPaths[math.random(#musicPaths)] -- First random may be not randomized, but we need to force this to avoid this issue when we need
local musicChannel = g_sounds.getChannel(1)

function setMusic(filename)
  musicPath = filename

  if not g_game.isOnline() then
    musicChannel:stop()
    musicChannel:enqueue(musicPath, 3)
  end
end

function reloadScripts()
  g_textures.clearCache()
  g_modules.reloadModules()

  local script = '/' .. g_app.getCompactName() .. 'rc.lua'
  if g_resources.fileExists(script) then
    dofile(script)
  end

  local message = tr('All modules and scripts were reloaded.')

  modules.game_textmessage.displayGameMessage(message)
  print(message)
end

function startup()
  musicPath = musicPaths[math.random(#musicPaths)]

  g_logger.info(string.format("musicPath: %s", musicPath))

  -- Play startup music (The Silver Tree, by Mattias Westlund)
  musicChannel:enqueue(musicPath, 3)
  connect(g_game, { onGameStart = function() musicChannel:stop(3) end })
  connect(g_game, { onGameEnd = function()
      g_sounds.stopAll()
      musicPath = musicPaths[math.random(#musicPaths)] -- Randomizing music again on logout
      musicChannel:enqueue(musicPath, 3)
  end })

  -- Check for startup errors
  local errtitle = nil
  local errmsg = nil

  if g_graphics.getRenderer():lower():match('gdi generic') then
    errtitle = tr('Graphics card driver not detected')
    errmsg = tr('No graphics card detected, everything will be drawn using the CPU,\nthus the performance will be really bad.\nPlease update your graphics driver to have a better performance.')
  end

  -- Show entergame
  if errmsg or errtitle then
    local msgbox = displayErrorBox(errtitle, errmsg)
    msgbox.onOk = function() EnterGame.firstShow() end
  else
    EnterGame.firstShow()
  end
end

function init()
  connect(g_app, { onRun = startup,
                   onExit = exit })

  g_window.setMinimumSize({ width = 600, height = 480 })
  -- preloading musics
  for _, path in ipairs(musicPaths) do
    g_sounds.preload(path)
  end

  -- initialize in fullscreen mode on mobile devices
  if g_window.getPlatformType() == "X11-EGL" then
    g_window.setFullscreen(true)
  else
    -- window size
    local size = { width = 800, height = 600 }
    size = g_settings.getSize('window-size', size)
    g_window.resize(size)

    -- window position, default is the screen center
    local displaySize = g_window.getDisplaySize()
    local defaultPos = { x = (displaySize.width - size.width)/2,
                         y = (displaySize.height - size.height)/2 }
    local pos = g_settings.getPoint('window-pos', defaultPos)
    pos.x = math.max(pos.x, 0)
    pos.y = math.max(pos.y, 0)
    g_window.move(pos)

    -- window maximized?
    local maximized = g_settings.getBoolean('window-maximized', false)
    if maximized then g_window.maximize() end
  end

  g_window.setTitle(g_app.getName())
  g_window.setIcon('/images/clienticon')

  -- poll resize events
  g_window.poll()

  g_keyboard.bindKeyDown('Ctrl+Shift+R', reloadScripts)

  -- generate machine uuid, this is a security measure for storing passwords
  if not g_crypt.setMachineUUID(g_settings.get('uuid')) then
    g_settings.set('uuid', g_crypt.getMachineUUID())
    g_settings.save()
  end
end

function terminate()
  disconnect(g_app, { onRun = startup,
                      onExit = exit })
  -- save window configs
  g_settings.set('window-size', g_window.getUnmaximizedSize())
  g_settings.set('window-pos', g_window.getUnmaximizedPos())
  g_settings.set('window-maximized', g_window.isMaximized())
end

function exit()
  g_logger.info("Exiting application..")
end

This behavior is very strange. As you can see in test results, first result for me is always random as well. In his case, it appears not.
Well if anyone in the future runs into the issue, at least we explored two solutions. 👍
 
Back
Top