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

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

Ответ
 
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
IsUnitInFrontOf
вот такая простая задача уже сломала мне зубы, не приятно, право слово. Поиск на хгм уже использовал, справится не получилось, извращаться с доп группами не хочу, мне это кажется несколько.. ммм... глупым что ли )
Так вот, господа, как поставить условие таким образом что бы из группы юнитов действия проводились только с теми кто перед лицом героя...
Пробовал и RAbs(a-a1)<70, пробовал так же a+35>a1 and a-35<a1; и то и то выдает не корректные результаты.
Старый 31.07.2011, 22:26
Elf_Stratigo

offline
Опыт: 4,699
Активность:
это тоже самое что удар в спину только не в спину, а в поиске удар в спину есть
Старый 31.07.2011, 22:34
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Я искал уже по удару в спину. Не нашел корректного способа, да и там ораторы очень сумбурны и без конкретики..
Старый 31.07.2011, 22:42
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Цитата:
Сообщение от Elf_Stratigo
это тоже самое что удар в спину только не в спину, а в поиске удар в спину есть


Там тоже самое что и тут:

Цитата:
Сообщение от FKoFF
Пробовал и RAbs(a-a1)<70, пробовал так же a+35>a1 and a-35<a1; и то и то выдает не корректные результаты.


FKoFF, код в студию, работать по идее должно ж.
Старый 31.07.2011, 22:49
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
((код jass
function BurningSmash takes unit u returns nothing
local group g=udg_Temp_Group
local unit lo
local real x=GetWidgetX(u)
local real y=GetWidgetY(u)
local real a=GetUnitFacing(u)
call DestroyEffect(AddSpecialEffectTarget("Item_BurningSlash.mdx",u,"origin"))
call GroupEnumUnitsInRange(g,x,y,300,null)
loop
set lo=FirstOfGroup(g)
exitwhen lo==null
if MatchesUnit(lo,u) and a+70 > GetAngle(x,y,GetWidgetX(lo),GetWidgetY(lo)) and a-70 < GetAngle(x,y,GetWidgetX(lo),GetWidgetY(lo)) then
call MakeWDmg(u,lo,100.)
call MakeEleDmg(u,lo,60.,2)
call BurnUnit(lo,u,10.,3.)
endif
call GroupRemoveUnit(g,lo)
endloop
set g=null
set lo=null
endfunction
))
вообщем весь баг этой системы состоит в том что когда значение a больше 290 или меньше 70 - часть юнитов не попадает под удар, из-за того что занчение a+70 вдруг может оказаться меньше значения a1...
Старый 31.07.2011, 22:54
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
._.

Код:
local group g=udg_Temp_Group

wtf?

1)группа не создана,
2)что бы добавить из 1 группы в группу, над юзать GroupAddGroup.

Остальное офк не работает, потому что группа не создана.
Старый 31.07.2011, 22:57
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Faion:
1)группа не создана,
2)что бы добавить из 1 группы в группу, над юзать GroupAddGroup.
Остальное офк не работает, потому что группа не создана.
глупость, группа глобальная и она создана, эффект появляется все работает но иногда бажит.
Старый 31.07.2011, 22:58
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Цитата:
Сообщение от FKoFF
глупость, группа глобальная и она создана, эффект появляется все работает но иногда бажит.


Выведи дебагом CountUnitInGroup(g)
Старый 31.07.2011, 23:00
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Faion:
Выведи дебагом CountUnitInGroup(g)
повторюсь. Все работает, юниты иногда получают урон, действия после установки группы работают. Условие иногда тупит, Фень, я ж написал уже почему бажит. И по этому мне нужна адекватная формула...
Старый 31.07.2011, 23:03
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Мне больше интересно, почему это вообще работает.

Т.к. правильно вот так:

Код:
local group g = CreateGroup()

GroupAddGroup(udg_Temp_Group,g)


Или у тебя волшебный ве, который создает группы, таймеры, и прочее.


Код:
call GroupEnumUnitsInRange(g,x,y,300,null)



Цитата:
Сообщение от ShadoW DaemoN
"Милый, заберешь сегодня нашего малого из детского садика."
Милый идет в садик, забирает оттуда домой всех детей, приводит их домой и начинает по одному проверять, не его ли это сын, если нет - отправляет ребенка назад в садик.


Faion добавил:
Кста, нафиг это:

