Сейчас 01:10:59 Вторник, 30 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Выбор юнитов
Выбор юнитов
demon_nrtДата: Суббота, 31 Августа 2013, 16:30:28 | Сообщение # 1
6 уровень
Группа: Проверенные
Сообщений: 193
Награды: 0
Репутация: 2
Блокировки:
Парни вы мне очень часто помогали со всеми моими вопросами. И с документами по группам. Но мне надо по быстрому
доделать то что я начал. Очень прошу дать ответ еще на 1 вопрос.

call ForGroupBJ( GetUnitsInRangeOfLocAll(450.00, Zpl2), function Trig_Zar_Preispodnei_Func003A )

Как из этой функции извлечь точку, и заменить ее на координаты X,Y
 

НаклзДата: Суббота, 31 Августа 2013, 16:57:08 | Сообщение # 2
10 уровень
Группа: Проверенные
Сообщений: 1431
Награды: 0
Репутация: 760
Блокировки:
это похоже на координаты (450.00, Zpl2)

Добавлено (31 Августа 2013, 16:57:08)
---------------------------------------------
а нет, это ширина и высота области


Сообщение отредактировал Наклз - Суббота, 31 Августа 2013, 16:57:57
 

demon_nrtДата: Суббота, 31 Августа 2013, 17:36:40 | Сообщение # 3
6 уровень
Группа: Проверенные
Сообщений: 193
Награды: 0
Репутация: 2
Блокировки:
Цитата (Наклз)
а нет, это ширина и высота области

Я не понял)
 

FEARKILLERДата: Суббота, 31 Августа 2013, 17:41:23 | Сообщение # 4
6 уровень
Группа: Проверенные
Сообщений: 175
Награды: 0
Репутация: 149
Блокировки:
Цитата (Наклз)
это похоже на координаты (450.00, Zpl2)

Добавлено (31 Августа 2013, 16:57:08)
---------------------------------------------
а нет, это ширина и высота области

Это радиус и точка, просто он так назвал переменную.

Цитата (demon_nrt)
call ForGroupBJ( GetUnitsInRangeOfLocAll(450.00, Zpl2), function Trig_Zar_Preispodnei_Func003A )
Как из этой функции извлечь точку, и заменить ее на координаты X,Y

1 вариант с фильтром внутри цикла ForGroup().
Код
function UnitFilter takes nothing returns nothing
     local unit u=GetEnumUnit()
     if /* Само условие */ then
         //Действия если выполняется условие
     endif
     set u=null
endfunction
function PickUnit1 takes nothing returns nothing
     local group g=CreateGroup()
     call GroupEnumUnitsInRange(g,x,y,450.,null)
     call ForGroup(g,function UnitFilter)
     set g=null
endfunction


2 вариант через луп, без использования ForGroup() и фильтра, фильтрация юнитов идёт в самом лупе. Но этот вариант не подойдёт если тебе группа ещё раз понадобится после. Тогда лучше первый раз через ForGroup() пропустить группу, а потом через loop.
Код
function PickUnit2 takes nothing returns nothing
     local unit u
     local group g=CreateGroup()
     call GroupEnumUnitsInRange(g,x,y,450.,null)
     loop
         set u=FirstOfGroup(g)
         exitwhen u==null
         call GroupRemoveUnit(g,u)
         if /* Само условие */ then
             //Действия если выполняется условие
         endif
     endloop
     set u=null
     set g=null
endfunction


X/Y сам какие нужно подставишь.


Делаю из воды вино, хожу по воде...
 

demon_nrtДата: Суббота, 31 Августа 2013, 18:45:44 | Сообщение # 5
6 уровень
Группа: Проверенные
Сообщений: 193
Награды: 0
Репутация: 2
Блокировки:
Я сейчас пытаюсь переделать этот код под ваш код но с условиями беда.

Вот сам код, помогите разобраться.
[code=jass]
function Trig_Zar_Preispodnei_Conditions takes nothing returns boolean
if ( not ( UnitHasBuffBJ(GetTriggerUnit(), 'B00F') == true ) ) then
return false
endif
return true
endfunction

function Trig_Zar_Preispodnei_Func003Func001C takes nothing returns boolean
if ( not ( IsUnitEnemy(GetEnumUnit(), GetOwningPlayer(GetTriggerUnit())) == true ) ) then
return false
endif
if ( not ( IsUnitType(GetEnumUnit(), UNIT_TYPE_STRUCTURE) == false ) ) then
return false
endif
if ( not ( IsUnitDeadBJ(GetEnumUnit()) == false ) ) then
return false
endif

return true
endfunction

