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

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

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

offline
Опыт: 1,076
Активность:
В заклинании не действует стан .
Всем здрасте .
Скилл должен довать врагам(в области 500) урон + стан.
Но стан не проходит , я его зделал так :
Создовал юнита около вражеского и этому юниту(которого создал) я присваивал спелл , и он кастует этот спелл(стан) на вражеского юнита.Стан должен быть равен спеллу моего героя.
ну вот стан не проходит , в чём ошибка незнаю .
function KrikYarosti_Conditions takes nothing returns boolean
return GetSpellAbilityId()=='A000'
endfunction

function Spell_A000_Filter takes nothing returns boolean
local unit f=GetFilterUnit()
if IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()),GetOwningPlayer(f)) and GetWidgetLife(f)>=0.405 and IsUnitType(f,UNIT_TYPE_STRUCTURE)==false and IsUnitType(f,UNIT_TYPE_MAGIC_IMMUNE)==false then
    set f=null
    return true
else
    set f=null
    return false
endif
endfunction


function GroupAction_A000 takes nothing returns nothing
local unit c=GetEnumUnit()
local unit u=GetTriggerUnit()
local unit d=CreateUnit(GetOwningPlayer(u),'n00F',GetUnitX(c),GetUnitY(c),0.)
call UnitAddAbility(d,'A001')
call SetUnitAbilityLevel(d,'A001',GetUnitAbilityLevel(u,'A000'))
call IssueTargetOrder(d,"thunderbolt",c)
call UnitApplyTimedLife(d,'BTLF',0.5)
call UnitDamageTarget(u,c,GetHeroStr(u,true)*0.5+GetUnitAbilityLevel(u,'A000')*50.,true,false,ATTACK_TYPE​_CHAOS,DAMAGE_TYPE_NORMAL,null)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\NightElf\\Taunt\\TauntCaster.mdl",GetUn​itX(c),GetUnitY(c)))
set u=null
set d=null
set c=null
endfunction

function KrikYarosti_Actions takes nothing returns nothing
local unit u=GetTriggerUnit()
local group g=CreateGroup()
local boolexpr b=Condition(function Spell_A000_Filter)
call GroupEnumUnitsInRange(g,GetUnitX(u),GetUnitY(u),500.,b)
call ForGroup(g,function GroupAction_A000)
call DestroyBoolExpr(b)
call DestroyGroup(g)
set u=null
set b=null
set g=null
endfunction

function InitTrig_KrikYarosti takes nothing returns nothing
local trigger trg=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trg,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(trg,Condition(function KrikYarosti_Conditions))
call TriggerAddAction(trg,function KrikYarosti_Actions)
set trg=null
endfunction
Старый 16.08.2011, 14:09
16GB
GhostOne User
offline
Опыт: 59,317
Активность:
отладочные сообщения?
Старый 16.08.2011, 14:15
Doc

offline
Опыт: 63,163
Активность:
А урон проходит?
Выложи карту с неработающим спеллом.
Старый 16.08.2011, 14:21
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
В функции GroupAction_A000 выведи на экран имя юнита u
И хватит извращаться с возвращением булина.Это -
function Spell_A000_Filter takes nothing returns boolean
local unit f=GetFilterUnit()
if IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()),GetOwningPlayer(f)) and GetWidgetLife(f)>=0.405 and IsUnitType(f,UNIT_TYPE_STRUCTURE)==false and IsUnitType(f,UNIT_TYPE_MAGIC_IMMUNE)==false then
    set f=null
    return true
else
    set f=null
    return false
endif
endfunction
заменяешь на это
function Spell_A000_Filter takes nothing returns boolean
return IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()),GetOwningPlayer(GetFilterUnit())) and GetWidgetLife(GetFilterUnit())>=0.405 and not IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE) and not IsUnitType(GetFilterUnit(),UNIT_TYPE_MAGIC_IMMUNE)
endfunction
Да и вообще я бы сделал так
function KrikYarosti_Conditions takes nothing returns boolean
return GetSpellAbilityId()=='A000'
endfunction

