sirmax Posted April 9, 2016 Share Posted April 9, 2016 вместо interval так подойдет? Да, E_STAT_LOADED - самое оно. Я замержил пока то, что есть, а то уже тяжело на мобилке открывается. :) @ Quote Link to comment Short link Share on other sites More sharing options...
wotunion Posted April 9, 2016 Author Share Posted April 9, 2016 Рабочий вариант в ночном билде. Когда будут макросы, доделаю обновляемость полей, можно будет легко делать свои панели хп, панели счета, и тому подобное. Еще в этом варианте добавлю личные макросы и макросы статистики для текущего игрока 3 @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted April 9, 2016 Share Posted April 9, 2016 Спасибо, неплохая штука получилась. @ Quote Link to comment Short link Share on other sites More sharing options...
wotunion Posted April 9, 2016 Author Share Posted April 9, 2016 (edited) Спасибо, неплохая штука получилась. UPD. Допускается подстановка глобальных макросов, личных макросов, макросов статистики для текущего игрока Сделал пулл Не за что) Чего только стоит Ваша помощь с холдерами глубокой ночью) Edited April 9, 2016 by wotunion @ Quote Link to comment Short link Share on other sites More sharing options...
wotunion Posted April 10, 2016 Author Share Posted April 10, 2016 (edited) Спасибо, неплохая штука получилась.В продолжение развития полей. 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>"); Edited April 10, 2016 by wotunion 1 @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted April 10, 2016 Share Posted April 10, 2016 Макросы, которые отдают значение через функцию не кешируются. @ Quote Link to comment Short link Share on other sites More sharing options...
ktulho Posted April 10, 2016 Share Posted April 10, 2016 "isUpdateable": true, "updateEvent": "ON_VECHICLE_DESTROYED", Может достаточно только: "updateEvent": "ON_VECHICLE_DESTROYED" Если не надо обновлять, то писать: "updateEvent": "" @ Quote Link to comment Short link Share on other sites More sharing options...
wotunion Posted April 10, 2016 Author Share Posted April 10, 2016 (edited) Макросы, которые отдают значение через функцию не кешируются.Это да, я проверил, но мне тогда нужно предварительный парсинг строки 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": "" Можно и так, неплохо Edited April 10, 2016 by wotunion @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted April 10, 2016 Share Posted April 10, 2016 Это да, я проверил, но мне тогда нужно предварительный парсинг строки 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 @ Quote Link to comment Short link Share on other sites More sharing options...
wotunion Posted April 10, 2016 Author Share Posted April 10, 2016 (edited) Не так. 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 есть, спасибо! Edited April 10, 2016 by wotunion @ Quote Link to comment Short link Share on other sites More sharing options...
goodman Posted April 10, 2016 Share Posted April 10, 2016 Кстати, BIChances.as можно будет удалить ага, а заодно и totalHP перенести бы в экстра поля. а то на данный момент я так и не придумал вариант использования:) @ Quote Link to comment Short link Share on other sites More sharing options...
wotunion Posted April 10, 2016 Author Share Posted April 10, 2016 (edited) ага, а заодно и totalHP перенести бы в экстра поля. а то на данный момент я так и не придумал вариант использования:) Оно вроде на питоне, тоже дин.макрос нужен типа {{hpally}} {{hpenemy}} Edited April 10, 2016 by wotunion @ Quote Link to comment Short link Share on other sites More sharing options...
XSerzHX Posted April 10, 2016 Share Posted April 10, 2016 Оно вроде на питоне, тоже дин.макрос нужен типа {{hpally}} {{hpenemy}} и эти же макросы только в процентах, чтоб можно было рисовать @ Quote Link to comment Short link Share on other sites More sharing options...
seriych Posted April 10, 2016 Share Posted April 10, 2016 и эти же макросы только в процентах, чтоб можно было рисовать и разность hp тоже абсолютная и в процентах @ Quote Link to comment Short link Share on other sites More sharing options...
goodman Posted April 10, 2016 Share Posted April 10, 2016 и разность hp тоже абсолютная и в процентах заодно и нормализацию бы прикрутить для графического отображения:) два дня идею вынашиваю)) @ Quote Link to comment Short link Share on other sites More sharing options...
wotunion Posted April 10, 2016 Author Share Posted April 10, 2016 (edited) Проще показать на примерах: Вот это статический макрос: // {{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 Edited April 10, 2016 by wotunion 1 @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted April 10, 2016 Share Posted April 10, 2016 Нужно ли что-то писать в options Macros.Format Да, нужно опции передавать. Можно просто {} 1 @ Quote Link to comment Short link Share on other sites More sharing options...
wotunion Posted April 10, 2016 Author Share Posted April 10, 2016 Да, нужно опции передавать. Можно просто {} Да, причина была в этом, но не проявлялась на стат. макросах а, нужно опции передавать. Можно просто {} Все, работает супер, обновляется, логика обновления полей сделана, теперь только макросы нужно спс. заодно и нормализацию бы прикрутить для графического отображения:) два дня идею вынашиваю)) Поподробнее плз @ Quote Link to comment Short link Share on other sites More sharing options...
goodman Posted April 10, 2016 Share Posted April 10, 2016 Поподробнее плз :norm - нормализация значения, например {{hp-ratio:300}} вернет значения в диапазоне 0..300 @ Quote Link to comment Short link Share on other sites More sharing options...
sirmax Posted April 10, 2016 Share Posted April 10, 2016 :norm - нормализация значения, например {{hp-ratio:300}} вернет значения в диапазоне 0..300 Для значений, у которых есть фиксированный максимум это не сложно сделать. @ Quote Link to comment Short link 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.