--- a/hedgewars/uScript.pas Thu Jun 12 13:43:44 2014 +0200
+++ b/hedgewars/uScript.pas Thu Jun 12 14:11:22 2014 +0200
@@ -114,17 +114,57 @@
halt(rtnTestLuaErr);
end;
-procedure LuaCallError(error ,call, paramsyntax: shortstring);
+procedure LuaCallError(error, call, paramsyntax: shortstring);
begin
LuaError(call + ': ' + error + ' function syntax: ' + call + ' ( ' + paramsyntax + ' )');
end;
-procedure LuaParameterCountError(call, paramsyntax: shortstring; wrongcount: LongInt);
+procedure LuaParameterCountError(call, paramsyntax: shortstring; wrongcount: LongInt); inline;
begin
// TODO: i18n?
LuaCallError('Wrong number of parameters (' + inttostr(wrongcount) + ')!', call, paramsyntax);
end;
+// compare with allowed count
+function CheckLuaParameterCount(L : Plua_State; count: LongInt; call, paramsyntax: shortstring): boolean; inline;
+var c: LongInt;
+begin
+ c:= lua_gettop(L);
+ if c <> count then
+ begin
+ LuaParameterCountError(call, paramsyntax, c);
+ exit(false);
+ end;
+
+ CheckLuaParameterCount:= true;
+end;
+
+// check if is either count1 or count2
+function CheckAndFetchLuaParameterCount(L : Plua_State; count1, count2: LongInt; call, paramsyntax: shortstring; out actual: LongInt): boolean; inline;
+begin
+ actual:= lua_gettop(L);
+ if (actual <> count1) and (actual <> count2) then
+ begin
+ LuaParameterCountError(call, paramsyntax, actual);
+ exit(false);
+ end;
+
+ CheckAndFetchLuaParameterCount:= true;
+end;
+
+// check if is same or higher as minCount
+function CheckAndFetchLuaParameterCount(L : Plua_State; minCount: LongInt; call, paramsyntax: shortstring; out actual: LongInt): boolean; inline;
+begin
+ actual:= lua_gettop(L);
+ if (actual < minCount) then
+ begin
+ LuaParameterCountError(call, paramsyntax, actual);
+ exit(false);
+ end;
+
+ CheckAndFetchLuaParameterCount:= true;
+end;
+
function LuaToGearTypeOrd(L : Plua_State; i: LongInt; call, paramsyntax: shortstring): LongInt; inline;
begin
if lua_isnoneornil(L, i) then i:= -1
@@ -238,78 +278,58 @@
function lc_band(L: PLua_State): LongInt; Cdecl;
begin
- if lua_gettop(L) <> 2 then
- begin
- LuaParameterCountError('band', 'value1, value2', lua_gettop(L));
+ if CheckLuaParameterCount(L, 2, 'band', 'value1, value2') then
+ lua_pushinteger(L, lua_tointeger(L, 2) and lua_tointeger(L, 1))
+ else
lua_pushnil(L);
- end
- else
- lua_pushinteger(L, lua_tointeger(L, 2) and lua_tointeger(L, 1));
lc_band := 1;
end;
function lc_bor(L: PLua_State): LongInt; Cdecl;
begin
- if lua_gettop(L) <> 2 then
- begin
- LuaParameterCountError('bor', 'value1, value2', lua_gettop(L));
+ if CheckLuaParameterCount(L, 2, 'bor', 'value1, value2') then
+ lua_pushinteger(L, lua_tointeger(L, 2) or lua_tointeger(L, 1))
+ else
lua_pushnil(L);
- end
- else
- lua_pushinteger(L, lua_tointeger(L, 2) or lua_tointeger(L, 1));
lc_bor := 1;
end;
function lc_bnot(L: PLua_State): LongInt; Cdecl;
begin
- if lua_gettop(L) <> 1 then
- begin
- LuaParameterCountError('bnot', 'value', lua_gettop(L));
+ if CheckLuaParameterCount(L, 1, 'bnot', 'value') then
+ lua_pushinteger(L, (not lua_tointeger(L, 1)))
+ else
lua_pushnil(L);
- end
- else
- lua_pushinteger(L, (not lua_tointeger(L, 1)));
lc_bnot := 1;
end;
function lc_div(L: PLua_State): LongInt; Cdecl;
begin
- if lua_gettop(L) <> 2 then
- begin
- LuaParameterCountError('div', 'dividend, divisor', lua_gettop(L));
+ if CheckLuaParameterCount(L, 2, 'div', 'dividend, divisor') then
+ lua_pushinteger(L, lua_tointeger(L, 1) div lua_tointeger(L, 2))
+ else
lua_pushnil(L);
- end
- else
- lua_pushinteger(L, lua_tointeger(L, 1) div lua_tointeger(L, 2));
lc_div := 1;
end;
function lc_getinputmask(L : Plua_State) : LongInt; Cdecl;
begin
- if lua_gettop(L) <> 0 then
- LuaParameterCountError('GetInputMask', '', lua_gettop(L))
- else
+ if CheckLuaParameterCount(L, 0, 'GetInputMask', '') then
lua_pushinteger(L, InputMask);
lc_getinputmask:= 1
end;
function lc_setinputmask(L : Plua_State) : LongInt; Cdecl;
begin
- if lua_gettop(L) <> 1 then
- LuaParameterCountError('SetInputMask', 'mask', lua_gettop(L))
- else
+ if CheckLuaParameterCount(L, 1, 'SetInputMask', 'mask') then
InputMask:= lua_tointeger(L, 1);
lc_setinputmask:= 0
end;
function lc_writelntoconsole(L : Plua_State) : LongInt; Cdecl;
begin
- if lua_gettop(L) = 1 then
- begin
+ if CheckLuaParameterCount(L, 1, 'WriteLnToConsole', 'string') then
WriteLnToConsole('Lua: ' + lua_tostring(L ,1));
- end
- else
- LuaParameterCountError('WriteLnToConsole', 'string', lua_gettop(L));
lc_writelntoconsole:= 0;
end;
@@ -318,7 +338,7 @@
i,c: LongWord;
s: shortstring;
begin
- if lua_gettop(L) = 1 then
+ if CheckLuaParameterCount(L, 1, 'ParseCommand', 'string') then
begin
t:= lua_tolstring(L, 1, Psize_t(@c));
@@ -327,20 +347,14 @@
ParseCommand(s, true, true);
- end
- else
- LuaParameterCountError('ParseCommand', 'string', lua_gettop(L));
+ end;
lc_parsecommand:= 0;
end;
function lc_showmission(L : Plua_State) : LongInt; Cdecl;
begin
- if lua_gettop(L) = 5 then
- begin
+ if CheckLuaParameterCount(L, 5, 'ShowMission', 'caption, subcaption, text, icon, time') then
ShowMission(lua_tostringA(L, 1), lua_tostringA(L, 2), lua_tostringA(L, 3), lua_tointeger(L, 4), lua_tointeger(L, 5));
- end
- else
- LuaParameterCountError('ShowMission', 'caption, subcaption, text, icon, time', lua_gettop(L));
lc_showmission:= 0;
end;
@@ -352,33 +366,25 @@
end;
function lc_enablegameflags(L : Plua_State) : LongInt; Cdecl;
-var i : integer;
+var i, n : integer;
begin
- if lua_gettop(L) = 0 then
+ // can have 1 or more arguments
+ if CheckAndFetchLuaParameterCount(L, 1, 'EnableGameFlags', 'gameFlag, ... ', n) then
begin
- LuaParameterCountError('EnableGameFlags', '', lua_gettop(L));
- lua_pushnil(L);
- end
- else
- begin
- for i:= 1 to lua_gettop(L) do
- GameFlags := GameFlags or LongWord(lua_tointeger(L, i));
- ScriptSetInteger('GameFlags', GameFlags);
+ for i:= 1 to n do
+ GameFlags := GameFlags or LongWord(lua_tointeger(L, i));
+ ScriptSetInteger('GameFlags', GameFlags);
end;
lc_enablegameflags:= 0;
end;
function lc_disablegameflags(L : Plua_State) : LongInt; Cdecl;
-var i : integer;
+var i , n: integer;
begin
- if lua_gettop(L) = 0 then
+ // can have 1 or more arguments
+ if CheckAndFetchLuaParameterCount(L, 1, 'DisableGameFlags', 'gameFlag, ... ', n) then
begin
- LuaParameterCountError('DisableGameFlags', '', lua_gettop(L));
- lua_pushnil(L);
- end
- else
- begin
- for i:= 1 to lua_gettop(L) do
+ for i:= 1 to n do
GameFlags := GameFlags and (not LongWord(lua_tointeger(L, i)));
ScriptSetInteger('GameFlags', GameFlags);
end;
@@ -387,12 +393,7 @@
function lc_cleargameflags(L : Plua_State) : LongInt; Cdecl;
begin
- if lua_gettop(L) <> 0 then
- begin
- LuaParameterCountError('ClearGameFlags', '', lua_gettop(L));
- lua_pushnil(L);
- end
- else
+ if CheckLuaParameterCount(L, 0, 'ClearGameFlags', '') then
begin
GameFlags:= 0;
ScriptSetInteger('GameFlags', GameFlags);
@@ -402,15 +403,10 @@
function lc_getgameflag(L : Plua_State) : LongInt; Cdecl;
begin
- if lua_gettop(L) <> 1 then
- begin
- LuaParameterCountError('GetGameFlag', 'gameflag', lua_gettop(L));
+ if CheckLuaParameterCount(L, 1, 'GetGameFlag', 'gameflag') then
+ lua_pushboolean(L, (GameFlags and LongWord(lua_tointeger(L, 1)) <> 0))
+ else
lua_pushnil(L);
- end
- else
- begin
- lua_pushboolean(L, (GameFlags and LongWord(lua_tointeger(L, 1)) <> 0));
- end;
lc_getgameflag:= 1;
end;
@@ -420,103 +416,87 @@
call = 'AddCaption';
params = 'text [, color, captiongroup]';
begin
- if lua_gettop(L) = 1 then
- AddCaption(lua_tostringA(L, 1), cWhiteColor, capgrpMessage)
- else if lua_gettop(L) = 3 then
+ if CheckAndFetchLuaParameterCount(L, 1, 3, call, params, cg) then
begin
- cg:= LuaToCapGroupOrd(L, 3, call, params);
- AddCaption(lua_tostringA(L, 1), lua_tointeger(L, 2) shr 8, TCapGroup(cg));
- end
- else
- LuaParameterCountError(call, params, lua_gettop(L));
+ if cg = 1 then
+ AddCaption(lua_tostringA(L, 1), cWhiteColor, capgrpMessage)
+ else
+ begin
+ cg:= LuaToCapGroupOrd(L, 3, call, params);
+ if cg >= 0 then
+ AddCaption(lua_tostringA(L, 1), lua_tointeger(L, 2) shr 8, TCapGroup(cg));
+ end
+ end;
lc_addcaption:= 0;
end;
function lc_campaignlock(L : Plua_State) : LongInt; Cdecl;
begin
- if lua_gettop(L) = 1 then
+ if CheckLuaParameterCount(L, 1, 'CampaignLock', 'TODO') then
begin
- // to be done
- end
- else
- LuaParameterCountError('CampaignLock', 'TODO', lua_gettop(L));
+ // TODO
+ end;
lc_campaignlock:= 0;
end;
function lc_campaignunlock(L : Plua_State) : LongInt; Cdecl;
begin
- if lua_gettop(L) = 1 then
+ if CheckLuaParameterCount(L, 1, 'CampaignUnlock', 'TODO') then
begin
- // to be done
- end
- else
- LuaParameterCountError('CampaignUnlock', 'TODO', lua_gettop(L));
+ // TODO
+ end;
lc_campaignunlock:= 0;
end;
function lc_spawnfakehealthcrate(L: Plua_State) : LongInt; Cdecl;
var gear: PGear;
begin
- if lua_gettop(L) <> 4 then
- begin
- LuaParameterCountError('SpawnFakeHealthCrate', 'x, y, explode, poison', lua_gettop(L));
- lua_pushnil(L);
- end
- else
+ if CheckLuaParameterCount(L, 4,'SpawnFakeHealthCrate', 'x, y, explode, poison') then
begin
gear := SpawnFakeCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2),
HealthCrate, lua_toboolean(L, 3), lua_toboolean(L, 4));
lua_pushinteger(L, gear^.uid);
- end;
+ end
+ else
+ lua_pushnil(L);
lc_spawnfakehealthcrate := 1;
end;
function lc_spawnfakeammocrate(L: PLua_State): LongInt; Cdecl;
var gear: PGear;
begin
- if lua_gettop(L) <> 4 then
- begin
- LuaParameterCountError('SpawnFakeAmmoCrate', 'x, y, explode, poison', lua_gettop(L));
- lua_pushnil(L);
- end
- else
+ if CheckLuaParameterCount(L, 4,'SpawnFakeAmmoCrate', 'x, y, explode, poison') then
begin
gear := SpawnFakeCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2),
AmmoCrate, lua_toboolean(L, 3), lua_toboolean(L, 4));
lua_pushinteger(L, gear^.uid);
- end;
+ end
+ else
+ lua_pushnil(L);
lc_spawnfakeammocrate := 1;
end;
function lc_spawnfakeutilitycrate(L: PLua_State): LongInt; Cdecl;
var gear: PGear;
begin
- if lua_gettop(L) <> 4 then
- begin
- LuaParameterCountError('SpawnFakeUtilityCrate', 'x, y, explode, poison', lua_gettop(L));
- lua_pushnil(L);
- end
- else
+ if CheckLuaParameterCount(L, 4,'SpawnFakeUtilityCrate', 'x, y, explode, poison') then
begin
gear := SpawnFakeCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2),
UtilityCrate, lua_toboolean(L, 3), lua_toboolean(L, 4));
lua_pushinteger(L, gear^.uid);
- end;
+ end
+ else
+ lua_pushnil(L);
lc_spawnfakeutilitycrate := 1;
end;
function lc_spawnhealthcrate(L: Plua_State) : LongInt; Cdecl;
var gear: PGear;
-var health: LongInt;
+var health, n: LongInt;
begin
- if (lua_gettop(L) < 2) or (lua_gettop(L) > 3) then
+ if CheckAndFetchLuaParameterCount(L, 2, 3, 'SpawnHealthCrate', 'x, y [, health]', n) then
begin
- LuaParameterCountError('SpawnHealthCrate', 'x, y [, health]', lua_gettop(L));
- lua_pushnil(L);
- end
- else
- begin
- if lua_gettop(L) = 3 then
+ if n = 3 then
health:= lua_tointeger(L, 3)
else
health:= cHealthCaseAmount;
@@ -525,49 +505,47 @@
lua_pushinteger(L, gear^.uid)
else
lua_pushnil(L);
- end;
+ end
+ else
+ lua_pushnil(L);
lc_spawnhealthcrate := 1;
end;
function lc_spawnammocrate(L: PLua_State): LongInt; Cdecl;
var gear: PGear;
+ n : LongInt;
begin
- if (lua_gettop(L) <> 3) and (lua_gettop(L) <> 4) then
+ if CheckAndFetchLuaParameterCount(L, 3, 4, 'SpawnAmmoCrate', 'x, y, content [, amount]', n) then
begin
- LuaParameterCountError('SpawnAmmoCrate', 'x, y, content [, amount]', lua_gettop(L));
- lua_pushnil(L);
- end
- else
- begin
- if (lua_gettop(L) = 3) then
+ if n = 3 then
gear := SpawnCustomCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2), AmmoCrate, lua_tointeger(L, 3), 0)
else gear := SpawnCustomCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2), AmmoCrate, lua_tointeger(L, 3), lua_tointeger(L, 4));
if gear <> nil then
lua_pushinteger(L, gear^.uid)
else
lua_pushnil(L);
- end;
+ end
+ else
+ lua_pushnil(L);
lc_spawnammocrate := 1;
end;
function lc_spawnutilitycrate(L: PLua_State): LongInt; Cdecl;
var gear: PGear;
+ n : LongInt;
begin
- if (lua_gettop(L) <> 3) and (lua_gettop(L) <> 4) then
+ if CheckAndFetchLuaParameterCount(L, 3, 4, 'SpawnUtilityCrate', 'x, y, content [, amount]', n) then
begin
- LuaParameterCountError('SpawnUtilityCrate', 'x, y, content [, amount]', lua_gettop(L));
- lua_pushnil(L);
- end
- else
- begin
- if (lua_gettop(L) = 3) then
+ if n = 3 then
gear := SpawnCustomCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2), UtilityCrate, lua_tointeger(L, 3), 0)
else gear := SpawnCustomCrateAt(lua_tointeger(L, 1), lua_tointeger(L, 2), UtilityCrate, lua_tointeger(L, 3), lua_tointeger(L, 4));
if gear <> nil then
lua_pushinteger(L, gear^.uid)
else
lua_pushnil(L);
- end;
+ end
+ else
+ lua_pushnil(L);
lc_spawnutilitycrate := 1;
end;
@@ -580,12 +558,7 @@
call = 'AddGear';
params = 'x, y, gearType, state, dx, dy, timer';
begin
- if lua_gettop(L) <> 7 then
- begin
- LuaParameterCountError(call, params, lua_gettop(L));
- lua_pushnil(L); // return value on stack (nil)
- end
- else
+ if CheckLuaParameterCount(L, 7, call, params) then
begin
t:= LuaToGearTypeOrd(L, 3, call, params);
if t >= 0 then
@@ -604,18 +577,16 @@
end
else
lua_pushnil(L);
- end;
+ end
+ else
+ lua_pushnil(L);
lc_addgear:= 1; // 1 return value
end;
function lc_deletegear(L : Plua_State) : LongInt; Cdecl;
var gear : PGear;
begin
- if lua_gettop(L) <> 1 then
- begin
- LuaParameterCountError('DeleteGear', 'gearUid', lua_gettop(L));
- end
- else
+ if CheckLuaParameterCount(L, 1, 'DeleteGear', 'gearUid') then
begin
gear:= GearByUID(lua_tointeger(L, 1));
if gear <> nil then
@@ -635,12 +606,7 @@
params = 'x, y, visualGearType, state, critical';
begin
uid:= 0;
- if lua_gettop(L) <> 5 then
- begin
- LuaParameterCountError(call, params, lua_gettop(L));
- lua_pushnil(L); // return value on stack (nil)
- end
- else
+ if CheckLuaParameterCount(L, 5, call, params) then
begin
s:= LuaToVisualGearTypeOrd(L, 3, call, params);
if s >= 0 then
@@ -656,10 +622,14 @@
begin
lastVisualGearByUID:= vg;
uid:= vg^.uid;
+ lua_pushinteger(L, uid);
end;
- end;
- end;
- lua_pushinteger(L, uid);
+ end
+ else
+ lua_pushnil(L);
+ end
+ else
+ lua_pushnil(L); // return value on stack (nil)
lc_addvisualgear:= 1; // 1 return value
end;
@@ -2045,23 +2015,20 @@
function lc_placesprite(L : Plua_State) : LongInt; Cdecl;
var spr : TSprite;
lf : Word;
- n : LongInt;
+ i, n : LongInt;
placed: boolean;
const
call = 'PlaceSprite';
- params = 'x, y, sprite, frameIdx [, landFlags]';
+ params = 'x, y, sprite, frameIdx [, landFlags, ... ]';
begin
placed:= false;
- n:= lua_gettop(L);
- if (n < 4) or (n > 5) then
- LuaParameterCountError(call, params, lua_gettop(L))
- else
+ if CheckAndFetchLuaParameterCount(L, 4, call, params, n) then
begin
- // get landflags, if specified
- if n = 5 then
- lf:= lua_tointeger(L, 5)
- else
- lf:= 0;
+ lf:= 0;
+
+ // accept any amount of landflags, loop is never executed if n>5
+ for i:= 5 to n do
+ lf:= lf or lua_tointeger(L, i);
n:= LuaToSpriteOrd(L, 3, call, params);
if n >= 0 then
@@ -2085,9 +2052,7 @@
var placed: boolean;
begin
placed:= false;
- if lua_gettop(L) <> 3 then
- LuaParameterCountError('PlaceGirder', 'x, y, frameIdx', lua_gettop(L))
- else
+ if CheckLuaParameterCount(L, 3, 'PlaceGirder', 'x, y, frameIdx') then
placed:= TryPlaceOnLand(
lua_tointeger(L, 1) - SpritesData[sprAmGirder].Width div 2,
lua_tointeger(L, 2) - SpritesData[sprAmGirder].Height div 2,
@@ -2099,28 +2064,21 @@
function lc_getcurammotype(L : Plua_State): LongInt; Cdecl;
begin
- if lua_gettop(L) <> 0 then
- LuaParameterCountError('GetCurAmmoType', '', lua_gettop(L))
- else
+ if CheckLuaParameterCount(L, 0, 'GetCurAmmoType', '') then
lua_pushinteger(L, ord(CurrentHedgehog^.CurAmmoType));
lc_getcurammotype := 1;
end;
function lc_savecampaignvar(L : Plua_State): LongInt; Cdecl;
begin
- if lua_gettop(L) <> 2 then
- LuaParameterCountError('SaveCampaignVar', 'varname, value', lua_gettop(L))
- else begin
+ if CheckLuaParameterCount(L, 2, 'SaveCampaignVar', 'varname, value') then
SendIPC('V!' + lua_tostring(L, 1) + ' ' + lua_tostring(L, 2) + #0);
- end;
lc_savecampaignvar := 0;
end;
function lc_getcampaignvar(L : Plua_State): LongInt; Cdecl;
begin
- if (lua_gettop(L) <> 1) then
- LuaParameterCountError('GetCampaignVar', 'varname', lua_gettop(L))
- else
+ if CheckLuaParameterCount(L, 1, 'GetCampaignVar', 'varname') then
SendIPCAndWaitReply('V?' + lua_tostring(L, 1) + #0);
lua_pushstring(L, str2pchar(CampaignVariable));
lc_getcampaignvar := 1;
@@ -2129,9 +2087,7 @@
function lc_hidehog(L: Plua_State): LongInt; Cdecl;
var gear: PGear;
begin
- if lua_gettop(L) <> 1 then
- LuaParameterCountError('HideHog', 'gearUid', lua_gettop(L))
- else
+ if CheckLuaParameterCount(L, 1, 'HideHog', 'gearUid') then
begin
gear:= GearByUID(lua_tointeger(L, 1));
HideHog(gear^.hedgehog)
@@ -2143,9 +2099,7 @@
var i, h: LongInt;
uid: LongWord;
begin
- if lua_gettop(L) <> 1 then
- LuaParameterCountError('RestoreHog', 'gearUid', lua_gettop(L))
- else
+ if CheckLuaParameterCount(L, 1, 'RestoreHog', 'gearUid') then
begin
uid:= LongWord(lua_tointeger(L, 1));
if TeamsCount > 0 then
@@ -2164,12 +2118,7 @@
function lc_testrectforobstacle(L : Plua_State) : LongInt; Cdecl;
var rtn: Boolean;
begin
- if lua_gettop(L) <> 5 then
- begin
- LuaParameterCountError('TestRectForObstacle', 'x1, y1, x2, y2, landOnly', lua_gettop(L));
- lua_pushnil(L); // return value on stack (nil)
- end
- else
+ if CheckLuaParameterCount(L, 5, 'TestRectForObstacle', 'x1, y1, x2, y2, landOnly') then
begin
rtn:= TestRectancleForObstacle(
lua_tointeger(L, 1),
@@ -2179,27 +2128,23 @@
lua_toboolean(L, 5)
);
lua_pushboolean(L, rtn);
- end;
+ end
+ else
+ lua_pushnil(L); // return value on stack (nil)
lc_testrectforobstacle:= 1
end;
function lc_getgravity(L : Plua_State) : LongInt; Cdecl;
begin
- if lua_gettop(L) <> 0 then
- LuaParameterCountError('GetGravity', '', lua_gettop(L))
- else if cGravity.isNegative then
- lua_pushinteger(L, hwRound(-_0_5 + (cGravity * 50 / cMaxWindSpeed)))
- else
- lua_pushinteger(L, hwRound( _0_5 + (cGravity * 50 / cMaxWindSpeed)));
+ if CheckLuaParameterCount(L, 0, 'GetGravity', '') then
+ lua_pushinteger(L, hwRound(SignAs(_0_5, cGravity) + (cGravity * 50 / cMaxWindSpeed)));
lc_getgravity:= 1
end;
function lc_setgravity(L : Plua_State) : LongInt; Cdecl;
begin
- if lua_gettop(L) <> 1 then
- LuaParameterCountError('SetGravity', 'percent', lua_gettop(L))
- else
+ if CheckLuaParameterCount(L, 1, 'SetGravity', 'percent') then
begin
cGravity:= _0_02 * lua_tointeger(L, 1) * cMaxWindSpeed;
cGravityf:= 0.00025 * lua_tointeger(L, 1) * 0.02
@@ -2210,9 +2155,7 @@
function lc_setwaterline(L : Plua_State) : LongInt; Cdecl;
var iterator: PGear;
begin
- if lua_gettop(L) <> 1 then
- LuaParameterCountError('SetWaterLine', 'waterline', lua_gettop(L))
- else
+ if CheckLuaParameterCount(L, 1, 'SetWaterLine', 'waterline') then
begin
cWaterLine:= lua_tointeger(L,1);
AllInactive:= false;
@@ -2235,9 +2178,7 @@
function lc_setaihintsongear(L : Plua_State) : LongInt; Cdecl;
var gear: PGear;
begin
- if lua_gettop(L) <> 2 then
- LuaParameterCountError('SetAIHintOnGear', 'gearUid, aiHints', lua_gettop(L))
- else
+ if CheckLuaParameterCount(L, 2, 'SetAIHintOnGear', 'gearUid, aiHints') then
begin
gear:= GearByUID(lua_tointeger(L, 1));
if gear <> nil then
@@ -2249,22 +2190,17 @@
function lc_hedgewarsscriptload(L : Plua_State) : LongInt; Cdecl;
begin
- if lua_gettop(L) <> 1 then
- begin
- LuaParameterCountError('HedgewarsScriptLoad', 'scriptPath', lua_gettop(L));
- lua_pushnil(L)
- end
+ if CheckLuaParameterCount(L, 1, 'HedgewarsScriptLoad', 'scriptPath') then
+ ScriptLoad(lua_tostring(L, 1))
else
- ScriptLoad(lua_tostring(L, 1));
+ lua_pushnil(L);
lc_hedgewarsscriptload:= 0;
end;
function lc_declareachievement(L : Plua_State) : LongInt; Cdecl;
begin
- if lua_gettop(L) <> 4 then
- LuaParameterCountError('DeclareAchievement', 'achievementId, teamname, location, value', lua_gettop(L))
- else
+ if CheckLuaParameterCount(L, 4, 'DeclareAchievement', 'achievementId, teamname, location, value') then
declareAchievement(lua_tostring(L, 1), lua_tostring(L, 2), lua_tostring(L, 3), lua_tointeger(L, 4));
lc_declareachievement:= 0
end;
@@ -2272,17 +2208,14 @@
// stuff for testing the lua API
function lc_endluatest(L : Plua_State) : LongInt; Cdecl;
begin
- if lua_gettop(L) <> 1 then
- begin
- LuaParameterCountError('EndLuaAPITest', 'LUA_API_TEST_SUCCESSFUL or LUA_API_TEST_FAILED', lua_gettop(L));
- lua_pushnil(L);
- lc_endluatest:= 0;
- end
- else
+ if CheckLuaParameterCount(L, 1, 'EndLuaAPITest', 'LUA_API_TEST_SUCCESSFUL or LUA_API_TEST_FAILED') then
begin
WriteLnToConsole('Lua test finished');
halt(lua_tointeger(L, 1));
- end;
+ end
+ else
+ lua_pushnil(L);
+ lc_endluatest:= 0;
end;
///////////////////