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

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

Ответ
 
MeeleJayJay

offline
Опыт: 188
Активность:
Помогите Новичку
call UnitDamageTarget(GetSpellAbilityUnit,GetSpellTargetUnit,500.00,false,true,ATTACK_TYPE_NORMAL,DAMAGE_​TYPE_ACID,WEAPON_TYPE_WHOKNOWS)
1.( юнит который должен наносить урон, юнит которому наносится урон, урон, ???, ???, тип атаки, тип урона, тип оружия)
  1. когда вставляю эту строчку в тригер, не запускается карта
  2. если кому не лень обьясните что делает return то что возвращает я понял, а что и куда возвращает?
Старый 29.06.2012, 16:42
Lipen

offline
Опыт: 1,550
Активность:
  1. когда вставляю эту строчку в тригер, не запускается карта
Нет скобочек у GetSpellAbilityUnit и GetSpellTargetUnit
    call UnitDamageTarget(GetSpellAbilityUnit(), GetSpellTargetUnit(), 500.00, false, true, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_ACID, WEAPON_TYPE_WHOKNOWS)
  1. (юнит который должен наносить урон, юнит которому наносится урон, урон, ???, ???, тип атаки, тип урона, тип оружия)
native UnitDamageTarget takes unit whichUnit, widget target, real amount, boolean attack, boolean ranged, attacktype attackType, damagetype damageType, weapontype weaponType returns boolean

boolean attack, boolean ranged
attack - является ли этот дамаг атакой
ranged - является ли это дамаг дальней атакой
Точно не знаю, но по-моему это влияет на действие различных пассивок, типа "Каменных доспехов"
  1. если кому не лень обьясните что делает return то что возвращает я понял, а что и куда возвращает?
