Помощь в Jass

В этом разделе Гильдия может помочь вам создать свою собственную карту!

Модератор: простой модератор

Ответить
Аватара пользователя
Kenny-3D
Заглянувший
Сообщения: 27
Зарегистрирован: 11.08.14, 13:42
Игровой ник: Kenny-3D
Откуда: г.Мегион

Помощь в Jass

Сообщение 21318 #21318: Kenny-3D » 27.08.14, 05:53

Вот осваиваю Jass и понел что есть локальные переменные...
Можно ли их задействовать сразу в 2 тригеррах?
например : ГУИ
юнит применяет способность
Равная то то...
cast unit=применяющий юнит
Fire=0
то сделать дамми
дать жизнь на 10 сек
запустить след триггер (естественно со всеми переменными)
след триггер*
каждую 0.01 сек
Fire=Fire+5
дамми переместить в точку cast unit со смещением 200 градусы Fire.
Как такое сделать на Jass?
Я начал делать 1 триггер сделал успешно без косяков)
а соединить со вторым не могу (так как локальные переменные)
первый триггер Jass:

Код: Выделить всё

function Trig_fire_____________________u_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A00V' ) ) then
        return false
    endif
    return true
endfunction

function Trig_fire_____________________u_Actions takes nothing returns nothing
    local real ICE2 = 0
    local real ICE3 = 90
    local real ICE4 = 180
    local real ICE5 = 270
    local unit Ice_arrow1
    local unit Ice_arrow2
    local unit Ice_arrow3
    local unit Ice_arrow4
    local unit Ice_arrow_Cast2 = GetSpellAbilityUnit()
    set udg_ICE2 = 0.00
    set ICE2 = udg_ICE2 (соединяю с глобальными для переноса в след триггер)
    set udg_ICE2 = 90.00
    set ICE3 = udg_ICE3(соединяю с глобальными для переноса в след триггер)
    set udg_ICE2 = 180.00
    set ICE4 = udg_ICE4(соединяю с глобальными для переноса в след триггер)
    set udg_ICE2 = 270.00
    set ICE5 = udg_ICE5(соединяю с глобальными для переноса в след триггер)
    set udg_Ice_arrow_Cast2 = GetSpellAbilityUnit()(соединяю с глобальными для переноса в след триггер)
    set Ice_arrow_Cast2 = udg_Ice_arrow_Cast2(соединяю с глобальными для переноса в след триггер)
    call TriggerSleepAction( 1.00 )
    call CreateNUnitsAtLoc( 1, 'h008', GetOwningPlayer(Ice_arrow_Cast2), GetUnitLoc(Ice_arrow_Cast2), GetUnitFacing(Ice_arrow_Cast2) )
    set Ice_arrow1 = GetLastCreatedUnit()
    set udg_Ice_arrow1 = GetLastCreatedUnit()(соединяю с глобальными для переноса в след триггер)
    set Ice_arrow1 = udg_Ice_arrow1
    call UnitApplyTimedLifeBJ( 11.00, 'BTLF', Ice_arrow1 )
    call CreateNUnitsAtLoc( 1, 'h008', GetOwningPlayer(Ice_arrow_Cast2), GetUnitLoc(Ice_arrow_Cast2), GetUnitFacing(Ice_arrow_Cast2) )
    set Ice_arrow2 = GetLastCreatedUnit()
    call UnitApplyTimedLifeBJ( 11.00, 'BTLF', Ice_arrow2 )
    call CreateNUnitsAtLoc( 1, 'h008', GetOwningPlayer(Ice_arrow_Cast2), GetUnitLoc(Ice_arrow_Cast2), GetUnitFacing(Ice_arrow_Cast2) )
    set Ice_arrow3 = GetLastCreatedUnit()
    call UnitApplyTimedLifeBJ( 11.00, 'BTLF', Ice_arrow3 )
    call CreateNUnitsAtLoc( 1, 'h008', GetOwningPlayer(Ice_arrow_Cast2), GetUnitLoc(Ice_arrow_Cast2), GetUnitFacing(Ice_arrow_Cast2) )
    set Ice_arrow4 = GetLastCreatedUnit()
    call UnitApplyTimedLifeBJ( 11.00, 'BTLF', Ice_arrow4 )
    call EnableTrigger( gg_trg_fire1 )
    call EnableTrigger( gg_trg_fire2 )
    call EnableTrigger( gg_trg_fire3 )
    call EnableTrigger( gg_trg_fire4 )
    call TriggerSleepAction( 11.00 )
    call DisableTrigger( gg_trg_fire1 )
    call DisableTrigger( gg_trg_fire2 )
    call DisableTrigger( gg_trg_fire3 )
    call DisableTrigger( gg_trg_fire4 )
