12

» WarCraft 3 / Что делать с этим багом?

Konstantin19:
ClotPh:
Лучше вообще не юзать улучшения, они очень не очень, и не только потому, что не откатываются.
С многоуровневыми улучшениями вообще десинки иногда ловились в некоторых ситуациях (лень искать, но пруфы были).
Есть же способы повысить хп...
Понятно что можно, но если это самый легкий и менее ресурсо-затратный способ повысить ХП всем нужным юнитам, что же мне теперь проверять всех вновь созданных юнитов и повышать им HP триггерно через добавление скилла?
Получается, что так. Системы для такого повышения ХП есть, например здесь: xgm.guru/p/wc3/bpe
12

» The HellMouth / The HellMouth

ToldYouSo:
Интересно, что карта начиналась с обычной практики и желания создать ИИ. Был уже 2016 год, я вернулся в варкрафт только из любви к кодингу и неумению пользоваться им нигде в другом месте. А потом меня понесло - идейный штурм не дают мне покоя, однако без каких-либо тестеров я просто не могу продолжать делать карту дальше.
Интересно. Я тут тоже ИИ на варкрафте сделал... только идей что-то не прибывает.
12

» WarCraft 3 / Проблема с Every 0.01 seconds of game time

ApoloZ2:
Sergarr:
ApoloZ2:
я могу использовать конструкцию типа if (number of units of type Stone меньше или равно Max 1, -1
А почему не "меньше или равно 1"? Зачем этот Max(1,-1) вообще нужен, его значение всегда же равно 1.
не равно 1...пробовал...он буквально воспринимает все...он рандомно выбирал ...либо 0 либо 1
если вставлял 0 вместо MAX он не работал
Такого быть не должно. У тебя явно какая-то проблема с редактором, потому что в нормальном редакторе Max 1) не дает случайных результатов, и 2) всегда выдает максимальное значение между двумя входящими значениями.
12

» WarCraft 3 / Проблема с Every 0.01 seconds of game time