» return
return возвращает данные обратно в функцию, откуда вызывали функцию с return`ом.
Например функция CreateUnit(...) создаёт и возвращает юнита. "Забрать" его в переменную можно так:
set var_unit = CreateUnit(...)
Затем с ним можно будет делать необходимые нам действия:
call KillUnit(var_unit)
И затем обнулить его:
set var_unit = null
Старый 29.06.2012, 17:05
MeeleJayJay

offline
Опыт: 188
Активность:
еще один вопрос, если у меня были 3 локальных переменных типа юнит, то в конце тригера дабы избежать утечки нужно set u = null писать?
а если была строчка remove (u2) ?
может ли быть такое что одно название носят 2 переменные с разным типом?

Отредактировано MeeleJayJay, 29.06.2012 в 19:59.
Старый 29.06.2012, 19:51
Hanabishi
COOL STATUS
offline
Опыт: отключен
Все локальные переменные типа юнит нужно обнулять.
Две переменные не могут носить одно название, тут даже просто будет ошибка компиляции.
Старый 29.06.2012, 20:03
MeeleJayJay

offline
Опыт: 188
Активность:
function Trig_Son_Actions takes nothing returns nothing
  local unit u
  local unit s
  local unit u2
  local group g
  local integer i=0
  set u = GetSpellAbilityUnit()
     call GroupAddGroup( GetUnitsInRangeOfLocAll(800.00, GetUnitLoc(u)), g )
     call CreateNUnitsAtLoc( 1, 'h002', GetOwningPlayer(u), GetUnitLoc(u), bj_UNIT_FACING )
     set s = GetLastCreatedUnit()
     set i = CountUnitsInGroup(g)
     loop
     exitwhen i = 1
        set u2 = FirstOfGroup(g)
        call IssueTargetOrder(s,"sleep",u2) 
        call GroupRemoveUnitSimple( u2, g )
        set i = i - 1
      endloop
endfunction
где ошибка? чем отличаются BJ функции от не BJ?
Используйте тег форматирования кода! \Nerevar

Отредактировано Nerevar, 29.06.2012 в 22:22.
Старый 29.06.2012, 21:49
Lipen

offline
Опыт: 1,550
Активность:
MeeleJayJay:
где ошибка?
Строка #13:
exitwhen i=1
Нужно:
exitwhen i==1
= это оператор присваивания, == - сравнения.
Старый 29.06.2012, 22:46
MeeleJayJay

offline
Опыт: 188
Активность:
function Trig_son_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A007' ) ) then
        return false
    endif
    return true
endfunction

function Trig_Son_Actions takes nothing returns nothing
  local unit u
  local unit s
  local unit u2
  local group g
  local integer i=0
  set u = GetSpellAbilityUnit()
     call GroupAddGroup( GetUnitsInRangeOfLocAll(800.00, GetUnitLoc(u)), g )
     call CreateNUnitsAtLoc( 1, 'h002', GetOwningPlayer(u), GetUnitLoc(u), bj_UNIT_FACING )
     set s = GetLastCreatedUnit()
     set i = CountUnitsInGroup(g)
     loop
     exitwhen i == 1
        set u2 = FirstOfGroup(g)
        call IssueTargetOrder(s,"sleep",u2) 
        call GroupRemoveUnitSimple( u2, g )
        set i = i - 1
      endloop
endfunction
//===========================================================================
function InitTrig_son takes nothing returns nothing
    set gg_trg_son = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_son, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_son, Condition( function Trig_son_Conditions ) )
    call TriggerAddAction( gg_trg_son, function Trig_son_Actions )
endfunction
это исправил, все равно не работает.
а еcть возможность посмотреть из-за чего не запускается карта?
Старый 30.06.2012, 10:52
Lipen

offline
Опыт: 1,550
Активность:
call TriggerAddAction( gg_trg_son, function Trig_son_Actions )
Trig_Son_Actions
а еcть возможность посмотреть из-за чего не запускается карта?
Стандартный редактор вроде бы выдаёт ошибки, наподобие этой.
Ставь JNGP, в нём точно показывает ошибки.
Старый 30.06.2012, 11:05
MeeleJayJay

offline
Опыт: 188
Активность:
у меня JNGP ошибки не показывает, спасибо теперь все работает)
а нет не все( юниты в сон не падают почемуто

Отредактировано MeeleJayJay, 30.06.2012 в 11:39.
Старый 30.06.2012, 11:15
Lipen

offline
Опыт: 1,550
Активность:
Твой даммик не успевает кастовать сон на всех, нужно создавать по даммику на юнита.
» Тык
function Trig_son_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A007'
endfunction

function Trig_Son_Actions takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local real x = GetUnitX(u)
    local real y = GetUnitY(u)
    local unit s
    local unit u2
    local group g = CreateGroup()

    call GroupEnumUnitsInRange(g, x, y, 800., null)
    loop
       set u2 = FirstOfGroup(g)
       exitwhen u2==null
       call GroupRemoveUnit(g, u2)
       if IsUnitEnemy(u2, GetOwningPlayer(u)) then
           set s = CreateUnit(GetOwningPlayer(u), 'h002', x, y, 0.0)
           call IssueTargetOrder(s, "sleep", u2)
           call UnitApplyTimedLife(s, 'AHwe', 1.)
       endif
    endloop
    call DestroyGroup(g)

    set u = null
    set s = null
    set g = null
endfunction

function InitTrig_son takes nothing returns nothing
    set gg_trg_son = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_son, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_son, Condition( function Trig_son_Conditions ) )
    call TriggerAddAction( gg_trg_son, function Trig_Son_Actions )
endfunction
set gg_trg_son = CreateTrigger()
Имя триггера (В списке слева) должно быть "son".
call UnitApplyTimedLife(s, 'AHwe', 1.)
Можно убрать если у даммика отрицательный реген и он точно умирает через некоторое время.

upd: Добавил проверку на то, чтобы даммик кидал сон только на врагов.
Старый 30.06.2012, 11:58
Ответ

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

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

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

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



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