17

» WarCraft 3 / Молнии

function DLK takes nothing returns nothing
    local integer i
    local timer t = GetExpiredTimer()
    local integer h = GetHandleId(t)
    local lightning l = LoadLightningHandle(udg_GHT,h,1)
    local real r = GetLightningColorR(l)
    local real g = GetLightningColorG(l)
    local real b = GetLightningColorB(l)
    call BJDebugMsg(I2S(i))
    if i <=31 then
    set i = i+1
    set r = r-5
    set g = g-5
    set b = b-5
    call SetLightningColor(l,r,g,b,GetLightningColorA(l))
    call BJDebugMsg(I2S(i))
    else
    call DestroyLightning(l)
    call DestroyTimer(t)
    call FlushChildHashtable(udg_GHT,h)
    endif
    set t = null
    set l = null
endfunction

function DL takes lightning l, real r returns nothing
    local timer t = CreateTimer()
    local integer h = GetHandleId(t)
    call SaveLightningHandle(udg_GHT,h,1,l)
    //call TimerStart(t,r,false,function DLK_old)
    call TimerStart(t,r/30,true,function DLK)
    set t = null
    set l = null
endfunction
Так работать тоже не хочет, думаю что что-то с не так с лупом =-=
17

» WarCraft 3 / Алгоритм для создания круговой области

Попробуй сделать шаблон под 1 квадрат, и используя конкретные х/у, заполнить область:
0 = квадрата нет, 1= он есть
0|1|1|1|0
1|0|1|0|1
1|1|x|1|1
1|0|1|0|1
0|1|1|1|0
Х - это центр, где нет квадрата
возьмём 2 за единицу меры, на основе от неё уже будем считать
т.е. допустим 0:0 - это сам центр твоего круга
квадраты сторонами 2х2
имея это, получаем точки центров квадратов: x:y
-4:4 | -2:4 | 0:4 | 2:4 | 4:4
-4:2 | -2:2 | 0:2 | 2:2 | 4:2
-4:0 | -2:0 | 0:0 | 2:0 | 4:0
-4:-2 | -2:-2 | 0:-2 | 2:-2 | 2:-2
-4:-4 | -2:-4 | 0:-4 | 2:-4 | 4:-4
Берём эти координаты, умножаем единицу например на 20, и получаем круг с квадратами 40х40, и общей площадью 200х200
Дальше лупом расставляешь центры квадратов и создаёшь их. Можешь пронумеровать, типо 1-16, а 17-25 закрасить
В идеале, можешь сделать круги:
1й круг - 1 клетка 1х1
2й круг - 9 клеток 3х3
3й круг - 25 клеток 5х5
4й круг - 49 клеток 7х7
5й круг - 81 клетка 9х9
6й круг - 121 клетка 11х11
7й круг - 169 клеток 13х13
8й круг - 225 клеток 15х15
9й круг - 289 клеток 17х17
10й круг - 361 клетка 19х19
МБ легче будет написать алгоритм центров для этих кругов
например
-38:38| ... | 38:38
...........................
-38:-38| ... | 38:-38
и уже нарисовав один раз полный "круг" из необходимого кол-ва квадратов, уже будет понятно, какие квадраты зашриховывать, а какие нет
Загруженные файлы
17

» WarCraft 3 / УУУУ Функции

quq_CCCP,
ПодEлитесь секретом отлова физ урона через маг резист? xD
...
Решил проблему наитупейшим из возможных способов:
раскрыть
function MDWC takes unit c, unit t, real dmg,real sd, real cc, real cm, string color returns nothing
    local real hp1 
    local real hp2 = GetUnitState(t,UNIT_STATE_LIFE) // <---
    local real dt
	....
	...
	set dmg = DamageCalculatorMagic(dmg,t)
    call UnitDamageTarget(c,t,dmg,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_MAGIC,WEAPON_TYPE_WHOKNOWS)
    set hp1 = GetUnitState(t,UNIT_STATE_LIFE) // <----
    set dt = hp2-hp1 // <--- Вот урон
    call SetTextTagText(ttc,color+I2S(R2I(dt)),16*.0023)
endfunction
Лучшее, что мог придумать мой невыспавшийся мозг, но однако, оно сработало.
Прогресс :3
17

» WarCraft 3 / Анимации

Спасибо
Не то поле менял
Следовать в течении времени = "Касттайм с используемой анимацией"
17

» WarCraft 3 / Не могу найти подходящую ауру

Разрешённые цели - добавляешь "Здания"
Эффект на них работает, но без иконки снизу.
Только что потестил на "Доспехах веры"
17

» WarCraft 3 / Невыделяемость на время

