Сейчас 23:18:34 Понедельник, 2 декабря, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Непраильная работа
DreiiДата: Воскресенье, 09 Января 2011, 09:51:04 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Code
function Trig_ilission_Cond takes nothing returns boolean
     return IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(GetSpellAbilityUnit())) == true and GetUnitState(GetEnumUnit(), UNIT_STATE_LIFE) <= 0
endfunction
function Trig_ilission_Actions takes nothing returns nothing
   local group g
   local real x
   local real y
   local real xe
   local real ye
   local unit e
   local unit c
   local unit r
  if GetSpellAbilityId() == 'A000' then  
  set g=CreateGroup()
  set c=GetTriggerUnit()
  set x=GetUnitX(c)
set y=GetUnitY(c)
call GroupEnumUnitsInRange(g,x,y,800,function Trig_ilission_Cond)
  set e=GetEnumUnit()
  set xe=GetUnitX(e)
  set ye=GetUnitX(e)
  call CreateUnit(GetOwningPlayer(c),'o000',xe,ye, bj_UNIT_FACING)
  set r=bj_lastCreatedUnit
   call IssueTargetOrder(r,"attack",e)
   call UnitApplyTimedLife(r,'BTLF', 10.)
   endif
   set e=null
   set r=null
   set c=null
endfunction

в чем ошибка? юнит создаеться гдето хз где вместо указанного места(((

Добавлено (09-01-2011, 09:51)
---------------------------------------------
ну поомгииииитее


 

Vova5009Дата: Воскресенье, 09 Января 2011, 09:53:33 | Сообщение # 2
8 уровень
Группа: Проверенные
Сообщений: 577
Награды: 0
Репутация: 125
Блокировки:
Dreii, абилка какого типа? Без наводки, с наводкой, на землю?
 

DreiiДата: Воскресенье, 09 Января 2011, 09:54:48 | Сообщение # 3
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Vova5009, мгновенная

 

Vova5009Дата: Воскресенье, 09 Января 2011, 10:01:31 | Сообщение # 4
8 уровень
Группа: Проверенные
Сообщений: 577
Награды: 0
Репутация: 125
Блокировки:
Dreii, можно попробовать так:
Code

function Trig_ilission_Cond takes nothing returns boolean  
      return IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(GetSpellAbilityUnit())) == true and GetUnitState(GetEnumUnit(), UNIT_STATE_LIFE) <= 0  
endfunction  
function Trig_ilission_Actions takes nothing returns nothing  
    local group g  
    local real x  
    local real y  
    local real xe  
    local real ye  
    local unit e  
    local unit c  
    local unit r  
   if GetSpellAbilityId() == 'A000' then   
   set g=CreateGroup()  
   set c=GetSpellAbilityUnit()  
   set x=GetUnitX(c)  
set y=GetUnitY(c)  
call GroupEnumUnitsInRange(g,x,y,800,function Trig_ilission_Cond)  
   set e=GetEnumUnit()  
   set xe=GetUnitX(e)  
   set ye=GetUnitY(e)  
   call CreateUnit(GetOwningPlayer(c),'o000',xe,ye, bj_UNIT_FACING)  
   set r=bj_lastCreatedUnit  
    call IssueTargetOrder(r,"attack",e)  
    call UnitApplyTimedLife(r,'BTLF', 10.)  
    endif  
    set e=null  
    set r=null  
    set c=null  
endfunction

Добавлено (09-01-2011, 10:01)
---------------------------------------------
И вообще... Ты то этими строками делаешь?

Quote (Dreii)
  set xe=GetUnitX(e)
  set ye=GetUnitX(e)
 

DreiiДата: Воскресенье, 09 Января 2011, 10:04:05 | Сообщение # 5
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Vova5009, упс я там наверно координаты не верно задал)

Добавлено (09-01-2011, 10:04)
---------------------------------------------
Vova5009, нее всеарвно создаеться хз где


 

Manko_OДата: Воскресенье, 09 Января 2011, 10:33:01 | Сообщение # 6
7 уровень
Группа: Проверенные
Сообщений: 296
Награды: 0
Репутация: 23
Блокировки:
Dreii,
А где ты потом выбираеш отряд g?
Code
call ForGroup(g,function ---------)
 

DreiiДата: Воскресенье, 09 Января 2011, 10:33:41 | Сообщение # 7
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Manko_O, хм нигде а его нужно выбирать?х)

 

