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

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

Ответ
 
Krol

offline
Опыт: 17,884
Активность:
Спелы и утеки
Здесь я буду задавать разные вопросы о спеллах,а точнее о том,вызывают ли тот или другой спелл утечки,так как только учусь делать тригерные спелы...
Вот спелл,будет ли он вызывать утечки?
Прикрепленные файлы
Тип файла: w3x Удар бабочки.w3x (22.0 Кбайт, 24 просмотров )
Старый 16.12.2006, 16:37
FoK_KruGer
<3 Vocal Trance
offline
Опыт: 19,940
Активность:
омагад...
тута среатишь юнитов но не удаляешь.

FoK_KruGer добавил:
зы. я хз как удалять - не спрашивай.
Старый 16.12.2006, 16:43
Krol

offline
Опыт: 17,884
Активность:
FoK_KruGer видешь ли,там стоит таймер истечения юнита в 20 секунд,тоесть после появления через двадцать секунд юнит,ээээ а юнит умрёт или удалиться? я хз...
Старый 16.12.2006, 16:47
FoK_KruGer
<3 Vocal Trance
offline
Опыт: 19,940
Активность:
а че ты с таймером делаешь? Я в таймерах вабще не тик-тик ( т.к. ниразу не юзал ) но ты просто заносишь кучу юнитов в таймер и все.
Старый 16.12.2006, 16:49
MPI3
Хм...
offline
Опыт: 24,597
Активность:
Krol
Сколько раз тебе говорить???Сs использучется ТОЛЬКО в трёх случиях:
1)Есть локальные переменные
2)Надо вызвать функцию
3)Надо использоввать команду, не имеюшию аналогов в обычных триггерах!

Так что делай прощё - используй обычные триггеровые команды!!!

А так я, вроде, утечек не заметел!
Старый 16.12.2006, 16:51
Krol

offline
Опыт: 17,884
Активность:
Да причём тут таймер,юнит создаётся и видел в игре где нить когда полоска истечения идёт,когда она кончится,то юнит незнаю чё он сделает,короче он исчезнет!

Krol добавил:
Цитата:
Сs использучется ТОЛЬКО в трёх случиях

Хы а миня прикалывает:) От этого всё равно хуже небудет:)
Цитата:
А так я, вроде, утечек не заметел!

