событие EVENT_GUILD_MEMBER_CHANGED приходит когда меняется какая-либо информация о члене гильдии, в т.ч. онлайн/оффлайн или смена локации.
Замечено что иногда при срабатывании EVENT_GUILD_MEMBER_CHANGED нельзя получить необходимую информацию о человеке (может он находится в процессе загрузки? Х.з.), но через несколько секунд становится можно, я решил это таким способом:
Code:
function GuildMemChanged(params)local MemInfo = guild.GetMemberInfo(params.id)
if not MemInfo.zoneName then
table.insert(ТаблицаОтложенныхЗаданий, {"GMemCh", params})
end
Т.е. если информацию получить нельзя(нет названия зоны) - я откладываю обработку этого события на 15 секунд(если не получится еще раз - еще отложится и т.п.), т.е. отдельная функция работающая раз в 15 секунд у меня проверяет таблицу отложенных заданий и выполняет их.
Таким образом ты можешь отлавливать информацию о заходе и выходе людей на/с СО и колыбели и вычислять время из там пребывания.
Также можешь обязать членов гильдии выполняющих квест писать твоему боту (или человеку у которого запущен следящий скрипт) в ПМ что-то вроде "СО+" (можно и в гильдчат) перед сдачей квеста. Т.е. написали "СО+", сдали квесты.