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

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

Ответ
 
Aspid

offline
Опыт: 8,361
Активность:
Помогите..не могу понять..
Помогите плиз.... имеется триггер который должен плавно наращивать громкость. :
Код:
События
Игрок: Игрок1(красный) types a chat message containing -chs+ as Точное совпадение
Условия:
действия
For each (Integer A) from 1 to 25 do (Actions)
    Цикл - Действия
         set k = (k+6)
         Звук - Set music volume to (100.00+k)%    
         Wait 0.30 seconds


Переменная k - real
В таком виде все работает нормально до тех пор пока я не перезапускаю музыку. Ведь цикл уже прошел и в переменной k уже хранится довольно большое значение и соответственно громкость уже не будет повышаться плавно..
Я решил подключить jass.

Вот что я сделал...

Код:
function Trig_cs_chs4_Actions takes nothing returns nothing
    local real k
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 25
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
if (bj_forLoopAIndex >= bj_forLoopAIndexEnd) then k=0.00
else
        set k = ( k + 6.00 )
        call SetMusicVolumeBJ( ( 100.00 + k ) )
        call TriggerSleepAction( 0.27 )
        set bj_forLoopAIndex = bj_forLoopAIndex + 1 
     endif  
endloop

endfunction


то есть я проверяю - если начальное значение цикла совпадает с конечным тогда обнулить переменную k.
это не сработало(выдало 3 ошибки "отсутствует конец строки", "отсутствует endif" )...я решил что лопухнулся где то с условием по причине моего плохого знания жасса...
убрал условие, решил сделать просто на локалках(то есть попросту убрать глобальную переменную и сделать из нее локальную)...вот что получилось...

Код:
function Trig_cs_chs4_Actions takes nothing returns nothing
    local real k
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 25
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        set k = ( k + 6.00 )
        call SetMusicVolumeBJ( ( 100.00 + k ) )
        call TriggerSleepAction( 0.27 )
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
endfunction


ошибок не было...но триг просто не работает...громкость он не увеличивает..

помогите плиз а то я щас йад пойду пить и стану похожим на мриз-а :)

ЗЫ кстати в первом триге это хоть и работает но громкость увеличивается как-то скачками...думаю вот эта хрень виновата...
Код:
call TriggerSleepAction( 0.27 )
....НТ по-моему говорил что wait некоректно в цикле работает..
Старый 10.06.2006, 15:19
Aspid

offline
Опыт: 8,361
Активность:
блин ну помогите кто-нибудь плиз..не получаец0..
Старый 10.06.2006, 20:43
Aspid

offline
Опыт: 8,361
Активность:
мдяя...все молчать ну тогда закройте что-ли..
Старый 11.06.2006, 12:21
NECros88

offline
Опыт: 16,351
Активность:
Просто не все такие умные)
Старый 11.06.2006, 13:34
DioD

offline
Опыт: 45,134
Активность:
Надо таймером а не циклом, щас я пишу код для воскрешения героя в соседнюю тему, так что придётсо ждать.
Старый 11.06.2006, 13:38
Aspid

offline
Опыт: 8,361
Активность:
DioD напиши плиз как а то я уже замучался...
Старый 11.06.2006, 15:17
DioD

offline
Опыт: 45,134
Активность:
Напиши тригер в джаз с функцией InitTrig_что-то, а что когда я сочиняю ничего хорошего не получаетсо.
И еще одно, карта сетевая или одиночная.
Старый 11.06.2006, 15:19
Aspid

offline
Опыт: 8,361
Активность:
карта multiplayer
Цитата:
Напиши тригер в джаз с функцией InitTrig_что-то, а что когда я сочиняю ничего хорошего не получаетсо.

типа обычный пустой триг?
редактор лень запустить?:)

Код:
function Trig_sound_Actions takes nothing returns nothing
endfunction

//===========================================================================
function InitTrig_sound takes nothing returns nothing
    set gg_trg_sound = CreateTrigger(  )
    call TriggerAddAction( gg_trg_sound, function Trig_sound_Actions )
endfunction
Старый 11.06.2006, 15:26
DioD

offline
Опыт: 45,134
Активность:
Типа тот тригер который ты сделать хочешь, хотя я уже сочинил.

Код:
function Trig_Start_Actions takes nothing returns nothing
    call ConditionalTriggerExecute( gg_trg_Event )
    call DisableTrigger( GetTriggeringTrigger() )
endfunction

function InitTrig_Start takes nothing returns nothing
    set gg_trg_Start = CreateTrigger(  )
    call TriggerRegisterPlayerChatEvent( gg_trg_Start, Player(0), "-chs+", true )
    call TriggerAddAction( gg_trg_Start, function Trig_Start_Actions )
endfunction


Если красный игрок скажет -chs+ то тригер выключится, но будет включён другой тригер
Код:
function Trig_Event_Actions takes nothing returns nothing
    set udg_A = udg_A +1
        if udg_A >=25 then 
        call DisableTrigger( GetTriggeringTrigger() )
        call ConditionalTriggerExecute( gg_trg_Start )
    endif
    call SetMusicVolume(100+6)
endfunction

function InitTrig_Event takes nothing returns nothing
    set gg_trg_Event = CreateTrigger(  )
    call DisableTrigger( gg_trg_Event )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Event, 0.27 )
    call TriggerAddAction( gg_trg_Event, function Trig_Event_Actions )
endfunction

Который каждые 0.27 секунд увеличивает громкость на 6 и записывает количество запусков в переменную A, как только пройдёт 25 запусков тригер выключится и включит тригер старта.

Код для синга, но так как я обнаружил фичу, нам придётся подождать кого-то поумнее.
Код:
function SetMusicVolumeBJ takes real 100 returns nothing
    call SetMusicVolume(PercentToInt(100, 127))
endfunction

function PercentToInt takes real percentage,integer max returns integer
    local integer result = R2I(1000 * I2R(127) * 0.01) = 127000*0.01 = 1270
    if (result < 0) then
        set result = 0
    elseif (1270 > 127) then
        set 1270 = 127
    endif
    return 127
endfunction


Максимальное значение громкости равно 127 или близы сделали это для защиты от критов или это бага ГУИ.
Старый 11.06.2006, 15:45
Aspid

offline
Опыт: 8,361
Активность:
DioD сенкс...щас на отдельной карте попробую.
Цитата:
local integer result = R2I(1000 * I2R(127) * 0.01) = 127000*0.01 = 1270

глупый вопрос - че мы тут считаем?
Старый 11.06.2006, 15:57
DioD

offline
Опыт: 45,134
Активность:
Я наглядно показал что лимит громкости для ГУИ конструкции 127 и больше быть не может.
Старый 11.06.2006, 16:17
Aspid

offline
Опыт: 8,361
Активность:
DioD спс все получилось
Старый 11.06.2006, 20:32
Ответ

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

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

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

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



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