Всё легко переполняется, если поставить целью переполнять.
вот так, например.
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.
}
Господи, ты вообще про разницу между нативными и ссылочными типами не слышал? Не читал ни одной статьи по оптимизации? Нативные типы плоди и инициализируй как и сколько хочешь, их подчищает ядро системы, а ссылочные типы для системы - чёрный ящик, она их не трогает, и их надо чистить самому.
И поскольку мы говорим в отношении варкрафта, а не системы, а в варкрафте помимо нескольких нативных есть ещё и куча ссылочных типов, то для тебя по факту имеет значение статус инициализированности переменных только этих ссылочных типов.
Что в памяти выделено место, где она хранится, и ничто иное это место занять не может. По-хорошему, в компиляторе должен быть сборщик мусора, который освобождает память, на которую не остаётся ни одной живой ссылки, но в варкрафте слишком много типов, которые являются ссылочными и, следовательно, всегда держат ссылку на память, не давая сборщику мусора её освобождать. Вот пока переменная висит неочищенным ссылочным типом, она является проинициализированной.
Тем, что препроцессор vJass сам генерирует Jass код таким образом, что лишних масссивов попросту не создаётся (за инициализированность элементов массивов ссылочных типов, однако, всё равно отвечает автор vJass кода). Кстати, если мне не изменяет память, каждый созданный массив де-факто имеет 8190 элементов, если проинициализирован хотя бы один из них: в них не лежат ссылки, но место зарезервировано.
Да там StringHash( ) жрёт больше, чем все перезаписывания в массивах вместе взятые (кстати, на память не влияет значение переменной, влияет только факт её проинициализированности). Короче, юзайте структуры (и читайте русский мануал по ним), это удобнее хранения данных в хэше или массиве, и по факту является работой с массивами напрямую. И быстро, и удобно.
Нашёл решение для тебя.
Пол-ночи провозился, но нашёл. почему-то это стало делом чести - открыть сию карту в редакторе
В общем, берёшь архив из аттача и тупо суёшь папку UI в корень варкрафта. После этого карта будет открываться любым вариантом редактора - как JNGP (любым), так и (даже!) стандартным.
Важно: локальные файлы должны быть разрешены.
Только там такой срач и дичь, что лучше реально своими руками с нуля писать...
Официальная страница документации по 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.
}
На сайте указано "защита: нет" для другой версии карты.
Пункта "защита" в описании ресурса определяется (или определялся) простым дропдаун-меню, где по-умолчанию стоит "нет". Автор просто мог забыть поменять этот пункт.
Использовать множество систем, объединённых и настроенных для реализации конкретных задач на конкретной карте в другой карте, как правило, оказывается сложнее, чем осваивать их по одной и самостоятельно собирать под нужды проекта.
Использование одновременно всех наработок из чужой карты с целью сделать свою карту в подавляющем большинстве случаев неприятно попахивает плагиатом. Лучше попробуйте придумать что-то своё, по истине уникальное и новое, а не бездумно копируйте чужую работу, это несложно, да и полезно. =)
У склона вроде как только 2 текстуры можно использовать в карте.
Может, через JNGP можно как-то это ограничение обойти? Или Zepir map editor?
Только 2 текстуры, в JNGP встроенный UMSWE позволяет увеличить это количество, но в игре верным образом это будет видно только при запуске игры через специальный исполняемый файл, так что, считай, что нет.
Через Zepir это, ЕМНИП, возможно провернуть без вышеуказанного костыля, но придётся обработать все нужные склоны (что само по себе является весьма трудоёмким и скрупулёзным процессом), при этом при первом же пересохранении карты в обычном редакторе весь достигнутый результат будет потерян. Использование некоторых приложений для оптимизации карты также приведёт к умножению результата труда на ноль.
Если вкратце, то игра не стоит свеч, а результат - труда.
ничего себе, кто-то помнит о зепире D:
У бота, кстати, есть несколько хороших вариантов, например, использовать декорации в виде склонов.
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 нанесения урона вообще нет, за дамаг отвечает этот контроллер. хотя у меня и юнитов в понимании варкрафта нету по сути...
Ну там, надо прямо сказать, мало чего нераздутого нашлось
Я хз, несколько дней провтыкал в что и как в попытках собрать свой сетап не на основе пары других, ощущения такие, словно только начал и уже ничего не понимаю.
входы-выходы, их можно и не подсвечивать, я думаю.
Все существующие учебники, пособия, мастера и удачные игры говорят, что "проходы, куда можно или нужно (особенно, если нужно!) пройти игроку, должны быть освещены или выделены иным, не менее заметным образом." Эта тема реально уже считай что индустриальный стандарт.
Не нашёл событие на выбор предмета лкм
Описание самого предмета же, "краткое описание" или что-то такое.
Есть ещё такой вариант, с лёгким вызовом здравому смыслу: заранее пихать сетку трекейблов на весь пол, и простым отловом мировых координат курсора получать ближайшую к нему вещь.
Однажды один довольно мудрый, очень опытный и весьма успешный гейм-дизайнер поведал мне величайший секрет, пообещав, что если я буду постоянно его помнить, то любые придуманные мною дизайны всегда будут лучше дизайнов тех, кому этот секрет неведом. Сам секрет прост, и звучит он вот так: "Много - это шесть."
Если в игре существует шесть или болеe способов выполнять один и тот же геймплей, то эти способы возможно бесконечно чередовать без потери к ним интереса игрока.
Причина простая: игрок может одновременно участвовать только в одном геймплее, и субъективно воспринимает смену способа выполнения геймплея точно так-же, как воспринял бы смену самого геймплея. По факту, смена геймплея на ходу обычно сложна в реализации и ощущается нелепо, поэтому позитивные ощущения там, где предполагались негативные, оказываются сильнее, чем при нейтральном фоне.
Суть в том, что "открывать новые геймплейные возможности" вовсе не обязательно, можно просто давать новые комбинации уже бывших в игре элементов (в том же "Бастионе" или "Транзисторе" нового оружия выдавалось мало, но зато комбинировать можно было - мама не горюй). Вообще, я никогда это правило не встречал ни в зарубежной, ни в отечественной литературе на тему, но могу сказать, что моя практика не приводила к сомнениям в его правоте.
Я начал по фану вне конкурса пилить карту, но то ли мой скил так ощутимо упал, то ли анрил стал несколько замудренее: мне прказалось, что блупринтами создать и красиво настроить воду раньше было заметно проще. мой старый контроллер движения вообще не фурычит на последнем уе, больше не поподтягиваться на высокие препятствия =(
Если лока будет выглядеть приемлимо к 28у, то вне конкурса хотел бы закинуть. Можно?
Ред. Clamp
» WarCraft 3 / Хеш-таблица против обуза глобальных массивных переменных
И поскольку мы говорим в отношении варкрафта, а не системы, а в варкрафте помимо нескольких нативных есть ещё и куча ссылочных типов, то для тебя по факту имеет значение статус инициализированности переменных только этих ссылочных типов.
» WarCraft 3 / Хеш-таблица против обуза глобальных массивных переменных
» WarCraft 3 / Хеш-таблица против обуза глобальных массивных переменных
Ред. Clamp
» WarCraft 3 / Старая карта не открывается в новом редакторе
Пол-ночи провозился, но нашёл. почему-то это стало делом чести - открыть сию карту в редакторе
Важно: локальные файлы должны быть разрешены.
» WarCraft 3 / Можно ли на jass записать функцию внутри глобальной переменной?
Краткая версия vJass мануала, переведённая на русский язык.
Ред. Clamp
» WarCraft 3 / Можно ли на jass записать функцию внутри глобальной переменной?
Ред. Clamp
» WarCraft 3 / Можно ли на jass записать функцию внутри глобальной переменной?
» WarCraft 3 / Можно ли на jass записать функцию внутри глобальной переменной?
» WarCraft 3 / Старая карта не открывается в новом редакторе
Ред. Clamp
» WarCraft 3 / war3mapImported
Алгоритм следующий:
» WarCraft 3 / Текстура склона
Через Zepir это, ЕМНИП, возможно провернуть без вышеуказанного костыля, но придётся обработать все нужные склоны (что само по себе является весьма трудоёмким и скрупулёзным процессом), при этом при первом же пересохранении карты в обычном редакторе весь достигнутый результат будет потерян. Использование некоторых приложений для оптимизации карты также приведёт к умножению результата труда на ноль.
» WarCraft 3 / Помогите решить логическую задачу
Ред. Clamp
» WarCraft 3 / Событие на получение урона
хотя у меня и юнитов в понимании варкрафта нету по сути...
» Game Dev / Unreal Engine Contest
сорян, но от меня террейна не будет
» WarCraft 3 / Jass New Gen Pack - Rebuild 1.4
» WarCraft 3 / Пак текстур для молнии
Ред. Clamp
» WarCraft 3 / Пак текстур для молнии
Hate, проверь оповещения сайтовой системы задач
» Hanabishi's Blog / Jass New Gen Pack - Rebuild
» Hanabishi's Blog / Jass New Gen Pack - Rebuild
» AzaZzell / Об отношениях
» Edemium / Уникальная боевая система
Есть ещё такой вариант, с лёгким вызовом здравому смыслу: заранее пихать сетку трекейблов на весь пол, и простым отловом мировых координат курсора получать ближайшую к нему вещь.
Минутка полезного совета от Клампа
то эти способы возможно бесконечно чередовать без потери к ним интереса игрока.
Вообще, я никогда это правило не встречал ни в зарубежной, ни в отечественной литературе на тему, но могу сказать, что моя практика не приводила к сомнениям в его правоте.
» Game Dev / Unreal Engine Contest
мой старый контроллер движения вообще не фурычит на последнем уе, больше не поподтягиваться на высокие препятствия =(