21

» WarCraft 3 / Сustomize Editor Categories

К слову, ошибка "Cannot start plugin" выскакивает при изменении любых параметров во вкладке UMSWE.
Загруженные файлы
21

» WarCraft 3 / Сustomize Editor Categories

Почему у меня не вносятся изменения, а выдает ошибку:
А в самом редакторе нет изменений:
Загруженные файлы
21

» WarCraft 3 / Область с формой треугольника

Atesla, ну функция IsAngleBetweenAngles сюда, если я правильно, подходит.
IsAngleBetweenAngles( угол BOK, угол BОС, угол BОD ) and ( DistanceBetweenPoints(точка О, точка К) < SPELL_RADIUS )
Загруженные файлы
21

» WarCraft 3 / Область с формой треугольника

Если конусная способность на подобии тёмной стаи, то можно использовать эту функцию из сайта:
// Возвращает true : Если угол находится между двумя углами
function IsAngleBetweenAngles takes real angle, real angle1, real angle2 returns boolean
    local real x
    set angle = ModuloReal(angle, 360)
    set angle1 = ModuloReal(angle1, 360)
    set angle2 = ModuloReal(angle2, 360)
    if (angle1 > angle2) then
        set x = angle1
        set angle1 = angle2
        set angle2 = x
    endif
    if (angle2 - angle1) > (angle1 - (angle2-360)) then
        set angle2 = angle2 - 360
        if angle > 180 then
            set angle = angle-360
        endif
        return angle >= angle2 and angle <= angle1
    endif
    return (angle >= angle1) and (angle <= angle2)
endfunction
21

» WarCraft 3 / Область с формой треугольника

Можно проверить суммой площадей, если сумма 3-ех треугольников, образованных этой точкой равны площади изначального треугольника, то скорее всего точка принадлежит треугольнику.
Вот еще.
21

» WarCraft 3 / Как знать Id любой абилки которую применил?

//      Convert a integer id value into a 4-letter id code.
function DebugIdInteger2IdString takes integer value returns string
    local string charMap = ".................................!.#$%&'()*+,-./0123456789:;<=>.@ABCDEFGHIJKLMNOPQRSTUVWXYZ[.]^_`abcdefghijklmnopqrstuvwxyz{|}~................................................................................................................................."
    local string result = ""
    local integer remainingValue = value
    local integer charValue
    local integer byteno
    set byteno = 0
    loop
        set charValue = ModuloInteger(remainingValue, 256)
        set remainingValue = remainingValue / 256
        set result = SubString(charMap, charValue, charValue + 1) + result

        set byteno = byteno + 1
        exitwhen byteno == 4
    endloop
    return result
endfunction
Custom Script: call BJDebugMsg("Ability Name: " + GetObjectName(GetSpellAbilityId()))
Custom Script: call BJDebugMsg("Ability Id: " + DebugIdInteger2IdString(GetSpellAbilityId()))
21

» WarCraft 3 / Утечное событие?

Утечка - это когда не удаляются ненужные объекты. Здесь регион нельзя удалять, потому что без него событие не будет работать. Но если у вас много таких событий, то лучше использовать один регион для всех событий, при условии, что размеры региона не будут изменяться в процессе игры, потому что это может нарушить работу других событий, привязанных к данному региону.
А функция TriggerRegisterEnterRectSimple в теории не утечна, но на практике может утекать, например, если в потоке триггера будет вызвано её уничтожение RemoveRegion(GetTriggeringRegion()).
21

» WarCraft 3 / Триггерное количество еды

Нужно добавить struct Food extends array, так не будут создаваться ненужные allocate/deallocate функции, которые здесь не используются.
21

» WarCraft 3 / GetRealId( )

PT153, Я не имел ввиду, что это мемхак, а то что функцию я брал из библиотеки Typecast, которая прилагается к мемхаку.
Чтобы понять это, придётся прочитать всё вышенаписанное.
21

» WarCraft 3 / GetRealId( )

Сделал следующим образом:
раскрыть
	function interface callback takes integer this returns nothing defaults nothing


    struct linkedList

        private static timer    period      = null
        private        real     curTimeout
        private        real     timeout
        private        thistype prev
        private        thistype next
        private        callback handlerFunc


		static constant method operator listPeriod takes nothing returns real
            return 0.01
        endmethod


        method destroy takes nothing returns nothing
            set this.prev.next = this.next
            set this.next.prev = this.prev

            if (thistype(0).next == thistype(0)) then
                call PauseTimer(this.period)
            endif

            call thistype.deallocate(this)
        endmethod


        private static method iterate takes nothing returns nothing
            local thistype this = thistype(0).next

            loop
                exitwhen (this == thistype(0))

                set this.curTimeout = this.curTimeout + thistype.listPeriod

                if (this.curTimeout >= this.timeout) then
                    set this.curTimeout = 0.0
                    call this.handlerFunc.evaluate(integer(this))
                endif

                set this = this.next
            endloop
        endmethod


        static method create takes real timeout, callback handlerFunc returns thistype
            local thistype this = thistype.allocate()

            set this.next        = thistype(0)
            set this.prev        = thistype(0).prev
            set this.next.prev   = this
            set this.prev.next   = this
            set this.timeout     = timeout
            set this.curTimeout  = 0.0
            set this.handlerFunc = handlerFunc

            if (thistype.period == null) then
                set thistype.period = CreateTimerEx()
            endif

            if (this.prev == thistype(0)) then
                call TimerStart(thistype.period, thistype.listPeriod, true, function thistype.iterate)
            endif

            return this
        endmethod


    endstruct
Будет ли это создавать большую нагрузку на игру из-за низкого периода таймера, несмотря на то, что таймер хоть и работает с низкой частотой, он ничего толком то и не делает, кроме арифметических вычислений?
21

» WarCraft 3 / Как сделать первый удар с крита?

easypeasy, Cобытие "Юнит атакован" срабатывает в момент начала атаки, а не в момент получения удара. А будет ли удар критическим или нет, высчитывается еще до начала события "Юнит атакован". В вашем случае удар не критический потому что способность добавляется уже после того, как игра решит, будет ли удар критическим или нет. Поэтому я порекомендовал перезапустить атаку юниту, чтобы новый замах шёл с уже добавленной способностью.
21

» WarCraft 3 / Как сделать первый удар с крита?

PrincePhoenix, ну, я подумал, что временное отключение триггера - это само собой разумеющееся.
21

» WarCraft 3 / Как сделать первый удар с крита?

Нужно отменить атаку, а потом снова дать приказ на атаку.
, когда триггер сработает.
21

» WarCraft 3 / Описание предмета

ssbbssc, не проверял, но думаю, что Ctrl + Enter занимает меньше, т. к. ставится всего лишь один символ.
21

» WarCraft 3 / Jass заклинание Комбо

Нет, не сложно. Всего лишь нужно сохранить копию куда-нибудь и отлавливать касты оригинала, после отлова отдавать такой же приказ на каст, но уже копие.