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

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

Закрытая тема
 
Medivx

offline
Опыт: 375
Активность:
спс за подсказку с пентаграмой пока не смотрел но ща посмотрю тока вот еще вопрос хотел сделать так чтобы при использование заклинания чубрик умерал а у кастующего появлялась аура так сделать сделал а эффекта от ауры ноль как баф отображается а вот +к урону нет ща выложу свой тригер
function Trig_asdsad_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A002' ) ) then
return false
endif
return true
endfunction

function Trig_asdsad_Actions takes nothing returns nothing
call KillUnit( GetSpellTargetUnit() )
call UnitAddAbilityBJ( 'A000', GetSpellAbilityUnit() )
call UnitAddAbilityBJ( 'A003', GetSpellAbilityUnit() )
call PolledWait( 20.00 )
call UnitRemoveAbilityBJ( 'A000', GetSpellAbilityUnit() )
call UnitRemoveAbilityBJ( 'A003', GetSpellAbilityUnit() )
endfunction

Medivx добавил:
стало еще хуже вроде бы эффект работает правдо лучи не строятся почемуто но эффекты и юниты не удалаяются хз почему я так и не понял выкладываю свою карту
помоги плиз научите как сделать правильно
Прикрепленные файлы
Тип файла: w3x sadasda.w3x (23.0 Кбайт, 16 просмотров )
Старый 10.09.2007, 14:50
Alex_Hell
Mapmaker 'N' Programmer
offline
Опыт: 6,885
Активность:
Medivx, если эффект от ауры есть, а бонуса к атаке нет - может намудрил с самой аурой? :))
А еще совет: используй локальные переменные, а не GetSpellAbilityUnit...
во-первых имя короче писать
во-2-х каждый раз опять вызываетяс эта функция, а зачем? Записал в переменную и ссылайся на нее, а не вызывай функцию заного, тоже самое лучше делать, когда одно и тоже действие(арифметическое) несколько раз высчитывается или функция вызывается, например:
Код:
set x = GetUnitX(unit)*GetUnitX(unit)
set y = GetUnitY(unit)*GetUnitY(unit)
//вот так лучше:
set x = GetUnitX(unit)
set y = GetUnitY(unit)
set x = x*x
set y = y*y

написал от-балды, но смысл замены понятен, чтоб не вызывать одну и туже функцию несколько раз
Старый 10.09.2007, 15:23
Medivx

offline
Опыт: 375
Активность:
Не знаю может и на мудрил я открыл в редакторе способностей взял за основу ауру выносливости и в графе заклинания добавил еще и ауру боевой дух которая отвечает за урон нокогда я зашол в редактор залинаний/эффектов то там вообще нет характеристик ауру как таковой есть тока как она выглядит я думаю в этом проблема но тогда не понемаю как попробовал добавить заклинания путем GetSpellAbilityUnit обе ауры и нечего попробовал поставить война с такой аурой с аурой боевого духа от него идет прибавка к атаке а вот от моей ауры нет воозможно я добавил не спелл а тока спецэффект а как тогда сделать чтобы появился и бонус к скорости атаки, передвижения и дополнительное поврежденья? хотя кажется знаю у меня почему то одна аура заменяет другую как это исправить?
Старый 10.09.2007, 17:07
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
http://xgm.guru/forum/showthread.php?t=9678
http://xgm.guru/forum/showthread.php?t=12730
вот две ссылки. В первой почитай первый пост, во второй скачни карту. Это к вопросу о несовместимости аур - данный метод позволит совмещать даже одинаковые.
Старый 10.09.2007, 20:07
Medivx

offline
Опыт: 375
Активность:
Всё же я не понял как добавлять бесконечное число аур и какими тригерами это делать((
Старый 11.09.2007, 13:19
LuciFEAR
C++ & JASS Maniac!!!
offline
Опыт: 62
Активность:
Код:
function Trig_FireRage_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A004'
endfunction

function Trig_FireRage_Actions takes nothing returns nothing
    local integer LOfAbil
    local real bLife
    local trigger CurrTrig
    set CurrTrig = GetTriggeringTrigger()
    set LOfAbil = GetUnitAbilityLevelSwapped('A004', GetTriggerUnit())
    call SetUnitLifeBJ(GetTriggerUnit(), (GetUnitStateSwap(UNIT_STATE_LIFE, GetTriggerUnit()) - LOfAbil))
    call TriggerSleepAction(1.00)
    if UnitHasBuffBJ(GetTriggerUnit(),'A004') then
     set bLife = GetUnitStateSwap(UNIT_STATE_LIFE, GetTriggerUnit())
     call TriggerExecute(CurrTrig)
    else 
     call DisableTrigger(GetTriggeringTrigger())
     call DisableTrigger(CurrTrig)
    endif
endfunction

//===========================================================================
function InitTrig_FireRage takes nothing returns nothing
    set gg_trg_FireRage = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_FireRage, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition(gg_trg_FireRage, Condition(function Trig_FireRage_Conditions))
    call TriggerAddAction(gg_trg_FireRage, function Trig_FireRage_Actions)
endfunction

Почему триггер продолжает наносить урон даже после завершения??
И ещё: может, кто - нибудь желает поделиться опытом с начинающим JASS'ером? Или хотя бы помочь разобраться, почему при смене пиктограммы предмета кулдаун не отображается?? Ася: 364-298-189. С 3 до 7 по московскому.
Старый 11.09.2007, 17:14
J
expert
offline
Опыт: 48,447
Активность:
вот что будет если это немножко привести в должный вид, неисправляя ошибок:
Код:
function Trig_FireRage_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A004'
endfunction

function Trig_FireRage_Actions takes nothing returns nothing
    local unit    Target   = GetTriggerUnit()
    local trigger CurrTrig = GetTriggeringTrigger()    
    local integer LOfAbil   = GetUnitAbilityLevel(Target, 'A004')
    call SetUnitState(Target, UNIT_STATE_LIFE, GetUnitState(Target, UNIT_STATE_LIFE) - LOfAbil)
    call TriggerSleepAction(1)
    if GetUnitAbilityLevel(Target, 'A004') > 0 then
        call TriggerExecute(CurrTrig)
    else
        call DisableTrigger(CurrTrig)
    endif
endfunction

function InitTrig_FireRage takes nothing returns nothing
    set gg_trg_FireRage = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_FireRage, EVENT_PLAYER_UNIT_SPELL_EFFECT              )
    call TriggerAddCondition          (gg_trg_FireRage, Condition(function Trig_FireRage_Conditions))
    call TriggerAddAction             (gg_trg_FireRage,           function Trig_FireRage_Actions    )
endfunction

теперь насчет ошибок...
Цитата:
UnitHasBuffBJ(GetTriggerUnit(),'A004')

ты вроде проверяеш не наличее бафа этого спела, а само наличее этого спела.. так и надо?
Цитата:
set bLife = GetUnitStateSwap(UNIT_STATE_LIFE, GetTriggerUnit())
call TriggerExecute(CurrTrig)
else
call DisableTrigger(GetTriggeringTrigger())
call DisableTrigger(CurrTrig)

как я понял если баф есть то запустить триггер опять...
но если его нет то выключить тригер без возможности срабатывания события.. так?

Отредактировано Jon, 11.09.2007 в 17:31.
Старый 11.09.2007, 17:26
Toadcop

offline
Опыт: 54,313
Активность:
кстати удалять триггер в самом себе очень не советуетьса =) это может закораптить стек хендлов. вообще call DestroyTrigger(GetTriggeringTrigger()) = evil =) можно сделать тру сису(функции)... с очередью на удаления триггеров... тогда всё будет отлично =)
Старый 12.09.2007, 00:18
Medivx