Так я чё выложил спелл,там же точки где будет создаваться юнит,вот с точками я низнаю ничё:(
Старый 16.12.2006, 16:54
FoK_KruGer
<3 Vocal Trance
offline
Опыт: 19,940
Активность:
Krol - ну как хочешь думаю. В тригерах утечек нету. Вроде. В вот если в джасс перевести то событие с условием резать надо ( ну как обычно )
Старый 16.12.2006, 16:58
dk

offline
Опыт: 60,293
Активность:
Там полно утечек! При каждом созданию юнита у тебя теряется 2 точки(1 на полярные координаты и 1 на facing). После каста у тебя теряется 2*3*25 точек.

Отредактировано Dead_knight, 16.12.2006 в 18:30.
Старый 16.12.2006, 18:17
Krol

offline
Опыт: 17,884
Активность:
Цитата:
точек

Яж говорил про точки!!!!!
Dead_knight а как эти точки удалить,у меня триги русские не мог бы исправить в карте?
Старый 16.12.2006, 18:19
dk

offline
Опыт: 60,293
Активность:
Нед, по крайней мере не сегодня! Могу дать линк, на нужную статью: вот
Старый 16.12.2006, 18:42
Krol

offline
Опыт: 17,884
Активность:
Спасибо! фЗначит прочитал я и понял как удалять точки вот так:call RemoveLocation(),значит когда удаляю точку,а она там тока одна Dead_knight эта одна точка переключающего юнита,но тока юниты создаются относительно смещению этой точки.
И значит удалил,и после этого юниты-бабочки появляются там где в самый первый раз находился герой,вот так вот,но хорошо что они у миня летят к герою,а если совсем другой спелл будет,как же это делать:(
Старый 16.12.2006, 20:20
adic3x

offline
Опыт: 108,439
Активность:
Krol, а не легче эти точки несоздавать, юзать call CreateUnit

ADOLF добавил:
Эта функция использует real X и real Y)
Старый 16.12.2006, 21:58
Krol

offline
Опыт: 17,884
Активность:
Цитата:
call CreateUnit

ADOLF этого в тригерах вроде нет? Через сценарий создавать или через джаз?

Krol добавил:
Короче вот для Джассеров:
function Trig_Triger_tru_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A000' ) ) then
return false
endif
return true
endfunction

function Trig_Triger_tru_Actions takes nothing returns nothing
set udg_caster = GetSpellAbilityUnit()
set udg_point = GetUnitLoc(udg_caster)
set udg_angle = GetUnitFacing(udg_caster)
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 35
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
call CreateNUnitsAtLocFacingLocBJ( 1, 'u000', GetOwningPlayer(udg_caster), PolarProjectionBJ(udg_point, ( 20.00 * I2R(GetForLoopIndexA()) ), ( ( 20.00 * I2R(GetForLoopIndexA()) ) + 0.00 )), GetUnitLoc(GetTriggerUnit()) )
call RemoveLocation(udg_point)
call IssuePointOrderLocBJ( GetLastCreatedUnit(), "move", GetUnitLoc(udg_caster) )
call UnitApplyTimedLifeBJ( 20.00, 'BTLF', GetLastCreatedUnit() )
call SetUnitTimeScalePercent( GetLastCreatedUnit(), 10000.00 )
call CreateNUnitsAtLocFacingLocBJ( 1, 'u000', GetOwningPlayer(udg_caster), PolarProjectionBJ(udg_point, ( 20.00 * I2R(GetForLoopIndexA()) ), ( ( 20.00 * I2R(GetForLoopIndexA()) ) + 90.00 )), GetUnitLoc(GetTriggerUnit()) )
call RemoveLocation(udg_point)
call IssuePointOrderLocBJ( GetLastCreatedUnit(), "move", GetUnitLoc(udg_caster) )
call UnitApplyTimedLifeBJ( 20.00, 'BTLF', GetLastCreatedUnit() )
call SetUnitTimeScalePercent( GetLastCreatedUnit(), 10000.00 )
call IssuePointOrderLocBJ( GetLastCreatedUnit(), "move", GetUnitLoc(udg_caster) )
call CreateNUnitsAtLocFacingLocBJ( 1, 'u000', GetOwningPlayer(udg_caster), PolarProjectionBJ(udg_point, ( 20.00 * I2R(GetForLoopIndexA()) ), ( ( 20.00 * I2R(GetForLoopIndexA()) ) + 180.00 )), GetUnitLoc(GetTriggerUnit()) )
call RemoveLocation(udg_point)
call UnitApplyTimedLifeBJ( 20.00, 'BTLF', GetLastCreatedUnit() )
call SetUnitTimeScalePercent( GetLastCreatedUnit(), 10000.00 )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
endfunction

//===========================================================================
function InitTrig_Triger_tru takes nothing returns nothing
set gg_trg_Triger_tru = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Triger_tru, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_Triger_tru, Condition( function Trig_Triger_tru_Conditions ) )
call TriggerAddAction( gg_trg_Triger_tru, function Trig_Triger_tru_Actions )
endfunction

Krol добавил:
Цитата:
call RemoveLocation(udg_point)

Это уже моё творчество...
Старый 17.12.2006, 10:08
adic3x

offline
Опыт: 108,439
Активность:
Krol, какой ужас, ща почитаю...
Старый 17.12.2006, 10:11
Krol

