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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

WhisperWindow


Ciuine

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

  • Ответов 292
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Ah-h... No interaction of clients, only addon<->addon. Well, let me introduce an example, 'cause I can't see that you understood me...

Let's say I (abstract addon developer) developed some kind of a notifier. The output it does: a big icon over the screen when the indicated event happens. Additionally, it logs a string into a separate window, showing exactly what that meant.

For example, an addon notifies that a maximum of "Static charges" has been reached (Warden's skills, don't know the exact translation). It presents a big icon with a crossed lightning (but who knows what is this?), and displays in window "No more Static Charges!" (That is!), and when they disappear (electric spell) it logs "Discharge!" (not to get strange output in combat-log) showing nothing else.

Can I use this if I want to use your window?

userMods.SendEvent("EVENT_CHAT_MESSAGE", table of params)

Or will I have to do a separate one?

I'll try various tests to see, thanks for explanations...

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

It should work, I forgot to mention though that there are two events responsible for this. One is RU client only at the moment and the other is for all the other clients. EVENT_CHAT_MESSAGE_WITH_OBJECTS is what I have the RU client using, and it has different parameters then what I showed; but yeh, should work.

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

Pls, add ingame help for available commands. It can be command like /wwhelp which displays in ww chat window all commands with possible parameters.

PS: Неплохо бы всем аддонам, использующим чат-комманды добавить такой функционал. Аддонов все больше, а комманды как то не очень запоминаются :)

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

Can do. I just didn't want to add multiple buttons for something simple as setting the transparency up one point or other things like that or setting the size ten sizes higher would require ten button clicks...

But I was actually going to add buttons to these eventually; when I can get around to it. Another idea I was toying with was turning the text values in the config window into buttons and then they call on a simple EditLine window where people can type in the number to change that variable, might be simpler.

Google Translate:

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

Но я был на самом деле происходит добавление кнопки на эти в конечном итоге, когда я могу обойти ее. Другая идея, я играю с превращалась текстовые значения в конфигурации окна в кнопки, а затем они призывают простое окно EditLine, где люди могут ввести номер изменения этой переменной, может быть проще.

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

почему не работают у вас теги:

Code:
<TransparentInput>false</TransparentInput>

<pickObjectsOnly>true</pickObjectsOnly>

нельзя выбрать объекты за панелью Container.(WidgetTextContainer)

Однако, в LootEDSchoice все работает! Предложение такое - вместо своего контейнера использовать встроенный системный контейнер Chat. ... .Chat

еще - у вас нет ограничения на количество строк в контейнерах Container.(WidgetTextContainer) - и при долгой игре это начинает тормозить клиент.

еще - хорошо бы сделать общение с другими аддонами - добавила пользовательское событие

вот файл с моими доработками (их можно найти по "icreator")

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

вот что я получила послав

Code:
message = valuedText

local msg1 = { msg = message, chatType = 2, sender = object.GetName(avatar.GetId()), isEcho=true, isAlive=true, senderId=avatar.GetId() }

userMods.SendEvent("U_EVENT_CHAT_MESSAGE_WITH_OBJECTS", msg1)

из моей функции LoToChat

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

Code:
local sender = object.GetName(avatar.GetId())
local senderId = avatar.GetId()
local chatType = CHAT_TYPE_WHISPER --- = 2 - разговор
local recipient = ToWS(ADDONname)
userMods.SendEvent("U_EVENT_CHAT_MESSAGE_WITH_OBJECTS", { msg = valuedText, chatType = chatType, sender = sender, isEcho=true, isAlive=true, recipient = recipient, senderId = senderId})


вот теперь более мило выводит - как эхо приватного сообщения
LogToChatWW2.jpg
Ссылка на комментарий
Поделиться на другие сайты

еще предлагаю чистить стандартное окно чата от тех сообщений что были выведены в WW

Code:
--- call by "EVENT_SECOND_TIMER" - for clear messages from chat

function OnEventChat( params )

...

wtChat:PopBack()

...

правда сначала надо найти виджет чата - см. тот же TargetsManager ScriptLIB.lua

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

еще интересней если удалять первую строчку из системного чата если она отображена в WW !! в системном чате тогда остаются только системные сообщения!

вот код

Code:
local wtChat = nil

local chatRows = 0 --- for clear buffer after show messages

function LogToChatInit()

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

end

function ClearChatFront( size )

if wtChat then wtChat:PopFront() else LogToChatInit() end

end

function OnEventChat( params )

ClearChatFront() --- edit by icreator

