summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: c0e0a28)
raw | patch | inline | side by side (parent: c0e0a28)
author | FGSFDSFGS <derp.primus@gmail.com> | |
Tue, 28 Jun 2016 16:01:54 +0000 (19:01 +0300) | ||
committer | FGSFDSFGS <derp.primus@gmail.com> | |
Tue, 28 Jun 2016 18:48:51 +0000 (21:48 +0300) |
Conflicts:
src/game/g_scriptprocs.pas
src/game/g_scriptprocs.pas
src/game/g_scriptprocs.pas | patch | blob | history |
index 343f85f694da9fe6ee4b2f5382a35647d7fdc388..dc0da2dd9c6c242262e67b49fe73145ed51afc82 100644 (file)
>>>>>>> 3132944... made TRIGGER_SCRIPT work
function SP_Lua_ConPrint(L: PScriptContext): Integer; cdecl;
+<<<<<<< HEAD
+=======
+// game.con_print(text)
+const
+ MINARGS = 1;
+begin
+ Result := 0;
+ if not CheckArgs(L, MINARGS) then Exit;
+ g_Console_Add(luaL_checkstring(L, 1));
+end;
+
+function SP_Lua_Message(L: PScriptContext): Integer; cdecl;
+// game.message(type, text, channel[, uid=0, timeout=144])
+const
+ MINARGS = 3;
+var
+ MText: string;
+ MChan, MKind, MID, MTime: Integer;
+begin
+ Result := 0;
+ if not CheckArgs(L, MINARGS) then exit;
+
+ MKind := luaL_checkinteger(L, 1);
+ MText := luaL_checkstring(L, 2);
+ MChan := luaL_checkinteger(L, 3);
+
+ MID := lua_tointeger(L, 4);
+ MTime := lua_tointeger(L, 5);
+ if MTime = 0 then MTime := 144;
+
+ tr_Message(MKind, MText, MChan, MTime, MID);
+end;
+
+function SP_Lua_GetGameMode(L: PScriptContext): Integer; cdecl;
+// game.get_gamemode()
+const
+ MINARGS = 0;
+begin
+ Result := 1;
+ lua_pushinteger(L, gGameSettings.GameMode);
+end;
+
+function SP_Lua_GetGameType(L: PScriptContext): Integer; cdecl;
+// game.get_gametype()
+const
+ MINARGS = 0;
+begin
+ Result := 1;
+ lua_pushinteger(L, gGameSettings.GameType);
+end;
+
+function SP_Lua_GetTime(L: PScriptContext): Integer; cdecl;
+// game.get_time()
+const
+ MINARGS = 0;
+begin
+ Result := 1;
+ lua_pushinteger(L, gTime);
+end;
+
+function SP_Lua_PlaySound(L: PScriptContext): Integer; cdecl;
+// game.sound(name[positional=false, x=0, y=0])
+const
+ MINARGS = 1;
+var
+ SName: string;
+ SPos: Boolean;
+ SX, SY: Integer;
+begin
+ Result := 0;
+ if not CheckArgs(L, MINARGS) then exit;
+
+ SName := luaL_checkstring(L, 1);
+
+ SPos := lua_toboolean(L, 2);
+ SX := lua_tointeger(L, 3);
+ SY := lua_tointeger(L, 4);
+
+ if SPos then
+ g_Sound_PlayExAt(SName, SX, SY)
+ else
+ g_Sound_PlayEx(SName);
+
+ if g_Game_IsNet then
+ MH_SEND_Sound(SX, SY, SName, SPos);
+end;
+
+// players //
+
+function SP_Lua_PlayerGetKeys(L: PScriptContext): Integer; cdecl;
+// game.player_get_keys(uid)
+const
+ MINARGS = 1;
+var
+ UID: Integer;
+ P: TPlayer;
+begin
+ Result := 1;
+ if not CheckArgs(L, MINARGS) then
+ begin
+ Result := 0;
+ exit;
+ end;
+
+ UID := luaL_checkinteger(L, 1);
+
+ if g_GetUIDType(UID) <> UID_PLAYER then
+ lua_pushnil(L)
+ else
+ begin
+ P := g_Player_Get(UID);
+ if P = nil then
+ begin
+ lua_pushnil(L);
+ exit;
+ end;
+ lua_pushinteger(L, P.GetKeys);
+ end;
+end;
+
+function SP_Lua_PlayerGetArmor(L: PScriptContext): Integer; cdecl;
+// game.player_get_armor(uid)
+const
+ MINARGS = 1;
+var
+ UID: Integer;
+ P: TPlayer;
+begin
+ Result := 1;
+ if not CheckArgs(L, MINARGS) then
+ begin
+ Result := 0;
+ exit;
+ end;
+
+ UID := luaL_checkinteger(L, 1);
+
+ if g_GetUIDType(UID) <> UID_PLAYER then
+ lua_pushnil(L)
+ else
+ begin
+ P := g_Player_Get(UID);
+ if P = nil then
+ begin
+ lua_pushnil(L);
+ exit;
+ end;
+ lua_pushinteger(L, P.Armor);
+ end;
+end;
+
+function SP_Lua_PlayerGetName(L: PScriptContext): Integer; cdecl;
+// game.player_get_name(uid)
+const
+ MINARGS = 1;
+var
+ UID: Integer;
+ P: TPlayer;
+begin
+ Result := 1;
+ if not CheckArgs(L, MINARGS) then
+ begin
+ Result := 0;
+ exit;
+ end;
+
+ UID := luaL_checkinteger(L, 1);
+
+ if g_GetUIDType(UID) <> UID_PLAYER then
+ lua_pushnil(L)
+ else
+ begin
+ P := g_Player_Get(UID);
+ if P = nil then
+ begin
+ lua_pushnil(L);
+ exit;
+ end;
+ lua_pushstring(L, P.Name);
+ end;
+end;
+
+function SP_Lua_PlayerGetTeam(L: PScriptContext): Integer; cdecl;
+// game.player_get_team(uid)
+const
+ MINARGS = 1;
+var
+ UID: Integer;
+ P: TPlayer;
+begin
+ Result := 1;
+ if not CheckArgs(L, MINARGS) then
+ begin
+ Result := 0;
+ exit;
+ end;
+
+ UID := luaL_checkinteger(L, 1);
+
+ if g_GetUIDType(UID) <> UID_PLAYER then
+ lua_pushnil(L)
+ else
+ begin
+ P := g_Player_Get(UID);
+ if P = nil then
+ begin
+ lua_pushnil(L);
+ exit;
+ end;
+ lua_pushinteger(L, P.Team);
+ end;
+end;
+
+function SP_Lua_PlayerGetScore(L: PScriptContext): Integer; cdecl;
+// game.player_get_score(uid)
+const
+ MINARGS = 1;
+var
+ UID: Integer;
+ P: TPlayer;
+begin
+ Result := 1;
+ if not CheckArgs(L, MINARGS) then
+ begin
+ Result := 0;
+ exit;
+ end;
+
+ UID := luaL_checkinteger(L, 1);
+
+ if g_GetUIDType(UID) <> UID_PLAYER then
+ lua_pushnil(L)
+ else
+ begin
+ P := g_Player_Get(UID);
+ if P = nil then
+ begin
+ lua_pushnil(L);
+ exit;
+ end;
+ lua_pushinteger(L, P.Frags);
+ end;
+end;
+
+// actors //
+
+function SP_Lua_ActorGetPos(L: PScriptContext): Integer; cdecl;
+// game.uid_get_pos(uid)
+const
+ MINARGS = 1;
+var
+ UID: Integer;
+ P: TPlayer;
+ M: TMonster;
+begin
+ Result := 2;
+ if not CheckArgs(L, MINARGS) then
+ begin
+ Result := 0;
+ exit;
+ end;
+
+ UID := luaL_checkinteger(L, 1);
+
+ if g_GetUIDType(UID) = UID_PLAYER then
+ begin
+ P := g_Player_Get(UID);
+ if P = nil then
+ begin
+ lua_pushnil(L);
+ lua_pushnil(L);
+ exit;
+ end;
+ lua_pushinteger(L, P.GameX + PLAYER_RECT_CX);
+ lua_pushinteger(L, P.GameY + PLAYER_RECT_CY);
+ end
+ else if g_GetUIDType(UID) = UID_MONSTER then
+ begin
+ M := g_Monsters_Get(UID);
+ if M = nil then
+ begin
+ lua_pushnil(L);
+ lua_pushnil(L);
+ exit;
+ end;
+ lua_pushinteger(L, M.Obj.X+M.Obj.Rect.X+(M.Obj.Rect.Width div 2));
+ lua_pushinteger(L, M.Obj.Y+M.Obj.Rect.Y+(M.Obj.Rect.Height div 2));
+ end
+ else
+ begin
+ lua_pushnil(L);
+ lua_pushnil(L);
+ end;
+end;
+
+function SP_Lua_ActorNearest(L: PScriptContext): Integer; cdecl;
+// game.uid_nearest(x, y, [type=all, min, max])
+const
+ MINARGS = 2;
+var
+ i, UID, AType: Integer;
+ X, Y, Dist, MinDist, MaxDist, FMin: Double;
+begin
+ Result := 1;
+ if not CheckArgs(L, MINARGS) then
+ begin
+ Result := 0;
+ exit;
+ end;
+
+ X := luaL_checkinteger(L, 1);
+ Y := luaL_checkinteger(L, 2);
+
+ AType := lua_tointeger(L, 3);
+ MinDist := Sqr(lua_tonumber(L, 4));
+ MaxDist := Sqr(lua_tonumber(L, 5));
+ if MaxDist < 0.01 then MaxDist := 1e15;
+ if MinDist < 0.01 then MinDist := 0;
+ FMin := MinDist;
+ UID := -1;
+
+ if (AType in [UID_GAME, UID_PLAYER]) and (gPlayers <> nil) then
+ for i := 0 to High(gPlayers) do
+ begin
+ if gPlayers[i] = nil then continue;
+ Dist := Sqr(X - gPlayers[i].GameX) + Sqr(Y - gPlayers[i].GameY);
+ if (Dist > MinDist) and (Dist < FMin) then
+ begin
+ UID := gPlayers[i].UID;
+ FMin := Dist;
+ end;
+ end;
+ if (AType in [UID_GAME, UID_MONSTER]) and (gMonsters <> nil) then
+ for i := 0 to High(gMonsters) do
+ begin
+ if gMonsters[i] = nil then continue;
+ Dist := Sqr(X - gMonsters[i].GameX) + Sqr(Y - gMonsters[i].GameY);
+ if (Dist > MinDist) and (Dist < FMin) then
+ begin
+ UID := gMonsters[i].UID;
+ FMin := Dist;
+ end;
+ end;
+
+ lua_pushinteger(L, UID);
+end;
+
+function SP_Lua_ActorFarthest(L: PScriptContext): Integer; cdecl;
+// game.uid_farthest(x, y, [type=all, min, max])
+const
+ MINARGS = 2;
+var
+ i, UID, AType: Integer;
+ X, Y, Dist, MinDist, MaxDist, FMax: Double;
+begin
+ Result := 1;
+ if not CheckArgs(L, MINARGS) then
+ begin
+ Result := 0;
+ exit;
+ end;
+
+ X := luaL_checkinteger(L, 1);
+ Y := luaL_checkinteger(L, 2);
+
+ AType := lua_tointeger(L, 3);
+ MinDist := Sqr(lua_tonumber(L, 4));
+ MaxDist := Sqr(lua_tonumber(L, 5));
+ if MaxDist < 0.01 then MaxDist := 1e15;
+ if MinDist < 0.01 then MinDist := 0;
+ FMax := MinDist;
+ UID := -1;
+
+ if (AType in [UID_GAME, UID_PLAYER]) and (gPlayers <> nil) then
+ for i := 0 to High(gPlayers) do
+ begin
+ if gPlayers[i] = nil then continue;
+ Dist := Sqr(X - gPlayers[i].GameX) + Sqr(Y - gPlayers[i].GameY);
+ if (Dist < MaxDist) and (Dist > FMax) then
+ begin
+ UID := gPlayers[i].UID;
+ FMax := Dist;
+ end;
+ end;
+ if (AType in [UID_GAME, UID_MONSTER]) and (gMonsters <> nil) then
+ for i := 0 to High(gMonsters) do
+ begin
+ if gMonsters[i] = nil then continue;
+ Dist := Sqr(X - gMonsters[i].GameX) + Sqr(Y - gMonsters[i].GameY);
+ if (Dist < MaxDist) and (Dist > FMax) then
+ begin
+ UID := gMonsters[i].UID;
+ FMax := Dist;
+ end;
+ end;
+
+ lua_pushinteger(L, UID);
+end;
+
+function SP_Lua_ActorGetType(L: PScriptContext): Integer; cdecl;
+// game.uid_type(uid)
+const
+ MINARGS = 2;
+var
+ UID, UType: Integer;
+begin
+ Result := 1;
+ if not CheckArgs(L, MINARGS) then
+ begin
+ Result := 0;
+ exit;
+ end;
+
+ UID := luaL_checkinteger(L, 1);
+ if (UID < 0) or (UID > $FFFF) then
+ lua_pushnil(L)
+ else
+ begin
+ UType := g_GetUIDType(UID);
+ if not (UType in [UID_PLAYER, UID_MONSTER{*, UID_ITEM*}]) then
+ lua_pushnil(L)
+ else
+ lua_pushinteger(L, UType);
+ end;
+end;
+
+function SP_Lua_ActorDamage(L: PScriptContext): Integer; cdecl;
+// game.uid_damage(uid, amount[, hit_type=hit_some, vx=0, vy=0, attacker_uid=0])
+const
+ MINARGS = 2;
+var
+ UID, AUID, Dmg, Atk, VX, VY: Integer;
+ P: TPlayer;
+ M: TMonster;
+>>>>>>> 081369f... scripts: uid_get_pos() now returns center
begin
g_Console_Add(lua_tostring(L, -1));
Result := 0;