Код:
local group g=udg_Temp_Group


Если ты потом пикаешь юнитов вокруг?

Faion добавил:
Цитата:
Сообщение от FKoFF
эффект появляется все работает но иногда бажит.

Еще бы он не появлялся, он появляется не на юните из группы, а на том юните которого ты передал в функцию.
Старый 31.07.2011, 23:17
Helpmeplz

offline
Опыт: 11,738
Активность:
Faion, "g" является ссылкой на группу "udg_Temp_Group". Это та же самая группа, а никакая не новая и создавать ее не нужно.
Старый 31.07.2011, 23:20
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Цитата:
Сообщение от Helpmeplz
Faion, "g" является ссылкой на группу "udg_Temp_Group". Это та же самая группа, а никакая не новая.


Понятно, впервые прост встречаю подобные извращения. Обычно либо создают чистую группу, либо работаю уже с имеющейся глобалкой.
Старый 31.07.2011, 23:21
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Faion:
Т.к. правильно вот так:
Код:
local group g = CreateGroup()
GroupAddGroup(udg_Temp_Group,g)
группа не создается, омфг.... я использую глобальную группу изначально и делаю это специально что бы до минимума свести creategroup()
Faion:
Если ты потом пикаешь юнитов вокруг?
>_< боже мой. Пойми, одно дело - маниакально удалять все пробелы в коде, заботится о том что метод () медленнее метода (2), и надо оптимизировать. Другое дело когда я просто ликвидировал процессорное время, тратящееся на creategroup(), destroygroup(), скачки хендлов, связанные с этим.
FKoFF добавил:
Faion:
"Милый, заберешь сегодня нашего малого из детского садика."
Милый идет в садик, забирает оттуда домой всех детей, приводит их домой и начинает по одному проверять, не его ли это сын, если нет - отправляет ребенка назад в садик.
дай мне возможность передавать в бульэкспры аргументы и я сменю метод. -_-, в противном случае я просто не намерен заниматься колдовством по передаче аргументов в функцию и обратно.
Старый 31.07.2011, 23:24
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Цитата:
Сообщение от FKoFF
группа не создается, омфг.... я использую глобальную группу изначально и делаю это специально что бы до минимума свести creategroup()


Если тебя так заботит скорость работы, юзай глобалку, а то непонятно, для какой цели ты создаешь дополнительную ссылку, когда можно работать на прямую.

Цитата:
Сообщение от FKoFF
Другое дело когда я просто ликвидировал процессорное время, тратящееся на creategroup(), destroygroup(), скачки хендлов, связанные с этим.


Лол, и написал супер медленный и кривой пик, который жрет больше, чем если бы ты объявил пару сотен групп.

Скажем так, алгоритм мягко говоря кривой, с использованием велосипедов.

Faion добавил:
Цитата:
Сообщение от FKoFF
дай мне возможность передавать в бульэкспры аргументы и я сменю метод. -_-, в противном случае я просто не намерен заниматься колдовством по передаче аргументов в функцию и обратно.


Пжалста, спецом для новичков писалось же:

http://xgm.guru/forum/showpost.php?p=1035145&postcount=1
Старый 31.07.2011, 23:29
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Faion:
Если тебя так заботит скорость работы, юзай глобалку, а то непонятно, для какой цели ты создаешь дополнительную ссылку, когда можно работать на прямую.
Скорость написания для меня чуть важнее. Опять же, я не маньяк что бы париться из-за пары бит, которые будут затрачены на объявление локалки.
Faion:
Лол, и написал супер медленный и кривой пик, который жрет больше, чем если бы ты объявил пару сотен групп.
Будь добр, пойди выкури wc3jass.com по поводу групп, ок? С группами связанно несколько багов, да и сам объект не из легких (тяжелее разве что хэш и widgets)
ложь
Faion:
Скажем так, алгоритм мягко говоря кривой, с использованием велосипедов.
grouploop вполне себе достойный метод, работает чуть медленнее forgroup, однако учитывая что последний потребует кучу колдовства - первый вполне себе приоритетен.
Старый 31.07.2011, 23:31
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Бтв, если так сильно печешься о производительности, то хотя бы пикай юнитов перед кастером, так хотя бы лишних проверок избежишь. А то все твои попытки выиграть в производительности сводятся на нет глупыми алгоритмами.

