Clamp #1 - 2 недели назад 0

» WarCraft 3 / Считывание количества брони

Интересно, почему конкретная наработка БД по броне не подошла, а общее отписание того, что такое БД подошло, ну да ладно.
Clamp #2 - 2 недели назад 0

» WarCraft 3 / Как сделать свиток телепорта из доты?

Darknessay, есть приказ "оглушён (пауза)", id не помню, но суть в том, что у юнита в паузе именно он
Clamp #3 - 2 недели назад 0

» Edemium / Главная страница

Arctide, на одном из скринов есть фраза "сила зависит от стойкости и ловкости". Не вполне понятно сила чего именно: отталкивания, урона или речь вообще про стату "сила".
А новость прямо вот крутая, жду с нетерпением =)
Clamp #4 - 2 недели назад 0

» WarCraft 3 / Возвращение назад

KPOKODIL, если что-то происходит как реакция на действия того или иного юнита, то используется GetTriggerUnit()
Clamp #5 - 2 недели назад 0

» WarCraft 3 / Двумерные массивы

avuremybe, написать в кастом код integer array test[10000][6] и сохранить, например. Результат в war3map.j. Скачать JNGP проблем не вижу, он весит 7 мб.
Clamp #6 - 2 недели назад 0

» WarCraft 3 / Двумерные массивы

avuremybe, объяви 2D-массив и посмотри во что скомпилится, как получится — так и реализовано.
Sergarr, близко, но используется не совсем обычный массив, а расширенный (тоже фича vJass) ограничение количества элементов которого составляет что-то там ~65000, ЕМНИП.
Clamp #7 - 2 недели назад (отредактировано ) 0

» WarCraft 3 / Скорость рубки деревьев

Afterdeath:
DemonoiD:
Afterdeath, в этом нет никакого смысла, кроме твоего чувства прекрасного. Игроку без разницы.
Объясняю. Есть здание, которое стоит 5 единиц древесины. В каком случае ты раньше его построишь: когда рабочий носит 20 единиц древесины в секунду или 5 единиц в четверть секунды?
А если при этом есть еще улучшения на количество добываемой древесины? Каждое улучшение по двадцать единиц прибавлять вместо 5?
Что мешает изменить все цены в равном отношении так, чтобы не было величин, которые вынуждают реализовывать лишние сложные механики?
Clamp #8 - 2 недели назад 0

» WarCraft 3 / Двумерные массивы

В vJass реализована эмуляция двухмерных массовов:
// Как базовых типов:
int variable[10][200]   // Указание размеров обязательно.
// Так и кастомных:
Vec3 vector[3][3]
Clamp #13 - 3 недели назад 0

» WarCraft 3 / Координаты xy

Sergey105, вектор - это объект с парой координат, символизирующий собой направление. Линал очень простой, весьма советую погуглить краткие онлайн-курсы с разъяснениям основн
Clamp #14 - 3 недели назад 0

» WarCraft 3 / Координаты xy

Sergey105, вот по сути операции над векторами, но зачем-то разобранными. Скинул же структуру, с которой код с вычислениями в пару строк укладываться будет без дублирования.
Clamp #15 - 3 недели назад 0

» WarCraft 3 / Продажа предметов

ssbbssc, на аллокейты новых объектов из кучи расходуется больше ресурсов, чем на хранение
Clamp #16 - 3 недели назад 0

» WarCraft 3 / Как сделать чтобы после убийства юнита выходил эффект крови?

этот вариант не оставляет после себя трупа
И что?
В вопросе не было никаких ограничений, я указал самый простой вариант.
Clamp #17 - 3 недели назад (отредактировано ) 0

» WarCraft 3 / Координаты xy

» код
» вектор (обновлено)
struct vec2 {
    public float x, y;

    public static vec2 create(float x, float y) {
        return vec2.allocate().set(x, y);
    }
    public static vec2 createByUnit(unit u) {
        return vec2.create(GetUnitX(u), GetUnitY(u));
    }
    public static vec2 createByAngle(float angle) {
        return vec2.create(CosBJ(angle), SinBJ(angle));
    }

    public vec2 set(float x, float y) {
        .x = x;
        .y = y;
        return this;
    }

    public vec2 plus(vec2 v) {
        return .set(x + v.x, y + v.y);
    }

