19

» WarCraft 3 / cJass - дополнение к языку JASS

[b]newzoom[/b], предложение уже вносилось, Адик сказал, что это нереализуемо технически [off]о_О[/off].
19

» WarCraft 3 / cJass - дополнение к языку JASS

[b]ADOLF[/b], при условной компиляции:
а) невозможно представить несколько условий через and, or.
б) вот такая интересная штука:
[code]
define private COND1 = 2
define private COND2 = true
...
#if COND2
#if COND1 == 1
I`m lold1
#elseif COND1 == 2
I`m lold2
#else
I`m lold3
#endif
#endif
Превращается в
===>
I`m lold1
I`m lold2
[/code]
и лечится только
[code]
define private COND1 = 2
define private COND2 = true
...
#if COND2
#if COND1 разница очевидна, но это глупо
I`m lold1
#elseif COND1 == 2
I`m lold2
#else
I`m lold3
#endif
#endif
Превращается в
===>
I`m lold2
[/code]
19

» WarCraft 3 / cJass - дополнение к языку JASS

[off]Не "вы", а "ты". Не люблю такое к себе обращение ;) . Мне не 100500.[/off]
[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)
}
#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]
19

» WarCraft 3 / cJass - дополнение к языку JASS

[b]ADOLF[/b], #setdef не работает на дефайны с параметрами =\
Если к тому же дефайну с параметрами попробовать применить сначала #undef, потом объявить его снова, вместо нового дефайна компилируется функция:
private function Ololo takes Par1, Par2 returns define
О_О
19

» WarCraft 3 / Библиотека функций


define {
    KILL(VAR) = {VAR = null}
    KILL(VAR1, VAR2) = {VAR1 = null; VAR2 = null}
    KILL(VAR1, VAR2, VAR3) = {VAR1 = null; VAR2 = null; VAR3 = null}
    KILL(VAR1, VAR2, VAR3, VAR4) = {VAR1 = null; VAR2 = null; VAR3 = null; VAR4 = null}
    KILL(VAR1, VAR2, VAR3, VAR4, VAR5) = {VAR1 = null; VAR2 = null; VAR3 = null; VAR4 = null; VAR5 = null}
}
Быстро обнуляем все хендлы в функции. Пример:

KILL(u, gr, tr, dood)
19

» WarCraft 3 / cJass - дополнение к языку JASS

Так, вчера, по пьяни, поработал К.О. =) Спасибо, что не обругали.
Ну да ничего. Зато установил нестабильную версию парсера, сразу же при компиляции выдал мне ошибку, ругаясь вот примерно на такое:
[code]
globals
private int array alpha, beta, gamma
...
alpha[10] = 100500
beta[100] = 1050
gamma[1000] = 15
[/code]
Суть: последовательное объявление массивов невозможно.
[code]
private int array alpha, array beta, array gamma
[/code]
Только вот так. У меня в коде то особо менять было нечего, но расстроило то, что пришлось трогать и изменять девственный printf.txt :'(
И, ах да, в 2010ом Касперском настроил исключение для Авто-апдейтера, теперь можно гулять спокойно. Вот выпилить я его не могу, я за него штуку рублей отдал, ключ лицензионный.
19

» WarCraft 3 / cJass - дополнение к языку JASS

[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.
19

» WarCraft 3 / cJass - дополнение к языку JASS

[b]XiMiKs[/b], перед объявлением локальной переменной должен быть её тип, а перед присвоением - нет.
19

» WarCraft 3 / cJass - дополнение к языку JASS

bb:Дефайн с внутренней условной компиляцией по одному из аргументов крашит хелпер. Причина проста: после названия и перечисления аргументов перед фигурной скобкой надо поставить знак '=' Но пусть он это выдаёт как ошибку и не самовыпиливается.
19

» WarCraft 3 / cJass - дополнение к языку JASS

  1. По первому примеру сразу скажу, что нельзя: парсер [b]не[/b] различает типы переменных.
  2. [i]ИМХО[/i], вручную куда удобнее.
  3. Good idea.
  4. Аналогично с #3.
  5. Делается через дефайны, имхо.
  6. Ничего не понял о_О [off]//Но мб это и только мои проблемы :р[/off]
  7. Кодер сам должен знать все свои "размеры", зОМГ.
  8. ======> #1
  9. ======> #1
  10. [style=onine]5/10[/style]
  11. Поправь меня, если я ошибаюсь, но это, вроде, уже и так есть в vJass.
  12. haxyn...
  13. А вот это достойная идея.
  14. Можно, но глупо, имхо.
[off]Все перечисленное выше является [b]личным мнением[/b] товарища [b]FREEZE_ball[/b]а и может никоим образом не совпадать с мнением товарища автора поста, с мнением вышеуказанного товарища автора [b]cJass[/b]а и прочих товарищей авторов. Я предупредил!..[/off]
19

» WarCraft 3 / cJass - дополнение к языку JASS

[off][b]ScorpioT1000[/b], вот это то, что нужно, благодарю.[/off]
Я ещё не понял, AdicHelper вообще работает с методами и статик методами? Если да, то какой синтакс?
[code]
define dV = takes void returns void double_void
/* ... */
struct #struct_name#
/* ... */
static method create takes void returns #struct_name#
/* ... */
endmethod
/* ... */
method onDestroy dV
/* ... */
endmethod
endstruct
[/code]
?
19

» WarCraft 3 / cJass - дополнение к языку JASS

Парсер сбивается на коде
[code]define private {
...
}[/code]
Точнее, процесс замораживается на "определении областей дефайнов" [off]точно не помню, но как-то так =\[/off]
19

» WarCraft 3 / cJass - дополнение к языку JASS

bb:Мне почему то кажется, что создатели обеих хелперов враждуют между собой о_О Или я не прав?
19

» WarCraft 3 / cJass - дополнение к языку JASS

[b]ShadoW DaemoN[/b], помогло, спасибо =)
[b]Van Damm[/b], оно и без этого было, это мой личный глюк...
19

» WarCraft 3 / cJass - дополнение к языку JASS

[b]Van Damm[/b], ок, идём в лоб:
Код
[code]define <Wave>(num) = {
private int array Wave##Num##_1_ToPos[9]
...
}
Wave(1)[/code]
при попытке компиляции выдаёт
[IMG]http://s46.radikal.ru/i111/0911/66/05f7df05796d.jpg[/IMG]
Ещё одна твоя попытка объяснить то, что и так понятно?
[size=1][i]FREEZE_ball добавил:[/i][/size]
Я к тому, что прочтение [url=http://xgm.ru/forum/showpost.php?p=702902&postcount=255]вот этого поста[/url] должно было объяснить, что я пробовал так.
19

» WarCraft 3 / cJass - дополнение к языку JASS

[b]Van Damm[/b], омг, не понимаешь, чтоли?
'##' ставится, когда аргумент дефайна - последнее слово в названии функции/переменной
[code]
SomeFunc##'SomeArg'
[/code]
а мне нужно узнать, как ставить аргумент в середине названия функции/переменной
[code]
SomeFunc'SomeArg'SomeFunc
[/code]
19

» WarCraft 3 / cJass - дополнение к языку JASS

[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] .
19

» WarCraft 3 / cJass - дополнение к языку JASS

В названии функции внутри дефайна необходимо использовать две переменные, которые он даёт.
[code]
...
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)
[/code]
Пример бессмысленный; каким образом отделить Name1?
Я пробовал:
[code]
##Name1##
#Name1#
^Name1^
%Name1%
##Name1#
$Name1$
##Name1
[/code]
Всё не получается, как надо правильно?
[size=1][i]FREEZE_ball добавил:[/i][/size]
Это же относится и к переменным.