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

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

Ответ
 
Observer

offline
Опыт: 737
Активность:
Операция function
У меня возникла проблема:
при наборе
Function Udar2_spom takes unit Wrag1, effect Top1 return nothing
call DestroyEffectBJ( Top1 )
call SetUnitMoveSpeed( GetEnumUnit(), GetUnitDefaultMoveSpeed(GetEnumUnit()) )
endfunction
У меня выскочила ошибка:
function Udar2_spom must not take any arguments when used as code
И не как победить не могу, Что мне делать
Старый 03.03.2008, 10:44
exploder
iOS zealot
offline
Опыт: 19,394
Активность:
Observer, ты используешь эту функцию для передачи как фактический параметр в другую функцию (параметр типа code), например, в ForGroup, а такая функция не может содержать формальных параметров в обьявлении (т.е. takes unit Wrag1, effect Top1 быть не должно, а должно быть takes nothing).
Передавай нужные тебе данные в эту функцию через глобальные переменные...

Отредактировано exploder, 03.03.2008 в 11:15.
Старый 03.03.2008, 11:02
Observer

offline
Опыт: 737
Активность:
exploderДело в том что это заклинание
А при глоб. переменных его смогут качественно использовать только один юнит
А я хоче сделать чтобы спелл могли использоватьнесколько юнитов одновременно - для этого хочу все сделать локалками
Старый 03.03.2008, 11:23
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Observer, используй кэш
www.xgm.guru/articles.php?section=wc3&
Старый 03.03.2008, 11:25
Observer

offline
Опыт: 737
Активность:
FellGuard Точно, как я сам не догадался!!!
Спасибо.

Если есть еще варианты то пишите я всегда в внимании
Старый 03.03.2008, 11:39
adic3x

offline
Опыт: 108,439
Активность:
FellGuard, ты мну последнее время пугаешь... спел идет одним потоком...
Observer, если спелл не имеет отсроченных действий глобалки ну не как не влияют на алгоритм
Старый 03.03.2008, 11:56
Toadcop

offline
Опыт: 54,313
Активность:
Цитата:
FellGuard, ты мну последнее время пугаешь... спел идет одним потоком...
это всё злой Универ -.- надо устроить срачь там =))) (детали в асе...)
Старый 03.03.2008, 14:43
Hexus
Looking for a victim
offline
Опыт: 19,166
Активность:
Массивы юзай
Старый 03.03.2008, 15:03
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
лол обьясняю, ты юзаешь функцию Udar2_spom в случае, что она должна быть без параметров, соответственно она должна выглядеть вот так:
function Udar2_spom takes nothing returns nothing
...
endfunction
Старый 03.03.2008, 16:49
J
expert
offline
Опыт: 48,447
Активность:
Observer еще ты function написал с большой буквы, я незнаю может это ты здесь опечатся или как, но имей ввиду что регистр учитывается...
Старый 03.03.2008, 17:13
Observer

offline
Опыт: 737
Активность:
Jon Это я здесь ошибся
df Hunter Может локальную переменые при помощи кеша переместить?
Старый 03.03.2008, 17:24
J
expert
offline
Опыт: 48,447
Активность:
Observer нет, глобалки сдесь подходят очень хорошо, просто создай пару глобалок, и пользуйся ими.
Также как сказал уже адольф - если у тебя во время перебрасывания данных не идет никакого ожидания, то все должно работать хорошо для всех героев.
Также потом этиже глобалки можно будет использовать для этой же задачи во всех других спелах, потому их будет не так много...
Старый 03.03.2008, 17:28
Observer

offline
Опыт: 737
Активность:
JonВот блин а у меня есть ожидания(

Observer добавил:
Jon Ладно спасибо за помощь
Придется что-нибудь самому придумать
Старый 03.03.2008, 17:39
J
expert
offline
Опыт: 48,447
Активность:
ты ForGroup используеш? в ней никак не зделать ожидания... тебе если не сложно скинь код, я посмотрю...
Старый 03.03.2008, 17:39
Observer

offline
Опыт: 737
Активность:
unction Trig_Udar_2_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A00E' ) ) then
return false
endif
return true
endfunction
function Trig_Udar_2_uslov takes nothing returns boolean
if ( not ( IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(udg_Un)) == true ) ) then
return false
endif
return true
endfunction
function Trig_Udar_2_dop takes nothing returns unit effect
local unit Wrag1
local unit Un
local effect Top1
set Un = GetSpellAbilityUnit()
set Wrag1 = GetEnumUnit()
if ( Trig_Udar_2_uslov() ) then
call UnitDamageTargetBJ( GetSpellAbilityUnit(), GetEnumUnit(), 340.00, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL )
call AddSpecialEffectTargetUnitBJ( "overhead", GetEnumUnit(), "Abilities\\Spells\\Orc\\StasisTrap\\StasisTotemTarget.mdl" )
set Top1 = GetLastCreatedEffectBJ()
call SetUnitMoveSpeed( GetEnumUnit(), 0.00 )
else
endif
return GetEnumUnit()
return GetLastCreatedEffectBJ()
endfunction
function Trig_Udar_2_Actions takes unit Wrag1, effect Top1 returns nothing
local unit Un
local effect Top
set Un = GetSpellAbilityUnit()
call TriggerSleepAction( 0.10 )
call TerrainDeformationCraterBJ( 1.00, false, GetUnitLoc(Un), 300.00, 80.00 )
call AddSpecialEffectLocBJ( GetUnitLoc(Un), "Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl" )
set Top = GetLastCreatedEffectBJ()
call CameraSetEQNoiseForPlayer( GetOwningPlayer(Un), 6.00 )
call TriggerSleepAction( 0.01 )
call TerrainDeformationRippleBJ( 3.00, false, GetUnitLoc(Un), 300.00, 300.00, 20.00, 0.25, 512 )
call DestroyEffectBJ( Top )
call AddSpecialEffectLocBJ( GetUnitLoc(Un), "Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl" )
set Top = GetLastCreatedEffectBJ()
call TriggerSleepAction( 0.01 )
call ForGroupBJ( GetUnitsInRangeOfLocAll(350.00, GetUnitLoc(Un)), function Trig_Udar_2_dop )
call TriggerSleepAction( 1.20 )
call CameraClearNoiseForPlayer( GetOwningPlayer(Un) )
call TriggerSleepAction( 5.00 )
call DestroyEffectBJ( Top1 )
call SetUnitMoveSpeed( Wrag1, GetUnitDefaultMoveSpeed(Wrag1) )
endfunction
===========================================================================
function InitTrig_Udar_2_____________________u takes nothing returns nothing
set gg_trg_Udar_2_____________________u = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Udar_2_____________________u, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddCondition( gg_trg_Udar_2_____________________u, Condition( function Trig_Udar_2_Conditions ) )
call TriggerAddAction( gg_trg_Udar_2_____________________u, function Trig_Udar_2_Actions )
endfunction
Старый 03.03.2008, 18:14
J
expert
offline
Опыт: 48,447
Активность:
во первых загони код под тег [ code]
во вторых обращение с фор груп у тебя опсалютно не правельное, точнее неправельное орудование локалками. Еще она у тебя зачемто возвращает 2 значения Oo, хотя должно возвращать ничего...
в третих банальные утечки...
ну, слип сдесь можно простить (надеюсь никто не будет опять начинать спор?)
в четвертых
в подобных ситуациях можно юзать Луп по группе
выглядит он примерно так:
Код:
set gr = CreateGroup()
call GroupEnumUnitsInRange (gr, GetUnitX(caster), GetUnitY(caster), radius, null )
loop
    set u = FirstOfGroup(gr)
    exitwhen u == null    
    if IsUnitEnemy(u, GetOwningPlayer(caster)) then
        //Действия над юнитом u
    endif
    call GroupRemoveUnit (gr, u)
endloop
call DestroyGroup(gr)


