Спасибо, изучу на досуге. С-синтаксис еще нормально не знаком, прям удивительно, что ошибок не сделал. Единственное- Драгон сказал в аське, что на cjass для обнуления локалок достаточно одной лишь функции
GUI Must Die! v1.1 или Наработки для гуишников v1.1
В новой версии:
Даммикаст на юнита
Даммикаст на точку
Даммикаст без цели
Возможность добавление другого эффекта в "Подбрасывание" (или наоборот, его исключение)
[jass]function GetDistanceBetweenCoords takes real x1, real x2, real y1, real y2 returns real return SquareRoot((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) endfunction
function MoveDummy_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local integer hid = GetHandleId(t) local unit dummy = LoadUnitHandle(udg_Hashtable, hid, 0) local real angle = LoadReal(udg_Hashtable, hid, 1) local real distance = LoadReal(udg_Hashtable, hid, 2) local real speed = LoadReal(udg_Hashtable, hid, 3) local real d = LoadReal(udg_Hashtable, hid, 4) local real x = GetWidgetX(dummy) + speed * Cos(angle) local real y = GetWidgetY(dummy) + speed * Sin(angle) if d >= distance then if LoadBoolean(udg_Hashtable, hid, 5) then call RemoveUnit(dummy) else call PauseUnit(dummy, false) endif call FlushChildHashtable(udg_Hashtable, hid) call PauseTimer(t) call DestroyTimer(t) else call SetUnitPosition(dummy, x, y) call SaveReal(udg_Hashtable, hid, 4, d + speed) endif set dummy = null set t = null endfunction
function MoveDummy takes unit dummy, real distance, real speed, boolean remove returns nothing local timer t = CreateTimer() local integer hid = GetHandleId(t) local unit caster = GetTriggerUnit() local real angle = Atan2(GetSpellTargetY() - GetWidgetY(caster), GetSpellTargetX() - GetWidgetX(caster)) call SaveAgentHandle(udg_Hashtable, hid, 0, dummy) call SaveReal(udg_Hashtable, hid, 1, angle) call SaveReal(udg_Hashtable, hid, 2, distance) call SaveReal(udg_Hashtable, hid, 3, speed) call SaveBoolean(udg_Hashtable, hid, 5, remove) call PauseUnit(dummy, true) call TimerStart(t, .04, true, function MoveDummy_Timer) set caster = null set t = null endfunction
function MoveDummyToTarget takes unit dummy, real speed, boolean remove returns nothing local timer t = CreateTimer() local integer hid = GetHandleId(t) local unit caster = GetTriggerUnit() local real angle = Atan2(GetSpellTargetY() - GetWidgetY(caster), GetSpellTargetX() - GetWidgetX(caster)) call SaveAgentHandle(udg_Hashtable, hid, 0, dummy) call SaveReal(udg_Hashtable, hid, 1, angle) call SaveReal(udg_Hashtable, hid, 2, GetDistanceBetweenCoords(GetSpellTargetX(), GetWidgetX(caster), GetSpellTargetY(), GetWidgetY(caster))) call SaveReal(udg_Hashtable, hid, 3, speed) call SaveBoolean(udg_Hashtable, hid, 5, remove) call PauseUnit(dummy, true) call TimerStart(t, .04, true, function MoveDummy_Timer) set caster = null set t = null endfunction
function TossUnit_Timer takes nothing returns nothing local timer t = GetExpiredTimer() local integer hid = GetHandleId(t) local unit u = LoadUnitHandle(udg_Hashtable, hid, 0) local real angle = LoadReal(udg_Hashtable, hid, 1) local real distance = LoadReal(udg_Hashtable, hid, 2) local real d = LoadReal(udg_Hashtable, hid, 3) local real z = LoadReal(udg_Hashtable, hid, 5) local real x = GetWidgetX(u) local real y = GetWidgetY(u) if d <= distance / 2 then set x = x + 10. * Cos(angle) set y = y + 10. * Sin(angle) set z = z + 25. call SetUnitPosition(u, x, y) call SetUnitFlyHeight(u, z, 0.) else set x = x + 10. * Cos(angle) set y = y + 10. * Sin(angle) set z = z - 25. call SetUnitPosition(u, x, y) call SetUnitFlyHeight(u, z, 0.) endif call SaveReal(udg_Hashtable, hid, 3, d + 10.) call SaveReal(udg_Hashtable, hid, 5, z) if z <= 0. then if HaveSavedString(udg_Hashtable, hid, 6) then call DestroyEffect(AddSpecialEffect(LoadStr(udg_Hashtable, hid, 6), x, y)) endif call PauseTimer(t) call DestroyTimer(t) call PauseUnit(u, false) call FlushChildHashtable(udg_Hashtable, hid) endif set u = null set t = null endfunction
function TossUnit takes unit u, real distance, string eff returns nothing local timer t = CreateTimer() local integer hid = GetHandleId(t) local unit caster = GetTriggerUnit() local real angle = Atan2(GetSpellTargetY() - GetWidgetY(caster), GetSpellTargetX() - GetWidgetX(caster)) call SaveAgentHandle(udg_Hashtable, hid, 0, u) call SaveReal(udg_Hashtable, hid, 1, angle) call SaveReal(udg_Hashtable, hid, 2, distance) call SaveReal(udg_Hashtable, hid, 3, 10.) call SaveStr(udg_Hashtable, hid, 6, eff) if UnitAddAbility(u, 'Amrf') then call UnitRemoveAbility(u, 'Amrf') endif call PauseUnit(u, true) call TimerStart(t, .01, true, function TossUnit_Timer) set caster = null set t = null endfunction
function TossUnitToTarget takes unit u, string eff returns nothing local timer t = CreateTimer() local integer hid = GetHandleId(t) local unit caster = GetTriggerUnit() local real angle = Atan2(GetSpellTargetY() - GetWidgetY(caster), GetSpellTargetX() - GetWidgetX(caster)) call SaveAgentHandle(udg_Hashtable, hid, 0, u) call SaveReal(udg_Hashtable, hid, 1, angle) call SaveReal(udg_Hashtable, hid, 2, GetDistanceBetweenCoords(GetSpellTargetX(), GetWidgetX(caster), GetSpellTargetY(), GetWidgetY(caster))) call SaveReal(udg_Hashtable, hid, 3, 10.) call SaveStr(udg_Hashtable, hid, 6, eff) if UnitAddAbility(u, 'Amrf') then call UnitRemoveAbility(u, 'Amrf') endif call PauseUnit(u, true) call TimerStart(t, .01, true, function TossUnit_Timer) set caster = null set t = null endfunction
function DummycastToTarget takes unit caster, integer utype, integer atype, integer lvl, unit target, string order returns nothing local unit dummy = CreateUnit(GetOwningPlayer(caster), utype, GetWidgetX(caster), GetWidgetY(caster), 0.) call UnitAddAbility(dummy, atype) call IssueTargetOrderById(dummy, OrderId(order), target) call UnitApplyTimedLife(dummy, 'BTLF', .76) set dummy = null endfunction
function DummycastNoTarget takes unit caster, integer utype, integer atype, integer lvl, string order returns nothing local unit dummy = CreateUnit(GetOwningPlayer(caster), utype, GetWidgetX(caster), GetWidgetY(caster), 0.) call UnitAddAbility(dummy, atype) call IssueImmediateOrderById(dummy, OrderId(order)) call UnitApplyTimedLife(dummy, 'BTLF', .76) set dummy = null endfunction
function DummycastToPoint takes unit caster, integer utype, integer atype, integer lvl, location loc, string order returns nothing local unit dummy = CreateUnit(GetOwningPlayer(caster), utype, GetWidgetX(caster), GetWidgetY(caster), 0.) call UnitAddAbility(dummy, atype) call IssuePointOrderById(dummy, OrderId(order), GetLocationX(loc), GetLocationY(loc)) call UnitApplyTimedLife(dummy, 'BTLF', .76) set dummy = null endfunction[/jass]
Итак, дорогие форумчане, объединив усилия, мы (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
[jass]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]
Новая подсветка. Пробелы заменяются на " ", но будьте внимательны при правке - "умный" Укоз их стирает -_-
Сообщение отредактировал Ty3uK - Чт, 29.12.11, 20:59
Драгон, я переписал прошлый скрипт на основе готового подтветчика, поэтому он и похож. Похожесть уберу над зинком ломаю голову- пока скрипт тащит его как коммент. Ну и офк тупой укоз, который не принимает пробелы и табуляцию в чистом виде. Пляшу с бубном
Ориентируемся на два одинаковых последних GeForce в SLI. Беспроигрышный вариант
Добавлено (31.12.11, 11:59) --------------------------------------------- Кстати говоря, тащабельность видеокарты меряется не только играми. Рендер 3д и воспроизведение High Definition (HD) видео могут дать лоснуть тунца многим игровым видеокартам
Добавлено (31.12.11, 12:08) --------------------------------------------- А вообще, мое имхо, сформированное за лет 5- круче радеон 9600 ати (теперь уже амд) еще ничего не сделали