Доброго времени суток. У меня 2 вопроса.
Вопрос №1
Как сделать исключение на одного персонажа определенного. Чтобы его не вызывало на арену?
function DuelChecking takes nothing returns nothing
    local integer alliance_number = 0
    local integer akatsuki_number = 0
    local integer alliance_current = 0
    local integer akatsuki_current = 0
    local integer i = 0
    local unit hero_duel_1 = null
    local unit hero_duel_2 = null
    loop
        if i != 4 and i != 5 then
            if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
                if i < 4 then
                    set alliance_number = alliance_number + 1
                elseif i > 5 then
                    set akatsuki_number = akatsuki_number + 1
                endif
            endif
        endif
        set i = i + 1
        exitwhen i > 10
    endloop
    set i = 0
    loop
        if i != 4 and i != 5 then
            if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
                if i < 4 and hero_duel_1 == null then
                    set alliance_current = alliance_current + 1
                    if alliance_current < alliance_number then
                        if GetRandomInt(1, alliance_number) == 1 then
                            set hero_duel_1 = udg_Hero[i]
                        endif
                    elseif alliance_current == alliance_number then
                        set hero_duel_1 = udg_Hero[i]
                    endif
                elseif i > 5 and hero_duel_2 == null then
                    set akatsuki_current = akatsuki_current + 1
                    if akatsuki_current < akatsuki_number then
                        if GetRandomInt(1, akatsuki_number) == 1 then
                            set hero_duel_2 = udg_Hero[i]
                        endif
                    elseif akatsuki_current == akatsuki_number then
                        set hero_duel_2 = udg_Hero[i]
                    endif
                endif
            endif
        endif
        set i = i + 1
        exitwhen i > 10 or hero_duel_2 != null
    endloop
    if hero_duel_1 != null and hero_duel_2 != null then
        call DuelStart(GetOwningPlayer(hero_duel_1), GetOwningPlayer(hero_duel_2))
    else
        call DisplayTimedTextToPlayer(GetLocalPlayer(), 0., 0., 5., "|cFFFFCC00Дуэль не состоялась!|r")
    endif
    set hero_duel_1 = null
    set hero_duel_2 = null
endfunction
Вопрос №2
Персонаж призывает к себе 6 юнитов и их способности впилины в него самого.
То есть когда нужно использовать способность нужно:
  1. Поставить юнита на нужное место
  2. Переключиться на призывателя
  3. Пролистать до нужной способности
  4. Использовать её.
Этот вопрос я пытался решить методом "впилить способности" через редактор и получилось лишь на половину. Проблема в том, что при перемещении на арену и обратно у него смешиваются способности. Фиксить глобально я не предлагаю, а вот решение по типу "команда" подойдёт. То есть персонажу просто нужно "перезагрузить" нужны способности только на определенном персонаже. Можно пример скрипта, чтоб по нему сделать?
Спасибо за внимание
UPD По 1 вопросу. Можно скриптом нагляднее? Просто мои познания в jass поверхностные и моя задача стоит лишь сбалансировать карту.
По 2 вопросу. Перемешиваются так как там идут "наборами" и переключаются стрелочками(нажал стрелку заменились способности на другие и так 6 наборов), и всё работает почти корректно. В момент перемещения на арену, то часть способностей из одного набора и часть от другого набора в перемешку становятся и одни заменяют другие.

Принятый ответ

Я не понимаю как вы собираете решать (потому что не даете ответ развернутый). Так вот решение:
решение один. добавить в условие проверку на тип
тут нужно вместо hfoo поставить свой тип
function DuelChecking takes nothing returns nothing
local integer alliance_number=0
local integer akatsuki_number=0
local integer alliance_current=0
local integer akatsuki_current=0
local integer i=0
local unit hero_duel_1=null
local unit hero_duel_2=null

//идет первый цикл
//здесь введены специально счетчики для игроков от каждой команды
// alliance_number - кол-во играющих за добро и akatsuki_number - кол-во играющих за зло
//перебирает всех 10 игроков, если игрок играет, то прибавляет в счетчик
//эти счетчики - переменные целые. они высчитывают шанс.
loop
    if i!=4 and i!=5 then
        if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then
            if i<4 then //<=здесь можно выставить условие ( GetUnitTypeId(udg_Hero[i]) != 'hfoo' ) выставите тип, и тогда счетчик не засчитаете его
                set alliance_number=alliance_number+1
            elseif i>5 then //<=или здесь можно выставить условие ( GetUnitTypeId(udg_Hero[i]) != 'hfoo' ) выставите тип, и тогда счетчик не засчитаете его
                set akatsuki_number=akatsuki_number+1
            endif
        endif
    endif
    set i=i+1
    exitwhen i>10
endloop

//идет второй цикл
//теперь снова перебираем тех же игроков.
//но пытаемся выдать шанс на то, что герой этого игрока выйдет на дуэль


set i=0
loop
if i!=4 and i!=5 then
    if GetPlayerSlotState(Player(i))==PLAYER_SLOT_STATE_PLAYING then //если игрок играет
    
        if i<4 and hero_duel_1==null then //если первый дуэлянт еще не выбран (дуэлянт выбирается от 1 до 4 игрока)
            set alliance_current=alliance_current+1 //< странно эти переменная ничего не делает дальше. 
            //должна alliance_current по идее вычитать из общее количества. из этого шанс будет становится больше. 
            //например 3 игрока. 1/3=0.3 или 30 процентов. 2 игрока - 1/2=0.5 или 50 процентов
        
            //if ( GetUnitTypeId(udg_Hero[i]) != 'hfoo' ) then <= здесь нужно поставить условие, тогда нагато никогда не выйдет на арену
            if alliance_current<alliance_number then
                if GetRandomInt(1,alliance_number)==1 then //выбирается рандомно. 
                    set hero_duel_1=udg_Hero[i]
                endif
            elseif alliance_current==alliance_number then //если дуэлянт не выбран (если до этого шанс не выпад, то выбираем последнего игрока)
                set hero_duel_1=udg_Hero[i]
            endif
            //endif
            
        elseif i>5 and hero_duel_2==null then
            set akatsuki_current=akatsuki_current+1 //< странно эти переменная ничего не делает дальше.
            //должна akatsuki_current по идее вычитать из общее количества. из этого шанс будет становится больше. 
            //например 3 игрока. 1/3=0.3 или 30 процентов. 2 игрока - 1/2=0.5 или 50 процентов
            
            //if ( GetUnitTypeId(udg_Hero[i]) != 'hfoo' ) then <= здесь нужно поставить условие, тогда нагато никогда не выйдет на арену
            if akatsuki_current<akatsuki_number then
                if GetRandomInt(1,akatsuki_number)==1 then //выбирается рандомно шанс
                    set hero_duel_2=udg_Hero[i]
                endif
            elseif akatsuki_current==akatsuki_number then
                set hero_duel_2=udg_Hero[i]
            endif
            //endif
        endif
endif
endif
set i=i+1
exitwhen i>10 or hero_duel_2!=null
endloop
if hero_duel_1!=null and hero_duel_2!=null then
call DuelStart(GetOwningPlayer(hero_duel_1),GetOwningPlayer(hero_duel_2))
else
call DisplayTimedTextToPlayer(GetLocalPlayer(),0.,0.,5.,"|cFFFFCC00Дуэль не состоялась!|r")
endif
set hero_duel_1=null
set hero_duel_2=null
endfunction
типы
какой из них имба? основное тело героя O014? кого из них отключать?
    //O014 - равкод нагато
    //ниже равкоды пейн-ов от 1 до 6
    integer Nagato_PAIN_ID_1=0x45303037 //E007
    integer Nagato_PAIN_ID_2=0x45303042 //E00B
    integer Nagato_PAIN_ID_3=0x45303043 //E00C
    integer Nagato_PAIN_ID_4=0x45303044 //E00D
    integer Nagato_PAIN_ID_5=0x45303045 //E00E
    integer Nagato_PAIN_ID_6=0x45303046 //E00F
