Добавлен
не могу найти на гуй GetlocationZ где он находится?

Принятый ответ

Ельнур, в GUI нет аналога функции GetLocationZ()
Поэтому пользуйся вставкой Custom Scriptов
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
19
4 года назад
2
Похожие вопросы:

ответ
ssbbssc, похоже, много читать придётся. Раз такие вопросы.
ответ
nvc123:
Bornikkeny, сделал специально чтобы доказать тебе что ты несёшь бред
даже 2 скрина приложил
думаю закинуть библиотеки сможешь сам (в папку *твой jngp*\AdicHelper\lib)
Хорошо группы реализуешь как альтернативу unit[array]. Я тоже самое получил.
nvc123, и всё же твой хук не тот что мне нужен.
Я решил проблему, спасибо что дал идею обрабатывать движение внутри структуры, а не в стеке.
кот
library Hook initializer Init_Hook uses LibMath

globals
    mhook   ahook[100]
    integer ihook = -1
endglobals
    
struct mhook
        unit       host = null
        unit       target = null
        real       face = 0
        real       speed = 0
        real       dis = 0
        real       dismax = 0
        integer    chaini = 0
        unit       chain[50]
        real       scale = 0
        integer    move = 1
        integer    i = 0
		
		
        static method Create takes unit host, real tx, real ty, real scale returns mhook
        local mhook h = mhook.create()
        local integer i = GetPlayerId(GetOwningPlayer(host))
        local real x = GetUnitX(host)
        local real y = GetUnitY(host)
        local real f = GetAngleXY(x,y,tx,ty)
            set h.host = host
            set h.face = f
            set h.speed = 600
            set h.dismax = 1400
            set h.scale = scale
            set h.chain[0] = CreateUnit(Player(i),'h007',GetPolarX(GetUnitX(host),f,h.scale/2),GetPolarY(GetUnitY(host),f,h.scale/2),f)
            set h.i = i
            call UnitAddAbility(h.chain[0],'Amrf')
            call UnitAddAbility(h.chain[0],'Amrf')
            call SetUnitFlyHeight(h.chain[0],50,0)
            call SetUnitPathing(h.chain[0],false)
            return h
        endmethod
        
        method Start takes nothing returns boolean
            if ihook < 1000 then  
                set ihook = ihook + 1
                set ahook[ihook] = this
                return true
            else
                return false
            endif
        endmethod
        
        method Destroy takes nothing returns nothing
        local integer i = 0
            loop
            exitwhen i > ihook
                if ahook[i] == this then
                    set ahook[i] = ahook[ihook]
                    set ahook[ihook] = 0
                    set ihook = ihook - 1
                    set i = ihook // выход из цикла
                endif
            set i = i + 1
            endloop
            set this.target = null
            set this.host = null
            call this.destroy()
        endmethod
        
        method Move takes nothing returns nothing
        local integer i1 = 0
        local integer l = 0
        local real x
        local real y
        local real xh
        local real yh
        local real f
            if move == 1
                set dis = dis + speed*0.025
                loop
                 exitwhen i1 > .chaini
                    set x = GetUnitX(.chain[i1])
                    set y = GetUnitY(.chain[i1])
                    if i1 > 0 then
                        set f = GetAngleXY(x,y,GetUnitX(.chain[i1-1]),GetUnitY(.chain[i1-1]))
                        call SetUnitX(.chain[i1],GetPolarX(x,f,.speed*0.025))
                        call SetUnitY(.chain[i1],GetPolarY(y,f,.speed*0.025))
                    else    
                        set f = face
                        call SetUnitX(chain[i1],GetPolarX(x,f,.speed*0.025))
                        call SetUnitY(chain[i1],GetPolarY(y,f,.speed*0.025))
                    endif
                    call SetUnitFacing(chain[i1],f)
                 set i1 = i1 + 1
                endloop
                set x = GetUnitX(chain[chaini])
                set y = GetUnitY(chain[chaini])
                set f = GetAngleXY(GetUnitX(.host),GetUnitY(.host),x,y)
                set xh = GetPolarX(GetUnitX(.host),f,.scale/2)
                set yh = GetPolarY(GetUnitY(.host),f,.scale/2)
                //Create==================
                
                if GetDisXY(xh,yh,x,y) >= .scale/2 then
                    set chaini = chaini + 1
                    set chain[chaini] = CreateUnit(Player(.i),'h007',xh,yh,f)
                    call UnitAddAbility(.chain[.chaini],'Amrf')
                    call UnitAddAbility(.chain[.chaini],'Amrf')
                    call SetUnitFlyHeight(.chain[.chaini],50,0)
                endif
                if dis > dismax then
                    set move = 0
                endif
            else
                //REVERSE=============
                set xh = GetUnitX(host)
                set yh = GetUnitY(host)
                set chain[chaini+1] = host
                loop
                exitwhen l > chaini
                        set x = GetUnitX(chain[l])
                        set y = GetUnitY(chain[l])
                        //if chain[chaini] == null then
                        //    set f = GetAngleXY()
                        //endif
                        set f = GetAngleXY(x,y,GetUnitX(chain[l+1]),GetUnitY(chain[l+1]))
                        call SetUnitX(chain[l],GetPolarX(x,f,speed*0.025))
                        call SetUnitY(chain[l],GetPolarY(y,f,speed*0.025))
                        call SetUnitFacing(chain[l],f-180)
                set l = l + 1
                endloop
                //Destroy==================
                set x = GetUnitX(chain[chaini])
                set y = GetUnitY(chain[chaini])
                set xh = GetUnitX(host)
                set yh = GetUnitY(host)
                if GetDisXY(GetUnitX(chain[chaini]),GetUnitY(chain[chaini]),GetUnitX(host),GetUnitY(host)) < 100 then
                    call RemoveUnit(chain[chaini])
                    set chain[chaini] = null
                    set chaini = chaini - 1
                    if chaini == -1 then
                        call .Destroy()
                    endif
                endif
            endif
        endmethod
        
