Markiz
offline
Опыт:
11,432Активность: |
Маленькие хитрости, здорово облегчающие жизнь
Вот у меня тут накопилось немного материала, этакий mini-faq, на статью его явно не хватает, но если дополнить, то мбмб.
Собственно, у каждого джассера есть свои какие-то приемы, фишки, которые он использует. Вот пара приемов от меня, не скажу, что Америку открыл или колесо изобрел, но многие и не знают: 1. Перебор группы без ForGroup(). a) Когда надо просто перебрать группу: Код:
b) Когда нужно сохранить содержимое группы Банальное заведение второй переменной и присваивание ей значение первой не помогает. Тогда в конец тела цикла вставляем такой кусок кода: Код:
2. Return Array Вы думаете это невозможно? Да, это в принципе невозможно, но есть способы вернуть массив. Предположим у нас есть некоторая функция, возвращающая массив точек (неважно, зачем у нас такая функция). Чтобы реализовать ее, мы воспользуемся эффектной комбинацией Stack+Return Bug: Код:
3. CastSpell noCache Ну тут все совсем просто. Во всех виденных мною реализациях функции CastSpell (кастует нужный спелл) использовался кэш, чтобы удалить кастера, когда он не нужен в то время, как есть юолее красивое решение, не требующее отдельного потока и кэша: Код:
По последней информации SetUnitExploded ремувит юнита после смерти, вот так-то. У меня все, жду дополнений. |
04.07.2006, 21:18 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Цитата:
Имхо это можно было сделать сразу в фильтре группы... т.е. не брать врагов и билдинсов и п.р. Цитата:
А ты уверен что движок очистит память, а не просто убьет юнита? |
||
05.07.2006, 09:36 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Sir Lothar
offline
Опыт:
5,740Активность: |
Цитата:
Вот-вот. Если нет, то получится утечка памяти... |
|
05.07.2006, 10:01 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Цитата:
Туту конечно с обдной стороны разумно, зачем хранить взорванного юнита? Его косточки уже никуда не будут использдваны... а вот если взорванных юнитов можно возраждать всякой бякой как у Палыча, то движок все равно будет хранить координаты... |
|
05.07.2006, 10:04 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Markiz
offline
Опыт:
11,432Активность: |
Цитата:
Чтобы передать в фильтр игрока, тебе придется юзать глобалку/кэщ. В 3 пункте про explode я уже все написал вообще-то. |
|
05.07.2006, 18:25 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Цитата:
Ха, что тебе мешает объявить локалку игрока до создания группы? exploder добавил: Цитата:
Написано что сие есть красивое решение, но не написано реально это работает или просто очередная бредятина... |
||
05.07.2006, 20:49 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Markiz
offline
Опыт:
11,432Активность: |
exploder
Цитата:
Не вижу разницы. Имхо удобнее так. Цитата:
Теперь перечитай то, что написал и посмейся. |
||
05.07.2006, 20:51 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Цитата:
угу не заметиль =)) А точно? Проверенно? =)) Цитата:
Имхо удобнее через фильтр группы, не просто удобнее - логичнее, лучше всегда сразу отбрасывать не нужных юнитов, занимать меньше памяти, да и цикл будет крутится меньшее количество раз, не будет "пустых" проходов, когда мы нарвавшись на вражину не делаем ничего, а запускаем следующий виток... exploder добавил: Так что разница есть, и иногда очень существенная... |
||
05.07.2006, 20:55 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Markiz
offline
Опыт:
11,432Активность: |
exploder
нету там разницы. по сути варкрафту тоже приходится проходить циклом по группе и вычеркивать лишних, не удовлетворяющих условию. Не веришь? Втыкай код GetUnitsInRangeOfLocMatching в B.J |
06.07.2006, 00:42 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Цитата:
А сам то фтыкал? Цитата:
Причем: Цитата:
Ну и где цикл на джасс? Что я его не вижу... exploder добавил: Фильтрация происходит в коде игры и уж наверно намного быстрей чем на джасс... |
|||
06.07.2006, 10:36 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Markiz
offline
Опыт:
11,432Активность: |
exploder
Все, убедил :) Но я до сих пор не совсем понимаю, каким куском кода ты сам хочешь это заменить :dunno: |
06.07.2006, 14:42 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Markiz, то то же =)) Завтра напишу сегедня времени совсем нет... Короч в двух лсовах создаешь кондишен функцию, и пихаешь ее вместо булекспр в фильтр...
Отредактировано exploder, 06.07.2006 в 21:42. |
06.07.2006, 21:26 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Markiz
offline
Опыт:
11,432Активность: |
exploder
Пфф. Ну а как ты просунешь локалку туда, а, друг мой? |
07.07.2006, 00:46 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Цитата:
Зачем? Мы прямо в функции возмем то, что нам нужно, точно также также: local player p=GetOwningPlayer(GetSpellAbilityUnit()), но тогда уже нам не придется писать эту строку в основной функии, т.к. там сы уже ничего не фильтруем... |
|
07.07.2006, 09:43 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Markiz
offline
Опыт:
11,432Активность: |
exploder
бред. зачастую группа генерируется по ходу выполнения функции, когда в GetSpellAbilityUnit() давно лежит всякий трэш. |
07.07.2006, 13:34 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
//=================================================== exploder добавил: Если триггер срабатывает по событию каста, то функция GetSpellAbilityUnit() будет всегда возвращать то что нужно... |
07.07.2006, 14:10 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Markiz
offline
Опыт:
11,432Активность: |
exploder
до первого PolledWait()/TriggerSleepAction() |
07.07.2006, 17:28 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Цитата:
Ну это естественно... но я думаю ты же не будешь вэйт фтыкать в фильтр? |
|
07.07.2006, 20:54 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Markiz
offline
Опыт:
11,432Активность: |
exploder
причем тут это? если эффект от закла не единовременный, то придется ставить вейт. |
08.07.2006, 16:27 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Цитата:
Если бы, да ка бы... приведи пример, а то я плохо понимаю о чем ты. Все равно ты группу собираешь в момент каста... |
|
09.07.2006, 20:46 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|