XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
quq_CCCP
Я белый и пушистый!
online
Опыт: 93,279
Активность:
Отказывается работать функция
Собственно функция проверки если в указанной точке блокиратор пути (или прочий разрушаемый объект или нет)...
((код jass
globals
boolean bj_result = false
endglobals
function HasDestructable takes nothing returns nothing
if GetEnumDestructable( ) != null then
set bj_result = false
endif
set bj_result = true
endfunction
function IsPointPathable takes real x, real y returns boolean
local rect r = Rect( x - 50.00, y - 50.00, x + 50.00, y + 50.00 )
call EnumDestructablesInRect( r, null, function HasDestructable )
call RemoveRect( r )
set r = null
return bj_result
endfunction
))
Старый 02.06.2012, 17:38
Msey
????
offline
Опыт: 67,346
Активность:
function HasDestructable takes nothing returns nothing
    if GetEnumDestructable( ) != null then
set bj_result = true // или false.. я хз при каком return должен быть отскок
    endif
endfunction
попробуй так
в твоей ф-ии результат все равно будет true

Отредактировано Msey, 02.06.2012 в 18:16.
Старый 02.06.2012, 17:51
quq_CCCP
Я белый и пушистый!
online
Опыт: 93,279
Активность:
Msey, несколько не понял про локалку, она то ту причём, суть в том что если в области есть декорация, то от ней должен быть рекошет, а этого не происходит, пытаюсь сделать скилл на побобии ульта BladeMaster'а чтобы он крутился и самостоятельно двигался в указанном направлении рекошетил от препятствий.
» недоделанный скилл
((код jass
function Trig_Chaos_Tornado_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A01W'
endfunction
function HasDestructable takes nothing returns nothing
local boolean bj_result = false
if GetEnumDestructable( ) == null then
else
set bj_result = true
endif
endfunction
function IsPointPathable takes real x, real y returns boolean
local rect r = Rect(x - 50.00,y - 50.00,x + 50.00,y + 50.00)
call EnumDestructablesInRect(r,null,function HasDestructable)
call RemoveRect(r)
set r = null
return bj_result
endfunction
function WindMasterMove takes nothing returns nothing
local timer t =GetExpiredTimer()
local integer HashId = GetHandleId(t)
local unit WindMaster = LoadUnitHandle(bj_lastCreatedHashtable,HashId,0)
local real WmA = LoadReal(bj_lastCreatedHashtable,HashId,1)
local real WmX = GetUnitX(WindMaster) + 20 * Cos(WmA * bj_DEGTORAD)
local real WmY = GetUnitY(WindMaster) + 20 * Sin(WmA * bj_DEGTORAD)
local real Range = LoadReal(bj_lastCreatedHashtable,HashId,2) + 20.00

call SaveReal(bj_lastCreatedHashtable,HashId,2,Range)

if IsPointPathable(WmX,WmY) then
call SetUnitPosition(WindMaster,WmX,WmY)
call SetUnitAnimation(WindMaster,"attack walk stand spin")
else
set WmA = abp(WmX,GetUnitX(WindMaster),WmY,GetUnitY(WindMaster))/2
call SaveReal(bj_lastCreatedHashtable,HashId,1,WmA)
call SetUnitAnimation(WindMaster,"attack walk stand spin")
endif

if Range >= 700.00 then
call PauseUnit(WindMaster,false)
call SetUnitInvulnerable(WindMaster,false)
call ResetUnitAnimation(WindMaster)
call SetUnitPathing(WindMaster,true)

call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(bj_lastCreatedHashtable,HashId)
endif

set t = null
endfunction
function Trig_Chaos_Tornado_Actions takes nothing returns nothing
local unit WindMaster = GetSpellAbilityUnit()
local real WmX = GetUnitX(WindMaster)
local real WmY = GetUnitY(WindMaster)
local real CX = GetSpellTargetX()
local real CY = GetSpellTargetY()
local real WmA = abp(WmX,CX,WmY,CY)
local timer t = CreateTimer()
local integer HashId = GetHandleId(t)

call SetUnitInvulnerable(WindMaster,true)
call SetUnitPathing(WindMaster,false)
call SetUnitAnimation(WindMaster,"attack walk stand spin")
call PauseUnit(WindMaster,true)

call SaveUnitHandle(bj_lastCreatedHashtable,HashId,0,WindMaster)
call SaveReal(bj_lastCreatedHashtable,HashId,1,WmA)
call SaveReal(bj_lastCreatedHashtable,HashId,2,0.00)

call TimerStart(t, 0.04, true, function WindMasterMove)

set t= null
set WindMaster = null
endfunction
===========================================================================
function InitTrig_Chaos_Tornado takes nothing returns nothing
set gg_trg_Chaos_Tornado = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Chaos_Tornado, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Chaos_Tornado, Condition( function Trig_Chaos_Tornado_Conditions ) )
call TriggerAddAction( gg_trg_Chaos_Tornado, function Trig_Chaos_Tornado_Actions )
endfunction
))
Старый 02.06.2012, 18:00
Msey
????
offline
Опыт: 67,346
Активность:
суть была не в локалке, а в неправильном построении кондишна
подправил пост
Старый 02.06.2012, 18:02
quq_CCCP
Я белый и пушистый!
online
Опыт: 93,279
Активность:
как летал герой через блокираторы пути так и летает...
Старый 02.06.2012, 19:26
Msey
????
offline
Опыт: 67,346
Активность:
И с true и с false?
Старый 02.06.2012, 19:43
J64_

