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

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

Ответ
 
Chiters
Хирург Сскальпелем в руке
offline
Опыт: 2,989
Активность:
vJass Способности для каждого юнита
Всем привет, у меня огромная просьба к тому кто очень хорошо знает vJass и хорошо может описать что за чем идет.
Я недавно стал изучать вДжаз ну и как каждий начинающий обращается к тому кто умеет.
Я понимаю таких тем куча и я юзал поиск и читал разхные статьи но там большинство запутана что не понять.
В общем просьба сделать Способность на подобе FireBole ну как обычно дами с моделью "огненной шар" летит в сторону которую указал, 100 урона в юнита которого попал. Но чтоб он работал не для 1 юнита, а например 12 юнитов, чтоб каждый Игрок мог спокойно без утечек юзать способность. Опишите как можно подробней, особено (Глобальные, структура и т.д. т.п.)
Так же если у кого то есть время уделить минут 30 чтоб обьяснить в Асе, Скайп, TeamViwer т.д. т.п. то напишите.
Буду очень благодарен тому кто поможет, а также заранее спасибо.
Желательно без "Кеш"

Отредактировано Chiters, 22.07.2009 в 21:15.
Старый 22.07.2009, 21:09
perimetral

offline
Опыт: 3,058
Активность:
На самом деле файрбол можно абсолютно без утечек организовать и на простом Джассе. Кеш тут абсолютно не нужен. Завтра могу если надо скинуть пример.(сегодня спать уже хочцца)
Старый 23.07.2009, 02:46
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
» code
Код:
libarary FireBall initializer Init
    globals
        private constant integer Id = 'A000' //константа Id спелла
        private constant integer Unit_Id = 'u000'// Id юнита
        private constant real dist = 1000
        private constant real speed = 600
        private constant real dmg  = 100
        private constant real tp = 0.04// период таймера
        
        private group g = CreateGroup()
        private timer t = CreateTimer()
    endglobals

    private struct ball
        unit u
        real x
        real y
        real d = dist
    endstruct

    private function Move takes nothing returns nothing
        local ball a = GetUnitUserData(GetEnumUnit())
        local group gr = CreateGroup()
        call SetUnitX(a.u,GetUnitX(a.u)+a.x)
        call SetUnitY(a.u,GetUnitY(a.u)+a.y)
        set a.d = a.d - speed * tp
        call GroupEnumUnitsInRange(gr,GetUnitX(a.u),GetUnitY(a.u),75,null)
        if FirstOfGroup(gr) != null or a.d <= 0  then
            call UnitDamageTarget(a.u,FirstOfGroup(g),dgm,false,false,ATTACK_TYPE_CHAOS,DAMAGE_TY  PE_FIRE,WEAPON_TYPE_WHOKNOWS)
            call GroupRemoveUnit(g,a.u)
            if FirstOfGroup(g) == null then
                call PauseTimer()
            endif
            call KillUnit(a.u)
            set a.u = null
            call a.destroy()
        endif
        call DestroyGroup(gr)
        set gr = null
    endfunction

    private function GroupAction takes nothing returns nothing
        call ForGroup(g, function Move)
    endfunction

    private function AddUnit takes nothing returns nothing
        local ball a = ball.create()
        local unit u = GetSpellTargetUnit()
        local real an = Atan2(GetUnitY(u)-GetUnitY(GetTriggerUnit()),GetUnitX(u)-GetUnitX(GetTriggerUnit()),an*bj_RADTODEG)
        set a.u = CreateUnit(GetTriggerPlayer(),Unit_Id,GetUnitX(GetTriggerUnit())+50*Cos(an)
        if FirstOfGroup(g) == null then
            call TimerStart(t, tp, true, function GroupAction)
        endif
        call GroupAddUnit(g,a.u)
        call SetUnitUserData(a.u,a) //сохраняем номер структуры в дату дамика
        set a.x = speed * Cos(an) * tp // вектор смещения снаряда по оси x
        set a.y = speed * Sin(an) * tp// y
        set u = null
    endfunction

    private function Cond takes nothing returns boolean
        return GetSpellAbilityId == Id
    endfunction

    private function Init
        local trigger t = CreateTrigger()
        call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_ENDCAST)
        call TriggerAddCondition(t,Condition(function Cond))
        call TriggerAddAction(t,function AddUnit)
        set t = null
    endfunction

endlibrary

советую почитать мануал
что не понятно обращайся в асю
Старый 23.07.2009, 10:05
Ranger21
I love beatiul days XD
offline
Опыт: 13,274
Активность:
http://xgm.guru/forum/showthread.php?t=25549&page=1&highlight=Fireball
http://xgm.guru/forum/showthread.php?t=15889&highlight=Fireball

Ищи там Fireball

Два хороших примера


ELDAR

Либрари здесь абсолютный ф0лс!

Надо Scope

PS: Зря я тебе кинул пример Fireball'a адольфа xD, там довольно трудно разобраться :), хотя он просто Raw коды переводит в другую систему счисления. И использует собственноручно написанную альтернативу структурам

Отредактировано Ranger21, 23.07.2009 в 10:22.
Старый 23.07.2009, 10:13
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
Цитата:
Либрари здесь абсолютный ф0лс!

да абсолютно не важно
Старый 23.07.2009, 10:45
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
а всегда интересно было узнать чем scope от library отличается
Старый 23.07.2009, 12:03
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
цитата из мануала
Цитата:
Области (scope) - по сути те же библиотеки, с различием в том, что они будут объявлены не вверху кода, а на своем реальном месте, не могут быть инициализированы, и не могут использовать другие библиотеки
Старый 23.07.2009, 12:06
Ответ

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

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

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

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



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