30

» WarCraft 3 / Хеш-таблица против обуза глобальных массивных переменных

защита от переполнения массива
Всё легко переполняется, если поставить целью переполнять.
вот так, например.
struct New
{
	int a
	
	static New create(int _Input) {
		New this = New.allocate()
		this.a = _Input
		return this
	}
}

void SomeFunc ()
{
	int i = 0
	while ( i++ < 9001 ) {
		New.create(0)
	}
	TriggerSleepAction(99999) // How long we need to keep overflow.
}

WTF?
Господи, ты вообще про разницу между нативными и ссылочными типами не слышал? Не читал ни одной статьи по оптимизации? Нативные типы плоди и инициализируй как и сколько хочешь, их подчищает ядро системы, а ссылочные типы для системы - чёрный ящик, она их не трогает, и их надо чистить самому.
И поскольку мы говорим в отношении варкрафта, а не системы, а в варкрафте помимо нескольких нативных есть ещё и куча ссылочных типов, то для тебя по факту имеет значение статус инициализированности переменных только этих ссылочных типов.
а почему не 8191? или не 8192?
Потому что я так запомнил.
30

» WarCraft 3 / Хеш-таблица против обуза глобальных массивных переменных

чем отличаются структуры от массивов?
Внимание, ответ:
структуры
есть только на момент их написания
массивы
просто есть и точка
что есть "проинициализированность переменной" ?
Что в памяти выделено место, где она хранится, и ничто иное это место занять не может. По-хорошему, в компиляторе должен быть сборщик мусора, который освобождает память, на которую не остаётся ни одной живой ссылки, но в варкрафте слишком много типов, которые являются ссылочными и, следовательно, всегда держат ссылку на память, не давая сборщику мусора её освобождать. Вот пока переменная висит неочищенным ссылочным типом, она является проинициализированной.

чем отличаются структуры от массивов?
Тем, что препроцессор vJass сам генерирует Jass код таким образом, что лишних масссивов попросту не создаётся (за инициализированность элементов массивов ссылочных типов, однако, всё равно отвечает автор vJass кода). Кстати, если мне не изменяет память, каждый созданный массив де-факто имеет 8190 элементов, если проинициализирован хотя бы один из них: в них не лежат ссылки, но место зарезервировано.
30

» WarCraft 3 / Хеш-таблица против обуза глобальных массивных переменных

Да там StringHash( ) жрёт больше, чем все перезаписывания в массивах вместе взятые (кстати, на память не влияет значение переменной, влияет только факт её проинициализированности). Короче, юзайте структуры (и читайте русский мануал по ним), это удобнее хранения данных в хэше или массиве, и по факту является работой с массивами напрямую. И быстро, и удобно.
30

» WarCraft 3 / Старая карта не открывается в новом редакторе

Принятый ответ
Нашёл решение для тебя.
Пол-ночи провозился, но нашёл. почему-то это стало делом чести - открыть сию карту в редакторе

В общем, берёшь архив из аттача и тупо суёшь папку UI в корень варкрафта. После этого карта будет открываться любым вариантом редактора - как JNGP (любым), так и (даже!) стандартным.
Важно: локальные файлы должны быть разрешены.

Только там такой срач и дичь, что лучше реально своими руками с нуля писать...
Загруженные файлы
30

» WarCraft 3 / Можно ли на jass записать функцию внутри глобальной переменной?

Николай Матвеев, xgm.guru/forum/attachment.php?attachmentid=31989
Краткая версия vJass мануала, переведённая на русский язык.

подробнее объясни пожалуйста
Я не способен объяснить функционирование фичи подробнее, чем её автор, ссылка на официальную страницу документации по теме я дал выше.
30

» WarCraft 3 / Можно ли на jass записать функцию внутри глобальной переменной?

Принятый ответ
я не знаком библиотеками vjass
Официальная страница документации по JassHelper (vJass). Использование библиотек (ссылка как раз ведёт к описанию их функциональности) способно полностью решить твою проблему, да и в целом там много всего интересного о возможностях препроцессора.

Замечу также, что cJass позволяет заключать содержимое библиотеки в фигурные скобки вместо использования директивы endlibrary:
library Example
{
	// Here goes all library related content, like: global variables, functions and structures.
	// Anything of these can be private inside library.
}

Официальная страница документации по AdicHelper (cJass), в том числе относительно работы с функциональностью, которую вносит JassHelper.
30

» WarCraft 3 / Можно ли на jass записать функцию внутри глобальной переменной?

обыному блокноту
Советую "Sublime Text 3", на сайте где-то для него даже модуль подсветки Jass / cJass синтаксиса лежал.
вместо в коде карты лучше бы функции лежали где угодно
В чём сложность использовать директивы library Name и endlibrary?
30

» WarCraft 3 / Можно ли на jass записать функцию внутри глобальной переменной?

и постоянно вызывать эту перменную вместо функции?
Чисто в теории, какие преимущества мог бы дать такой подход в сравнении с простым вызовом функции, по-твоему?
30

» WarCraft 3 / Старая карта не открывается в новом редакторе

  1. На сайте указано "защита: нет" для другой версии карты.
  2. Пункта "защита" в описании ресурса определяется (или определялся) простым дропдаун-меню, где по-умолчанию стоит "нет". Автор просто мог забыть поменять этот пункт.
  3. Использовать множество систем, объединённых и настроенных для реализации конкретных задач на конкретной карте в другой карте, как правило, оказывается сложнее, чем осваивать их по одной и самостоятельно собирать под нужды проекта.
  4. Использование одновременно всех наработок из чужой карты с целью сделать свою карту в подавляющем большинстве случаев неприятно попахивает плагиатом. Лучше попробуйте придумать что-то своё, по истине уникальное и новое, а не бездумно копируйте чужую работу, это несложно, да и полезно. =)
30

» WarCraft 3 / war3mapImported

Принятый ответ
А если всё импортировать, как есть, а потом в редакторе MPQ скопировать из папки "war3mapImported" в корень карты?
Это должно сработать.
Алгоритм следующий:
  1. Файлы импортируются, на war3mapImported внимания не обращается, по завершению сохраняем карту.
  2. Открывам карту MPQ-эдитором, переносим весь импорт куда требуется, директорию war3mapImported удаляем.
  3. Открываем карту в редакторе и делаем что хотим.
30

» WarCraft 3 / Текстура склона

Принятый ответ
У склона вроде как только 2 текстуры можно использовать в карте.
Может, через JNGP можно как-то это ограничение обойти? Или Zepir map editor?
Только 2 текстуры, в JNGP встроенный UMSWE позволяет увеличить это количество, но в игре верным образом это будет видно только при запуске игры через специальный исполняемый файл, так что, считай, что нет.
Через Zepir это, ЕМНИП, возможно провернуть без вышеуказанного костыля, но придётся обработать все нужные склоны (что само по себе является весьма трудоёмким и скрупулёзным процессом), при этом при первом же пересохранении карты в обычном редакторе весь достигнутый результат будет потерян. Использование некоторых приложений для оптимизации карты также приведёт к умножению результата труда на ноль.

Если вкратце, то игра не стоит свеч, а результат - труда.

ничего себе, кто-то помнит о зепире D:

У бота, кстати, есть несколько хороших вариантов, например, использовать декорации в виде склонов.
30

» WarCraft 3 / Помогите решить логическую задачу

Делаешь событие Юнит - Получает урон
Находиться в бою != наносить или получать урон: представь ситуацию, что ты постоянно атакуешь цель, но из раза в раз промахиваешься.
30

» WarCraft 3 / Событие на получение урона

Что-то типа такого
код
library DamageController {

    private struct damage {

        float common, fire, magic, world

        //constructor
        static damage new(float common, float fire, float magic, float world) {
            damage this = damage.create()
            this.common = common
            this.fire   = fire
            this.magic  = magic
            this.world  = world
            return this
        }
    }

    struct damageController {

        private damage instance
        private agent source, target  //here can be units instead of agents

        //constructor
        static void dealDamage(agent source, agent target, float common, float fire, float magic, float world) {
            damageController this = damageController.create()
            this.source = source
            this.target = target
            this.instance = damage.new(common, fire, magic, world)
            this.dealDamageEx()
        }

        private void dealDamageEx() {

            resist resistance  = target.getResist()

            float commonResist = resistance.common
            float fireResist   = resistance.fire
            float magicResist  = resistance.magic

            float commonDamage = instance.common
            float fireDamage   = instance.fire
            float magicDamage  = instance.magic
            float worldDamage  = instance.world         //world damage can't be resisted
            	//all checks, reductions and onDamage calls goes here, including any damage detection
            	//you can call here any related method or function from anywhere
                //you can send values from this.instance, this.source or this.target, but not themselves
            	//don't forget to deal damage here
            this.instance.destroy()
            this.destroy()
        }
    }
}

У меня так и сделано, собственно. Build-in нанесения урона вообще нет, за дамаг отвечает этот контроллер.
хотя у меня и юнитов в понимании варкрафта нету по сути...

Hate, ты же в курсе, что эта тема не работает?
    SetMaxHp(u,n) = SetUnitState(u, ConvertUnitState(1), n)
    SetMaxMp(u,n) = SetUnitState(u, ConvertUnitState(3), n)
Среди дефайнов в Main.
30

» Game Dev / Unreal Engine Contest

Из-за ... несовместимой версии движка
Я не оказался таким терпеливым и забил после первой же проблемы с обратной совместимостью =D
сорян, но от меня террейна не будет
30

» WarCraft 3 / Jass New Gen Pack - Rebuild 1.4

Hanabishi, кстати, ты смотрел сборку от Toadcop'а?

Она не суперновая, но там может оказаться какое-нибудь интересное ноу-хау =)
30

» WarCraft 3 / Пак текстур для молнии

хотя клэмповы модели галактик имеют место быть
Скорее всего, ты про галактики за авторством iZucken, я не занимаюсь моделлингом =)
30

» WarCraft 3 / Пак текстур для молнии

Обновление пака, добавилось аж целых 7 новых текстур.

позволил себе облагородить оформление
Hate, проверь оповещения сайтовой системы задач
30

» Hanabishi's Blog / Jass New Gen Pack - Rebuild

TESH?
Ну там, надо прямо сказать, мало чего нераздутого нашлось

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

» Hanabishi's Blog / Jass New Gen Pack - Rebuild

Hanabishi, у тебя откуда-то взялись исходники TECH? Или что за раздутая либа в твоей сборке?
30

» AzaZzell / Об отношениях

Полагаю, ищут того, кто скомпенсирует какую-нибудь слабую черту ищущего, даже логично называется: "вторая половинка". Её и ищут.
30

» Edemium / Уникальная боевая система

входы-выходы, их можно и не подсвечивать, я думаю.
Все существующие учебники, пособия, мастера и удачные игры говорят, что "проходы, куда можно или нужно (особенно, если нужно!) пройти игроку, должны быть освещены или выделены иным, не менее заметным образом." Эта тема реально уже считай что индустриальный стандарт.

Не нашёл событие на выбор предмета лкм
Описание самого предмета же, "краткое описание" или что-то такое.
Есть ещё такой вариант, с лёгким вызовом здравому смыслу: заранее пихать сетку трекейблов на весь пол, и простым отловом мировых координат курсора получать ближайшую к нему вещь.

отказался, ибо долго.


Минутка полезного совета от Клампа

Однажды один довольно мудрый, очень опытный и весьма успешный гейм-дизайнер поведал мне величайший секрет, пообещав, что если я буду постоянно его помнить, то любые придуманные мною дизайны всегда будут лучше дизайнов тех, кому этот секрет неведом. Сам секрет прост, и звучит он вот так: "Много - это шесть."
Если в игре существует шесть или болеe способов выполнять один и тот же геймплей,
то эти способы возможно бесконечно чередовать без потери к ним интереса игрока.
Причина простая: игрок может одновременно участвовать только в одном геймплее, и субъективно воспринимает смену способа выполнения геймплея точно так-же, как воспринял бы смену самого геймплея. По факту, смена геймплея на ходу обычно сложна в реализации и ощущается нелепо, поэтому позитивные ощущения там, где предполагались негативные, оказываются сильнее, чем при нейтральном фоне.


Суть в том, что "открывать новые геймплейные возможности" вовсе не обязательно, можно просто давать новые комбинации уже бывших в игре элементов (в том же "Бастионе" или "Транзисторе" нового оружия выдавалось мало, но зато комбинировать можно было - мама не горюй).
Вообще, я никогда это правило не встречал ни в зарубежной, ни в отечественной литературе на тему, но могу сказать, что моя практика не приводила к сомнениям в его правоте.
30

» Game Dev / Unreal Engine Contest

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

Если лока будет выглядеть приемлимо к 28у, то вне конкурса хотел бы закинуть. Можно?