diff -r a3efbf1c4500 -r 6bcf173ba9be hedgewars/uScript.pas --- a/hedgewars/uScript.pas Wed Feb 10 13:53:31 2010 +0000 +++ b/hedgewars/uScript.pas Wed Feb 10 15:42:00 2010 +0000 @@ -52,6 +52,7 @@ var luaState : Plua_State; ScriptAmmoStore : string; + ScriptLoaded : boolean; procedure ScriptPrepareAmmoStore; forward; procedure ScriptApplyAmmoStore; forward; @@ -314,29 +315,33 @@ procedure ScriptOnGameInit; begin - // push game variables so they may be modified by the script - ScriptSetInteger('GameFlags', GameFlags); - ScriptSetString('Seed', cSeed); - ScriptSetInteger('TurnTime', cHedgehogTurnTime); - ScriptSetInteger('CaseFreq', cCaseFactor); - ScriptSetInteger('LandAdds', cLandAdditions); - ScriptSetInteger('Delay', cInactDelay); - ScriptSetString('Map', ''); - ScriptSetString('Theme', ''); + // not required if there's no script to run + if not ScriptLoaded then + exit; + + // push game variables so they may be modified by the script + ScriptSetInteger('GameFlags', GameFlags); + ScriptSetString('Seed', cSeed); + ScriptSetInteger('TurnTime', cHedgehogTurnTime); + ScriptSetInteger('CaseFreq', cCaseFactor); + ScriptSetInteger('LandAdds', cLandAdditions); + ScriptSetInteger('Delay', cInactDelay); + ScriptSetString('Map', ''); + ScriptSetString('Theme', ''); - ScriptCall('onGameInit'); - - // pop game variables - ParseCommand('seed ' + ScriptGetString('Seed'), true); - ParseCommand('$gmflags ' + ScriptGetString('GameFlags'), true); - ParseCommand('$turntime ' + ScriptGetString('TurnTime'), true); - ParseCommand('$casefreq ' + ScriptGetString('CaseFreq'), true); - ParseCommand('$landadds ' + ScriptGetString('LandAdds'), true); - ParseCommand('$delay ' + ScriptGetString('Delay'), true); - if ScriptGetString('Map') <> '' then - ParseCommand('map ' + ScriptGetString('Map'), true); - if ScriptGetString('Theme') <> '' then - ParseCommand('theme ' + ScriptGetString('Theme'), true); + ScriptCall('onGameInit'); + + // pop game variables + ParseCommand('seed ' + ScriptGetString('Seed'), true); + ParseCommand('$gmflags ' + ScriptGetString('GameFlags'), true); + ParseCommand('$turntime ' + ScriptGetString('TurnTime'), true); + ParseCommand('$casefreq ' + ScriptGetString('CaseFreq'), true); + ParseCommand('$landadds ' + ScriptGetString('LandAdds'), true); + ParseCommand('$delay ' + ScriptGetString('Delay'), true); + if ScriptGetString('Map') <> '' then + ParseCommand('map ' + ScriptGetString('Map'), true); + if ScriptGetString('Theme') <> '' then + ParseCommand('theme ' + ScriptGetString('Theme'), true); ScriptPrepareAmmoStore; ScriptCall('onAmmoStoreInit'); @@ -353,12 +358,15 @@ begin WriteLnToConsole('LUA: ' + name + ' loaded'); // call the script file - lua_pcall(luaState, 0, 0, 0); + lua_pcall(luaState, 0, 0, 0); + ScriptLoaded:= true end end; procedure ScriptCall(fname : string); begin + if not ScriptLoaded then + exit; lua_getglobal(luaState, Str2PChar(fname)); if lua_pcall(luaState, 0, 0, 0) <> 0 then begin @@ -384,6 +392,9 @@ function ScriptCall(fname : string; par1, par2, par3, par4 : LongInt) : LongInt; begin + if not ScriptLoaded then + exit; + lua_getglobal(luaState, Str2PChar(fname)); lua_pushinteger(luaState, par1); lua_pushinteger(luaState, par2); @@ -503,6 +514,7 @@ lua_register(luaState, 'AddHog', @lc_addhog); ScriptClearStack; // just to be sure stack is empty +ScriptLoaded:= false; end; procedure free_uScript;