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

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

Если вы хотели бы использовать в своей карте нестандартное, оригинальное заклинание, но у вас не хватает знаний для его реализации, то эта тема специально для вас. В данной теме вы можете оставить заявку на создание необходимого вам заклинания.
Если вам нужно заклинание одного из персонажей DotA, то ищите его здесь
» Шаблон оформления заявки
Название: название заклинания
Способ исполнения: GUI / JASS / всё равно
Цель: вражеский юнит / свой юнит / сам герой / итд.
Для героя: да/нет
MUI: можно ли одновременно использовать заклинание больше одного раза
Описание: здесь описание нужного спелла
По уровням:
  1. здесь параметры на первом уровне
  2. здесь на втором
  3. итд.
Шаблон можно просто скопировать здесь, вставить в свое сообщение и заполнить:
**Название:** 
**Способ исполнения:**
**Цель:**
**Для героя:**
**MUI:**
**Описание:**
**По уровням:**
1. 
2. 
...

» Шаблон оформления ответа
Заклинание: здесь может быть название спелла или номер поста
Заказчик: здесь имя пользователя, который заказал заклинание
Способ исполнения: Jass или GUI
MUI: можно ли одновременно использовать заклинание больше одного раза
Нужен ли JNGP: Да или Нет
Используются глобальные переменные: Да или Нет
Шаблон можно просто скопировать здесь, вставить в свое сообщение и заполнить:
**Заклинание:**
**Заказчик:**
**Способ исполнения:**
**MUI:**
**Нужен ли JNGP:**
**Используются глобальные переменные:**
MUI - Multiplayer
Разрешается просто процитировать сообщение заказа и дописать информацию о получившемся заклинании.

Правила темы:

  • Оформление заявок согласно шаблонам.
  • Запрещено дублирование заявок.
  • Написание заявок понятным русским языком.
  • В пункте "Описание" необходимо максимально подробно описать все действия заклинания.
  • Если все же возникли вопросы у выполняющих заявки людей - редактируем старую заявку (дописываем описание), а не отписываемся дальше!
Заявки, не удовлетворяющие правилам, будут удалены!

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

offline
Опыт: 8,074
Активность:
Заказчик: Impertus
Название: Пламенное сердце
Уровни: 1 При желании, можно сделать многоуровневую
MUI: да
Исполнение: Jass
Тип: channel
JNGP: да
Глобальные переменные: Самоинициализируются (8+4) Без Хеш-таблицы
Описание: Герой начинает сгорать в собственном пламени, теряя 10% от текущего здоровья в сек. в течении 7 сек. и нанося такой же урон всем врагам в 400 аое и половинный урон в 400-800 аое. Чаннел, если прервать - герой будет продолжать гореть,но урон врагам не будет наноситься; если же герой умирает под воздействием этого эффекта (не прерванного), то он взрывается, нанося всем (и своим и чужим) урон в размере величины макс запаса жизни.
Исправлено: Урон наносится каждые 0.1 сек. При этом враги получают 10% урона за 1 сек.
» Код
library FlamingHeart

    globals
    private timer array Timer
    private unit array Caster
    private integer array nUse
    private boolean array Booms
    private integer array Loop
    private real array damage
    private integer N = 0
    private integer i
    private constant string Channel = "channel"
        // настройки //
    private constant string EFFECT_BOOM = "Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl"
    private constant string EFFECT_DAMAGE = "Environment\\LargeBuildingFire\\LargeBuildingFire2.mdl"
    private constant string EFFECT_DAMAGE_ATTACH = "chest"
    endglobals

    define {
        // настройки //
    private SPELL = 'A000'
    private N_SECONDS = 70 // только integer! Время действия (умноженное на 10), в сек. - должно совпадать со значением в РО
    private DAMAGE_PRECENT = 10.0 // Урон, в % от текущего здоровья героя
    private AERA_MAX = 400.0 // Радиус полного урона
    private AREA_MIN = 800.0 // Радиус половины урона
    private AREA_BOOM = 500.0 // Радиус урона при взрыве
    // Типы нанесенного урона
    private TYPE_ATTACK = ATTACK_TYPE_MAGIC
    private TYPE_DAMAGE = DAMAGE_TYPE_FIRE
    }
    
function Trig_FlamingHeart_Filter takes nothing returns boolean
    return (GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0.00)and(IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(Caster[i])))and(IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false)
endfunction
function Trig_FlamingHeart_FilterALL takes nothing returns boolean
    return (GetUnitState(GetFilterUnit(), UNIT_STATE_LIFE) > 0.00)and(IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == false)
