30

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

Код
function CreepSpellActions takes nothing returns boolean
    local unit Dummy = null
    local real CasterX = GetUnitX(GetTriggerUnit())
    local real CasterY = GetUnitY(GetTriggerUnit())
    local real TargetX = GetUnitX(GetFilterUnit())
    local real TargetY = GetUnitY(GetFilterUnit())
    if IsUnitEnemy(GetFilterUnit(), Player(10)) then
        set Dummy = CreateUnit(Player(10), '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
    return false
endfunction

function CreepSpellActivation takes nothing returns nothing
    local group TempGroup = CreateGroup()
    local real CasterX = GetUnitX(GetTriggerUnit())
    local real CasterY = GetUnitY(GetTriggerUnit())
    call GroupEnumUnitsInRange(TempGroup, CasterX, CasterY, 1500, function CreepSpellActions)
    call DestroyGroup(TempGroup)
    set TempGroup = null
endfunction

function CreepSpellFilter takes nothing returns boolean
    return GetUnitUserData(GetTriggerUnit()) == 1 and GetSpellAbilityId() == 'A002'
endfunction

function InitTrig_CreepSpell takes nothing returns nothing
    set gg_trg_CreepSpell = CreateTrigger()
    call TriggerRegisterPlayerUnitEvent(gg_trg_CreepSpell, Player(10), EVENT_PLAYER_UNIT_SPELL_EFFECT, function CreepSpellFilter)
    call TriggerAddAction(gg_trg_CreepSpell, function CreepSpellActivation)
endfunction
Специально везде разжевал и ввёл переменные с нормальными названиями. Если бы их вводил и нормально называл самостоятельно, вопроса даже не возникло бы.
30

» WarCraft 3 / надоедливый баг

Принятый ответ
Проблема решается очень просто: отключите оптимизацию скрипта в парсере cJass.
Велики шансы на то, что ниже по коду значение в [1] просто-напросто нигде не используется, и поэтому оптимизатор выпиливает его инициализацию.

Нужен С-подобный синтаксис - пиши на ZINC.
Purge it with fire!
30

» Way of Others / Way of Others

Наиболее успешны будут переводы на корейский и китайский, судя по количеству активных игроков.
30

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

Sergarr:
gravity = 9.8/tickrate;
постоянная гравитации ну никак не может зависеть от внутренней частоты работы физ. системы
Каждые 1/tickrate секунды запускается обработка списка снарядов. Ускорение свободного падение (как и любое) измеряется в "метров в секунду за секунду", то есть в "изменении скорости за секунду". А за 1/tickrate секунды скорость изменится на 1/tickrate от полного значения.
И еще, то, что в системе называется "impulse", это на самом деле должно называться "velocity", потому что импульс это масса*скорость, отсюда кстати и та вышеуказанная ошибка с умножением на массу.
Вполне вероятно, что так и есть, исходную версию начинал писать через импульсы.
30

» WarCraft 3 / Огненный купол

На гифке не очень понятно, что это купол, Но сам эффект на высоте, как и всегда!
30

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

если претендуешь на понятный код то естественно называть нужно своими именами.
Справедливо.
Уничтожаться ниче офк не должно, какого фига физический объект должен за это отвечать?
написал было возражение, но потом призадумался и передумал...


ЕМНИП, операции с базовыми типами (int, float, ...) напрямую обрабатываются, без дополнительных обёрток. Идея как раз заключалась в том, что всё, кроме визуала (юнит + эффект) хранится и обрабатывается в виде конструкций из этих базовых типов, даже запилил квадтри (только понятия не имел, что оно так называется) для упихивания "своих" декораций. Но, увы, там нашёлся баг, локализацию которого я счёл неоправданно трудоёмкой после ряда попыток и вовсе отказался от идеи юзать дудады.

единственное, что в нем хорошего это стиль
Вот это, должен признаться, нормально так огрело. Действительно, ничего больше?
30

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

ты просто сам попробуй не трогая основной код реализовать пару спеллов
Реализовал, потом мб залью мапу (если допилю).
Тут даже такие банальности как то, что гравитация это скаляр, а не вектор.
Исходно делал как раз через вектор, но не смог найти векторному выражению никаких применений, и перевёл в скаляр, хз.
Ты понимаешь вообще что там было основано на входе в ректангл только чтобы максимально перенести отсеивание колижнов в нативный код?
Тащемта, да, и это вроде где-то обсуждалось даже активно
зачем-то есть настраиваемый тикрейт
Глубоко в концепции это задумывалось как метод снизить нагрузку через снижение тикрейта при повышении количества объектов, но позже эмперически выяснил, что сам факт наличия такого числа юнитов оказывает на нагрузку несравнимо большее влияние, за сим оставил.

На самом деле, если бы не "ненужный пафос", то хрена-с-два я бы дождался здесь хоть какого-нибудь code review от практикующего специалиста, так что хз даже про его "нужность" или "ненужность". Хотя метод, конечно, не самый красивый, тут каюсь и приношу извинения.

При чем тут стек
Копипаста со статьи Скорпа, я знаю, что такое стак, но не увидел никакой проблемы в именовании, простите, если задел в нежных чувствах =)
с тем же успехом можно было слить все эти чайлд структуры в основную и ничего бы не изменилось.
стало бы нечитаемо, лол
На деле, это использую примерно так: есть набор пресозданых "визобжей" и дамагов, сам "физобж" варится по требованиям и на него вешаются копии нужных мне кусков конфигурации. Не помню, как это "правильно" называется, допустим, "factory" (надеюсь, не задел в нежных чувствах, если ошибся ;D)
Doc:
вот с этого просто в АХАХАХА
Ничего не могу сказать, действительно обосрался в полный рост \о/
Как-то получилось, что в игре выглядит нормально, "да и хер с ним, не буду трогать"
объект который весит меньше будет медленнее падать?
Там же проекция на ось z, то есть технически это ускорение падения, а не наоборот.
Снаряды тупо всегда уничтожают себя при колижне с юнитами.
А что им ещё делать, лол?

