Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
498228c
Update login.lua
LeoTKBR Oct 4, 2023
e492edf
Create autosync.yml
LeoTKBR Nov 1, 2023
b312e75
Update autosync.yml
LeoTKBR Nov 1, 2023
13c7799
Update autosync.yml
LeoTKBR Nov 1, 2023
abcc3a2
Update autosync.yml
LeoTKBR Nov 1, 2023
a383e95
Update autosync.yml
LeoTKBR Nov 1, 2023
e0b9d70
Update autosync.yml
LeoTKBR Nov 1, 2023
467fe4e
Update autosync.yml
LeoTKBR Nov 1, 2023
ae7e3ec
Update autosync.yml
LeoTKBR Nov 1, 2023
40f9d9e
Update autosync.yml
LeoTKBR Nov 1, 2023
430c489
Update autosync.yml
LeoTKBR Nov 1, 2023
965160d
Merge branch 'opentibiabr:main' into main
LeoTKBR Nov 4, 2023
708239f
Update autosync.yml
LeoTKBR Nov 4, 2023
203fa21
Merge branch 'opentibiabr:main' into main
LeoTKBR Nov 4, 2023
6927683
Merge branch 'main' of https://github.com/LeoTKBR/canary
LeoTKBR Nov 5, 2023
6dbe8ea
Merge branch 'opentibiabr:main' into main
LeoTKBR Nov 7, 2023
bfaef08
Merge branch 'opentibiabr:main' into main
LeoTKBR Nov 9, 2023
eabbcc5
Merge branch 'opentibiabr:main' into main
LeoTKBR Nov 16, 2023
61541d4
Merge branch 'opentibiabr:main' into main
LeoTKBR Nov 19, 2023
82c3ebf
Merge branch 'opentibiabr:main' into main
LeoTKBR Nov 23, 2023
67f7a9a
Merge branch 'opentibiabr:main' into main
LeoTKBR Nov 30, 2023
65f4896
Merge branch 'opentibiabr:main' into main
LeoTKBR Dec 5, 2023
45c764f
Merge branch 'opentibiabr:main' into main
LeoTKBR Sep 17, 2024
9c2f4db
Merge branch 'opentibiabr:main' into main
LeoTKBR Nov 7, 2024
d35e4a8
Merge branch 'opentibiabr:main' into main
LeoTKBR Nov 21, 2024
691870f
Merge branch 'opentibiabr:main' into main
LeoTKBR Nov 22, 2024
325a906
Merge branch 'opentibiabr:main' into main
LeoTKBR Mar 28, 2025
29bc04c
#Remove autosync
LeoTKBR Mar 28, 2025
d08c68f
#fix Spawns_npc_by_time
LeoTKBR Apr 6, 2025
4d8d5d7
Lua code format - (Stylua)
github-actions[bot] Apr 6, 2025
86e880d
#fix startup spawn
LeoTKBR Apr 6, 2025
bbf6998
Lua code format - (Stylua)
github-actions[bot] Apr 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 102 additions & 16 deletions data-otservbr-global/scripts/world_changes/spawns_npc_by_time.lua
Original file line number Diff line number Diff line change
@@ -1,28 +1,114 @@
local activeNpcRefs = {}

local npcSpawns = {
{ name = "Ghostly Wolf", spawnPeriod = LIGHT_STATE_SUNSET, despawnPeriod = LIGHT_STATE_SUNRISE, position = { x = 33332, y = 32052, z = 7 } },
{ name = "Talila", spawnPeriod = LIGHT_STATE_SUNSET, despawnPeriod = LIGHT_STATE_SUNRISE, position = { x = 33504, y = 32222, z = 7 } },
{ name = "Valindara", spawnPeriod = LIGHT_STATE_SUNRISE, despawnPeriod = LIGHT_STATE_SUNSET, position = { x = 33504, y = 32222, z = 7 } },
{
name = "Ghostly Wolf",
spawnPeriod = LIGHT_STATE_SUNSET,
despawnPeriod = LIGHT_STATE_SUNRISE,
position = Position(33332, 32052, 7),
},
{
name = "Talila",
spawnPeriod = LIGHT_STATE_SUNSET,
despawnPeriod = LIGHT_STATE_SUNRISE,
position = Position(33504, 32222, 7),
},
{
name = "Valindara",
spawnPeriod = LIGHT_STATE_SUNRISE,
despawnPeriod = LIGHT_STATE_SUNSET,
position = Position(33504, 32222, 7),
},
}

