local types = require('openmw.types') local util = require('openmw.util') local world = require('openmw.world') local CELL_SIZE = 8192 local function getRandomPosition(cellX, cellY) local x = math.random(7892) local y = math.random(7892) local z = -math.random(1748) return util.vector3(cellX + x, cellY + y, z) end local function getRandomOffset() local x = math.random(1000) local y = math.random(1000) local z = math.random(1000) local v = util.vector3(x, y, z) return v:normalize() * 100 end local function getPlayerLevel() return types.Player.stats.level(world.players[1]).current end local function spawnFish(cell) if (cell.worldSpaceId ~= 'sys::default') then return end local spawnCount = math.random(0, 10) if (spawnCount < 1) then return end local list = types.LevelledCreature.record('h2o_all_lev-2') if (list == nil) then return end local cellX = cell.gridX * CELL_SIZE local cellY = cell.gridY * CELL_SIZE local level = getPlayerLevel() if (spawnCount <= 5) then -- spawn a number of random creatures selected from the list while(spawnCount > 0) do local id = list:getRandomId(level) if (id ~= '') then local ref = world.createObject(id) ref:teleport(cell, getRandomPosition(cellX, cellY)) end spawnCount = spawnCount - 1 end else -- spawn a horde of a single creature selected from the list local id = list:getRandomId(level) if (id ~= '') then local basePos = getRandomPosition(cellX, cellY) while(spawnCount > 0) do local ref = world.createObject(id) ref:teleport(cell, basePos + getRandomOffset()) spawnCount = spawnCount - 1 end end end end return { engineHandlers = { onNewExterior = spawnFish } }