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

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

Закрытая тема
 
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,259
Активность:
Cosonic5, попробуй так:
((код Jass
function Trig_Rage_Gui_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A0A7'
endfunction
function Trig_Rage_Gui_Func004002003 takes nothing returns boolean
return IsUnitEnemy(GetFilterUnit(), bj_groupEnumOwningPlayer) and GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0.0
endfunction
function Trig_Rage_Gui_Func006002 takes nothing returns nothing
call IssueTargetOrder( GetEnumUnit(), "attack", GetSpellAbilityUnit() )
endfunction
function Trig_Rage_Gui_Actions takes nothing returns nothing
local unit attack = GetSpellAbilityUnit()
local group g = CreateGroup ()
local boolexpr f
set bj_groupEnumOwningPlayer = GetOwningPlayer(attack)
set f = Condition (function Trig_Rage_Gui_Func004002003)
call GroupEnumUnitsInRange(g, 400.00, GetUnitX(attack), GetUnitY(attack), f)
call DestroyBoolExpr (f)
call ForGroup( g, function Trig_Rage_Gui_Func006002 )
call GroupClear (g)
call DestroyGroup(g)
set f = null
set attack = null
set g = null
endfunction
===========================================================================
function InitTrig_Rage_Jass takes nothing returns nothing
set gg_trg_Rage_Jass = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Rage_Jass, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Rage_Jass, Condition( function Trig_Rage_Gui_Conditions ) )
call TriggerAddAction( gg_trg_Rage_Jass, function Trig_Rage_Gui_Actions )
endfunction
))
GetSpellAbilityUnit() как правило не работает в Handler'aх те конструкцией типо;
function 000 takes nothing returns boolean
тут GetSpellabolityUnit() не работает...
endfunction
Condition(function 000)
quq_CCCP добавил:
ADOLF, ну какой cJass? Тут заядлый гуишник не знает что такое boolExpr. он даже наверняка не имеет JGNP...
Старый 13.04.2012, 15:17
Klop
Папа римский
offline
Опыт: 13,006
Активность:
quq_CCCP:
тут GetSpellabolityUnit() не работает...
там работает GetTriggerUnit() и GetSpellAbilityUnit() это одно и тоже
если в его случае т.е boolexpr создан непосредственно в функции TriggerActions
а через FirstOfGroup и вообще ненужно делать boolexpr и переносить перменные
Старый 13.04.2012, 15:19
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
quq_CCCP, ты прав не имею=))
спс щас попробую скажу че да как.
Старый 13.04.2012, 15:20
adic3x