offline
Опыт: 4,724
Активность:
quq_CCCP:
учитесь правильно организовывать алгоритмы:
globals
	boolean bj_result
endglobals
function HasDestructable takes nothing returns nothing
	if GetEnumDestructable( ) != null then
		set bj_result = true
	endif
endfunction
function IsPointPathable takes real x, real y returns boolean
	local rect r = Rect( x - 50.00, y - 50.00, x + 50.00, y + 50.00 )
	set bj_result = false
	call EnumDestructablesInRect( r, null, function HasDestructable )
	call RemoveRect( r )
	set r = null
	return bj_result
endfunction
Старый 02.06.2012, 20:46
ScorpioT1000
Работаем
offline
Опыт: отключен
function HasDestructable takes nothing returns nothing
    set bj_result = bj_result or ( GetEnumDestructable( ) != null )
endfunction
Старый 02.06.2012, 20:48
quq_CCCP
Я белый и пушистый!
online
Опыт: 93,279
Активность:
ScorpioT1000, ну всегда true возвращяет, если ставить false в \
((код jass
if IsPointPathable(WmX,WmY)then
set bj_result = false
call SetUnitPosition(WindMaster,WmX,WmY)
call SetUnitAnimation(WindMaster,"attack walk stand spin")
.....
.....
.....
))
То срабатывает 1 раз, IsTerrainPathable - не проверяет есть ли блокираторы пути в точке...
Как же тут быть, примитивная проверка, если декорация в точек или нету...
Старый 03.06.2012, 08:18
ScorpioT1000
Работаем
offline
Опыт: отключен
IsTerrainPathable все проверяет
Старый 03.06.2012, 08:42
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
ScorpioT1000:
IsTerrainPathable все проверяет
Не реагирует на объекты вообще, проверяет только базовую карту путей.
Как вариант:
globals
	integer bj_result = 0
endglobals
function HasDestructable takes nothing returns nothing
    if GetEnumDestructable( ) != null then
        set bj_result = bj_result + 1
    endif
endfunction

function IsPointPathable takes real x, real y returns boolean
    local rect r = Rect( x - 32.00, y - 32.00, x + 32.00, y + 32.00 )
    set bj_result = 0
    call EnumDestructablesInRect( r, null, function HasDestructable )
    call RemoveRect( r )
    set r = null
    return bj_result > 0
endfunction
Старый 03.06.2012, 08:48
quq_CCCP
Я белый и пушистый!
online
Опыт: 93,279
Активность:
Master_chan, вот щяс как надо работает, спс за помощь, а то как я не извращался с boolean не работало...
Старый 03.06.2012, 09:26
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
Ок, тему закрываю.
Старый 03.06.2012, 09:30
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 08:43.