Самое тупое решение - каждые 0.03125 сек сбрасывать выборку любого игрока с этого юнита.
Не очень тупое - сделать 2 одинаковых юнита, одному дав способность москиты, и на время меняя их местами
17

» WarCraft 3 / Не работает

Сергей4,
Перенесите hero = Атакующий до развилки IF/Then/Else
Вы пытаетесь посчитать ловкость от того, кого ещё нет, и уже после прока (которого нет, так как ловкость считывается из воздуха), вы присваиваете hero = атакующий герой.
17

» WarCraft 3 / Исследование и пасивка

Быть может она улучшается, но так как цифры в описаниях стоят одинаковые, то визуально как бы ничего не меняется. Если с активками работает, то просто дай юниту
1й лвл: 100% крит шанс на х1
2й лвл: 100% крит шанс на х2
И отлавливай по значениям. (Дебагер на коленке)
Если работать не будет, то уже лезь в триггерную часть и добавляй всё оттуда
17

» WarCraft 3 / Порченные пни

8gabriel8
Обычно проблемы с ретекстуром решаются обычным перезапуском редактора.
Настройки -> убрать при запуске "создание новой пустой карты" (дабы не подхватывал нормальные текстуры)
Сохранить карту -> Закрыть редактор
Открыть редактор -> Открыть карту
На WEX'е так прокатывает (:
17

» WarCraft 3 / Функция, к-рая по выходу из вара чистит данные скиллов из таблиц

Возможно, до перезапуска Варика, но не компа.
Думаю замечал, что при выходе из некоторых карт вар не просто закрывается, а крашится.
Возможно это вызвано кривым использованием мемхака и прочих ништяков, которые вар определяет как ошибку, не может обработать и в следствии чего крашится.
Думаю что уже в самых глубинах, так что копай в сторону Начала инициализации и Выходе игрока из карты с загрузкой меню
17

» WarCraft 3 / Текстуры склона

Freezeeee:
Надо саму текстуру менять.
Как показывает практика, это не сильно сложно :D
Правда некоторые модельки сами нарезают себе нужные куски, и в итоге обрезают по 2-3 пикселя с каждой стороны, что в целом выглядит не очень:
Хотя со стороны текстуры всё ровно =D
Загруженные файлы
17

» WarCraft 3 / Свечение

Берёшь модельку Светящихся глаз, и прикрепляешь к голове ("head") юнита с помощью триггеров
Насчёт свечения - если я правильно понял, то уже редактировать саму модельку, или же попытаться добавить свечение героя тоже как спецэффект, который будет отображаться под ногами юнита ("origin")
17

» WarCraft 3 / Дефолтные аттачи с кастов

Есть идея - добавлять скрытую пассивку по типу "Боевого марша" на [время действия промахов], действующую на врагов, и через неё вешать эффект черепов над головами
17

» WarCraft 3 / Пара вопросов

Начинает направлять способность - выбирает цель для способности
EVENT_PLAYER_UNIT_SPELL_CHANNEL
Начинает применять способность - Начинается каст абилки.
EVENT_PLAYER_UNIT_SPELL_CAST
Прекращает применение способности - Отменяет каст абилки. (Сбивают как пример)
EVENT_PLAYER_UNIT_SPELL_ENDCAST
Приводит способность в действие - Заканчивает каст абилки. (Происходит эффект(дамаг))
EVENT_PLAYER_UNIT_SPELL_EFFECT
Завершает применение способности - Заканчивает каст абилки. (Заканчивается приказ
EVENT_PLAYER_UNIT_SPELL_FINISH
Если поле "Следовать в течении времени" не равно 0 ( =2 сек например), то сперва идёт
Приводит способность в действие
а после 2х секунд -
Завершает применение способности
17

» WarCraft 3 / Навесная траэктория

У меня в голову приходит только одна идея реализации - сделать даммиков под героем на каждого юнита, кастовать абилку-пустышку с навесной траэкторией и автонаведением, и путём отлова урона от этого каждого даммика пускать эффект молнии в связанную с ним цель.
Опечаточка вышла
и путём отлова урона от каждого даммика запускать эффект молнии от героя в каждую цель.
Но думаю некритично.
Интересует именно система "Навесного" даммика-снаряда с регулировкой высоты, и если можно - скорости полёта(для одновременного приземления на всех).
И такой вот вопрос:
Есть ли смысл использовать ОДИН тип даммика, для всех эффектов на карте, просто прикрепляя к ним нужный эффект?
17

» WarCraft 3 / Не могу создать систему отлова урона при атаке, событии-Атакован

Naadir:
Первый триггер:
Событие: Юнит вошёл на карту.
Действие: Добавить событие "юнит атакован" во второй триггер.

Второй триггер:
Действие: Если DamageTaken>0
То Написать DamageTaken в чат.



Ну как-то так в двух словах.
Событие - Конкретный юнит получает урон.( НЕ атакован! - ибо отлавливается в момент отдачи приказа атаковать, и может быть забагано простым застопыванием )
Дальше конвертируешь это в текст, и заменяешь Конкретного юнита на глобалку, или на юнита, стоящего на карте (если это даммик, и нужна инфа по всему урону)
Вот мой отлавлятор:
function t2a takes nothing returns nothing
    local unit u = GetEventDamageSource() // Кто нанёс урон (имя)
    local real r = GetEventDamage() // Сколько урона
    call BJDebugMsg(GetUnitName(u)+" = Attacker") // Отображение игроку
    call BJDebugMsg(R2S(r)+" = Damage") // Отображение игроку
endfunction

//===========================================================================
function InitTrig_t2 takes nothing returns nothing
    local unit u = gg_unit_H000_0000 // Вот наш юнит, можешь заменить на глобалку
    set gg_trg_t2 = CreateTrigger()
    call TriggerRegisterUnitEvent(gg_trg_t2,u,EVENT_UNIT_DAMAGED) //Юнит продамажен
    call TriggerAddAction( gg_trg_t2, function t2a )
endfunction
Можешь добавить по типу атакованного юнита (Отображать только боссов/хероев/крипов), или по имеющейся у Атакующего конкретной абилки
...
Пропала кнопочка "Редактировать"
Случайно удалил кусок оптимизации:
function t2a takes nothing returns nothing
    local unit u = GetEventDamageSource() // Кто нанёс урон (имя)
    local real r = GetEventDamage() // Сколько урона
    call BJDebugMsg(GetUnitName(u)+" = Attacker") // Отображение игроку
    call BJDebugMsg(R2S(r)+" = Damage") // Отображение игроку
	set u = null  // Это вот должно быть тут
endfunction

//===========================================================================
function InitTrig_t2 takes nothing returns nothing
    local unit u = gg_unit_H000_0000 // Вот наш юнит, можешь заменить на глобалку
    set gg_trg_t2 = CreateTrigger()
    call TriggerRegisterUnitEvent(gg_trg_t2,u,EVENT_UNIT_DAMAGED) //Юнит продамажен
    call TriggerAddAction( gg_trg_t2, function t2a )
endfunction
17

» WarCraft 3 / Сброс перезарядки предмета.

В крайнем случае, сделай пустой спеллбук на предмет, и добавляй туда абилку при подъёме предмета.
При сбросе кд, удаляй эту абилку, и давай заного.
=====================================================================
Функция HideAbility Убирает способность игроку, но при обратном действии возвращает свой кд.
17

» WarCraft 3 / Как вращать юнита вокруг точки?

Под горизонтальной осью подразумевается мифический "Угол крена?"
Решение тупое, но если тебе нужно не сильно много юнитов поворачивать, то используй вот это:
Ставишь галочку в редакторе на использование отрицательных хначений
Копируешь своего юнита, и указываешь разный угол крена
Зажимая Шифт, открываешь поле крена и делая -90, получаешь лежачего юнита
Сек, прикреплю скрины.
Вот начальное:
Вот итог:
А тип юнита можешь заменять триггерно
Либо же, если совсем нужно, то можешь взять юнита и пририсовать ему пару нужных анимаций с нужным углом поворота
17

» WarCraft 3 / Камера показывает не то, что должна

ДаниилОрк,
Замени инициализация карты на "Игровое время - 0.05 секунд" и поставь "Стартовую позицию" в точку камеры, камера после загрузки появляется именно там
Ибо движок вара После инициализации перемещает камеру в Стартовую позицию, а ты перемещаешь её До конца инициализации (при обработке триггеров при загрузке карты)
Как-то так. Воть :3
17

» WarCraft 3 / Рес юнитов

Diaboliko, Вопрос был про косяк с тем, что юниты ресаются мгновенно, а не про получение ценных лекций о пользе чистого джазза и оптимизации.
Задачей этого скрипта было показать, как можно переделать обычный триггер с Wait на скрипт с использованием локалок.
Можно подключить хэш таблицу, чтобы сохранять тип юнита там, но в данный момент нам нужна простота, а не оптимизация.
Думаю что косяк с тем, что GetDyingUnit() проходит сквозь все временные промежутки и вызывается в момент смерти юнита.
17

» WarCraft 3 / Я хз

Стас Орлов, Проблема в том, что Wait может растягиваться до бесконечности, в зависимости от нагрузки. Могу помочь в изучении Jass, ибо легче его выучить и не париться, чем мучаться с гуишными функциями