mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-27 06:26:37 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			65 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 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 }
 | |
| }
 |