if params.messages then --CODE BY DUVODAS, MODIFIED

...

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

а нет - там же еще родной скрипт - он то считает что чат полон строк и начинает тоже их удалять - в результате чат будет пуст (

ничего не остается как сделать свой обработчик событий прочих - типа как забрали что-то с почты или банка, заролили что и тд.

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

I ran a test where I printed a message every second for five minutes. It printed this message to two containers, using EVENT_CHAT_MESSAGE. (No reason to do U_ tagged events, as the state managed add-ons ignore userMods.SendEvent. This also saves creating a separate event recognition in my add-on.) After the five minutes, theoretically 600 messages were printed on top of the messages from the gold spammer I left unignored to help me test this. The add-on only climbed up to 355 KB of memory used, and frequently garbage collected once a minute to keep memory low. I will leave it running for an hour to see the end result.

As a side note; instead of doing everything you just recommended, I slapped a simple collectgarbage() into my /wwclear command. So when you clear the window, it forces a garbage collection and a redefinition of the memory limits of the add-on.

Edit: After 30 minutes, no change; 3600 messages + gold spammer once every ten seconds (300 messages) + random chatter. The add-on still runs a garbage collection once a minute and drops back down to 250 KB, the minimum for its current demand and reaches it's maximum defined memory at around 480 KB and then dumps again. I don't see a the problem you believe would happen.

Google Translate:

Я побежал тест, где я напечатал сообщение каждую секунду в течение пяти минут. Это печатные этого сообщения на два контейнера, используя EVENT_CHAT_MESSAGE. (Нет смысла делать U_ отметил события, как государству удалось дополнений игнорировать userMods.SendEvent. Это также экономит создания отдельного признания событие в моей дополнения.) После пяти минут, теоретически 600 сообщений были напечатаны на верхней части сообщения из золота спамер я оставил очищен, чтобы помочь мне проверить это. Дополнения только поднялась до 355 КБ памяти, используемой, и часто мусора один раз в минуту, чтобы сохранить память низким. Я оставлю это работает на час, чтобы увидеть конечный результат.

В качестве примечания, а не делать все, что вы просто рекомендовал, я ударил простой collectgarbage() в моей /wwclear команды. Итак, когда вы ясно окно, она заставляет сбор мусора и переопределение памяти пределах дополнения.

Изменить: После 30 минут, без изменений; 3600 сообщений + золото спамера каждые десять секунд (300 сообщений) + случайные разговоры. Дополнения по-прежнему работает мусора один раз в минуту и падает обратно до 250 КБ, минимум за текущий спрос и достигает его максимальной определены память около 480 Кб, а затем снова свалки. Я не вижу проблемы Вы уверены, что произойдет.

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

ок. сделаем так:

Code:

function Open( params )

...

elseif common.IsSubstring(params.text, userMods.ToWString("/wwtest")) then

local max = common.GetIntFromWString(userMods.ToWString(string.sub(userMods.FromWString(params.text), 9)))

local sender = object.GetName(avatar.GetId())

local senderId = avatar.GetId()

local chatType = CHAT_TYPE_WHISPER --- = 2 - разговор

local recipient = ToWS(common.GetAddonName())

local valuedText = common.CreateValuedText()

local format = "<html fontname='AllodsSystem'><rs class='color'><r name='text'/></rs></html>"

valuedText:SetFormat(userMods.ToWString(format))

for i = 0, max do

valuedText:SetVal( "text", ToWS(i..": this is TEST message, don't shut Me ))") )

OnEventChat( { msg = valuedText, chatType = chatType, sender = sender, isEcho=true, isAlive=true, recipient = recipient, senderId = 

senderId} )

end

затем в чат введем

/wwtest 3000

это у меня свалило игру

я перегрузила клиент и заново:

/wwtest 300

/wwtest 300

/wwtest 300

/wwtest 300

/wwtest 3

когда в окне уже по 1000 сообщений - даже ввод 3х подряд тормозит игру на 1секунду!!! и это с процессором 3+3ГГц и памятью 4Гб!!! такое впечатление что происходит расчет полета космического корабля русских на Марс ))

Это говорит о том что у них методы для виджета очень плохо написаны!

после этого теста - попыталась выгрузить WW через AddonsManager -- клиент завис на 10сек! Видимо как раз в этот момент была очистка памяти от мусора... похоже и с эти проблемы.

если ввсести ограничение на буфер строк

local MaxBuffSize = 500

то тормоза намного уменьшаются

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