    public vec2 minus(vec2 v) {
        return .set(x - v.x, y - v.y);
    }
    public vec2 mult(float num) {
        return .set(x*num, y*num);
    }
    public vec2 div(float num) {
        return .mult(1/num);
    }
    public vec2 normalize() {
        return .mult(1/SquareRoot(x*x + y*y));
    }
    public vec2 rotate(float angle) {
        return .rotateHelper(CosBJ(angle), SinBJ(angle));    
    }
    public float dot(vec2 v) {
        return x*v.x + y*v.y;
    }
    public float radius() {
        return SquareRoot(x*x + y*y);
    }
    public float radiusSqr() {
        return x*x + y*y;
    }

    private vec2 rotateHelper(float aCos, float aSin) {
        return .set(x*aCos - y*aSin, y*aCos + x*aSin);
    }
}
» создание снаряда
#define DUMMY_ID = 'u001';
#define DEG2RAD = 0.017453292;

unit CreateSpellParticleUnit(unit source, float offsetAngle, float offsetRadius) {
    float spawnAngle = (offsetAngle + GetUnitFacing(source))*DEG2RAD;
    vec2 pivot = vec2.createByUnit(source);
    vec2 spawn = vec2.createByAngle(spawnAngle).mult(offsetRadius).plus(pivot);

    unit particle = CreateUnit(GetOwningPlayer(source), DUMMY_ID, spawn.x, spawn.y, 0);
    pivot.destroy();
    spawn.destroy();
    return particle;
}
Clamp #19 - 3 недели назад 0

» Есть желающие продолжить мою карту? / Gold Fever v1.23 AI

Altf40160, справедливости ради замечу, что номинально FrigatPlay по своему первому пункту прав, сделать хоть как-нибудь контент можно было бы за указанный им срок, но тем не менее не вижу вообще никакой проблемы в том, чтобы повышать свои навыки и попутно улучшать созданное, совмещая приятное с полезным. Сам так делал, однако так и не выпустил ни одного более-менее крупного проекта в варике, что не мешает иметь неплохое портфолио.
FrigatPlay, каждый волен совершить любой выбор в своём хобби, и эти выборы абсолютно точно не основываются на Ваших вкусах и желаниях, как бы сильно не хотелось обратного. Объективно, предъявлять здесь абсолютно не за что, и мне непонятна Ваша мотивация.
Clamp #20 - 3 недели назад (отредактировано ) 0

» WarCraft 3 / Координаты xy

Sergey105, хотя бы идея понятна?

А, вижу косяк, сейчас исправлю

Вроде исправил
Clamp #22 - 3 недели назад 0

» StarCraft 2 / Как отобразить область действия способности..

С ходу в голову пришла только идея отдельной "способности", которая служит целеуказанию и не имеет иных механик, но вроде как ещё способы есть
Clamp #24 - 3 недели назад (отредактировано ) 0

» WarCraft 3 / Координаты xy

Для начала замечу, что привычка использовать для обсчёта движения тригонометрические функции - верный путь к длительному, глубокому и жёсткому отсосу в будущем. Курите линал, он совершенно не сложный.

Писал прямо в сообщение, мог что-нибудь напутать, но вроде как не напутал.
» код
» вектор
struct vec2 {
	public float x, y;

	public static vec2 create(float x, float y) {
		return vec2.allocate().set(x, y);
	}
	public static vec2 createByUnit(unit u) {
		return vec2.create(GetUnitX(u), GetUnitY(u));
	}

	public vec2 plus(vec2 v) {
		return .set(x + v.x, y + v.y);
	}
	public vec2 minus(vec2 v) {
		return .set(x - v.x, y - v.y);
	}
	public vec2 mult(float num) {
		return .set(x*num, y*num);
	}
	public vec2 div(float num) {
		return .mult(1/num);
	}
	public vec2 normalize() {
		return this.div(SquareRoot(x*x + y*y));
	}
	private vec2 set(float x, float y) {
		this.x = x;
		this.y = y;
		return this;
	}
}
» создание снаряда
Только создание, остальное сам
#define DUMMY_ID = 'u001'
#define SPAWN_DISTANCE = 100.0