offline
Опыт: 108,439
Активность:
ADOLF, ну какой cJass? Тут заядлый гуишник не знает что такое boolExpr. он даже наверняка не имеет JGNP...
Как раз cJass позволяет сконцентрироваться на решение задачи и алгоритме, а не таких нелепых операциях, как вынесение условия в отдельную функцию или обнуление локальных переменной.
И да, группу перед удалением очищать не нужно.
Старый 13.04.2012, 15:20
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,259
Активность:
Klop, ну клоп, я предпочитаю использовать bj_GetOwningPlayer, bj_lastRestoredUnit и так далее, чтобы не вызывать по 10 раз одну и туже функцию...
Старый 13.04.2012, 15:23
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
quq_CCCP, нет проверил не работает(
Старый 13.04.2012, 15:24
Klop
Папа римский
offline
Опыт: 13,006
Активность:
quq_CCCP, хм..а вот ты не думаешь что в эту глобалку в другое время впишеться другой юнит использующий заклинание вместе и пойдёт косяк
Старый 13.04.2012, 15:25
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,259
Активность:
Klop, я раньше тоже так думал, что глобакли не юзать, то будет баг, нефига, практика показала что нечего подобного....
Старый 13.04.2012, 15:26
adic3x

offline
Опыт: 108,439
Активность:
я предпочитаю использовать bj_GetOwningPlayer, bj_lastRestoredUnit
Нивкоем случае так поступать нельзя. Эти переменные не предназначены для этого. Они могут использовать другими частями кода. Хоть ПДСС и вроде как однопоточен, на самом деле бывают ситуации, когда один поток может останавливаться и запускаться другой. Что приведет вообще в очень труднонаходимым ошибкам.
Старый 13.04.2012, 15:26
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,259
Активность:
ADOLF, да да да, как к примеру они могут использоваться ели у меня в во всем коде нету Replase unit, CreateNunitsAnLoc... ну и ка кони могут быть использованы? а?
quq_CCCP добавил:
ADOLF, а так же bj_lastCreatedHashTable ? я что инициализирую 1000 хеш таблицы с пмощью CreateHashTableBJ, а?, это смешено, так что тем у кого вся карта на jass нечего боятся их использовать...
Старый 13.04.2012, 15:31
adic3x

offline
Опыт: 108,439
Активность:
как к примеру они могут использоваться ели у меня в во всем коде нету Replase unit, CreateNunitsAnLoc... ну и ка кони могут быть использованы?
Вы просто немного не разбираетесь в вопросе. Используя их в одной способности - их уже нельзя будет использовать в любых других. Но их область видимости не ограничена - прямой путь к ошибкам.
Это все равно, что переодить дорогу на красный свет - первые разы ничего плохого, но однажды...
Старый 13.04.2012, 15:32
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
quq_CCCP, ADOLF, ребят вы про меня не забыли? на гуи с кастом скрипт спел работал как перевели на jass перестал(
Старый 13.04.2012, 15:34
DaeDR

offline
Опыт: 8,074
Активность:
Cosonic5, опиши, что тебе вообще нужно от спелла?
DaeDR добавил:
Чтобы при использовании все враги пошли на героя?
Старый 13.04.2012, 15:37
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,259
Активность:
ADOLF:
как к примеру они могут использоваться ели у меня в во всем коде нету Replase unit, CreateNunitsAnLoc... ну и ка кони могут быть использованы?
Вы просто немного не разбираетесь в вопросе. Используя их в одной способности - их уже нельзя будет использовать в любых других. Но их область видимости не ограничена - прямой путь к ошибкам.
Это все равно, что переодить дорогу на красный свет - первые разы ничего плохого, но однажды...
Это уже завесит от кососрукости автора, я не говрю что их нужно бездумно использовать, и какие поапло подходящие по типу, надо подобрать нужные и использовать так, чтобы небыло возможным их испльзование в 2 местах одновременно, еще не разу не было бага, у меня в моей карты, могу скинуть опен версию в лс, при условии неразглашения)
Старый 13.04.2012, 15:37
adic3x

offline
Опыт: 108,439
Активность:
ребят вы про меня не забыли?
Конечно забыли. Я давно забыл, еще когда написал очень полезную статью:
Куда Вас и посылаю.
Старый 13.04.2012, 15:37
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
DaeDR, смотри применяем способность враги в радиусе 400 на 400
начинают Атаковать героя)) после 3 сек группа удаляется.
Старый 13.04.2012, 15:38
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Cosonic5, сделай группу так
local group g = CreateGroup()
local unit e = null
call GroupEnumUnitsInRange(g, 400.00, GetUnitX(attack), GetUnitY(attack), f)
loop
set e = FirstOfGroup(g)
exitwhen e == null
if Условия then
call KillUnit(e)
endif
call GroupRemoveUnit(g,e)
endloop
callDestroyGroup(g)
set g = null
Старый 13.04.2012, 15:39
DaeDR

offline
Опыт: 8,074
Активность:
Cosonic5, А почему через 3 сек. группа удаляется? Сразу нельзя?
Старый 13.04.2012, 15:39
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
DaeDR, ну можно впринципе.
Старый 13.04.2012, 15:40
DaeDR

offline
Опыт: 8,074
Активность:
Cosonic5, Вся ошибка была в том, что радиус ставится после координат)
» Код
function Trig_Rage_Gui_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A0A7'
endfunction

function Trig_Rage_Gui_Func004002003 takes nothing returns boolean
    return IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetTriggerUnit())) and GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0.0
endfunction

function Trig_Rage_Gui_Func006002 takes nothing returns nothing
    call IssueTargetOrder( GetEnumUnit(), "attack", GetTriggerUnit() )
endfunction

function Trig_Rage_Gui_Actions takes nothing returns nothing
    local group g = CreateGroup ()
    local boolexpr f = Condition (function Trig_Rage_Gui_Func004002003)
    call GroupEnumUnitsInRange(g, GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()), 400.00, f)
    call DestroyBoolExpr (f)
    call ForGroup( g, function Trig_Rage_Gui_Func006002 )
    call GroupClear (g)
    call DestroyGroup(g)
    set f = null
    set g = null
endfunction

//===========================================================================
function InitTrig_Rage_Jass takes nothing returns nothing
    set gg_trg_Rage_Jass = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Rage_Jass, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Rage_Jass, Condition( function Trig_Rage_Gui_Conditions ) )
    call TriggerAddAction( gg_trg_Rage_Jass, function Trig_Rage_Gui_Actions )
endfunction
Старый 13.04.2012, 15:47
Закрытая тема

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

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

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

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



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