tt44
01 sie 2014, 11:46
Posty: 4• Strona 1 z 1
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:
[lua]
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
[/lua]
Zastosowanie:
[lua]
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
[/lua]
Wywołanie obrażeń na obiekcie
[lua]
--[[
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
[/lua]
Zastosowanie:
[lua]
-- Zadaje aktorowi telepatyczne obrażenia o sile 0.50
hit_obj(db.actor, 0.50, hit.telepatic)
[/lua]
Nowe funkcje będą dodawane co jakiś czas.
Funkcja zwraca ilość posiadanych przez aktora przedmiotów o danej nazwie:
[lua]
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
[/lua]
Zastosowanie:
[lua]
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
[/lua]
Wywołanie obrażeń na obiekcie
[lua]
--[[
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
[/lua]
Zastosowanie:
[lua]
-- Zadaje aktorowi telepatyczne obrażenia o sile 0.50
hit_obj(db.actor, 0.50, hit.telepatic)
[/lua]
Postawili kozaka za ten post (2):
GośćPlaargath
Co jakiś czas? 
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.
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.
Funkcja zwracjąca wybraną linijkę z pliku ini na przykład jakiegoś itemu.
[lua]
-- 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
[/lua]
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ść.
[lua]
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
[/lua]
[lua]
-- 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
[/lua]
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ść.
[lua]
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
[/lua]
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:
[lua]
function HackCompare(t1,t2)
table.sort(t1)
table.sort(t2)
return unpack(t1) == unpack(t2)
end
[/lua]
Mi się to przydaje się to do porównywania zawartości configów/pluginów.
[lua]
function HackCompare(t1,t2)
table.sort(t1)
table.sort(t2)
return unpack(t1) == unpack(t2)
end
[/lua]
Mi się to przydaje się to do porównywania zawartości configów/pluginów.
Posty: 4• Strona 1 z 1