offline
Опыт: 17,884
Активность:
Да ничего тут ужасного нет,здесь три раза короче во этого тока одругому:
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
call CreateNUnitsAtLocFacingLocBJ( 1, 'u000', GetOwningPlayer(udg_caster), PolarProjectionBJ(udg_point, ( 20.00 * I2R(GetForLoopIndexA()) ), ( ( 20.00 * I2R(GetForLoopIndexA()) ) + 0.00 )), GetUnitLoc(GetTriggerUnit()) )
call RemoveLocation(udg_point)
call IssuePointOrderLocBJ( GetLastCreatedUnit(), "move", GetUnitLoc(udg_caster) )
call UnitApplyTimedLifeBJ( 20.00, 'BTLF', GetLastCreatedUnit() )
call SetUnitTimeScalePercent( GetLastCreatedUnit(), 10000.00 )
call CreateNUnitsAtLocFacingLocBJ( 1, 'u000', GetOwningPlayer(udg_caster), PolarProjectionBJ(udg_point, ( 20.00 * I2R(GetForLoopIndexA()) ), ( ( 20.00 * I2R(GetForLoopIndexA()) ) + 90.00 )), GetUnitLoc(GetTriggerUnit()) )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
endfunction
Старый 17.12.2006, 10:13
DioD

offline
Опыт: 45,134
Активность:
щас профикшу, ждите 10 минут
Старый 17.12.2006, 10:17
adic3x

offline
Опыт: 108,439
Активность:
Так, во первых

function Xc takes real x, real a, real d returns real
return x+d*Cos(a*0.01745)
endfunction

function Yc takes real y, real a, real d returns real
return y+d*Sin(a*0.01745)
endfunction

используй это место PolarProjectionBJ.

Теперь создание юнитов:

call CreateUnit (p, 'h000', Xc(x,a,d), Yc(y,a,d), f)

Где p-игрок, x и y - координаты, 'h000' - код юнита, которого создаешь, f-поворот, d-полоярная дистанция... Вот, и никаких точек)

Только если ничего непонимаешь делай лучше как знаешь...

ADOLF добавил:
Тем более что ты создаешь одного юнита как я понял)
Старый 17.12.2006, 10:21
Krol

offline
Опыт: 17,884
Активность:
Цитата:
Только если ничего непонимаешь делай лучше как знаешь...

Значит так и оставлю,ща DioD,а подождём...
Старый 17.12.2006, 10:26
adic3x

offline
Опыт: 108,439
Активность:
call IssuePointOrder (CreateUnit (p, 'h000', x, y, f), "move", x, y) - а вот так можно одной строкой создать юнита, и сразу дать ему приказ) иногда очень удобно...

ADOLF добавил:
Krol, ну этоже видно, ты из ГУИ перебросил, оно лучше не стало(
Старый 17.12.2006, 10:30
DioD

offline
Опыт: 45,134
Активность:
Код:
function Unknown_Action takes nothing returns nothing
    local real X = GetUnitX(GetTriggerUnit())
    local real Y = GetUnitY(GetTriggerUnit())
    local real A = GetUnitFacing(GetTriggerUnit())
    local integer P = 35
    local integer P2 = 3
    local player O = GetOwningPlayer(GetTriggerUnit())
    
    local real X_Temp = .0
    local real Y_Temp = .0
    
    local unit T = null
    
    loop
        loop
            set P2 = 3
            set X_Temp = X + 20*P * Cos(A * bj_DEGTORAD)
            set Y_Temp = Y + 20*P * Sin(A * bj_DEGTORAD)
            set T = CreateUnit(O,'u000',X_Temp,Y_Temp,A)
            call IssuePointOrder(T,"move",X,Y)
            call UnitApplyTimedLife( T, 'BTLF', 20. )
            call SetUnitTimeScale( T, 100.00 )
            set P2 = P2 - 1
            exitwhen P2 == 0
        endloop
        set P = P - 1
        exitwhen P == 0
    endloop
endfunction
Старый 17.12.2006, 10:34
Ответ

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

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

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

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



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