icreator Posted February 10, 2011 Share Posted February 10, 2011 не пробовали в чат выводить подрят несколько строчек?? у меня сразу клиент подвисает! Либо у меня не правильно функция вывода написана - либо не оптимизирован стандартный чат аддон Code: local wtChat = nilfunction 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 Quote Link to comment Share on other sites More sharing options...
ramirez Posted February 10, 2011 Share Posted February 10, 2011 В вызове stateMainForm:GetChildUnchecked("Chat", true) второй аргумент ( который true ) означает "задействовать рекурсивный поиск по всему дереву виджетов". В случае stateMainForm это рекурсивный поиск по всему дереву всех виджетов во всех аддонах, включая стандартные. На каждый вызов этой функции. Quote Link to comment Share on other sites More sharing options...
icreator Posted February 10, 2011 Author Share Posted February 10, 2011 он делается только 1 раз - при первом вызове - инициализируя локальную переменную - дальше то она уже не пустая должна быть как только я закаментировала Code: ---wtChat:PushFrontValuedText( valuedText ) - тормоза прекратились - то есть именно вывод в чат через :PushFrontValuedText() тормозит и причем это тормоза на 30сек!!! по 1сек на 2-3 строчки вывода - причем полностью клиент виснет... вот откуда лаги то - у нас чат лаги плодит вдобавок к обработке графики Quote Link to comment Share on other sites More sharing options...
ramirez Posted February 10, 2011 Share Posted February 10, 2011 А. Точно, один раз. Видимо, поразил сам факт смелого поиска виджета по имени "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 - метод виджета. С его помощью в чат набиваются все сообщения. Если б он так тормозил, игра бы вообще стояла. Скорее всего, нельзя набрасывать в контейнер сообщения со стороны; видимо, скрипт чата зачем-то ведет учет всего, что он напихивает в контейнер, и внешнее вмешательство приводит его, скрипт, в ступор с кучей ошибок. Quote Link to comment Share on other sites More sharing options...
icreator Posted February 10, 2011 Author Share Posted February 10, 2011 оригинальный код такой: 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() - что это такое? я так понимаю что уменьшение размера буфера. так и есть - если делать с одновременным уменьшением буфера, то скорость растет в разы, но если строк в чате мало, то туда выводится максимум это число строк - остальные исчезают. мораль та же - очень плохо у них сделан обработчик чата - в самом виджете Quote Link to comment Share on other sites More sharing options...
ramirez Posted February 10, 2011 Share Posted February 10, 2011 Думается, сейчас код сильно изменился. Документация по TextContainer: PopBack - удаление элемента в конце контейнера PopFront - удаление элемента в начале контейнера PushBackRawText - добавление неформатированной строки в контейнер PushBackValuedText - добавление ValuedText в контейнер PushFrontRawText - добавление неформатированной строки в контейнер PushFrontValuedText - добавление ValuedText в контейнер RemoveItems - удаление всех элементов из контейнера Quote Link to comment Share on other sites More sharing options...
Nikon Posted February 10, 2011 Share Posted February 10, 2011 Ну да, если буфером считать контейнер с текстом. Не разрастатья же ему до бесконечности - надо убирать лишнее Ксати, тут довольно тупой код. Если кто то будет добавлять строчки не через эту функцию.... размер контейнера будет все расти и расти. PopBack() вроде удаляет только 1 элемент И всякие info.currentChatSize будут отображать состояние погоды на Марсе Quote Link to comment Share on other sites More sharing options...
icreator Posted February 10, 2011 Author Share Posted February 10, 2011 а посмотреть сколько туда уже напихали нету ... вот и как узнать... если там строк мало то если удалять то строчек всех не увидишь... Quote Link to comment Share on other sites More sharing options...
Nikon Posted February 10, 2011 Share Posted February 10, 2011 Делай так же. Добавила 1 свою строчку - удаляй 1 из чата Quote Link to comment Share on other sites More sharing options...
icreator Posted February 10, 2011 Author Share Posted February 10, 2011 причем чем больше строчек в виджете, тем больше он тормозит - в степени даже - то есть там идет какая-то сортировка постоянно что ли? вот где разработчикам надо искать тормоза клиента Quote Link to comment Share on other sites More sharing options...
icreator Posted February 10, 2011 Author Share Posted February 10, 2011 точно - так лучше! Quote Link to comment Share on other sites More sharing options...
icreator Posted February 10, 2011 Author Share Posted February 10, 2011 вот тут код привела для очисти того что в чат накидали - чтобы он не тормозил скрипт Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.