endfunction

function Trig_FlamingHeart_Group takes nothing returns nothing
    call UnitDamageTarget( Caster[i], GetEnumUnit(), damage[i], true, false, TYPE_ATTACK, TYPE_DAMAGE, WEAPON_TYPE_WHOKNOWS )
    call DestroyEffect ( AddSpecialEffectTarget ( EFFECT_DAMAGE, GetEnumUnit(), EFFECT_DAMAGE_ATTACH ) )
endfunction
    
function Trig_FlamingHeart_Timer takes nothing returns nothing
    set i = 1
    whilenot GetExpiredTimer()==Timer[i] {
    i++ }
    local real HP = GetUnitState(Caster[i], UNIT_STATE_LIFE)
    if GetUnitCurrentOrder(Caster[i]) == OrderId(Channel) {
        local real x = GetUnitX (Caster[i])
        local real y = GetUnitY (Caster[i])
        local group g = CreateGroup()
        local boolexpr f = Condition (function Trig_FlamingHeart_Filter)
        set Loop[i] = Loop[i] - 1
        if Loop[i] == 0 {
            set damage[i] = HP*DAMAGE_PRECENT/2000
            set Loop[i] = 10
        }
        // Максимальный урон
        call GroupEnumUnitsInRange ( g, x, y, AERA_MAX, f )
        call ForGroup ( g, function Trig_FlamingHeart_Group )
        // Средний урон
        call GroupEnumUnitsInRange ( g, x, y, AREA_MIN, f )
        call ForGroup ( g, function Trig_FlamingHeart_Group )
    else
        if HP <= 0. and Booms[i] then
            set x = GetUnitX (Caster[i])
            set y = GetUnitY (Caster[i])
            set g = CreateGroup ()
            set f = Condition (function Trig_FlamingHeart_FilterALL)
            call GroupEnumUnitsInRange ( g, x, y, AREA_BOOM, f )
            set damage[i] = GetUnitState ( Caster[i], UNIT_STATE_MAX_LIFE )
            call ForGroup ( g, function Trig_FlamingHeart_Group )
            call DestroyEffect ( AddSpecialEffect ( EFFECT_BOOM, x, y ) )
            set nUse[i] = 0
        else
            set Booms[i] = false
        endif
    }
    set nUse[i] = nUse[i] - 1
    if nUse[i] >= 0 then
        call SetUnitState ( Caster[i], UNIT_STATE_LIFE, HP - damage[i] )
    endif
    if nUse[i] <= 0 then
        call DestroyTimer (Timer[i])
        set Timer[i] = Timer[N]
        set Timer[N] = null
        set Caster[i] = Caster[N]
        set Caster[N] = null
        set nUse[i] = nUse[N]
        set nUse[N] = 0
        set Booms[i] = Booms[N]
        set Booms[N] = false
        set Loop[i] = Loop[N]
        set Loop[N] = 0
        set damage[i] = damage[N]
        set damage[N] = 0
        N--
    endif
    
    call DestroyBoolExpr (f)
    call GroupClear (g)
    call DestroyGroup (g)
    set f = null
    set g = null
endfunction

function Trig_FlamingHeart_Actions takes nothing returns nothing
    N++
    set Timer[N] = CreateTimer ()
    set Caster[N] = GetTriggerUnit()
    set nUse[N] = N_SECONDS
    set Booms[N] = true
    set Loop[N] = 10
    set damage[N] = GetUnitState ( GetTriggerUnit(), UNIT_STATE_LIFE )*DAMAGE_PRECENT/2000
    call TimerStart ( Timer[N], 0.1, true, function Trig_FlamingHeart_Timer )
endfunction

//===========================================================================
function Trig_FlamingHeart_Conditions takes nothing returns boolean
    return ( GetSpellAbilityId() == SPELL )
endfunction
function InitTrig_FlamingHeart takes nothing returns nothing
    set gg_trg_FlamingHeart = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_FlamingHeart, EVENT_PLAYER_UNIT_SPELL_CHANNEL )
    call TriggerAddCondition( gg_trg_FlamingHeart, Condition( function Trig_FlamingHeart_Conditions ) )
    call TriggerAddAction( gg_trg_FlamingHeart, function Trig_FlamingHeart_Actions )
endfunction

