|
|
|
|
[Вопрос] Проблема с кодом (Дубль 2)
|
|
mazahan | Дата: Среда, 12 Июня 2013, 16:27:01 | Сообщение # 76 |
5 уровень
Группа: Проверенные
Сообщений: 105
Награды: 0
Репутация: 5
Блокировки:
| Спасибо)
Добавлено (12 Июня 2013, 16:27:01) --------------------------------------------- Как лучше всего создавать группу и включать в неё всех врагов в радиусе N ?
Сообщение отредактировал mazahan - Среда, 12 Июня 2013, 16:27:09 |
|
|
|
SirNikolas | Дата: Среда, 12 Июня 2013, 17:06:58 | Сообщение # 77 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Одна глобальная группа, call GroupEnumUnitsInRange(udg_G, x, y, range, null). Пройти по ней циклом и сделать действия с теми, кто враг нужному игроку. Статья.
|
|
|
|
mazahan | Дата: Суббота, 22 Июня 2013, 14:19:45 | Сообщение # 78 |
5 уровень
Группа: Проверенные
Сообщений: 105
Награды: 0
Репутация: 5
Блокировки:
| Спасибо
Добавлено (13 Июня 2013, 16:52:17) --------------------------------------------- Код function grouploo takes real x, real y, real radius returns nothing local group g=udg_Temp_Group local unit forloop call GroupEnumUnitsInRange(g,x,y,radius,null)
loop set forloop=FirstOfGroup(g) exitwhen forloop==null if IsUnitEnemy (forloop,GetOwningPlayer(udg_vodinoy_e_caster))==true then call UnitDamageTargetBJ( udg_vodinoy_e_caster, forloop,(I2R(GetHeroStatBJ(bj_HEROSTAT_INT, udg_vodinoy_e_caster, true)) * 11.00 ), ATTACK_TYPE_HERO, DAMAGE_TYPE_COLD ) endif call GroupRemoveUnit(g,forloop) endloop set g=null endfunction function Trig_p1_Actions takes nothing returns nothing local integer i = 0 local real x = udg_x2+600*(udg_vodinoy_e_1*bj_DEGTORAD) local real y = udg_y2+600*(udg_vodinoy_e_1*bj_DEGTORAD) set udg_vodinoy_e_caster = GetSpellAbilityUnit() set udg_x2 = GetSpellTargetX() set udg_y2 = GetSpellTargetY() set udg_vodinoy_e_obl = GetSpellTargetLoc() set udg_vodinoy_e_1 = 0.00 set udg_vodinoy_e_2 = 0.00 set udg_vodinoy_e_3 = 1.00 set udg_vodinoy_e_4 = 40.00 set bj_forLoopBIndex = 1 set bj_forLoopBIndexEnd = 8 loop exitwhen bj_forLoopBIndex > bj_forLoopBIndexEnd set bj_forLoopAIndex = R2I(udg_vodinoy_e_3) set bj_forLoopAIndexEnd = R2I(udg_vodinoy_e_4) loop exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd call CreateUnit( GetOwningPlayer(udg_vodinoy_e_caster),'h007',x,y,0) set udg_vodinoy_e_dummy[GetForLoopIndexA()] = GetLastCreatedUnit() set udg_vodinoy_e_1 = ( udg_vodinoy_e_1 + 9.00 ) set bj_forLoopAIndex = bj_forLoopAIndex + 1 set x = udg_x2 + 600*Cos(udg_vodinoy_e_1*bj_DEGTORAD) set y = udg_y2 + 600*Sin(udg_vodinoy_e_1*bj_DEGTORAD) endloop set bj_forLoopAIndex = R2I(udg_vodinoy_e_3) set bj_forLoopAIndexEnd = R2I(udg_vodinoy_e_4) loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd call SetUnitFlyHeight( udg_vodinoy_e_dummy[GetForLoopIndexA()], ( udg_vodinoy_e_2 + ( I2R(GetForLoopIndexB()) * 100.00 ) ), udg_vodinoy_e_2 ) set udg_vodinoy_e_2 = 0.00 set bj_forLoopAIndex = bj_forLoopAIndex + 1
//Изменение высоты endloop set udg_vodinoy_e_3 = ( udg_vodinoy_e_3 + 40.00 ) set udg_vodinoy_e_4 = ( udg_vodinoy_e_4 + 40.00 ) set bj_forLoopBIndex = bj_forLoopBIndex + 1 endloop set udg_vodinoy_e_3 = 1.00 set udg_vodinoy_e_4 = 40.00 set bj_forLoopAIndex = R2I(udg_vodinoy_e_3) set bj_forLoopAIndexEnd = R2I(udg_vodinoy_e_4) loop exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd set x = udg_x2 + 600 set y = udg_y2 + 600 call CreateDestructable( 'YTfc', x,y, udg_vodinoy_e_1, 1.00, 0 ) set udg_vodinoy_e_dec[GetForLoopIndexA()] = GetLastCreatedDestructable() set udg_vodinoy_e_1 = ( udg_vodinoy_e_1 + 9.00 ) set bj_forLoopAIndex = bj_forLoopAIndex + 1 endloop call CreateUnit( GetOwningPlayer(udg_vodinoy_e_caster),'h008', udg_x2,udg_y2,0 ) set udg_vodinoy_e_dummy1 = GetLastCreatedUnit() call IssuePointOrderLoc( udg_vodinoy_e_dummy1, "silence", udg_vodinoy_e_obl ) loop exitwhen i>15 call grouploo(udg_x2,udg_y2,600) call TriggerSleepAction( 0.90 ) set i = i+1 endloop set udg_vodinoy_e_3 = 1.00 set udg_vodinoy_e_4 = 40.00 set bj_forLoopBIndex = 1 set bj_forLoopBIndexEnd = 8 loop exitwhen bj_forLoopBIndex > bj_forLoopBIndexEnd set bj_forLoopAIndex = R2I(udg_vodinoy_e_3) set bj_forLoopAIndexEnd = R2I(udg_vodinoy_e_4) loop exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd call RemoveUnit( udg_vodinoy_e_dummy[GetForLoopIndexA()] ) call RemoveDestructable( udg_vodinoy_e_dec[GetForLoopIndexA()] ) set bj_forLoopAIndex = bj_forLoopAIndex + 1 endloop set udg_vodinoy_e_3 = ( udg_vodinoy_e_3 + 40.00 ) set udg_vodinoy_e_4 = ( udg_vodinoy_e_4 + 40.00 ) set bj_forLoopBIndex = bj_forLoopBIndex + 1 endloop set bj_forLoopAIndex = 1 set bj_forLoopAIndexEnd = 40 loop exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd call RemoveDestructable( udg_vodinoy_e_dec[GetForLoopIndexA()] ) set bj_forLoopAIndex = bj_forLoopAIndex + 1 endloop call RemoveUnit( udg_vodinoy_e_dummy1 ) set x = 0 set y = 0 endfunction function Trig_p1_Conditions takes nothing returns boolean return GetSpellAbilityId() == 'A00D' endfunction
//=========================================================================== function InitTrig_p1 takes nothing returns nothing local integer i = 0 set gg_trg_p1 = CreateTrigger( ) call TriggerAddCondition( gg_trg_p1, Condition( function Trig_p1_Conditions ) ) call TriggerAddAction( gg_trg_p1, function Trig_p1_Actions ) loop call TriggerRegisterPlayerUnitEvent( gg_trg_p1, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null ) set i = i + 1 exitwhen i > 11 endloop endfunction Думми почему-то не меняют высоту...Добавлено (22 Июня 2013, 14:19:45) --------------------------------------------- Есть ли функция создания юнита по 3 осям ? (x,y,z). Всё о той же высоте...
Сообщение отредактировал mazahan - Четверг, 13 Июня 2013, 18:19:07 |
|
|
|
SirNikolas | Дата: Суббота, 22 Июня 2013, 14:43:47 | Сообщение # 79 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Чтобы менять юниту высоту, он должен иметь тип передвижения "Летающий". Либо, если это нежелательно, нужно добавить и сразу отнять способность превращения в летающее существо (например, 'Amrf').
|
|
|
|
mazahan | Дата: Суббота, 22 Июня 2013, 15:01:10 | Сообщение # 80 |
5 уровень
Группа: Проверенные
Сообщений: 105
Награды: 0
Репутация: 5
Блокировки:
| Цитата (SirNikolas) Чтобы менять юниту высоту, он должен иметь тип передвижения "Летающий". Либо, если это нежелательно, нужно добавить и сразу отнять способность превращения в летающее существо (например, 'Amrf'). Это всё давно сделал , с помощью способности сфинкс , добавленной через редактор объектов(когда-то давно, ещё в триггерах, пробовал с типом передвижения "Летающий" , не помогало) ошибку уже сам нашёл Код call CreateUnit( GetOwningPlayer(udg_vodinoy_e_caster),'h007',x,y,0) set udg_vodinoy_e_dummy[GetForLoopIndexA()] = GetLastCreatedUnit() а надо Код set udg_vodinoy_e_dummy[GetForLoopIndexA()] = call CreateUnit( GetOwningPlayer(udg_vodinoy_e_caster),'h007',x,y,0) Хотя особой разницы не вижу , видимо GetLastCreatedUnit() не связан с CreateUnit ...
И да Цитата Есть ли функция создания юнита по 3 осям ? (x,y,z).
|
|
|
|
Goodie | Дата: Воскресенье, 23 Июня 2013, 15:52:01 | Сообщение # 81 |
4 уровень
Группа: Проверенные
Сообщений: 84
Награды: 0
Репутация: 57
Блокировки:
| Цитата видимо GetLastCreatedUnit() не связан с CreateUnit ... Ну ну. GetLastCreatedUnit() возращает юнита CreateUnit... возращает юнитаДобавлено (23 Июня 2013, 15:52:01) ---------------------------------------------
Цитата Есть ли функция создания юнита по 3 осям ? (x,y,z). CreateUnit.... - X,Y SetUnitFlyHeight - Z
cJass рулит! Power of Mighty[Work In Progress]
|
|
|
|
mazahan | Дата: Понедельник, 24 Июня 2013, 10:04:33 | Сообщение # 82 |
5 уровень
Группа: Проверенные
Сообщений: 105
Награды: 0
Репутация: 5
Блокировки:
| Цитата (Goodie) CreateUnit.... - X,Y SetUnitFlyHeight - Z Значит это единственный способ.
|
|
|
|
Ty3uK | Дата: Понедельник, 24 Июня 2013, 10:24:31 | Сообщение # 83 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Да.
|
|
|
|
xomach | Дата: Понедельник, 24 Июня 2013, 12:58:27 | Сообщение # 84 |
7 уровень
Группа: Проверенные
Сообщений: 484
Награды: 0
Репутация: 128
Блокировки:
| mazahan, всегда можно запилить функцию, если настолько влом писать лишнюю строку
|
|
|
|
Goodie | Дата: Понедельник, 24 Июня 2013, 15:56:46 | Сообщение # 85 |
4 уровень
Группа: Проверенные
Сообщений: 84
Награды: 0
Репутация: 57
Блокировки:
| xomach, Именно
define CreateUnit(player,id,x,y,z,angle) = bj_lastCreatedUnit = CreateUnit(player,id,x,y,angle);SetUnitFlyHeight(bj_lastCreatedUnit,z,0.0);
cJass рулит! Power of Mighty[Work In Progress]
|
|
|
|
Ty3uK | Дата: Понедельник, 24 Июня 2013, 16:42:42 | Сообщение # 86 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Goodie, к чему такой брутальный и ненужный хук? Человек пишет сразу на JASS -> bj_lastCreatedUnit ему не нужен. Что если мне не всех юнитов надо поднимать в воздух? Писать каждый раз #undef и #setdef?
|
|
|
|
Goodie | Дата: Понедельник, 24 Июня 2013, 16:47:58 | Сообщение # 87 |
4 уровень
Группа: Проверенные
Сообщений: 84
Награды: 0
Репутация: 57
Блокировки:
| Ty3uK, Защем. CreateUnit(Player(0),0,0,0,0) один из вариантов Можно написать c помощью перегруженных макросовДобавлено (24 Июня 2013, 16:47:36) --------------------------------------------- Да и вобще. Зачем что то дефайнить, если можно написать отдельно высоту)) Добавлено (24 Июня 2013, 16:47:58) --------------------------------------------- Я лично пишу все отдельно)
cJass рулит! Power of Mighty[Work In Progress]
|
|
|
|
Ty3uK | Дата: Понедельник, 24 Июня 2013, 18:28:05 | Сообщение # 88 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Goodie, зачем дефайнить то, что может дать бессмысленный лишний вызов?
|
|
|
|
SirNikolas | Дата: Понедельник, 24 Июня 2013, 18:44:36 | Сообщение # 89 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Ty3uK, количество аргументов разное. Если тебе не нужно поднимать, ты вызываешь функцию с 5 параметрами.Цитата (Goodie) define CreateUnit(player,id,x,y,z,angle) = bj_lastCreatedUnit = CreateUnit(player,id,x,y,angle);SetUnitFlyHeight(bj_lastCreatedUnit,z,0.0); define CreateUnit(player, id, x, y, z, angle) = { bj_lastCreatedUnit = CreateUnit(player, id, x, y, angle); SetUnitFlyHeight(bj_lastCreatedUnit, z, .0); } fixed.
|
|
|
|
Ty3uK | Дата: Понедельник, 24 Июня 2013, 19:33:13 | Сообщение # 90 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| SirNikolas, ну да, затупил.
|
|
|
|
Goodie | Дата: Вторник, 25 Июня 2013, 10:11:55 | Сообщение # 91 |
4 уровень
Группа: Проверенные
Сообщений: 84
Награды: 0
Репутация: 57
Блокировки:
| Цитата define CreateUnit(player, id, x, y, z, angle) = { bj_lastCreatedUnit = CreateUnit(player, id, x, y, angle); SetUnitFlyHeight(bj_lastCreatedUnit, z, .0); } fixed. Точняк. Цитата Goodie, зачем дефайнить то, что может дать бессмысленный лишний вызов? Дефайны не вызывают ничего. Они просто дают упрощенный код http://cjass.xgm.ru/manual-ru#htoc13
cJass рулит! Power of Mighty[Work In Progress]
|
|
|
|
Ty3uK | Дата: Вторник, 25 Июня 2013, 10:32:19 | Сообщение # 92 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| Goodie, я знаю. Просто я забыл, что вызов с меньшим количеством аргументов не заменяется. Добавлено (25 Июня 2013, 10:32:19) --------------------------------------------- Но в любом случае Цитата (Ty3uK) Человек пишет сразу на JASS -> bj_lastCreatedUnit ему не нужен.
|
|
|
|
|
|
|
|
|
|
|