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

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

Ответ
 
Raptor2108

offline
Опыт: 195
Активность:
Морозный шар Спелл на jass
Пишу свой первый спел на джасе но что то запутался выдает несколько ошибок не могу понять где же именно помогите пожалуйста доделать.
вот код:
((код jass
function Trig_spell_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A004'
endfunction
function timerg takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer ID = GetHandleId(t)
local group g = LoadGroupHandle(udg_Hash, ID, 1)
local unit dummy = LoadUnitHandle(udg_Hash, ID,0)
local integer level = LoadInteger(udg_Hash, ID, 2)
local unit f = null
local integer i = LoadInteger(udg_Hash, ID, 3)
local unit caster = LoadUnitHandle(udg_Hash, ID, 4)
loop
set f = FirstOfGroup(g)
exitwhen f == null
if i < 10 then
if DistanceBetweenPoints(GetUnitLoc(dummy), GetUnitLoc(f)) <= 1000 then
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl​", f, "origin")
call UnitDamageTarget(caster, f, 40 * level, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, null)
endif
call SaveInteger(udg_Hash, ID, 3, i + 1)
else
call DestroyTimer(t)
call GroupRemoveUnit(g, f)
call FlushChildHashtable(udg_Hash, ID)
set t = null
set g= null
set dummy = null
set f = null
set caster = null
endif
endloop
endfunction
function Shout_banshee_Dmg_Filter1 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 then
set f=null
return true
else
set f=null
return false
endif
endfunction
function Trig_spell_Actions takes nothing returns nothing
local timer t = CreateTimer()
local unit dummy
local integer ID = GetHandleId(t)
local group g = CreateGroup()
local boolexpr a=Condition(function Shout_banshee_Dmg_Filter1)
local integer i = 1
local unit caster = GetSpellAbilityUnit()
local integer level = GetUnitAbilityLevel(GetSpellAbilityUnit(),'A004')
call CreateUnit(GetOwningPlayer(GetSpellAbilityUnit), 'hfoo', GetUnitX(GetSpellTargetLoc()), GetUnitY(GetSpellTargetLoc()), 0 )
call GroupEnumUnitsInRange(g, GetUnitX(GetSpellTargetLoc()), GetUnitY(GetSpellTargetLoc()), 1000, a)
call SaveUnitHandle(udg_Hash, ID, 0, dummy)
call SaveGroupHandle(udg_Hash, ID, 1, g)
call SaveInteger(udg_Hash, ID,2 ,level)
call DestroyEffect(AddSpecialEffectLoc ("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl", GetUnitLoc(dummy)))
call TimerStart(t, 1, true, function timerg)
call SaveInteger(udg_Hash, ID, 3, i)
call SaveUnitHandle(udg_Hash, ID, 4, caster)
set t = null
set dummy = null
set g = null
set a = null
set caster = null
endfunction
===========================================================================
function InitTrig_spell takes nothing returns nothing
set gg_trg_spell = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_spell, EVENT_PLAYER_UNIT_SPELL_CHANNEL )
call TriggerAddCondition( gg_trg_spell, Condition( function Trig_spell_Conditions ) )
call TriggerAddAction( gg_trg_spell, function Trig_spell_Actions )
endfunction
))
Raptor2108 добавил:
ах да Спел создает в точке дамми юнита ввиде морозного шара который в радиусе 1000 от себя морозит всех и наносит урон.

Отредактировано ShadoW DaemoN, 06.05.2011 в 11:22.
Старый 06.05.2011, 10:22
Doc

offline
Опыт: 63,163
Активность:
  1. В функции createunit забыл скобки у GetSpellAbilityUnit.
  1. зачем вообще этот GetSpellAbilityUnit? у тебя есть локалка caster.
  1. куча утечек, например локэйшены и булэкспр.
Старый 06.05.2011, 11:08
Raptor2108