или может исключить имбу, а клонов в бой на арену? тогда придеться переделать систему.
функцию DuelPrestart надо перезаписать.
только вызывают целые вопросы. клоны - герои. если они мертвы, перед ареной их оживить, после арены убить?
есть карта я код с всеми способности нагато отсортировал для удобства
по поводу переключения
триггер выбора
function Nagato___PainClickGetJutsuCheck takes string str,integer whatValue returns integer
local integer l__Nagato_value=0
if str=="влево"then
if whatValue==5 then
if Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
endif
elseif whatValue==4 then
if Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
endif
elseif whatValue==3 then
if Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
endif
elseif whatValue==2 then
if Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
endif
elseif whatValue==1 then
if Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
endif
elseif whatValue==6 then
if Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
endif
endif
elseif str=="вправо"then
if whatValue==2 then
if Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
endif
elseif whatValue==3 then
if Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
endif
elseif whatValue==4 then
if Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
endif
elseif whatValue==5 then
if Nagato_PainExist[5]then
set l__Nagato_value=5
elseif Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
endif
elseif whatValue==6 then
if Nagato_PainExist[6]then
set l__Nagato_value=6
elseif Nagato_PainExist[1]then
set l__Nagato_value=1
elseif Nagato_PainExist[2]then
set l__Nagato_value=2
elseif Nagato_PainExist[3]then
set l__Nagato_value=3
elseif Nagato_PainExist[4]then
set l__Nagato_value=4
elseif Nagato_PainExist[5]then
set l__Nagato_value=5
endif
endif
endif
return l__Nagato_value
endfunction
function cj_anonym__523 takes nothing returns nothing
set Nagato_painClickSound=false
call DestroyTimer(GetExpiredTimer())
endfunction
function Nagato___PainClickGetJutsu takes integer id,unit u,string str returns nothing
local boolean camLog=false
local integer i=1
loop
if Nagato_JutsuActive[i]!=0 then
call SetPlayerAbilityAvailable(Nagato_p,Nagato_JutsuActive[i],false)
endif
set i=i+1
exitwhen i>5
endloop
if str=="клик"then
    set Nagato_PainSelectedNumberNext=0
    if id==Nagato_PAIN_ID_1 then
        set Nagato_JutsuActive[1]=0x41303959//A09Y
        set Nagato_JutsuActive[2]=0x4130395A//A09Z
        set Nagato_JutsuActive[3]=0x4130574C//A0WL
        set Nagato_JutsuActive[4]=0x41304833//A0H3
        set Nagato_JutsuActive[5]=0x41304530//A0E0
        call Sound3D(u,"Nagato Pain 1 Chikushodo.mp3")
    elseif id==Nagato_PAIN_ID_2 then
        set Nagato_JutsuActive[1]=0x41304842//A0HB
        set Nagato_JutsuActive[2]=0
        set Nagato_JutsuActive[3]=0
        set Nagato_JutsuActive[4]=0
        set Nagato_JutsuActive[5]=0
        call Sound3D(u,"Nagato Pain 2 Gakido.mp3")
    elseif id==Nagato_PAIN_ID_3 then
        set Nagato_JutsuActive[1]=0x41305730//A0W0
        set Nagato_JutsuActive[2]=0
        set Nagato_JutsuActive[3]=0
        set Nagato_JutsuActive[4]=0
        set Nagato_JutsuActive[5]=0
        call Sound3D(u,"Nagato Pain 3 Ningendo.mp3")
    elseif id==Nagato_PAIN_ID_4 then
        set Nagato_JutsuActive[1]=0x41304157//A0AW
        set Nagato_JutsuActive[2]=0x41304543//A0EC
        set Nagato_JutsuActive[3]=0
        set Nagato_JutsuActive[4]=0
        set Nagato_JutsuActive[5]=0
        call Sound3D(u,"Nagato Pain 4 Shurado.mp3")
    elseif id==Nagato_PAIN_ID_5 then
        set Nagato_JutsuActive[1]=0x41304741//A0GA
        set Nagato_JutsuActive[2]=0x41305658//A0VX
        set Nagato_JutsuActive[3]=0
        set Nagato_JutsuActive[4]=0
        set Nagato_JutsuActive[5]=0
        call Sound3D(u,"Nagato Pain 5 Jigokudo.mp3")
    elseif id==Nagato_PAIN_ID_6 then
        set Nagato_JutsuActive[1]=0x41303551//A05Q
        set Nagato_JutsuActive[2]=0x41303534//A054
        set Nagato_JutsuActive[3]=0x41303457//A04W
        set Nagato_JutsuActive[4]=0
        set Nagato_JutsuActive[5]=0
        call Sound3D(u,"Nagato Pain 6 Tendo.mp3")
    endif
elseif str=="влево"then
set camLog=true
if Nagato_PainSelectedNumberNext==0 then
if Nagato_PainExist[6]then
set Nagato_PainSelectedNumberNext=6
elseif Nagato_PainExist[5]then
set Nagato_PainSelectedNumberNext=5
elseif Nagato_PainExist[4]then
set Nagato_PainSelectedNumberNext=4
elseif Nagato_PainExist[3]then
set Nagato_PainSelectedNumberNext=3
elseif Nagato_PainExist[2]then
set Nagato_PainSelectedNumberNext=2
elseif Nagato_PainExist[1]then
set Nagato_PainSelectedNumberNext=1
endif
endif
if Nagato_PainExist[6]and Nagato_PainSelectedNumberNext==6 then
set u=Nagato___PainUnit[6]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("влево",5)
set Nagato_JutsuActive[1]=0x41303551
set Nagato_JutsuActive[2]=0x41303534
set Nagato_JutsuActive[3]=0x41303457
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 6 Tendo.mp3")
elseif Nagato_PainExist[5]and Nagato_PainSelectedNumberNext==5 then
set u=Nagato___PainUnit[5]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("влево",4)
set Nagato_JutsuActive[1]=0x41304741
set Nagato_JutsuActive[2]=0x41305658
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 5 Jigokudo.mp3")
elseif Nagato_PainExist[4]and Nagato_PainSelectedNumberNext==4 then
set u=Nagato___PainUnit[4]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("влево",3)
set Nagato_JutsuActive[1]=0x41304157
set Nagato_JutsuActive[2]=0x41304543
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 4 Shurado.mp3")
elseif Nagato_PainExist[3]and Nagato_PainSelectedNumberNext==3 then
set u=Nagato___PainUnit[3]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("влево",2)
set Nagato_JutsuActive[1]=0x41305730
set Nagato_JutsuActive[2]=0
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 3 Ningendo.mp3")
elseif Nagato_PainExist[2]and Nagato_PainSelectedNumberNext==2 then
set u=Nagato___PainUnit[2]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("влево",1)
set Nagato_JutsuActive[1]=0x41304842
set Nagato_JutsuActive[2]=0
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 2 Gakido.mp3")
elseif Nagato_PainExist[1]and Nagato_PainSelectedNumberNext==1 then
set u=Nagato___PainUnit[1]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("влево",6)
set Nagato_JutsuActive[1]=0x41303959
set Nagato_JutsuActive[2]=0x4130395A
set Nagato_JutsuActive[3]=0x4130574C
set Nagato_JutsuActive[4]=0x41304833
set Nagato_JutsuActive[5]=0x41304530
call Sound3D(u,"Nagato Pain 1 Chikushodo.mp3")
endif
elseif str=="вправо"then
set camLog=true
if Nagato_PainSelectedNumberNext==0 then
if Nagato_PainExist[1]then
set Nagato_PainSelectedNumberNext=1
elseif Nagato_PainExist[2]then
set Nagato_PainSelectedNumberNext=2
elseif Nagato_PainExist[3]then
set Nagato_PainSelectedNumberNext=3
elseif Nagato_PainExist[4]then
set Nagato_PainSelectedNumberNext=4
elseif Nagato_PainExist[5]then
set Nagato_PainSelectedNumberNext=5
elseif Nagato_PainExist[6]then
set Nagato_PainSelectedNumberNext=6
endif
endif
if Nagato_PainExist[1]and Nagato_PainSelectedNumberNext==1 then
set u=Nagato___PainUnit[1]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("вправо",2)
set Nagato_JutsuActive[1]=0x41303959
set Nagato_JutsuActive[2]=0x4130395A
set Nagato_JutsuActive[3]=0x4130574C
set Nagato_JutsuActive[4]=0x41304833
set Nagato_JutsuActive[5]=0x41304530
call Sound3D(u,"Nagato Pain 1 Chikushodo.mp3")
elseif Nagato_PainExist[2]and Nagato_PainSelectedNumberNext==2 then
set u=Nagato___PainUnit[2]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("вправо",3)
set Nagato_JutsuActive[1]=0x41304842
set Nagato_JutsuActive[2]=0
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 2 Gakido.mp3")
elseif Nagato_PainExist[3]and Nagato_PainSelectedNumberNext==3 then
set u=Nagato___PainUnit[3]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("вправо",4)
set Nagato_JutsuActive[1]=0x41305730
set Nagato_JutsuActive[2]=0
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 3 Ningendo.mp3")
elseif Nagato_PainExist[4]and Nagato_PainSelectedNumberNext==4 then
set u=Nagato___PainUnit[4]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("вправо",5)
set Nagato_JutsuActive[1]=0x41304157
set Nagato_JutsuActive[2]=0x41304543
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 4 Shurado.mp3")
elseif Nagato_PainExist[5]and Nagato_PainSelectedNumberNext==5 then
set u=Nagato___PainUnit[5]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("вправо",6)
set Nagato_JutsuActive[1]=0x41304741
set Nagato_JutsuActive[2]=0x41305658
set Nagato_JutsuActive[3]=0
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 5 Jigokudo.mp3")
elseif Nagato_PainExist[6]and Nagato_PainSelectedNumberNext==6 then
set u=Nagato___PainUnit[6]
set Nagato_PainSelectedNumberNext=Nagato___PainClickGetJutsuCheck("вправо",1)
set Nagato_JutsuActive[1]=0x41303551
set Nagato_JutsuActive[2]=0x41303534
set Nagato_JutsuActive[3]=0x41303457
set Nagato_JutsuActive[4]=0
set Nagato_JutsuActive[5]=0
call Sound3D(u,"Nagato Pain 6 Tendo.mp3")
endif
endif
set i=1
loop
if Nagato_PainExist[i]then
if Nagato___PainUnit[i]==u then
call SetTextTagColor(Nagato___PainText[i],165,253,0,0)
else
call SetTextTagColor(Nagato___PainText[i],255,255,255,0)
endif
endif
set i=i+1
exitwhen i>6
endloop
set i=1
loop
if Nagato_JutsuActive[i]!=0 then
if GetUnitAbilityLevel(Nagato_c,Nagato_JutsuActive[i])>0 then
call SetPlayerAbilityAvailable(Nagato_p,Nagato_JutsuActive[i],true)
else
call UnitAddAbility(Nagato_c,Nagato_JutsuActive[i])
endif
endif
set i=i+1
exitwhen i>5
endloop
set Nagato_painClickSound=true
call TimerStart(CreateTimer(),1.,false,function cj_anonym__523)
if GetLocalPlayer()==Nagato_p then
call ClearSelection()
call SelectUnit(Nagato_c,true)
endif
if camLog then
if GetLocalPlayer()==Nagato_p then
call ResetToGameCamera(0.)
call PanCameraToTimed(GetWidgetX(u),GetWidgetY(u),0.)
endif
endif
set Nagato___PainClicked=null
endfunction


function Nagato___PainClickConditions takes nothing returns boolean
return GetTriggerPlayer()==Nagato_p and IsUnitPain(GetTriggerUnit())and Nagato___PainClickNumber<2
endfunction
function cj_anonym__524 takes nothing returns nothing
set Nagato___PainClickNumber=Nagato___PainClickNumber-1
call DestroyTimer(GetExpiredTimer())
endfunction
function Nagato___PainClickActions takes nothing returns nothing
local unit u=GetTriggerUnit()
local integer i=1
set Nagato___PainClickNumber=Nagato___PainClickNumber+1
if not Nagato___PainFirst then
set Nagato___PainFirst=true
call DisplayTimedTextToPlayer(Nagato_p,0.,0.,20.,"|cFFFF5000Чтобы открыть способности Пейнов, используйте стрелки влево-вправо-вниз на клавиатуре, либо в течение 0,25 секунд выберите нужного Пейна дважды!|r")
endif
if Nagato___PainClickNumber==1 then
set Nagato___PainClicked=u
endif
if Nagato___PainClickNumber==2 and u==Nagato___PainClicked then
call Nagato___PainClickGetJutsu(GetUnitTypeId(u),u,"клик")//+
endif
call TimerStart(CreateTimer(),.25,false,function cj_anonym__524)//+
set u=null
endfunction
кнопки переключения

function Nagato___PainKeyDownConditions takes nothing returns boolean
return GetUnitAbilityLevel(udg_Hero[GetPlayerId(GetTriggerPlayer())],Nagato_RIKUDO_CANCEL)>0
endfunction
function Nagato___PainKeyDownActions takes nothing returns nothing
local integer i=1
if GetLocalPlayer()==Nagato_p then
call ClearSelection()
call SelectUnit(Nagato_c,true)
endif
loop
if Nagato_PainExist[i]then
if GetLocalPlayer()==Nagato_p then
call SelectUnit(Nagato___PainUnit[i],true)
endif
endif
set i=i+1
exitwhen i>6
endloop
endfunction
function Nagato___PainKeyRightConditions takes nothing returns boolean
return GetUnitAbilityLevel(udg_Hero[GetPlayerId(GetTriggerPlayer())],Nagato_RIKUDO_CANCEL)>0
endfunction
function Nagato___PainKeyRightActions takes nothing returns nothing
call Nagato___PainClickGetJutsu(0,null,"вправо")
endfunction
function Nagato___PainKeyLeftConditions takes nothing returns boolean
return GetUnitAbilityLevel(udg_Hero[GetPlayerId(GetTriggerPlayer())],Nagato_RIKUDO_CANCEL)>0
endfunction
function Nagato___PainKeyLeftActions takes nothing returns nothing
call Nagato___PainClickGetJutsu(0,null,"влево")
endfunction
	call Trigger...RegisterPlayerEvent(trigkeyleft,Player(i),EVENT_PLAYER_ARROW_LEFT_DOWN)
    call TriggerRegisterPlayerEvent(trigkeyright,Player(i),EVENT_PLAYER_ARROW_RIGHT_DOWN)
    call TriggerRegisterPlayerEvent(trigkeydown,Player(i),EVENT_PLAYER_ARROW_DOWN_DOWN)
    call TriggerRegisterPlayerUnitEvent(Nagato___PainSelectTrig,Player(i),EVENT_PLAYER_UNIT_SELECTED,null)

