Комментарии проекта WarCraft 3
8

Параметры игроков не просматриваются в игре

» WarCraft 3
Собственно, проблема видна на скриншоте:
Карта, естественно, тоже не запускается.
nvc123 #1 - 6 часов назад 0
VetsaN, лучше скинь карту чтобы я мог проверить на своём редакторе
VetsaN #2 - 20 часов назад (отредактировано ) 0
nvc123:
VetsaN, ошибки в коде карты
60% что проблемы в функции конфиг
С третьей компиляции без каких-либо вносимых изменений выдало ошибку. Все бы ничего, но найти эту систему по строчке не представляется возможным. В редакторе предусмотрена функция поиска по коду? Подозреваю, что эта ошибка и есть причина всех моих бед.
прикреплены файлы
quq_CCCP #4 - 1 день назад 0
ssbbssc, ну с чего это нету? Это какраз из за лича, там им недовольны.
ssbbssc #5 - 2 дня назад 0
quq_CCCP:
Ошибка в коде карты, либо попытка запуска карты с мемхаком на айкапе.
т.е. в драколичевской доте мема нет?
VetsaN #6 - 2 дня назад 0
Test1k0:
Обычное явление, когда пытаются запустить карту, сохранённую в более ранних версиях warcraft'a.
Карта пересохранялась на текущей версии
quq_CCCP #7 - 2 дня назад 4
Ошибка в коде карты, либо попытка запуска карты с мемхаком на айкапе.
Test1k0 #8 - 2 дня назад 0
Обычное явление, когда пытаются запустить карту, сохранённую в более ранних версиях warcraft'a.
5

Не возможно открыть файл основной карты

» WarCraft 3
У меня такая проблема не могу открыть карту пишеться вот типо этого
-Не возможно открыть файл основной карты
Steal nerves #4 - 17 часов назад (отредактировано ) 0
» гадание
скорее всего эта карта не автора, и автор где-нибудь скачал или попытался взломать. А потом открыл карту с помощью стандартного редактора WE. И у него пишет: не удалось открыть файл основной карты. Эта самая распространенная ошибка. Такая ошибка есть при открытии защищенной карты.
также помню скачивал карту одну с хгм, и не мог открыть. Но открылась только в JNGP. Опен дота с хмг тоже не открывалась в WE, сейчас проверил, вроде открывается.
Еще пример один был связан с UMS плагином. Знакомый скинул карту. Но у меня не открывалась даже с JNGP. а дело было в UMS. в редакторе JNGP есть кучу плагинов, которые снимают ограничение карты, точнее обычного стандарт. редактора. Если в карте, сохраненная в JNGP, вышли за ограничения, то обычный редактор это может не открыть. Мб из-за этого.
WoLLFeR #5 - 18 часов назад 0
Если ты до этого проверял карту, её копия есть в коренной папке варкрафта, в папке maps, в которой есть папка test, возможен откат, в зависимости от того,когда ты её проверял, а если ты после этой проверял другие, это тебе не поможет. Также на свои карты лучше делать копии, будет надёжнее.
7

Снижение магического сопротивление

» WarCraft 3
Есть ли способ снизить сопротивление к магическому урону? То есть по сути нужно увеличить магический урон по цели.
quq_CCCP #1 - 20 часов назад 0
Надо не отрец. значение, а фактор полученного урона больше 1-цы ставить.
Там дефолт 0.80 - что значит 20% маг резиста, если поставить 1.33 то будет бонусный урон от магии 33%. Способность "Благословение Элуны" ибо всякие рунные браслеты не складываются.
Extremator #2 - 20 часов назад 1
EvilPenguin:
Может я что-то не так делаю но когда я ставлю в маг уроне отрицательное значение он вообще перестает наносится. Какую графу и как изменять не подскажите?
а не надо ставить отрицательное значение
1.00 это 100% урона (норма)
0.80 это 80% урона (на 20% ниже нормы)
1.40 это 140% урона (на 40% больше норма)
EvilPenguin #3 - 20 часов назад 0
Может я что-то не так делаю но когда я ставлю в маг уроне отрицательное значение он вообще перестает наносится. Какую графу и как изменять не подскажите?
Extremator #4 - 20 часов назад 0
^ поэтому шлём его куда подальше, ставим на 1. и делаем увеличение маг.урона триггерно - через благоЭлуны
quq_CCCP #5 - 20 часов назад (отредактировано ) 0
Точно так же как и его повешение, скилл - благословение элуны, а так же способности отправляющие владельца\цель в мир духов, правда бонус магического урона будет 1.66 и не будет поддаваться изменению во время игры.
ssbbssc #6 - 21 час назад (отредактировано ) 0
Вкупе с запрещенным спеллбуком
Extremator:
Бери скилл "Благо.Элуны" и повышай принимаемый урон
Extremator #7 - 21 час назад 0
Бери скилл "Благо.Элуны" и повышай принимаемый урон
1

Разрыв соединения

» WarCraft 3
После проверки карты, я узнал, что игрок 2 (синий) покидает игру по причине разрыва соединения, тут я подумал что дело в интернете, но нет. Когда мы поменялись местами, я стал игроком 2 (синий), а друг стал хостом, тогда он не вылетел а я вылетел.После ещё позвал друзей, и получилось так же. В чём проблема как сделать так, что бы игроки с 2-го по 12-ый не вылетели с карты. Если можете то проверьте карту, спасибо.
ssbbssc #1 - 21 час назад 1
Читаем, после - серфим свой код на говняшки
86

Щемление 0.74c

