XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
adic3x

offline
Опыт: 108,439
Активность:
[cJass] cj_print - обсуждение и пожелания

что это?

в версии 1.3.4.0 в AdicParser была добавлена возможность форматирования строк. для удобства пользователей также написана библиотека cj_print - в ней определены основные макросы, а также обработчики типов. основная цель этого нововедения - повышение читабельности кода.
важным нюансом является то, что это не повлияет на другие строки, поэтому если у вас где то в строках встречается символ ^ вы можете быть спокойны
void Trig_esc_Actions () {
    printf ("^pc was defeated by evil ^pc - he lost ^igold gold.",\
    Player(0), Player(1), GetRandomInt(0,1))
}
результат выполнения данной функции будет следующим:

как я могу это использовать?

включите библиотеку в код карты
include "cj_print.j"
все, теперь вы можете обращаться к перегруженным функциям. помните, что в native функциях аргументы, которые должны быть подставленны в строку указываются сразу после строки
sprintf - форматирует принимаемую строку и возращает ее в качестве результата, например sDialogAddButton принимает в качестве аргументов dialog, строку, которая будет форматироваться, n аргументов произвольного типа (в настоящее время максимум 16 аргументов) и integer (id горячей клавиши).
отдельно также стоит функция sprintf, она возращает отформатированую строку, и может быть использована например так
string s = sprintf ("hello, ^ipc! \^\^", 0)
// \^\^ - будет преобразованно в ^^
перед тем как я выложу список функций, я определю fStr как форматируемую строку и произвольное количество аргументов к ней
string   sprintf                     (fStr s)
void     printf                      (fStr s) // стандартный вывод
void     sBJDebugMsg                 (fStr s)
void     sDisplayTextToPlayer        (player p, real x, real y, fStr s)
void     sDisplayTimedTextToPlayer   (player p, real x, real y, real time, fStr s)
void     sDisplayTimedTextFromPlayer (player p, real x, real y, real time, fStr s)
void     sSetTextTagText             (texttag t, fStr s, real h)
void     sQuestSetTitle              (quest q, fStr s)
void     sQuestSetDescription        (quest q, fStr s)
void     sQuestItemSetDescription    (questitem q, fStr s)
void     sMultiboardSetTitleText     (multiboard m, fStr s)
void     sMultiboardSetItemsValue    (multiboard m, fStr s)
void     sMultiboardSetItemValue     (multiboarditem m, fStr s)
void     sDialogSetMessage           (dialog d, fStr s)
button   sDialogAddButton            (dialog d, fStr s, int hotkey)
button   sDialogAddQuitButton        (dialog d, bool b, fStr s, int hotkey)
void     sLeaderboardAddItem         (leaderboard l, fStr s, player p)
хорошо, теперь я приведу список типов по умолчанию
^p     - имя игрока, принимает player
^pc    - цветное имя игрока, принимает player
^i     - десятичное число, принимает int
^igold - десятичное число, золото, принимает int
^ilumb - десятичное число, древесина, принимает int
^ip    - имя игрока, принимает int (номер игрока)
^ipc   - цветное имя игрока, принимает int (номер игрока)
^b     - bool, выводит "true" или "false"
^r     - вещественное число, без форматирования, принимает real
^s     - строка, в случае передачи immed значение "склеится" с источником
^v     - var, подстановка аргумента в строку
^h     - десятичное число, ид дескриптора, принимает соответсвенно дескриптор
библиотека спроетирована так, что пользователь может переназначить или добавить свою разметку типов, делается это так
// переопределяем макрос
setdef cj_sprintf_argTyp_User = /*разметка*/

// тут мы форматируем строки с нашей разметкой

// откатываем нашу разметку, что бы другие библиотеки могла назначить ее заново
setdef cj_sprintf_argTyp_User = 
синтаксис разметки будет описан позже
типы, на которые намекнете нам вы возможно будут добавленны в новую версию. ах да, может вам нужны еще какие либо перегруженные native функции?

Отредактировано ADOLF, 31.08.2009 в 12:36.
Старый 29.08.2009, 15:11
ScorpioT1000
Работаем
online
Опыт: отключен
жжоте, а самому такие либы писать ?
Старый 29.08.2009, 15:21
adic3x

offline
Опыт: 108,439
Активность:
т.е. самому?
ну вся разметка написанна в одном .j, единственное, что вы не обойдете - символ ^, y он вшит в программу
Старый 29.08.2009, 15:27
ScorpioT1000
Работаем
online
Опыт: отключен
как я могу это использовать?
включите библиотеку в код карты
include "cj_print.j"
чтоб свою написать .j и также инклюдить, причем былобы круто если сначала импортнуть в карту его)
ScorpioT1000 добавил:
и да, почему не "include", а не "#include"?
Старый 29.08.2009, 15:31
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
почему не "include", а не "#include"?
Мы с адиком это уже обговаривали и он был не против добавить решетку. Просто надо ему об этом напомнить =)
А вообще --- чтобы не отличалось от синтаксиса jass, как я понимаю. Лучше если будет понимать и так, и так
чтоб свою написать .j и также инклюдить, причем былобы круто если сначала импортнуть в карту его)
инклюдить можно что угодно, лишь бы оно лежало где надо. Смысла занимать место в карте лишним j файлом я не вижу --- все равно этот код добавляется в war3map.j
Старый 29.08.2009, 16:46
Toadcop

