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

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

Ответ
 
Dagoth

offline
Опыт: 115
Активность:
Дамми плохо себя ведёт
Код:
function Trig_Lightning_Fury_3_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A01W' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Lightning_Fury_3_Func004003001003 takes nothing returns boolean
    return ( IsUnitAlly(GetFilterUnit(), GetOwningPlayer(GetSpellAbilityUnit())) == false )
endfunction

function Trig_Lightning_Fury_3_Actions takes nothing returns nothing
    call CreateNUnitsAtLoc( 1, 'h00I', GetOwningPlayer(GetSpellAbilityUnit()), GetUnitLoc(GetSpellAbilityUnit()), 0.00 )
    call UnitApplyTimedLifeBJ( 3.00, 'Brai', GetLastCreatedUnit() )
    call IssueTargetOrderBJ( GetLastCreatedUnit(), "chainlightning", GroupPickRandomUnit(GetUnitsInRangeOfLocMatching(512, GetUnitLoc(GetSpellAbilityUnit()), Condition(function Trig_Lightning_Fury_3_Func004003001003))) )
endfunction

//===========================================================================
function InitTrig_Lightning_Fury_3 takes nothing returns nothing
    set gg_trg_Lightning_Fury_3 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Lightning_Fury_3, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Lightning_Fury_3, Condition( function Trig_Lightning_Fury_3_Conditions ) )
    call TriggerAddAction( gg_trg_Lightning_Fury_3, function Trig_Lightning_Fury_3_Actions )
endfunction


Суть проблемы - изначально сделано в обычном гуи, потом проверено в Джасскрафте - ошибок нет. Однако в игре, когда кастуется думми-абилити A01W - ничего не происходит, хотя думми получает абилку, базирующюся на Чайн лайтнинге.

У самого два варианта "почему", не знаю какой верный:
1) Когда триггер переведен в джасс стоит приказывать думми кастовать именно МОЮ абилку, а не базовую? Как это сделать корректно?
2) Моя карта - АоС, и каждые несколько секунд создаются юниты (Create N units ....) - может ли из-за этого не работать "...IssueTargetOrderBJ( GetLastCreatedUnit(), ..." - мол ссылка идёт на другого юнита, а не на думми?!

Альтернатива - предложите хорошо оптимизированный вариант накастовки различных (не) точечных заклинаний (шэдоу страйк, сторм болт или шоквейв) на всех врагов в радиусе вокруг кастера. Заранее благодарен.
Старый 21.08.2007, 01:24
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
» ChainLightning
Код:
function Trig_Lightning_Fury_3_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A01W'
endfunction

function Trig_Lightning_Fury_3_Func004003001003 takes nothing returns boolean
    return IsUnitAlly(GetFilterUnit(), GetOwningPlayer(GetSpellAbilityUnit())) == false
endfunction

function Trig_Lightning_Fury_3_Actions takes nothing returns nothing
    local unit u = CreateUnit('h00I',GetOwningPlayer(GetTriggerUnit()),GetUnitX(GetTriggerUnit()),G  etUnitY(GetTriggerUnit()),270.00)
    call IssueTargetOrder(u,"chainlightning",GroupPickRandomUnit(GetUnitsInRangeOfLocMatching(512, GetUnitLoc(GetTriggerUnit()),Condition(function Trig_Lightning_Fury_3_Func004003001003))))
    call TriggerSleepAction(0.50)
    call RemoveUnit(u)
    set u = null
endfunction

//===========================================================================
function InitTrig_Lightning_Fury_3 takes nothing returns nothing
    set gg_trg_Lightning_Fury_3 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Lightning_Fury_3, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Lightning_Fury_3, Condition( function Trig_Lightning_Fury_3_Conditions ) )
    call TriggerAddAction( gg_trg_Lightning_Fury_3, function Trig_Lightning_Fury_3_Actions )
endfunction

Вот, должно работать если абила A01W сделана на основе этой самой молнии.
+ теперь лучше с точки зреия оптимизации.
Старый 21.08.2007, 06:59
J
expert
offline
Опыт: 48,447
Активность:
DFlyer утечки

Jon добавил:
Dagoth походу у тебя неправелен сам алгоритм, я его изменил
вот мой вариант... я правдо неуверен что он будет работать , но попробуй...
Код:
function LightningFury3_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A01W'
endfunction