offline
Опыт: 375
Активность:
Цитата:
Сообщение от FellGuard
http://xgm.guru/forum/showthread.php?t=9678
http://xgm.guru/forum/showthread.php?t=12730
вот две ссылки. В первой почитай первый пост, во второй скачни карту. Это к вопросу о несовместимости аур - данный метод позволит совмещать даже одинаковые.

1.Почитал обе статьи но так и не понял как это сдлеать плиз ктонить напишите подробно шаг за шагом каким тригером добавить предмет каким убрать и тд.
2. как отследить когда герой наносит удар? я хотел создать абилку как у рексара в доте когда бьет скорость увеличивается и также опять понадобится тут мне добавление предметов так как еще идет у меня прибавление урона
3. как сделать чтобы когда кастовалось одно заклинание за ним кастовалось еще и другое ну например кастуем молот бурь и пока он летит земля подним загорается ну собственно это пример абилки моего героя
ну усё НАУЧИТЕ ПЛИЗ
Старый 16.09.2007, 08:30
Kel_TuZaD

offline
Опыт: 1,630
Активность:
Нужна помощь! Я начал осваивать систему Toadcop'a XAT создал спелл и он не работает помогите исправить.

» КОД
Код:
//======================================================================
//NOVA SPELL
//======================================================================
library A initializer A_Init uses XAT

constant function MapSize takes nothing returns real
    return 11392.
endfunction

function AreaSafe takes real R returns real
    if R > MapSize() then
        return MapSize()-64
    endif
    if R < -MapSize() then
        return -MapSize()+64
    endif
    return R
endfunction

function PolarProjectionX takes real X, real R, real A returns real
    return AreaSafe(X + Cos(A * 0.0174533) * R)
endfunction

function PolarProjectionY takes real Y, real R, real A returns real
    return AreaSafe(Y + Sin(A * 0.0174533) * R)
endfunction
//=======================================================================
private struct NV
unit caster
unit f
group g = CreateGroup()
group n
integer time
real R
endstruct

function Nova_Check takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

function Nova_Filter takes nothing returns boolean
    return IsPlayerEnemy(GetOwningPlayer(GetSpellAbilityUnit()), GetOwningPlayer(GetFilterUnit())) and not IsUnitType(GetFilterUnit(), UNIT_TYPE_FLYING)
endfunction

function Nova_CopyGroup takes group g returns group
    set bj_groupAddGroupDest = CreateGroup()
    call ForGroup(g, function GroupAddGroupEnum)
    return bj_groupAddGroupDest
endfunction

function Nova_Action takes nothing returns nothing
    local timer t =GetExpiredTimer()
    local NV a =GetInt(t)
    local real x = GetUnitX(a.caster)
    local real y = GetUnitY(a.caster)
    local real ang = 0
    local real X1
    local real Y1
    local integer I=0
    loop
        exitwhen I > 30
        set X1 = PolarProjectionX(x,a.R,ang)
        set Y1 = PolarProjectionY(y,a.R,ang)
        call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\Bolt\\BoltImpact.mdl",X1,Y1))
        set ang = (ang+12)
        set I = (I+1)
    endloop
    set a.R = a.R+50
    set a.time = a.time+1
    if a.time >= 7 then
        call RemoveInt(t)
        call DestroyTimer(t)
        call a.destroy()
    endif
endfunction

function Nova_Launch takes nothing returns nothing
    local NV a = NV.create()
    local timer t = CreateTimer()
    local real x = GetUnitX(a.caster)
    local real y = GetUnitY(a.caster)
    local boolexpr b = Condition(function Nova_Filter)
    local integer lvl = GetUnitAbilityLevel(a.caster,'A000')
    set a.caster = GetSpellAbilityUnit()
    call GroupEnumUnitsInRange(a.g,x,y,500,b)
    set a.n = Nova_CopyGroup(a.g)
    loop
        set a.f = FirstOfGroup(a.n)
        exitwhen a.f == null
        call UnitDamageTarget(a.caster,a.f, 50*lvl, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, null)
        call GroupRemoveUnit(a.n,a.f)
    endloop
    set a.time = 150
    set a.R = 0
    call SetInt(t,a)
    call TimerStart(t,0.25,true,function Nova_Action)
    set t=null