endfunction

//===========================================================================
function InitTrig_fire_____________________u takes nothing returns nothing
    set gg_trg_fire_____________________u = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_fire_____________________u, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_fire_____________________u, Condition( function Trig_fire_____________________u_Conditions ) )
    call TriggerAddAction( gg_trg_fire_____________________u, function Trig_fire_____________________u_Actions )
endfunction

Триггер 2

function Trig_fire1_Func005Func001C takes nothing returns boolean
    if ( not ( GetOwningPlayer(GetEnumUnit()) == Player(11) ) ) then
        return false
    endif
    return true
endfunction

function Trig_fire1_Func005A takes nothing returns nothing
    if ( Trig_fire1_Func005Func001C() ) then
        call SetUnitFacingToFaceUnitTimed( GetEnumUnit(), Ice_arrow_Cast2, 0 )
        call SetUnitFacingToFaceUnitTimed( GetEnumUnit(), 0, 0 )
        call SetUnitPositionLoc( GetEnumUnit(), PolarProjectionBJ(GetUnitLoc(GetEnumUnit()), -10.00, GetUnitFacing(GetEnumUnit()))
    else
    endif
endfunction

function Trig_fire1_Actions takes nothing returns nothing
    local unit Ice_arrow1
    local real ICE2
    local location Ice_arrow_Cast_target1
    local unit Ice_arrow_Cast2
    local integer GetEnumUnit = 0
    set udg_Ice_arrow_Cast2 = Ice_arrow_Cast2
    set udg_Ice_arrow1 = Ice_arrow1
    set udg_ICE2 = ICE2
    set udg_Ice_arrow_Cast_target1 = Ice_arrow_Cast_target1
    set Ice_arrow_Cast_target1 = GetUnitLoc(Ice_arrow1)
    set ICE2 = ( ICE2 + 5.00 )
    call SetUnitPositionLoc( Ice_arrow1, PolarProjectionBJ(GetUnitLoc(Ice_arrow_Cast2), 150.00, ICE2) )
    call IssuePointOrderLocBJ( Ice_arrow1, "move", PolarProjectionBJ(GetUnitLoc(Ice_arrow_Cast2), 500.00, ( ICE2 + 1.00 )) )
    call ForGroupBJ( GetUnitsInRangeOfLocAll(150.00, Ice_arrow_Cast_target1), function Trig_fire1_Func005A )
endfunction

//===========================================================================
function InitTrig_fire1 takes nothing returns nothing
    set gg_trg_fire1 = CreateTrigger(  )
    call DisableTrigger( gg_trg_fire1 )
    call TriggerRegisterTimerEventPeriodic( gg_trg_fire1, 0.01 )
    call TriggerAddAction( gg_trg_fire1, function Trig_fire1_Actions )
endfunction
Тут ничего не выходит(

Аватара пользователя
ELITE
Администратор
Сообщения: 2295
Зарегистрирован: 20.02.13, 16:29
Игровой ник: ELITE83
Откуда: РФ
Благодарил (а): 125 раз
Поблагодарили: 422 раза
Контактная информация:

Re: Помощь в Jass

Сообщение 21319 #21319: ELITE » 27.08.14, 07:37

локальная переменная на то и локальная - то она работает ТОЛЬКО внутри своего контейнера
в кадом контейнере могут быть локальные переменный с ОДИНАКОВЫМ названием иони каждая будет работать независимо!! для передачи данный из одного контейнера в другой надо использовать ГЛОБАЛЬНЫЕ переменные,

Код: Выделить всё

set ICE3 = udg_ICE3(соединяю с глобальными для переноса в след триггер)
а вот тут вы ЛОКАЛЬНОЙ ICE3 присваиваете значение ГЛОБАЛЬНОЙ udg_ICE3 переменной, но не наоборот, как в комментарии
-----------
да вообще эта часть кода глупа

Код: Выделить всё

set udg_ICE2 = 0.00
set ICE2 = udg_ICE2 (соединяю с глобальными для переноса в след триггер)
set udg_ICE2 = 90.00
set ICE3 = udg_ICE3(соединяю с глобальными для переноса в след триггер)
set udg_ICE2 = 180.00
set ICE4 = udg_ICE4(соединяю с глобальными для переноса в след триггер)
set udg_ICE2 = 270.00
тут вы в одну глобальную udg_ICE2 присваиваете значение (0,90,180,270)
после чего локальной ICE2 ICE3 ICE4 передаете его и в конце в глобальной остается значение 270
вот только в чем смысл такого ?
Если вы не обнаружили своего сообщения, или оказались заблокированными - Прочитайте ПРАВИЛА!
Если вы хотите отблагодарить пользователя - используйте кнопку "спасибо",
Если чье-либо сообщение вам оказалось полезным или бесполезным - используйте кнопки репутации "+" или "-"
Изображение
Изображение

Аватара пользователя
Kenny-3D
Заглянувший
Сообщения: 27
Зарегистрирован: 11.08.14, 13:42
Игровой ник: Kenny-3D
Откуда: г.Мегион

Re: Помощь в Jass

Сообщение 21322 #21322: Kenny-3D » 27.08.14, 11:36

Ой и правда) но суть не в этом) значит надо делать так? set udg_ICE=ICE

