30

» WarCraft 3 / Поиск элемента БД

Бесконечный инвентарь требует бесконечного количества памяти, а варкрафту на весь процесс выделяется только 2гб.
30

» WarCraft 3 / Поиск элемента БД

У меня инвентарь бесконечный.
Тебя это может сильно удивить, но при определённом подходе количество экземпляров одной структуры может оказаться сильно больше 8190 (что и так само по себе гигантское количество).
30

» WarCraft 3 / Поиск элемента БД

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

» WarCraft 3 / Поиск элемента БД

Что мешает использовать сами эти числа в качестве childKey и просто сохранять туда boolean true? Тогда можно добавлять сколько угодно раз, по сути будет перезаписыватся единственная ячейка.
Как и указал нвц
30

» WarCraft 3 / Поиск элемента БД

avuremybe, если опишешь, как и для чего используется БД, то мб появится.
30

» WarCraft 3 / Система общего здоровья.

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

» WarCraft 3 / Поиск элемента БД

avuremybe, хеш-таблица позволяет сохранять данные, как эти данные в таблице организованы определяет только сам разработчик.
Кроме того, функция StringHash() весьма медленная, лучше использовать GetHandleId() от контекстной сущности.

Касательно вопроса. Как вариант - можно завести массив, который будет хранить каждый childKey и бегать с проверкой по нему.
30

» WarCraft 3 / Один таймер

Принятый ответ
Делается таймер с относительно низким периодом, к каждой молнии лепится float, и каждый тик таймер проходится по списку структур и уменьшает все эти float на свой период. Если после уменьшения float <= 0, то структура вместе с молнией исключается из списка обходимых таймером и уничтожается.

Sergey105, советую почитать какие-нибудь общепринятые гайдлайны по оформлению кода. Так как cJass эмулирует C++, сойдёт общий набор рекомендаций по нему от Google.

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

» Game Dev / Какой движок выбрать?

pro100master, своё с нуля писать это гиблое дело, потому что ты будешь вместо разработки игры разрабатывать инструменты для разработки игры.
FrigatPlay:
что прикажеш делать если человек у нас простой смертный и не знает JASS и другие языки програмирования.
Учить какой-нибудь ЯП, разумеется.

Ну или на констракте делать, там ГУИ одно.
30

» Проект Z / Зона поражения. Режим выживания - видео.

Действительно, кримсонлендс прямо
В видео видны лаги, это игра или само видео?
30

» WarCraft 3 / Хеш таблица, childKey?

Vec3wc
interface Vec {
    public float x;
    public float y;
    public float z;

    public Vec   clone      ();
    public Vec   copy       (Vec   another);
    public Vec   plus       (Vec   another);
    public Vec   minus      (Vec   another);
    public Vec   mult       (float number);
    public Vec   div        (float number);
    public float dot        (Vec   another);
    public float distToSqr  (Vec   another);
    public float distTo     (Vec   another);
    public float angle      (Vec   edge);
    public Vec   reflect    (Vec   normal);
    public float radius     ();
    public Vec   normalize  ();
}

struct Vec3 extends Vec {
    // Constructors
    public static Vec3 create(float x, float y, float z) {
        Vec3 this = Vec3.allocate();
        this.x = x;
        this.y = y;
        this.z = z;
        return this;
    }

    public Vec clone() {
        return Vec3.create(this.x, this.y, this.z);
    }

    public Vec copy(Vec another) {
        this.x = another.x;
        this.y = another.y;
        this.z = another.z;
        return this;
    }

    // Basic math
    public Vec plus(Vec another) {
        this.x += another.x;
        this.y += another.y;
        this.z += another.z;
        return this;
    }

    public Vec minus(Vec another) {
        this.x += -another.x;
        this.y += -another.y;
        this.z += -another.z;
        return this;
    }

    public Vec mult(float number) {
        this.x *= number;
        this.y *= number;
        this.z *= number;
        return this;
    }

    public Vec div(float number) {
        return this.mult(1/number);
    }

    // Advanced math
    public static Vec3 cross(Vec edge1, Vec edge2) {
        return Vec3.create(edge1.y*edge2.z - edge1.z*edge2.y, edge1.z*edge2.x - edge1.x*edge2.z, edge1.x*edge2.y - edge1.y*edge2.x);
    }

    public float dot(Vec another) {
        return this.x*another.x + this.y*another.y + this.z*another.z;
    }

    public float distToSqr(Vec another) {
        return (this.x - another.x)*(this.x - another.x) + (this.y - another.y)*(this.y - another.y) + (this.z - another.z)*(this.z - another.z);
    }

    public float distTo(Vec another) {
        return SquareRoot(this.distToSqr(another));
    }

    public float angle(Vec edge) {
        return Acos(this.dot(edge)/this.radius()*edge.radius());
    }

    // Misc.
    public static Vec triangleNormal(Vec a, Vec b, Vec c) {
        Vec3 edge1 = b.clone().minus(a);
        Vec3 edge2 = c.clone().minus(a);
        Vec3 result = Vec3.cross(edge1, edge2).normalize();
        edge1.destroy();
        edge2.destroy();
        return result;
    }

    public Vec reflect(Vec normal) {
        float multipler = 2.0*this.dot(normal);
        this.minus(normal.mult(multipler));
        normal.div(multipler);
        return this;
    }

    public float radius() {
        return SquareRoot(this.dot(this));
    }

    public Vec normalize() {
        return this.div(this.radius());
    }
}

Небольшие знания векторной алгебры помогут сделать задуманное без костылей.
.z можно выпилить, само собой.
30

» Мир безумного / Обноление 0.8 | Crossout

Реально ничего об этом не слышал.
И не услышишь =)
Инсайдерская информация.
30

» WarCraft 3 / Двухсторонний телепорт

Принятый ответ
Maniac_91, нет, не самый простой, для реализации телепорта туда-обратно (как на некоторых мили-картах) достаточно указать две области, в которых будут стоять телепорты, поставить здания телепортов на эти области и указать эти области в настройках телепортов, открываемых при двойном клике на них.
30

» Мир безумного / Обноление 0.8 | Crossout

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

» WarCraft 3 / Искусственный интеллект

nvc123,
(отредактировано nvc123)
=P
Вопрос про самообучение не заметил, да. Тем не менее, оно реализуемо без прелоада/нейросетей, но будет работать только в рамках сессии.
30

» WarCraft 3 / Искусственный интеллект

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