И не надо мне доказывать что есть сторонний софт от комьюнити, вот бери и юзай, я так делаю, все так делают, ты так делал и делай дальше!
А не хочу, пошел он этот софт от комьюнити куда по-глубже, перестающий быть совместимым с каждым апдейтом. Я хочу официально поддерживаемые обязательные фичи редактора, не ставить себе кучу непонятных билдов редакторов комьюнити, вроде подсветки, чтобы заменить в нем извините залупу из 2001 года.
Когда комьюнити начинает поставлять не просто префабы, скрипты, модельки и решения друг для друга, а целые редакторы - это звоночек разрабам, что они клепают полную туфту сваливая работу на третью сторону.
Я открыл редактор в Reforged и узрел это:
Это такой кринж, просто позорище и халтура, не убрать этот ущербный шрифт. Не добавить подсветку. За такое под зад пинками на до.
Прежде всего запомни, что всё в C и C++ это цифры, байты и биты, ничего более. Всё состоит из фундаментальных типов. Стандартные библиотеки, позволяющие использовать строки, контейнеры и прочие ништяки не умеют работать с графикой и не предназначены для работы с ней, это просто данные, в свою очередь тоже основанные на числовых фундаментальных типах. Так и строка std::string это просто контейнер для динамического массива char'ов, которые являются по сути числами размером в один байт. Числа не знают какого они цвета, формы, шрифта, они просто хранят в себе информацию, в данном случае текст. Окрасить текст в цвета можно в зависимости от того где ты этот текст выводишь. Консоль на винде в такое не умеет, а если умеет то косо и криво, и вообще с этим играться бесполезно. Консоль на линуксе умеет в цвета, там для этого есть escape-последовательности которые ставятся перед текстом, подобно цветовым кодам в варкрафте. Играйся с winapi или лучше Qt, в последнем вообще в html отображаемый текст форматировать можно.
начит ты неправильно делаеш... вот у меня 1 хештаблицу на все виды юнит статы предметы и разные хранение... все лишь 1 и не вижу проблем!
Извини но ты явно недалекий, потому что не читаешь что я пишу и говоришь какой ты молодец. Мне тебе пирожок с полки достать? Как ты в одну хеш таблицу запихнешь целые массивы значений для каждого объекта индивидуально, учитывая что в объекте массивов будет несколько? А ты в курсе что таблица начинает лагать если её захламить одновременно кучей всего? У меня тоже есть одна общая таблица для игры и её НЕЛЬЗЯ засирать такими данными. Bergi_Bear:
Drulia_san, ну тогда попробуй чё, о результатах отпишись, не стало ли фаталить не с того ни с сего
Drulia_san, да читаем мы читаем, просто ты какую-то дикую и странную вещь придумал, честно скажу мб тебе прекрано подойдёт FlushParentHashtable, но за его последствия я не могу ручиться, ибо надо ли перед удалением "Родителя" удалить всех "Детей" - хз, насколько сильно это вызывает утечку - хз.
Удалить всех детей легко, там один parent key, это this. prog:
Вот из-за обилия таких костылей автоматический переход на Lua и усложняется больше необходимого т.к. эти костыли вручную выкидывать и переделывать придется.
Такой костыль у меня только в одном месте, поудалять всё это будет проще простого, так как это я перепишу вручную потом когда перенесу всё остальное.
Drulia_san, а лучше да как Steal nerves, сказал, не уничтожать ХТ и не плодить ХТ в принципе, есть операция FlushChildHashtable, она удаляет все значения по ключу, то не засоришь ничего, но думаю о ней ты точно знаешь раз у тебя там код на 100500 строк
Почему никто не читает что я пишу? Сколько раз мне написать что мне нужна отдельная таблица на каждый экземпляр структуры, и даже на каждый массив внутри структуры. Если FlushParentHashtable удаляет таблицу, то этого более чем достаточно.
Одной таблицей технически невозможно обойтись. Я же не виноват, что массив на 100 элементов сокращает макс. количество экземпляров структуры с 8 тысяч до 80. Да, хештаблица в данной ситуации это костыль, но зато помогает обойти ограничение
Ну если ты скажешь как перевести полторы сотни тысяч строк кода cJass на луа с сохранением комментариев, имен переменных и отступов, то буду рад перейти на луа Steal nerves:
тебе одной таблицы может хватить на всю игру. Нету смысла ее удалять
Прочитай зачем я её создаю, она заменяет массивы внутри структур.
Одна таблица, один массив. Родительский ключ - this, дочерний ключ - индекс массива.
Drulia_san, Эмм, работай с готовой картой, в новых редакторах пока ничего такого нет. Собрал карту и запустил на 1.31 (хотя возможна ваша карта и так не совместима). Потом об этом рано думать, нет никакой инфы про редактор рефорджа и его совместимость. Никто не видел редактор рефорджа!
Так что ждем, а там сделаешь на старом редакторе, запустишь в рефордже если близзарды нам такое дадут.
В новых редакторах есть возможность вести свой проект как папку, а это меняет всё. Например, я смогу подключить к проекту git и удобно вести разработку кода, где по-файлово будет разложено всё содержимое каждого модуля с кодом моей карты.
Сначала нужно дождаться рефорджа, потом а вдруг заработает как есть? Если нет править, jass никто не отменял. Переписывать на луа если не будет 1 клик конверторов всю карту такое себе занятие, че вы там собрались выиграть если оно и так работает? ( в рефордже подымут вычислительную мощность у движки). Единсвенно но, если вы собрались переходить на рефордж - это мемхак, от него стоит отказатся, альтернатив многих его фишек близзарды пока не сделали, так что ждем и надеемся или делаем костылями.
Мемхак я не использую, я давно от этого отказался. Но все таки, как хотя бы в обычный jass перевести свой код из cjass? Может я к примеру хочу новые версии редакторов попробовать, но мою карту они собрать не сумеют...
Drulia_san, посмотрел код, если this есть 0 в обычном методе, то это значит, что там где ты вызываешь Restore для StructuresSnapshot ты передаешь 0.
call obj.Restore() // obj равен 0, а его тип есть StructuresSnapshot.
Действительно. Объект вообще не создлавался, оказывается строчка obj.hNoBar = g_HNoBarracks; в конструкторе StructureSnapshot присваивала не инициализированную глобалку, из-за чего падала вся эта "башня" из объектов)
Включи, у тебя может быть кончился лимит на объекты класса.
Я прогнал карту со включенным дебагом, никаких новых сообщений не появилось. Да я на калькуляторе считал, там в хуждшем случае 4-5 тысяч объектов на карте может быть таких одновременно, а максимум вроде как 8
Но здесь и тысячи нет, лимит вряд ли превышается...
То есть подсветку синтаксиса в новый редактор не добавили?
Мне интересно, вот на кой хер мне эти новые функции в новом редакторе, если они даже подсветку синтаксиса с автокомплитом не могут сделать? Вы видели вообще этот древнейший поплывший шрифт без подсветки милипиздрических размеров? Ну кааак это можно оставить в редакторе спустя почти 20 лет?!
Не нашёл документации по class, но можете попробоывать
local PHS_Stack this = PHS_Stack.allocate();
Ну class это для личного удобства у меня продефайнен как struct, сейчас проверю...
Не работает, ну как я и думал. смысла называть переменную this в статическом методе 0.
Я понял в чем была проблема. В размере массива.
Да, в классах оказывается лимит на размеры массивов, и если там объявлен слишком большой массив такой класс никогда не будет создан.
Понизил до с 4096 до 1024, создается.
Скармливаешь хендл таймера или даммика, и все записанные поля обнуляются.
Тогда это всё упрощает, очистку хештейбла запихну в функцию безопасного удаления юнита, и сделаю такую же функцию для таймеров, и можно считать что таблица очищена от лишнего.
Я тут пока смотрел, заметил, что ты вообще не чистишь хеш. Ни для таймера уделения, ни для самого даммика. Стоит пока исправить это. Аргументы функций обнулять не нужно.
Я не вижу ни одной причины, почему тут может удалятся герой. Думал на отсутствие очистки хеша, но ведь после создания таймера ячейка перезаписывается, то есть там хранится уже даммик. Может ты скопипастил и где-то ввёл неверное название функции?
DUMMY_OWNER = 150
T_UNIT = 159
Упс, а хеш-таблицы надо чистить? Не ну это уже совсем дичь. Код захламится на треть очисткой хеш-таблицы. У меня сотни мест где я её использую и не чищу вообще. Ну потому что это уже через чур, и переменные обнулять, и ладно ресурсы удалять, но хеш чистить эт перебор, ненене, работает так и норм. Пусть он в памяти будет толстенный, как-нибудь переживу. Размер на логичность поведения влиять не должен, не 4 гб же там в памяти. Все равно пишет в одни и те же ячейки, перезаписывая.
Я проверил, нигде нет этого названия. Я не копипастил лишнее, баг именно в этой функции.
Я сам не понимаю, для геймплея нужных функций кот наплакал, даже юнита не повернуть, зато для камер напихали столько ненужных функций, среди которых нужные невозможно найти интуитивно разбираясь
Скорее всего в твоём инициализаторе происходит деление на 0 или использование необъявленной переменной, или действий там столько, что они выходят за лимит операций. Вот только пока эти действия были в инициализаторе библиотеки, они происходили в отдельном от main потоке (потому что инициализатор библиотеки вызывается через ExecuteFunc(), что не ломало всё остальное.
Так я убираю эту инициализацию, это лишь разгружает общую инициализацию. Я вообще её убрал как и функционал библиотеки, а оно всё равно не работает. Возвращаю как было - и начинает работать.
Ред. Drulia_san
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
Ред. Drulia_san
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
А не хочу, пошел он этот софт от комьюнити куда по-глубже, перестающий быть совместимым с каждым апдейтом. Я хочу официально поддерживаемые обязательные фичи редактора, не ставить себе кучу непонятных билдов редакторов комьюнити, вроде подсветки, чтобы заменить в нем извините залупу из 2001 года.
Ред. PT153
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
Это такой кринж, просто позорище и халтура, не убрать этот ущербный шрифт. Не добавить подсветку. За такое под зад пинками на до.
Ред. Drulia_san
» Программирование / Покраска отдельно каждого символа на С++
» WarCraft 3 / Можно ли уничтожить hashtable?
Bergi_Bear: Окей
» WarCraft 3 / Можно ли уничтожить hashtable?
prog: Такой костыль у меня только в одном месте, поудалять всё это будет проще простого, так как это я перепишу вручную потом когда перенесу всё остальное.
Ред. Drulia_san
» WarCraft 3 / Можно ли уничтожить hashtable?
Одной таблицей технически невозможно обойтись. Я же не виноват, что массив на 100 элементов сокращает макс. количество экземпляров структуры с 8 тысяч до 80. Да, хештаблица в данной ситуации это костыль, но зато помогает обойти ограничение
Ред. Drulia_san
» WarCraft 3 / Можно ли уничтожить hashtable?
Steal nerves:
Одна таблица, один массив. Родительский ключ - this, дочерний ключ - индекс массива.
» WarCraft 3 / Актуальность cJass
» WarCraft 3 / Актуальность cJass
» WarCraft 3 / this равен нулю
» WarCraft 3 / this равен нулю
Но здесь и тысячи нет, лимит вряд ли превышается...
» WarCraft 3 / this равен нулю
» WarCraft 3 / Как переходить на lua?
Мне интересно, вот на кой хер мне эти новые функции в новом редакторе, если они даже подсветку синтаксиса с автокомплитом не могут сделать? Вы видели вообще этот древнейший поплывший шрифт без подсветки милипиздрических размеров? Ну кааак это можно оставить в редакторе спустя почти 20 лет?!
Ред. Drulia_san
» WarCraft 3 / allocate возвращает 0
Я понял в чем была проблема. В размере массива.
Да, в классах оказывается лимит на размеры массивов, и если там объявлен слишком большой массив такой класс никогда не будет создан.
Понизил до с 4096 до 1024, создается.
» WarCraft 3 / Так почему же юнит удаляется?
» WarCraft 3 / Так почему же юнит удаляется?
Ред. Drulia_san
» WarCraft 3 / Так почему же юнит удаляется?
T_UNIT = 159
Я проверил, нигде нет этого названия. Я не копипастил лишнее, баг именно в этой функции.
» WarCraft 3 / Так почему же юнит удаляется?
» WarCraft 3 / Голосовой чат
» WarCraft 3 / Как управлять этими камерами??
Ред. Drulia_san
» WarCraft 3 / Перестала работать инициализация
Ред. Drulia_san
» WarCraft 3 / Удаляется герой рандомно, баг
» WarCraft 3 / Удаляется герой рандомно, баг