- Dokumentacja
- Funkcje wspólne
- processLineOfSight
Funkcja
processLineOfSight
Szuka pierwszej przeszkody na odcinku między dwoma punktami i zwraca szczegóły trafienia. Na kliencie pyta grę (teren, budynki, obiekty, auta, postacie, kolizje z plików .col) i zwraca dużo danych: punkt trafienia, element, normalną powierzchni, materiał, oświetlenie, część ciała lub pojazdu, a na życzenie także model obiektu mapy z położeniem. Każde wywołanie czeka ok. jedną klatkę gry; gdy świat jeszcze się wczytuje (ekran ładowania), od razu zwraca false. Na serwerze liczy na uproszczonym modelu (kule elementów, bez terenu i budynków).
Składnia
bool, float... processLineOfSight(float sx, float sy, float sz, float ex, float ey, float ez [, bool checkBuildings = true, bool checkVehicles = true, bool checkPeds = true, bool checkObjects = true, bool checkDummies = true, bool seeThroughStuff = false, bool ignoreSomeObjectsForCamera = false, bool shootThroughStuff = false, element ignoredElement = nil, bool includeWorldModelInformation = false, bool throughMapObjects = false])Argumenty
sxfloat- X początku.
syfloat- Y początku.
szfloat- Z początku.
exfloat- X końca.
eyfloat- Y końca.
ezfloat- Z końca.
checkBuildingsbool, opcjonalny = true- Uwzględnij budynki i teren.
checkVehiclesbool, opcjonalny = true- Uwzględnij pojazdy.
checkPedsbool, opcjonalny = true- Uwzględnij postacie.
checkObjectsbool, opcjonalny = true- Uwzględnij obiekty.
checkDummiesbool, opcjonalny = true- Uwzględnij obiekty pomocnicze (klient).
seeThroughStuffbool, opcjonalny = false- Przenikaj przez rzeczy przezroczyste (klient).
ignoreSomeObjectsForCamerabool, opcjonalny = false- Pomiń obiekty pomijane przez kamerę (klient).
shootThroughStuffbool, opcjonalny = false- Przenikaj przez rzeczy, przez które przechodzą kule (klient).
ignoredElementelement, opcjonalny = nil- Element pomijany w teście.
includeWorldModelInformationbool, opcjonalny = false- Zwróć też model obiektu mapy, jego położenie, obrót i model LOD (klient).
throughMapObjectsbool, opcjonalny = false- Przenikaj przez drzewa, krzaki i obiekty mapy (latarnie, ławki, płoty); teren, budynki, auta, postacie i obiekty skryptów nadal zatrzymują (klient).
Różnice względem MTA:SA
- Tych argumentów z MTA:SA tu nie ma:
bool bIncludeExtraMateriaInfo = false
W MTA:SA
processLineOfSight(float startX, float startY, float startZ, float endX, float endY, float endZ, bool checkBuildings = true, bool checkVehicles = true, bool checkPlayers = true, bool checkObjects = true, bool checkDummies = true, bool seeThroughStuff = false, bool ignoreSomeObjectsForCamera = false, bool shootThroughStuff = false, element ignoredElement = nil, bool includeWorldModelInformation = false, bool bIncludeCarTyres = false, bool bIncludeExtraMateriaInfo = false)Zwraca
hit, x, y, z trafienia, element, nx, ny, nz, materiał, oświetlenie, część, (model świata, x, y, z, rx, ry, rz, LOD); false, gdy nic nie trafiono.
Przykład
addCommandHandler("cel", function()
local x1, y1, z1, x2, y2, z2 = getCameraMatrix()
local hit, hx, hy, hz, element = processLineOfSight(x1, y1, z1, x1 + (x2 - x1) * 50, y1 + (y2 - y1) * 50, z1 + (z2 - z1) * 50)
if hit then outputChatBox(("Celujesz w %.1f %.1f %.1f %s"):format(hx, hy, hz, element and getElementType(element) or "")) end
end)
Zobacz też
isLineOfSightClearSprawdza, czy odcinek między dwoma punktami nie jest niczym zasłonięty. Na kliencie pyta grę (teren, budynki, obiekty, pojazdy, postacie, kolizje z plików .col). Na serwerze liczy na uproszczonym modelu: elementy skryptów jako kule, bez terenu i budynków mapy, więc służy tylko do przybliżonej oceny.getGroundPositionZwraca wysokość gruntu pod punktem. Na kliencie pyta grę (prawdziwy teren i budynki). Na serwerze serwer nie zna terenu mapy, więc bierze tylko obiekty skryptów i poziom wody; często zwracafalse.