local spawnsNpcByTime = GlobalEvent("SpawnsNpcByTime")

function spawnsNpcByTime.onPeriodChange(period)
for _, npcSpawn in ipairs(npcSpawns) do
if npcSpawn.spawnPeriod == period then
local spawnNpc = Game.createNpc(npcSpawn.name, npcSpawn.position)
if spawnNpc then
spawnNpc:setMasterPos(npcSpawn.position)
spawnNpc:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
end
elseif npcSpawn.despawnPeriod == period then
local despawnNpc = Npc(npcSpawn.name)
if despawnNpc then
despawnNpc:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
despawnNpc:remove()
end
local npcsToRemove = {}
local npcsToAdd = {}
for i, npcData in ipairs(npcSpawns) do
if npcData.despawnPeriod == period and activeNpcRefs[i] then
table.insert(npcsToRemove, {
index = i,
data = npcData,
})
elseif npcData.spawnPeriod == period and not activeNpcRefs[i] then
table.insert(npcsToAdd, {
index = i,
data = npcData,
})
end
end
for _, entry in ipairs(npcsToRemove) do
local npc = Creature(activeNpcRefs[entry.index])
if npc and npc:isNpc() then
npc:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
npc:remove()
end
activeNpcRefs[entry.index] = nil
end
if #npcsToAdd > 0 then
addEvent(function()
for _, entry in ipairs(npcsToAdd) do
local npc = Game.createNpc(entry.data.name, entry.data.position)
if npc then
npc:setMasterPos(entry.data.position)
npc:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
activeNpcRefs[entry.index] = npc:getId()
else
logger.error("NpcByTime: Failed to spawn:", entry.data.name)
end
end
end, 5000)
end

return true
end

spawnsNpcByTime:register()

local spawnsNpcBySpawn = GlobalEvent("SpawnsNpcBySpawn")

function spawnsNpcBySpawn.onStartup()
local currentPeriod = LIGHT_STATE_SUNRISE

local mode = getTibiaTimerDayOrNight()
if mode == "night" then
currentPeriod = LIGHT_STATE_SUNSET
else
currentPeriod = LIGHT_STATE_SUNRISE
end

local npcsToAdd = {}

for i, npcData in ipairs(npcSpawns) do
if npcData.spawnPeriod == currentPeriod then
table.insert(npcsToAdd, {
index = i,
data = npcData,
})
end
end

if #npcsToAdd > 0 then
addEvent(function()
for _, entry in ipairs(npcsToAdd) do
local npc = Game.createNpc(entry.data.name, entry.data.position)
if npc then
npc:setMasterPos(entry.data.position)
npc:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
activeNpcRefs[entry.index] = npc:getId()
logger.info("NpcByTime: " .. entry.data.name .. " spawned successfully.")
else
logger.error("NpcByTime: Failed to spawn:", entry.data.name)
end
end
end, 5000)
else
logger.info("NpcByTime: No NPCs to spawn in the current period.")
end

return true
end

spawnsNpcBySpawn:register()
3 changes: 0 additions & 3 deletions data-otservbr-global/world/otservbr-npc.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1611,9 +1611,6 @@
<npc centerx="32271" centery="32052" centerz="7" radius="1">
<npc name="Valentina" x="0" y="0" z="7" spawntime="60" />
</npc>
<npc centerx="33332" centery="32052" centerz="7" radius="5">
<npc name="Ghostly Wolf" x="0" y="0" z="7" spawntime="60" />
</npc>
<npc centerx="32253" centery="32055" centerz="7" radius="1">
<npc name="Tokel" x="0" y="0" z="7" spawntime="60" />
</npc>
Expand Down