[b]ADOLF[/b], #setdef не работает на дефайны с параметрами =\
Если к тому же дефайну с параметрами попробовать применить сначала #undef, потом объявить его снова, вместо нового дефайна компилируется функция:
private function Ololo takes Par1, Par2 returns define
Только вот так. У меня в коде то особо менять было нечего, но расстроило то, что пришлось трогать и изменять девственный printf.txt :'(
И, ах да, в 2010ом Касперском настроил исключение для Авто-апдейтера, теперь можно гулять спокойно. Вот выпилить я его не могу, я за него штуку рублей отдал, ключ лицензионный.
[b]Elf_Stratigo[/b], #undef надо, начинается с решётки.
Пару багов:
[code]
int Type_1_1_Wave Например, если у меня создаются атаки мобов по несколько волн в каждой.
define MyDef(num1, num2) = {
unit u = new unit(Some_player, Type_##num1##_##num2##_Wave, Some_X, Some_Y, Some_F)
}
MyDef(1, 1)
[/code]
Говоря грубо, использование соединений внутри других дефайнов крашит адикхелпер.
И самый страшный баг: [off]//Хотя, видимо, вы и так знаете о нём.[/off]
[code]
define private { <--- Собственно, вот оно
MyDef1 = lol
MyDef2 = wtf
MyDef3 = cjass_imba, ##MyDef2
}
[/code]
К хренам собачим крашит адик хелпер, убивает процесс компиляции, убивает компилируемую карту, при этом сам процесс (во всяком случае, у меня на семёрке) остаётся в памяти и занимает овер половины ресурсов процессора.
[size=1][i]FREEZE_ball добавил:[/i][/size]
Ах да, программу авто-обновления убил касперский (он её принял за троян, никак изменить его решение я не смог о_О ), так что FIX IT, DUDE.
bb:Дефайн с внутренней условной компиляцией по одному из аргументов крашит хелпер. Причина проста: после названия и перечисления аргументов перед фигурной скобкой надо поставить знак '=' Но пусть он это выдаёт как ошибку и не самовыпиливается.
По первому примеру сразу скажу, что нельзя: парсер [b]не[/b] различает типы переменных.
[i]ИМХО[/i], вручную куда удобнее.
Good idea.
Аналогично с #3.
Делается через дефайны, имхо.
Ничего не понял о_О [off]//Но мб это и только мои проблемы :р[/off]
Кодер сам должен знать все свои "размеры", зОМГ.
======> #1
======> #1
[style=onine]5/10[/style]
Поправь меня, если я ошибаюсь, но это, вроде, уже и так есть в vJass.
haxyn...
А вот это достойная идея.
Можно, но глупо, имхо.
[off]Все перечисленное выше является [b]личным мнением[/b] товарища [b]FREEZE_ball[/b]а и может никоим образом не совпадать с мнением товарища автора поста, с мнением вышеуказанного товарища автора [b]cJass[/b]а и прочих товарищей авторов. Я предупредил!..[/off]
[b]Van Damm[/b], противоречишь сам себе, либо я не понял предыдущего поста о_О
Вот конкретная моя задача:
[code]
define <Wave>(Num) = {
private int array Wave*Num*_1_ToPos[9]
...
}
Wave(1)
Wave(2)
...
[/code]
Это легко делалось через текстмакро, но последняя версия AH (CJ) совершенно (абсолютно) не дружит с ними. [off]Не надо указывать поставить здесь Num в конце, слишком большой кусок кода придется переписывть >_<[/off] .
» Half-Life / Portal 2: новые подробности
» StarCraft 2 / Коллекционное издание StarCraft 2
» WarCraft 3 / cJass - дополнение к языку JASS
» WarCraft 3 / cJass - дополнение к языку JASS
б) вот такая интересная штука:
define private COND2 = true
#if COND1 == 1
I`m lold1
#elseif COND1 == 2
I`m lold2
#else
I`m lold3
#endif
#endif
===>
I`m lold1
I`m lold2
define private COND2 = true
#if COND1 разница очевидна, но это глупо
I`m lold1
#elseif COND1 == 2
I`m lold2
#else
I`m lold3
#endif
#endif
===>
I`m lold2
» WarCraft 3 / cJass - дополнение к языку JASS
private void ActionsPickup() {
unit u = GetManipulatingUnit(); item i = GetManipulatedItem()
InitSPHItem('I017', 25)
KILL(u, i)
}
#setdef InitSPHItem(id, sph) = {if GetItemTypeId(i) == id {Modify(u, -sph)}}
private void ActionsDrop() {
unit u = GetManipulatingUnit(); item i = GetManipulatedItem()
InitSPHItem('I017', 25)
KILL(u, i)
}[/code][code]
define private InitSPHItem(id, sph) = {if GetItemTypeId(i) == id {Modify(u, sph)}}
private void ActionsPickup() {
unit u = GetManipulatingUnit(); item i = GetManipulatedItem()
InitSPHItem('I017', 25)
KILL(u, i)
}
#undef InitSPHItem
define private InitSPHItem(id, sph) = {if GetItemTypeId(i) == id {Modify(u, -sph)}}
private void ActionsDrop() {
unit u = GetManipulatingUnit(); item i = GetManipulatedItem()
InitSPHItem('I017', 25)
KILL(u, i)
}[/code]
» WarCraft 3 / cJass - дополнение к языку JASS
private function Ololo takes Par1, Par2 returns define
» WarCraft 3 / Библиотека функций
» WarCraft 3 / Библиотека функций
» WarCraft 3 / cJass - дополнение к языку JASS
private int array alpha, beta, gamma
beta[100] = 1050
gamma[1000] = 15
» WarCraft 3 / cJass - дополнение к языку JASS
unit u = new unit(Some_player, Type_##num1##_##num2##_Wave, Some_X, Some_Y, Some_F)
}
MyDef(1, 1)
MyDef1 = lol
MyDef2 = wtf
MyDef3 = cjass_imba, ##MyDef2
}
» Прочее / Шесть лет. Шестая версия
» WarCraft 3 / cJass - дополнение к языку JASS
» WarCraft 3 / cJass - дополнение к языку JASS
» WarCraft 3 / cJass - дополнение к языку JASS
» WarCraft 3 / cJass - дополнение к языку JASS
/* ... */
struct #struct_name#
/* ... */
static method create takes void returns #struct_name#
/* ... */
endmethod
/* ... */
method onDestroy dV
/* ... */
endmethod
endstruct
» WarCraft 3 / cJass - дополнение к языку JASS
» WarCraft 3 / cJass - дополнение к языку JASS
}[/code]
Точнее, процесс замораживается на "определении областей дефайнов" [off]точно не помню, но как-то так =\[/off]
» WarCraft 3 / cJass - дополнение к языку JASS
» WarCraft 3 / cJass - дополнение к языку JASS
» WarCraft 3 / cJass - дополнение к языку JASS
» WarCraft 3 / cJass - дополнение к языку JASS
...
}
Wave(1)[/code]
при попытке компиляции выдаёт
» WarCraft 3 / cJass - дополнение к языку JASS
» WarCraft 3 / cJass - дополнение к языку JASS
private int array Wave*Num*_1_ToPos[9]
...
}
Wave(2)
...
» WarCraft 3 / cJass - дополнение к языку JASS
define <AnyName>(Name1, Name2) = {
void WTF_Func##Name1##_Func##Name2() {}
}
AnyName(1, 1)
AnyName(1, 2)
AnyName(1, 3)
AnyName(2, 1)
AnyName(2, 2)
AnyName(2, 3)
Я пробовал:
#Name1#
^Name1^
%Name1%
##Name1#
$Name1$
##Name1