ApoloZ2:
я могу использовать конструкцию типа if (number of units of type Stone меньше или равно Max 1, -1
А почему не "меньше или равно 1"? Зачем этот Max(1,-1) вообще нужен, его значение всегда же равно 1.
12

» Огонёк Феникса / Я часть системы или ее сбой?

GeneralElConsul:
Этот трал неправильный. Вот ответ истинного трала.
Я уже не первый раз вижу эти реплики "трала". Они реально взяты из какой-то карты, или где-то есть генератор реплик наподобие варкрафтовских?
12

» WarCraft 3 / Attack once не прокает сферы

Сферы еще не прокают при автоатаке юнитов с места без приказа. Почему? Потому что близзы так сделали, что сферы прокают только при обычном приказе на атаку.
12

» WarCraft 3 / Можно ли сделать улучшение не ограниченным.

Shmakov:
Чтото подобие такова:
Исследование "Отряд Пехотинцев" и по завершению появляется несколько пехотинцев с капитаном
А зачем тут вообще исследование тогда? Делаешь дамми юнита "Отряд Пехотинцев", и триггер который создает юнитов при появлении этого дамми юнита на карте и убивает его.
12

» WarCraft 3 / ИИ не использует скилы

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

» WarCraft 3 / Двойной урон

Попробуй перенести выключение триггера на самую первую строку действий. и убрать функции "ждать".
12

» WarCraft 3 / Многие юнитов

Clamp:
60+ юнитов это ... тупость автора
Это очевидно не так, если автор делал карту, вдохновляясь игрой серии "Total War", например.
Карты из серии "Risk" (всякие "зомби инвейжны", "лорды европы" и итд) тоже в туда же.
И все эти карты жутко страдают из-за невероятных лагов при движении юнитов. Особенно зомби карты, там порой приходится ждать секунд по 10-20 прежде чем зомби-орда соизволит сдвинутся с места. А если еще учесть, что они тупят не только когда приказ отдают, но и когда они находят цель при автоатаке... ну, если карта интересная, то это не сильно мешает, но, вообще говоря, это не есть хорошо.
12

» WarCraft 3 / IsUnitDeadBJ()

Мне вот до сих пор интерестно, что там близзы наворотили в алгоритме такого, что юнит мертвый не при хп меньше 0.5, как при стандартном округлении, а при 0.405. Как такое вообще можно ухитриться сделать, а?
12

» WarCraft 3 / Нужно ли удалять после создание CreateForce()

Скорее всего надо вручную удалять, но если ты не используешь его в периодически запускаемом триггере, то вряд ли будет какая-то разница.
12

» WarCraft 3 / Как отследить изучаемую способность?

На JASS-е есть функция GetLearnedSkill(), которая выдает rawcode выученного умения. Создаешь переменную типа "целочисленная" с названием SkillCode, потом в начале действий триггера пишешь через Custom Script что-то типо этого:
set udg_SkillCode=GetLearnedSkill()
и затем делаешь какие тебе там нужны сравнения на переменную SkillCode.
12

» WarCraft 3 / Преследование по карте

ERhack_ZV:
Пробовал, крипы бегут к герою, но доходят до середины карты и убегают обратно
Они не нейтрально-враждебные случайно?
12

» WarCraft 3 / Волна лавы, если можно - улучшить код

Главный кошмар тут, конечно - 14 групп. Пришлось так делать, т. к. принципиально не хочу применять глобалки, а локалки, похоже, после дестройгруп заново не юзабельны.
Это вроде должно быть легко поправить, вместо
call DestroyGroup (firewayunits1)
везде ставь
call GroupClear(firewayunits1)
и в самом конце уже, где идет обнуление переменных, там оставляешь DestroyGroup.
И с чего такая нелюбовь к глобалкам? Хештаблица используется, а это ж тоже глобалка, причем даже не просто глобалка, а супер-глобалка. У меня с ней постоянно головная боль была, из-за возникающих после интенсивной работы странных глюков...
12

» WarCraft 3 / Не работает триггерный спелл.

Dragonear:
Не важна роль игрока. В триггерах игрок номер 10 это номер 9. Потому что по нормальному нумерация начинается с нуля.
Sergarr, я в шоке. Сделал так, как вы посоветовали и все отлично работает. Можете пожалуйста пояснить, ваш совет. Чтобы я понял в собственно была ошибка. Ваш ответ однозначно будет лучшим.
С первой частью - потому что тогда функция фильтра не работает правильно, в ней GetSpellAbilityId() будет всегда 0 выдавать.
Со вторым - UnitApplyTimedLife(Dummy, 'BTLF', 3) сбивает ранее выданные приказы (почему - черт его знает). Дамми юниты палили в одну цель не по приказу из триггера, а из-за своей собственной авто-атаки.
И да, я не очень удивлен что оно все работает, поскольку я примерно полтора часа эту карту дебажил, и решение выдал после того как все у меня начало работать правильно.
12

» Clamp'ова кухня / Clamp's Physics

Clamp:
без каких-либо профитов вообще.
Смысловое понимание кода увеличивается в разы. Что напрямую сказывается на времени его написания и отладки, из-за отсутствия/наличия дурацких ошибок, как с этим impulse и умножением на массу. Оптимизация это вообще дело последнее, которое выполняется уже после реализации всего, что хотели реализовать, поскольку добавлять что-нибудь еще к оптимизированному коду - это чистое мучение.
Clamp:
Кроме того, в самом коде физического компонента объекта логика описывается пусть с уже обмусоленной ошибкой, но всё-таки универсально: при обновлении объекта он смещается в направлении суммирующей на её величину, а скейлинг этой величины под тикрейт - работа контроллера, который обрабатывает этот объект и устанавливает сам тикрейт.
Вот эту часть текста я не очень понял. Tickrate устанавливается в GameField, а обработка объектов идет в PhysObj. Чья же тогда это работа?
12

» WarCraft 3 / Не работает триггерный спелл.

Вместо
function InitTrig_CreepSpell takes nothing returns nothing
    set gg_trg_CreepSpell = CreateTrigger()
    call TriggerRegisterPlayerUnitEvent(gg_trg_CreepSpell, Player(1), EVENT_PLAYER_UNIT_SPELL_EFFECT, function CreepSpellFilter) 
    call TriggerAddAction(gg_trg_CreepSpell, function CreepSpellActivation)
endfunction
сделай так:
function InitTrig_CreepSpell takes nothing returns nothing
    set gg_trg_CreepSpell = CreateTrigger()
    call TriggerRegisterPlayerUnitEvent(gg_trg_CreepSpell, Player(1), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) //function CreepSpellFilter
    call TriggerAddCondition(gg_trg_CreepSpell, Condition(function CreepSpellFilter))
    call TriggerAddAction(gg_trg_CreepSpell, function CreepSpellActivation)
endfunction
и вот здесь:
if IsUnitEnemy(GetFilterUnit(), Player(10)) then
        set Dummy = CreateUnit(Player(1), 'e004', CasterX, CasterY, bj_RADTODEG*Atan2(TargetY - CasterY, TargetX - CasterX))
		call IssuePointOrder(Dummy, "attackground", TargetX, TargetY)
        call UnitApplyTimedLife(Dummy, 'BTLF', 3)
        set Dummy = null
    endif
поменяй местами IssuePointOrder и UnitApplyTimedLife, чтобы было вот так:
    if IsUnitEnemy(GetFilterUnit(), Player(10)) then
        set Dummy = CreateUnit(Player(1), 'e004', CasterX, CasterY, bj_RADTODEG*Atan2(TargetY - CasterY, TargetX - CasterX))
        call UnitApplyTimedLife(Dummy, 'BTLF', 3)
        call IssuePointOrder(Dummy, "attackground", TargetX, TargetY)
        set Dummy = null
    endif
12

» Clamp'ова кухня / Clamp's Physics

Clamp:
Sergarr:
gravity = 9.8/tickrate;
постоянная гравитации ну никак не может зависеть от внутренней частоты работы физ. системы
Каждые 1/tickrate секунды запускается обработка списка снарядов. Ускорение свободного падение (как и любое) измеряется в "метров в секунду за секунду", то есть в "изменении скорости за секунду". А за 1/tickrate секунды скорость изменится на 1/tickrate от полного значения.
А почему нельзя вот это деление на tickrate сделать непосредственно в физическом коде? Вот здесь, например:
this.impulse.z -= this.mass*gravity;
Вместо того, чтобы умножать на массу, делить на тикрейт. В бонусе - тебе не придется перерасчитывать величину gravity каждый раз, когда ты меняешь tickrate.
И еще:
                float nextX = this.location.x + this.impulse.x;
                float nextY = this.location.y + this.impulse.y;
Вообще, у тебя этот "импульс" (который на самом деле скорость), для того чтобы все было именно что по "матмодели", обязательно должен везде делится на tickrate - иначе получается, что ты к величине размерности расстояния добавляешь величину размерности скорости, что не есть хорошо.
Да, и еще: 9,8 - это для метров. В варике 1 единица расстояния это вовсе не метр, а гораздо меньшая величина. В варике 1 метр это где-то 100 единиц расстояния. Так что константа gravity у тебя должно быть не =9.8, а =9.8/100. И без всякого tickrate-а, разумеется.
12

» Clamp'ова кухня / Clamp's Physics

gravity = 9.8/tickrate;
Я конечно понимаю, что "матмодели" это круто, и вообще код выглядит немного за пределами моего разумения как недопрограммиста, но постоянная гравитации ну никак не может зависеть от внутренней частоты работы физ. системы.
И еще, то, что в системе называется "impulse", это на самом деле должно называться "velocity", потому что импульс это масса*скорость, отсюда кстати и та вышеуказанная ошибка с умножением на массу.
12

» WarCraft 3 / Жанр карты

По описанию звучит очень похоже на Impossible Bosses (нет прокачки, бой только против боссов, усиление за счет выпадаемых предметов), так что да, нового жанра у тебя точно не будет.
12

» WarCraft 3 / Конкурс карт Warcraft 3, Новости

DracoL1ch:
???? Любой тайтл можно назвать живым, даже диаблу первую. В неё же играют еще полторы калеки!
Живая игра - это та, по которой проводятся турниры с солидной медийкой. Кроме китайских ланов, какие турниры проводятся по варкарфту? Игра мертва, а вы просто подменяете понятия.
Это какое то очень узкое понимание "живости" игры. Как насчет игр, в которых мультиплеера нету вообще? Они все мертворожденные, получается?