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

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

Закрытая тема
 
CeDiL
Pinkie <3
offline
Опыт: 2,092
Активность:
Укажите на Ошибку пожалуста.
Вот моё заклинание Fan of Knives по идее оно кидает 18 штук ножей вокруu себя, они должны бить всех врагов в радиусе 100м от себя и потом исчезать, но этого не происходит ( урона нету) пожалуста укажите на ошибку -
scope FanofKnifes initializer onInit

    globals
        private trigger FokTrigger = CreateTrigger()
        private unit FokKnife
        private unit FokCaster
        private unit FokTarget
        private xedamage xed
        private group g = null
    endglobals

    private function Conditions_Dummy takes nothing returns boolean
        return GetSpellAbilityId() == 'A004'
    endfunction

    private function Actions_Dummy takes nothing returns nothing
        local location FokLocation1 
        local location FokLocation2
        local location FokLocation3
        local real FokSpeed = 15.00
        local real FokDistance = 500.00
        local real FokAngle
        local real FokFacing
        local integer FokKnives = 18
        local player FokPlayer
        set FokCaster = GetTriggerUnit()
        set FokLocation1 = GetUnitLoc(FokCaster)
        set FokPlayer = GetOwningPlayer(FokCaster)
        set bj_forLoopAIndex = 1
        set bj_forLoopAIndexEnd = FokKnives
           loop
                exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
                set FokAngle = ( ( 360.00 / I2R(FokKnives) ) * I2R(bj_forLoopAIndex) )
                set FokLocation2 = Location(GetLocationX(FokLocation1) + 50.00 * Cos(FokAngle * bj_DEGTORAD), GetLocationY(FokLocation1) + 50.00 * Sin(FokAngle * bj_DEGTORAD))
                set FokKnife = CreateUnitAtLoc( FokPlayer, 'h000', FokLocation2, FokAngle )
                call UnitApplyTimedLife(FokKnife,'BTLF', 1.30)
                set FokFacing = ( GetUnitFacing(FokKnife) + FokAngle )
                set FokLocation3 = Location(GetLocationX(FokLocation2) + FokDistance * Cos(FokFacing * bj_DEGTORAD), GetLocationY(FokLocation2) + FokDistance * Sin(FokFacing * bj_DEGTORAD))
                call SetUnitFacing(FokKnife, FokFacing)
                call IssuePointOrderLoc( FokKnife, "move", FokLocation3 )
                set bj_forLoopAIndex = bj_forLoopAIndex + 1
            endloop
            call TriggerRegisterUnitInRange(FokTrigger, FokKnife, 100.00, null)//Condition(IsUnitEnemy(GetTriggerUnit(), FokPlayer)))
            call RemoveLocation(FokLocation1)
            call RemoveLocation(FokLocation2)
            call RemoveLocation(FokLocation3)
            set FokPlayer = null
    endfunction


    private function Actions_Damage takes nothing returns nothing
        local real x = GetUnitX(FokKnife)
        local real y = GetUnitY(FokKnife)
        set FokTarget = GetFilterUnit()
        call KillUnit(FokKnife)
        call GroupEnumUnitsInRange(g, x, y, 100.0 + XE_MAX_COLLISION_SIZE , null)
        call xed.damageGroup(FokCaster, g, GetHeroAgi(FokCaster, true) * (1 * GetUnitAbilityLevel(FokCaster, 'A004')))
        set FokKnife = null
        set FokCaster = null
        call DestroyGroup(g)
    endfunction
    
 //  private function Conditions_Damage takes nothing returns boolean
 //   local unit u = GetFilterUnit()
 //   return GetUnitState(u, UNIT_STATE_LIFE) >= 0
 //   set u = null
// endfunction
   
    private function onInit takes nothing returns nothing
        local trigger tr = CreateTrigger()
        call TriggerRegisterAnyUnitEventBJ( tr, EVENT_PLAYER_UNIT_SPELL_EFFECT )
        call TriggerAddCondition( tr, Condition( function Conditions_Dummy ) )
        call TriggerAddAction( tr, function Actions_Dummy )
        call TriggerAddAction( FokTrigger, function Actions_Damage) 
    endfunction

Отредактировано CeDiL, 06.07.2010 в 03:00.
Старый 06.07.2010, 02:41
adic3x

offline
Опыт: 108,439
Активность:
call xed.damageGroup(...
Мы сами должны догадаться, что делает эта функция? Тем более что это вызов метода для объекта, который вообще не объявлен в коде.
Старый 06.07.2010, 12:19
CeDiL
Pinkie <3
offline
Опыт: 2,092
Активность:
я извеняюсь ADOLF, пропустил(
method damageGroup takes unit source, group targetGroup, real damage returns integer
         local damagetype dt=.CurrentDamageType
         local attacktype at=.CurrentAttackType
         local integer    tg=.CurrentDamageTag
         local unit       target
         local real       f
         local integer    count=0

            set .CurrentDamageType = .dtype
            set .CurrentAttackType = .atype
            set .CurrentDamageTag  = .tag
            set .inUse = .inUse +1
            loop
                set target=FirstOfGroup(targetGroup)
                exitwhen (target==null)
                call GroupRemoveUnit(targetGroup,target)
                set f= this.getTargetFactorCore(source,target,false)
                if (f!=0.0) then
                    set count=count+1

                    if(.usefx) then
                        call DestroyEffect(  AddSpecialEffectTarget(this.fxpath, target, this.fxattach) )
                    endif                 

                    call UnitDamageTarget(source,target, f*damage, true, .ranged, .atype, .dtype, .wtype )
                endif
            endloop


            set .inUse = .inUse -1
            set .CurrentDamageTag=tg
            set .CurrentDamageType = dt
            set .CurrentAttackType = at
         return count
        endmethod
Старый 06.07.2010, 16:34
adic3x

offline
Опыт: 108,439
Активность:
Скажите, а Вы случайно не "делаете" Ваш код методом копирования различных функций из чужих наработок без каких либо попыток понять, как и что работает?
Мне просто очень сложно понять, откуда береться объект xed, и вообще зачем тут вообще привязано ООП куда попало?
Старый 07.07.2010, 10:27
CeDiL
Pinkie <3
offline
Опыт: 2,092
Активность:
ADOLF, проблема в том что не писал я в Жассе уже 2 года, и теперь приходится всё вспоминать
вот я и паралельно с этим по немногу учюсь ВЖасс также посколько я на месте стоял и не понимал что дальше делать я попросил помощи у старого друга тот посоветовал своё, я вставил, теперь я уже почти всё вспомнил, и используя Систему Vexorian'a xe переписал всё сначало, теперь всё работает отлично!
топик можно закрывать
Старый 07.07.2010, 18:31
Закрытая тема

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

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

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

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



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