endstruct

private function Engine takes nothing returns nothing
local integer i = 0
local mhook h
local group g
local unit t 
    loop
    exitwhen i > ihook
        if ahook[i] != 0 then
            set h = ahook[i]
            //--run--//
            call h.Move()
        else
            set ahook[i] = ahook[ihook]
            set ahook[ihook] = 0
            set ihook = ihook - 1
            set i = i - 1 
        endif
    set i = i + 1
    endloop
    //call DestroyGroup(g)
    set g = null
    set t = null
endfunction

function Trig_HookC_Bool takes nothing returns boolean
    if GetSpellAbilityId() == 'A01D' then //Способность Мясной хук
        return true
    else
        return false
    endif
endfunction

function Trig_HookC_Actions takes nothing returns nothing
local mhook h
    set h = mhook.Create(GetSpellAbilityUnit(),GetSpellTargetX(),GetSpellTargetY(),110)
    call h.Start()
endfunction

function Init_Hook takes nothing returns nothing
local trigger t = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddAction( t, function Trig_HookC_Actions )
    call TriggerAddCondition(t,function Trig_HookC_Bool)
    call TimerStart(CreateTimer(),0.025,true,function Engine)
endfunction

endlibrary
ответ
Всё, разобрался, вопрос снимаю)
ответ
Игра дает не всегда точное значение высоты.
Высоты чего? Ландшафта? Или юнита? Летающего юнита?
Пока лучше используй наземных даммиков, ибо с летающими пока все запущено.
Возможно, в новом патче пофиксят. Если он вообще будет...
ответ
Локейшены нельзя двигать локально, глобальный хендл. Двигай для всех и бери высоту для всех, ибо глобал параметры.