offline
Опыт: 54,313
Активность:
Цитата:
что это?
O_O


Цитата:
символ ^, y он вшит в программу
даёш конфиг ? нет ? тул сак !

вообще не серьёзно построен парсер надо было делать всё кастумайзибельным.
1) ускоряет парсинг
2) уменьшает кол потенцыальных проблем
3) даёт возможность настроить всё под надобности юзера (адвансед)
Старый 29.08.2009, 17:55
adic3x

offline
Опыт: 108,439
Активность:
причем былобы круто если сначала импортнуть в карту его)
а, понял о чем ты. нет, мне многие говорили что .дж надо импортить в карту, но потом когда пробавали наш инклюд оставались довольны
и он был не против добавить решетку
хм, мы вообще говорили о ифдефах, но можно и тут (кста для них я синтаксис придумал)
даёш конфиг ? нет ? тул сак !
возми перекомпиль тулу) ну вообще это как бы системный символ, остальное конфигиться
  1. ускоряет парсинг
  2. уменьшает кол потенцыальных проблем
  3. даёт возможность настроить всё под надобности юзера (адвансед)
это как бы все есть, в большей или меньшей степени
Старый 29.08.2009, 19:59
ZeToX2007

offline
Опыт: 7,009
Активность:
Такс... надо добавить, чтобы выводилось, хп в процентом соотношении, и от количество менялся цвет, вот пример

void HZ () {
printf ("^HZ %hp"\
GetUnitStatePercent(U, UNIT_STATE_LIFE, UNIT_STATE_MAX_LIFE))
}

Например 100% хп - зеленый
50 % - желтый
30% красный
ниже черный... как то так....

как идейка ?
Старый 29.08.2009, 23:52
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Напиши сам =) Это все добавляется элементарно - редефайном cj_sprintf_argTyp_User
Старый 30.08.2009, 00:21
ZeToX2007

offline
Опыт: 7,009
Активность:
Тут написанно
Цитата:
Сообщение от ADOLF
в версии 1.3.4.0 в AdicParser


А где этот самый 1.3.4.0 в AdicParser ?
Старый 30.08.2009, 00:33
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Как бы там же, где и всегда cjass.xgm.ru/files/?cJassSetup.exe
Старый 30.08.2009, 00:41
ZeToX2007

offline
Опыт: 7,009
Активность:
Скачал ))) Ну блин пародовали )) СУПЕР !

ЗЫ а почему не виден costum script в первой мапе ? О_о

ZeToX2007 добавил:
Такс во первых, попытался сохронить карту, первый раз норм сохронилось, на второй вылетила ошибка на библиотеку =/.

Во вторых не помешал бы
for (i = 5, i < 10, i++) {
функции}

в третих:
i ++ (i = i +1)
i -- (i = i-1)

Отредактировано ShadoW DaemoN, 30.08.2009 в 01:49.
Старый 30.08.2009, 01:22
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
в третих:
i ++ (i = i +1)
i -- (i = i-1)
?
Не пробовал не ставить пробел?
Старый 30.08.2009, 01:31
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
Читай доки, более полного мануала пока еще нету. Инкремент и декремент были одними из первых внедренных фич, так что ты что-то путаешь.
Ошибка может вылететь на include "syn\\cj_types.j" Убери syn\\ и всё заработает. Я сейчас все же оставлю файлы по старым путям для совместимости =)

Отредактировано Van Damm, 30.08.2009 в 01:55.
Старый 30.08.2009, 01:34
ZeToX2007

offline
Опыт: 7,009
Активность:
~Van_Damm, Я уже понял это и убрал ))

ZeToX2007 добавил:
Все вроде ) во всем разобрался...
Старый 30.08.2009, 01:51
Toadcop

offline
Опыт: 54,313
Активность:
Цитата:
это как бы все есть, в большей или меньшей степени

о рли ? шов =О я не видел где можно конфигурировать параметры тулы. ~_~
Старый 30.08.2009, 02:20
adic3x

offline
Опыт: 108,439
Активность:
я не видел где можно конфигурировать параметры тулы.
какие именно параметры? мы сейчас о туле в целом или о библиотеке?
Старый 30.08.2009, 13:39
ScorpioT1000
Работаем
online
Опыт: отключен
да, вжопу хардкод, даешь полный конфиг)
Старый 30.08.2009, 19:10
Van Damm
wait... what?
offline
Опыт: 22,268
Активность:
И скольки человекам кроме тк он понадобится?
Плюс к тому, я пока не вижу, что в него можно написать (ну кроме путей поиска инклюдов как у векса)
Старый 30.08.2009, 19:40
Toadcop

offline
Опыт: 54,313
Активность:
а потом спрашиваете почему я себе свои препроцесоры пишу xD ...
Старый 31.08.2009, 03:31
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 20:38.