Losowe artefakty i amunicja na sprzedaż

Losowe artefakty i amunicja na sprzedaż

Postprzez tt44 w 22 Lip 2014, 14:48

Opiszę tutaj jak za pomocą skryptu sprawić, aby NPC posiadali losowe artefakty oraz amunicję na sprzedaż.

Najpierw tworzymy tabele z danymi (nazwa przedmiotu, ilość, prawdopodobieństwo posiadania go przez NPC).
Prawdopodobieństwo oraz ilość ustawiacie według uznania.
Funkcję main() należy dodać w callbacku net_spawn w skrypcie bind_stalker.
Kod: [ Pobierz ] [ Ukryj ]
-- Pokaże jak tabela ma wyglądać na przykładzie artefaktów.
local artefacts_table = {
        ["af_medusa"]                           = {1, 0.25},
        ["af_cristall_flower"]                  = {1, 0.25}
}
-- Oddzielna tabela dla amunicji
local ammo_table = {
        ["ammo_9x18_fmj"]                       = {1, 0.25}
}

function main()
        for index_id = 1, 65535 do
                local npc = level.object_by_id(index_id)
                if npc ~= nil and
                        npc:alive() and
                        npc:name() ~= db.actor:name() and
                        npc:character_community() ~= "trader" and
                        IsStalker(npc)
                then
                        spawn_random_equipment(npc)
                end
        end
end

function spawn_random_equipment(npc)
        -- Spawn losowych artefaktów
        for k, v in pairs(artefacts_table) do
                for index = 1, v[1] do
                        if math.random() > v[2] then
                                spawn_item_in_inv(k, npc)
                                break
                        end
                end
        end
        -- Spawn losowej amunicji
        for k, v in pairs(ammo_table) do
                for index = 1, v[1] do
                        if math.random() > v[2] then
                                spawn_ammo_in_inv(k, npc)
                                break
                        end
                end
        end
end

-- Funkcja spawnująca przedmiot w ekwipunku NPC
function spawn_item_in_inv(item, npc)
        alife():create(item, npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id())
end
-- Funkcja spawnująca amunicję w ekwipunku NPC
function spawn_ammo_in_inv(item, npc)
        local box_size = system_ini():r_u32(item, "box_size")
        se_respawn.create_ammo(item, npc:position(), npc:m_level_vertex_id(), npc:m_game_vertex_id(), npc:id(), box_size)
end
 

Za ten post tt44 otrzymał następujące punkty reputacji:
Positive Pangia.
tt44
Stalker

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

Reklamy Google

Powróć do Tutoriale

Kto jest na forum

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