Добавлено спустя 59 минут 31 секунду:
У меня еще один вопрос. Если тригер начинается с периодического события в 1 сек все локальные переписываются?

Аватара пользователя
ELITE
Администратор
Сообщения: 2295
Зарегистрирован: 20.02.13, 16:29
Игровой ник: ELITE83
Откуда: РФ
Благодарил (а): 125 раз
Поблагодарили: 422 раза
Контактная информация:

Re: Помощь в Jass

Сообщение 21323 #21323: ELITE » 27.08.14, 12:19

локальная переменная работает внутри своей функции и создается новая при каждом новом обращении к ней
даже если текущая функция еще выполняется - новая не будет её мешать и будет работать независимо
Если вы не обнаружили своего сообщения, или оказались заблокированными - Прочитайте ПРАВИЛА!
Если вы хотите отблагодарить пользователя - используйте кнопку "спасибо",
Если чье-либо сообщение вам оказалось полезным или бесполезным - используйте кнопки репутации "+" или "-"
Изображение
Изображение

Аватара пользователя
Kenny-3D
Заглянувший
Сообщения: 27
Зарегистрирован: 11.08.14, 13:42
Игровой ник: Kenny-3D
Откуда: г.Мегион

Re: Помощь в Jass

Сообщение 21327 #21327: Kenny-3D » 27.08.14, 14:10

Ага, теперь понел) Такой вопрос: можно ли к реальной (например Ice) прибавлять значение каждую 0.01сек? например:

Код: Выделить всё

