15

» WarCraft 3 / Бета версия Warcraft III Reforged 1.32

ScorpioT1000:
Drulia_san, xgm.guru/p/wc3/wlpm может собрать код из твоего любимого IDE
Там JASS, как он мне соберет это на lua? Я свой крупный проект открыл в редакторе
15

» WarCraft 3 / Бета версия Warcraft III Reforged 1.32

И не надо мне доказывать что есть сторонний софт от комьюнити, вот бери и юзай, я так делаю, все так делают, ты так делал и делай дальше!
А не хочу, пошел он этот софт от комьюнити куда по-глубже, перестающий быть совместимым с каждым апдейтом. Я хочу официально поддерживаемые обязательные фичи редактора, не ставить себе кучу непонятных билдов редакторов комьюнити, вроде подсветки, чтобы заменить в нем извините залупу из 2001 года.
Когда комьюнити начинает поставлять не просто префабы, скрипты, модельки и решения друг для друга, а целые редакторы - это звоночек разрабам, что они клепают полную туфту сваливая работу на третью сторону.
15

» WarCraft 3 / Бета версия Warcraft III Reforged 1.32

Я открыл редактор в Reforged и узрел это:
Это такой кринж, просто позорище и халтура, не убрать этот ущербный шрифт. Не добавить подсветку. За такое под зад пинками на до.
Загруженные файлы
15

» Программирование / Покраска отдельно каждого символа на С++

Прежде всего запомни, что всё в C и C++ это цифры, байты и биты, ничего более. Всё состоит из фундаментальных типов. Стандартные библиотеки, позволяющие использовать строки, контейнеры и прочие ништяки не умеют работать с графикой и не предназначены для работы с ней, это просто данные, в свою очередь тоже основанные на числовых фундаментальных типах. Так и строка std::string это просто контейнер для динамического массива char'ов, которые являются по сути числами размером в один байт. Числа не знают какого они цвета, формы, шрифта, они просто хранят в себе информацию, в данном случае текст. Окрасить текст в цвета можно в зависимости от того где ты этот текст выводишь. Консоль на винде в такое не умеет, а если умеет то косо и криво, и вообще с этим играться бесполезно. Консоль на линуксе умеет в цвета, там для этого есть escape-последовательности которые ставятся перед текстом, подобно цветовым кодам в варкрафте. Играйся с winapi или лучше Qt, в последнем вообще в html отображаемый текст форматировать можно.
15

» WarCraft 3 / Можно ли уничтожить hashtable?

начит ты неправильно делаеш... вот у меня 1 хештаблицу на все виды юнит статы предметы и разные хранение... все лишь 1 и не вижу проблем!
Извини но ты явно недалекий, потому что не читаешь что я пишу и говоришь какой ты молодец. Мне тебе пирожок с полки достать? Как ты в одну хеш таблицу запихнешь целые массивы значений для каждого объекта индивидуально, учитывая что в объекте массивов будет несколько? А ты в курсе что таблица начинает лагать если её захламить одновременно кучей всего? У меня тоже есть одна общая таблица для игры и её НЕЛЬЗЯ засирать такими данными.
Bergi_Bear:
Drulia_san, ну тогда попробуй чё, о результатах отпишись, не стало ли фаталить не с того ни с сего
Окей
15

» WarCraft 3 / Можно ли уничтожить hashtable?

Bergi_Bear:
Drulia_san, да читаем мы читаем, просто ты какую-то дикую и странную вещь придумал, честно скажу мб тебе прекрано подойдёт FlushParentHashtable, но за его последствия я не могу ручиться, ибо надо ли перед удалением "Родителя" удалить всех "Детей" - хз, насколько сильно это вызывает утечку - хз.
Удалить всех детей легко, там один parent key, это this.
prog:
Вот из-за обилия таких костылей автоматический переход на Lua и усложняется больше необходимого т.к. эти костыли вручную выкидывать и переделывать придется.
Такой костыль у меня только в одном месте, поудалять всё это будет проще простого, так как это я перепишу вручную потом когда перенесу всё остальное.
15

» WarCraft 3 / Можно ли уничтожить hashtable?

Bergi_Bear:
Drulia_san, а лучше да как Steal nerves, сказал, не уничтожать ХТ и не плодить ХТ в принципе, есть операция FlushChildHashtable, она удаляет все значения по ключу, то не засоришь ничего, но думаю о ней ты точно знаешь раз у тебя там код на 100500 строк
Почему никто не читает что я пишу? Сколько раз мне написать что мне нужна отдельная таблица на каждый экземпляр структуры, и даже на каждый массив внутри структуры. Если FlushParentHashtable удаляет таблицу, то этого более чем достаточно.
Одной таблицей технически невозможно обойтись. Я же не виноват, что массив на 100 элементов сокращает макс. количество экземпляров структуры с 8 тысяч до 80. Да, хештаблица в данной ситуации это костыль, но зато помогает обойти ограничение
15

» WarCraft 3 / Можно ли уничтожить hashtable?

Bergi_Bear:
FlushParentHashtable
типа этот метод уничтожает полностью без утечек всю таблицу? Если так, то спасибо
Bergi_Bear:
и вообще ждём вас на луа =)
Ну если ты скажешь как перевести полторы сотни тысяч строк кода cJass на луа с сохранением комментариев, имен переменных и отступов, то буду рад перейти на луа
Steal nerves:
тебе одной таблицы может хватить на всю игру. Нету смысла ее удалять
Прочитай зачем я её создаю, она заменяет массивы внутри структур.
Одна таблица, один массив. Родительский ключ - this, дочерний ключ - индекс массива.
15

» WarCraft 3 / Актуальность cJass

quq_CCCP:
Drulia_san, Эмм, работай с готовой картой, в новых редакторах пока ничего такого нет. Собрал карту и запустил на 1.31 (хотя возможна ваша карта и так не совместима). Потом об этом рано думать, нет никакой инфы про редактор рефорджа и его совместимость. Никто не видел редактор рефорджа!
Так что ждем, а там сделаешь на старом редакторе, запустишь в рефордже если близзарды нам такое дадут.
В новых редакторах есть возможность вести свой проект как папку, а это меняет всё. Например, я смогу подключить к проекту git и удобно вести разработку кода, где по-файлово будет разложено всё содержимое каждого модуля с кодом моей карты.
15

» WarCraft 3 / Актуальность cJass

quq_CCCP:
Сначала нужно дождаться рефорджа, потом а вдруг заработает как есть? Если нет править, jass никто не отменял. Переписывать на луа если не будет 1 клик конверторов всю карту такое себе занятие, че вы там собрались выиграть если оно и так работает? ( в рефордже подымут вычислительную мощность у движки). Единсвенно но, если вы собрались переходить на рефордж - это мемхак, от него стоит отказатся, альтернатив многих его фишек близзарды пока не сделали, так что ждем и надеемся или делаем костылями.
Мемхак я не использую, я давно от этого отказался. Но все таки, как хотя бы в обычный jass перевести свой код из cjass? Может я к примеру хочу новые версии редакторов попробовать, но мою карту они собрать не сумеют...
15

» WarCraft 3 / this равен нулю

PT153:
Drulia_san, посмотрел код, если this есть 0 в обычном методе, то это значит, что там где ты вызываешь Restore для StructuresSnapshot ты передаешь 0.
call obj.Restore()  // obj равен 0, а его тип есть StructuresSnapshot.
Действительно. Объект вообще не создлавался, оказывается строчка obj.hNoBar = g_HNoBarracks; в конструкторе StructureSnapshot присваивала не инициализированную глобалку, из-за чего падала вся эта "башня" из объектов)
15

» WarCraft 3 / this равен нулю

PT153:
Включи, у тебя может быть кончился лимит на объекты класса.
Я прогнал карту со включенным дебагом, никаких новых сообщений не появилось. Да я на калькуляторе считал, там в хуждшем случае 4-5 тысяч объектов на карте может быть таких одновременно, а максимум вроде как 8
Но здесь и тысячи нет, лимит вряд ли превышается...
15

» WarCraft 3 / Как переходить на lua?

То есть подсветку синтаксиса в новый редактор не добавили?
Мне интересно, вот на кой хер мне эти новые функции в новом редакторе, если они даже подсветку синтаксиса с автокомплитом не могут сделать? Вы видели вообще этот древнейший поплывший шрифт без подсветки милипиздрических размеров? Ну кааак это можно оставить в редакторе спустя почти 20 лет?!
15

» WarCraft 3 / allocate возвращает 0

NazarPunk:
Не нашёл документации по class, но можете попробоывать
local PHS_Stack this = PHS_Stack.allocate();
Ну class это для личного удобства у меня продефайнен как struct, сейчас проверю...
Не работает, ну как я и думал. смысла называть переменную this в статическом методе 0.
Я понял в чем была проблема. В размере массива.
Да, в классах оказывается лимит на размеры массивов, и если там объявлен слишком большой массив такой класс никогда не будет создан.
Понизил до с 4096 до 1024, создается.
15

» WarCraft 3 / Так почему же юнит удаляется?

PT153:
Было бы неплохо глянуть на тру JASS (то есть уже после обработки cJass) функций, что в шапке.
Странно, но когда я добавил очистку очистку хеш-таблицы к удалению таймеров и юнитов этот баг перестал появляться)
15

» WarCraft 3 / Так почему же юнит удаляется?

