Jump to content
Alloder.pro: about Allods with love
Search In
  • More options...
Find results that contain...
Find results in...

New program for writers

We turn from quantity to quality and tell you how we will supplement the Allods Team program with rewards in rubles.

More

The new Updater

Let us to introduce the new addon updater software and to share the details

Read more

Alloder 2.0

We have started the process of project evolve, and this relates not only, and not even primarily of the site's view

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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