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

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

Ответ
 
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Функции
Можно ли в разных триггерах пользоватся одной функцией
ну к примеру в триггере№1 действие call EnumDestructablesInRect(100, null, function Kill_Destructable)
в триггере№2 нужно также создать функцию "Удаление деструбки" или можно воспользоваться из трига№1
Если написал на суровом молдавском скажите, опишу подробнее
Старый 01.02.2010, 23:44
Nekit1234007

offline
Опыт: 11,916
Активность:
Можно.
Старый 01.02.2010, 23:45
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Спасибо
Старый 02.02.2010, 00:12
SRes
1110101000
offline
Опыт: 9,997
Активность:
Ты собрался вызвать функцию внутри функции из другой функции ?
Что ты имел ввиду ? Или лучше, что тебе надо сделать ?
Старый 02.02.2010, 00:46
Doc

offline
Опыт: 63,163
Активность:
SRes, он собрался вызывать функцию находящуюся в одном тригере из другого.
Старый 02.02.2010, 01:20
DioD

offline
Опыт: 45,134
Активность:
автор не думал о том что вызывая БЖ функции он вызывает функции не то что из триггера а из совершенно другого файла?
Старый 02.02.2010, 07:08
Sebra

offline
Опыт: 5,603
Активность:
Только такие функции пиши в том месте, которое называется "нестандартный кодл карты".
Это в редакторе триггеров открывается при нажатии на имя карты в самом верху списка триггеров.
А то при неправильном порядке сборки триггеров определение функции может оказаться позже использования - получишь ошибку.
Старый 02.02.2010, 18:39
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
автор(тобеш я, немного сдвинутый по фазе) ищу разные способы передачи данных из функции к функцие
пока что кроме хеша ничего больше нет в моей голове =\, пользоваться глобальными переменными правильно не могу, да и какими-то struck и library тоже
Или лучше, что тебе надо сделать ?
Ну Вопрос задавал для того чтобы
1)реализовать снос деревьев
2)Остановки(выкл функцию движения) дамми юнита при наличии рядом дерева
3)Для общего развития ;)
Старый 02.02.2010, 18:57
Doc

offline
Опыт: 63,163
Активность:
Библиотеки то тут причем? Используй ГетХэндлАйди и сопутствующие ему возможности. А вообще это на гуи делается даже. Помню в бурной молодости реализовывал такое:)
Старый 02.02.2010, 19:24
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
для переноски данных из функции в функцию подойдут глобалки как и обычные (udg) так и "vJassовые"
Старый 02.02.2010, 20:03
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
для переноски данных из функции в функцию подойдут глобалки как и обычные (udg) так и "vJassовые"
Bee, вот у меня вопрос в гуи глобалках: перед тем как начать действия с чемто обычно присваивается знание какое-то к глобалке
В vjass глобалках это надо делать(присваевать чему глобалку) при создании в контейнере глобалс? или при начале действий в функции
Старый 02.02.2010, 21:53
SRes
1110101000
offline
Опыт: 9,997
Активность:
Запомните раз и на всегда : GUI == Jass == vJass == cJass == whateverJass.
Какая разница где объявлена глобалка ? GUI добавляет префикс udg_ для снижения шанса конфликта имен на ноль, vJass просто добавляет объявление глобалки в секцию globals (аналогично с GUI, вот только здесь ты сам выбираешь название).
Когда ее объявлять - твое дело, но в джассе это не имеет значения, все объявляется в самом начале.
Когда ей присваивать значение ? Тоже твое дело, главное - до использования.
Старый 02.02.2010, 22:04
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Вот попробовал использовать глобальные переменные в коде
Код:
globals
    location Uloc
    integer i=1
endglobals
function MoveKunay takes nothing returns nothing
    local timer t=GetExpiredTimer()
    local integer i=GetHandleId(t)
    local unit d=LoadUnitHandle(udg_Hash,i,28)
    local unit u
    local real Xd=GetUnitX(d)
    local real Yd=GetUnitY(d)
    local real ang=LoadReal(udg_Hash,i,29)
    local group gr=CreateGroup()
    local location loc=LoadLocationHandle(udg_Hash,i,30)
    call SetUnitX(d,Xd+50*Cos(ang))
    call SetUnitY(d,Yd+50*Sin(ang))
    call GroupEnumUnitsInRange(gr,Xd,Yd,80,null)
    loop
        set u = FirstOfGroup(gr)
        exitwhen u == null
    if IsUnitEnemy(u,Player(0)) and GetWidgetLife(u) > .405 then
            call UnitDamageTarget(d,u,100,true,false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, null)
            call GroupRemoveUnit (gr, u)
            call KillUnit(d)
            set gr = null
            set i=0
        call FlushChildHashtable(udg_Hash,i)
            call PauseTimer(t)
            call DestroyTimer(t)
            set t = null      
    else
            call GroupRemoveUnit(gr,u)
    endif
    endloop
    if SquareRoot((Xd-GetLocationX(loc))*(Xd-GetLocationX(loc))+(Yd-GetLocationY(loc))*(Yd-GetLocationY(loc)))>=3000 then
    set i=0
    call KillUnit(d)
    call DestroyGroup(gr)
    set gr = null
    call FlushChildHashtable(udg_Hash, i)
    call PauseTimer(t)
    call DestroyTimer(t)
    set t = null
    endif
