15

» WarCraft 3 / 5. Функции в jass

Чисто технически они там таки эмулируются.
И даже в коллбеках?
15

» WarCraft 3 / 5. Функции в jass

ну, есть lambda-функции в cJass.
Это всего лишь визуальная имитация анонимных функций. Они не дают замыканий требуемых вопрошающим.
15

» StarCraft / StarCraft Remastered

Жаль, что по такому случаю не сверстают новую допкампанию.
Не жаль и не стоит. Над играми работали разные люди и, в пределах классической игры, повествование будет чрезвычайно контрастно.
15

» StarCraft / StarCraft Remastered

Гуд, если и ролики перерендерили. Ото игра 4к, а видосики 480.
15

» WarCraft 3 / Делаю рандом на пик героев но почемуто герои повторяюся.

Проверять код лень.
Главное меню - Файл - Параметры - Проверка карты - "Фиксированный случайный разброс"
Если есть, убери.
15

» WarCraft 3 / Циклы в cJass

Имба, христа ради, оформляй код в теги.
do {
	// Какие-то действия...
} whilenot (i++ >= pow)
Будет транслировано в
loop
	// Какие-то действия
exitwhen i >= pow
	set i = i + 1
endloop
whilenot это псевдоним exitwhen. Натыкаясь на whilenot, парсер заменяет его на exitwhen Лучше whilenot не использовать, он только путает и С-стилистики не прибавляет, из-за отсутствие такового в самом С.
Разница в инкременте
do {
	// Какие-то действия...
} whilenot (i++ >= pow)
Сначала будет произведена проверка, затем увеличение переменной i на 1
do {
	// Какие-то действия...
} whilenot (++i >= pow)
Сначала переменная i будет увеличена на 1, затем будет произведена проверка.
15

» WarCraft 3 / Вопрос о функциях

Вдохновляйтесь примером сжасса. Написан на асме крутым программером. Работает нереально быстро. После этого: саппортить этот код никто не может, включая автора. Месяцы на отладку багов. Баги до сих пор есть и совершенно непредсказуемые.
Который используется даже в китайском YDWE дополненный кучей cJass библиотек. Вот это успех.
15

» WarCraft 3 / vJass: .create () и .allocate () в чем разница?

allocate выделяет индекс структуры и возвращает его.
Если парсер наткнется на вызов метода create, он проверит наличие в этой структуре метода create, если такого нет, будет вызван метод allocate вместо create.
15

» WarCraft 3 / [vJass] Основы работы со Структурами (Structs)

Я бы всё-таки предложил взять любую доступную стать по ооп для новичков по любому современному статически типизированному языку и просто слизать её переделав под вжасс
А зачем? Любая статья по ООП, это в основном вода про "нас окружают объекты, у них есть свойства, бла-бла-бла". Любой игрок вара уже знает что такое объект, на примере того же юнита, который имеет набор свойств, где полями можно назвать параметры (броня/здоровье/мана/скорость), а методами - его поведение (если юнит движется, значит в каждый кадр вызывается метод, высчитывающий из скорости и прошедшего времени его новое положение) и т.д. Нужно только усвоить базовый принцип воплощения объектов в коде, который един для всех языков и vJass-a в частности.
15

» WarCraft 3 / Вопрос о функциях

Теперь вопрос, использование таких переходов и присваивание другим локальным более производительнее чем использование глобалок во всем триггере или нет?
Озвучу 3-е мнение и скажу, что этот вопрос тебя волновать не должен. И DracoL1ch, и ssbbssc оба правы, но это не окажет на игровой процесс и оптимизацию в карте никакого влияния. Механика слишком низкоуровневая.
Проблемок никаких не будет, если запускать уже запущенный таймер?
Проверка не нужна. Проблемок не будет.
Автору спасибо за взятие кода в теги и человеческое оформление.
15

» WarCraft 3 / [vJass] Основы работы со Структурами (Structs)

Впрочем, если вы используете cjass, можно просто писать
Опускать this можно и в vJass. Из оригинала:
  • this is optional : You can use a single . instead of this. when you are inside an instance method. (For example set .member = value)
Однако можно сделать вот как, обходя стандартный метод создания, при этом, значения вам нужно будет задать самим
Внутри структуры можно перегрузить конструктор create. Если структура не имеет определенный программистом метод create, парсер установит вызов метода allocate для выделения ячейки под структуру. Если метод create программистом определен, он сам должен вызвать метод allocate внутри конструктора
struct Point
	real x
	real y
	static method create takes nothing returns thistype
		local Point p = Point.allocate()
		set p.x = 0.0
		set p.y = 0.0
		return p
	endmethod
endstruct
Метод create должен быть статичным.
Важно: вы можете объявлять массивы внутри структур.
И ни слова о том, как это делается
И еще много чего важного, чего хватит на 2 такие статьи (исключая множество фич которые мало кому вперлись).
Худо-бедно короче говоря. Многое сказано вскользь и с успехом опущены важные детали.
15

» WarCraft 3 / Вопросы по функциям

Мне нужно узнать какая характеристика у героя является основной.
Такой функции нет. Используй обходные пути
  • База данных
  • Дать в РО каждому герою способность-пустышку в соответствии с его основной характеристикой и проверять наличие конкретной способности
  • В зависимости от того, из какой таверны взят герой (или как они у тебя выбираются) добавлять их в отряды силачей/ловкачей/умничей
Вновь не то ты понял. Я знаю что делают обе эти функции, мне нужно знать как лучше выходить из функции, используя return в ее конце, или нет.
Вновь не то ты знаешь. Эти ключевые слова не являются функциями. Разберись в основах языка.
НЕТУ никакого ЛУЧШЕГО способа выйти из функции, сам по себе вопрос - бред.
15

» WarCraft 3 / Где можно прочитать про структуры "для чайников"?

да читал я этот документ еще давно и перечитывал, мне все там непонятно, например какой синтаксис и для чего юзать
Локализуй и сформулируй конкретный вопрос. Соберем потом ответы в статью по структурам.
с инглишом траблы, ибо у меня в школе его небыло
Значит нужно учить. Рашка в сфере IT и модмейкинага все еще средневековье.
15

» WarCraft 3 / Вопросы по функциям

В общем в способности урон подсчитывается от основной характеристики героя(ОХГ), но для этого придется создавать еще одну массивную целочисленную для сохранения ОХГ, поэтому подумал, что может я упустил такую функцию, в которую указываешь юнита, а она возвращает ОХГ этого юнита, есть ли такая штука?
Непонятно что тебе нужно. Само значение характеристики или просто узнать, какая из характеристик является основной.
Также появился еще один вопрос, как лучше завершать работу большинства функций, через endfunction или через return???
endfunction не завершает работу функции. Это ключевое слово указывает компилятору на конец блока кода текущей функции.
Работу функции завершает команда return. Используется для принудительного выхода из функции и возврата значения если необходимо.
И еще один вопрос, в cJass видел такую штуку как private, есть ли альтернатива этому на Jass?
private/public пришли из vJass. Альтернатив в классическом нету.
15

» WarCraft 3 / Где можно прочитать про структуры "для чайников"?

Оригинал
Хреновый перевод
Курс начинающего xgm.guru/p/wc3/jassintroduction
Курс начинающего описывает обычный Jass2. Структуры начинаются с vJass.
15

» WarCraft 3 / способ оглушить

  • дать даммику молот бурь и применить на цель.
  • дать даммику баш и атаковать цель (преодолевает иммунитет)
  • запаузить цель
  • каждую 0.01 сек выдавать цели команду "stop"
15

» WarCraft 3 / хранить функцию в макросе cjass define?

Мануал описывает поведение макросов достаточно понятно. Разъясняя пример в теме другими словами
define MyFunc(type) = {
	nothing MyFunc_##type(type x){
		BJDebugMsg('type')
	}
}
Если препроцессор, обрабатывая код, наткнется на строчку, где вызывается макрос MyFunc, например
// Где-то в CustomScript карты
MyFunc(real)
Он применит указанный выше макрос, заменив в нем слово type на указанное в скобках MyFunc слово real, в результате чего получим код
// MyFunc(real) убрано препроцессором и заменено кодом ниже
nothing MyFunc_real(real x){
	BJDebugMsg("real")
}
Что впоследствии транслируется из cJass в обычный Jass2
function MyFunc_real takes real x returns nothing
	call BJDebugMsg("real")
endfunction
15

» WarCraft 3 / как можно убрать стандартных юнитов с редактора?

Пдытожу сказанное выше:
  • стандартные юинты/заклинания/декорации и всё-всё-всё хранится не в карте, а в архивах игры, в так называемых SLK-таблицах
  • игра/редактор, во время загрузки карты, получает данные из этих SLK-таблиц
  • внутри самой карты хранятся данные об изменении уже существующих данных SLK таблицы, то есть, из SLK-таблицы берутся данные юнита, а из карты информация о том, какие данные этого юнита изменены, таким образом в памяти игры/редактора появляется новый юнит
  • чтобы редактор мог работать, ему придется загружать стандартные данные из SLK-таблиц
Ответ на вопрос будет следующий: Смирись
15

» WarCraft 3 / Обнуление спецэффектов

Уничтожая эффект, ты заставляешь его проигрывать анимацию Death. Если у эффекта только 1 анимация, будет проиграна эта единственная анимация. Если анимаций несколько, но нет анимации Death, эффект просто исчезнет.
15

» WarCraft 3 / Использование SetUnitFlyHeight

Если движок делает 200 вычислений когда я делаю 10, то 50 моих + 50 от движка выглядят симпотичнее.
Работа движка производится на машинном языке. Код же на Jass интерпретируется виртуальной машиной со множеством проверок. 10 твоих вычислений, в действительности, могут интерпретироваться в более 200 машинных команд движка.
15

» WarCraft 3 / Использование SetUnitFlyHeight

Интересует тупо вопрос производительности.
Ответ на этот вопрос всегда один:
  • Функция нативная - производительность выше
  • Функция пользовательская - производительность ниже
Для изменения высоты юнита с указанием скорости в SetUnitFlyHeight, ты используешь только эту функцию.
Рассчитывая высоту самостоятельно, ты используешь и функцию SetUnitFlyHeight, и пользовательский код Jass для расчетов.
Очевидно, во втором случае операций больше.
Нужно ли это? Вероятно как и сам вц3 - нет. Но перфекционизм можно считать моим вторым хобби.
С практической точки зрения вопрос оптимизации не актуален. В наши дни следует думать о качестве кода и простоте его поддержки.