call TriggerAddCondition(Nagato___PainSelectTrig,Condition(function Nagato___PainClickConditions))
call TriggerAddAction(Nagato___PainSelectTrig,function Nagato___PainClickActions)
call TriggerAddCondition(trigkeyleft,Condition(function Nagato___PainKeyLeftConditions))
call TriggerAddAction(trigkeyleft,function Nagato___PainKeyLeftActions)
call TriggerAddCondition(trigkeyright,Condition(function Nagato___PainKeyRightConditions))
call TriggerAddAction(trigkeyright,function Nagato___PainKeyRightActions)
call TriggerAddCondition(trigkeydown,Condition(function Nagato___PainKeyDownConditions))
call TriggerAddAction(trigkeydown,function Nagato___PainKeyDownActions)
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
26
6 лет назад
0
TomHollow, скинь триггеры или карту.
1
2
6 лет назад
1
Если будете вносить изменения, то оставьте описание, чтоб я быстро нашёл. Заранее спасибо
В идеале сделать способности этим юнитам в них же самих, а не через призывника листать. Заморочка дикая переключаться. Заранее спасибо.
Загруженные файлы
0
2
6 лет назад
0
0
26
6 лет назад
0
TomHollow, чего-то непонятно, отчего способности сбиваются. Тем более указал, что они не у юнита, а у призывника. Скинь всю карту.
0
2
6 лет назад
Отредактирован TomHollow
0
8gabriel8, открываю карту после импортирую объекты. Карта с патчем поэтому кругом одни квадраты. Возможно они сбиваются, потому что способности ещё стоят по умолчанию у призваных юнитов. Ну а если они не стоят у призваных, то играть отвратетильно. Постоянно рука должна летать по клавиатуре.
Сбиваются способности*
Загруженные файлы
0
26
6 лет назад
0
TomHollow, под патчем имеешь ввиду *.w3o или что?
Карту гляну позже, сейчас на работе.
0
2
6 лет назад
Отредактирован TomHollow
0
8gabriel8, не. Подразумеваю mix. Карта спокойно открывается(депротектил), но открывается вся в квадратах. w3o я туда экспортирую все изменения не сохраняя карту. В w3o последнии мои изменения. Мне не столь важны декорации на карте, как характеристики способностей и прочее. Поэтому я редактирую только объекты и jass.
Персонажа зовут Nagato, а призывает он Пейн 1(Pain -1) Пейн 2 и до 6.
0
26
6 лет назад
0
TomHollow, а какой персонаж не должен вызываться на арену?
0
2
6 лет назад
0
Nagato призывает. Он и не должен.
8gabriel8, будут вопросы любые по поводу "прокачки" и прочее - спрашивай
0
26
6 лет назад
0
TomHollow, скачал *.mix, но кусты так и не появились, поиграл немного, чтобы увидеть принципы работы того, что искать в триггерах, однако параллельно кучей вопросов занимался, потому просто не хватило времени разобраться.
Попозже опять посмотрю (завтра).
0
2
6 лет назад
Отредактирован TomHollow
0
8gabriel8, c этим патчем и картой должно всё отображать отчётливо. Карта защищенная, но потестить и узнать что да как можно в ней.
Обычно для исправления чего либо я добавляю filelist в MPQ Editor и заменяю файлы по типу war3map./// , а их я беру из World Editor через экспорт объектов. Триггеры соответственно редактирую в текстовом Notepad++.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.