Если в сухом остатке, то действительно спасибо за то, что понатыкал в несколько куч, учту. Хотел бы попросить менее эмоционально и более предметно потыкать, по возможности, но само собой настаивать не могу.
30

» /home/girvel/workshop / Хочу сделать игру #4. Онлайн стратегия с грабежом корованов

Цель в игре достаточно условна - построить сильнейшую империю
Если в игре уже есть хотя бы одна сильная империя, то шансы остальных игроков превзойти её станут реальными только после ухода владельца в длительный АФК (что неизбежно случится, так как любая игра без вызовов скучна).
30

» /home/girvel/workshop / Хочу сделать игру #4. Онлайн стратегия с грабежом корованов

girvel, если твоя цель отдалена от тебя больше, чем на месяц и при этом ты не вкладывал в неё бабло, то эта цель никогда не будет достигнута в полном объёме, а значит, детально её формулировать бессмысленно.

Не надо строить себе идеалы =)

С точки зрения игрока замечу, что если матч условно-бесконечен, и никаких целей не обозначено, то играть я в такое не буду. Всё-таки стратегия - это не РПГ, в ней сложно провести более-менее прямую ассоциацию между собой и аж целой нацией, чтобы просто продолжать "жить" в игре.
30

» Game Dev / Поиск ближайшей точки к кривой

Очень сомневаюсь в "нельзя".
Собственно, я говорил про "в общем виде", когда ещё не было внесено никаких уточнений. И да, действительно, "в общем виде" в целом редко что оказывается "льзя".
Советую спросить не здесь, а на stackoverflow/math.stackexchange
Совет дня, если честно.
30

» /home/girvel/workshop / Хочу сделать игру #4. Онлайн стратегия с грабежом корованов

