|
|
|
|
Выбор юнитов
|
|
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??? и это не cJass
|
|
|
|
|
|
|
|
|
|
|