» WarCraft 3
Теплая и ламповая карта в жанре Risk.
Версия 0.74
Новый ландшафт, 2 новых замка, контрольные точки, теперь можно победить, убраны основные причины фатала, замковые магазины.
Обновлено до версии 0.74c

Читать далее...
Патиссончик #83 - 23 часа назад 0
konvan5:
Патиссончик:
Сегодня-завтра выложу 0.74с, которая уже стабильная и без жёстких багов).
Кстати, что сделали с задачей со статуей? Убиваете сильнейшего игрока или просто ослабляете за проигрыш?
Все жёстко пока. В 0.75 будет интересное и оригинальное решение, предложенное Вадимом.
Залил 0.74с
» Изменения 0.74с
Эта версия прошла небольшую тестовую сессию, поэтому она должна быть играбельной. Но баги все еще возможны. Версии 0.74d не избежать по балансным правкам замков, ибо сейчас есть явно страдающие замки.
Общее:
  • Исправлена тонна багов, связанных с лимитом городов.
  • Новые города теперь доступны не с 6,11,17,21, а с 4,9,13,18 уровнях.
  • Уменьшение награды за убийства большинства юнитов.
  • Убрана, надеюсь, последняя причина фатала (проглядел в прошлом патче одну галочку).

Диабфол:
  • Кровожад:
    Уменьшен уровень юнита с 2 до 1.

Мрлейк:
  • Корона:
    На дополнительных героев больше не действую улучшения замка.

Нэверхол:
  • Корона:
    Уменьшена награда за дополнительного героя с 150 до 100ед. золота.
    Увеличен прирост Силы с 2 до 3,2ед.

Плаужхол:
  • Некромант:
    Уменьшена перезарядка атаки с 2,05 до 1,85сек.
    Увеличен урон с 9-13 до 13-19ед.

Предметы:
  • Арчхилльский лук:
(Арчхилл)
Теперь еще дает 33% нанести 180% урона.
Увеличена цена с 130 до 200ед. золота.
  • Посох:
(Вондермайт, Плаужхолл, Эншентлур)
Теперь еще наносит Разум/2 ед. урона всем противникам в радиусе 512 от героя при применении способности. (Не стакается)
Увеличена задержка перед первым появлением с 160 до 240сек.
Увеличен интервал пополнения с 400 до 560сек.
Увеличена цена с 140 до 190ед. золота.


Нейтральные войска:
  • Королева скорпионов:
    Добавлена способность, делающая из трупов Пустынных скорпионов.

» Изменение наград за убийства:
Арчхилл:
Защитник: с 5-9 на 3-5.
Мстительница: с 5-9 на 3-5.
Лучница Королевы: с 10-15 на 5-8.
Блэкхолл:
Ткач: с 6-11 на 4-8.
Матка: с 9-13 на 6-11.
Древний: с 10-17 на 10-15.
Паразит: с 1-2 на 1.
Боунъярд:
Скелет: с 4-5 на 3-4.
Скелет воина: с 4-7 на 3-5.
Скелет-лучник: с 4-6 на 3-5.
Падший: с 9-16 на 9-15.
Вондервуд:
Древо Войны: с 16-24 на 14-20.
Золотое Древо: с 21-30 на 17-25.
Вондермайт:
Маг Воды: с 5-9 на 3-5.
Дух Прилива: с 5-8 на 3-5.
Верховный маг: с 8-16 на 8-14.
Вульфкэмп:
Волчий всадник: с 7-12 на 5-9.
Кровавый волк: с 7-11 на 5-7.
Кодой: с 14-19 на 13-17.
Гобельстоун:
Бомбометатели: с 5-8 на 3-5.
Катапульта: с 15-22 на 15-20.
Гридроял Порт:
Пират: с 5-9 на 3-5.
Гринвейв:
Рубака: с 6-10 на 4-6.
Дубинщик: с 7-10 на 5-7.
Берсеркер: с 7-11 на 5-7.
Шаман: с 5-9 на 3-5.
Диабфол:
Кровожад: с 7-12 на 5-8.
Кровавая гончая: с 8-15 на 7-11.
Суккуб: с 5-9 на 3-5.
Занзкин:
Иглогрив: с 6-11 на 5-7.
Иглошкур: с 7-12 на 5-8.
Йефельхорн:
Висп: с 3-5 на 1-3.
Дриада: с 8-12 на 4-6.
Друид: с 8-14 на 5-8.
Коаль-Эдобб:
Заводной гоблин: с 8-13 на 5-8.
Лайтхольм:
Мародер: с 4-9 на 3-5.
Убийца: с 9-15 на 5-8.
Последователь: с 5-9 на 3-5.
Лэфтхилл:
Тролль: с 7-12 на 5-7.
Тролль шаман: с 8-12 на 5-7.
Мрлейк:
Черепаха: с 10-17 на 8-12.
Гидра: с 10-15 на 9-14.
Зародыш гидры: с 1-4 на 1.
Найтфорт:
Пехотинец: с 5-10 на 3-6.
Всадник: с 8-10 на 4-6.
Рыцарь: с 12-17 на 6-9.
Нэверхолл:
Ужас: с 4-8 на 3-5.
Астральный зверь: с 9-15 на 6-9.
Оферштайн:
Инквизитор: с 7-10 на 3-6.
Служитель: с 6-9 на 3-5.
Белый рыцарь: с 15-17 на 9-14.
Плаужхолл:
Зомби: с 5-8 на 3-5.
Некромант: с 6-11 на 5-8.
Чумной зомби: с 6-14 на 6-8.
Свежий зомби: с 2-3 на 1-2.
Саусфорт:
Дреней: с 6-9 на 3-6.
Вор: с 5-10 на 3-6.
Убийца: с 9-14 на 7-10.
Кентавр: с 7-12 на 6-9.
Кентавр-лучник: с 6-11 на 4-7.
Сиачерчш:
Сирена: с 4-8 на 3-5.
Нага: с 12-18 на 9-12.
Медуза: с 6-10 на 3-5.
Гвардеец: с 14-20 на 10-14.
Трейдмарк:
Ополченец: с 5-9 на 3-5.
Лучница: с 5-9 на 3-5.
Ведьмак: с 10-15 на 9-14.
Уайтривер:
Воин Света: с 5-9 на 3-5.
Целитель: с 5-9 на 3-5.
Волшебница: 8-14 на 6-9.
Унголиант:
Муравей: с 4-6 на 3-5.
Колектор: с 5-9 на 3-5.
Дитя Унголианта: с 11-16 на 10-14.
Личинка: с 0-1 на 0.
Кокон: с 5 на 0-3.
Флеймайн:
Кобольт: с 3-4 на 1-2.
Гигантский слизень: с 16-25 на 15-22.
Слизняк: с 4-8 на 3-5.
Хайденвуд:
Громила: с 8-11 на 4-7.
Гнолл-охотник: с 6-10 на 4-6.
Темный гном: с 8-14 на 7-11.
Хаймаунтаин:
Стрелок: с 6-10 на 3-6.
Хуфстрэнж:
Таурен: с 16-22 на 12-17.
Древний таурен: с 17-24 на 14-20.
Эншентлур:
Лесная лучница: с 5-9 на 3-5.
Энт: с 8-12 на 6-8.
konvan5 #84 - 2 дня назад 0
Патиссончик:
Сегодня-завтра выложу 0.74с, которая уже стабильная и без жёстких багов).
Кстати, что сделали с задачей со статуей? Убиваете сильнейшего игрока или просто ослабляете за проигрыш?
Патиссончик #85 - 2 дня назад 0
konvan5:
Проект хороший, развивайтесь, убирайте баги и оптимизируйте, чтобы утечек не было и тд, ибо карта затяжная и краши не приветствуются ;)
Утечек не так много в процессе появляется. На таймерах они вроде как все и убраны. Проблема крашей была в том, что нельзя через грейды апать способности-ауры мертвым юнитам. Что происходит по умолчанию. Сейчас крашей нет.
Благодарю за добрый отзыв, хилимся-развиваемся.
Сегодня-завтра выложу 0.74с, которая уже стабильная и без жёстких багов).
konvan5 #86 - 2 дня назад 0
Проект хороший, развивайтесь, убирайте баги и оптимизируйте, чтобы утечек не было и тд, ибо карта затяжная и краши не приветствуются ;)
4

Проблемы с сохраненной картой

» WarCraft 3
Когда я сохраняю карту в другой файл, то основной файл(тот что уже сохранен и с который открыт в данный момент) повреждается. Когда я открываю карту основную, а не пересохраненную в варкрафте, то вылетает Fatal Error.
Мой JNGP Прилагается.
Помогите!
Steal nerves #1 - 2 дня назад 0
сложно сказать что это
попробуй это xgm.guru/p/wc3/178775 это руководство как пользоваться JNGP
если не поможет, то обратись к Ханабичи
ssbbssc #2 - 2 дня назад (отредактировано ) 0
антивирус\кривой редактор\любая прога, которая работает с файловой системой в режиме реального времени
или же не хватает места на диске
Narkranoth #3 - 2 дня назад 0
Как вариант, можно просто перед сохранением копировать карту - это и будет бэкапом. В итоге можно будет сохранять в один файл и не беспокоиться, что что-то случится.
XGM Bot #4 - 2 дня назад 0
Похожие вопросы:

» ответ
ну вот в чём твоя ошибка: Ты изменил название текстуры, а значит ты изменил и пути, тебе нужно зайти в war3modelEditor и там уже открыв модель выбрать вкладку: Windows=>Texture Manager, где будет список текстур, ты удаляешь 1 старую текстуру, которая у тебя была и добавляешь новую, при этом модель с текстурой должны лежать в одной папке, которая не содержит кириллицы (например путь должен быть d:\Users\User\Desktop\moroz - без русских букв ).
Переименовать новую текстуру на старую по идее не имеет смысла, потому что опять же ты сохранил её без текстуры, а => испоганил, накосячил, сломал (называй как хочешь).
» ответ
Меню RtC - убери галочку с enable.
» ответ
Через что уничтожаешь? Если через килл, то конечно умирает и нейтральный.
  1. Если наносить от какого-то даммика урон в мильены, то не умрет нейтральный.
  2. Можно от даммика развеяние нежити за 0.01 сек.
  3. Заменять можно, внося значение золота в переменную и потом, создавая новый рудник, ставить количество золота в него из переменной, благо это даже в ГУИ реализовано.
» ответ
Кириллицы в пути к JNGP или к карте нету?
» ответ
Steal nerves:
Короче порылся в ХГМ, потыкал, все испробывал, и сам нашел ответ, вот несколько моментов для того, чтобы заработал:
  1. Требуется установленный Warcraft 3: The Frozen Throne последней версии 1.26a. Скачайте нормальный варкрафт 3, а то попадаются урезанные или нерабочие версии. Лучше оригинальную версии приобрести, и обновить. Хотя пиратки тоже неплохи. Вот использую сборкой от R.G. Mechanics
  2. Путь к программе НЕ ДОЛЖЕН содержать русских символов
  3. Совершайте установку в отдельную от Warcraft 3 папку
  4. Рекомендуется приостановить антивирусные программы до установки, потом выполнить установку, затем добавить папку c JNGP в исключения, и потом только снова включить антивирусы. Эта программа вторгается в процесс worldedit.exe, поэтому может считаться вредоносной
  5. Не трогайте файл worldedit121.exe, он должен быть и в папке игры и в папке JNGP
  6. Сначала "Сохранить карту", только потом "Проверка карты", а ещё иногда бывает лучше сохранять пару раз
Выше, это стандартное описание для работы. Если не сработает, пробуем вот, что:
  1. Выставляем оптимальные настройки к JNGP, указанные на скрине (см. ссылку) xgm.guru/forum/showthread.php?t=13118 Обычно, эти настройки должны быть изначально после установки JNGP (ну мало ли пригодятся)
Теперь суть моей проблемы (не знаю, что из этих ниже пунктов сработало, но сработало):
  1. Я установил игру и JNGP на рабочий стол. Потому что на диске С, в папках типа Program Files.(x86) и др. блокирует браундмер. Обычно требует назойливо для работы права администратора, очень раздражает. Но сомневаюсь, что заработало из-за этого. Раньше не мешало нисколько.
  2. Запустить JNGP в режим совместимости. Заходим в свойство exe-шника. Поставил семерку.
  3. Если UMS изначально включен, то выключить его и включить (Enable UMS). Потом перезапустить WE. Скорее всего из-за него.
Из-за UMS также бывают ошибки: могут выскачить 2-3 окна : что отсутствует TriggerClearActions и layerAll. Когда пропускаешь эти окна, просто нажав на ок, затем появляется ошибка с памятью и уже потом закрывается редактор. Происходят такие ошибки, если пытаешься открыть обычным редактором карту, отредактированную в JNGP. Такая ошибка происходит, если некорректно настроен UMS (выкл. потом вкл.). Такая ошибка происходит, если открыть обычным редактором взломанную карту, которая наверняка сделана в UMS и использует необычный jass и прочие преимущества JNGP. Ошибки с UMS могут иногда происходить, поэтому скорее всего пункт 10 поможет
  1. Если UMS перестает работать (некорректно работает), а 10 пункт не помогает. То есть плагин UMS по каким-то причинам не запускается, а JNGP стоит галочка напротив UMS (говорит, что включен). Короче узнать, что он запущен, можно при открытий редактора вместо стандартного окна выскакивает окно UMS. Если не выскакивает, надо попробовать завести снова работать. Плагин может по каким-то причинам сломаться (один раз баловался в настройках JNGP). Пробуйте потом удалить JNGP и потом заново переустановить. Или выкл. и вкл, UMS затем выйти из jngp, удалить и заново переустановить
пп

3

Наработка PVP Арены

» WarCraft 3
Как сделать PVP арену,(как во многих RPG) что бы в определённой области все были друг для друга врагами, а после смерти\выхода всё возвращалось в норму?
Steal nerves #1 - 2 дня назад (отредактировано ) 0
» раскрыть
игрок А и игрок Б являются противниками. На арене дерутся. Есть два игрока-бота (пустующие слоты игроков), это игроки В и Д. В и Д между собой являются нейтральными союзниками.
можно настроить союзы. игрок А может быть не только союзником В, но и управлять юнитами игрока В. Также как и Б может делать с игроком Д.
Те юниты, которые находятся за пределами области, передать другому игроку (это временно). Но игроки могут управлять ими
Есть арена, где все враги. А есть торговая площадка, где можно продавать всякие предметы. На ней нельзя драться. Казалось норм. Зашел, настроил союзы и норм. Это для одного героя легко сделать. А когда у тебя большие войска, то ты не можешь сделать так. Придется разделить контроль за войсками: героя и носильщиков можно отдать нейтралу. А остальных на арене оставить.
самый бредовый - настроить цели атаки. У тех, у кого стоит механика, не смогут тогда атаковать органику. триггерами можно выдавать классификацию
это было в общих чертах. реализовать это можно по-разному. настраивайте союзы через триггеры (есть союзы и аспекты союза - см. там в разделе игрок)
ssbbssc #2 - 2 дня назад 1
подучить триггеры. в гуях все есть
Huntress #3 - 2 дня назад 1
Если игра для одного человека, можно создать действие при котором при попадении ГГ в область владелец противника менялся без смены цвета на, например, нейтрально- враждебного, а после смерти или выхода снова становился воином подконтрольным замененному игроку.
17

Как отловить начало тренировки юнита?

» WarCraft 3
В карте нестандартная система ресурсов. Если ресурсов недостаточно, то нужно отменить тренировку юнита. Но вот проблема: в условиях есть "Unit type of TrainED Unit", которое ловит уже натренированного юнита.
А нужно ловить именно начало тренировки. Как это сделать?
ssbbssc #17 - 2 дня назад 0
некоторые гуи команды криво реализованы =\ увы
2

Баг с "пассивками вивера" и "огненными стрелами"

» WarCraft 3
У меня есть предмет, основанный на пассивке вивера
Для тех, кто не знает - при успешной авто-атаке из героя вылетает еще один снаряд, который поражает цель атаки
А еще у меня есть герой, с абилкой дестроера нежити, которая наносит доп. урон в области
И вот какая штука - если поднять предмет на дабл-атаку, при попадании по цели обычной атакой из героя начинают вылетать орбы дестра, причем они работают как надо, т.е. с уроном по области, но БЕЗ затрат маны и кулдауна
В чем мой вопрос - это фиксится?
ssbbssc #1 - 2 дня назад 0
т.е. легче написать свой урон по области
мде
спасибо за идею, скорее всего так и сделаю

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

