Jump to content

Digest August

We talk about what was done and updated in the past month. We help keep abreast of events.

Read more

Servers monitoring and the Addons Editor

We present you two legends. All dreams come true.

Servers monitoring The Addons Editor

Game tooltips

Tooltips provide a way for 3rd party fansites and extensions to display detailed information on mouseover.

Read more

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


icreator
 Share

Recommended Posts

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

Code:
---wtChat:PushFrontValuedText( valuedText )

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

:PushFrontValuedText()

тормозит

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

TOMEeRszYZow1Vf.jpg
Link to comment
Share on other sites

А. Точно, один раз. Видимо, поразил сам факт смелого поиска виджета по имени "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 - метод виджета. С его помощью в чат набиваются все сообщения. Если б он так тормозил, игра бы вообще стояла. Скорее всего, нельзя набрасывать в контейнер сообщения со стороны; видимо, скрипт чата зачем-то ведет учет всего, что он напихивает в контейнер, и внешнее вмешательство приводит его, скрипт, в ступор с кучей ошибок.

Link to comment
Share on other sites

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

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()

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

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

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

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

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

By using our site you agree to the Terms of Use