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

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

Ответ
 
J
expert
offline
Опыт: 48,447
Активность:
это все можно переписать под триги почти без потери оптимизации, но опятьже таки мне лень, на джазе я проще смыслю т.к. сразу вижу больше

Jon добавил:
незабудь что функцию Init() нужно выполнять при загрузке карты
Старый 23.02.2008, 16:04
sleepw

offline
Опыт: 8,449
Активность:
а ещё вопрос зачем там нужны глобалки?.. вернее что они делают?:)

sleepw добавил:
зы сохраняю
ругается:
Symbol udg_HeroesAll multiply defined --- unit array udg_HeroesAll
Symbol udg_MaxIndex multiply defined --- unit array udg_MaxIndex
Cannot convert integer to unit --- local unit Select= udg_HeroesAll[rand]
Cannot convert integer to unit --- call CreateNUnitsAtLoc(1 , hero , Player(i) , GetRectCenter(GetPlayableMapRect()) , bj_UNIT_FACING)



Код:
globals
   unit array udg_HeroesAll 
   integer udg_MaxIndex 
endglobals

function RandomHero takes nothing returns unit
    local integer rand = GetRandomInt(0, udg_MaxIndex)
    local unit Select = udg_HeroesAll[rand]
    set udg_HeroesAll[rand] = udg_HeroesAll[udg_MaxIndex]
    set udg_MaxIndex = udg_MaxIndex - 1
    return Select
endfunction

function Trig_Rndm_Actions takes nothing returns nothing
    local integer i = 0
    local unit hero
    loop
        exitwhen i > 11
        if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
            set hero = RandomHero()
            //...
            //Создать hero Для игрока i+1
            //...
            call CreateNUnitsAtLoc( 1, hero, Player(i), GetRectCenter(GetPlayableMapRect()), bj_UNIT_FACING )
            call DisplayTimedTextToForce(GetPlayersAll(),8,GetPlayerNameColor(GetPlayerId(GetOwni  ngPlayer(GetLastCreatedUnit())))+" has randomly selected the "+GetUnitName(GetLastCreatedUnit()))
        endif
        set i = i + 1
    endloop
endfunction

//===========================================================================
function InitTrig_Rndm takes nothing returns nothing
    set gg_trg_Rndm = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Rndm, function Trig_Rndm_Actions )
endfunction
Старый 23.02.2008, 16:23
J
expert
offline
Опыт: 48,447
Активность:
Пожалуста, вот на локалках:
Код:
function RandomHeroForPlayers takes nothing returns nothing   
    local integer i = 0
    local unit hero
    local integer rand
    local unit array Heroes          
    // Укажи Самый послдений занятый слот в массиве
    local integer MaxIndex = 2
    // Заполни массив героев начиная со слота номер [0] и по порядку
    set Heroes[0] = ...                        
    set Heroes[1] = ... 
    set Heroes[2] = ... 
    loop
        exitwhen i > 11
        if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
            set rand = GetRandomInt(0, udg_MaxIndex)
            set hero = udg_Heroes[rand]
            set Heroes[rand] = Heroes[udg_MaxIndex]
            set MaxIndex = MaxIndex - 1
            //...
            //Создать hero Для игрока i+1
            //...
        endif
        set i = i + 1
    endloop
endfunction


Jon добавил:
я надеюсь ты это не стал в коде писать:
Код:
globals
   unit array udg_HeroesAll 
   integer udg_MaxIndex 
endglobals

или у тебя ген пак?
Старый 23.02.2008, 16:28
sleepw

offline
Опыт: 8,449
Активность:
не давай уже тот разберём..так я начал его уже долбить)
с multiply defined разобрался убрал глобалки ибо они уже есть и в другом триге запихиваются..
а вот что с Cannot convert integer to unit я не так сделал?

sleepw добавил:
Jon
ген пак.. но тоу же неважно.. с глобалками проехали. теперь вот с тем как быть?)
Старый 23.02.2008, 16:29
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
call CreateNUnitsAtLoc( 1, hero, Player(i), GetRectCenter(GetPlayableMapRect()), bj_UNIT_FACING )

hero - это юнит
А ты создаеш юнита, и тебе нужен не юнит а его тип (интегер)
В этом случае переправь тип массива и тип селекта и тип hero на интегер

Jon добавил:
Код:
globals
   integer array udg_Heroes 
   integer udg_MaxIndex 
endglobals

function Init takes nothing returns nothing
    //При загрузке карты заполни массив героев начиная со слота номер [0] и по порядку
    set udg_Heroes[0] = '0000'                        
    set udg_Heroes[1] = '0000' 
    set udg_Heroes[2] = '0000'
    //Укажи Самый послдений занятый слот в массиве
    set udg_MaxIndex = 2
endfunction

function RandomTypeHero takes nothing returns integer
    local integer rand = GetRandomInt(0, udg_MaxIndex)
    local integer Select = udg_Heroes[rand]
    set udg_Heroes[rand] = udg_Heroes[udg_MaxIndex]
    set udg_MaxIndex = udg_MaxIndex - 1
    return Select
endfunction
Код:
function Action takes nothing returns nothing
    local integer i = 0
    local integer hero
    loop
        exitwhen i > 11
        if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING then
            set hero = RandomTypeHero()
            //...
            //Создать hero Для игрока i+1
            //...
        endif
        set i = i + 1
    endloop
endfunction
Старый 23.02.2008, 16:34
sleepw

offline
Опыт: 8,449
Активность:
Jon
огромное тебе спасибо!
вроде бы работает.. ещё потестаю..
супер:)
Старый 23.02.2008, 16:42
Ответ

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

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

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

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



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