endlibrary
DaeDR добавил:
Заказчик: inadequate_
Функция для замедления.
Кидаю карту с примером.
inadequate_, добавил: если юнит уже находится по воздействием этого замедления, то эффект обновляется на новый.
Данное замедление учитывает другие факторы замедления и ускорения.
» Код
library Slows

    // Обращение к функции:
    //  call SlowUnit (u, s, tm)
    //  u - Юнит
    //  s - коэффициент замедления (1.0 будет 100%)
    //  tm - интервал сброса замедления на 1%
    // Пример: call SlowUnit (GetTriggerUnit(), 1.0, 0.1)

    globals
    private timer array Timer
    private unit array Caster
    private real array SLOW
    private integer N = 0
    private integer i
    endglobals

private function SlowUnit_Timer takes nothing returns nothing
    set i = 1
    whilenot GetExpiredTimer()==Timer[i] {
    i++ }
    local real speed = GetUnitDefaultMoveSpeed(Caster[i])
    if SLOW[i] <= 0. then
        call SetUnitMoveSpeed ( Caster[i], speed )
        set Timer[i] = Timer[N]
        set Caster[i] = Caster[N]
        set Caster[N] = null
        call DestroyTimer (Timer[N])
        set Timer[N] = null
        N--
    else
        call SetUnitMoveSpeed ( Caster[i], speed*(1-SLOW[i]) )
        set SLOW[i] = SLOW[i] - 0.01
    endif
endfunction

function SlowUnit takes unit u, real s, real tm returns nothing
    local boolean b = true
    if N > 0 then
        set i = 1
        loop { exitwhen i > N
            if Caster[i] == u then
                set SLOW[i] = s
                call TimerStart ( Timer[i], tm, true, function SlowUnit_Timer )
                set b = false
            endif
        i++ }
    endif
    if b {
    N++
    set Timer[N] = CreateTimer ()
    set Caster[N] = u
    set SLOW[N] = s
    call TimerStart ( Timer[N], tm, true, function SlowUnit_Timer )
    }
endfunction

endlibrary
Если надо, то можно сделать, чтобы при втором наложении эффект суммировался (по силе замедления => времени)
Закинул карту-пример
Прикрепленные файлы
Тип файла: w3x function Slow.w3x (19.3 Кбайт, 2 просмотров )
Тип файла: w3x FlamingHeart.w3x (19.9 Кбайт, 8 просмотров )

Отредактировано DaeDR, 13.04.2012 в 07:36.
Старый 12.04.2012, 17:49
Meriler

offline
Опыт: 622
Активность:
Название:Замедление времени
Уровни:5
MUI:По желанию(я просто не знаю что это)
Jass:нет
Описание:На уровне просто замедляются все персонажи кроме тебя. С уровнем магия делает время все более медленным. Время действия 10 сек(если мало можно и больше).
Старый 12.04.2012, 22:48
PokiFik
\ \ \
offline
Опыт: 1,214
Активность:
Заклинание: Замедление времени
Заказчик: Meriler
Способ исполнения: GUI и Jass
MUI: 2 варианта
Нужен ли JNGP: Нет
Используются глобальные переменные: Нет
Meriler, Сделал не муи на гуи и Муи на джассе, желательно бери муи так как не требуется JNPG.
Прикрепленные файлы
Тип файла: w3x time_slowing_for_Meriler.w3x (15.1 Кбайт, 7 просмотров )
Старый 13.04.2012, 08:31
KrovoSOS
Сыграем в бога
offline
Опыт: 2,464
Активность:
Заклинание: Гроза с дождем
Способ исполнения: GUI
Для героя: да
MUI: нет
Описание:герой вызывает грозу с дождем.дождь лечит лечит союзников по 5 каждые 2 секунды.Но герой теряет по 5 каждые 2 секунды.
1)лечит лечит союзников по 5 каждые 2 секунды.Но герой теряет по 5 каждые 2 секунды
2)лечит лечит союзников по 8 каждые 2 секунды.Но герой теряет по 8 каждые 2 секунды
3)лечит лечит союзников по 10 каждые 2 секунды.Но герой теряет по 10 каждые 2 секунды
Rodion добавил:
Заклинание: волна яда
Способ исполнения: GUI
Для героя: да
MUI: нет
Описание: герой вызывает волну яда которая наносит урон раз в 3секунды.длительность 15сек(на всех уровнях 15 сек)
1)герой вызывает волну яда которая наносит 15 урона раз в 3секунды.
2)герой вызывает волну яда которая наносит 19 урона раз в 3секунды.
3)герой вызывает волну яда которая наносит 25 урона раз в 3секунды.
Старый 13.04.2012, 13:06
YoungNeko

