20

» WarCraft 3 / Нужна модель? - Вам сюда!

Модель LightningSpear.mdl имеет внутри Particle Emitter первого типа, который должен источать модель purgeeffect.mdl , но не делает этого. Источаемая модель корректно отображается в игре -> скорее всего дело не в ней. Прошу оказать содействие в настройке этого эмиттера.
Загруженные файлы
20

» WarCraft 3 / vJass вопрос меньше чем новичок

Фишка вжасса в том, что он позволяет определять глобалки в любой части кода(но при компиляции эти глобалки будут помещены просто поверх размещенных в первом блоке). БОльшая часть действий в триггерах вц3 синхронизируется. Если происходит действие в игре - оно происходит на компах всех игроков -> действия повторяются. Можно через GetLocalPlayer() определять переменные для конкретного игрока, но, если не уметь этим пользоваться, можно быстро словить десинк в мультиплеере.
20

» WarCraft 3 / Желтый квадрат

Ну иконку древесины можно заменить в настройках интерфейса и импортом картинки с указанием пути равному пути иконки древесины. Триггеры на это не способны нативно.
20

» WarCraft 3 / Хак на память Warcraft3

Работает ли ожидаемо-стандартно функция:
function DisableUnitControl
?
Конкретно: будет ли он юнит искать цели для атаки, если его текущий приказ - атаковать на точку/удерживает позицию/простаивает?
Думаю расшарить контроль неуправляемого союзного бота для визуальной индикации создаваемого при спецэффичных обстоятельствах героя под контролем для этого бота. При этом лишать всех юнитов контроля при помощи упомянутой функции, дабы оставить лишь иконку этого героя как результат шары контроля. (ИИ все-равно триггерный)
Можно ли отдавать юниту приказы через ПКМ?(будет полностью игнорироваться или будет эффект как при добавлении непрерываемого флага через руну морфа(можно отдавать приказы, но юнит будет их игнорировать)?)
20

» WarCraft 3 / Как лучше реализовывать распределенные по всему AoE спецэффекты

кастуй даммиком
огонь катапульт у орков
Не уверен что в моей голове есть верная трактовка такого действия... Это же пассивный скилл, модифицирующий атаку, нет?
Так же существуют модельки горелой земли разного размера (есть в доте для всяких метеоритов и думов) а так же на хайве (видел модель текущей лавы с огоньками)
Ну мне нужно именно создание кучи мелких спецэффектов, так что....
20

» WarCraft 3 / Как сделать механику как у древа

Goroshek:
а можно ли как нибудь такую модель сделать ?
Да. Статьи вроде этой тебе в помощь.
20

» WarCraft 3 / Хак на память Warcraft3

Может ли возвращаться значение <= 0 если юнит гарантированно жив и имеет способность, с которой ведется работа?
20

» WarCraft 3 / Хак на память Warcraft3

Предыдущий вопрос решился формулой
	I2R( R2I( current_speed_taken_from_memory_and_converted_into_real + speed_bonus + 0.5 ) ) * 0.0001
Новый трабл:
Что возвращает GetUnitAbility(whichUnit, abilityId)? Логично предположить что адрес, но в ближайшие 24 часа протестить руки не дойдут.
20

» WarCraft 3 / Реализация округления флоата в условиях вц3

Действительно, запамятовал я про +0.5. Все заработало как надо. Пока что... :)
Треп не по делу
    int M_Round(int number) {
        if (number > 0) {
            return R2I(number + 0.5);
        }
        if (number < 0) {
            return R2I(number - 0.5);
        }
        return 0;
    }
Ятп ты передаешь инт и округляешь его до самого себя?
20

» WarCraft 3 / Реализация округления флоата в условиях вц3

Гораздо более стабильный результат дают вычисления между преобразованными в интегеры флоатами(R2I(r*10^8)), правда погрешность все-равно появляется когда наступает время умножать на 10^-8. Использование степени меньшей, чем 8я, увеличивает погрешность. Использование непосредственно восьмой степени, судя по тестам, исключает наращивание погрешности(небольшая погрешность появляется после упомянутого умножения на 10^-8)
Только вот этот метод не подходит.
20

» WarCraft 3 / Хак на память Warcraft3

quq_CCCP:
Diaboliko, ну а бонус это тоже дистанция. Там наверняка деление на тик таймера и проверка на мин. значение
Я не понимаю куда ты клонишь. Бонус - аддитивно стакающаяся величина, даваемая тем же Безумием или Аурой Выносливости.
Код, которым пытался вычислить число знаков после запятой самого бонуса
globals
    constant real arginc = 0.10001
    constant real argexit = 0.90009
