PL/getElementsByType

From Multi Theft Auto: Wiki

Ta funkcja jest używana do pobrania listy wszystkich elementów wybranego typu. Może być użyty, aby wiedzieć gdzie element znajduje się w drzewie elementów. Może być używany też np. w plikach map. Jeśli jest tam element typu "flaga" (przykład: <flaga />) będzie można odnaleść go używając argumentu "flaga".

Składnia

Click to collapse [-]
Serwer
table getElementsByType ( string typElementu, [ element startat=getRootElement() ] ) 
Click to collapse [-]
Klient
table getElementsByType ( string typElementu, [ element startat=getRootElement(), bool jestStreamowany=false ] ) 

Wymagane argumenty

  • typElementu: Typ elementu który chcesz wyszukać. Może być używany z niestandardowymi elementami jak te z plików .map. Lista wbudowanych elementów:
    • "player": Gracz połączony z serwerem,
    • "ped": Stworzony ped,
    • "water": Zbiornik wodny,
    • "sound": Grająca muzyka,
    • "vehicle": Pojazd,
    • "object": Obiekt,
    • "pickup": Pickup,
    • "marker": Marker,
    • "colshape": Kolizje,
    • "blip": Blip,
    • "radararea": Area radaru,
    • "team": Drużyna,
    • "spawnpoint": Punkt spawnu,
    • "remoteclient": Klient zdalnie połączony z serwerem,
    • "console": Konsola serwera,
    • "projectile": Pocisk.

Argumenty opcjonalne

UWAGA: Kiedy korzystasz z opcjonalnych argumentów, musisz uzupełnić wszystkie argumenty przed tym, którego chcesz użyć. Aby uzyskać więcej informacji na ten temat, zajrzyj tutaj.

  • startat: element na którym szukanie powinno się zacząć.
Click to collapse [-]
Client
  • streamedIn: Jeśli zostanie ustawiony na true funkcja wyszuka tylko elementy które znajdują się w zasięgu streamingu gracza.

Co zwraca

Zwraca tabelę zawierającą elementy wybranego typu. Zwraca pustą tabelę jeśli szukanie nie przyniosło wyników. Zwraca false jeśli wprowadzony ciąg znaków był nieprawidłowy.

Przykłady

Przykład 1: Ten przykład wyszukuje graczy i sprawdza, czy są oni w pojeździe.

local players = getElementsByType ( "player" ) -- pobieranie tabeli z wszystkimi graczami on-line
for theKey,thePlayer in ipairs(players) do -- używanie pętli aby dokonać sprawdzenia na wszystkich graczach
   if ( isPlayerInVehicle ( thePlayer ) ) then -- jeśli gracz jest w pojeździe
      outputChatBox ( getPlayerName ( thePlayer ) .. " jest w jakimś pojeździe" )
   else -- jeśli nie w pojeździe,
      outputChatBox ( getPlayerName ( thePlayer ) .. " nie jest w pojeździe" )
   end
end

Przykład 2: Ten przykład wyszukuje drużyny i wyświetla ich nazwy na czacie

local teams = getElementsByType("team")
for i,team in ipairs(teams) do
   local teamName = getTeamName(team) -- pobranie nazwy drużyny,
   outputChatBox(teamName) -- wyświetlenie nazwy drużyny na czacie,
end

Przykład 3: Ten przykład pokazuje jak powinnieneś stworzyć nowy element (w tym przypadku stacjaPaliw) i wyszukać go

function createGasStations(below)
    local gasstations = getElementsByType ( "stacjaPaliw", below )
    for theKey,theGasStation in ipairs(gasstations) do 
        local x = getElementData(theGasStation, "posX") -- pozycja
        local y = getElementData(theGasStation, "posY")
        local z = getElementData(theGasStation, "posZ")
        setElementParent(createColSphere(x, y, z, 10), theGasStation) -- stworzenie strefy kolizji dla stacji paliw
        addEventHandler("onColShapeHit", theGasStation, giveGas) -- funkcja wywołująca się gdy gracz uderzy w kolizję
    end
end

function mapLoad()
    createGasStations(source) -- stworzenie stacji paliw dla nowo wczytanej mapy
end
addEventHandler("onResourceStart", getRootElement(), mapLoad)

function giveGas(hittingElement)
    local theGasStation = source
    if getElementType(hittingElement) == "vehicle" then
        local gas_left = getElementData(theGasStation, "amount")
        local gas_speed = getElementData(theGasStation, "speed")
        if gas_left > 0 then

            local gas_to_remove = gas_speed 
            if gas_left < gas_speed then
                gas_to_remove = gas_left

            local current_vehicle_gas = getElementData(hittingElement, "gas")
            current_vehicle_gas = current_vehicle_gas + gas_to_remove
            gas_left = gas_left - gas_to_remove

            setElementData(hittingElement, "gas", current_vehicle_gas)
            setElementData(theGasStation, "amount", gas_left)
        else
            outputChatBox("Brak paliwa w dystrybutorze!")
        end
    end
end

Przykład 4: Ten przykład wyszukuje samochody i pokazuje ich pozycje na mapie przy użyciu createBlipAttachedTo

local auta = getElementsByType("vehicle")
for i,auto in ipairs(auta) do
    createBlipAttachedTo (auto, 0, 2, 255, 0, 0, 255, 0, 99999.0)
end