Jon добавил:
хотя можно и через фор груп, ща сделаю набросок, уже спать хочу такчто хорошо врятли получицо
Старый 03.03.2008, 18:43
Observer

offline
Опыт: 737
Активность:
JonСпасибо, я тебя не забуду
Старый 03.03.2008, 18:44
J
expert
offline
Опыт: 48,447
Активность:
Чет я фигню какуюто написал... ну попробуй так:
eсли повезет то еще и работать будет ^^

ps
не используй тригеры с рускими названиями, бесят...
Код:
function Trig_Udar_2_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A00E'
endfunction

function Trig_Udar_2_dop takes nothing returns nothing
    local unit Wrag1 = GetEnumUnit()
    local unit Un = GetSpellAbilityUnit()
    if IsUnitEnemy(Wrag1, GetOwningPlayer(Un)) then
        call UnitDamageTargetBJ (Un, Wrag1, 340, ATTACK_TYPE_MELEE, DAMAGE_TYPE_NORMAL)
        call DestroyEffect (AddSpecialEffectTarget("Abilities\\Spells\\Orc\\StasisTrap\\StasisTotemTarget.mdl", Wrag1, "overhead"))
        call SetUnitMoveSpeed (Wrag1, 0)
    endif
endfunction

function Trig_Udar_2_dop_back takes nothing returns nothing
    call GetUnitDefaultMoveSpeed(GetEnumUnit())
endfunction

function Trig_Udar_2_Actions takes nothing returns nothing
    local unit Un = GetSpellAbilityUnit()
    local location loc = GetUnitLoc(Un)
    local group gr = CreateGroup()
    local player p = GetOwningPlayer(Un)
    
    call TriggerSleepAction (0.1)
    call TerrainDeformCrater (GetUnitX(Un), GetUnitY(Un), 300, 80, 1000, false)
    call DestroyEffect (AddSpecialEffect ("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl", GetUnitX(Un), GetUnitY(Un)))
    call CameraSetEQNoiseForPlayer (p, 6)
    
    call TriggerSleepAction (0.01)
    call TerrainDeformationRippleBJ (3, false, loc, 300, 300, 20, 0.25, 512)
    call RemoveLocation(loc)
    call DestroyEffect (AddSpecialEffect ("Abilities\\Spells\\Orc\\WarStomp\\WarStompCaster.mdl", GetUnitX(Un), GetUnitY(Un)))
    
    call TriggerSleepAction (0.01)
    call GroupEnumUnitsInRange(gr, GetUnitX(Un), GetUnitY(Un), 350, null)
    call ForGroup(gr, function Trig_Udar_2_dop)
    
    call TriggerSleepAction (1.2)
    call CameraClearNoiseForPlayer (p)
    
    call TriggerSleepAction (5)
    call ForGroup(gr, function Trig_Udar_2_dop_back)  
    call DestroyGroup(gr)
    set loc = null
    set Top = null
    set gr = null
endfunction

function InitTrig_Udar_2_____________________u takes nothing returns nothing
    set gg_trg_Udar_2_____________________u = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Udar_2_____________________u, EVENT_PLAYER_UNIT_SPELL_CAST              )
    call TriggerAddCondition          (gg_trg_Udar_2_____________________u, Condition(function Trig_Udar_2_Conditions))
    call TriggerAddAction             (gg_trg_Udar_2_____________________u,           function Trig_Udar_2_Actions    )
endfunction


Jon добавил:
я не проврял код на отсутствие ошибок, потому все может быть...

Jon добавил:
чуть подправил код...
Старый 03.03.2008, 18:56
Observer

offline
Опыт: 737
Активность:
Jon Ладно попытаюсь вставить, если выйдет - с меня пузырь))))
Старый 03.03.2008, 19:08
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
Цитата:
InitTrig_Udar_2_____________________u
поменять не забудь на английское имя, и сам триг переименуй)
Старый 03.03.2008, 20:22
Ответ

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

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

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

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



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