function Trig_Zar_Preispodnei_Func003A takes nothing returns nothing
local unit Zpu = GetTriggerUnit()
local unit Zpu1 = GetEnumUnit()
local unit Zpu3
local real x=GetWidgetX(Zpu1)
local real y=GetWidgetY(Zpu1)
if ( Trig_Zar_Preispodnei_Func003Func001C() ) then
set Zpu3 = CreateUnit( GetOwningPlayer (Zpu), 'e00D',x,y,1.)
call UnitApplyTimedLifeBJ( 1.00, 'BTLF', Zpu3 )
call UnitDamageTargetBJ( Zpu, Zpu1, ( GetUnitStateSwap(UNIT_STATE_MAX_LIFE, Zpu) * 0.08 ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
set Zpu = null
set Zpu = null
else
call DoNothing( )
endif
endfunction

function Trig_Zar_Preispodnei_Actions takes nothing returns nothing
local location Zpl2 = GetUnitLoc(GetTriggerUnit())
call ForGroupBJ( GetUnitsInRangeOfLocAll(450.00, Zpl2), function Trig_Zar_Preispodnei_Func003A )
call RemoveLocation (Zpl2)
set Zpl2 = null
endfunction

//===========================================================================
function InitTrig_Zar_Preispodnei_____________________u takes nothing returns nothing
set gg_trg_Zar_Preispodnei_____________________u = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Zar_Preispodnei_____________________u, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Zar_Preispodnei_____________________u, Condition( function Trig_Zar_Preispodnei_Conditions ) )
call TriggerAddAction( gg_trg_Zar_Preispodnei_____________________u, function Trig_Zar_Preispodnei_Actions )
endfunction
[/code]
 

SirNikolasДата: Суббота, 31 Августа 2013, 19:11:52 | Сообщение # 6
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
[code=jass]
if IsUnitEnemy(u, GetOwningPlayer(Zpu)) and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and GetWidgetLife(u) > .405 then
//...
endif
[/code]


 

demon_nrtДата: Суббота, 31 Августа 2013, 19:52:38 | Сообщение # 7
6 уровень
Группа: Проверенные
Сообщений: 193
Награды: 0
Репутация: 2
Блокировки:
Спасибо, заработало, но теперь новая ошибка, выбирает лишь 1 юнита из всех кто рядом.
 

HexingДата: Суббота, 31 Августа 2013, 20:15:22 | Сообщение # 8
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Цитата (demon_nrt)
Спасибо, заработало, но теперь новая ошибка, выбирает лишь 1 юнита из всех кто рядом.

[code=jass]function Trig_Zar_Preispodnei_Conditions takes nothing returns boolean
return (GetUnitAbilityLevel(GetTriggerUnit(), 'B00F') > 0)
endfunction

function Trig_Zar_Preispodnei_Func003A takes nothing returns nothing
local unit caster = GetTriggerUnit()
local unit enum = GetEnumUnit()
local unit u
local player owner = GetOwningPlayer(caster)
local real x = GetWidgetX(caster)
local real y = GetWidgetY(caster)
if(IsUnitEnemy(enum, owner) and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MAGIC_IMMUNE) and GetWidgetLife(u) > .405 then
set u = CreateUnit(owner, 'e00D', x, y, 0.0)
call UnitApplyTimedLife(u, 'BTLF', 1.00)
call UnitDamageTarget(caster, enum, (GetUnitState(u, UNIT_STATE_MAX_LIFE) * 0.08), true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
endif
set caster = null
set enum = null
set u = null
endfunction

function Trig_Zar_Preispodnei_Actions takes nothing returns nothing
local group g = CreateGroup()
call GroupEnumUnitsInRange(g, GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit()), 450.0, null)
call ForGroup(g, function Trig_Zar_Preispodnei_Func003A)
call DestroyGroup(g)
set g = null
endfunction

//===========================================================================
function InitTrig_Zar_Preispodnei_____________________u takes nothing returns nothing
set gg_trg_Zar_Preispodnei_____________________u = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Zar_Preispodnei_____________________u, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Zar_Preispodnei_____________________u, Condition( function Trig_Zar_Preispodnei_Conditions ) )
call TriggerAddAction( gg_trg_Zar_Preispodnei_____________________u, function Trig_Zar_Preispodnei_Actions )
endfunction [/code]
Вот, попробуй


 

demon_nrtДата: Суббота, 31 Августа 2013, 22:11:55 | Сообщение # 9
6 уровень
Группа: Проверенные
Сообщений: 193
Награды: 0
Репутация: 2
Блокировки:
Большое спасибо, соединив системы от Hexing и SirNikolas я получил то что хотел. огромное спасибо.
 

SirNikolasДата: Воскресенье, 01 Сентября 2013, 08:56:19 | Сообщение # 10
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата (Hexing)
local unit enum = GetEnumUnit()
Нехорошо использовать ключевые слова в качестве имен переменных. :)


 

HexingДата: Воскресенье, 01 Сентября 2013, 12:28:12 | Сообщение # 11
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
SirNikolas, лучше Zpu, Zpu2??? fffuuu и это не cJass :)

 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Выбор юнитов
  • Страница 1 из 1
  • 1
Поиск:

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