[color=#00FF00]set Ice = (Ice + 5.00)[/color]

[size=85][color=#AF0]Добавлено спустя 3 минуты 30 секунд:[/color][/size]
[color=#FFFF00]Вот:[/color]
[color=#00FF00]function Trig_fire1a1_Func005Func001C takes nothing returns boolean
    if ( not ( GetOwningPlayer(GetEnumUnit()) == Player(11) ) ) then
        return false
    endif
    return true
endfunction

function Trig_fire1a1_Func005A takes nothing returns nothing
    if ( Trig_fire1a1_Func005Func001C() ) then
        call AddSpecialEffectLocBJ( GetUnitLoc(GetEnumUnit()), "Abilities\\Spells\\Demon\\DemonBoltImpact\\DemonBoltImpact.mdl" )
        call SetUnitPositionLoc( GetEnumUnit(), PolarProjectionBJ(GetUnitLoc(GetEnumUnit()), -10.00, GetUnitFacing(GetEnumUnit())) )
    else
    endif
endfunction

function Trig_fire1a1_Actions takes nothing returns nothing
    local real ICE2 = 0
    local unit Ice_arrow1 = udg_Ice_arrow1
    local unit Ice_arrow_Cast2 = udg_Ice_arrow_Cast2
    local location Ice_arrow_Cast_target1 = udg_Ice_arrow_Cast_target1
    set Ice_arrow_Cast_target1 = GetUnitLoc(Ice_arrow1)
    set ICE2 = ( ICE2 + 5.00)
    call SetUnitPositionLoc( Ice_arrow1, PolarProjectionBJ(GetUnitLoc(Ice_arrow_Cast2), 150.00, ICE2) )
    call IssuePointOrderLocBJ( Ice_arrow1, "move", PolarProjectionBJ(GetUnitLoc(Ice_arrow_Cast2), 500.00, ( ICE2 + 1.00 )) )
    call ForGroupBJ( GetUnitsInRangeOfLocAll(150.00, Ice_arrow_Cast_target1), function Trig_fire1a1_Func005A )
endfunction

//===========================================================================
function InitTrig_fire1a1 takes nothing returns nothing
    set gg_trg_fire1a1 = CreateTrigger(  )
    call DisableTrigger( gg_trg_fire1a1 )
    call TriggerRegisterTimerEventPeriodic( gg_trg_fire1a1, 0.01 )
    call TriggerAddAction( gg_trg_fire1a1, function Trig_fire1a1_Actions )
endfunction

[/color]

[size=85][color=#AF0]Добавлено спустя 10 минут 1 секунду:[/color][/size]
[color=#FFFF00]Она в этом триггере не прибавляет значение.[/color]
[color=#FFFF00]Но когда обращяешься к глобальным то прибавляет[/color]
[color=#00FF00]function Trig_fire1a1_Actions takes nothing returns nothing
    local real ICE2 = 0
    local unit Ice_arrow1 = udg_Ice_arrow1
    local unit Ice_arrow_Cast2 = udg_Ice_arrow_Cast2
    local location Ice_arrow_Cast_target1 = udg_Ice_arrow_Cast_target1
    set Ice_arrow_Cast_target1 = GetUnitLoc(Ice_arrow1)
    set udg_ICE2 = ( udg_ICE2 + 5.00)
    set ICE2 = udg_ICE2
    call SetUnitPositionLoc( Ice_arrow1, PolarProjectionBJ(GetUnitLoc(Ice_arrow_Cast2), 150.00, ICE2) )
    call IssuePointOrderLocBJ( Ice_arrow1, "move", PolarProjectionBJ(GetUnitLoc(Ice_arrow_Cast2), 500.00, ( ICE2 + 1.00 )) )
    call ForGroupBJ( GetUnitsInRangeOfLocAll(150.00, Ice_arrow_Cast_target1), function Trig_fire1a1_Func005A )
endfunction[/color]
Но когда обращяешься к этому триггеру вновь то происходит баг (Ice_arrow1 перемещяется к другому)

Аватара пользователя
ELITE
Администратор
Сообщения: 2295
Зарегистрирован: 20.02.13, 16:29
Игровой ник: ELITE83
Откуда: РФ
Благодарил (а): 125 раз
Поблагодарили: 422 раза
Контактная информация:

Re: Помощь в Jass

Сообщение 21334 #21334: ELITE » 27.08.14, 15:17

нет нельзя - как только функция будет выполнена (завершена) - локальные переменные будут уничтожены
поэтому для таких целей придется юзать глобальные
---
и не надо такие большие сообщения писать - используйте ББ-коды споллера и кода
Если вы не обнаружили своего сообщения, или оказались заблокированными - Прочитайте ПРАВИЛА!
Если вы хотите отблагодарить пользователя - используйте кнопку "спасибо",
Если чье-либо сообщение вам оказалось полезным или бесполезным - используйте кнопки репутации "+" или "-"
Изображение
Изображение

Аватара пользователя
Kenny-3D
Заглянувший
Сообщения: 27
Зарегистрирован: 11.08.14, 13:42
Игровой ник: Kenny-3D
Откуда: г.Мегион

Re: Помощь в Jass

Сообщение 21335 #21335: Kenny-3D » 27.08.14, 15:18

И как тогда сделать? если применит другой то глобал на него переключатся... есть какой-то выход?

Аватара пользователя
ELITE
Администратор
Сообщения: 2295
Зарегистрирован: 20.02.13, 16:29
Игровой ник: ELITE83
Откуда: РФ
Благодарил (а): 125 раз
Поблагодарили: 422 раза
Контактная информация:

Re: Помощь в Jass

Сообщение 21336 #21336: ELITE » 27.08.14, 15:20

для каждого игрока свою глобалку
или проще - глобальный массив и по ячейкам записывать для каждого игрока данные
Если вы не обнаружили своего сообщения, или оказались заблокированными - Прочитайте ПРАВИЛА!
Если вы хотите отблагодарить пользователя - используйте кнопку "спасибо",
Если чье-либо сообщение вам оказалось полезным или бесполезным - используйте кнопки репутации "+" или "-"
Изображение
Изображение

Аватара пользователя
Kenny-3D
Заглянувший
Сообщения: 27
Зарегистрирован: 11.08.14, 13:42
Игровой ник: Kenny-3D
Откуда: г.Мегион

Re: Помощь в Jass

Сообщение 21337 #21337: Kenny-3D » 27.08.14, 15:21

пример можно пожалуйста)) того и другого способа)

Аватара пользователя
ELITE
Администратор
Сообщения: 2295
Зарегистрирован: 20.02.13, 16:29
Игровой ник: ELITE83
Откуда: РФ
Благодарил (а): 125 раз
Поблагодарили: 422 раза
Контактная информация:

Re: Помощь в Jass

Сообщение 21338 #21338: ELITE » 27.08.14, 15:26

пример глобального массива?
-создаешь новую переменную в радектора (например TEST) и ставиш галочку "array"
для хранения данных в ней ображение к ячейки идет так
set udg_TEST[1]
так в 1ю ячейку будет записанны данные
как привязать к игрокам? - просто вместо 1 ставите номер вашего игрока
Если вы не обнаружили своего сообщения, или оказались заблокированными - Прочитайте ПРАВИЛА!
Если вы хотите отблагодарить пользователя - используйте кнопку "спасибо",
Если чье-либо сообщение вам оказалось полезным или бесполезным - используйте кнопки репутации "+" или "-"
Изображение
Изображение

Аватара пользователя
Kenny-3D
Заглянувший
Сообщения: 27
Зарегистрирован: 11.08.14, 13:42
Игровой ник: Kenny-3D
Откуда: г.Мегион

Re: Помощь в Jass

Сообщение 21340 #21340: Kenny-3D » 27.08.14, 15:29

Так можно и на гуи так сделать.
я думал на джассе можно обойтись 2-3 триггерами а так получается тоже самое...
или я не прав?

Аватара пользователя
ELITE
Администратор
Сообщения: 2295
Зарегистрирован: 20.02.13, 16:29
Игровой ник: ELITE83
Откуда: РФ
Благодарил (а): 125 раз
Поблагодарили: 422 раза
Контактная информация:

Re: Помощь в Jass

Сообщение 21341 #21341: ELITE » 27.08.14, 15:35

гуи делает много мусора в коде, на jass можно в 3-10 раз компактнее написать, да и работать будет быстрее в разы
Если вы не обнаружили своего сообщения, или оказались заблокированными - Прочитайте ПРАВИЛА!
Если вы хотите отблагодарить пользователя - используйте кнопку "спасибо",
Если чье-либо сообщение вам оказалось полезным или бесполезным - используйте кнопки репутации "+" или "-"
Изображение
Изображение

Аватара пользователя
Kenny-3D
Заглянувший
Сообщения: 27
Зарегистрирован: 11.08.14, 13:42
Игровой ник: Kenny-3D
Откуда: г.Мегион

Re: Помощь в Jass

Сообщение 21343 #21343: Kenny-3D » 27.08.14, 15:49

Я читал что с Гуи в джазз редактор плохо переводит и делает много лишних функций... я так полагаю из за этого?

Аватара пользователя
ELITE
Администратор
Сообщения: 2295
Зарегистрирован: 20.02.13, 16:29
Игровой ник: ELITE83
Откуда: РФ
Благодарил (а): 125 раз
Поблагодарили: 422 раза
Контактная информация:

Re: Помощь в Jass

Сообщение 21347 #21347: ELITE » 27.08.14, 16:19

да он делает очень много лишних функций
особенно если использовать IF
да и на jass можно сократить код в разы даже самих функций

вот пример гуи обычный ИФ

Код: Выделить всё

function Trig_Untitled_Trigger_002_Func001C takes nothing returns boolean
    if ( not ( true == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Untitled_Trigger_002_Actions takes nothing returns nothing
    if ( Trig_Untitled_Trigger_002_Func001C() ) then
        call TriggerSleepAction( 2 )
    else
    endif
endfunction
а вот как тоже самое на jass

Код: Выделить всё

function Trig_Untitled_Trigger_002_Actions takes nothing returns nothing
    if true then
        call TriggerSleepAction( 2 )
    endif
endfunction
как видно не только не нужна вспомогательная функция, которую делает ГУИ
но даже само условие сводится до минимум
в данном случае значение типа истина или лож можно свести просто к указанию значения, тк в такой постановке оно будет принято только если истина
------
а по скорости выполнить 1 проверку на JASS на истину или сделать 3 проверки на ГУИ - скорость выполнения в 3 !!! раза выше
и это ТОЛЬКО для простейшего ИФа без дополнительных условии и сравнений...
Если вы не обнаружили своего сообщения, или оказались заблокированными - Прочитайте ПРАВИЛА!
Если вы хотите отблагодарить пользователя - используйте кнопку "спасибо",
Если чье-либо сообщение вам оказалось полезным или бесполезным - используйте кнопки репутации "+" или "-"
Изображение
Изображение

Аватара пользователя
Srezi
Заглянувший
Сообщения: 20
Зарегистрирован: 12.07.14, 02:59
Игровой ник: Srezi

Re: Помощь в Jass

Сообщение 21599 #21599: Srezi » 01.09.14, 15:23

А лучше вначале использовать хэш. Очень удобен в обращении и работает на ура.
Как больше навыка будет, можно будет и на структуры перейти.

Аватара пользователя
LoveFlame
Заглянувший
Сообщения: 21
Зарегистрирован: 04.08.14, 06:43
Игровой ник: LoveFlame

Re: Помощь в Jass

Сообщение 21716 #21716: LoveFlame » 04.09.14, 21:08

Kenny-3D писал(а):Я читал что с Гуи в джазз редактор плохо переводит и делает много лишних функций... я так полагаю из за этого?
Чтобы тебе было проще понять разницу, привожу то, как объясняли мне.

Объясню разницу на примере заказа пиццы:
JASS: звоним, заказываем пиццу и платим за пиццу.
GUI: звоним другу, чтобы тот позвонил и заказал пиццу,
потом платим за звонок другу, за звонок в пиццерию и за пиццу.

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость