Forum Stalker.pl • Zobacz temat - Lua - przydatne funkcje i klasy

Lua - przydatne funkcje i klasy

Lua - przydatne funkcje i klasy

Postprzez tt44 w 01 Sie 2014, 11:46

Zamieszczam tutaj kilka przydatnych funkcji mojego autorstwa z opisem oraz przykładem zastosowania.
Nowe funkcje będą dodawane co jakiś czas.

Funkcja zwraca ilość posiadanych przez aktora przedmiotów o danej nazwie:
Kod: [ Pobierz ] [ Ukryj ]
function GetItemsCount(item)
        local count = 0
        for index = 0, db.actor:object_count() - 1 do
                if db.actor:object(index):section() == item then
                        count = count + 1
                end
        end
        return count
end
 

Zastosowanie:
Kod: [ Pobierz ] [ Ukryj ]
local count = GetItemsCount("bandage") -- zmienna count zawiera ilość bandaży posiadanych przez aktora

-- Jeśli aktor posiada pięć lub więcej bandaży
if count >= 5 then
 


Wywołanie obrażeń na obiekcie
Kod: [ Pobierz ] [ Ukryj ]
--[[
target - tu podajesz obiekt na którym mają zostać wywołane obrażenia np. db.actor
strength - siła obrażenia np. 0.15
hit_type - typ obrażenia (burn, chemical_burn, dummy, explosion, fire_wound, radiation, shock, strike, telepatic lub wound)
]]

function hit_obj(target, strength, hit_type)
        local h = hit()
        h.draftsman = target
        h.direction = vector():set(0,0,0)    
        h.power     = strength  
        h.impulse   = 1
        h.type      = hit_type
        target:hit(h)
end
 

Zastosowanie:
Kod: [ Pobierz ] [ Ukryj ]
-- Zadaje aktorowi telepatyczne obrażenia o sile 0.50
hit_obj(db.actor, 0.50, hit.telepatic)
 
Ostatnio edytowany przez tt44, 09 Lut 2015, 18:02, edytowano w sumie 1 raz

Za ten post tt44 otrzymał następujące punkty reputacji:
Positive Gość, Plaargath.
tt44
Stalker

Posty: 88
Dołączenie: 12 Lut 2013, 19:02
Ostatnio był: 24 Cze 2017, 19:07
Kozaki: 60

Reklamy Google

Re: Lua - przydatne funkcje i klasy

Postprzez Plaargath w 09 Lut 2015, 03:43

Co jakiś czas? :D
Ja chętnie pooglądam, co tam stworzyłeś ciekawego. Bardzo to uczące, a i czasem ratuje w potrzebie, jak już się zdarzyło.
Image Image

Merkantylizm, srerkantylizm.
Awatar użytkownika
Plaargath
Weteran

Posty: 653
Dołączenie: 23 Mar 2010, 15:12
Ostatnio był: 10 Sie 2024, 12:24
Kozaki: 234

Re: Lua - przydatne funkcje i klasy

Postprzez tt44 w 09 Lut 2015, 18:04

Funkcja zwracjąca wybraną linijkę z pliku ini na przykład jakiegoś itemu.
Kod: [ Pobierz ] [ Ukryj ]
-- Opiszę to na przykładzie: Chcemy uzyskać w skrypcie np. kosz chleba:
local cost = parse_ini(system_ini(), "bread", "cost", "string", 0) -- zmienna ta zawiera koszt chleba
function parse_ini(ini, section, line, type, default)  
        if ini:section_exist(section) and ini:line_exist(section, line) then
                if type == "string" then
                        return ini:r_string(section, line)
                elseif type == "float" then
                        return ini:r_float(section, line)
                elseif type == "bool" then
                        return ini:r_bool(section, line)
                else
                        return default
                end
        end
end
 

Jako section podać należy nazwę sekcji, line to nazwa linijki z danej sekcji, a jako type "string", "float" lub "bool" w zależności co dana linijka zawiera.

Funkcja usuwająca określoną ilość itemów. Jako section należy podać nazwę itemu, a jako count ilość.
Kod: [ Pobierz ] [ Ukryj ]
function RemoveItems(section, count)
        for index = 0, db.actor:object_count() - 1 do
                if count > 0 and db.actor:object(index):section() == section then
                        alife():release(alife():object(db.actor:object(index):id()))
                        count = count - 1
                end
        end
end
 
tt44
Stalker

Posty: 88
Dołączenie: 12 Lut 2013, 19:02
Ostatnio był: 24 Cze 2017, 19:07
Kozaki: 60

hack na prymitywne porównywanie tablic

Postprzez Plaargath w 06 Lut 2016, 21:26

W Lua bez pisania serioznych funkcji nie da się porównywać tablic. Znalazłem fajnego hacka, który przydaje się, jeśli na szybko chcę porównać dwie proste tablice i nie interesuje mnie kolejność w nich:
Kod: [ Pobierz ] [ Ukryj ]
function HackCompare(t1,t2)
  table.sort(t1)
  table.sort(t2)
  return unpack(t1) == unpack(t2)
end
 


Mi się to przydaje się to do porównywania zawartości configów/pluginów.
Image Image

Merkantylizm, srerkantylizm.
Awatar użytkownika
Plaargath
Weteran

Posty: 653
Dołączenie: 23 Mar 2010, 15:12
Ostatnio był: 10 Sie 2024, 12:24
Kozaki: 234


Powróć do Tutoriale

Kto jest na forum

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 1 gość