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

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

Ответ
 
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Проблема с отрядом
Вообщем подскажите как заставить юнита атаковать дружественного юнита такого же игрока (не меняя его на другого)
тоесть скил ульта массовое замешательство вот пикаю всех в радиусе 400 от героя
приказ типо выбранный юнит атаковать выбранный не катит..
» код
function Trig_FireEscort_Conditions takes nothing returns boolean
     return GetSpellAbilityId() == 'A006'
endfunction

function FireEscort_Move takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local integer wait = LoadInteger(udg_hash,id,3)
local group g = CreateGroup()
local unit Picked
local unit c = LoadUnitHandle(udg_hash, id, 2)
local real x = GetUnitX(c)
local real y = GetUnitY(c)
local real damage = LoadReal(udg_hash, id, 1)
local real x2
local real y2
    if wait < 1 then
        call PauseTimer(t)
        call FlushChildHashtable(udg_hash, id)
        call GroupClear(g)
        call DestroyGroup(g)
        call DestroyTimer(t)
    else
        set wait = wait - 1
        call SaveInteger(udg_hash, id, 3, wait)
        call DestroyEffect(AddSpecialEffect( "Abilities\\Spells\\Undead\\OrbOfDeath\\AnnihilationMissile.mdl",x, y))
        call GroupEnumUnitsInRange(g,x,y,400,null)
    loop
        set Picked = FirstOfGroup(g)
        exitwhen  Picked == null
    if IsUnitEnemy(Picked, GetOwningPlayer(c)) and  GetUnitState(Picked, UNIT_STATE_LIFE) > 0.00 then
    set x2 = GetUnitX(Picked)
    set y2 = GetUnitY(Picked)
    call DestroyEffect(AddSpecialEffect( "Abilities\\Spells\\Undead\\DeathandDecay\\DeathandDecayTarget.mdl",x2, y2))
    call IssueTargetOrder( Picked, "attack", Picked )
    call UnitDamageTargetBJ( c, Picked, damage, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
    endif
    call GroupRemoveUnit(g,Picked)
    set Picked = null
endloop
endif
call GroupClear(g)
call DestroyGroup(g)
set g = null
set t = null
set c = null
endfunction

function Trig_FireEscort_Actions takes nothing returns nothing
local unit c = GetSpellAbilityUnit()
local timer t = CreateTimer()
local integer id = GetHandleId(t)
local integer wait = 5
local real x = GetUnitX(c)
local real y = GetUnitY(c)
local real damage = ( 10.00 + ( 10.00 * I2R(GetUnitAbilityLevel(c,'A006')) ) )
call SaveReal(udg_hash, id, 1, damage)
call SaveInteger(udg_hash, id, 3, wait)
call SaveUnitHandle(udg_hash, id, 2, c)
call TimerStart(t, 1.00, true, function FireEscort_Move)
set t = null
set c = null
endfunction

function InitTrig_FireEscort takes nothing returns nothing
    local integer index=0
    set gg_trg_FireEscort = CreateTrigger()
    loop
    call TriggerRegisterPlayerUnitEvent(gg_trg_FireEscort, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null)
    set index = index + 1
    exitwhen index == bj_MAX_PLAYER_SLOTS
    endloop
    call TriggerAddCondition(gg_trg_FireEscort, Condition(function Trig_FireEscort_Conditions))
    call TriggerAddAction(gg_trg_FireEscort, function Trig_FireEscort_Actions)
endfunction

Отредактировано Cosonic5, 11.02.2013 в 12:10.
Старый 11.02.2013, 11:10
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
call IssueTargetOrder( Picked, "attack", Picked )
lolshto?
Старый 11.02.2013, 11:41
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
ну надо чтоб каждый в отряде атаковал друг друга)
Старый 11.02.2013, 11:45
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
ты приказываешь юниту атаковать самого себя D:
Старый 11.02.2013, 11:46
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
HolyMoon, да но фишка в том что когда кастую крестьяне сразу налетают на героя так как сами себя бить не хотят))
Старый 11.02.2013, 11:55
просто Юрок
...
offline
Опыт: 11,271
Активность:
Cosonic5, я в Jass 0, но знаю, что нельзя же бить самого себя, вот они и бьют героя. (кэп)
Старый 11.02.2013, 11:58
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
заставить юнита атаковать дружественного юнита
!= атаковать самого себя
ты уж определись :D
Старый 11.02.2013, 11:59
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
да мне надо чтоб союзник атаковал союзника
каждую сек около кастера в течении примерно 5 сек
тоесть набрасываются друг на друга))
Старый 11.02.2013, 12:00
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
надо чтоб союзник атаковал союзника
а приказываешь ты атаковать самого себя.
бери юнита n, находи для него кого-нибудь рядом и приказывай n атаковать этого кого-нибудь
Старый 11.02.2013, 12:06
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
HolyMoon, это логично на мне бы на jass как это все выглядить то будет
тоесть пикнутого юнита выбирать получается еще один отряд так?
на словах это все очень просто звучит)
Старый 11.02.2013, 12:15
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
local group g = CreateGroup()
call GroupEnumUnitsInRange(g, GetUnitX(n), GetUnitY(n), 300, Filter(function ASFSA))
set targ = FirstOfGroup(g)
call DestroyGroup(g)
call IssueTargetOrder(n, "attack", targ)
set g = null
set targ = null
primerno tak
Старый 11.02.2013, 12:26
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
        call GroupEnumUnitsInRange(g,x,y,400,null)
    loop
        set Picked = FirstOfGroup(g)
        exitwhen  Picked == null
    if IsUnitEnemy(Picked, GetOwningPlayer(c)) and  GetUnitState(Picked, UNIT_STATE_LIFE) > 0.00 then
    set x2 = GetUnitX(Picked)
    set y2 = GetUnitY(Picked)
    call GroupAddUnit(r,Picked)
    call DestroyEffect(AddSpecialEffect( "Abilities\\Spells\\Undead\\DeathandDecay\\DeathandDecayTarget.mdl",x2, y2))
    call UnitDamageTargetBJ( c, Picked, damage, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
    endif
    set Picked = null
endloop
call GroupEnumUnitsInRange(r,x2,y2,200,null)
loop
    set Pickedd = FirstOfGroup(r)
    exitwhen  Pickedd == null
    if IsUnitEnemy(Pickedd, GetOwningPlayer(c)) and  GetUnitState(Pickedd, UNIT_STATE_LIFE) > 0.00 then
    call GroupTargetOrder(g, "attack", Pickedd )
    endif
    call GroupRemoveUnit(r,Pickedd)
    set Pickedd = null
    endloop
endif
пробую так не атакуют
Старый 11.02.2013, 12:36
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
function QWER takes nothing returns boolean
return not(IsUnitEnemy(GetFilterUnit(), Player(udg_n))) and GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) >0.5
endfunction


function ASDF takes nothing returns boolean
local unit u = GetFilterUnit()
local group g = null

if IsUnitEnemy(u, Player(udg_i)) and GetUnitState(u, UNIT_STATE_LIFE) >0.5 then
 set g = CreateGroup()
 set udg_n = GetPlayerId(GetOwningPlayer(u))
 call GroupEnumUnitsInRange(g, GetUnitX(u), GetUnitY(u), 300, Filter(function QWER))
 call IssueTargetOrder(u, "attack", FirstOfGroup(g))
 call DestroyGroup(g)
 set g = null
 set u = null
  return true
endif

set u = null
return false
endfunction


function Trig_spell_Actions takes nothing returns nothing
local group g = CreateGroup()
local unit u = GetTriggerUnit()
 set udg_i = GetPlayerId(GetOwningPlayer(u))
 call GroupEnumUnitsInRange(g, GetUnitX(u), GetUnitY(u), 400, Filter(function ASDF))
 call DestroyGroup(g)

set g = null
set u = null
endfunction
Старый 11.02.2013, 12:52
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
HolyMoon, шляпа
udg_i udg_n напрягают
еще усложняет то что это каждую 1 сек надо проделывать эх

Отредактировано Cosonic5, 11.02.2013 в 13:13.
Старый 11.02.2013, 13:03
HolyMoon
Hly shit!
offline
Опыт: 6,986
Активность:
сделай вместо них bj_forLoopAIndex и B
Старый 11.02.2013, 13:10
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
HolyMoon, шляпа
буду тогда случайного юнита пикать

Отредактировано Cosonic5, 11.02.2013 в 13:44.
Старый 11.02.2013, 13:31
quq_CCCP
Я белый и пушистый!
online
Опыт: 93,306
Активность:
Cosonic5, Выбирай рандомного юниа из группы, (есть такая бж функция) в цикле при условии что Random unit != picked заставляй Picked атаковать Random юнита....
Не забудь про exetwhen
((код jass
local integer nIndex = 0
local group grp
local unit Random
local unit Picked
...
loop
set Random = GroupPickRandomUnit(grp)
exitwhen Random != Picked
exitwhen nIndex >= 3000
set nIndex = nIndex + 1
endloop
))
Старый 11.02.2013, 15:22
ScorpioT1000
Работаем
offline
Опыт: отключен
quq_CCCP, твой код успешно рвет поток, предварительно зависая на полсекунды.
Старый 11.02.2013, 15:33
quq_CCCP
Я белый и пушистый!
online
Опыт: 93,306
Активность:
ScorpioT1000, я так пример не для подражания а как должно выглядеть в обьщем виде потому что picked не должен равняться Random, можно конечно сделать свою функцию аналог GroupPickRandomUnit с критериями отбора юнита....
Старый 11.02.2013, 15:45
ScorpioT1000
Работаем
offline
Опыт: отключен
Ну так и сделал бы, а то там выше вообще ад какой-то =)
Старый 11.02.2013, 15:46
Ответ

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

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

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

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



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