Перейти к содержанию

Дайджесты за январь-февраль

Обновления гайдов и аддонов

Январь Февраль

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Подсказки из игры на вашем сайте

Теперь вы можете отображать сведения о внутриигровых элементах простым наведением курсора мыши.

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать

Работа с почтой


zhem4ag

Рекомендуемые сообщения

Недавно захотел написать свой аддон и для начала хотел поработать с почтой, но столкнулся со следующей проблемой.

Мне нужно было узнать число писем в почтовом ящике и для этого я написал следующее:

Code:

Global("wtMainPanel", nil)

Global("wtText", nil)

Global("mailIds", {})

function RegEvents() 

common.RegisterEventHandler(OnMailboxActivated, "EVENT_MAILBOX_ACTIVATED")

end

function RegWidgets()

wtMainPanel = mainForm:GetChildChecked("MainPanel", false)

wtText = wtMainPanel:GetChildChecked("Text", false)

end

function OnMailboxActivated()

mailIds = mailBox.RequestMailIds()

local mailCount = GetTableSize(mailIds)

wtText:SetVal("value", common.FormatInt(mailCount, "%d"))

end

function Init()

RegEvents()

RegWidgets()

end

Init()

В результате на экране я увидел 0, хотя в почте есть письма, правда они все были открыты.

Или функция RequestMailIds() возвращает только Id непрочитанных писем?

Если так, то как можно узнать список Id всех писем в почтовом ящике?

Ссылка на комментарий
Поделиться на другие сайты

Вроде, всё написано правильно.

Функция mailBox.RequestMailIds() используется в аддонах AutoDeleteMail и AucEDSman именно для получения количества писем.

Может быть, какая-то другая ошибка произошла, может, что-нибудь есть в логе Mods.txt?

Кстати, эта функция, "при необходимости" запрашивает данные с сервера:

Quote:
Выдает текущий известный список писем. При необходимости отсылается запрос на обновление списка. При необходимости отсылается запрос на обновление списка.

В аддоне AutoDeleteMail, она, для верности, окружена проверкой на mailBox.IsReady():

Code:
if mailBox.IsReady() then

mailTempList = mailBox.RequestMailIds()

end

Ссылка на комментарий
Поделиться на другие сайты

Не понимаю я чего-то. В теории всё должно работать. Дополнил функцию:

Code:

function OnMailboxActivated()

LogInfo("mailStart...")

if mailBox.IsActive() then

mailIds = mailBox.RequestMailIds()

end

local mailCount = GetTableSize(mailIds)

LogInfo("mailCount = ", mailCount)

wtText:SetVal("value", common.FormatInt(mailCount, "%d"))

end

И на экране я вижу 0 и в mods.txt не вижу ошибок, только то что я хотел вывести:

Code:

Info: addon Test: mailStart...

Info: addon Test: mailCount = 0

После всего этого, используя аддон AucEDSman, забираю все деньги из почты. Правда не всё сразу, а поочереди из каждого письма. Но он хоть как-то работает. А у меня-то говорит, что почта вообще пуста.

Есть идеи?

Ссылка на комментарий
Поделиться на другие сайты

Возможно, в этом коде где-то закралась ошибка, незаметная глазу. В таких случаях, иногда, проще переписать кусочек кода заново, чем искать в нём эту ошибку.

Если не поможет, то можно пробовать миксовать код рабочего аддона с нерабочим. Буквально, взять какой-нибудь AucEDSman или AutoDeleteMail, и постепенно превращать его в свой аддон, проверяя на каждом шаге, работает ли он. До тех пор, пока он не превратится в твой аддон, только рабочий. Затем, если будет всё ещё неясно, в чём разница между рабочей и нерабочей версиями аддона - сравнить их в WinMerge.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

нет - код нормальный но логика ненормальная

дело в том что в такой системе как клиент-сервер все надо строить на событиях - а событие OnMailboxActivated() - не дает факта о том что получен список.

короче говоря - окно почты хоть и открыто, но список писем еще не получен

попробуйте эти события:

EVENT_MAILS_CHANGED

EVENT_MAILBOX_CHANGED

Ссылка на комментарий
Поделиться на другие сайты

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования