Перейти к содержимому
Korean Random
wotunion

Кастомизируемые текстовые поля в окне боевого интерфейса

Опрос  

20 пользователей проголосовало

You do not have permission to vote in this poll, or see the poll results. Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

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

вместо interval так подойдет?

Да, E_STAT_LOADED - самое оно.

Я замержил пока то, что есть, а то уже тяжело на мобилке открывается. :)

Поделиться сообщением


Ссылка на сообщение

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

Рабочий вариант в ночном билде.

 

Когда будут макросы, доделаю обновляемость полей, можно будет легко делать свои панели хп, панели счета, и тому подобное.

 

Еще в этом варианте добавлю личные макросы и макросы статистики для текущего игрока

  • Нравится 3

Поделиться сообщением


Ссылка на сообщение

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

Спасибо, неплохая штука получилась.

Поделиться сообщением


Ссылка на сообщение

Короткая ссылка
Поделиться на других сайтах
(изменено)
Спасибо, неплохая штука получилась.

 

UPD. Допускается подстановка глобальных макросов, личных макросов, макросов статистики для текущего игрока

Сделал пулл

Не за что)

Чего только стоит Ваша помощь с холдерами глубокой ночью)

Изменено пользователем wotunion

Поделиться сообщением


Ссылка на сообщение

Короткая ссылка
Поделиться на других сайтах
(изменено)

Спасибо, неплохая штука получилась.

В продолжение развития полей.

 

1. Уже реализовал логику обновляемых полей по событию, указанному для конкретного поля в конфиге

2. Сделал глобальные макросы с шансами на победу, отдельно статик, и отдельно - динамический (тоже нужна отложенная инициализация до Defines.E_STAT_LOADED)

3. Сделал поле с шансами на победу и влючил его обновление (обновляются только поля, где, разрешено && прописано событие:

"test": {                "enabled": true,                "isUpdateable": true,                 "updateEvent": "ON_VECHICLE_DESTROYED",
Прописал вызов в нужном месте:

 

PlayersPanel

m_dead_noticed[uid] = true;                        //Logger.add("dead: " + uid);                        BIChances.UpdateBIChances();                        BattleLabels.UpdateBattleLabels("ON_VECHICLE_DESTROYED");
Все отлично работает, НО, только при первом обновлении, в данном случае, после первого фрага обновляется, после второго и дальше - уже нет.

 

Выяснил и подтвердил через лог, что строка, где есть макрос, кэшируется после первого вызова Macros.Format и при повторном вызове отдается кэш

 

Macros.as

if (cached_value !== undefined)            {                //Logger.add("cached: " + cached_value);                return cached_value;            }
Есть такой вопрос, можно ли, чтобы не изобретать велосипедов

 

вот здесь

if (isStaticMacro)            {                if (pname != null && pname != "")                {                    if (options != null)                    {                        //Logger.add("add to cache: " + format + " => " + res);                        player_cache[format] = res;                    }                }                else                {                       //==ЗДЕСЬ                    m_macros_cache_global[format] = res;                }            }
или здесь
if (cached_value !== undefined) //ЗДЕСЬ            {                //Logger.add("cached: " + cached_value);                return cached_value;            }
сделать проверку через какую-нибудь функцию на наличие в строке макроса, который в списке макросов, которые не должны кэшироваться, извините за тавтологию, и если да, то не выполнять его кеширование ?

 

//Обещаю ничего не поломать)

 

Еще есть кривой вариант(рабочий) - При каждом вызове Macros.Format именно для обновляемого поля, подставлять ей (функции) нужную строку (formats), но дописывать к ней каждый раз уникальные неотображаемые в htmText символы (спрятать в тег, например, текущее время) при выполнении обновления поля

 

Кривой вариант четко работает, задачу по обману кэша выполняет на отлично)

 

Вот, здесь уже макрос на динамический шанс на победу, находящийся в обновляемом поле, отлично работает и обновляется (подставляется текущее время в тег html):

... .f.htmlText  = ... + Macros.Format(Config.config.myPlayerName, BattleLabels._BattleLabels.formats[BattleLabels._BattleLabels.UpdateableTextFieldsIndexes[i]].formats + "<body class='" + my_date.getTime() + "'>") + "</p>");
post-27262-0-51000800-1460251176_thumb.png Изменено пользователем wotunion
  • Нравится 1

Поделиться сообщением


Ссылка на сообщение

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

Макросы, которые отдают значение через функцию не кешируются.

Поделиться сообщением


Ссылка на сообщение

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

 

 

"isUpdateable": true, "updateEvent": "ON_VECHICLE_DESTROYED",

Может достаточно только:

"updateEvent": "ON_VECHICLE_DESTROYED"

Если не надо обновлять, то писать:

"updateEvent": ""

Поделиться сообщением


Ссылка на сообщение

Короткая ссылка
Поделиться на других сайтах
(изменено)

Макросы, которые отдают значение через функцию не кешируются.

Это да, я проверил, но мне тогда нужно предварительный парсинг строки formats делать на наличие нужных макросов, подставлять его значение и потом уже делать Macros.Format, будет ли это оптимально

Так сделать?

 

Типа

private function GetMacrosData(formats: String)): string

...

обработка formats

запрос значений макросов из списка

...

return formats с подстановленными значениями маросов из списка

 

И подставлять уже в Macros.Format, который доделает оставшиеся макросы, если они есть?

 

upd. Macros.getGlobalValue - это оно?

.

upd. Оно, проверил

 

Но все равно процент однородности строки formats после подстановки нужных значений с использованием Macros.getGlobalValue (live шанс или там хп будет менятся) будет ничтожно мал или равен 0, поэтому с Macros.Format кэширование все равно не будет работать, а получается делается уже 2 вызова по макросам вместо одного.

 

Может вариант с текущем временем?

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

 

 

 

Не думаю, что будут просадки по производительности, если конечно не делать 100500 обновляемы полей с таким же кол-вом некэшируемых макросов (не говорим сейчас о хп, там всегда много обновлений, и они и так динамические)

 

 

Могу кинуть в пулл для теста полностью такой рабочий вариант с двумя глоб. макросами

 

Кстати, BIChances.as можно будет удалить

 

{{winstatic}} и {{winlive}}

Может достаточно только:

"updateEvent": "ON_VECHICLE_DESTROYED"
Если не надо обновлять, то писать:

"updateEvent": ""
Можно и так, неплохо Изменено пользователем wotunion

Поделиться сообщением


Ссылка на сообщение

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

Это да, я проверил, но мне тогда нужно предварительный парсинг строки formats делать на наличие нужных макросов, подставлять его значение и потом уже делать Macros.Format, будет ли это оптимально

Так сделать?

Не так. Macros.Format() сам все сделает.

 

Проще показать на примерах:

 

Вот это статический макрос:

 

// {{cellsize}}
m_globals["cellsize"] = Math.round(Config.mapSize / 10);

 

А это - динамический

 

// {{my-frags}}
m_globals["my-frags"] = function(o:Object) { return isNaN(Macros.s_my_frags) || Macros.s_my_frags == 0 ? NaN : Macros.s_my_frags; }

 

Динамические не кешируются.

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение

Короткая ссылка
Поделиться на других сайтах
(изменено)

Не так. Macros.Format() сам все сделает.

 

Проще показать на примерах:

 

Вот это статический макрос:

 

// {{cellsize}}m_globals["cellsize"] = Math.round(Config.mapSize / 10);
А это - динамический

// {{my-frags}}m_globals["my-frags"] = function(o:Object) { return isNaN(Macros.s_my_frags) || Macros.s_my_frags == 0 ? NaN : Macros.s_my_frags; }
Динамические не кешируются.
Все понял, не дошло сразу, там же return есть, спасибо! Изменено пользователем wotunion

Поделиться сообщением


Ссылка на сообщение

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

 

 

Кстати, BIChances.as можно будет удалить
ага, а заодно и totalHP перенести бы в экстра поля. а то на данный момент я так и не придумал вариант использования:) 

Поделиться сообщением


Ссылка на сообщение

Короткая ссылка
Поделиться на других сайтах
(изменено)

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

 

Оно вроде на питоне, тоже дин.макрос нужен типа {{hpally}} {{hpenemy}} Изменено пользователем wotunion

Поделиться сообщением


Ссылка на сообщение

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

 

 

Оно вроде на питоне, тоже дин.макрос нужен типа {{hpally}} {{hpenemy}}

и эти же макросы только в процентах, чтоб можно было рисовать 

Поделиться сообщением


Ссылка на сообщение

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

 

 

и эти же макросы только в процентах, чтоб можно было рисовать 
и разность hp тоже абсолютная и в процентах

Поделиться сообщением


Ссылка на сообщение

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

и разность hp тоже абсолютная и в процентах

заодно и нормализацию бы прикрутить для графического отображения:) два дня идею вынашиваю))

Поделиться сообщением


Ссылка на сообщение

Короткая ссылка
Поделиться на других сайтах
(изменено)
Проще показать на примерах: Вот это статический макрос: // {{cellsize}}m_globals["cellsize"] = Math.round(Config.mapSize / 10); А это - динамический // {{my-frags}}m_globals["my-frags"] = function(o:Object) { return isNaN(Macros.s_my_frags) || Macros.s_my_frags == 0 ? NaN : Macros.s_my_frags; } Динамические не кешируются.

 

 

Что я не так делаю

 

m_globals["winstatic"] = function(o:Object) { return "Test"; }

 

 

MacrosFormat 

 

отдает текстом {{winstatic}}

 

даже {{my-frags}} отдает текстом "{{my-frags}}"

 

 

m_globals["winstatic"] = "Test";

 

отдает нормально, но это не динамический

 

 

 

Нужно ли что-то писать в options Macros.Format

Изменено пользователем wotunion
  • Нравится 1

Поделиться сообщением


Ссылка на сообщение

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

Нужно ли что-то писать в options Macros.Format

Да, нужно опции передавать. Можно просто {}

  • Нравится 1

Поделиться сообщением


Ссылка на сообщение

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

 

 

Да, нужно опции передавать. Можно просто {}
 

Да, причина была в этом, но не проявлялась на стат. макросах


 

 

а, нужно опции передавать. Можно просто {}
 

 

Все, работает супер, обновляется, логика обновления полей сделана, теперь только макросы нужно

спс.


 

 

заодно и нормализацию бы прикрутить для графического отображения:) два дня идею вынашиваю))
 

Поподробнее плз

Поделиться сообщением


Ссылка на сообщение

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

 

 

Поподробнее плз
:norm - нормализация значения, например {{hp-ratio:300}} вернет значения в диапазоне 0..300 

Поделиться сообщением


Ссылка на сообщение

Короткая ссылка
Поделиться на других сайтах
:norm - нормализация значения, например {{hp-ratio:300}} вернет значения в диапазоне 0..300 

Для значений, у которых есть фиксированный максимум это не сложно сделать.

Поделиться сообщением


Ссылка на сообщение

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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×