function LightningFury3_Filter takes nothing returns boolean
    return IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetSpellAbilityUnit()))
endfunction

function LightningFury3_Action takes nothing returns nothing
    local unit Caster = GetSpellAbilityUnit() 
    local player p = GetOwningPlayer(Caster)
    local real X = GetUnitX(Caster)
    local real Y = GetUnitY(Caster)
    local unit Dummy
    local filterfunc ff = Filter(function LightningFury3_Filter)
    local group gr = CreateGroup()
    local unit u
    call GroupEnumUnitsInRange (gr, X, Y, 512, ff)
    call DestroyFilter(ff)
    loop
        set u = FirstOfGroup(gr)
        exitwhen u == null
        set Dummy = CreateUnit(p, 'h00I', X, Y, 0)
        call UnitApplyTimedLife(Dummy, 'Brai', 3)
        call IssueTargetOrder(Dummy, "chainlightning", u)
        call GroupRemoveUnit (gr, u)
    endloop
    call DestroyGroup(gr)
    set gr   = null
    set Dummy = null
    set ff   = null
endfunction

function InitTrig_Lightning_Fury_3 takes nothing returns nothing
    local trigger trig = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(trig, EVENT_PLAYER_UNIT_SPELL_EFFECT               )
    call TriggerAddCondition          (trig, Condition(function LightningFury3_Conditions))
    call TriggerAddAction             (trig,           function LightningFury3_Action     )
    set trig = null
endfunction
Старый 21.08.2007, 07:44
Dagoth

offline
Опыт: 115
Активность:
Спасибо огромное. А как насчёт имен нестандартных спеллов? Их можно как-либо использовать в приказе юниту? Например если заклинание - что-то вроде "Паразит", и его нету в списке в ГУИ.
Старый 21.08.2007, 11:04
J
expert
offline
Опыт: 48,447
Активность:
нельзя, только на те на основе которого он сделан
Старый 21.08.2007, 11:05
Dagoth

offline
Опыт: 115
Активность:
Упс, всё равно не работает - хотя опять же, ни одной ошибки в Джасскрафте =)
Jon Вы уверены, что FirstOfGroup(gr) здесь работает нормально? То есть не даёт "нулевую" цель. Когда вставляю отладочный текст - всё выводится, но спелл не кастуется.
Старый 22.08.2007, 00:15
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Dagoth, может вокруг нету воинов и не на кого кастовать или они имунны к магии, или у дамми нету "chainlightning" или маны на спелл или еще че-нить такое, но в принципе тебе правильный код Jon написал...
Jon, а разьве здесь не надо обнулять Caster и p?
Старый 22.08.2007, 10:26
J
expert
offline
Опыт: 48,447
Активность:
Dagoth посмотрери точно ли есть нужная абилка у дами юнита, и посмотри точно ли этим приказом она кастуется...
Alex_Hell ненадо
Старый 22.08.2007, 10:42
Dagoth

offline
Опыт: 115
Активность:
orderstring? Да, именно такой =/ а вот есть ли... ну не знаю, твой код вроде должен стабильно добавлять нужную способность
Старый 22.08.2007, 12:35
J
expert
offline
Опыт: 48,447
Активность:
Dagoth он не добавляет способность, и испольщует ее, можеш кстате из Ро у дами убрать способность, а добовлять ее триггерно, тогда может лучше будет, и дами будет доступен и для других спелов
Старый 22.08.2007, 12:50
Dagoth

offline
Опыт: 115
Активность:
так и было изначально - у него пустой список способностей (ну кроме москитов). Маны и хп по 22000 =))) Что ещё может препятствовать?
Старый 22.08.2007, 19:20
J
expert
offline
Опыт: 48,447
Активность:
Dagoth а ты в моем коде добавляеш способность?
Старый 22.08.2007, 21:43
Dagoth

offline
Опыт: 115
Активность:
угу =))) Я и раньше добавлял, и только сейчас заметил один косячок...
Оказывается - как назвал переменную ТАК И ЮЗАЙ =) А я назвал Dummy, а потом пытался dummy добавить абилку =)))) Оказывается case-sensitive эты переменные.
В любом случае - всем спасибо, особенно Йону за нормальный рабочий скрипт, который я чуть не испоганил =)
Старый 22.08.2007, 22:39
Ответ

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

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

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

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



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