unit createParticle(unit source, unit target) {
	vec2 va = vec2.createByUnit(source);
	vec2 vb = vec2.createByUnit(target).minus(va).normalize().mult(SPAWN_DISTANCE).plus(va);
	unit result = CreateUnit(GetOwningPlayer(source), DUMMY_ID, vb.x, vb.y, 0);
	va.destroy();
	vb.destroy();
	return result;
}

Само движение снаряда реализовать через вектора ни на йоту не сложнее.
Clamp #25 - 3 недели назад 0

» WarCraft 3 / Координаты xy

Сейчас допишу правильное решение, терпение.
Sergey105, ты же знаком со структурами?
Clamp #27 - 3 недели назад (отредактировано ) 2

» Есть желающие продолжить мою карту? / Gold Fever v1.23 AI

Господа, хочется попросить прекратить агрессивные нападки и начать высказываться по существу.

Автору: моё сообщение из вопроса в QA всё ещё актуально.
Clamp #28 - 3 недели назад 0

» WarCraft 3 / Передаем аргументы в фунции callback'ов

плодить овер 100500 не торт
Ты фактически ничего не можешь "плодить" в JASS, он статичный.
Clamp #30 - 3 недели назад 0

» WarCraft 3 / Передаем аргументы в фунции callback'ов

По сути небольшой синтаксический сахар, передача параметров весьма легко реализуется и без него. Но за ресёрч определённо плюс!
Clamp #31 - 3 недели назад 0

» WarCraft 3 / Долгогрузка

Быстрая загрузка в игре просто делается - подгружай логику только когда она становится нужна (обычно при пике героя), а не всю сразу. За конкретной реализацией - к Open DotA.
Clamp #32 - 3 недели назад 2

» Way of Others / Главная страница

Могли бы авторы много лет назад как-нибудь это обыграть, когда морлоки Флека прибыли в Калимдор.
А могли и не обыгрывать, их полное право. Морлоки могли просто не встретиться друг с другом, например.
Clamp #33 - 3 недели назад 0

» WarCraft 3 / constant function

DracoL1ch, обычно это называют "сахаром" =)
В данном случае он действительно бесполезный, но тем не менее.
Clamp #34 - 3 недели назад (отредактировано ) 0

» WarCraft 3 / Долгогрузка

грузит долго из-за РО, его я меньше никак не сделаю
если я все данные РО перепишу в slk, то все равно карты долго будут грузиться?
Не должны, по идее. Проверять за тебя в любом случае вряд ли кто-то будет. =)
Clamp #35 - 3 недели назад (отредактировано ) 1

» WarCraft 3 / Продажа предметов

DemonoiD, в этом вопросе есть моменты, которые могут помочь получить хотя бы временное решение.
Не помню точно как, но как-то это без костылей настраивалось...
Clamp #36 - 3 недели назад (отредактировано ) 4

» WarCraft 3 / Есть желающие продолжить мою карту?

Очередной проект задохнулся за недостатком энтузиазма...
Ну почему же сразу "задохнулся"? АоС как жанр в целом может развиваться бесконечно, и любую версию после релизной можно воспринимать как финальную, пока не выйдет следующая.

Автору: вообще-то говоря, подобные вещи обычно публикуют в блогах. В QA (этом разделе) тоже можно, конечно, но вопросы обычно очень быстро пропадают из поля зрения пользователей сайта, а поиск продолжателя может занять значительное время.
Вообще, я бы глянул исходник интереса ради. Продолжать гарантированно не буду, но мб на досуге что-нибудь запилю/перепилю для развлечения и скину тебе. Впрочем, тоже не обещаю.

Остальных комментаторов хотелось бы попросить воздержаться от выкрикивания мнений без конструктива по существу.
Clamp #37 - 3 недели назад (отредактировано ) 0

» WarCraft 3 / Hide unit через GetLocalPlayer() вызовет десинк?

Делается задуманное так:
  1. В РО создаём копию нужного магазина, и полностью удаляем у неё карту путей и модель (Art: model => ".mdl")
  2. Ставим на карту в нужном месте нейтральное оригинальное здание и в те же самые координаты каждому игроку копию без модели
  3. В коде реализуем алгоритм, подобный следующему:
» псевдокод
func_1:
	GetLocalPlayer().GetSelection().Remove("нейтральный магазин")
	GetLocalPlayer().GetSelection().Add(PlayerShop[GetPlayerId(GetLocalPlayer())])

func_2:
	return GetLocalPlayer().GetSelection().ContainsUnit("нейтральный магазин")

func_main:
	trigger t = CreateTrigger()
	t.RegisterPeriodicEvent(0.02)
	t.AddCondition(func_2)
	t.AddAction(func_1)

Таким образом, когда игрок выберет нейтральный магазин, его выбор подменится нужным тебе образом.
Если у каждого игрока должен быть свой набор товаров, то это реализуется через выдачу магазину нужных товаров кодом при старте игры или в любой другой подходящий момент после него.
Clamp #38 - 3 недели назад 0

» WarCraft 3 / структура и перебирание данных в ней

если у вас не 300+ объектов для перебора
Использовать список практически нецелесообразно.
Clamp #41 - 3 недели назад (отредактировано ) 0

» WarCraft 3 / структура и перебирание данных в ней

» Пример использования
struct SpawnLink {
    public int length;

    private Spawn attach;
    private thistype prev, next;

    public float operator x()      { return this.attach.x; }
    public float operator y()      { return this.attach.y; }
    public float operator charge() { return this.attach.charge; }

    private static thistype create(float x, float y, player owner, int level, int length, thistype prev) {
        thistype this = thistype.allocate();
        this.prev = prev;
        this.next = 0;
        this.attach = Spawn.create(x, y, owner, level);
        this.length = length;
        this.changeLength(1);
        return this;
    }

    private void destroy() {
        if (this.prev != 0) && (this.next != 0) {
            this.prev.next = this.next;
            this.next.prev = this.prev;
        } else {
            this.prev.next = 0;
            this.next.prev = 0;
        }
        this.attach.destroy();
        this.deallocate();
    }

    public thistype add(float x, float y, player owner, int level) {
        if (this == 0) {
            return thistype.create(x, y, owner, level, 0, 0);
        }
        this.next = thistype.create(x, y, owner, level, this.length, this);
        return this.next;
    }

    public thistype remove(thistype toRemove) {
        thistype temp = this;
        if (this == toRemove) {
            temp = this.prev;
        }
        this.changeLength(-1);
        toRemove.destroy();
        return temp;
    }

    public void removeFirst() {
        thistype iterated = this;
        while (iterated.prev != 0) {
            iterated = iterated.prev;
        }
        this.changeLength(-1);
        iterated.destroy();
    }

    public void removeAll() {
        thistype temp, iterated = this;
        while (iterated != 0) {
            temp = iterated.prev;
            iterated.destroy();
            iterated = temp;
        }
    }

    public thistype getNearest(float x, float y) {
        thistype nearest = this, iterated = this.prev;
        float tempDistSqr, nearestDistSqr = this.attach.distToSqr(x, y);
        while (iterated != 0) {
            tempDistSqr = iterated.attach.distToSqr(x, y);
            if (nearestDistSqr > tempDistSqr) {
                nearestDistSqr = tempDistSqr;
                nearest = iterated;
            }
            iterated = iterated.prev;
        }
        return nearest;
    }

    public unit getUnit() {
        return this.attach.getUnit();
    }

    private void changeLength(int howMuch) {
        thistype iterated = this;
        while (iterated != 0) {
            iterated.length += howMuch;
            iterated = iterated.prev;
        }
    }

    public void setLevel(int level) {
        thistype iterated = this;
        while (iterated != 0) {
            iterated.attach.setLevel(level);
            iterated = iterated.prev;
        }
    }
}
Clamp #42 - 3 недели назад 0

» WarCraft 3 / Jass Highlighter for Notepad++

Советую использовать Sublime Text 3 и соответствующий модуль подсветки синтаксиса с сайта
Clamp #43 - 3 недели назад 2

» WarCraft 3 / constant function

DracoL1ch:
а ты пробовал? логика говорит, что constant функция всегда возвращает константу и не может работать с параметрами :)
Clamp #44 - 3 недели назад 2

» WarCraft 3 / constant function

constant function is a function whose (output) value is the same for every input value

Кажется, это не та функциональность, которая требуется.

Ещё можно предварительно пробовать, а не задавать превентивные вопросы.
Clamp #46 - 3 недели назад 2

» WarCraft 3 / баг компиляции

иногда понаделаешь заготовок под ф-ции и пойдешь спать
Так заготавливайте с return