offline
Опыт: 22
Активность:
Название: Мультивыстел
Способ исполнения: не важно
Цель:Враг
Для героя:Да
MUI:да
Описание:
герой, лучник, выстреливает огненной стрелой, и вместе с ней летят еще стрелы по разным траекториям но в 1 цель.
Способность имеет 3 уровня:
1 уровень - 2 стрелы, время каста 3 сек, скорость полета 1000
2 уровень - 3 стрелы, время каста 2.5 сек, скорость полета 1250 (на этом уровне за стрелами появляется огненный след, который держится 3 сек и наносит урон)
3 уровень - 4 стрелы, время каста 2 сек, скорость полета 1500 (на этом уровне за стрелами появляется огненный след, который держится 4 сек и наносит урон)
То что в скобках не обязательно но очень желательно, так же если возможно то нужно сделать так чтобы все стрелы кроме основной, могли врезаться в других юнитов\декорации\преграды нанося урон или просто исчезая
Кол-во стрел за уровень указано без учета основной стрелы
Ниже представлен скрин, который поможет понять что я именно имел ввиду
Урон желательно фиксированный + от всей ловкости, ну или хотя бы просто фиксированный
Миниатюры
Кликните на картинку для увеличения
Название:  fable-the-lost-chapters-20050727105743484.jpg
Просмотров: 65
Размер:  165.8 Кбайт  

Отредактировано YoungNeko, 14.04.2012 в 19:30.
Старый 14.04.2012, 03:09
Impertus

offline
Опыт: 4,019
Активность:
Название: Сокровенная роща
Для героя: да
Способ исполнения: не важен
Уровни: 1
Тип: Активный, чаннел
МУИ: обязательно
Описание:
-Герой выращивает круг деревеьев радиусом 600, чаннеля Спокойствие, которое восстанавливает 2% здоровья и маны в сек всем союзникам и себе внутри круга и даруя им невидимость даже при атаке.
-Враги, попавшие внутрь круга (наземные) опутываются корнями, наносящими 35 урона в сек и лишаются способности произносить заклинания (а также, если возможно, полностью лишаются дальности обзора), а воздушные выталкиваются из круга и оглушаются до конца действия чаннела, получая 35 урона в сек (Огненное лассо).
-Если чаннел прервать (оглушить или убить героя аое-уроном, например), то все эффекты (и на союзниках, и на врагах) пропадают.
-Деревья круга можно уничтожить (250хп), но через 3 сек на его месте вырастает новое.
-Воздушные союзники, вылетевшие из круга лишаются невидимости.
-Длительность чаннела 15 сек.
Старый 14.04.2012, 16:36
Meriler

offline
Опыт: 622
Активность:
1.Название:Отталкивание
Описание :Магия которая отталкивает героя от себя на расстояние и оглушает его.
Количество уровней:с уровнем увеличивать дальность отталкивания и время оглужения.
MUI: по желанию
2.Название:Притягивание
Описание :Магия которая притягивает героя от себя на расстояние и оглушает его.
Количество уровней:с уровнем увеличивать дальность притягивания и время оглужения.
MUI: по желанию
Старый 14.04.2012, 23:15
DaeDR

offline
Опыт: 8,074
Активность:
Заказчик: Meriler
Название: функция движения
MUI: да
Требуется JNGP: да
Описание: Все, что тебе надо - вычислить угол, указать дальность и скорость. Все остальное сделается само. Пример внутри.
» code
library MoveUnit

    globals
    private timer array Timer
    private unit array Unit
    private integer array Nost
    private real array dist
    private real array angle
    private integer N = 0
    endglobals
    
        // пример //
    // angle = bj_RADTODEG * Atan2(GetUnitY(GetSpellTargetUnit()) - GetUnitY(GetTriggerUnit()), GetUnitX(GetSpellTargetUnit()) - GetUnitX(GetTriggerUnit()))
    // call MoveUnit ( GetSpellTargetUnit(), angle, 1500.0, 800.0 ) - применяемая функция
    // дальность 1500, скорость 800
    
private function MoveUnit_Timer takes nothing returns nothing
    local real x
    local real y
    local integer i = 1
    whilenot (GetExpiredTimer()==Timer[i])or(i>N) { i++ }
    set x = GetUnitX(Unit[i]) + dist[i] * Cos(angle[i] * bj_DEGTORAD)
    set y = GetUnitY(Unit[i]) + dist[i] * Sin(angle[i] * bj_DEGTORAD)
    call SetUnitPosition ( Unit[i], x, y )
    if Nost[i] == 0 then
        call DestroyTimer (Timer[i])
        set Timer[i] = Timer[N]
        set Unit[i] = Unit[N]
        set Nost[i] = Nost[N]
        set dist[i] = dist[N]
        set angle[i] = angle[N]
        set Timer[N] = null
        set Unit[N] = null
        set Nost[N] = 0
        set dist[N] = 0.
        set angle[N] = 0.
        N--
    else
        Nost[i]--
    endif