endfunction
function TimerEffect_Destroy takes nothing returns nothing
local timer t2=GetExpiredTimer()
local real X=GetLocationX(Uloc)
local real Y=GetLocationY(Uloc)
local effect e
if i>1 then
call DestroyEffect(e)
set i=i-1
endif
if i==0 then
call DestroyEffect(e)
call PauseTimer(t2)
call DestroyTimer(t2)
set t2 = null
endif
set e=AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",X,Y)
set i=i+1
endfunction
function KunayActions takes nothing returns nothing
    local timer t=CreateTimer()
    local timer t2=CreateTimer()
    local integer i=GetHandleId(t)
    local unit c=GetSpellAbilityUnit()
    local location loc=GetUnitLoc(c)
    local location loct=GetSpellTargetLoc()
    local real Xc=GetUnitX(c)
    local real Yc=GetUnitY(c)
    local real Xt=GetLocationX(loct)
    local real Yt=GetLocationY(loct)
    local real ang=Atan2(Yt-Yc,Xt-Xc)
    local unit d=CreateUnit(GetOwningPlayer(c),'h005',Xc+100*Cos(ang),Yc+100*Sin(ang),ang*bj_RA  DTODEG)
    set loc=Uloc
    call SetUnitFacing(d,ang*bj_RADTODEG)
    call SetUnitPathing(d,false)
    call RemoveLocation(loct)
    call SaveLocationHandle(udg_Hash,i,30,loc)
    call SaveReal(udg_Hash,i,25,Xc)
    call SaveReal(udg_Hash,i,26,Yc)
    call SaveUnitHandle(udg_Hash,i,28,d)
    call SaveReal(udg_Hash,i,29,ang)
    call TimerStart(t,0.05,true,function MoveKunay)
    call TimerStart(t2,1,true,function TimerEffect_Destroy)
    set c=null
endfunction

Работал код до появления второго таймера TimerEffect_Destroy
Пояснисте пожалуйста правильно ли я расставил глобальные переменные
Ошибок компиляций нет, но работать отнють не желает

Отредактировано AlexKARASb, 02.02.2010 в 22:47.
Старый 02.02.2010, 22:42
Doc

offline
Опыт: 63,163
Активность:
Лол. Зачем тебе и хт и глобалки? Что именно не работает?
Старый 02.02.2010, 23:06
AlexKARASb
Learning cpp
offline
Опыт: 22,103
Активность:
Работал код до появления второго таймера TimerEffect_Destroy
Скорее всего я намудриал с интеджером
с хт понятнее
А глобалка если имеет такое же имя как и локалка эпик фейл?(лучше переменить? хотел сказать)

вот на таком коде(гораздо проще) обьясните пожалуйста мои ошибки написания
Код:
globals
    integer itorrent=0
    effect egl
endglobals   

function Timer takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer i=GetHandleId(t)
local real X=LoadReal(udg_Hash,i,31)
local real Y=LoadReal(udg_Hash,i,32)
if itorrent>0 then
set itorrent=0
call DestroyEffect(egl)
call PauseTimer(t)
call DestroyTimer(t)
set t = null
endif
set itorrent=1
set egl=AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl",X,Y)
endfunction
function Torrent_Actions takes nothing returns nothing
local timer t=CreateTimer()
local integer i=GetHandleId(t)
local location l=GetSpellTargetLoc()
local real X=GetLocationX(l)
local real Y=GetLocationY(l)
call SaveReal(udg_Hash,i,31,X)
call SaveReal(udg_Hash,i,32,Y)
call TimerStart(t,2,true, function Timer)
endfunction

Отредактировано AlexKARASb, 02.02.2010 в 23:25.
Старый 02.02.2010, 23:07
Ответ

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

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

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

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



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