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

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

Ответ
 
MariK

offline
Опыт: 1,181
Активность:
Кусочек кода
Вообщем проблема такая нужен движок мультиборда как в доте, а именно его часть где используются таймеры. У меня есть свой код:

Код:
function Trig_Timer_Actions takes nothing returns nothing
local integer Multi = 1
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 6
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        if GetPlayerSlotState(ConvertedPlayer(GetForLoopIndexA())) == PLAYER_SLOT_STATE_PLAYING then
             set Multi = Multi + 1
             call MultiboardSetItemValueBJ( GetLastCreatedMultiboard(), 4, ( Multi ), I2S(R2I(TimerGetRemaining(udg_timer[GetForLoopIndexA()]))) )
        else
            call DoNothing(  )
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
endfunction

//===========================================================================
function InitTrig_Timer takes nothing returns nothing
    set gg_trg_Timer = CreateTrigger(  )
    call DisableTrigger( gg_trg_Timer )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Timer, 1.0 )
    call TriggerAddAction( gg_trg_Timer, function Trig_Timer_Actions )
endfunction

Кароче принцип действия такой:
Задается переменная равная единице затем идет цикл в котором проверяется условия статус слота игрока под номером "текущее значение А в цыкле" равен играет, то к переменной прибавляется единица и присваивается текст значения таймера[текущее значение А] в столбец 4 и строчку равной переменной. Таймер у меня массив и каждый тааймер соответствует номеру игрока. И событие через каждую секунду. Т.е здесь идет обновление мультиборда, а именно столбца 4 и значений таймеров. Дак только вот моя система работает почемуто только для одного игрока(для красного). Если знаете где ошибка помогите исправить. У меня есть версия, что комп не успевает обработать за секунду этот цыкл, но чето мне в нее струдом верится.

Отредактировано DioD, 16.01.2007 в 05:02.
Старый 15.01.2007, 15:24
J
expert
offline
Опыт: 48,447
Активность:
есть сверх полезный тег... называется [/code]
а ты по сети тестил? или один?
т.к. судя по этой строчке:
Код:
if GetPlayerSlotState(ConvertedPlayer(GetForLoopIndexA())) == PLAYER_SLOT_STATE_PLAYING then

код срабатывать только для одного игрока, и раз ты играл один (и скорее всего первым - красным) то только для тебя и работало...
Старый 15.01.2007, 15:37
MariK

offline
Опыт: 1,181
Активность:
Дак я и пишу что он работает тока за красного, за других нет и не понимаю почему. Так как статус слота остается не изменным до конца игры то значения таймеров сдвинуться на строчку в низ или в верх изза вышедшего игрока не могли. Так что в этой строчке помоему все норм.
Старый 15.01.2007, 15:47
nic666

offline
Опыт: 5,612
Активность:
MariK
а ты в CreateMultiboard указал число строк равное числу игроков?

У тебя же строки мультибоарда в таймере не создаются... значит надо их заранее создать.
Старый 15.01.2007, 15:52
MariK

offline
Опыт: 1,181
Активность:
У меня есть другой скрипт при инициализации делается примерно такая же операция только итогом ее является создание мультиборда с 4 столбцами и кол-вом строк равным переменной.
Старый 15.01.2007, 15:56
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
MariK - а почему "GetLastCreatedMultiboard()" - ты же в этом триггере мультиборд не создаёшь ?
Старый 15.01.2007, 16:07
MariK

offline
Опыт: 1,181
Активность:
Мультиборд создается в другом скрипте, а так ка он один зачем его вводить в переменную если он сам вводиться в ЛастКреэтедМультиборд. я его и использую. Есть мысля я могу выложить карту(типо на исследование) вы посморите чтобы не задавать вопросы.
Старый 15.01.2007, 16:13
Toadcop

offline
Опыт: 54,313
Активность:
Движок мультиборда какой это движок ? это кусок функции...
Старый 15.01.2007, 17:24
MariK

offline
Опыт: 1,181
Активность:
Ну народ ну че тупые вопросы задовать все в первом сообщении написано.... Движком я назвал образец из набора констрыкций который можно подогнать под определенные действия, а именно ТАЙМЕРЫ и их обновления в МУЛЬТИБОРДЕ. чего тут не понятно?
Старый 15.01.2007, 18:29
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
MariK в каком смысле "моя система работает почемуто только для одного игрока(для красного)" ? Мультиборд отображает только его, или вообще мультиборд только на 1 строчку, или только таймер не отображается ?
Старый 15.01.2007, 19:00
adic3x

offline
Опыт: 108,439
Активность:
Могу сказать след:
Код:
function DoNothing takes nothing returns nothing
endfunction
- юзать ее незачем)
Старый 15.01.2007, 22:56
DioD

offline
Опыт: 45,134
Активность:
Читайте статьи товарищЪ, в следующий раз буду подобные темы в вашем исполнении удалять.

Код:
call DisableTrigger( gg_trg_Timer )


триггер выключен
Старый 16.01.2007, 05:05
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
DioD - то что триггер выключен не обязательно значит что в игре он не будет включён! Тем более что для первого игрока ета функция работает(я так понял)!
Старый 16.01.2007, 07:49
DioD

offline
Опыт: 45,134
Активность:
тут нету локального игрока...
или работает или нет
Старый 16.01.2007, 10:11
nic666

offline
Опыт: 5,612
Активность:
DioD
триггер изначально выключен, но раз он вообще как-то работает то чел его где-то включает и дело не в этом. Локальный игрок думаю тоже тут не при чем...
ИМХО... код нормальный и значит проблема не в нем, а в другом коде...

А вот например!

MariK
Цитата:
У меня есть другой скрипт при инициализации делается примерно такая же операция только итогом ее является создание мультиборда с 4 столбцами и кол-вом строк равным переменной.


В инициализации НЕЛЬЯ создавать мультибоард, так как это чаще всего на 99% глючно и сам близард не рекомендует...

Мультибоард лучше создавать в триггере с событием Elapsed 0.01 Game time...



Проверь!
Старый 16.01.2007, 11:57
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
триггер изначально выключен

всмысле? разве?
Старый 16.01.2007, 12:10
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
Jon - ДиоД же написал! Функция DisableTrigger выключает триггер а в этом случае она его выключает сразу после создания !
Старый 16.01.2007, 12:19
J
expert
offline
Опыт: 48,447
Активность:
MrSmiLe а... я просто неувидел что у него в коде стоит строка выключения.. все ясн...
Старый 16.01.2007, 12:21
MariK

offline
Опыт: 1,181
Активность:
  1. Пардон.В первоначальном варианте кода строчки call disabledtrigger НЕ БЫЛО. Она появилась только тогда, когда я пытался поправить, но у меня не получилось. Я решил переделать обратно, но видимо забыл удалить. Извините!!! Этой строчки нет.
  2. Насчёт инициализации я переделал: сейчас мультиборд запускается через секунду, но всё равно не работает. Я всё больше склоняюсь к версии, что триггер не успевает выполниться за 1 секунду, как начинается новый. Я попробую сделать триггер для каждой чётной секунды и для каждой нечётной (т. е. два триггера с событием каждые две секунды).
  3. Я могу выложить карту, вы посмотрите.
Старый 17.01.2007, 13:36
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
MariK - насчёт не успевания - 100% не верно. Выкладывай карту!
Старый 17.01.2007, 19:51
Ответ

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

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

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

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



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