endfunction

function MoveUnit takes unit u, real a, real distancion, real speed returns nothing
    N++
    set Timer[N] = CreateTimer ()
    set Unit[N] = u
    set Nost[N] = R2I(distancion/speed*33)
    set dist[N] = distancion/Nost[N]
    set angle[N] = a
    call TimerStart ( Timer[N], 0.03, true, function MoveUnit_Timer )
endfunction
    
endlibrary
Прикрепленные файлы
Тип файла: w3m function MoveUnit.w3m (17.5 Кбайт, 5 просмотров )

Отредактировано DaeDR, 16.04.2012 в 11:52.
Старый 15.04.2012, 07:15
Extremator

offline
Опыт: 42,489
Активность:
Заказчик: Meriler
Название: Отталкивание / Push
Описание: Отталкивает указанного юнита от себя и оглушает его.
Цель: Юнит / не сам
Количество уровней: 4
Способ исполнения: GUI + MUI
Заказчик: Meriler
Название: Притягивание / Pull
Описание: Притягивает указанного юнита к себе и оглушает его.
Цель: Юнит / не сам
Количество уровней: 4
Способ исполнения: GUI + MUI
Прикрепленные файлы
Тип файла: w3x Push & Pull (spell mui).w3x (15.2 Кбайт, 38 просмотров )

Отредактировано Extremator, 16.04.2012 в 08:44.
Старый 15.04.2012, 11:18
MarkSpartak

offline
Опыт: 1,702
Активность:
Название: Отталкивание / Push
Описание: Пример способности с хеш-таблицей на гуи (чем проще тем лучше)
Способ исполнения: GUI
Старый 15.04.2012, 20:09
Fuzzi

offline
Опыт: 1,797
Активность:
у меня не совсем скил, просто я тут запуталься в этих форумах.
необходима подправить систему 16GB, для показания урона.
урон наносимый серым и зеленым игроками должны оставаться серого цвета и быть видимыми для всех. любой остальной урон должен быть виден только для игрока, который его наносит. на гуи вроде бы нет таких функций, а в джассе я не разбираюсь.. помогите плз
Миниатюры
Кликните на картинку для увеличения
Название:  текст урона.jpg
Просмотров: 27
Размер:  203.8 Кбайт  
Старый 16.04.2012, 14:41
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Fuzzi, Get LocalPlayer() я точно сам в ней не разобрался но это она.
Старый 16.04.2012, 14:51
Fuzzi

offline
Опыт: 1,797
Активность:
та если бы я в джассе разбиралься... конечно надо бы начать учить, но только не перед экзаменами_)
Старый 16.04.2012, 14:53
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Fuzzi, так скрой текст от всех игроков и показывай только тому кто наносит повреждения ..
Канечно затратно но для начала пойдет=)
Старый 16.04.2012, 15:03
Fuzzi

offline
Опыт: 1,797
Активность:
геморно будет, но попробую, спс
Старый 16.04.2012, 15:17
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
делаешь локалку типа текст texttag t, записываешь set t = последний свободный текст ну как то так возможно поможет, хотя тут текст не удаляется, а просто устанавливается время жизни текста=)
Cosonic5 добавил:
да нет не геморно, просто делаешь так, группа игроков выбрать каждого игрока, например игроки в группе "играет" и действие, скрыть последний свободный текст для владелец юнита выбранный юнит.
Затем опять действие показать свободный текст для владелец источник повреждений.
Старый 16.04.2012, 15:32
Fuzzi

offline
Опыт: 1,797
Активность:
хм, вроде бы все сделал, только эт надо к минимум в мультплеере проверить. слушай Cosonic5, а у тя никогда не было проблем с утечками на гуи??
Старый 16.04.2012, 15:37
Fuzzi

offline
Опыт: 1,797
Активность:
хм, а могут быть утечки из-за того, что у меня парочка триггеров каждые 0.01 секунду добавляют предметы в нейтральные магазины?
Старый 16.04.2012, 15:45
Fuzzi

offline
Опыт: 1,797
Активность:
хм,триггер там долго делать, мб я те лучше карту саму скину и покажу где глядеть?
Старый 16.04.2012, 15:49
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Fuzzi, ну ок скинь в личку
Старый 16.04.2012, 15:49
Закрытая тема

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

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

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

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



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