function KrikYarosti_Actions takes nothing returns nothing
local unit u=GetTriggerUnit()
local group g=CreateGroup()
local unit f
local unit d
call GroupEnumUnitsInRange(g,GetUnitX(u),GetUnitY(u),500.,null)
loop
set f=FirstOfGroup(g)
exitwhen f==null
if IsPlayerEnemy(GetOwningPlayer(u),GetOwningPlayer(f)) and GetWidgetLife(f)>=0.405 and not IsUnitType(f,UNIT_TYPE_STRUCTURE) and not IsUnitType(f,UNIT_TYPE_MAGIC_IMMUNE) then
set d=CreateUnit(GetOwningPlayer(u),'n00F',GetUnitX(f),GetUnitY(f),0.)
call UnitAddAbility(d,'A001')
call SetUnitAbilityLevel(d,'A001',GetUnitAbilityLevel(u,'A000'))
call IssueTargetOrder(d,"thunderbolt",f)
call UnitApplyTimedLife(d,'BTLF',0.5)
call UnitDamageTarget(u,f,GetHeroStr(u,true)*0.5+GetUnitAbilityLevel(u,'A000')*50.,true,false,ATTACK_TYPE​_CHAOS,DAMAGE_TYPE_NORMAL,null)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\NightElf\\Taunt\\TauntCaster.mdl",GetUn​itX(f),GetUnitY(f)))
call GroupRemoveUnit(g,f)
else
call GroupRemoveUnit(g,f)
endif
endloop
call DestroyGroup(g)
set d=null
set f=null
set u=null
set g=null
endfunction

function InitTrig_KrikYarosti takes nothing returns nothing
local trigger trg=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trg,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(trg,Condition(function KrikYarosti_Conditions))
call TriggerAddAction(trg,function KrikYarosti_Actions)
call Preload("Abilities\\Spells\\NightElf\\Taunt\\TauntCaster.mdl")
set trg=null
endfunction
Старый 16.08.2011, 14:25
DqUaliTy

offline
Опыт: 1,076
Активность:
Да урон проходит и как раз чотко и ровно сколько написано.
Это мапа так , От нечего делать делаю ))
Прикрепленные файлы
Тип файла: w3x The harm world BETA v0.01.w3x (92.7 Кбайт, 6 просмотров )
Старый 16.08.2011, 14:29
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
У тебя цели у молотка неправильно выставлены
Вообще не мешало бы дамми-абилки сначала на работоспособность проверять,прежде чем на код бросаться
Старый 16.08.2011, 14:36
DqUaliTy

offline
Опыт: 1,076
Активность:
У тебя цели у молотка неправильно выставлены
Как понять?
Старый 16.08.2011, 14:46
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Поставь волшебницу(или любого юнита с маной),дай ей свой молоток и попробуй засадить его в огров
Старый 16.08.2011, 14:49
Doc

offline
Опыт: 63,163
Активность:
Исправил очевидные ошибки.
Прикрепленные файлы
Тип файла: w3x The harm world BETA v0.01.w3x (91.2 Кбайт, 8 просмотров )
Старый 16.08.2011, 14:50
DqUaliTy

offline
Опыт: 1,076
Активность:
Ого , вот это познания Jass :D
теперь чтобы я понел объсни , что да как пожалуйста .
Что это такое?? Впервы вижу.
//TESH.scrollpos=19
//TESH.alwaysfold=0
Как я понел это глобальные переменные.
теперь мне не придётся в других триггерах писать в локальные GetFilterUnit() и того похожего , также с булекспером ?
globals
    unit filterUnit
    boolexpr filter
endglobals
Почему эта строчка находится в ините??Самая нижняя функция.
set filter = Condition(function Spell_A000_Filter)
Старый 16.08.2011, 15:00
Master_chan
Полуночный командир
offline
Опыт: 15,660
Активность:
DqUaliTy:
TESH.scrollpos=19
TESH.alwaysfold=0
Поставь Джасс-Нью-Хрень-Пак
Старый 16.08.2011, 15:05
Doc

offline
Опыт: 63,163
Активность:
теперь мне не придётся в других триггерах писать в локальные GetFilterUnit() и того похожего , также с булекспером ?
ну как бы да.
set filter = Condition(function Spell_A000_Filter)
ну чтобы в самом начале 1 раз присвоить значение переменной.
Старый 16.08.2011, 15:11
DqUaliTy

offline
Опыт: 1,076
Активность:
И кстати незнаю почему , но я включил карту сразу проверку зделал(запустил варкрафт)
Скилл всё работает ошибок нет.
Но когда я нажал Выключить тригер и потом включить он мне 80 строк ошибок выдал :D
Старый 16.08.2011, 15:17
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Поставь Джасс-Нью-Хрень-Пак
Да и у меня вопрос - что правильнее это -
function KrikYarosti_Conditions takes nothing returns boolean
return GetSpellAbilityId()=='A000'
endfunction

globals
    unit filterUnit
    boolexpr filter
endglobals

