Где-то видел использование //! define, что-то вроде //! define KillUnit(u) myKillUnit(u)
Действовал как и обычный define, но сейчас пробовал и он не заменяет ничего, в чем трабл? И хотелось бы весь список директив с описанием.

Принятый ответ

Дефайн используется не так. ! - это объявление текстовых макросов, которые призваны помочь в создании однотипных функций, которые отличаются типом параметров. Из мануала:
    //! textmacro Increase takes TYPEWORD
    function IncreaseStored$TYPEWORD$ takes gamecache g, string m, string l returns nothing
        call Store$TYPEWORD$(g,m,l,GetStored$TYPEWORD$(g,m,l)+1)
    endfunction
    //! endtextmacro

    //! runtextmacro Increase("Integer")
    //! runtextmacro Increase("Real")
Будут объявлены функции для увеличения сохраненного целочисленного числа и числа с плавающей точкой (реал).
Если интересно - материал: www.wc3c.net/vexorian/jasshelpermanual.html
Дефайны (сам смотрел применение по стандартным библиотекам анти-BJ, которые по умолчанию находятся в JNGP). Принцип: организация необходимых подмен в ходе компиляции карты. Подробнее - здесь: cjass.xgm.guru/manual-ru#htoc13
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
13
6 лет назад
0
Дефайн используется не так. ! - это объявление текстовых макросов, которые призваны помочь в создании однотипных функций, которые отличаются типом параметров. Из мануала:
    //! textmacro Increase takes TYPEWORD
    function IncreaseStored$TYPEWORD$ takes gamecache g, string m, string l returns nothing
        call Store$TYPEWORD$(g,m,l,GetStored$TYPEWORD$(g,m,l)+1)
    endfunction
    //! endtextmacro

    //! runtextmacro Increase("Integer")
    //! runtextmacro Increase("Real")
Будут объявлены функции для увеличения сохраненного целочисленного числа и числа с плавающей точкой (реал).
Если интересно - материал: www.wc3c.net/vexorian/jasshelpermanual.html
Дефайны (сам смотрел применение по стандартным библиотекам анти-BJ, которые по умолчанию находятся в JNGP). Принцип: организация необходимых подмен в ходе компиляции карты. Подробнее - здесь: cjass.xgm.guru/manual-ru#htoc13
Принятый ответ
0
12
6 лет назад
Отредактирован OVOgenez
0
Пушистый, Это я знаю, поэтому и спрашиваю есть ли способ без textmacro. Т.е. мне нужно например задефайнить что-то в макросе, с этим все норм, но мне не прикольно вызывать с помощью ! runtextmacro
0
13
6 лет назад
Отредактирован Пушистый
0
OVOgenez, без этого можно. Ведет себя, как обычная функция. Например, в примере выше:
	call IncreaseStoredInteger(gameCache,myStr,myStr2)
Ну, и дефайнить соответственно, например:
<KillUnit>(u) = RemoveUnit(u)
Это заменит каждую попытку убийства юнита триггерно на его полное удаление с карты, но все это на этапе компиляции, что очень важно.
0
12
6 лет назад
0
Пушистый, мне не это надо, вот пример:
define test(s)={
	define s="hello"
}
т.е. дефайн в дефайне, но оно так не пашет, может есть другой способ (кроме дефайна в текстовом макросе)
0
13
5 лет назад
0
OVOgenez, setdef, undef может понадобится.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.