endfunction

//A Init
private function A_Init takes nothing returns nothing
    local trigger t=CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition(t,Condition(function Nova_Check))
    call TriggerAddAction(t,function Nova_Launch)
    set t=null
endfunction
endlibrary

Отредактировано Kel_TuZaD, 18.09.2007 в 16:48.
Старый 18.09.2007, 12:51
J
expert
offline
Опыт: 48,447
Активность:
что за фигню ты юзаеш?
Насчет ошибки: как открыл код сразу сразу ее увидел
Код:
local real x = GetUnitX(a.caster)
local real y = GetUnitY(a.caster)
//а ниже
set a.caster = GetSpellAbilityUnit()

Отредактировано Jon, 18.09.2007 в 15:50.
Старый 18.09.2007, 15:21
Kel_TuZaD

offline
Опыт: 1,630
Активность:
Jon, я исправил свои касяк но чето не пашет .Мож где еще ошибка есть посмотрите пожалуйста.
Старый 18.09.2007, 16:33
J
expert
offline
Опыт: 48,447
Активность:
Kel_TuZaD покажи исправленный код
Старый 18.09.2007, 16:40
Kel_TuZaD

offline
Опыт: 1,630
Активность:
Jon,вот я прбовал и так и сразу в struct вписывать значения

» код:
function Nova_Launch takes nothing returns nothing
local NV a = NV.create()
local timer t = CreateTimer()
local real x
local real y
local boolexpr b = Condition(function Nova_Filter)
local integer lvl = GetUnitAbilityLevel(a.caster,'A000')
set a.caster = GetSpellAbilityUnit()
set x=GetUnitX(a.caster)
set y=GetUnitY(a.caster)
call GroupEnumUnitsInRange(a.g,x,y,500,b)
set a.n = Nova_CopyGroup(a.g)
loop
set a.f = FirstOfGroup(a.n)
exitwhen a.f == null
call UnitDamageTarget(a.caster,a.f, 50*lvl, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, null)
call GroupRemoveUnit(a.n,a.f)
endloop
set a.time = 150
set a.R = 0
call SetInt(t,a)
call TimerStart(t,0.25,true,function Nova_Action)
set t=null
endfunction
Старый 18.09.2007, 16:47
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
local integer lvl = GetUnitAbilityLevel(a.caster,'A000')
set a.caster = GetSpellAbilityUnit()
Старый 18.09.2007, 16:50
Kel_TuZaD

offline
Опыт: 1,630
Активность:
Jon,я не доглядел когда выкладывал код я уже иправлял это
Старый 18.09.2007, 16:53
J
expert
offline
Опыт: 48,447
Активность:
Код:
group g = CreateGroup()

так помойму нельзя делать в структурах... попробуй вынести эту переменую в глобальные
Старый 18.09.2007, 17:31
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
Цитата:
Сообщение от Jon
Код:
group g = CreateGroup()

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

да, нельзя, так как это массив
Старый 18.09.2007, 17:34
J
expert
offline
Опыт: 48,447
Активность:
ну вот поэтому и говорю что нельзя
Старый 18.09.2007, 18:17
adic3x

offline
Опыт: 108,439
Активность:
why not?

ADOLF добавил:
Код:
vJass:

struct B
 group g=CreateGroup()
endstruct

function MF takes nothing returns nothing
 local B b=B.create()
 set b.g=null
endfunction

Jass:

function s__B__allocate takes nothing returns integer
 local integer this=si__B_F
    if (this!=0) then
        set si__B_F=si__B_V[this]
    else
        set si__B_I=si__B_I+1
        set this=si__B_I
    endif
    if (this>8190) then
        return 0
    endif

    set s__B_g[this]=CreateGroup()
    set si__B_V[this]=-1
Старый 18.09.2007, 18:19
Закрытая тема

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

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

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

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



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