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

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

Закрытая тема
 
krovatka

offline
Опыт: 102
Активность:
Цикл: создание юнита для играющего игрока
Здравствуйте. Только начал изучать jass. Столкнулся с проблемой. Требуется помощь. Желательно тыкнуть носом в ошибки.
Мне нужно, чтобы WE проверял, занят ли слот игроком и создавал для него светлячка около дерева. На GUI это выглядет очень громоздко и я решил оптимизировать все на jass
Вот мой код: WE выдает кучу ошибок.
function Trig_Spawn_Conditions takes nothing returns boolean
    return ( GetPlayerSlotState(Player(n)) == PLAYER_SLOT_STATE_PLAYING )
endfunction

function Trig_Spawn_Actions takes nothing returns nothing
   local Integer n ==0
   loop
  exitwhen n > 2
     if ( Trig_Spawn_Conditions() ) then
      call CreateNUnitsAtLoc( 1, 'e001', Player(n), GetUnitLoc(gg_unit_e000_0000), bj_UNIT_FACING )
     else
        call DoNothing(  )
     set n = n + 1
     endloop
endfunction

//===========================================================================
function InitTrig_Spawn takes nothing returns nothing
    set gg_trg_Spawn = CreateTrigger(  )
    call TriggerAddCondition( gg_trg_Spawn, Condition( function Trig_Spawn_Conditions ) )
    call TriggerAddAction( gg_trg_Spawn, function Trig_Spawn_Actions )
endfunction
Я думал создать локальную переменную "n" - как номер игрока. Проверять условие (играет?) и создавать для него светлячка.
После n+1. И заного. И так до 3 игроков в команде.
Буду благодарен за любую помощь.
[+] замечание от Doc: Используйте тег кода.

Отредактировано Doc, 11.08.2011 в 00:28.
Старый 11.08.2011, 00:20
Doc

offline
Опыт: 63,163
Активность:
function Trig_Spawn_Actions takes nothing returns nothing
   local integer n = 0
   loop
   exitwhen n > 2
     if (GetPlayerSlotState(Player(n)) == PLAYER_SLOT_STATE_PLAYING) then
         call CreateUnit(Player(n), 'e001', GetUnitX(gg_unit_e000_0000), GetUnitY(gg_unit_e000_0000), 0.)
     set n = n + 1
     endloop
endfunction

function InitTrig_Spawn takes nothing returns nothing
    set gg_trg_Spawn = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Spawn, function Trig_Spawn_Actions )
endfunction
Старый 11.08.2011, 00:31
krovatka

offline
Опыт: 102
Активность:
Doc, Спасибо, конечно. Но запустив его он выдает ошибку "Нет endif". И я без понятия, куда его вставить.
И я не очень понимаю, что ты сделал с функцией создания юнита. Это оптимизация такая?
Удалось избавится от endif добавив.
else
call DoNothing(  )
endif
     
Теперь непонятные ошибки с названиями...

Отредактировано krovatka, 11.08.2011 в 00:47.
Старый 11.08.2011, 00:36
Dreii
define{name=Dreii age=17}
offline
Опыт: 5,246
Активность:
krovatka,
Код:
function Trig_Spawn_Actions takes nothing returns nothing
   local Integer n ==0
   loop
  exitwhen n > 2
     if GetPlayerSlotState(Player(n)) == PLAYER_SLOT_STATE_PLAYING then
      call CreateUnit(Player(n),'e001',GetRectCenterX(gg_unit_e000_0000),GetRectCenterY(gg_  unit_e000_0000),bj_UNIT_FACING )
      endif
    set n = n + 1
     endloop
endfunction

//===========================================================================
function InitTrig_Spawn takes nothing returns nothing
    set gg_trg_Spawn = CreateTrigger(  )
      call TriggerAddAction( gg_trg_Spawn, function Trig_Spawn_Actions )
endfunction

Рабочий
Старый 11.08.2011, 00:48
krovatka

offline
Опыт: 102
Активность:
Dreii, И этот не канает. Первая ошибка "Отсутствует зарезервированный тип или тип идентификатора" и выделяет строку local Integer n ==0.
Может я что-то делаю не так? И куда вы дели третий блок триггера - Conditions? Его не обязательно учитывать?
Не знаю. Если это поможет, вот моя карта.
Прикрепленные файлы
Тип файла: w3x Map1.w3x (19.8 Кбайт, 3 просмотров )

Отредактировано krovatka, 11.08.2011 в 01:08.
Старый 11.08.2011, 00:55
Doc

offline
Опыт: 63,163
Активность:
function Trig_Spawn_Actions takes nothing returns nothing
   local integer n = 0
   loop
   exitwhen n > 2
     if (GetPlayerSlotState(Player(n)) == PLAYER_SLOT_STATE_PLAYING) then
         call CreateUnit(Player(n), 'e001', GetUnitX(gg_unit_e000_0000), GetUnitY(gg_unit_e000_0000), 0.)
     endif
     set n = n + 1
     endloop
endfunction

function InitTrig_Spawn takes nothing returns nothing
    set gg_trg_Spawn = CreateTrigger(  )
    call TriggerAddAction( gg_trg_Spawn, function Trig_Spawn_Actions )
endfunction
Ну вот все должно работать, что еще?
Старый 11.08.2011, 01:43
krovatka

offline
Опыт: 102
Активность:
Doc, Работает. Триггер запустился. Но свою задачу не выполнил. Светляк не создался.
Старый 11.08.2011, 10:13
FLESHNIK

offline
Опыт: 384
Активность:
function Trig_Spawn_Actions takes nothing returns nothing
   local integer n = 0
   loop
   exitwhen n > 2
     if (GetPlayerSlotState(Player(n)) == PLAYER_SLOT_STATE_PLAYING) then
         call CreateUnit(Player(n), 'e001', GetUnitX(gg_unit_e000_0000), GetUnitY(gg_unit_e000_0000), 0.)
     endif
     set n = n + 1
     endloop
endfunction

function InitTrig_Spawn takes nothing returns nothing
    set gg_trg_Spawn = CreateTrigger(  )
    call TriggerRegisterTimerEvent(gg_trg_Spawn, 0.1, false)
    call TriggerAddAction( gg_trg_Spawn, function Trig_Spawn_Actions )
endfunction
Старый 11.08.2011, 10:40
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
function InitTrig_Spawn takes nothing returns nothing
   local integer n = 0
   loop
   exitwhen n > 2
     if (GetPlayerSlotState(Player(n)) == PLAYER_SLOT_STATE_PLAYING) then
         call CreateUnit(Player(n), 'e001', GetUnitX(gg_unit_e000_0000), GetUnitY(gg_unit_e000_0000), 0.)
     endif
     set n = n + 1
     endloop
endfunction
Старый 11.08.2011, 10:45
krovatka

offline
Опыт: 102
Активность:
FLESHNIK, Master_chan, Оба работают как надо. Спасибо!
Теперь осталось понять, что вы сделали. =)
Старый 11.08.2011, 11:14
Doc

offline
Опыт: 63,163
Активность:
Лол ну так офк он не инициализировался, о чем речь.
Старый 11.08.2011, 14:08
Закрытая тема

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

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

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

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



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