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

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

Ответ
 
Печатник lvl1
Typo
offline
Опыт: 4,157
Активность:
Цикл несмотря на условия завершается
После того как вставил в цикл ещё один цикл, первый перестал работать. В отчаянии я уже внутренний цикл сунул в отдельную функцию и вызываю её. Толку ноль. Но, если убрать вызов Сloop, то первый цикл начинает работать o0

Код:
function cst takes integer i, integer ty returns integer
 local integer id
 if ty == 0 then
 if i <= 2 then
 set id = 'hspt'
 elseif i == 3 then
 set id = 'hmtm'
 endif
elseif ty == 1 then
 if i <= 2 then
 set id = 'hfoo'
 elseif i == 3 then
 set id = 'hsor'
 endif
endif
return id
endfunction

function Сloop takes real x, real y, player ow, integer ty returns nothing
local unit u
local integer j = 0
 loop
  exitwhen cst(j,ty) == 0
  set u = CreateUnit(ow,cst(j,ty),x,y,180)
  set j = j + 1
  set u=null
  endloop
endfunction

function Creeps takes nothing returns nothing
local real x
local real y
local integer i = 0
local integer ty
local player ow
loop                            
exitwhen i > 4
set x = GetRectCenterX (udg_start_rects[i])  
set y = GetRectCenterY (udg_start_rects[i])
set ty = udg_start_rects_type[i]
set ow = udg_start_rects_ow[i]
call Сloop (x,y,ow,ty) 
set i = i + 1
endloop
endfunction

function Trig_Creepsinit_Actions takes nothing returns nothing

local timer t = CreateTimer()
call TimerStart (t,2,true,function Creeps)


set udg_start_rects[0] = gg_rct_ne
set udg_start_rects_ow[0] = Player(0)
set udg_start_rects_type[0] = 0

set udg_start_rects[1] = gg_rct_sw
set udg_start_rects_ow[1] = Player(1)
set udg_start_rects_type[1] = 0

set udg_start_rects[2] = gg_rct_ne1
set udg_start_rects_ow[2] = Player(0)
set udg_start_rects_type[0] = 1

set udg_start_rects[3] = gg_rct_sw1
set udg_start_rects_ow[3] = Player(1)
set udg_start_rects_type[3] = 1


set t=null
endfunction

Отредактировано Печатник lvl1, 11.04.2009 в 22:30.
Старый 11.04.2009, 20:37
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Что эт за условие выхода из 2 цикла?
Старый 11.04.2009, 21:30
Печатник lvl1
Typo
offline
Опыт: 4,157
Активность:
Если функция CST с параметрами j b ty возвратит 0. и это норм работает.
Старый 11.04.2009, 21:47
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Ясное дело, что за функция-то? Я не могу карту посмотреть, и еще очень странно, что ты ее используешь в создании юнита
Старый 11.04.2009, 21:54
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
» code

Код:
function cst takes integer i, integer ty returns integer
//Эта функция у тебя не обрабатывает ty=2,ty=3,ty=4
//Поэтому раньше здесь была логическая ошибка
    if ty == 0 then
        if i <= 2 then
            return 'hspt'
        elseif i == 3 then
            return 'hmtm'
        endif
    elseif ty == 1 then
        if i <= 2 then
            return 'hfoo'
        elseif i == 3 then
            return 'hsor'
        endif
    endif
    return 0
endfunction

function Creeps takes nothing returns nothing
    local real x
    local real y
    local unit u
    local integer i = 0
    local integer j = 0
    local integer t
    local player p
    loop                            
    exitwhen i > 4
        set x = GetRectCenterX (udg_start_rects[i])  
        set y = GetRectCenterY (udg_start_rects[i])
        set t = udg_start_rects_type[i]
        set ow = udg_start_rects_ow[i]
        loop
        exitwhen cst(j,t) == 0
            set u = CreateUnit(ow,cst(j,t),x,y,180)
            set j = j + 1
        endloop
        set i = i + 1
    endloop
    set u=null
endfunction

Отредактировано Hellfim, 11.04.2009 в 22:14.
Старый 11.04.2009, 22:02
Печатник lvl1
Typo
offline
Опыт: 4,157
Активность:
обновил код.
Функция на разные значения параметров даёт разные ид юнитов.

Цитата:
Сейчас будет дописано -.-


это не пашет.

Отредактировано Печатник lvl1, 11.04.2009 в 22:08.
Старый 11.04.2009, 22:03
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Фиксед, смотри пост выше
Старый 11.04.2009, 22:08
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
А с чего ты взял, что функция когда-то вернет 0?
Старый 11.04.2009, 22:11
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Артте, я вставил цикл с условием автора, я не знаю что он хотел сделать.

Hellfim добавил:
Там у него вообще какой-то алгоритм косячный

Печатник lvl1, тебе чего сделать-то надо?
Старый 11.04.2009, 22:16
Артте
Open up your eyes
offline
Опыт: 23,423
Активность:
Я то к его 1 посту писал, твой код как раз норм
Старый 11.04.2009, 22:17
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Артте, какая разница, код норм, но он не сделает того чего хочет автор, я уверен в этом на 88% =)
Старый 11.04.2009, 22:18
Печатник lvl1
Typo
offline
Опыт: 4,157
Активность:
Накосячил с ветвлениями) Щас заработало)
Спасибо, помогли.
Код такой чтоб на n количестве областей с заданными заранее параметрами, появлялось конкретное количеств юнитов конкретного типа (cst выдаёт ид).
Тему можно закрыть.

Отредактировано Печатник lvl1, 12.04.2009 в 23:56.
Старый 11.04.2009, 22:28
Ответ

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

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

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

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



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