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

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

Закрытая тема
 
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Научился я вроде-бы юзать SCV и попал в ...в общем ппц, вот функция:

Код:
function H2I takes handle h returns integer
return h
return 0
endfunction

function Trig_SSS_Actions takes nothing returns nothing
    local trigger t = GetTriggeringTrigger()
    local integer i
    set i = H2I(t)
    call CreateTextTagUnitBJ( I2S(i), gg_unit_N000_0000, 0, 10, 100, 100, 100, 0 )
endfunction

//===========================================================================
function InitTrig_SSS takes nothing returns nothing
    set gg_trg_SSS = CreateTrigger(  )
    call TriggerRegisterPlayerChatEvent( gg_trg_SSS, Player(0), "1", true )
    call TriggerAddAction( gg_trg_SSS, function Trig_SSS_Actions )
endfunction


Механика триггера проста - игрок 1 вводит "1" и над некоторым юнитом выводится число = номеру ячейки запущенного тригера.

Вопрос - почему это число всегда одно и тоже? Разьве номер ячейки нового тригера не должен меняться??
Старый 13.03.2008, 01:03
J
expert
offline
Опыт: 48,447
Активность:
happy_horror это не баг, все правельно, ты выводиш номер не нового триггера, а этого же самого в котором происходит действие... (GetTriggeringTrigger())
если тебе нужен новый то пиши CreateTrigger()
Старый 13.03.2008, 03:19
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
джон может сможеш помоч мне со спелом? вроде всё организовано, но спелл даже не кастуется...

Код:
function Trig_Cast3_Func003Func003A takes nothing returns nothing
    local trigger t = GetTriggeringTrigger()
    local location array loc
    local integer i = 1
    loop
    exitwhen i > 12
        set loc[i] = get_object_lparam(t,"loc"+I2S(i))
        set i = i + 1
    endloop
    if (GetUnitUserData(GetEnumUnit()) + i <= 12) then
//    call IssuePointOrderLoc( GetEnumUnit(), "attackground", GetUnitLoc(GetEnumUnit()) )
//            call PolledWait( 0.70 )
        call IssuePointOrderLoc( GetEnumUnit(), "ttackground", loc[GetUnitUserData(GetEnumUnit()) + i] )
    else
//    call IssuePointOrderLoc( GetEnumUnit(), "attackground", GetUnitLoc(GetEnumUnit()) )
//           call PolledWait( 0.70 )
        call IssuePointOrderLoc( GetEnumUnit(), "ttackground", loc[-12 + (GetUnitUserData(GetEnumUnit()) + i )] )
    endif
endfunction

function Trig_Cast3_Actions takes nothing returns nothing
    local trigger t = GetTriggeringTrigger()
    local unit array u
    local location array loc
    local integer lvl = GetUnitAbilityLevel(GetSpellAbilityUnit(), GetSpellAbilityId())
    local integer i=0
    local integer k
    local integer a
    local integer l
    set a = H2I(t)
    set i = 1
//    call CreateTextTagUnitBJ( I2S(a), gg_unit_N000_0000, 0, 10, 100, 100, 100, 0 )
    loop
        exitwhen i > 12
        set loc[i] = PolarProjectionBJ(GetSpellTargetLoc(), ( I2R(lvl) * 150.00 ), I2R(( 30 * i )))
        call set_object_iparam(t,"loc"+I2S(i),H2I(loc[i]))
        set i = i + 1
    endloop
    set i = 1
    set k = ( lvl * 4 )
    loop
        exitwhen i > k
        call CreateNUnitsAtLoc( 1, 'h000', Player(0), loc[( ( ( i - 1 ) * ( 4 - lvl ) ) + 1 )], bj_UNIT_FACING )
        set u[i] = GetLastCreatedUnit()
        call SetUnitUserData(u[i], (i-1)*(4-lvl)+1)
        set i = i + 1
    endloop
    set i = 1
    loop
        exitwhen i > 12
        call ForGroupBJ( GetUnitsOfPlayerAndTypeId(Player(0), 'h000'), function Trig_Cast3_Func003Func001A )
        call PolledWait( 0.70 )
        call ForGroupBJ( GetUnitsOfPlayerAndTypeId(Player(0), 'h000'), function Trig_Cast3_Func003Func003A )
        call PolledWait( 12.40 )
    set i = 1
    endloop
    set i = 1
    loop
        exitwhen i > 12
        call ExplodeUnitBJ( u[i] )
        set i = i + 1
    endloop
endfunction

//===========================================================================
function InitTrig_Cast3 takes nothing returns nothing
    local trigger t
    set t = CreateTrigger(  )
//    call TriggerRegisterUnitEvent( t, u, EVENT_UNIT_SPELL_CAST )
    call TriggerAddAction( t, function Trig_Cast3_Actions )
endfunction


