Итак, дорогие форумчане, объединив усилия, мы (Ty3uK, Simplar, SirNikolas) написали скрипт для подсветки синтаксиса Jass 2, cJass, vJass, ZINC. Итак, вот полный перечень его возможностей:
Подсветка native и BJ функций
Подсветка всех типов, констант, переменных
Цвет подсвеченных единиц идентичен подсветке JNGP
Но, есть и недостатки. Он один:
Удаляются пробелы и табуляция из новых строк
[jass]include "cj_types.j"
function UnitSetPosition takes unit u, real x, real y returns nothing if IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY) == false then call SetUnitX(u, x) call SetUnitY(u, y) endif endfunction
function KnockbackUnit_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local integer hid = GetHandleId(t) local unit knockbacked = LoadUnitHandle(udg_Hashtable, hid, 0) local integer amount = LoadInteger(udg_Hashtable,hid , 1) local real portion = LoadReal(udg_Hashtable, hid, 2) local integer current = LoadInteger(udg_Hashtable, hid, 3) local real angle = LoadReal(udg_Hashtable, hid, 4) local real x = GetWidgetX(knockbacked) + portion * Cos(angle * .017) local real y = GetWidgetY(knockbacked) + portion * Sin(angle * .017) call SaveInteger(udg_Hashtable, hid, 3, current + 1) if current == amount then call FlushChildHashtable(udg_Hashtable, hid) call PauseTimer(t) call DestroyTimer(t) elseif current < amount then call UnitSetPosition(knockbacked, x, y) endif set knockbacked = null set t = null endfunction
function KnockbackUnit takes unit knockbacked, real distance, real time, real degrees, real period returns nothing local timer t = CreateTimer() local integer hid = GetHandleId(t) local integer amount = R2I(time / period) local real portion = distance / amount call SaveAgentHandle(udg_Hashtable, hid, 0, knockbacked) call SaveInteger(udg_Hashtable, hid, 1, amount) call SaveReal(udg_Hashtable, hid, 2, portion) call SaveInteger(udg_Hashtable, hid, 3, 0) call SaveReal(udg_Hashtable, hid, 4, degrees) call TimerStart(t, period, true, function KnockbackUnit_Timer) set t = null endfunction[/jass]
Использование: заключаем текст в коды [jаss][/jаss] (написаны с русской буквой "а" во избежание пустого использования тэга. Нужна англ буква)
Все ошибки, недочеты и предложения сообщайте в эту тему! С наступающим всех!
Simplar aka [DUOS], Maxim Karelov aka Ty3uK and SirNikolas
Сообщение отредактировал Ty3uK - Чт, 29.12.11, 14:17
Ty3uK и SirNikolas были награждены досрочным переносом в группу V.I.P. за помощь в разработке сложного BB-кода. Мы продолжим радовать вас подобными вещами и это ещё не конец обновления Тернокса до 4.1.
Сообщение отредактировал Simplar - Чт, 29.12.11, 14:30
Я считаю, что за написание такого тега, вип- достойная награда. Большое спасибо Русу за это. Я пока обдумываю реализацию тега гуи
Добавлено (06.01.12, 10:11) --------------------------------------------- Итак, подсветка допилена. Все, кто шарит - оцените ее совместную работу со скриптом для textarea. Всем спасибо за внимание
function UnitSetPosition takes unit u, real x, real y returns nothing if IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY) == false then call SetUnitX(u, x) call SetUnitY(u, y) endif endfunction
function KnockbackUnit_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local integer hid = GetHandleId(t) local unit knockbacked = LoadUnitHandle(udg_Hashtable, hid, 0) local integer amount = LoadInteger(udg_Hashtable,hid , 1) local real portion = LoadReal(udg_Hashtable, hid, 2) local integer current = LoadInteger(udg_Hashtable, hid, 3) local real angle = LoadReal(udg_Hashtable, hid, 4) local real x = GetWidgetX(knockbacked) + portion * Cos(angle * .017) local real y = GetWidgetY(knockbacked) + portion * Sin(angle * .017) call SaveInteger(udg_Hashtable, hid, 3, current + 1) if current == amount then call FlushChildHashtable(udg_Hashtable, hid) call PauseTimer(t) call DestroyTimer(t) elseif current < amount then call UnitSetPosition(knockbacked, x, y) endif set knockbacked = null set t = null endfunction
function KnockbackUnit takes unit knockbacked, real distance, real time, real degrees, real period returns nothing local timer t = CreateTimer() local integer hid = GetHandleId(t) local integer amount = R2I(time / period) local real portion = distance / amount call SaveAgentHandle(udg_Hashtable, hid, 0, knockbacked) call SaveInteger(udg_Hashtable, hid, 1, amount) call SaveReal(udg_Hashtable, hid, 2, portion) call SaveInteger(udg_Hashtable, hid, 3, 0) call SaveReal(udg_Hashtable, hid, 4, degrees) call TimerStart(t, period, true, function KnockbackUnit_Timer) set t = null endfunction[/jass] Здесь нажат таб
лол скрипты здесь было нажато ctrl+s, вылетело окошко с моим только что набранным сообщением.
Добавлено (06.01.12, 12:29) --------------------------------------------- эээ, а где мои абзацы и переходы на другие строки??!!