Пожалуйста, напишите мне на джассе функцию разрушения деревьев в радиусе, типа
KillDestr(x,y,radius)
Умоляю. (уверен, для шарящих это 5 мин)
Я попытался, не получилось:

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

vJass
library TreeDestroyerSystem initializer Init
    globals
        private constant integer DummyID='dumy'
        private constant integer AbilityID='Ahar'
        private constant integer OrderID=852018

        private unit Dummy=null
        private real AoE=.0
        private real X=.0
        private real Y=.0
    endglobals

    private function Filtering takes nothing returns boolean
        local destructable d=GetFilterDestructable()
        local real x=GetDestructableX(d)-X
        local real y=GetDestructableY(d)-Y
        local real r=SquareRoot(x*x+y*y)
        if(GetWidgetLife(d)>.405 and r<=AoE and IssueTargetOrderById(Dummy,OrderID,d) and IssueImmediateOrderById(Dummy, 851972))then// and GetUnitCurrentOrder(Dummy)==OrderID
            call KillDestructable(d)
        endif
        set d=null
        return false
    endfunction

    function TreeDestroyerSystem takes real x,real y,real a returns boolean
        local rect r=Rect(x-a,y-a,x+a,y+a)
        local boolexpr b=Filter(function Filtering)
        set AoE=a
        set X=x
        set Y=y
        call EnumDestructablesInRect(r,b,null)
        call DestroyBoolExpr(b)
        call RemoveRect(r)
        set b=null
        set r=null
        set AoE=.0
        set X=.0
        set Y=.0
        return false
    endfunction

    private function Init takes nothing returns nothing
        set Dummy=CreateUnit(Player(15),DummyID,.0,.0,.0)
        call UnitAddAbility(Dummy,'Aloc')
        call UnitAddAbility(Dummy,AbilityID)
        call ShowUnit(Dummy,false)
    endfunction
endlibrary
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
32
1 год назад
1
Было очень лень писать, поэтому скопировал из доты, т.к колупал её код:

function RJI takes destructable d returns boolean // проверка что дестрактабл является деревом.
  return GetDestructableTypeId(d)=='NTtc' or GetDestructableTypeId(d)=='NTtw' or GetDestructableTypeId(d)=='ATtr' or GetDestructableTypeId(d)=='B002' or GetDestructableTypeId(d)=='B003' or GetDestructableTypeId(d)=='B005'
endfunction

function N1I takes nothing returns boolean
  return true
endfunction

function URI takes nothing returns nothing
  if RJI(GetEnumDestructable())and IsDestructableAliveBJ(GetEnumDestructable())then // дерево и живое?
    set NJ=NJ+1
    call KillDestructable(GetEnumDestructable())
  endif
endfunction

function UPI takes real x,real y,real d returns integer
  local rect r=Rect(x-d,y-d,x+d,y+d)
  set NJ=0
  call EnumDestructablesInRect(r,Condition(function N1I),function URI)
  call RemoveRect(r)
  set r=null
  return NJ
endfunction
Код конечно написан так себе, но в доте работал.
0
2
1 год назад
0
quq_CCCP:
Там используются переменные, к прим. NJ, которых нет. Их создания тоже нет, приставки udg_ нет - значит это не глобалки.
Не работает крч
2
4
1 год назад
Отредактирован DazzleFirst
2
vJass
library TreeDestroyerSystem initializer Init
    globals
        private constant integer DummyID='dumy'
        private constant integer AbilityID='Ahar'
        private constant integer OrderID=852018

        private unit Dummy=null
        private real AoE=.0
        private real X=.0
        private real Y=.0
    endglobals

    private function Filtering takes nothing returns boolean
        local destructable d=GetFilterDestructable()
        local real x=GetDestructableX(d)-X
        local real y=GetDestructableY(d)-Y
        local real r=SquareRoot(x*x+y*y)
        if(GetWidgetLife(d)>.405 and r<=AoE and IssueTargetOrderById(Dummy,OrderID,d) and IssueImmediateOrderById(Dummy, 851972))then// and GetUnitCurrentOrder(Dummy)==OrderID
            call KillDestructable(d)
        endif
        set d=null
        return false
    endfunction

    function TreeDestroyerSystem takes real x,real y,real a returns boolean
        local rect r=Rect(x-a,y-a,x+a,y+a)
        local boolexpr b=Filter(function Filtering)
        set AoE=a
        set X=x
        set Y=y
        call EnumDestructablesInRect(r,b,null)
        call DestroyBoolExpr(b)
        call RemoveRect(r)
        set b=null
        set r=null
        set AoE=.0
        set X=.0
        set Y=.0
        return false
    endfunction

    private function Init takes nothing returns nothing
        set Dummy=CreateUnit(Player(15),DummyID,.0,.0,.0)
        call UnitAddAbility(Dummy,'Aloc')
        call UnitAddAbility(Dummy,AbilityID)
        call ShowUnit(Dummy,false)
    endfunction
endlibrary
Принятый ответ
0
4
1 год назад
0
Jass
    function TreeDestroyerSystemFilter takes nothing returns boolean
        local destructable d=GetFilterDestructable()
        local real x=GetDestructableX(d)-udg_TreeDestr_X
        local real y=GetDestructableY(d)-udg_TreeDestr_Y
        local real r=SquareRoot(x*x+y*y)
        if(GetWidgetLife(d)>.405 and r<=udg_TreeDestr_R and IssueTargetOrderById(udg_TreeDestr_DUMMY,852018,d) and IssueImmediateOrderById(udg_TreeDestr_DUMMY, 851972))then//852018=="harvest"     851972=="stop"
            call KillDestructable(d)
            set udg_TreeDestr_N=udg_TreeDestr_N+1
        endif
        set d=null
        return false
    endfunction

    function TreeDestroyerSystem takes real x,real y,real r returns integer
        local rect rt=Rect(x-r,y-r,x+r,y+r)
        local boolexpr b=Filter(function TreeDestroyerSystemFilter)
        set udg_TreeDestr_R=r
        set udg_TreeDestr_X=x
        set udg_TreeDestr_Y=y
        set udg_TreeDestr_N=0
        call EnumDestructablesInRect(rt,b,null)
        call DestroyBoolExpr(b)
        call RemoveRect(rt)
        set b=null
        set rt=null
        return udg_TreeDestr_N
    endfunction
    
    function InitTrig_TreeDestrSystem takes nothing returns nothing
        //set gg_trg_TreeDestrSystem=CreateTrigger(  )
        //call TriggerAddAction( gg_trg_TreeDestrSystem, function Trig_TreeDestrSystem_Actions)
        set udg_TreeDestr_DUMMY=CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE),'uloc',.0,.0,.0)
        call UnitAddAbility(udg_TreeDestr_DUMMY,'Ahar')
        call ShowUnit(udg_TreeDestr_DUMMY,false)
    endfunction
Загруженные файлы
0
2
1 год назад
0
DazzleFirst:
<3<3<3
Чтобы оставить комментарий, пожалуйста, войдите на сайт.