PS: уверяю, просчет смещения куда быстрее чем пик+проверка тонны лишних юнитов.

Faion добавил:
Цитата:
Сообщение от FKoFF
Скорость написания для меня чуть важнее. Опять же, я не маньяк что бы париться из-за пары бит, которые будут затрачены на объявление локалки.

Цитата:
Сообщение от FKoFF
я использую глобальную группу изначально и делаю это специально что бы до минимума свести creategroup()

о5 же, куда проще, быстрее, и без лишних действий в твоем случае работать с темпгруппой, т.к. твоя локалка в любом случае ссылается на глобалку, вопрос только в том, зачем работать через посредников, когда можно работать на прямую.
Цитата:
Сообщение от FKoFF
Будь добр, пойди выкури wc3jass.com по поводу групп, ок? С группами связанно несколько багов, да и сам объект не из легких (тяжелее разве что хэш и widgets)

Зачем мне буржуйские сайты, когда под боком умные люди давно написали, ссылка выше, как раз писался гайд для новичков, после очередного спеллконтеста. Там так же рассматривается данный случай.

Цитата:
Сообщение от FKoFF
grouploop вполне себе достойный метод, работает чуть медленнее forgroup, однако учитывая что последний потребует кучу колдовства - первый вполне себе приоритетен.


Я не про перебор, а про выборку.
Старый 31.07.2011, 23:36
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Faion:
Бтв, если так сильно печешься о производительности, то хотя бы пикай юнитов перед кастером, так хотя бы лишних проверок избежишь. А то все твои попытки выиграть в производительности сводятся на нет глупыми алгоритмами.
Один из твоих текущих фейлов состоит в том что "лишних" действий производится далеко не так много; тот же булэкспр работает по тому же принципу, лишь не добавляет юнитов в группу, если они не подходят по условию; к тому же правильная расстановка ретурна позволяет свести исполнение лишних действий для неподходящих юнитов к минимуму. То что группа на одно мгновение скакнет в весе - не так страшно, как страшно колдунство, написание лишней функции для форгрупа. ) Если сдвинуть группу перед юнитом - лишние действия по сдвижению по полярке пика; кстати, метод я уже нашел )
FKoFF добавил:
Faion:
о5 же, куда проще, быстрее, и без лишних действий в твоем случае работать с темпгруппой, т.к. твоя локалка в любом случае ссылается на глобалку, вопрос только в том, зачем работать через посредников, когда можно работать на прямую.
глобалка такой же посредник как и локалка ) Речь лишь в создании этой самой локалки, что, офк, не есть гут )
Faion:
Зачем мне буржуйские сайты, когда под боком умные люди давно написали, ссылка выше, как раз писался гайд для новичков, после очередного спеллконтеста. Там так же рассматривается данный случай.
А ты пойди почитай. Я что то тут не вижу статьи во всех аспектах раскрывающие информацию об объектах и все что о них можно найти вообще...
Faion:
Я не про перебор, а про выборку.
boolexpr не принимает аргументов. перенос данных - геморрой....
Старый 31.07.2011, 23:39
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
:facepalm:

Цитата:
Сообщение от FKoFF
Один из твоих текущих фейлов состоит в том что "лишних" действий производится далеко не так много;


Да ты что.

Цитата:
Сообщение от FKoFF
тот же булэкспр работает по тому же принципу, лишь не добавляет юнитов в группу, если они не подходят по условию; к тому же правильная расстановка ретурна позволяет свести исполнение лишних действий для неподходящих юнитов к минимуму. То что группа на одно мгновение скакнет в весе - не так страшно, как страшно колдунство, написание лишней функции для форгрупа. )


А ничо что нативные методы быстрее?

Цитата:
Сообщение от FKoFF
Если сдвинуть группу перед юнитом - лишние действия по сдвижению по полярке пика;


Которое между прочим сильно увеличивает быстродействие данного шаманства.
Старый 31.07.2011, 23:45
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
короче, феня, ты тут очередной холивар решил устроить, однако по теме тебе сказать нечего, да?
Старый 01.08.2011, 00:02
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Цитата:
Сообщение от FKoFF
короче, феня, ты тут очередной холивар решил устроить, однако по теме тебе сказать нечего, да?


Короче напиши:

group g = CreateGroup() без ссылки на глобалку офк, и затести.
Старый 01.08.2011, 00:04
Ответ

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

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

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

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



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