User:Ccw

From Multi Theft Auto: Wiki
Revision as of 01:07, 2 April 2009 by Ccw (talk | contribs)
Jump to navigation Jump to search

Things that keep me awake at night

WARNING: Gamemodes which depend on being started with the mapmanager may explode

That is, gamemodes which either use the mapmanger events onGamemodeStop()/Start() or onGamemodeMapStop()/Start() or depend on the 'one gamemode at a time' system enforced by the mapmanager, may malfunction if invoked with 'start gamemode' or startResource().

Affected gamemodes are:

  • assault
  • battlefield69
  • cdm
  • ctf
  • cto
  • ctv
  • fallout
  • hay
  • interstate69
  • race
  • stealth
  • tdma
  • teamwars
  • freeroam

Noob admins who don't use the mapmanger will have gamemode errors with little obvious reason why. Also, stuff like the web browser and the admin panel, all start resources with startResource(), which will not work correctly with the gamemodes listed above.


Solution A

When starting a gamemode from inside a script, instead of using:

    startResource( getResourceFromName('gamemode') )

use this instead:

    exports.mapmanager:changeGamemode( getResourceFromName('gamemode') )


Solution B

Or, perhaps a more better way would be to insert this bit of code into each affected gamemode:

----------------------------------------------------
-- Divert to mapmanager if 'start' command used
----------------------------------------------------
addEventHandler('onResourceStart', g_ResRoot,
    function()
        setTimer(
            function()
                if not g_bCalledOnGamemodeStart then
                    outputConsole( "Trying to restart '" .. getResourceName(getThisResource()) .. "' with mapmanager..." )
                    exports.mapmanager:changeGamemode( getThisResource() )
                end
            end
            ,900,1)
	end
)

addEventHandler('onGamemodeStart', g_ResRoot,
    function()
        g_bCalledOnGamemodeStart = true
    end
)


Both solutions assume the mapmanger is up and running first. But that is requirement for these gamemodes anyway.