PT153:
Упс, а хеш-таблицы надо чистить?
Надо. Благо есть такая функция.
native FlushChildHashtable takes hashtable table, integer parentKey returns nothing
Скармливаешь хендл таймера или даммика, и все записанные поля обнуляются.
Тогда это всё упрощает, очистку хештейбла запихну в функцию безопасного удаления юнита, и сделаю такую же функцию для таймеров, и можно считать что таблица очищена от лишнего.
15

» WarCraft 3 / Так почему же юнит удаляется?

PT153:
У DUMMY_OWNER и T_UNIT разные значения?

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

Я не вижу ни одной причины, почему тут может удалятся герой. Думал на отсутствие очистки хеша, но ведь после создания таймера ячейка перезаписывается, то есть там хранится уже даммик. Может ты скопипастил и где-то ввёл неверное название функции?
DUMMY_OWNER = 150
T_UNIT = 159
Упс, а хеш-таблицы надо чистить? Не ну это уже совсем дичь. Код захламится на треть очисткой хеш-таблицы. У меня сотни мест где я её использую и не чищу вообще. Ну потому что это уже через чур, и переменные обнулять, и ладно ресурсы удалять, но хеш чистить эт перебор, ненене, работает так и норм. Пусть он в памяти будет толстенный, как-нибудь переживу. Размер на логичность поведения влиять не должен, не 4 гб же там в памяти. Все равно пишет в одни и те же ячейки, перезаписывая.
Я проверил, нигде нет этого названия. Я не копипастил лишнее, баг именно в этой функции.
15

» WarCraft 3 / Так почему же юнит удаляется?

PT153:
IsUnitDummy(src)
GetDummyOwningUnit(src)
CreateDummy(GetOwningPlayer(src), src, loc)
Что внутри этих функций?
bool IsUnitDummy(unit u)
	{
		if (u == null || IsUnitType(u, UNIT_TYPE_HERO))
		{
			if (IsUnitType(u, UNIT_TYPE_HERO))
			{
				GroupRemoveUnit(g_Dummies, u);
			}
			return false;
		}
		return IsUnitInGroup(u, g_Dummies);
	}
	
	unit GetDummyOwningUnit(unit dummy)
	{
		if (dummy == null)
		{
			return null;
		}
		return LoadUnitHandle(g_Hashtable, GetHandleId(dummy), DUMMY_OWNER);
	}

unit CreateDummy(player owner, unit uOwner, location loc)
	{
		unit dummy = CreateUnitAtLoc(owner, 'n001', loc, GetUnitFacing(uOwner));
		SaveUnitHandle(g_Hashtable, GetHandleId(dummy), DUMMY_OWNER, uOwner);
		SaveBoolean(g_Hashtable, GetHandleId(dummy), DUMMY_RETURN_DMG, false);
		SaveBoolean(g_Hashtable, GetHandleId(dummy), DUMMY_EXTRA_DMG, false);
		SaveBoolean(g_Hashtable, GetHandleId(dummy), DUMMY_DO_PERIODIC, false);
		SaveReal(g_Hashtable, GetHandleId(dummy), DUMMY_DMG_PERIOD, 0);
		SetDummySpellId(dummy, 0);
		SetDummySchool(dummy, SCHOOL_NONE);
		SetUnitPathing(dummy, false);
		GroupAddUnit(g_Dummies, dummy);
		owner = null;
		uOwner = null;
		loc = null;
		return dummy;
	}

PT153:
Тут используются дефайны?
Все что сплошным капсом - это дефайны.
15

» WarCraft 3 / Голосовой чат

Можно если версия 1.26а. При подгрузки DLL из карты с нужным функционалом голосовой чат возможен легко.
15

» WarCraft 3 / Как управлять этими камерами??

Я сам не понимаю, для геймплея нужных функций кот наплакал, даже юнита не повернуть, зато для камер напихали столько ненужных функций, среди которых нужные невозможно найти интуитивно разбираясь
15

» WarCraft 3 / Перестала работать инициализация

Скорее всего в твоём инициализаторе происходит деление на 0 или использование необъявленной переменной, или действий там столько, что они выходят за лимит операций. Вот только пока эти действия были в инициализаторе библиотеки, они происходили в отдельном от main потоке (потому что инициализатор библиотеки вызывается через ExecuteFunc(), что не ломало всё остальное.
Так я убираю эту инициализацию, это лишь разгружает общую инициализацию. Я вообще её убрал как и функционал библиотеки, а оно всё равно не работает. Возвращаю как было - и начинает работать.
15

» WarCraft 3 / Удаляется герой рандомно, баг

Создался даммик - специально под него и таймер для удаления.
А таймер для удаления таймера?)
Зачем если таймер удаляется сразу после удаления дамми? (Если конечно это не рофл)
15

» WarCraft 3 / Удаляется герой рандомно, баг

8gabriel8:
Надо код смотреть
Я бы скинул, но его слишком много и вряд ли кто-то будет за меня его смотреть