Manko_OДата: Воскресенье, 09 Января 2011, 10:34:55 | Сообщение # 8
7 уровень
Группа: Проверенные
Сообщений: 296
Награды: 0
Репутация: 23
Блокировки:
Quote (Dreii)
Manko_O, хм нигде а его нужно выбирать?х)

А какже 0_о
 

AjaccioДата: Воскресенье, 09 Января 2011, 10:35:06 | Сообщение # 9
7 уровень
Группа: Проверенные
Сообщений: 299
Награды: 1
Репутация: 239
Блокировки:
GetEnumUnit() в данном случае возвращает null => координаты не определяются => юнит появляется черти-где.
Эта функция работает только если работать с группой через call ForGroup(group, function DoIt).
Далее управление переходит в функцию DoIt и вот только тогда GetEnumUnit() работает нормально.

Есть же способ попроще:

Code

function Spell_Actions takes nothing returns nothing   
         local group g
         local real x
         local real y
         local real xe
         local real ye
         local unit e
         local unit c
         local unit r
  if (GetSpellAbilityId() == 'A000') then    
   set g = CreateGroup()   
   set c = GetSpellAbilityUnit()   
   set x = GetUnitX(c)   
   set y = GetUnitY(c)   
   call GroupEnumUnitsInRange(g, x, y, 800.0, null)   
   loop
    set e = FirstOfGroup(g)
    exitwhen (e == null)
    if (IsUnitEnemy(e, GetOwningPlayer(c)) == true and GetWidgetLife(e) > 0.0) then
     set xe = GetUnitX(e)   
     set ye = GetUnitY(e)   
     set r = CreateUnit(GetOwningPlayer(c), 'o000', xe, ye, 0.0)
     call IssueTargetOrder(r, "attack", e)   
     call UnitApplyTimedLife(r, 'BTLF', 10.)
    endif
    call GroupRemoveUnit(g, e)
   endloop
   call DestroyGroup(g)
     endif   
     set e = null   
     set r = null   
     set c = null   
endfunction  

Всего 1 функция с перебором в цикле. Должно работать, если я не напортачил.


XOR EAX, EAX
MOV EAX, 00H ;; NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO.
 

SirNikolasДата: Воскресенье, 09 Января 2011, 10:36:23 | Сообщение # 10
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Code
function Trig_ilission_Cond takes nothing returns boolean
     return IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetTriggerUnit())) and GetWidgetLife(GetFilterUnit()) > .0
endfunction

function Trig_ilission_Actions takes nothing returns nothing
     local unit c=GetTriggerUnit()
     local player p = GetOwningPlayer(c)
     local group g
     local unit e
     local unit r
     if GetSpellAbilityId() == 'A000' then
         set g = CreateGroup()
         call GroupEnumUnitsInRange(g, GetWidgetX(c), GetWidgetY(c), 800., Condition(function Trig_ilission_Cond))
         loop
             set e = FirstOfGroup(g)
             exitwhen e == null
             call GroupRemoveUnit(g, e)
             set r = CreateUnit(p, 'o000', GetWidgetX(e), GetWidgetY(e), GetRandomReal(.0, 360.))
             call IssueTargetOrder(r, "attack", e)
             call UnitApplyTimedLife(r, 'BTLF', 10.)
         endloop
         set r = null
         call DestroyGroup(g)
         set g = null
     endif
     set c = null
     set p = null
endfunction

Опоздал...




Сообщение отредактировал SirNikolas - Воскресенье, 09 Января 2011, 10:49:38
 

DreiiДата: Воскресенье, 09 Января 2011, 10:36:32 | Сообщение # 11
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Ajaccio, вот я недавно вспомнил что можно в 1 ф-ию сделать но я хз как это ^^

 

EnforcerДата: Воскресенье, 09 Января 2011, 13:10:54 | Сообщение # 12
Энф
Когда-то смотрел за порядком
Группа: Ветераны
Сообщений: 3127
Награды: 7
Репутация: 981
Блокировки:
Dreii, Вставь информационные знаки для выявления причины

Например : ТриггерЮнит = Тот. Координата Х= 123, Коррдината Y = 456
Координата X Нового юнита = 123 Координата Y= 456

Вот так..

А я делаю проще. Я сразу делаю создать юнита на на позиции Тригггер юнита, без получения координат. Получаю координаты только в случае когда требуется быстро получить точку кастования спелла.


 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz