Постоянный харас хумана. Для начала проверить, есть ли у него экспанд. Если он собирается его основать - пытаться всячески сносить. Пытаться мешать крипингу (создавать скелетов жезлом, убивать побитых пехотинцев, ополчение коилом). Если хуману все же удалось построить экспанд, необходимо переходить в постоянную осаду, которая поддерживается с помощью пауков. Быстрый подъем до Т2 (Чертоги мертвых), после чего строится бойня и Лич, как второй герой (ДК - первый герой, кстати). При осаде стараться убить как можно больше пехотинцев. От экспанда лучше не отступать, так как хуман должен нести постоянные потери. При возможности убивать героя (но не сильно акцентировать на нем внимание; коил + нова, если герой хумана додыхает). Постоянно поттягивать статуи к экспанду и перебираться та Т3 (Темная Цитадель), после чего провести улучшения для сфинксов. Так как хуманы любят башни, необходимо статуи превратить в сфинксов и вынести ему башни (причем нужно каждого превратить отдельно и из следующей статуи вытащить всю ману; делать поочередно, не торопясь). Сплеш от ударов сфинксов снесет всех рабочих, которые попытаются реанимировать башни. После такого для хуманов игра завершается поражением. Главное все сделать правильно и последовательно.
Diaboliko, просто когда вчера нашел алгоритм самого контура подумал, что наверное уже был изобретен костыль для всей фигуры) DemonoiD, которая (x-a)^2+(y-b)^2=R^2? Да, это даже лучше, чем проверять расстояния.
По тестам получилось нечто похожее на круг (этот регион был сложен из кусочков - маленьких ячеек). Благодаря регистрации входа/выхода удалось зафиксировать результат. Нужно посмотреть, что произойдет с большими окружностями (пока что делюсь первыми результатами).
Круг с бОльшими размерами. Чем больше размер, тем точнее получается фигура. Замысел воплотить удалось, всем спасибо за помощь.
bazeba, может, попробовать добавлять способность триггерно и добавлять перманентность (чтобы та не исчезала при такого рода морфе)?
Еще вариант: добавлять способность при таких трансформациях (отлавливать триггерно применение).
Diaboliko, возможно. Попробую иначе. Если изложить суть попроще: представим координатную плоскость (x,y). Нужен алгоритм отрисовки пиксельного круга на данной плоскости (в игре пикселями будут ячейки региона - cell'ы).
Есть идея сделать такую заливку круга через квадрат (проходиться циклом по ширине с шагом в ширину маленького квадрата, т. е. 32). Этот цикл сделать как составляющую цикла по высоте. Сама основа цикла - сравнение расстояний к центру окружности (если оно больше, чем радиус, точку удалять как основу для пикселя-ячейки региона и ее там не создавать). Вариант громоздкий + не известно, что из этого получится. Может, найдется алгоритм попроще.
Сам код алгоритма для нахождения координат точек окружности, в которых нужно создать квадрат (функция для добавления круга в регион на стадии разработки, поэтому аргумент регион в ней отсутствует).
void plot_circle(int x, int y, int x_center, int y_center)
{
BJDebugMsg(I2S(x_center+x)+"..."+I2S(y_center+y));
BJDebugMsg(I2S(x_center+x)+"..."+I2S(y_center-y));
BJDebugMsg(I2S(x_center-x)+"..."+I2S(y_center+y));
BJDebugMsg(I2S(x_center-x)+"..."+I2S(y_center-y));
}
/* Вычерчивание окружности с использованием алгоритма Брезенхэма */
void RegionAddCircle(int x_center, int y_center, int radius)
{
int x,y,delta;
x = 0;
y = radius;
delta=3-2*radius;
while(x<y) {
plot_circle(x,y,x_center,y_center);
plot_circle(y,x,x_center,y_center);
if (delta<0)
delta+=4*x+6;
else {
delta+=4*(x-y)+10;
y--;
}
x++;
}
if(x==y) {
plot_circle(x,y,x_center,y_center);
}
}
В триггерах есть специальная функция для движения уже созданной молнии под названием Move Lightning. В нее необходимо указать новые точки для размещения молнии. В результате этого молния будет двигаться, растягиваться и сжиматься.
eriel222, случайность зависит от выпадения числа. Взять целочисленную, отвечающую за случайность, назначить ей значение от 1 до 8 (случайно; 8 - для примера) и пройтись по всем вариантам значений циклом и все, а дальше юнитов создавать.
eriel222, можно ведь проще через индексы, чтобы не создавать множество переменных, хоть и такое решение имеет место быть (главное помнить, что начальное значение целочисленной равно 0).
eriel222, сделать массив логических переменных (индексами будут номера или индексы игроков). Если игрок сделал выбор, то приравнивать к значению (например, назвать "игрок не сделал выбор" = неправда). И отталкиваться от этого во время создания юнитов (анализировать логические переменные, связанные с выбором игрока).
eriel222, например, у тебя есть 8 рас: 4 стандартные + тролли, иглогривы, огры, големы. Игрок не сделал выбор, в результате чего запускаем триггер с действиями: установить значение переменной равным случайному числу от 1 до 8 (переменная должна быть целочисленной), а потом проходиться условиями. Если число равно 1, то создать юнитов для расы альянс (в списке действий для режима сражения такая функция даже есть) в указанной точке и т.д. Следует уточнить, что для нестандартных рас расписывать создаваемых юнитов придется самостоятельно (например, создать домик троллей + 5 троллей-рабочих).
Увы, в игре игроку расу не назначить функцией. Можно лишь создать необходимых юнитов.
Дать всем игрокам сделать выбор расы в определенный промежуток времени, после истечения которого (если игрок не сделал выбор, то сделать случайный выбор за него) применить правила для сражений.
pro100master, не, все и делаю на старых версиях, но думаю как переезжать, если придется, а то системы громосткие.
Вспомнил пр Sc. Exp. для внешней компиляции (надо бы проверить для новых патчей).
Нестандартным способом получилось внедрить поддержку cJass для 1.29 патча с помощью Sc. Exp. компилятора (можно использовать функционал нового патча, создавая карту в WEX'е, а потом проходиться по ней компилятором с расширенным списком функций). Одно лишь но - при сохранении в WEX'е выбивает ошибки (хотелось бы видеть в нем AdicHelper).
Araders, количество утечек - нет, так как это имеет более субъективный смысл (смотря что ими считать). Например, таймер, который постоянно необходим для реализации какого-то механизма на карте - не утечка, а если он имеет место лишь раз и занимает память - является утечкой. Больший смысл в данной ситуации имеет подсчет количества объектов, чтобы можно было сравнить до действия триггера и после с целью выявить, чего появилось лишнего (что не было удалено; например, те же точки).
Систем, считающих память, нет (может, кто и реализует на новом return bug'е, который дает прямой доступ к памяти), но есть две такие системы. Они помогают считать лишь количество объектов.
HandleCounter - счетчик хэндл-объектов;
ObjectCounter - счетчик объектов со строгой типизацией handle'ов (дорабатываю его).
Если нужно работать с памятью, можно использовать диспетчер задач (там можно более точно оценить нагрузку на память от игры).
Наверное, в параметрах самого здания присутствует что-то неприемлемое для самой игры (обычно при выборе юнита происходит некоторая проверка).
Поэтому, здесь 2 варианта:
Что-то не так с настройкой самого здания.
Проверить триггеры, которые реагируют на выбор этого здания.
» WarCraft 3 / Авто-спавн юнита
» WarCraft 3 / Тактика за нежить против неоригинального хумана.
Ред. Пушистый
» WarCraft 3 / Алгоритм для создания круговой области
DemonoiD, которая (x-a)^2+(y-b)^2=R^2? Да, это даже лучше, чем проверять расстояния.
По тестам получилось нечто похожее на круг (этот регион был сложен из кусочков - маленьких ячеек). Благодаря регистрации входа/выхода удалось зафиксировать результат. Нужно посмотреть, что произойдет с большими окружностями (пока что делюсь первыми результатами).
Ред. Пушистый
» WarCraft 3 / Древа
Еще вариант: добавлять способность при таких трансформациях (отлавливать триггерно применение).
» WarCraft 3 / Древа
» WarCraft 3 / Алгоритм для создания круговой области
» WarCraft 3 / Алгоритм для создания круговой области
» WarCraft 3 / Алгоритм для создания круговой области
Ред. Пушистый
» WarCraft 3 / Алгоритм для создания круговой области
» WarCraft 3 / Можно ли прикрепить эффект молнии к юниту?
» WarCraft 3 / "Удаляемость" некоторых handle-объектов
» WarCraft 3 / Пик расы через чат
Ред. Пушистый
» WarCraft 3 / Пик расы через чат
» WarCraft 3 / Пик расы через чат
» WarCraft 3 / Пик расы через чат
Ред. Пушистый
» WarCraft 3 / Пик расы через чат
Увы, в игре игроку расу не назначить функцией. Можно лишь создать необходимых юнитов.
» WarCraft 3 / Пик расы через чат
» WarCraft 3 / Поддержка cJass
Ред. Пушистый
» WarCraft 3 / Поддержка cJass
Вспомнил пр Sc. Exp. для внешней компиляции (надо бы проверить для новых патчей).
Нестандартным способом получилось внедрить поддержку cJass для 1.29 патча с помощью Sc. Exp. компилятора (можно использовать функционал нового патча, создавая карту в WEX'е, а потом проходиться по ней компилятором с расширенным списком функций). Одно лишь но - при сохранении в WEX'е выбивает ошибки (хотелось бы видеть в нем AdicHelper).
Ред. Пушистый
» WarCraft 3 / Нагрузка памяти
» WarCraft 3 / Нагрузка памяти
HandleCounter - счетчик хэндл-объектов;
ObjectCounter - счетчик объектов со строгой типизацией handle'ов (дорабатываю его).
Если нужно работать с памятью, можно использовать диспетчер задач (там можно более точно оценить нагрузку на память от игры).
» WarCraft 3 / Вылетает карта при нажатии
Поэтому, здесь 2 варианта:
» WarCraft 3 / Обнуление аргументов типа handle
» WarCraft 3 / Обнуление аргументов типа handle
» WarCraft 3 / Обнуление аргументов типа handle