What user is going to get an influx of 300-3000 messages in an immediate processing loop? The issue you're experiencing with this is not that the game cannot handle it, it's that you're forcing it to collect garbage for an entire add-on almost 1000 times immediately. It gets around 60 messages and then it tries to collect useless remainder information.

There's a reason why /wwclear exists. Try it.

I don't see the point in these heavy load tests, when it's not feasible consumer data. If you're trying to print a series of texts on demand, I suggest something like this (this is code for the /wwhelp I have already implemented in my version);

Google Translate:

Что пользователь собирается получить приток 300-3000 сообщений в немедленной обработки петли? Вопрос у вас возникли с этим не то, что игра не может с этим справиться, то, что вы заставляете его для сбора мусора для всего дополнения почти в 1000 раз сразу. Он получает около 60 сообщений, а затем он пытается собирать бесполезную информацию остатка.

Там в причине /wwclear существует. Попробуйте это.

Я не вижу смысла в этих тяжелых испытаний нагрузки, когда это не представляется возможным данных потребителей. Если вы пытаетесь напечатать ряд текстов по требованию, я предлагаю что-то вроде этого (это код /wwhelp я уже реализованы в моей версии);

Code:
Global("SlashComText", {

 ["eng"]  = {

 [0]  = "Slash Commands:",

 [1]  = "Reset DND of WhisperWindow.",

 [2]  = "Clear current window of text.",

 [3]  = "Changes the font Size to the # (integers) - Ex. /wwsize 46",

 [4]  = "Changes the transparency of the Background, (0 to 10) - Ex. /wwtrans 5 = .5",

 [5]  = "Toggles to Localization or English.",

 [6]  = "Sets selected custom color.",

 [7]  = "Set WhisperWindow display above/below the map.",

},

 ["rus"]  = {

 [0]  = "ñëýø-êîìàíä:",

 [1]  = "Ñáðîñ DND èç WW",

 [2]  = "î÷èñòèòü òåêóùåå îêíî òåêñòà",

 [3]  = "èçìåíåíèÿ ðàçìåðà øðèôòà (÷èñåë) /wwsize 46",

 [4]  = "Èçìåíåíèå ïðîçðà÷íîñòè ôîíà, (0 ê 10) /wwtrans 5 = .5",

 [5]  = "Ïåðåêëþ÷åíèå òåêñòà ê ëîêàëèçàöèè èëè àíãëèéñêîì ÿçûêå.",

 [6]  = "Óñòàíàâëèâàåò âûáðàí äðóãîé öâåò.",

 [7]  = "Çàäàòü WhisperWindow äèñïëåé âûøå/íèæå êàðòå.",

},

})

Code:
function Help()

Name = object.GetName(avatar.GetId())

local LText = SlashComText [GetGameLocalization()]  or SlashComText ["eng"] 

local SlashComs = {

 [0]  = {text = LText [0] },

 [1]  = {command = "/wwreset", text = LText [1] },

 [2]  = {command = "/wwclear", text = LText [2] },

 [3]  = {command = "/wwsize #", text = LText [3] },

 [4]  = {command = "/wwtrans #", text = LText [4] },

 [5]  = {command = "/wweng", text = LText [5] },

 [6]  = {command = "/wwcusset", text = LText [6] },

 [7]  = {command = "/wwtop", text = LText [7] }}

local message = userMods.ToWString( "<html><rs class='class'><r name='command'/><LogColorYellow><r name='blah'/></LogColorYellow></rs></html>" )

local fragments = {}

local format = { "<html>" }

for i = 0, table.getn( SlashComs ) + 1 do

local v = SlashComs [ i ] 

if v then

table.insert( fragments, common.CreateValuedText() )

fragments [ i + 1 ] :SetFormat( message )

if v.command then

fragments  [ i + 1 ]  :SetClassVal( "class", "tip_blue")

fragments [ i + 1 ] :SetVal( "command", userMods.ToWString(v.command..": ") )

end

fragments [ i + 1 ] :SetVal( "blah", userMods.ToWString(v.text) )

table.insert( format, "<r name = 'value"..( i + 1 ).."'/> " )

end

end

table.insert( format, "</html>" )

format = table.concat( format )

local msg = common.CreateValuedText()

msg:SetFormat( userMods.ToWString( format ) )

for i, v in ipairs( fragments ) do

msg:SetVal( "value"..i, v )

end

MessageText = msg

Message( nil, "Yellow", 0 )

end

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

еще было бы классное если при открывании окна WW системное окно чата бы закрывалось (не все а только контейнер) - как при нажатии на "!" и наоборот - при скрытии окна - WW - открывалось бы системный чат - так как часто надо посмотреть системные сообщения по разным событиям - которых пока нет в WW

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

thx for this addon, it s great. but i have one request. is it possible to disable world chat in "all" and "zone" of addon window. i m using 2 chat boxes in game: 1) add-on chat box for chat with ppl 2) original chat bot for loot info etc i get world chat in both boxes and i know that it s impossible do turn off world chat in original chat. so if it possible i d like to disable it in add-on chat box. thx in advance.

ps

found parametr for it and fixed it myself. but thx anyway =D

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

просьба сделать еще тип сообщений от аддонов:

Code:
elseif params.chatType == -5 then --- сообщени от аддонов, служебные сообщения

Message( nil, WW ["System"] , 3 )

Message( nil, WW ["System"] , 0 )

тогда можно будет вот так красиво выводить лог из моего аддона:

LootEDSman122.jpg

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

Code:
Error: addon WhisperWindow:   func: GetName, field, line: -1, defined: C, line: -1,  [C] 
Error: addon WhisperWindow:     func: EmoteChat, global, line: 357, defined: Lua, line: 356,  [string "Mods/Addons/WhisperWindow/WhisperWindow.lua"] 
Error: addon WhisperWindow: UI::LuaObjectGetName: param 1 not a class GMUIHelper::ObjectId (type: number), details: int __cdecl UI::LuaObjectGetName(struct lua_State *)
Error: addon WhisperWindow: UI::LuaGetPlayerValuedObject: player name is empty, details: int __cdecl UI::LuaGetPlayerValuedObject(struct lua_State *)
Error: addon WhisperWindow: 
Error: addon WhisperWindow:   
Error: addon WhisperWindow:   func: SetVal, method, line: -1, defined: C, line: -1,  [C] 
Error: addon WhisperWindow:     func: Message, global, line: 405, defined: Lua, line: 376,  [string "Mods/Addons/WhisperWindow/WhisperWindow.lua"] 
Error: addon WhisperWindow:       func: EmoteChat, global, line: 359, defined: Lua, line: 356,  [string "Mods/Addons/WhisperWindow/WhisperWindow.lua"] 
Error: addon WhisperWindow: GameBase::LuaSetVal: param 3 (type: nil) not meet the given condition: , details: int __cdecl GameBase::LuaSetVal(struct lua_State *)
Error: addon WhisperWindow: UI::LuaGetPlayerValuedObject: player name is empty, details: int __cdecl UI::LuaGetPlayerValuedObject(struct lua_State *)
Error: addon WhisperWindow: 
Error: addon WhisperWindow:  
Ссылка на комментарий
Поделиться на другие сайты

это когда персонаж вышел из игры - вот такая ошибка приходит - я просто закоментировала этот вызов

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

Code:
 ["ger"]  = {
 [0]  = "Slash-Befehle:",
 [1]  = "Position WhisperWindow zurücksetzen.",
 [2]  = "Aktuelles Chatfenster leeren.",
 [3]  = "Ändert die Schriftgröße auf # (ganze Zahl) - z.B.: /wwsize 46",
 [4]  = "Ändert die Transparenz des Hintergrundes, (von 0 bis 10) - z.B.: /wwtrans 5 = .5",
 [5]  = "Wechselt zwischen aktueller Sprache und Englisch.",
 [6]  = "Setzt gewählte benutzerdefinierte Farbe.",
 [7]  = "Wechselt zwischen der Anzeige von WhisperWindow über bzw. unter der Karte.",
},
Ссылка на комментарий
Поделиться на другие сайты

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

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

Quote:
There's a reason why /wwclear exists. Try it.


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

по поводу что есть
Code:
[ "System" ]    = "Уведомления",


так это "Уведомления" занимает пол экрана! просьба сделать все же режим
И кстати в системном чате размер буфера 50 строчек примерно - думаете они это зря сделали?

Code:
[ "nil" ]    = "",
...
elseif params.chatType == -5 then --- сообщени от аддонов, служебные сообщения
Message( nil, WW ["nil"] , 3 )
Message( nil, WW ["nil"] , 0 )

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

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

ВНИМАНИЕ!
Обязательна информация из \Personal\Logs\mods.txt для диагностики ошибки.
Иначе вам не помочь.
В игре включите в Меню → Интерфейс → Общие настройки → Запись ошибок пользовательских дополнений. Затем запустите аддон в игре.
Гость
Ответить в этой теме...

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

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

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

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

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


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

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

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