diff -r 772a43d88e6b -r 2146cb7be36f hedgewars/uScript.pas --- a/hedgewars/uScript.pas Fri Mar 10 11:42:25 2023 +0100 +++ b/hedgewars/uScript.pas Tue Aug 22 08:35:46 2023 +0200 @@ -308,7 +308,33 @@ LuaToSoundOrd:= i; end; -function LuaToHogEffectOrd(L : Plua_State; i: LongInt; call, paramsyntax: shortstring): LongInt; +function LuaToMsgStrIdOrd(L : Plua_State; i: LongInt; call, paramsyntax: shortstring): LongInt; inline; +begin + if lua_isnoneornil(L, i) then i:= -1 + else i:= Trunc(lua_tonumber(L, i)); + if (i < ord(Low(TMsgStrId))) or (i > ord(High(TMsgStrId))) then + begin + LuaCallError('Invalid message ID!', call, paramsyntax); + LuaToMsgStrIdOrd:= -1; + end + else + LuaToMsgStrIdOrd:= i; +end; + +function LuaToGoalStrIdOrd(L : Plua_State; i: LongInt; call, paramsyntax: shortstring): LongInt; inline; +begin + if lua_isnoneornil(L, i) then i:= -1 + else i:= Trunc(lua_tonumber(L, i)); + if (i < ord(Low(TGoalStrId))) or (i > ord(High(TGoalStrId))) then + begin + LuaCallError('Invalid goal string ID!', call, paramsyntax); + LuaToGoalStrIdOrd:= -1; + end + else + LuaToGoalStrIdOrd:= i; +end; + +function LuaToHogEffectOrd(L : Plua_State; i: LongInt; call, paramsyntax: shortstring): LongInt; begin if lua_isnoneornil(L, i) then i:= -1 else i:= Trunc(lua_tonumber(L, i)); @@ -456,13 +482,13 @@ function lc_setweapon(L : Plua_State) : LongInt; Cdecl; var at: LongInt; const - call = 'SetWeapon'; - params = 'ammoType'; + callStr = 'SetWeapon'; + paramsStr = 'ammoType'; begin // no point to run this without any CurrentHedgehog - if (CurrentHedgehog <> nil) and (CheckLuaParamCount(L, 1, call, params)) then + if (CurrentHedgehog <> nil) and (CheckLuaParamCount(L, 1, callStr, paramsStr)) then begin - at:= LuaToAmmoTypeOrd(L, 1, call, params); + at:= LuaToAmmoTypeOrd(L, 1, callStr, paramsStr); if at >= 0 then ParseCommand('setweap ' + char(at), true, true); end; @@ -472,10 +498,10 @@ // enable/disable cinematic effects function lc_setcinematicmode(L : Plua_State) : LongInt; Cdecl; const - call = 'SetCinematicMode'; - params = 'enable'; -begin - if (CheckLuaParamCount(L, 1, call, params)) then + callStr = 'SetCinematicMode'; + paramsStr = 'enable'; +begin + if (CheckLuaParamCount(L, 1, callStr, paramsStr)) then begin CinematicScript:= lua_toboolean(L, 1); end; @@ -486,10 +512,10 @@ function lc_setmaxbuilddistance(L : Plua_State) : LongInt; Cdecl; var np: LongInt; const - call = 'SetMaxBuildDistance'; - params = '[ distInPx ]'; -begin - if CheckAndFetchParamCountRange(L, 0, 1, call, params, np) then + callStr = 'SetMaxBuildDistance'; + paramsStr = '[ distInPx ]'; +begin + if CheckAndFetchParamCountRange(L, 0, 1, callStr, paramsStr, np) then begin if np = 0 then begin @@ -508,10 +534,10 @@ nextAmmo : TAmmo; s, a, cs, fa: LongInt; const - call = 'SetNextWeapon'; - params = ''; -begin - if (CurrentHedgehog <> nil) and (CheckLuaParamCount(L, 0, call, params)) then + callStr = 'SetNextWeapon'; + paramsStr = ''; +begin + if (CurrentHedgehog <> nil) and (CheckLuaParamCount(L, 0, callStr, paramsStr)) then begin at:= -1; with CurrentHedgehog^ do @@ -584,35 +610,76 @@ lc_hidemission:= 0; end; +function lc_getenginestring(L : Plua_state) : LongInt; Cdecl; +var stringType: shortstring; + msgId: LongInt; +const callStr = 'GetEngineString'; + paramsStr = 'stringType, msgId'; +begin + if CheckLuaParamCount(L, 2, callStr, paramsStr) then + begin + stringType:= lua_tostring(L, 1); + if (not lua_isnumber(L, 2)) then + begin + LuaError('Argument ''msgId'' must be a number!'); + lua_pushnil(L); + end + else if stringType = 'TMsgStrId' then + begin + msgId:= LuaToMsgStrIdOrd(L, 2, callStr, paramsStr); + if msgId = -1 then + lua_pushnil(L) + else + lua_pushstring(L, PChar(trmsg[TMsgStrId(msgId)])) + end + else if stringType = 'TGoalStrId' then + begin + msgId:= LuaToGoalStrIdOrd(L, 2, callStr, paramsStr); + if msgId = -1 then + lua_pushnil(L) + else + lua_pushstring(L, PChar(trgoal[TGoalStrId(msgId)])); + end + else + begin + LuaError('Invalid stringType!'); + lua_pushnil(L); + end + end + else + lua_pushnil(L); + lc_getenginestring:= 1; +end; + function lc_setammotexts(L : Plua_State) : LongInt; Cdecl; const - call = 'SetAmmoTexts'; - params = 'ammoType, name, caption, description [, showExtra]'; + callStr = 'SetAmmoTexts'; + paramsStr = 'ammoType, name, caption, description [, showExtra]'; var n: integer; showExtra: boolean; begin - if CheckAndFetchParamCount(L, 4, 5, call, params, n) then + if CheckAndFetchParamCount(L, 4, 5, callStr, paramsStr, n) then begin if n = 5 then showExtra:= lua_toboolean(L, 5) else showExtra:= true; - SetAmmoTexts(TAmmoType(LuaToAmmoTypeOrd(L, 1, call, params)), lua_tostringA(L, 2), lua_tostringA(L, 3), lua_tostringA(L, 4), showExtra); + SetAmmoTexts(TAmmoType(LuaToAmmoTypeOrd(L, 1, callStr, paramsStr)), lua_tostringA(L, 2), lua_tostringA(L, 3), lua_tostringA(L, 4), showExtra); end; lc_setammotexts:= 0; end; function lc_setammodescriptionappendix(L : Plua_State) : LongInt; Cdecl; const - call = 'SetAmmoDescriptionAppendix'; - params = 'ammoType, descAppend'; + callStr = 'SetAmmoDescriptionAppendix'; + paramsStr = 'ammoType, descAppend'; var ammoType: TAmmoType; descAppend: ansistring; begin - if CheckLuaParamCount(L, 2, call, params) then + if CheckLuaParamCount(L, 2, callStr, paramsStr) then begin - ammoType := TAmmoType(LuaToAmmoTypeOrd(L, 1, call, params)); + ammoType := TAmmoType(LuaToAmmoTypeOrd(L, 1, callStr, paramsStr)); descAppend := lua_tostringA(L, 2); trluaammoa[Ammoz[ammoType].NameId] := descAppend; end; @@ -667,16 +734,16 @@ function lc_addcaption(L : Plua_State) : LongInt; Cdecl; var cg: LongInt; const - call = 'AddCaption'; - params = 'text [, color, captiongroup]'; -begin - if CheckAndFetchParamCount(L, 1, 3, call, params, cg) then + callStr = 'AddCaption'; + paramsStr = 'text [, color, captiongroup]'; +begin + if CheckAndFetchParamCount(L, 1, 3, callStr, paramsStr, cg) then begin if cg = 1 then AddCaption(lua_tostringA(L, 1), capcolDefault, capgrpMessage) else begin - cg:= LuaToCapGroupOrd(L, 3, call, params); + cg:= LuaToCapGroupOrd(L, 3, callStr, paramsStr); if cg >= 0 then AddCaption(lua_tostringA(L, 1), Trunc(lua_tonumber(L, 2)) shr 8, TCapGroup(cg)); end @@ -846,12 +913,12 @@ dx, dy: hwFloat; gt: TGearType; const - call = 'AddGear'; - params = 'x, y, gearType, state, dx, dy, timer'; -begin - if CheckLuaParamCount(L, 7, call, params) then + callStr = 'AddGear'; + paramsStr = 'x, y, gearType, state, dx, dy, timer'; +begin + if CheckLuaParamCount(L, 7, callStr, paramsStr) then begin - t:= LuaToGearTypeOrd(L, 3, call, params); + t:= LuaToGearTypeOrd(L, 3, callStr, paramsStr); if t >= 0 then begin gt:= TGearType(t); @@ -893,13 +960,13 @@ vgt: TVisualGearType; uid: Longword; const - call = 'AddVisualGear'; - params = 'x, y, visualGearType, state, critical [, layer]'; + callStr = 'AddVisualGear'; + paramsStr = 'x, y, visualGearType, state, critical [, layer]'; begin uid:= 0; - if CheckAndFetchParamCount(L, 5, 6, call, params, n) then + if CheckAndFetchParamCount(L, 5, 6, callStr, paramsStr, n) then begin - s:= LuaToVisualGearTypeOrd(L, 3, call, params); + s:= LuaToVisualGearTypeOrd(L, 3, callStr, paramsStr); if s >= 0 then begin vgt:= TVisualGearType(s); @@ -1816,12 +1883,12 @@ var gear : PGear; at, n, c: LongInt; const - call = 'AddAmmo'; - params = 'gearUid, ammoType [, ammoCount]'; -begin - if CheckAndFetchParamCount(L, 2, 3, call, params, n) then + callStr = 'AddAmmo'; + paramsStr = 'gearUid, ammoType [, ammoCount]'; +begin + if CheckAndFetchParamCount(L, 2, 3, callStr, paramsStr, n) then begin - at:= LuaToAmmoTypeOrd(L, 2, call, params); + at:= LuaToAmmoTypeOrd(L, 2, callStr, paramsStr); if (at >= 0) and (TAmmoType(at) <> amNothing) then begin gear:= GearByUID(Trunc(lua_tonumber(L, 1))); @@ -1845,15 +1912,15 @@ ammo : PAmmo; at : LongInt; const - call = 'GetAmmoCount'; - params = 'gearUid, ammoType'; -begin - if CheckLuaParamCount(L, 2, call, params) then + callStr = 'GetAmmoCount'; + paramsStr = 'gearUid, ammoType'; +begin + if CheckLuaParamCount(L, 2, callStr, paramsStr) then begin gear:= GearByUID(Trunc(lua_tonumber(L, 1))); if (gear <> nil) and (gear^.Hedgehog <> nil) then begin - at:= LuaToAmmoTypeOrd(L, 2, call, params); + at:= LuaToAmmoTypeOrd(L, 2, callStr, paramsStr); if at >= 0 then begin ammo:= GetAmmoEntry(gear^.Hedgehog^, TAmmoType(at)); @@ -1955,12 +2022,12 @@ var gear: PGear; t : LongInt; const - call = 'SetEffect'; - params = 'gearUid, effect, effectState'; -begin - if CheckLuaParamCount(L, 3, call, params) then + callStr = 'SetEffect'; + paramsStr = 'gearUid, effect, effectState'; +begin + if CheckLuaParamCount(L, 3, callStr, paramsStr) then begin - t:= LuaToHogEffectOrd(L, 2, call, params); + t:= LuaToHogEffectOrd(L, 2, callStr, paramsStr); if t >= 0 then begin gear := GearByUID(Trunc(lua_tonumber(L, 1))); @@ -1975,12 +2042,12 @@ var gear : PGear; t : LongInt; const - call = 'GetEffect'; - params = 'gearUid, effect'; -begin - if CheckLuaParamCount(L, 2, call, params) then + callStr = 'GetEffect'; + paramsStr = 'gearUid, effect'; +begin + if CheckLuaParamCount(L, 2, callStr, paramsStr) then begin - t:= LuaToHogEffectOrd(L, 2, call, params); + t:= LuaToHogEffectOrd(L, 2, callStr, paramsStr); if t >= 0 then begin gear:= GearByUID(Trunc(lua_tonumber(L, 1))); @@ -2068,10 +2135,10 @@ function lc_endturn(L : Plua_State) : LongInt; Cdecl; var n: LongInt; const - call = 'EndTurn'; - params = '[noTaunts]'; -begin - if CheckAndFetchParamCount(L, 0, 1, call, params, n) then + callStr = 'EndTurn'; + paramsStr = '[noTaunts]'; +begin + if CheckAndFetchParamCount(L, 0, 1, callStr, paramsStr, n) then if n >= 1 then LuaNoEndTurnTaunts:= lua_toboolean(L, 1); LuaEndTurnRequested:= true; @@ -2082,10 +2149,10 @@ var n, time: LongInt; respectFactor: Boolean; const - call = 'Retreat'; - params = 'time [, respectGetAwayTimeFactor]'; -begin - if CheckAndFetchParamCount(L, 1, 2, call, params, n) then + callStr = 'Retreat'; + paramsStr = 'time [, respectGetAwayTimeFactor]'; +begin + if CheckAndFetchParamCount(L, 1, 2, callStr, paramsStr, n) then begin IsGetAwayTime:= true; AttackBar:= 0; @@ -2121,12 +2188,12 @@ color, tn: shortstring; needsTn : boolean; const - call = 'SendStat'; - params = 'statInfoType, color [, teamname]'; -begin - if CheckAndFetchParamCount(L, 2, 3, call, params, n) then + callStr = 'SendStat'; + paramsStr = 'statInfoType, color [, teamname]'; +begin + if CheckAndFetchParamCount(L, 2, 3, callStr, paramsStr, n) then begin - i:= LuaToStatInfoTypeOrd(L, 1, call, params); + i:= LuaToStatInfoTypeOrd(L, 1, callStr, paramsStr); if i >= 0 then begin statInfo:= TStatInfoType(i); @@ -2135,9 +2202,9 @@ if (n = 3) <> needsTn then begin if n = 3 then - LuaCallError(EnumToStr(statInfo) + ' does not support the teamname parameter', call, params) + LuaCallError(EnumToStr(statInfo) + ' does not support the teamname parameter', callStr, paramsStr) else - LuaCallError(EnumToStr(statInfo) + ' requires the teamname parameter', call, params); + LuaCallError(EnumToStr(statInfo) + ' requires the teamname parameter', callStr, paramsStr); end else // count is correct! begin @@ -2239,12 +2306,12 @@ n, s: LongInt; instaVoice: boolean; const - call = 'PlaySound'; - params = 'soundId [, hhGearUid [, instaVoice]]'; -begin - if CheckAndFetchParamCountRange(L, 1, 3, call, params, n) then + callStr = 'PlaySound'; + paramsStr = 'soundId [, hhGearUid [, instaVoice]]'; +begin + if CheckAndFetchParamCountRange(L, 1, 3, callStr, paramsStr, n) then begin - s:= LuaToSoundOrd(L, 1, call, params); + s:= LuaToSoundOrd(L, 1, callStr, paramsStr); if s >= 0 then begin // no gear specified @@ -2272,12 +2339,12 @@ function lc_playmusicsound(L : Plua_State) : LongInt; Cdecl; var s: LongInt; const - call = 'PlayMusicSound'; - params = 'soundId'; -begin - if CheckLuaParamCount(L, 1, call, params) then + callStr = 'PlayMusicSound'; + paramsStr = 'soundId'; +begin + if CheckLuaParamCount(L, 1, callStr, paramsStr) then begin - s:= LuaToSoundOrd(L, 1, call, params); + s:= LuaToSoundOrd(L, 1, callStr, paramsStr); if s >= 0 then PlayMusicSound(TSound(s)) end; @@ -2287,12 +2354,12 @@ function lc_stopmusicsound(L : Plua_State) : LongInt; Cdecl; var s: LongInt; const - call = 'StopMusicSound'; - params = 'soundId'; -begin - if CheckLuaParamCount(L, 1, call, params) then + callStr = 'StopMusicSound'; + paramsStr = 'soundId'; +begin + if CheckLuaParamCount(L, 1, callStr, paramsStr) then begin - s:= LuaToSoundOrd(L, 1, call, params); + s:= LuaToSoundOrd(L, 1, callStr, paramsStr); if s >= 0 then StopMusicSound(TSound(s)) end; @@ -2304,12 +2371,12 @@ var s: LongInt; soundState: boolean; const - call = 'SetSoundMask'; - params = 'soundId, isMasked'; -begin - if CheckLuaParamCount(L, 2, call, params) then + callStr = 'SetSoundMask'; + paramsStr = 'soundId, isMasked'; +begin + if CheckLuaParamCount(L, 2, callStr, paramsStr) then begin - s:= LuaToSoundOrd(L, 1, call, params); + s:= LuaToSoundOrd(L, 1, callStr, paramsStr); if s <> Ord(sndNone) then begin soundState:= lua_toboolean(L, 2); @@ -2858,12 +2925,12 @@ function lc_setammo(L : Plua_State) : LongInt; Cdecl; var np, at: LongInt; const - call = 'SetAmmo'; - params = 'ammoType, count, probability, delay [, numberInCrate]'; -begin - if CheckAndFetchParamCount(L, 4, 5, call, params, np) then + callStr = 'SetAmmo'; + paramsStr = 'ammoType, count, probability, delay [, numberInCrate]'; +begin + if CheckAndFetchParamCount(L, 4, 5, callStr, paramsStr, np) then begin - at:= LuaToAmmoTypeOrd(L, 1, call, params); + at:= LuaToAmmoTypeOrd(L, 1, callStr, paramsStr); if at >= 0 then begin if np = 4 then @@ -2879,13 +2946,13 @@ function lc_getammo(L : Plua_State) : LongInt; Cdecl; var i, at, rawProb, probLevel: LongInt; const - call = 'GetAmmo'; - params = 'ammoType'; + callStr = 'GetAmmo'; + paramsStr = 'ammoType'; begin lc_getammo:= 0; - if CheckLuaParamCount(L, 1, call, params) then + if CheckLuaParamCount(L, 1, callStr, paramsStr) then begin - at:= LuaToAmmoTypeOrd(L, 1, call, params); + at:= LuaToAmmoTypeOrd(L, 1, callStr, paramsStr); if at >= 0 then begin // Ammo count @@ -2913,12 +2980,12 @@ function lc_setammodelay(L : Plua_State) : LongInt; Cdecl; var at, delay: LongInt; const - call = 'SetAmmoDelay'; - params = 'ammoType, delay'; -begin - if CheckLuaParamCount(L, 2, call, params) then + callStr = 'SetAmmoDelay'; + paramsStr = 'ammoType, delay'; +begin + if CheckLuaParamCount(L, 2, callStr, paramsStr) then begin - at:= LuaToAmmoTypeOrd(L, 1, call, params); + at:= LuaToAmmoTypeOrd(L, 1, callStr, paramsStr); delay:= Trunc(lua_tonumber(L, 2)); if (at >= 0) and (TAmmoType(at) <> amNothing) then begin @@ -3065,11 +3132,11 @@ i, n : LongInt; placed, behind, flipHoriz, flipVert : boolean; const - call = 'PlaceSprite'; - params = 'x, y, sprite, frameIdx, tint, behind, flipHoriz, flipVert [, landFlag, ... ]'; + callStr = 'PlaceSprite'; + paramsStr = 'x, y, sprite, frameIdx, tint, behind, flipHoriz, flipVert [, landFlag, ... ]'; begin placed:= false; - if CheckAndFetchLuaParamMinCount(L, 4, call, params, n) then + if CheckAndFetchLuaParamMinCount(L, 4, callStr, paramsStr, n) then begin if not lua_isnoneornil(L, 5) then tint := Trunc(lua_tonumber(L, 5)) @@ -3089,12 +3156,12 @@ for i:= 9 to n do lf:= lf or Trunc(lua_tonumber(L, i)); - n:= LuaToSpriteOrd(L, 3, call, params); + n:= LuaToSpriteOrd(L, 3, callStr, paramsStr); if n >= 0 then begin spr:= TSprite(n); if SpritesData[spr].Surface = nil then - LuaError(call + ': ' + EnumToStr(spr) + ' cannot be placed! (required information not loaded)' ) + LuaError(callStr + ': ' + EnumToStr(spr) + ' cannot be placed! (required information not loaded)' ) else placed:= ForcePlaceOnLand( Trunc(lua_tonumber(L, 1)) - SpritesData[spr].Width div 2, @@ -3113,10 +3180,10 @@ i, n : LongInt; eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert : boolean; const - call = 'EraseSprite'; - params = 'x, y, sprite, frameIdx, eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert [, landFlag, ... ]'; -begin - if CheckAndFetchLuaParamMinCount(L, 4, call, params, n) then + callStr = 'EraseSprite'; + paramsStr = 'x, y, sprite, frameIdx, eraseOnLFMatch, onlyEraseLF, flipHoriz, flipVert [, landFlag, ... ]'; +begin + if CheckAndFetchLuaParamMinCount(L, 4, callStr, paramsStr, n) then begin if not lua_isnoneornil(L, 5) then eraseOnLFMatch := lua_toboolean(L, 5) @@ -3136,12 +3203,12 @@ for i:= 9 to n do lf:= lf or Trunc(lua_tonumber(L, i)); - n:= LuaToSpriteOrd(L, 3, call, params); + n:= LuaToSpriteOrd(L, 3, callStr, paramsStr); if n >= 0 then begin spr:= TSprite(n); if SpritesData[spr].Surface = nil then - LuaError(call + ': ' + EnumToStr(spr) + ' cannot be placed! (required information not loaded)' ) + LuaError(callStr + ': ' + EnumToStr(spr) + ' cannot be placed! (required information not loaded)' ) else EraseLand( Trunc(lua_tonumber(L, 1)) - SpritesData[spr].Width div 2, @@ -3225,7 +3292,7 @@ if CheckLuaParamCount(L, 1, 'HideHog', 'gearUid') then begin gear:= GearByUID(Trunc(lua_tonumber(L, 1))); - if (gear <> nil) and (gear^.hedgehog <> nil) then + if (gear <> nil) and (gear^.hedgehog <> nil) and (gear^.hedgehog^.gear <> nil) then begin HideHog(gear^.hedgehog); lua_pushboolean(L, true); @@ -3388,12 +3455,12 @@ function lc_getammoname(L : Plua_state) : LongInt; Cdecl; var np, at: LongInt; ignoreOverwrite: Boolean; -const call = 'GetAmmoName'; - params = 'ammoType [, ignoreOverwrite ]'; -begin - if CheckAndFetchParamCountRange(L, 1, 2, call, params, np) then +const callStr = 'GetAmmoName'; + paramsStr = 'ammoType [, ignoreOverwrite ]'; +begin + if CheckAndFetchParamCountRange(L, 1, 2, callStr, paramsStr, np) then begin - at:= LuaToAmmoTypeOrd(L, 1, call, params); + at:= LuaToAmmoTypeOrd(L, 1, callStr, paramsStr); ignoreOverwrite := false; if np > 1 then ignoreOverwrite := lua_toboolean(L, 2); @@ -3412,15 +3479,15 @@ var at: LongInt; weapon: PAmmo; gear: PGear; -const call = 'GetAmmoTimer'; - params = 'gearUid, ammoType'; -begin - if CheckLuaParamCount(L, 2, call, params) then +const callStr = 'GetAmmoTimer'; + paramsStr = 'gearUid, ammoType'; +begin + if CheckLuaParamCount(L, 2, callStr, paramsStr) then begin gear:= GearByUID(Trunc(lua_tonumber(L, 1))); if (gear <> nil) and (gear^.Hedgehog <> nil) then begin - at:= LuaToAmmoTypeOrd(L, 2, call, params); + at:= LuaToAmmoTypeOrd(L, 2, callStr, paramsStr); weapon:= GetAmmoEntry(gear^.Hedgehog^, TAmmoType(at)); if (Ammoz[TAmmoType(at)].Ammo.Propz and ammoprop_Timerable) <> 0 then lua_pushnumber(L, weapon^.Timer) @@ -3600,10 +3667,10 @@ function lc_endluatest(L : Plua_State) : LongInt; Cdecl; var rstring: shortstring; const - call = 'EndLuaTest'; - params = 'TEST_SUCCESSFUL or TEST_FAILED'; -begin - if CheckLuaParamCount(L, 1, call, params) then + callStr = 'EndLuaTest'; + paramsStr = 'TEST_SUCCESSFUL or TEST_FAILED'; +begin + if CheckLuaParamCount(L, 1, callStr, paramsStr) then begin case Trunc(lua_tonumber(L, 1)) of @@ -3611,7 +3678,7 @@ HaltTestFailed: rstring:= 'FAILED'; else begin - LuaCallError('Parameter must be either ' + params, call, params); + LuaCallError('Parameter must be either ' + paramsStr, callStr, paramsStr); exit(0); end; end; @@ -4257,6 +4324,8 @@ spr: TSprite; mg : TMapGen; we : TWorldEdge; + msi: TMsgStrId; + gsi: TGoalStrId; begin // initialize lua luaState:= lua_open; @@ -4375,6 +4444,13 @@ for we:= Low(TWorldEdge) to High(TWorldEdge) do ScriptSetInteger(EnumToStr(we), ord(we)); +// register message IDs +for msi:= Low(TMsgStrId) to High(TMsgStrId) do + ScriptSetInteger(EnumToStr(msi), ord(msi)); + +for gsi:= Low(TGoalStrId) to High(TGoalStrId) do + ScriptSetInteger(EnumToStr(gsi), ord(gsi)); + ScriptSetLongWord('capcolDefault' , capcolDefaultLua); ScriptSetLongWord('capcolSetting' , capcolSettingLua); @@ -4485,6 +4561,7 @@ lua_register(luaState, _P'ParseCommand', @lc_parsecommand); lua_register(luaState, _P'ShowMission', @lc_showmission); lua_register(luaState, _P'HideMission', @lc_hidemission); +lua_register(luaState, _P'GetEngineString', @lc_getenginestring); lua_register(luaState, _P'SetAmmoTexts', @lc_setammotexts); lua_register(luaState, _P'SetAmmoDescriptionAppendix', @lc_setammodescriptionappendix); lua_register(luaState, _P'AddCaption', @lc_addcaption);