function Spell_A000_Filter takes nothing returns boolean
set filterUnit = GetFilterUnit()
return IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()),GetOwningPlayer(filterUnit)) and not IsUnitType(filterUnit, UNIT_TYPE_DEAD) and not IsUnitType(filterUnit,UNIT_TYPE_STRUCTURE) and not IsUnitType(filterUnit,UNIT_TYPE_MAGIC_IMMUNE)
endfunction


function GroupAction_A000 takes nothing returns nothing
local unit c=GetEnumUnit()
local unit u=GetTriggerUnit()
local unit d=CreateUnit(GetOwningPlayer(u),'n00F',GetUnitX(c),GetUnitY(c),0.)
call UnitAddAbility(d,'A001')
call SetUnitAbilityLevel(d,'A001',GetUnitAbilityLevel(u,'A000'))
call IssueTargetOrder(d,"thunderbolt",c)
call UnitApplyTimedLife(d,'BTLF',0.5)
call UnitDamageTarget(u,c,GetHeroStr(u,true)*0.5+GetUnitAbilityLevel(u,'A000')*50.,true,false,ATTACK_TYPE​_CHAOS,DAMAGE_TYPE_NORMAL,null)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\NightElf\\Taunt\\TauntCaster.mdl",GetUn​itX(c),GetUnitY(c)))
set u=null
set d=null
set c=null
endfunction

function KrikYarosti_Actions takes nothing returns nothing
local unit u=GetTriggerUnit()
local group g=CreateGroup()
call GroupEnumUnitsInRange(g,GetUnitX(u),GetUnitY(u),500.,filter)
call ForGroup(g,function GroupAction_A000)
call DestroyGroup(g)
set u=null
set g=null
endfunction

function InitTrig_KrikYarosti takes nothing returns nothing
local trigger trg=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trg,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(trg,Condition(function KrikYarosti_Conditions))
call TriggerAddAction(trg,function KrikYarosti_Actions)
set filter = Condition(function Spell_A000_Filter)
set trg=null
endfunction
или это
function KrikYarosti_Conditions takes nothing returns boolean
return GetSpellAbilityId()=='A000'
endfunction

function KrikYarosti_Actions takes nothing returns nothing
local unit u=GetTriggerUnit()
local group g=CreateGroup()
local unit f
local unit d
call GroupEnumUnitsInRange(g,GetUnitX(u),GetUnitY(u),500.,null)
loop
set f=FirstOfGroup(g)
exitwhen f==null
if IsPlayerEnemy(GetOwningPlayer(u),GetOwningPlayer(f)) and GetWidgetLife(f)>=0.405 and not IsUnitType(f,UNIT_TYPE_STRUCTURE) and not IsUnitType(f,UNIT_TYPE_MAGIC_IMMUNE) then
set d=CreateUnit(GetOwningPlayer(u),'n00F',GetUnitX(f),GetUnitY(f),0.)
call UnitAddAbility(d,'A001')
call SetUnitAbilityLevel(d,'A001',GetUnitAbilityLevel(u,'A000'))
call IssueTargetOrder(d,"thunderbolt",f)
call UnitApplyTimedLife(d,'BTLF',0.5)
call UnitDamageTarget(u,f,GetHeroStr(u,true)*0.5+GetUnitAbilityLevel(u,'A000')*50.,true,false,ATTACK_TYPE​​_CHAOS,DAMAGE_TYPE_NORMAL,null)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\NightElf\\Taunt\\TauntCaster.mdl",GetUn​​itX(f),GetUnitY(f)))
call GroupRemoveUnit(g,f)
else
call GroupRemoveUnit(g,f)
endif
endloop
call DestroyGroup(g)
set d=null
set f=null
set u=null
set g=null
endfunction

function InitTrig_KrikYarosti takes nothing returns nothing
local trigger trg=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trg,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(trg,Condition(function KrikYarosti_Conditions))
call TriggerAddAction(trg,function KrikYarosti_Actions)
call Preload("Abilities\\Spells\\NightElf\\Taunt\\TauntCaster.mdl")
set trg=null
endfunction
И почему
Старый 16.08.2011, 15:18
Doc

offline
Опыт: 63,163
Активность:
Но когда я нажал Выключить тригер и потом включить он мне 80 строк ошибок выдал :D
потому что нужен JNGP
Nerevar, твой метод быстрее, это ясно(хотя в данном случае абсолютно неважно). Но я не брался менять фактуру кода, я лишь поправил ошибки.
Старый 16.08.2011, 15:47
DqUaliTy

offline
Опыт: 1,076
Активность:
и всё же спасибо :D
я скачал JNGP всё нормально :D
Старый 16.08.2011, 16:10
Закрытая тема

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

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

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

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



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