0
16
4 года назад
Отредактирован Drulia_san
0
Что, какой Z у локации? Варкрафт это двухмерное пространство событий, у юнитов только высота полета разве что есть как вертикальная ось и то она ни на что не влияет. И вообще на lua переходи
0
7
4 года назад
0
Drulia_san:
Что, какой Z у локации? Варкрафт это двухмерное пространство событий, у юнитов только высота полета разве что есть как вертикальная ось и то она ни на что не влияет. И вообще на lua переходи
да тут джасс код стоит GetLocationZ(point)
я хочу ее перевести в гуй что бы мне понятно было

нашел только position z of unit думаю это она и есть
2
26
4 года назад
2
Ельнур, в GUI нет аналога функции GetLocationZ()
Поэтому пользуйся вставкой Custom Scriptов
Принятый ответ
0
7
4 года назад
0
может просто вместо этого ставить terrain cliff? они почти одинакуово работают

может просто вместо этого ставить terrain cliff? они почти одинакуово работают
может просто вместо этого ставить terrain cliff? они почти одинакуово работают

Extremator:
Ельнур, в GUI нет аналога функции GetLocationZ()
Поэтому пользуйся вставкой Custom Scriptов
может просто вместо этого ставить terrain cliff? они почти одинакуово работают

-------- Устанавливаем переменную loc как положение Героя --------
-------- Устанавливаем переменную loc2 как положение точки за Героем на расстоянии 400 --------
-------- Устанавливаем переменную HeroZ как высоту Героя. --------
-------- Высота камеры задается локальной переменной HeroZ.Изминить её можно например set HeroZ = GetLocationZ(loc) + 10 --------
-------- Устанавливаем высоту камеры как HeroZ. --------
-------- Если позади героя гора, то камера должна пройти через гору, но условием ниже исправляем это --------
-------- Если ( ( (высота точки за героем на расстоянии 400) - (высота героя) ) > 200 ) --------
я вместо GetLocationZ использовал
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Если - Условия
((Terrain cliff level at loc2[(Integer A)]) - (Terrain cliff level at loc[(Integer A)])) больше 200
То - Действия
-------- Если да то установить угол атаки камеры как -50 --------
Камера - Set (Player((Integer A)))'s camera Угол атаки to -50.00 over 0.25 seconds
Иначе - Действия
думаю одинаково будет работать

короче коротко вот, чувствуется разница 1 скрин это GetLocationZ
, а 2 скрин это terrain cliff level
как изменить на гуй чтобы было как в 1 скрине?
Загруженные файлы
0
17
4 года назад
0
Какая причина не использовать Custom Script вставку?
5
32
4 года назад
5
GetLocalPlayer:
Какая причина не использовать Custom Script вставку?
Умышленный дауншифтинг, не желание развиваться и изучать нормальные системы, а потом скажут мне что это бред, и человек не использует 10% возможности, системы
Под словом система я подразумеваю : код + редактор + мозг
1
17
4 года назад
1
Bergi_Bear, а что, нормально обсирать человека вместо того, чтобы помочь ему?
3
24
4 года назад
3
Vlod, имхо, этот конкретный человек вполне заслужил такое отношение
0
32
4 года назад
0
Vlod, нет не нормально, мне очень стыдно и совестно, но я и так сдерживаюсь еле еле
4
29
4 года назад
4
Холивар по поводу админской лычки объявляется открытым
а что, нормально обсирать человека вместо того, чтобы помочь ему?
В чём по вашему состоит обсирать? Когда человек занимается фигнёй и задаёт тупые вопросы, это нормально, а когда получает ответ в стиле "читай статьи, переходи на lua" то сразу находится защитники, которые предлагают всем потратить свое время на реализацию бесполезной фигни.
0
7
4 года назад
0
ладно так и быть ничего не нашел лучше сделаю через кс
Чтобы оставить комментарий, пожалуйста, войдите на сайт.