вру - детект проходит
все же варкрафт иногда удивляет

создал кастомный разброс урона при всечке в итоге
quq_CCCP #2 - 2 дня назад 4
Это лечится не юзаньем сферы замедления для подобных пассивок.
Лич долго кочевряжился с этой бедой, сфера замдления перебивает тучу орбов + не стакается с критами\башами.
Делайте триггерный орб (хотя-бы только для тех у кого есть активные автокаст орбы)
biridius #1 - 2 дня назад 2
глобальный массив не нужен. сохраняй группу в хэш-таблицу на хэндл героя, потом загружай ее когда надо. у каждого героя будет своя группа
вот пример, молот бурь съедает юнита а удар грома ставит всех юнитов обратно
прикреплены файлы
Darknessay #2 - 2 дня назад 0
Сделай периодик 0.01(который будет включать в себя ВСЕ тексты, чтобы не нагружать множеством периодиков для каждого), который будет рисовать текст, отображающий integer = количество юнитов в group, над головой героя. При поедании юнита, делай его неуязвимым, hide, двигай куда то в недосегаемое место на карте(не знаю, на всякий случай, я бы сделал так).
При использовании отрыгивания, настраиваешь все параметры исходя из integer(урон, например) и затем unhide, uninvul всех юнитов в группе + делаешь с ними всю грязь.
И мне кажется идею ты содрал не с этого Slark's bastard'a, а с васаби жирного, из league of legends, который хавает крипов и плюет ими, нанося урон и земдляя. Ну, в общем, так и сделаешь.
А если хочешь, чтобы он мог схавать таким образом героя, а ты имел вижен на нем, есть два варианта:
прозрачность = 100%; пауза/стан;
SetUnitX(udg_Hero,GetUnitX(udg_Eater))
SetUnitY(udg_Hero,GetUnitY(udg_Eater))
;
Магический огонь + привязать камеру + классический hide сожранного героя.
А вообще, рекомендовал бы всегда использовать станы вместо пауз и прозрачность 100% вместо hide, потому что это решает нерешаемые проблемы паузы и hide, при этом оставляя лишь небольшие минусы, которые можно исправить небольшими костылями.
ClotPh #3 - 2 дня назад 0
Так вот как я через хэш обойдусь без группы-глобальной переменной? Можно пример?
Можно и с глобальной, конечно, но см. выше.
quq_CCCP #4 - 2 дня назад 0
Что мешает сделать кастом поедание?
Хештаблица в помощь, там довольно таки изи сделать - паузим, хайдим, делаем неуязвимым и отключаем пути, достаточно 1 группы юнитов на 1 героя, в группу добавляем сожанных а потом делаем с ними что нужно.
2

Как использовать большее типов ландшафта?

» WarCraft 3
Гражджане, как использоваться большее количество типов ландшафта?
Я знаю, что можно заменять стандартный набор другим стандартным набором, но меня интересует именно большее количество ландшафта, а не замена.
По слухам, в улучшенном редактор Jass New Gen Pack имеется таковая возможность.
Подскажите пожалуйста, где именно эта функция?
biridius #1 - 2 дня назад (отредактировано ) 2
карта должна быть сохранена перед этой командой, вроде
и надо будет перезапустить редактор после использования чтобы изменения вступили в силу
прикреплены файлы
XGM Bot #2 - 2 дня назад 0
Похожие вопросы:

» ответ
Zkay,
Для всех террейнов, для которых не указан порядок в самой карте (в типах ландшафта) - порядок наложения будет зависить от порядка прогрузки(отрисовки) их на карту, сперва все из редактора(те что левее ложатся вниз, те что правее наверх), затем уже те которые ты пытаешься триггерно добавить. Одновременно в одной игре можно отобразить не больше 16 типов террейнов.
Можешь просто выпустить несколько версий карты (зимнее оформление, осеннее, летнее, какое угодно другое). Для доты во всяком случае так делали.

14

Не работает модель? - Вам сюда!

» WarCraft 3
Данная тема предназначена для того, чтобы оставлять здесь просьбы об исправлении багов/недочётов/ошибок в модели или её доработке, а также исправлении неработоспособности модели в игре.

Читать далее...
Darknessay #14 - 2 дня назад 0
Вылетает редактор при попытке поставить юниту с развернутым главным окном(т.е. при попытке отобразить модель).
Я пробовал сохранять mdx>mdl>mdx.
(Да, я их менял, это какая то лажа с MdlVis'ом)
прикреплены файлы
15

Как сделать процентный урон?

» WarCraft 3
Как сделать, чтобы автоатаки юнита наносили урон зависящий от максимального здоровья врага?
ssbbssc #15 - 2 дня назад (отредактировано ) 0
человек не в курсе про действие в гуи с названием арифметика
удалите вопрос лучше
2

Муишность в vJass

» WarCraft 3
Привет, вопрос слегка некорректным может показаться, но как можно добавить муишность в vJass используя структуры? Например по аналогии с C# там мы создавали структуры как локальные переменные и обращались к переменным или функция внутри структур через эту локальную. Потом могли где то ее сохранить и в любой момент могли обращаться. Можно ли в Warcraft 3 добиться такого же? Мне бы хотелось знать, можно ли сделать допустим сделать одну большую структуру со всеми функциями или методами для способностей персонажа и каждый раз когда персонаж появляется на карте по его ID присваивается новая структура и через этого юнита с ней работать так же, как в C# или подобных языках. Если такое возможно, то можете кинуть пример со спеллпаками или сами написать небольшой пример?
Diaboliko #1 - 2 дня назад 0
В помощь тебе библиотеки(library) и базы данных.
Либы — для обращения по виду library_name.functionName(arguments)
Базы данных — для выделения юниту своих переменных.
С БД может быть момент не совсем понятным, поэтому скидываю пример:
» Эта порнография разработана для личного пользования
У меня в коде есть иллюзия использования вжасса. Либа просто для доп табуляции и невостребованых манипуляций на случай импорта. При создании юнита ему присваивается ряд переменных, а номер этих переменных, относящихся к этому юниту, записывается в его(юнита) UnitUserData
library UnitDataBase
    globals
        constant integer       UnitDBSize = 512
        constant integer       UnitDBHeroesStart = 0
        constant integer       UnitDBHeroesUnder = 49
        constant integer       UnitDBUnitsStart = 50//Includes illusions of heroes. Or Should include them at least :P
        constant integer       UnitDBUnitsUnder = 319
        constant integer       UnitDBSummonsStart = 320
        constant integer       UnitDBSummonsUnder = 511
                 integer       UnitDBNextHero = 0
                 integer       UnitDBNextUnit = 50
                 integer       UnitDBNextSummon = 320
                 unit    array UnitDBUnit[UnitDBSize]
                 real    array UnitDBCurrentAnimationSpeed[UnitDBSize]
                 unit    array UnitDBForceAttackTarget[UnitDBSize]
                 integer array UnitDBAffectedByStuns[UnitDBSize]
                 real    array UnitDBMagicResistance[UnitDBSize]
                 real    array UnitDBPhysResistance[UnitDBSize]
                 real    array UnitDBCurrentArmor[UnitDBSize]//This armor does not include agility bonuses. Not used yet :>
                 real    array UnitDBWhiteMovementSpeed[UnitDBSize]
                 real    array UnitDBCurrentCustomSlow[UnitDBSize]
                 real    array UnitDBMagicDamageAmplifier[UnitDBSize]
                 real    array UnitDBPhysDamageAmplifier[UnitDBSize]
                 real    array UnitDBAdditionalHealth[UnitDBSize]//AKA Shield. Healed whenever unit takes damage.
        constant real          GravityAcceleration = 14.//Azeroth, bitch!
                 real    array UnitDBFlyingHeight[UnitDBSize]//Not used yet
                 real    array UnitDBFallingSpeed[UnitDBSize]
                 
                 integer array UnitDBItemUseVariable[UnitDBUnitsStart]//just don't ask
                 item    array UnitDBLastUsedItem[UnitDBUnitsStart]
                 real    array UnitDBCastPointX[UnitDBUnitsStart]
                 real    array UnitDBCastPointY[UnitDBUnitsStart]
                 
                 integer       UnitDBPreviousHero//Used for exitwhen event. Its next minus two.
                 unit    array UnitDBHeroHPBar[UnitDBUnitsStart]
                 unit    array UnitDBHeroMPBar[UnitDBUnitsStart]
                 unit    array UnitDBHeroSPBar[UnitDBUnitsStart]
    endglobals
    
    //Больно жирные для инлайна
    function UnitDBFindNextFreeVariable takes integer i returns integer
        local unit u
            loop
                set  u = UnitDBUnit[i]
                exitwhen u == null or GetUnitTypeId( u ) < 1
                set  i = i + 1
            endloop
        set  u = null
        return i
    endfunction
    
    function UnitDBAddHero takes unit u, real mdef, real armor returns nothing
        local integer i = UnitDBNextHero
        local real x = GetUnitX(u)
        local real y = GetUnitY(u)
            call UnitMakeAbilityPermanent( u, true, 'A00B' )
            set  UnitDBUnit[i] = u
            call SetUnitUserData( u, i )
            call GroupAddUnit( UnitsInPlayableArea, u )
            set  UnitDBItemUseVariable[i] = 0
            set  UnitDBCurrentAnimationSpeed[i] = 0.
            set  UnitDBAffectedByStuns[i] = 0
            set  UnitDBMagicResistance[i] = mdef
            set  UnitDBCurrentArmor[i] = armor
            set  UnitDBWhiteMovementSpeed[i] = GetUnitDefaultMoveSpeed( u )
            set  UnitDBCurrentCustomSlow[i] = 1.
            set  UnitDBMagicDamageAmplifier[i] = 1.
            set  UnitDBPhysDamageAmplifier[i] = 1.
            set  UnitDBFlyingHeight[i] = 0.//Doesn't include point height.
            set  UnitDBAdditionalHealth[i] = 0.
            /*if ( i == UnitDBHeroesUnder ) then
               call BJDebugMsg("|c00ff6060Hero limit reached! More heroes can be created, but things can go wild.")
            endif*/
            set  UnitDBNextHero = i + 1
            set  UnitDBPreviousHero = i - 1
            set  UnitDBHeroHPBar[i] = CreateUnit(BossPlayer1, 'hmil', x, y, 0. )
            call SetUnitAnimationByIndex( UnitDBHeroHPBar[i], 100 )
            set  UnitDBHeroMPBar[i] = CreateUnit( BossPlayer1, 'hrtt', x, y, 0. )
            call SetUnitAnimationByIndex( UnitDBHeroMPBar[i], 100 )
            set  UnitDBHeroSPBar[i] = CreateUnit( BossPlayer1, 'hwt2', x, y, 0. )
            call SetUnitAnimationByIndex( UnitDBHeroSPBar[i], 0 )
        set  u = null
        return
    endfunction

    function UnitDBAddUnit takes unit createdUnit, real mdef, real armor returns nothing
        local integer i = UnitDBNextUnit
        local unit u = UnitDBUnit[i]
            if ( u == null ) then
                set  i = UnitDBFindNextFreeVariable( UnitDBSummonsStart )
            endif
            set  UnitDBUnit[i] = createdUnit
            call SetUnitUserData( createdUnit, i )
            call GroupAddUnit( UnitsInPlayableArea, createdUnit )
            set  UnitDBCurrentAnimationSpeed[i] = 0.
            set  UnitDBAffectedByStuns[i] = 0
            set  UnitDBMagicResistance[i] = mdef
            set  UnitDBCurrentArmor[i] = armor
            set  UnitDBWhiteMovementSpeed[i] = GetUnitDefaultMoveSpeed( createdUnit )
            set  UnitDBCurrentCustomSlow[i] = 1.
            set  UnitDBMagicDamageAmplifier[i] = 1.
            set  UnitDBPhysDamageAmplifier[i] = 1.
            set  UnitDBFlyingHeight[i] = 0.
            set  UnitDBAdditionalHealth[i] = 0.
            if ( i < UnitDBSummonsUnder) then
                set  UnitDBNextSummon = i + 1
            else
                set  UnitDBNextSummon = UnitDBSummonsStart
            endif
        set  u = null
        set  createdUnit = null
        return
    endfunction
    
    function UnitDBAddSummon takes unit summonedUnit, real mdef, real armor returns nothing
        local integer i = UnitDBNextSummon
        local unit u = UnitDBUnit[i]
            if ( u == null ) then
                set  i = UnitDBFindNextFreeVariable( UnitDBSummonsStart )
            endif
            set  UnitDBUnit[i] = summonedUnit
            call SetUnitUserData( summonedUnit, i )
            call GroupAddUnit( UnitsInPlayableArea, summonedUnit )
            set  UnitDBCurrentAnimationSpeed[i] = 0.
            set  UnitDBAffectedByStuns[i] = 0
            set  UnitDBMagicResistance[i] = mdef
            set  UnitDBCurrentArmor[i] = armor
            set  UnitDBWhiteMovementSpeed[i] = GetUnitDefaultMoveSpeed( summonedUnit )
            set  UnitDBCurrentCustomSlow[i] = 1.
            set  UnitDBMagicDamageAmplifier[i] = 1.
            set  UnitDBPhysDamageAmplifier[i] = 1.
            set  UnitDBFlyingHeight[i] = 0.
            set  UnitDBAdditionalHealth[i] = 0.
            if ( i < UnitDBSummonsUnder) then
                set  UnitDBNextSummon = i + 1
            else
                set  UnitDBNextSummon = UnitDBSummonsStart
            endif
        set  u = null
        set  summonedUnit = null
        return
    endfunction
      
    //Система маг резиста была изменена на дефолтную, была введена аналогичная ей система физ урона.
    //Необходимо протестить эти системы на низких значениях. (могучий float и его точность). В нынешних условиях низкие значения не достигаются. На тест положен болт. Есть нерешенные проблемы с точностью(при восстановлении, опять же, резисты съезжают). Необходимо учитывать при вычислениях лишь первые три цифры после запятой, например.
    #define UnitDBIncreaseUnitMagicResistance( amount, userData ) = {
            set  UnitDBMagicResistance[userData] = UnitDBMagicResistance[userData] * amount
    }
    #define UnitDBDecreaseUnitMagicResistance( amount, userData ) = {
            set  UnitDBMagicResistance[userData] = UnitDBMagicResistance[userData] / amount
            if ( UnitDBMagicResistance[userData] > 0.99997 and UnitDBMagicResistance[userData] < 1.00003 ) then
                set  UnitDBMagicResistance[userData] = 1. 
            endif
    }
    #define UnitDBIncreaseUnitPhysResistance( amount, userData ) = {
            set  UnitDBPhysResistance[userData] = UnitDBPhysResistance[userData] * amount
    }
    #define UnitDBDecreaseUnitPhysResistance( amount, userData ) = {
            set  UnitDBPhysResistance[userData] = UnitDBPhysResistance[userData] / amount
            if ( UnitDBPhysResistance[userData] > 0.99997 and UnitDBPhysResistance[userData] < 1.00003 ) then
                set  UnitDBPhysResistance[userData] = 1. 
            endif
    }
    #define UnitDBReplaceUnitMagicResistance( before, after, userData ) = {
            set  UnitDBMagicResistance[userData] = UnitDBMagicResistance[userData] / before * after
    }
    #define UnitDBReplaceUnitPhysResistance( before, after, userData ) = {
            set  UnitDBPhysResistance[userData] = UnitDBPhysResistance[userData] / before * after
    }
    #define UnitDBIncreaseUnitMagicDamageAmplifier( amount, userData ) = {
            set  UnitDBMagicDamageAmplifier[userData] = UnitDBMagicDamageAmplifier[userData] + amount
    }
    #define UnitDBDecreaseUnitMagicDamageAmplifier( amount, userData ) = {
            set  UnitDBMagicDamageAmplifier[userData] = UnitDBMagicDamageAmplifier[userData] - amount
            if ( UnitDBMagicDamageAmplifier[userData] > 0.99997 and UnitDBMagicDamageAmplifier[userData] < 1.00003 ) then
                set  UnitDBMagicDamageAmplifier[userData] = 1. 
            endif
    }
    #define UnitDBIncreaseUnitPhysDamageAmplifier( amount, userData ) = {
            set  UnitDBPhysDamageAmplifier[userData] = UnitDBPhysDamageAmplifier[userData] + amount
    }
    #define UnitDBDecreaseUnitPhysDamageAmplifier( amount, userData ) = {
            set  UnitDBPhysDamageAmplifier[userData] = UnitDBPhysDamageAmplifier[userData] - amount
            if ( UnitDBPhysDamageAmplifier[userData] > 0.99997 and UnitDBPhysDamageAmplifier[userData] < 1.00003 ) then
                set  UnitDBPhysDamageAmplifier[userData] = 1. 
            endif
    }
    #define UnitDBIncreaseUnitShield( amount, userData ) = {
            set  UnitDBAdditionalHealth[userData] = UnitDBAdditionalHealth[userData] + amount
            //redraw
    }
    #define UnitDBDecreaseUnitShield( amount, userData ) = {
            set  UnitDBAdditionalHealth[userData] = UnitDBAdditionalHealth[userData] - amount
            if ( UnitDBAdditionalHealth[userData] < 0. ) then//Perhaps should be typed manually on every use. No need of that atm.
                set  UnitDBAdditionalHealth[userData] = 0.
            endif
            //redraw
    }
    function UnitDBAddUnitsCreatedOnInit takes nothing returns nothing
        local unit u = GetEnumUnit()
            if ( not IsUnitType( u, UNIT_TYPE_HERO ) ) then
                call UnitDBAddUnit( u, 1., 0. )//!!! whatever
            endif
        set  u = null
        return
    endfunction
    
endlibrary
quq_CCCP #2 - 2 дня назад 0
Поиск в помощь - xgm.guru/search.php?query=vjass
На языке JASS - структура не обьект, а группа массивов с одним и тем же номером ячейки, вот этот самый номер нужно сохранять чтобы потом обратятся к данным, хотя возможны и более сложные манипуляции.
Для сохранения данных так же используется хештаблица, и кастом системы аттачей (юзаются для сопоставлению некого числа с неким игровым обьектом.)
7

Ограниченые ресурсы

» WarCraft 3
Как ограничить ресурсы которые может получить игрок?
ClotPh #1 - 3 дня назад 1
Обидеть и в мыслях не было, просто шутка, так и предполагалось, что опечатка.
А что делается мной, тут и так знают. =)
Steal nerves #2 - 3 дня назад (отредактировано ) 2
» другой способ
если триггерно даешь золота, то попробуй больше не давать и все.
попробуй проверяй так, если золота стало равно 1000. то сделай так чтобы юниты больше не добывали золото в шахтах. Предметы не мог продать в магазины. Ну и прочее. И отслеживай момент, когда золота становится меньше 1000, тогда возвращай все на место.
А почему "becomes больше 1000", "устанавливаем 1000", а на скрине внизу 750? Это тест на идиота, что ли?
ну мне по х.. может если золота становится больше 1000, то устанавливаем 1000. Потому что на скрине опечатка. На этом сайте нельзя удалять фаил, и исправлять текст. мб сам додумается. пришли исправленный, а может даже что получше. приветствуется, если дашь лучший вариант. маперы должны супер и интересные карты делать
ClotPh #3 - 3 дня назад -7
А почему "becomes больше 1000", "устанавливаем 1000", а на скрине внизу 750? Это тест на идиота, что ли?
Steal nerves #4 - 3 дня назад (отредактировано ) 0
вот такой триггер. Если золота больше 1000 золота у игрока, то устанавливаем 1000 ему.
» второй способ
сможешь ли ты его сделать
Или используем глобалку с массивами. Каждый номер массива (от 1 до 12) будет номером игроков. В них будет записан максимум, через который нельзя заходить. Периодически таймером и через цикл проверяем сколько у каждого деньги (если деньги у игрока больше максимума, то установить максимум. Этот максимум записан у каждого игрока свой, и у каждого игрока записан в массиве переменной.), Это динамичный вариант, тут у каждого игрока будет зависеть от массива. Этот массив можно перезаписать в течении игры. Тут был 350 золота, улучшил игрок здание, то массив переписал на 400 золота. Это лучший вариант.
ps это лучший способ по сравнению с первым. так как первый способ отлавливает пермаментное (постоянное) значение. Его нельзя изменить. потому что это событие
прикреплены файлы
FrigatPlay #5 - 3 дня назад 0
Steal nerves, Ограничить количество возможных дерева и золота у игрока чтоб после определенного количества ресурса он больше не набиралса
Steal nerves #6 - 3 дня назад 0
Не понял вопроса. Опиши подробнее, что хочешь сделать и как ограничить.
XGM Bot #7 - 3 дня назад 0
Похожие вопросы:

» ответ
DemonoiD, Нет, да и лимит не всегда был 8 мб, недавно с четырёх подняли (относительно времени жизни варкравта).
Снова есть ретурн баг, подгружаешь микс архив всем кто запустил карту без их ведома и подключаешь, пусть улыбаются.
Правда могут быть проблемы с некоторыми античитами.
» ответ
Steal nerves:
была где-то тема в точь-точь у нас на сайте xgm.guru/forum/showthread.php?t=60325
вот скинул кучу все что связано с видимостью