offline
Опыт: 195
Активность:
caster поправил, а утечки от була яж обнулил его? Ругает на функцию ЮнитДамаж
Старый 06.05.2011, 11:55
Raptor2108

offline
Опыт: 195
Активность:
Всеранво ругается на дамаж и еще на эту строчку
local integer i = LoadInteger(udg_Hash, ID, 4)
Старый 06.05.2011, 12:30
Doc

offline
Опыт: 63,163
Активность:
ARHUI, не неси чуш.
» Фасткод
function Trig_spell_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A004'
endfunction

function dc takes real xa, real ya, real xb, real yb returns real
    local real dx = xb - xa
    local real dy = yb - ya
    return SquareRoot(dx * dx + dy * dy)
endfunction

function timerg takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer ID = GetHandleId(t)
    local group g = LoadGroupHandle(udg_Hash, ID, 1)
    local unit dummy = LoadUnitHandle(udg_Hash, ID,0)
    local integer level = LoadInteger(udg_Hash, ID, 2)
    local unit f = null
    local integer i = LoadInteger(udg_Hash, ID, 3)
    local unit caster = LoadUnitHandle(udg_Hash, ID, 4)
    local real xd = GetUnitX(dummy)
    local real yd = GetUnitY(dummy)
    loop
        set f = FirstOfGroup(g)
        exitwhen f == null
        if i < 10 then
            if dc(xd, yd, GetUnitX(f), GetUnitY(f)) <= 1000 then
                call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl​", f, "origin"))
                call UnitDamageTarget(caster, f, 40 * level, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, null)
            endif
            call SaveInteger(udg_Hash, ID, 3, i + 1)
        else
            call DestroyTimer(t)
            call GroupRemoveUnit(g, f)
            call FlushChildHashtable(udg_Hash, ID)
            set t = null
            set g= null
            set dummy = null
            set f = null
            set caster = null
        endif
    endloop
endfunction

function Shout_banshee_Dmg_Filter1 takes nothing returns boolean
    local unit f=GetFilterUnit()
    return IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()),GetOwningPlayer(f)) and !IsUnitType(f, UNIT_TYPE_DEAD) and !IsUnitType(f,UNIT_TYPE_STRUCTURE)
endfunction

globals
    boolexpr FILTER
endglobals

function Trig_spell_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local unit dummy
    local integer ID = GetHandleId(t)
    local group g = CreateGroup()
    local integer i = 1
    local unit caster = GetSpellAbilityUnit()
    local integer level = GetUnitAbilityLevel(GetSpellAbilityUnit(),'A004')
    local real tx = GetSpellTargetX()
    local real ty = GetSpellTargetY()
    call CreateUnit(GetOwningPlayer(caster), 'hfoo', tx, ty, 0 )
    call GroupEnumUnitsInRange(g, tx, ty, 1000, FILTER)
    call SaveUnitHandle(udg_Hash, ID, 0, dummy)
    call SaveGroupHandle(udg_Hash, ID, 1, g)
    call SaveInteger(udg_Hash, ID,2 ,level)
    call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl"​, tx, ty))
    call TimerStart(t, 1, true, function timerg)
    call SaveInteger(udg_Hash, ID, 3, i)
    call SaveUnitHandle(udg_Hash, ID, 4, caster)
    set t = null
    set dummy = null
    set g = null
    set caster = null
endfunction

//===========================================================================
function InitTrig_spell takes nothing returns nothing
    set gg_trg_spell = CreateTrigger(  )
    set FILTER = Condition(function Shout_banshee_Dmg_Filter1)
    call TriggerRegisterAnyUnitEventBJ( gg_trg_spell, EVENT_PLAYER_UNIT_SPELL_CHANNEL )
    call TriggerAddCondition( gg_trg_spell, Condition( function Trig_spell_Conditions ) )
    call TriggerAddAction( gg_trg_spell, function Trig_spell_Actions )
endfunction
Старый 06.05.2011, 20:22
Ответ

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

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

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

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



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