function Player:onStep(fromPosition, toPosition)
-- Track steps for each player
local stepStorageId = 101010
local stepCount = self:getStorageValue(stepStorageId)
if stepCount < 0 then
stepCount = 0
end
stepCount = stepCount + 1
self:setStorageValue(stepStorageId, stepCount)
-- Send party position updates every 5-10 steps (randomized)
if stepCount >= math.random(5, 10) then
-- Reset step counter
self:setStorageValue(stepStorageId, 0)
-- Check if player is in a party
local party = self:getParty()
if party then
local OPCODE_PARTY = 160
local playerData = {
name = self:getName(),
pos = self:getPosition(),
vocation = self:getVocation():getId()
}
local leaderUpdate = json.encode({type = "update", player = playerData})
local membersUpdate = json.encode({type = "update", player = playerData})
-- Send position update to leader if player is not the leader
local leader = party:getLeader()
if leader and self ~= leader then
leader:sendExtendedOpcode(OPCODE_PARTY, leaderUpdate)
end
-- Send position update to all members except self
if (#party:getMembers() > 0) then
for _, member in ipairs(party:getMembers()) do
if member ~= self then
member:sendExtendedOpcode(OPCODE_PARTY, membersUpdate)
end
end
end
end
end
return true
end