подразумевают
Кто подразумевает? "Мультиплеерная игра" это (дословно) "игра со множеством игроков", а "онлайн-игра", опять-таки дословно, это "игра по интернету". Если каким-то образом удаётся эти понятия сравнивать, то я уже представляю громкость, с которой будет рваться шаблон при фразе "мультиплеерная онлайн-игра".

Вообще, глядя на
это игрушка с бесконечной длиной матча
и
значительно сложнее и многограннее браузерки в плане стратегии
могу сказать, что у тебя приступ "наполеонизма", и с весьма ощутимыми шансами рискую оказаться правым.

Сделай играбельный прототип, а не заводи долгострой на годы вперёд, это то, с чего нужно начинать, и то, что я имел в виду под "начинать тоже надо уметь правильно".
30

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

Если кому-нибудь зачем-нибудь понадобится, то по отдельной просьбе закину код системы в сам ресурс.
30

» Game Dev / Поиск ближайшей точки к кривой

Devion, как именно располагается и чем задаётся вектор камеры относительно кривой? Модель плоская или всё-таки пространственная?
30

» /home/girvel/workshop / Хочу сделать игру #4. Онлайн стратегия с грабежом корованов

Возможно, вам это покажется крайне нетипичным для такого жанра, как стратегия, но я собираюсь делать игру в сеттинге средневековья.
Самоирония - это всегда хорошо =)

В целом, по поводу всей кучи идей могу дать один совет: как минимум для начала выпили всё лишнее, и сконцентрируй все свои силы на одном-единственном, лишь бы доделать его до конца. При распылении на различные параллельные работы, эффективность и достижимый прогресс падают в квадратичной зависимости от количества этих работ.

Два главных навыка в геймдеве (да и вообще в чём угодно): уметь начать и уметь доделывать. Если с первым у большинства проблем не возникает (хотя, на самом деле, начинать тоже надо уметь правильно), то второе обычно постепенно теряется за дымкой множества идей, возникших по ходу процесса.
Это я к чему? К тому, что сделай сначала единственный стиль, но выдрочи его так, чтобы он работал идеально, и только потом приделывай альтернативы, заодно и баланс будет намного проще поддерживать.
30

» WarCraft 3 / Дисплей

Sergey105, это неисправимо, особенности движка.
Можно переделать все build-in сообщения об ошибках и эмулировать условия их появления, но это будет несравнимо более геморройнее без сколько-нибудь значительного выхлопа.
30

» WarCraft 3 / Дисплей

Выше я написал самый известный/популярный вариант эмуляции дефолтной внутриигровой ошибки, который ещё в далёком 2005 году придумал Vexorian.
30

» WarCraft 3 / Дисплей

Принятый ответ
library SimulateError
{
    private sound errorSound = CreateSoundFromLabel("InterfaceError", false, false, false, 10, 10);

    void UserInterfaceError(player targetPlayer, string errorText) {
        if (GetLocalPlayer() == targetPlayer) {
            ClearTextMessages();
            DisplayTimedTextToPlayer(targetPlayer, 0.52, -1.00, 2.00, "|cffffcc00" + errorText + "|r");
            StartSound(errorSound);
        }
    }
}
30

» WarCraft 3 / Логово Орков

NilasAran_39, как будет финальная версия - запроси публикацию ещё раз, ок?
30

» WarCraft 3 / Разведчик Высших эльфов.

Давайте договоримся, что вы сначала решаете, что является финальной версией, и только потом запрашиваете публикацию, окей?
30

» WarCraft 3 / 9. Расширяющие функции

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

» Game Dev / Поиск ближайшей точки к кривой

Doc, очевидно, что если известен порядок кривой, то она строится по известной формуле =)
30

» Game Dev / Поиск ближайшей точки к кривой

Принятый ответ
Насколько мне известно, в общей виде - нельзя. Если вкратце опишешь, какую проблему решаешь, то есть вероятность найти альтернативные варианты.