endglobals

function xxx takes nothing returns boolean
    local real r
        set  r = arginc
        loop
            exitwhen r == argexit
            call AddUnitMSBonus(gg_unit_uaco_0002, r)
            set  r = r + arginc
        endloop
        set  r = -arginc
        loop
            exitwhen r == -argexit
            call AddUnitMSBonus(gg_unit_uaco_0002, r)
            set  r = r -arginc
        endloop
    return false
endfunction

function Trig_zxcxc_Actions takes nothing returns nothing
    local real r
    local integer i = 0
    local trigger t = CreateTrigger()
        call TriggerAddCondition( t, Condition(function xxx))
        call BJDebugMsg(R2S(GetUnitMoveSpeed(gg_unit_uaco_0002)))
        loop
            call TriggerEvaluate(t)
        exitwhen i == 1000
        set  i = i + 1
        endloop
        call BJDebugMsg(R2S(GetUnitMoveSpeed(gg_unit_uaco_0002)))
    set  t = null
    return
endfunction

//===========================================================================
function InitTrig_zxcxc takes nothing returns nothing
    set gg_trg_zxcxc = CreateTrigger()
    call TriggerRegisterTimerEvent( gg_trg_zxcxc, 3., false )
    call TriggerAddAction( gg_trg_zxcxc, function Trig_zxcxc_Actions )
endfunction
Для чисел с N числом знаков после запятой выдал следующие значения конечного MS(начальный = 220)
8 (0.10000001) - 219.475
7 (0.1000001) - 219.685
6 (0.100001) - 219.685
5 (0.10001) - 219.475
Как к этому относиться - не представляю.
А протестив на 0.111... и 0.999... получилось
8 - 219.685
7 - 219.685
6 - 219.580
5 - 219.475
4 - 219.475
3 - 219.685
2 - 219.475
1 - 219.475
Так что без округления, по-видимому, не обойтись.
Я ведь верно понимаю что
I2R(R2I(currentBonus * 10^x))*10^-x
корректно "округляет" число до знака x после запятой?
20

» WarCraft 3 / Хак на память Warcraft3

quq_CCCP:
Diaboliko, там же тупо ресстояние за тик таймера, лич его правил на прямую, но тогда юнит начинает бегать во круг точки т.к расстояние за тик таймера слишком большое, юниту кажется что он не может дойти до точки. Там и стоит проверка, до миллионных же никто не будет рассчитывать дистанцию.
Ты путаешь с
function SetUnitCurrentMSper32 takes integer convertedHandle, real r returns nothing
20

» WarCraft 3 / Хак на память Warcraft3

Я тут добрался до
function AddUnitMovespeedBonus takes unit u, real r returns nothing
И обнаружил что этот бонус подвержен погрешности как и прочие вычисления с флоатом. Операции нужно производить с числами определенной точности(хотя мне кажется что 0.0900000 будет воспринято как 0.09) или где-то прячется нативная функция округления MS'а?
20

» WarCraft 3 / Как сделать что бы предмет исчезал по истечению времени?

Как один из вариантов решения:
При создании предмета заносить его в массив предметов. Запись ведется последовательно, пока не достигнется его конец(8192я ячейка массива(exitwhen i = 8191)), после чего вновь начинается с нуля. (в прочем, можно поставить значение и поменьше, от этого будет только лучше(переменная перезапишется раньше -> старая ссылка удалится -> предмет окончательно удалится из памяти если ссылок на него больше нигде нет)).
Ну а каждую секунду инкрементить целочисленные переменные в параллельном массиве от нуля до... времени жизни в секундах, по достижении значения которого удалять предмет.
20

» WarCraft 3 / Как отловить оглушение на разных героях

quq_CCCP:
Событие получение урона в 0 ед. и так же проверка на то что цель оглушена ( UNIT_TYPE_STUNNED ).
С тем же успехом можно отлавливать приказ оглушения :>
20

» WarCraft 3 / как создать эффекты по кругу на jass?

Будет нечто вроде
local integer i = 0
local real angle = 0.
		loop
				call DestroyEffect(AddSpecialEffectPos(..., x + cos(r) * offset, y + sin(r) * offset ))
				exitwhen  i == AMOUNT_OF_EFFECTS_MINUS_ONE
				set  r = r + ANGLE_IN_RADIANS
				set  i = i + 1
		endloop
При желании можно обойтись одной переменной
20

» WarCraft 3 / Хак на память Warcraft3

Не припоминаю чтобы кто-то говорил об этом, но дабы AdicParser не крашился, попутно удаляя все комментарии (что приводит к удалению директив pjass) и конфликту с хаком, после "//! nocjass" должна быть хотя бы одна пустая строчка(возможно одна пустая строчка в конце всего юзерского кода, я без понятия.).
Для приложения следующая версия компилится нормально (см. приложение)
Загруженные файлы
20

» WarCraft 3 / Запустит таймер предмета

Если делать нативными костылями - заменяешь этот даггер предметом с аналогичным описанием и иконкой, но невыбрасываемым и имеющим способность на основе безумия(как вариант). Юзаешь его -> ждешь пока закончится кулдаун -> заменяешь обратно
20

» WarCraft 3 / Почему во время анимации не происходит изменение масштаба модели

Как я понимаю - проблема в не заданном начальном состоянии(а может быть и нет, я не уверен). Информация о рескейлинге есть на момент начала анимации(599 кадр), а информация о используемом материале (повороте модели в последствии) появляется только на 600. Вероятно инструкции о том что делать с моделью определяются по ходу требования(а не хранятся в файле самой модели, как я думал) и на основании данных по требуемому кадру. Нельзя так просто взять и вникнуть в mdx формат. А, впрочем, я могу ошибаться.
Сделал анимации не пересекающимися (0-399 "stand", 400-599 "death", 600-799 "birth"), изменение скейла
Scaling 4 {
		Linear,
		400: { 1, 1, 1 },
		599: { 0, 0, 0 },
		600: { 0, 0, 0 },
		799: { 1, 1, 1 },
	}
и ротацию(бывшее изменение текстуры материала) оставил на круглых числах
Rotation 8 {
		DontInterp,
		0: { 0, 0, 0, 1 },
		100: { 1, 0, 0, 0 },
		200: { 0, 1, 0, 0 },
		300: { 1, 0, 0, 0 },
		400: { 0, 0, 0, 1 },
		500: { 1, 0, 0, 0 },
		600: { 0, 1, 0, 0 },
		700: { 1, 0, 0, 0 },
	}
Получилось работоспособно и удобно.
20

» WarCraft 3 / Почему во время анимации не происходит изменение масштаба модели

ledoed:
покопавышись в коде нашол косяк ты анимацию death заканчиваешь на 599 кадре и с этого начинаешь birth
Используемые кадры анимаций не могут пересекаться? Т.е. один кадр использоваться в разных анимациях.
Мой план был задать 3 кадра, между которыми линейно меняется размер. 100% на нулевом, 0% на конец анимации смерти и, соответственно, 0-100 во время анимации Birth. Поэтому Birth шел с 599 до 798.
Для тех, кому лень открывать .mdl файл
Sequences 3 {
	Anim "Stand" {
		Interval { 0, 399 },
		MinimumExtent { -500, -500, -500 },
		MaximumExtent { 500, 500, 500 },
	}
	Anim "Death" {
		Interval { 400, 599 },
		NonLooping,
		MinimumExtent { -500, -500, -500 },
		MaximumExtent { 500, 500, 500 },
	}
	Anim "Birth" {
		Interval { 599, 798 },
		NonLooping,
		MinimumExtent { -500, -500, -500 },
		MaximumExtent { 500, 500, 500 },
	}
}
20

» WarCraft 3 / Почему во время анимации не происходит изменение масштаба модели

ledoed, я убрал однократность у анимации и наблюдал за ней в игре пока не убедился в том, что это не работает :) В War3ME она проигрывается исправно, а вот в игре - нет.
Используется в качестве юнита.
20

» WarCraft 3 / Анимация канала

А что за ин-гейм ситуация вообще? Если юнит кастует что-то как-бы на ходу или несколько скиллов подряд - можно просто ловить приказ на каст... Если нужно чтобы от юнита был нанесен урон какой-то стандартной абилкой - можно прибегнуть к помощи рун, если подойдет, конечно.
20

» WarCraft 3 / Как сделать спелл луч?

Перпендикуляр от отрезка к точке
Находит длину перпендикуляра от отрезка, заданного Xa, Ya, Xb, Yb к точке, заданной Xc, Yc. Полезно при реализации заклинаний типа "Огненная стена", во избежание последовательных пиков юнитов по прямой.
Автор - silumin
function Perpendicular takes real Xa,real Ya,real Xb,real Yb,real Xc,real Yc returns real
    return SquareRoot((Xa - Xc) * (Xa - Xc) + (Ya - Yc) * (Ya - Yc)) * Sin(Atan2(Yc-Ya,Xc-Xa) - Atan2(Yb-Ya,Xb-Xa))
endfunction
Эта формула в сочетании с использованием молний возможно удовлетворит потребности автора.