Stray_Lucifer, выше описана логика действий для подсчёта предметов. Не важно на GUI ты это делаешь или на Jass'е.
Суть в том что тебе нужно поочерёдно проверить все 6 слотов инвентаря у юнита, что именно там лежит. При каждом совпадении добавлять в переменную +1 к текущему значению (очевидно, что в начале нужно эту переменную обнулить, т.е. set N = 0). После проверки инвентаря нужно сравнить получившееся значение N с нужным значением. Вот и всё.
Для удобства, можно написать себе функцию, в которую будет просто посылаться юнит и тип предмета, а возвращать она будет число. С этим числом (т.е. с результатом функции) и будет проводиться сравнение, но это уровень GUI+.
Вверху этого окна есть вкладка Вид, там можно включить/отключить отображение целых групп данных, сортировку по алфавиту, и вот этот самый режим, который ты хочешь ВЫКЛючить.
DiZzicH, она не "надуманная", а "НЕочевидная". Для этого и надо делать отладку, что бы сначала увидеть сколько вообще юнитов в группе и уже после этого искать проблему.
Добавить перед и послеGroupAddGroup(g,gTemp) проверку на содержимое, выведи текстом кол-во и имена юнитов, которые находятся в g и gTemp до и после этой функции. Кроме как за это тут и зацепиться больше не за что.
function GroupAddGroup takes group sourceGroup, group destGroup returns nothing
. . .
set bj_groupAddGroupDest = destGroup
call ForGroup(sourceGroup, function GroupAddGroupEnum
{ call GroupAddUnit(bj_groupAddGroupDest, GetEnumUnit()) }
)
. . .
endfunction
Chongoyuto, делать это я конечно не буду, но могу подсказать... Нужно при добавлении маны записать сколько её было ДО добавления дополнительных 150MP, а по окончанию действия - удалить то, что окажется свыше записанного. Таким образом если мана упрётся в максимум, то в момент её снятия она упадёт не ниже его. Плюсом я бы ещё предложил периодически чекать текущую ману на случай его стороннего восстановления, и перезаписывать указанное ранее значение. Так же можно здесь же чекать и её уменьшение, для вычитания из буфера "бонуса", пока он не обнулится или не закончится время действия.
Joma, скилл горного великана как раз и используют для этих целей. Те же "коги" у Клокверка или ульта Феникса (из доты). Атакуя "коги" или "яйцо" им наносится по 1 урона, т.к. остальной урон блокируется. Соответственно они не должны иметь регена ХП и ничто не можно им его давать (ауры, прочие эффекты скиллов).
Ещё имеет место факт того что крипы могут атаковать такую цель, и урон от них можно либо полностью игнорировать (ставить минимум 0), либо делать отдельную абилку которая будет на них работать. Например у варда 15хп, герои ему наносят по 3 ед. урона, а крипы только по 1 ед.
Проверяешь кто и с чем их атакует, т.к. нужно не всё подряд.
Делаешь нужные действия после ряда проверок.
Если что-то на вампиризм - считаешь сколько отхилить.
Есть башер - считаешь шанс и оглушаешь цель.
Есть какой-то другой скилл/предмет - делаешь что надо.
У меня как-то была проблема с тем что компилятор не ругался ни на что, но при этом и не выполнял свою работу на одной конкретной карте после добавления в неё нескольких триггеров. Я долго искал проблему, но ничто её не выявляло. Никаких ошибок не было. Оказалось, что в одном из мест вместо endfunction я написал endfucntion (буквы n и c поменяны местами). Да, у меня порой бывает что я тороплюсь и пишу ставя буквы не в том порядке, но... странно больше то, что НИЧЕГО не указало на то что есть какое-то непонятное слово в скрипте и на то что открытая функция не была закрыта (и что внутри неё, соответственно, были попытки объявляться другие функции, т.к. это всё ещё предыдущая считается).
Это уже считай базовая фишка абилки. Две абилки на её основе не будут работать суммируя блокируемый урон. Максимум что можно выжать - получать разный блок в зависимости от того шанс для которой из них сработал, но это далеко не одно то же с тем что б они работали "вместе".
но минимальный урон стакается!
А на счёт минимального урона - его обычно все всегда вставят на 0, т.к. не используют вовсе.
Редкий, но явно более частый случай, когда ВЕСЬ урон обнуляют до 1 единицы, например в доте для ульты Феникса, или для "когов" Клоквертка, или для вардов. Это даёт возможность выдать юниту всего 8хп + полный маг.иммунитет, и тогда понадобится сделать всего 8 ударов через авто-атаку что бы его убить, т.к. каждый будет отнимать всего по 1хп (реген кстати так же убирается).
как отлавливать входящий урон и аннулировать его?
Ну вообще, как сказали выше, триггерно отлавливать урон и далее долго и упорно детектить множество его аспектов, создавая попутно ещё больше костылей (и всё это ради одной механики блока). И да, ещё придётся решить для себя как именно ты будешь отличать физический урон авто-атак от всего остального.
set Point[0] = позиция юнита (U)
set Point[1] = точка с полярным смещением от (Point[0]) на расстоянии (D) под углом (A)
// твои действия... например
Боевая единица - Сдвинуть юнита (U) в точку (Point[1])
// прочие действия
call DestroyLocation( udg_Point[0] )
call DestroyLocation( udg_Point[1] )
set Point[0] = null
set Point[1] = null
Т.е. тебе надо взять за правило что если иы на какую-то точку хочешь ссылаться, то тебе её надо перед этим куда-то записать. Даже если нужна "случайная точка из области", то точно так же пишет set Point = случайна точка из области (R), и уже потом выбираешь действия с этой точкой, и в конце уже удаляешь. Если тебе надо много случайных точек каждую из которых ты используешь всего 1 раз, то каждый раз создаёшь их заново и удаляешь. Можно делать это в теле цикла, например записываешь Point[0]перед циклом (и удаляешь после), а внутри пересоздаёшь рандомную Point[1] и так же удаляешь её внутри цикла.
Кузня Мира - Покупка Обуви - Сапог Воина за 750
Написано что даёт +30 к скорости движения и +8 к Разуму
При этом рядом находится Сапоги Мага за 750, которые дают +30 к движению и +10 к Разуму
Купил посмотреть первый, оказывается даёт +8 ед. защиты
+ возврат на базу работает даже тогда, когда я стою под вражеской башней и она меня атакует... хотя написано что "Вы не должны получать урон". Или считается только от героев?
Что могу сказать по герою "№_33 Кетино": (т.к. ты всё равно спрашивал от чего может фризить)
Скилл Q - Разрывной патрон
Снаряд создаётся развернутый не туда куда применяется абилка, а туда куда в этот момент развернут сам герой (каст начинается немного раньше чем юнит полностью выравнивается в указанной позицией), от этого он летит немного не в ту сторону.
Таймер в 0.01 это прям через чур, всем всегда хватало 0.03 для движения снарядов.
Ты удаляешь дамми, поэтому от него мгновенно пропадает летящий за ним шлейф и отсутствует анимация смерти (это бы поправить).
Утекают точки при смещении дамми - его позиция и полярная точка.
Постоянно создаются группы для потенциальных целей... и не удаляются.
Скилл W - Полный заряд
Талант 19го уровня на +200 к скорости по сути просто аннулирует талант 4го уровня и делает его эффект бесполезным (только если его выбирать, офк)
Ты ставишь скорость как "текущая + 200", и это по-сути своей НЕправильно, т.к. если у героя базоая скорость 260 и ты берёшь сапог на +30, то у тебя уже 290 скорости... + бафф от Территории Охотника (+20%), итого 348... и ты ссылаешься на эти 348 и добавляешь ещё 200, устанавливая базовую скорость движения героя как 548 (а было 260 изначально)... далее он получает +30 от сапога = 578 и +20% от баффа = 693.6 ... но игра обрезает это до 522 (или ещё ниже, смотря сколько указано в константах).
+ ты часто используешь вейты (ждать), но обычные, а надо хотя бы "game time / ждать игровое время"
Ещё ты наносишь урон по области через функцию, которую почти никто и никогда не использует, потому что она делает это совершенно безконтрольно (нет возможность фильтровать врагов/здания/прочие_параметры), поэтому атакуя крипов наносится урон по своим, а уже после этого они разворачиваются и убегают назад... это явно мешает игре.
Скилл E - Дым
Про вейты я тебе уже сказал.
Про поворот дамми уже сказал (хотя конкретно здесь это роли не играет).
Сравнение дистанции между позициями юнитов - это создание двух точек и нахождение дистанции между ними... эти точки естественно не удаляются сам по себе = утечки.
Скилл R и P - Небесный огонь / Территория охотника
Здесь сказать особо нечего, те же вейты.
Случайная точка для территории охотника - такая же утечка, как и описанные ранее.
Ещё пара заметок по талантам:
Это конечно классно что выбирая какой-либо по герою можно определить что именно он взял, но... как мне кажется, это лишний бафф в статусе героя, и их аш четыре штуки из 8 максимально возможных (для отображения). Я бы как-то поменял это, но... скорее всего тебе станет сложнее определять что именно взял герой, т.к. чекать бафф было самым простым решением.
+ ещё такой момент, взяв талан он заменяется кнопкой, что на даёт повторно прочитать информацию о параметрах этого таланта. Я вот взял какой-то, и... забыл вообще что он даёт, и уже не могу проверить никак.
ZapSafe, у меня такое было когда я часто пытался вызывать "выбранных игроком юнитов", там идёт синхронизация и, видимо, это как-то нагнетает ситуацию (я так выводил скорость движения юнитов, когда игрок писал -ms, т.к. обращался ко "всем выбранным игроком юнитам").
Делая первый скриншот надо было нажать I, это убирает не отображаемые в игре эллементы (такие как дроп предметов с объектов, стартовые позиции игроков, тела моделей без четкой точки выбора).
Карту я не смотрел, но судя по тому что ты её делаешь 5+ лет, можно сделать вывод что взять и разом убрать утечки будет не просто. В какой именно момент стало всё так плохо? с какой-то конкретной версии или это накопительный эффект?
Может ты уточнишь что именно вызывает появление утечек? Появление в игре определенных героев/юнитов/абилок/предметов? Как именно лагает? - фризит игру? появляется задержка отклика? исключительно крипы начинают тупить? картинка прыгает в некоторых местах на карте?
Как вариант - полностью поставить всё распределение опыта на триггерную основу.
Кто-то умер? чекаем кто это был, кто его убил, сколько опыта надо дать, выбираем между кем можно опыт распределить, и выдаём.
Так же можно и кучу иных проверок прикрутить, например наличие какого-то баффа повышает получаемое кол-во опыта или вообще обнуляет его.
» WarCraft 3 / как узнать сколько предметов определённого типа носит юнит
» WarCraft 3 / Как сделать чтобы нельзя было выбрать союзных как таргет?…
» Администрация XGM / Я столкнулся вот с такой проблемой при добавлении новых…
» WarCraft 3 / Сочтание клавиш
» На страницах истории / Несколько скриншотов с небольшого участка первой серии
» WarCraft 3 / Неправильное срабатывание групп. Столкнулся с такой…
Ред. Extremator
» WarCraft 3 / Неправильное срабатывание групп. Столкнулся с такой…
» WarCraft 3 / Способности и алгоритмы на заказ
» WarCraft 3 / Фиксированный удар по юниту
» WarCraft 3 / Как добавить listfile в карту? [депротект]
» WarCraft 3 / Как добавить listfile в карту? [депротект]
При этом составляется база имён, которую иожно постоянно расширять.
Ред. Extremator
» WarCraft 3 / (ХЕЛП) Нужна помощь с тригерром
Ред. Extremator
» WarCraft 3 / Как разрешить несколько орб-эффектов?
- Отлавливаешь урон по юнитам.
- Проверяешь кто и с чем их атакует, т.к. нужно не всё подряд.
- Делаешь нужные действия после ряда проверок.
Если что-то на вампиризм - считаешь сколько отхилить.Есть башер - считаешь шанс и оглушаешь цель.
Есть какой-то другой скилл/предмет - делаешь что надо.
Ред. Extremator
» WarCraft 3 / как понять что в Jass коде не так?
Ред. Extremator
» WarCraft 3 / Морской Гигант-Рабочий
» WarCraft 3 / Морской Гигант-Рабочий
Я бы просто ему в руку дал эту связку... xD
» WarCraft 3 / Способность Горного великана "Каменная кожа" она уменьшает…
Редкий, но явно более частый случай, когда ВЕСЬ урон обнуляют до 1 единицы, например в доте для ульты Феникса, или для "когов" Клоквертка, или для вардов. Это даёт возможность выдать юниту всего 8хп + полный маг.иммунитет, и тогда понадобится сделать всего 8 ударов через авто-атаку что бы его убить, т.к. каждый будет отнимать всего по 1хп (реген кстати так же убирается).
» WarCraft 3 / привет, хотел узнать на чем основана порча которая спавнится…
» WarCraft 3 / Unity of forces
Ред. Extremator
» WarCraft 3 / Unity of forces
Написано что даёт +30 к скорости движения и +8 к Разуму
При этом рядом находится Сапоги Мага за 750, которые дают +30 к движению и +10 к Разуму
Купил посмотреть первый, оказывается даёт +8 ед. защиты
(т.к. ты всё равно спрашивал от чего может фризить)
Таймер в 0.01 это прям через чур, всем всегда хватало 0.03 для движения снарядов.
Ты удаляешь дамми, поэтому от него мгновенно пропадает летящий за ним шлейф и отсутствует анимация смерти (это бы поправить).
Утекают точки при смещении дамми - его позиция и полярная точка.
Постоянно создаются группы для потенциальных целей... и не удаляются.
Ты ставишь скорость как "текущая + 200", и это по-сути своей НЕправильно, т.к. если у героя базоая скорость 260 и ты берёшь сапог на +30, то у тебя уже 290 скорости... + бафф от Территории Охотника (+20%), итого 348... и ты ссылаешься на эти 348 и добавляешь ещё 200, устанавливая базовую скорость движения героя как 548 (а было 260 изначально)... далее он получает +30 от сапога = 578 и +20% от баффа = 693.6 ... но игра обрезает это до 522 (или ещё ниже, смотря сколько указано в константах).
+ ты часто используешь вейты (ждать), но обычные, а надо хотя бы "game time / ждать игровое время"
Ещё ты наносишь урон по области через функцию, которую почти никто и никогда не использует, потому что она делает это совершенно безконтрольно (нет возможность фильтровать врагов/здания/прочие_параметры), поэтому атакуя крипов наносится урон по своим, а уже после этого они разворачиваются и убегают назад... это явно мешает игре.
Про поворот дамми уже сказал (хотя конкретно здесь это роли не играет).
Сравнение дистанции между позициями юнитов - это создание двух точек и нахождение дистанции между ними... эти точки естественно не удаляются сам по себе = утечки.
Случайная точка для территории охотника - такая же утечка, как и описанные ранее.
Это конечно классно что выбирая какой-либо по герою можно определить что именно он взял, но... как мне кажется, это лишний бафф в статусе героя, и их аш четыре штуки из 8 максимально возможных (для отображения). Я бы как-то поменял это, но... скорее всего тебе станет сложнее определять что именно взял герой, т.к. чекать бафф было самым простым решением.
+ ещё такой момент, взяв талан он заменяется кнопкой, что на даёт повторно прочитать информацию о параметрах этого таланта. Я вот взял какой-то, и... забыл вообще что он даёт, и уже не могу проверить никак.
» Администрация XGM / Не знаю куда писать, допустим сюда. Слева вверху есть пять…
» WarCraft 3 / Карта начинает фризить, помогите
» WarCraft 3 / Unity of forces
» WarCraft 3 / Карта начинает фризить, помогите
Может ты уточнишь что именно вызывает появление утечек? Появление в игре определенных героев/юнитов/абилок/предметов? Как именно лагает? - фризит игру? появляется задержка отклика? исключительно крипы начинают тупить? картинка прыгает в некоторых местах на карте?
» WarCraft 3 / Как увеличить получаемый героем опыт, или уменьшить необходимый…
Кто-то умер? чекаем кто это был, кто его убил, сколько опыта надо дать, выбираем между кем можно опыт распределить, и выдаём.
Так же можно и кучу иных проверок прикрутить, например наличие какого-то баффа повышает получаемое кол-во опыта или вообще обнуляет его.