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

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

Ответ
 
sleepw

offline
Опыт: 8,449
Активность:
Рандом массива
кхкх..
хелр написать нормальный рандом.

есть массив в него затыканы разные триггеры.

и мне надо триг который бы выбирал рандом из массива,запускал его и обнулял выбранный массив.А при следующем вызове чтобы в рандом не входил обнулённый массив.

вод я сделал так,но бывает что долго генерит если уже много массивов обнулены..
Код:
function Trig_questsGen_Actions takes nothing returns nothing
local integer i=GetRandomInt(1,20)

if udg_TriggerGen[i]!=null then
 call ConditionalTriggerExecute(udg_TriggerGen[i])
 set udg_TriggerGen[i]=null
else
 call TriggerExecute( GetTriggeringTrigger() )
endif
endfunction


и ещё если возможно) если все массивы обнулены,тоесть уже нечего рандомить,запустить такойто триг.

Отредактировано sleepw, 25.03.2008 в 06:27.
Старый 25.03.2008, 04:28
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Код:
globals
  udg_imax = 20  //кол-во триггеров в массиве
  ...
endglobals

function Trig_questsGen_Actions takes nothing returns nothing
  local integer i = GetRandomInt(1,udg_imax)
  call ConditionalTriggerExecute(udg_TriggerGen[i])
  set udg_TriggerGen[i] = udg_TriggerGen[udg_imax]
  set udg_imax = udg_imax-1

  if udg_imax == 0 then call TriggerExecute(YourTrigger)  // Запустить YourTrigger, если весь массив использован
endfunction
Старый 25.03.2008, 06:40
sleepw

offline
Опыт: 8,449
Активность:
о, то что надо.. сенки огромное.
Старый 25.03.2008, 07:29
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Надеюсь смысл понял и разобрался в коде, а не тупо копипаст. Если первое, то пажалуста ))
Старый 25.03.2008, 16:35
sleepw

offline
Опыт: 8,449
Активность:
ну понятное дело перет тем как впихнуть вдумался)
Старый 25.03.2008, 16:42
J
expert
offline
Опыт: 48,447
Активность:
Кстате, если у тебя еще мб нужно обнулять рандомный выбор то можно сделать так:
Код:
function Trig_questsGen_Actions takes nothing returns nothing
    local integer i = GetRandomInt(1,udg_imax)
    local trigger trig = udg_TriggerGen[i]
    call ConditionalTriggerExecute(trig)
    set udg_TriggerGen[i] = udg_TriggerGen[udg_imax]
    set udg_TriggerGen[udg_imax] = trig
    set udg_imax = udg_imax-1
    if udg_imax == 0 then call TriggerExecute(YourTrigger)
endfunction

т.е. сылки на триггеры не теряются и обнуление производится просто установлению переменной udg_imax значения 20, и рандом опаять будет идти от всех тригов по одному
Старый 25.03.2008, 16:52
Ответ

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

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

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

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



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