Лучше вообще не юзать улучшения, они очень не очень, и не только потому, что не откатываются.
С многоуровневыми улучшениями вообще десинки иногда ловились в некоторых ситуациях (лень искать, но пруфы были).
Есть же способы повысить хп...
Понятно что можно, но если это самый легкий и менее ресурсо-затратный способ повысить ХП всем нужным юнитам, что же мне теперь проверять всех вновь созданных юнитов и повышать им HP триггерно через добавление скилла?
Получается, что так. Системы для такого повышения ХП есть, например здесь: xgm.guru/p/wc3/bpe
Интересно, что карта начиналась с обычной практики и желания создать ИИ. Был уже 2016 год, я вернулся в варкрафт только из любви к кодингу и неумению пользоваться им нигде в другом месте. А потом меня понесло - идейный штурм не дают мне покоя, однако без каких-либо тестеров я просто не могу продолжать делать карту дальше.
Интересно. Я тут тоже ИИ на варкрафте сделал... только идей что-то не прибывает.
я могу использовать конструкцию типа if (number of units of type Stone меньше или равно Max 1, -1
А почему не "меньше или равно 1"? Зачем этот Max(1,-1) вообще нужен, его значение всегда же равно 1.
не равно 1...пробовал...он буквально воспринимает все...он рандомно выбирал ...либо 0 либо 1
если вставлял 0 вместо MAX он не работал
Такого быть не должно. У тебя явно какая-то проблема с редактором, потому что в нормальном редакторе Max 1) не дает случайных результатов, и 2) всегда выдает максимальное значение между двумя входящими значениями.
Сферы еще не прокают при автоатаке юнитов с места без приказа. Почему? Потому что близзы так сделали, что сферы прокают только при обычном приказе на атаку.
Чтото подобие такова:
Исследование "Отряд Пехотинцев" и по завершению появляется несколько пехотинцев с капитаном
А зачем тут вообще исследование тогда? Делаешь дамми юнита "Отряд Пехотинцев", и триггер который создает юнитов при появлении этого дамми юнита на карте и убивает его.
Это очевидно не так, если автор делал карту, вдохновляясь игрой серии "Total War", например.
Карты из серии "Risk" (всякие "зомби инвейжны", "лорды европы" и итд) тоже в туда же.
И все эти карты жутко страдают из-за невероятных лагов при движении юнитов. Особенно зомби карты, там порой приходится ждать секунд по 10-20 прежде чем зомби-орда соизволит сдвинутся с места. А если еще учесть, что они тупят не только когда приказ отдают, но и когда они находят цель при автоатаке... ну, если карта интересная, то это не сильно мешает, но, вообще говоря, это не есть хорошо.
Мне вот до сих пор интерестно, что там близзы наворотили в алгоритме такого, что юнит мертвый не при хп меньше 0.5, как при стандартном округлении, а при 0.405. Как такое вообще можно ухитриться сделать, а?
На JASS-е есть функция GetLearnedSkill(), которая выдает rawcode выученного умения. Создаешь переменную типа "целочисленная" с названием SkillCode, потом в начале действий триггера пишешь через Custom Script что-то типо этого:
set udg_SkillCode=GetLearnedSkill()
и затем делаешь какие тебе там нужны сравнения на переменную SkillCode.
Главный кошмар тут, конечно - 14 групп. Пришлось так делать, т. к. принципиально не хочу применять глобалки, а локалки, похоже, после дестройгруп заново не юзабельны.
Это вроде должно быть легко поправить, вместо
call DestroyGroup (firewayunits1)
везде ставь
call GroupClear(firewayunits1)
и в самом конце уже, где идет обнуление переменных, там оставляешь DestroyGroup.
И с чего такая нелюбовь к глобалкам? Хештаблица используется, а это ж тоже глобалка, причем даже не просто глобалка, а супер-глобалка. У меня с ней постоянно головная боль была, из-за возникающих после интенсивной работы странных глюков...
Не важна роль игрока. В триггерах игрок номер 10 это номер 9. Потому что по нормальному нумерация начинается с нуля. Sergarr, я в шоке. Сделал так, как вы посоветовали и все отлично работает. Можете пожалуйста пояснить, ваш совет. Чтобы я понял в собственно была ошибка. Ваш ответ однозначно будет лучшим.
С первой частью - потому что тогда функция фильтра не работает правильно, в ней GetSpellAbilityId() будет всегда 0 выдавать.
Со вторым - UnitApplyTimedLife(Dummy, 'BTLF', 3) сбивает ранее выданные приказы (почему - черт его знает). Дамми юниты палили в одну цель не по приказу из триггера, а из-за своей собственной авто-атаки.
И да, я не очень удивлен что оно все работает, поскольку я примерно полтора часа эту карту дебажил, и решение выдал после того как все у меня начало работать правильно.
Смысловое понимание кода увеличивается в разы. Что напрямую сказывается на времени его написания и отладки, из-за отсутствия/наличия дурацких ошибок, как с этим impulse и умножением на массу. Оптимизация это вообще дело последнее, которое выполняется уже после реализации всего, что хотели реализовать, поскольку добавлять что-нибудь еще к оптимизированному коду - это чистое мучение.
Кроме того, в самом коде физического компонента объекта логика описывается пусть с уже обмусоленной ошибкой, но всё-таки универсально: при обновлении объекта он смещается в направлении суммирующей на её величину, а скейлинг этой величины под тикрейт - работа контроллера, который обрабатывает этот объект и устанавливает сам тикрейт.
Вот эту часть текста я не очень понял. Tickrate устанавливается в GameField, а обработка объектов идет в PhysObj. Чья же тогда это работа?
постоянная гравитации ну никак не может зависеть от внутренней частоты работы физ. системы
Каждые 1/tickrate секунды запускается обработка списка снарядов. Ускорение свободного падение (как и любое) измеряется в "метров в секунду за секунду", то есть в "изменении скорости за секунду". А за 1/tickrate секунды скорость изменится на 1/tickrate от полного значения.
А почему нельзя вот это деление на tickrate сделать непосредственно в физическом коде? Вот здесь, например:
this.impulse.z -= this.mass*gravity;
Вместо того, чтобы умножать на массу, делить на тикрейт. В бонусе - тебе не придется перерасчитывать величину gravity каждый раз, когда ты меняешь tickrate.
Вообще, у тебя этот "импульс" (который на самом деле скорость), для того чтобы все было именно что по "матмодели", обязательно должен везде делится на tickrate - иначе получается, что ты к величине размерности расстояния добавляешь величину размерности скорости, что не есть хорошо.
Да, и еще: 9,8 - это для метров. В варике 1 единица расстояния это вовсе не метр, а гораздо меньшая величина. В варике 1 метр это где-то 100 единиц расстояния. Так что константа gravity у тебя должно быть не =9.8, а =9.8/100. И без всякого tickrate-а, разумеется.
Я конечно понимаю, что "матмодели" это круто, и вообще код выглядит немного за пределами моего разумения как недопрограммиста, но постоянная гравитации ну никак не может зависеть от внутренней частоты работы физ. системы.
И еще, то, что в системе называется "impulse", это на самом деле должно называться "velocity", потому что импульс это масса*скорость, отсюда кстати и та вышеуказанная ошибка с умножением на массу.
По описанию звучит очень похоже на Impossible Bosses (нет прокачки, бой только против боссов, усиление за счет выпадаемых предметов), так что да, нового жанра у тебя точно не будет.
???? Любой тайтл можно назвать живым, даже диаблу первую. В неё же играют еще полторы калеки!
Живая игра - это та, по которой проводятся турниры с солидной медийкой. Кроме китайских ланов, какие турниры проводятся по варкарфту? Игра мертва, а вы просто подменяете понятия.
Это какое то очень узкое понимание "живости" игры. Как насчет игр, в которых мультиплеера нету вообще? Они все мертворожденные, получается?
» WarCraft 3 / Что делать с этим багом?
» The HellMouth / The HellMouth
» WarCraft 3 / Проблема с Every 0.01 seconds of game time
» WarCraft 3 / Проблема с Every 0.01 seconds of game time
» Огонёк Феникса / Я часть системы или ее сбой?
» Warcraft III:The Doom of Arthas / Новые скриншоты
» WarCraft 3 / Attack once не прокает сферы
» WarCraft 3 / Можно ли сделать улучшение не ограниченным.
» WarCraft 3 / ИИ не использует скилы
» WarCraft 3 / Двойной урон
» WarCraft 3 / Многие юнитов
» WarCraft 3 / IsUnitDeadBJ()
» WarCraft 3 / Нужно ли удалять после создание CreateForce()
» WarCraft 3 / Как отследить изучаемую способность?
» WarCraft 3 / Преследование по карте
» WarCraft 3 / Battle for Alerot: Тайны чёрной башни. Релиз
» WarCraft 3 / Волна лавы, если можно - улучшить код
Ред. Sergarr
» WarCraft 3 / Не работает триггерный спелл.
Со вторым - UnitApplyTimedLife(Dummy, 'BTLF', 3) сбивает ранее выданные приказы (почему - черт его знает). Дамми юниты палили в одну цель не по приказу из триггера, а из-за своей собственной авто-атаки.
» Clamp'ова кухня / Clamp's Physics
» WarCraft 3 / Не работает триггерный спелл.
Ред. Sergarr
» Clamp'ова кухня / Clamp's Physics
» Clamp'ова кухня / Clamp's Physics
» WarCraft 3 / Жанр карты
» WarCraft 3 / Не работает триггерный спелл.
» WarCraft 3 / Конкурс карт Warcraft 3, Новости