тригер запускается обычным тригером, в котором событие: юнит кастует абилку, условие абилка равна нужной, действие - запустить этот тригер
Старый 13.03.2008, 11:12
J
expert
offline
Опыт: 48,447
Активность:
у тебя у триггера нет события, ты внизу закоментарил его, к томмуже оно и неправельно, вставь вместо него
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_CHANNEL )
Старый 13.03.2008, 13:11
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
А зачем вообще тригеру нужно событие, разьве нельзя просто запустить выполнение функций и в чём разница Add и Register?
Старый 13.03.2008, 19:24
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
happy_horror, как ты себе представляешь запуск функции без реакции на отлов, например, выделения юнита игроком?

FellGuard добавил:
триггер -> событие произошло - влечет проверку условий, истинно - влечет выполнение действий
Старый 13.03.2008, 19:32
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Да уж, действительно...а как конвертировать значение точки (location) в целочисленную (или реальную) переменную

Отредактировано happy_horror, 13.03.2008 в 20:02.
Старый 13.03.2008, 19:39
Garret
Недоброе творится
offline
Опыт: 3,893
Активность:
Как ты себе представляешь конвертирование ТОЧКИ в ЧИСЛО?
Мб ты имел ввиду координаты?
Да и тема не та...
Старый 13.03.2008, 20:47
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Не правильно выразился - координаты разумеется
Старый 13.03.2008, 22:12
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
GetLocationX() и GetLocationY()
Старый 13.03.2008, 22:42
Garret
Недоброе творится
offline
Опыт: 3,893
Активность:
GetLocationZ()
Старый 13.03.2008, 23:11
Toadcop

offline
Опыт: 54,313
Активность:
GetLocationZ() - нужен если тока у тебя карта работает так же с Z координатами обычный вар этого НЕ делает. конечно есть исключения где Z нужен и просто (установка высоты Lightning'ов "молний")
Старый 14.03.2008, 14:44
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Почему при сохранении числа в кэш нельзя указать переменную типа integer вместо integer val? (при синтакс чеке пишет cannot convert null to integer)
Вот пример функции:

Код:
function H2I takes handle h returns integer
return h
return 0
endfunction

function set_object_iparam takes handle h, string key, integer val returns nothing
   call StoreInteger(udg_cache, I2S(H2I(h)), key, val)
endfunction

function get_object_iparam takes handle h, string key returns integer
   return GetStoredInteger(udg_cache, I2S(H2I(h)), key)
endfunction

function my_func ...
   local integer t = GetTriggeringTrigger()
   local integer i = 1
   ...
   call set_obgect_iparam(t,"...",i)
   ...
   call my_func2
   ...
endfunction

function my_func2...
   local integer i
   set i = get_obgect_iparam(t,"...") // выдаётся ошибка в этоv месте
   ...
endfunction
Старый 17.03.2008, 00:06
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
local integer t = GetTriggeringTrigger()

...
Старый 17.03.2008, 05:23
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Код:
function my_func2...
  local integer i
  local trigger t = GetTriggeringTrigger()
  set i = get_obgect_iparam(t,"...")
endfunction

Отредактировано DFlyer, 17.03.2008 в 09:49.
Старый 17.03.2008, 06:23
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
Цитата:
Сообщение от DFlyer
Код:
function my_func2...
  local integer i
  local trigger t = GetTriggeringTrigger()
  set i = get_obgect_iparam(t,"...")
endfunction

мммм...
вот так лучше:
Код:
function my_func2...
  local trigger t = GetTriggeringTrigger()
  local integer i = get_obgect_iparam(t,"...")
endfunction

?
Старый 17.03.2008, 13:40
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Действительно, но это уже мелочи ^_^
Самого автора не видно тут... Ждём его.
Старый 17.03.2008, 15:41
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Тута я - тута, у меня только тут опечатка, в карте как раз -таки стоит
Код:
local trigger t...

но тем не менее, когда я достаю значение из кэша - оттуда достаётся null (судя по синтакс эррору)
Старый 17.03.2008, 19:16
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
happy_horror
Может неправильно указал ключи? Ну, строку с названием.
Старый 17.03.2008, 19:29
happy_horror
2 + 2 = 22 :-D
offline
Опыт: 7,818
Активность:
Указал всё верно...
Как странно - создал карту тест, сделал сперва сохранение числа в кэш с помошью функций:
Код:
StoreInteger
GetStoredInteger


передаётся всё отлично, но почему-то если я использую эти функции: (перенёс в карту всё как полагается, кэш задействован)

Код:
function H2I takes handle h returns integer
return h
return 0
endfunction

function get_object_iparam takes handle h, string key returns integer
   return GetStoredInteger(udg_cache, I2S(H2I(h)), key)
endfunction

function set_object_iparam takes handle h, string key, integer val returns nothing
   call StoreInteger(udg_cache, I2S(H2I(h)), key, val)
endfunction


то при передачи через кэш числа выдаётся та же глупая ошибка - cannot convert null to integer...ппц почему? ведь эти функции одно и то же...

Всё работает даже при ошибке в синтакс эрроре, значит это просто синтакс такой дурацкий...

Отредактировано happy_horror, 17.03.2008 в 20:06.
Старый 17.03.2008, 19:53
Закрытая тема

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

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

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

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



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