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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

чат тормозит игру?


icreator

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

не пробовали в чат выводить подрят несколько строчек?? у меня сразу клиент подвисает! Либо у меня не правильно функция вывода написана - либо не оптимизирован стандартный чат аддон

Code:
local wtChat = nil

function LogToChat(message, color, fontSize)

if not wtChat and not errMess.Chat then

---- если окно еще не искали и ошибки при этом не было. а если уже ошибка была то не искать

--- найдем окно чата

--- Chat..Chat

local w

w = stateMainForm:GetChildUnchecked("Chat", false)

if not w then

--- главня форма не найдена - найден по ребенку

w = stateMainForm:GetChildUnchecked("Chat", true)

else

w = w:GetChildUnchecked("Chat", true)

end

wtChat = w

end

if not wtChat or not wtChat.PushFrontValuedText then

if not errMess.Chat then

errMess.Chat = "can't find Chat window"

LogError(errMess.Chat)

end

return

end

local valuedText = common.CreateValuedText()

--- fontname=\"AllodsWest\"

local format = "<body alignx='left' fontname='AllodsSystem' fontsize='"..(fontSize or 14)

format = format.."' shadow='1' ><rs class='color'><r name='text'/></rs></body>"

valuedText:SetFormat(userMods.ToWString(format))

if color then

valuedText:SetClassVal( "color", color )

else

valuedText:SetClassVal( "color", "LogColorYellow" )

end

if not common.IsWString( message ) then message = userMods.ToWString(message) end

valuedText:SetVal( "text", message )

wtChat:PushFrontValuedText( valuedText )

end

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

В вызове stateMainForm:GetChildUnchecked("Chat", true) второй аргумент ( который true ) означает "задействовать рекурсивный поиск по всему дереву виджетов". В случае stateMainForm это рекурсивный поиск по всему дереву всех виджетов во всех аддонах, включая стандартные. На каждый вызов этой функции.

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

он делается только 1 раз - при первом вызове - инициализируя локальную переменную - дальше то она уже не пустая должна быть

как только я закаментировала

Code:
---wtChat:PushFrontValuedText( valuedText )

- тормоза прекратились - то есть именно вывод в чат через

:PushFrontValuedText()

тормозит

и причем это тормоза на 30сек!!! по 1сек на 2-3 строчки вывода - причем полностью клиент виснет... вот откуда лаги то - у нас чат лаги плодит вдобавок к обработке графики

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

А. Точно, один раз. Видимо, поразил сам факт смелого поиска виджета по имени "Chat" по всем аддонам сразу. =) Аддоны легко допускают виджеты с одинаковыми именами, даже в пределах одного предка.

А тогда вот так не проще?

Code:

local wtChat = stateMainForm:GetChildUnchecked("Chat", false)

wtChat = wtChat and wtChat:GetChildUnchecked("Chat", true)

or stateMainForm:GetChildUnchecked("Chat", true)

function LogToChat(message, color, fontSize)

if not wtChat then LogError( "Blah-blah..." ) end

...

end

Еще такая мысль появилась:

PushFrontValuedText - метод виджета. С его помощью в чат набиваются все сообщения. Если б он так тормозил, игра бы вообще стояла. Скорее всего, нельзя набрасывать в контейнер сообщения со стороны; видимо, скрипт чата зачем-то ведет учет всего, что он напихивает в контейнер, и внешнее вмешательство приводит его, скрипт, в ступор с кучей ошибок.

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

оригинальный код такой:

Code:
function AddTextToChatWindow( valuedText, chatIndex )

local info = chats [ chatIndex ] 

if info.currentChatSize < maxChatSize then

info.currentChatSize = info.currentChatSize + 1

else

info.wtChat:PopBack()

end

info.wtChat:PushFrontValuedText( valuedText )

end

видно что тут еще

info.wtChat:PopBack()

- что это такое? я так понимаю что уменьшение размера буфера.

так и есть - если делать с одновременным уменьшением буфера, то скорость растет в разы, но если строк в чате мало, то туда выводится максимум это число строк - остальные исчезают. мораль та же - очень плохо у них сделан обработчик чата - в самом виджете

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

Думается, сейчас код сильно изменился.

Документация по TextContainer:

PopBack - удаление элемента в конце контейнера

PopFront - удаление элемента в начале контейнера

PushBackRawText - добавление неформатированной строки в контейнер

PushBackValuedText - добавление ValuedText в контейнер

PushFrontRawText - добавление неформатированной строки в контейнер

PushFrontValuedText - добавление ValuedText в контейнер

RemoveItems - удаление всех элементов из контейнера

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

Ну да, если буфером считать контейнер с текстом. Не разрастатья же ему до бесконечности - надо убирать лишнее

Ксати, тут довольно тупой код. Если кто то будет добавлять строчки не через эту функцию.... размер контейнера будет все расти и расти. PopBack() вроде удаляет только 1 элемент

И всякие info.currentChatSize будут отображать состояние погоды на Марсе

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

а посмотреть сколько туда уже напихали нету ...

вот и как узнать... если там строк мало то если удалять то строчек всех не увидишь...

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

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

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

вот тут код привела для очисти того что в чат накидали - чтобы он не тормозил

скрипт

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

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

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

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

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

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

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

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

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

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