XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Быстрый поиск на странице - Ctrl + F

Закрытая тема
 
tysch_tysch
Работаем
offline
Опыт: отключен
FAQ, базовые вопросы по WorldEditor

FAQ - ответы на часто задаваемые вопросы по WorldEditor'у.

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

- 1. Первое знакомство с WE (самые первые вопросы, возникающие при открытие редактора)
- 2. Триггеры и Редактор объектов (скрещивание нескольких предметов в один; респаун крипов; мультиборд и т.д.)
- * JASS (ссылки на всю теоретическую информацию по языку JASS)
- * Способности Warcraft III: проводник (особенности создания заклинаний средствами РО, понадобится знание JASS)
- * Ландшафт (теоретический минимум по созданию рельефа к картам, а также много всего полезного для профессионального дизайнера)
- 3. Разное (множество полезной информации по работе с MPQ, защите/взломе карт и т.д.)
- 4. Формулы WE (расчет получаемого героем опыта, расчет брони, урон юнита)
- 5. Авторы-составители, а также благодарности.

Также тут принимаются идеи по развитию FAQ'а и добавлению новых вопросов. Итак...

1. Первое знакомство с WE.



1.1 После установки патча WorldEditor просит вставить CD - как от этого избавиться?
Или найти NoCD, или скачать Daemon Tools. Это программа эмулятор является универсальным NoCD для всех версий Warcraft'a и WorldEdit'a. Установите саму программу эмулятор. Далее правый клик на появившуюся иконку в правом нижнем углу, пункт меню Virtual CD\DvD-Rom => Set Number Of Devices => 1 Drive, далее пункт меню Virtual CD\DvD-Rom => Device 0 => Mount Image.
В открывшемся диалоге ищем файл warcraft.mds (есть в архиве с утилитой).

1.2 Как сделать героя, который будет прокачиваться дальше 10 уровня?
Необходимо зайти в Дополнительно=> Игровые константы=> Максимальный уровень героя и поставить нужный уровень. Теперь при прокачке герой будет качаться до уровня, указанного вами.

1.3 Как сделать чтобы герой не получал опыт находясь вдали от битвы?
Убрать галочку в игровых константах из параметра Опыт героя – Общее распределение (Global Experience) и поставить галочку напротив "Использовать нестандартные игровые константы".

1.4 Как запретить игрокам менять исходные параметры в списке при создании игры?
Заходим в Сценарий=> Свойства игрока\клана и ставим галочку напротив "Фиксировать параметры игроков".

1.5 Как мне сделать, чтобы игроки начинали только на своих стартовых позициях и с заданной расой?
Зайдите в "Свойства игрока" (Главное меню=> Сценарий=> Свойства игрока) поставьте галочку "Фикс исх. позиция". Затем перейдите на закладку "Кланы" и поставьте две галочки :"Нестандартные кланы" и "Фикс. параметры клана".

1.6 Камень Включён\Выключен - Что это?
Функция включает проигрывание голосов и анимации у войск.
Они с вами говорят и умирают со звуком, когда вы их удаляете на карте в WE.

1.7 Как увеличить лимит еды?
"Игровые Константы" (Главное Меню=> Дополнительно=> Игровые Константы), поставить галочку напротив "Использовать нестандартные игровые константы" и изменить значение поля "Ограничение пищи" на нужное значение.

1.8 Как сделать, чтобы герой прокачивался на крипах больше пятого уровня?
Для этого зайдите в игровые константы и найдите поле Hero XP Gained – Creep Reduction Table (или HeroFactorXP в альтернативном виде). Номер строки соответствует уровню героя (т.е. первая строка - первый уровень, вторая - второй и тд.). Число это процент опыта, получаемого на каждом уровне. Если чисел меньше чем уровней, то игра будет использовать последнее указанное в списке значение для всех остальных уровней.

1.9 Как сделать из не-героя героя?
Стандартными средствами это невозможно, да и по сути в этом нет необходимости - достаточно создать героя на основе стандартного и уже потом добавить ему необходимые свойства.

На самом деле это вполне возможно, если вы владеете навыками редактирования файлов в HEX-редакторе, для этого нужно всего лишь изменить первую букву идентификатора юнита на заглавную, например заменить идентификатор 'hfoo' на 'Hfoo' - тогда обычный футмен станет футменом-героем, но для большинства эти манипуляции недоступны, поэтому ответ на вопрос является простым и, вообще говоря, неправильным. Подробнее об этом можно прочитать в этой статье.

2. Триггеры и Редактор объектов.




2.0 Меня интересует, что такое гуи, где его можно достать?
GUI (Graphic User Interface) - это триггеры с графическим интерфейсом т.е обычные триггеры в редакторе триггеров.

2.1 Как сделать так, чтобы в начале игры на стартовой локации не появлялся городской центр и рабочие?
Откройте окно Trigger Editor и и триггере Melee Initialization удалите действие Melee Game - Create starting units (for all players)
Если Вы делаете не Melee карту, то есть не на "расстройку", тогда рекомендуется удалить весь триггер.

2.2 Как сделать скрещивание предметов? Как сделать складывание зарядов в предметах?
Самый простой вариант: создаем в редакторе объекта все части предмета и скрещенный предмет и создаем триггер:

Код:
Скрещивание:

Событие:
 Боевая единица - A unit Acquires an item
Условие:
 ((Hero manipulating item) has (Часть 1)) Equal to True* 
 ((Hero manipulating item) has (Часть 2)) Equal to True* 
Действие:
 Предмет - Remove (Item carried by (Hero manipulating item) of type Часть 1)
 Предмет - Remove (Item carried by (Hero manipulating item) of type Часть 2)
 Hero - Create Скрещенный предмет and give it to (Hero manipulating item)

*Boolean Compastion

Складывание зарядов:

Событие:
 Боевая единица - A unit Acquires an item
Условие:
 Or - any (Condition) are true
 Условия:
  (Item type of(Item begin manipulated)) равно <тип предмета1>*
  (Item type of(Item begin manipulated)) равно <тип предмета2>*
  (Item type of(Item begin manipulated)) равно <тип предмета3>*
Действия:
 Set it**=(Item type of(item begin manipulated))
 For each (Integer A) from 1 to 6 do (Actions)
 Цикл - Действия
  If (All Conditions are True) then do (Then Actions) else do (Else Actions)
  Если - Условия
   (Item type of(Item carried by (Triggering unit) in slot (Integer A))) равно it
   (Item carried by (Triggering unit) in slot (Integer A)) не равно (Item begin manipulated)
  То - действия
   Предмет - Set charges remaining in (Item carried by (Triggering unit) in slot (Integer A)) to ((Charges remaining in (Item carried by (Triggering unit) in slot (Integer A)) + (Charges remaining in (Item begin manipulated)))
   Предмет - Remove (Item begin manipulated)
  Иначе - действия

*Тип предмета, данный триггер универсален, и может складывать заряды всех типов предметов, указанных в условии
**Переменная типа "Тип предмета"


Скрещивание однотипных предметов новички делают по такому принципу:



2.3 Как сделать так, чтобы при взятии определенного предмета, например меча, он появлялся у юнита в руке?
Необходимо взять способность (Ability) Сфера Молний и поменять ей модель на нужную, при этом указав в параметре «Графика: особый объект воздействия» нужную точку приложения эффекта.


Цитата:
overhead - над головой, не прикрепляется к анимации
head - голова, прикрепляется к анимации
chest - туловище
origin - обычно у ног юнита
hand - рука (может быть left и right)
foot - ноги
weapon (Для героев) - оружие
sprite, medium, large - для зданий


Однако помните, что далеко не у всех моделей есть все эти точки, они описываются именно в моделях.

2.4 Как сделать юнита неуязвимым или невыбираемым?
Дать юниту способность «Неуязвимый (нейтральный»), либо использовать действие: Боевая единица – Make Invulnerable/Vulnerable.
Для невозможности выбора юнита - дать ему способность "Москиты" (Locust), но не геройскую, а именно способность самих москитов. Также эта способность сделает юнита неуязвимым.

2.5 Почему лидерборды\мультиборды\диалоги не хотят создаваться при запуске карты?
Некоторые функции не могут выполняться сразу после запуска карты. Поставьте перед ними действие Wait 0.01 seconds или перенесите действие в триггер с событием Timer - Elapsed time is 0.01 seconds. Второе предпочтительнее.

2.6 Как создать в карте свои квесты?
Нужно использовать действие: Quest - Create Quest – используется для создания новых квестов, также могут понадобиться эти действия:

Код:
Задание - Mark Quest as Completed – Квест выполнен 
Задание - Mark Quest as Failed – Квест провален


И уже в зависимости от произошедших событий вызывать их.

2.7 Как триггерами проиграть звук?
Для того что бы триггером проиграть звук нужно сначала добавить его в список. Чтобы это сделать откройте Редактор Звука, в списке слева найдите нужный звук и нажав кнопку Use As Sound добавьте его в список.

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

Код:
Событие:
 Map initialization
Действие:
 Декорация - Play (ваша башня)'s (нужная анимация) animation


2.9 Можно ли сделать так, чтобы при покупке в магазине предмета или юнита, он исчезал совсем? Т.е. не перезаряжался и со временем снова появлялся, а совсем исчезал: купил - и всё, он твой, и ни у кого другого его не будет.
Да, есть целый набор триггеров для этих целей:
Код:
Нейтральное здание - remove item-type (*) убирает предмет
Нейтральное здание - add item-type (*) добавляет предмет
Нейтральное здание - remove unit-type (*) убирает юнита
Нейтральное здание - add unit-type (*) добавляет юнита

*в скобках там написано:
(from marketplace) из одного магазина
(from all marketplace) из всех магазинов.
Есть некоторые особенности устройства механизма продажи - чтобы свободно манипулировать юнитами/предметами - добавлять или убирать их по желанию во время игры, необходимо выполнить ряд действий-требований:
  • Магазину, в котором будут размещаться предметы, необходимо добавить способность "Продажа предметов" (она находится в редакторе способностей, в папке Особые\Войска\... ; её равкод - 'Asid' а иконка похожа на шахматную доску с зелеными клетками вместо белых)
  • Все предметы, которые вы будете убирать во время игры, должны быть добавлены в магазин триггерно, действием описанным выше. Таким образом, изначально в редакторе объектов имеет смысл оставлять только те предметы, которые будут все время неизменно присутствовать в магазине на протяжении всей игры.
Аналогично нужно поступить и с продаваемыми войсками, с той лишь разницей, что добавлять нужно способность "Продажа войск", она расположена рядом со способностью "Продажа предметов".


2.10 Как сделать декорацию с моделькой "мертвого" юнита?
Создаём разрушаемый объект (например на базе бочонка) и даём ему модель юнита, труп которого требуется поставить. Далее ставим эту декорацию на карту, выбираем и нажимаем Enter. В появившемся окне указываем количество жизней 0.

2.11 Что такое триггерная магия?
Это нестандартные способности, часть действий которых выполняется с помощью триггеров. Как правило, триггер запускается с событие A unit начинает применять способность (для активных спелов) и A unit приобретает способность (для пассивных магий). Далее уже в условиях стоит отловить то, с какой именно способность было произведено действие (условия из разделов Abilty comparison и Hero Skill comparison). Также в триггерной магии часто используется даммикаст.
Рекомендуется ознакомиться со следующими статьями:

Триггерные Заклинания
Создание простого stomp спела

Помните, что создание триггерной магии на JASS куда более качественное.

2.12 Что такое "даммикаст"?
Дамми каст это по сути говоря триггерное наложение заклинания. Юнит-кастер имеет способность москиты (что делает его не уязвимым и невыбираемым), не имеет атаки и файл модели заданный под шифром ".mdl" (что делает его невидимым). Далее данному юниту дается приказ кастовать способность. Вот простой пример даммикаста:

Код:
Боевая единица - Create 1 DummyCaster for Игрок 1 (красный) at (Position of (Triggering unit)) facing Стандартная ориентация зданий degrees
Боевая единица - Add Молот бурь* to (Last created unit)
Боевая единица - Add a x.xx** second Общий Expiration timer to (Last created unit)
Боевая еденица - Order (Last created unit) to Горный Король (Альянс) - Молот бурь TargetUnit

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


2.13 Что такое JASS?
Внутренний язык программирования, используемый в WarCraft. Возможности написания скриптов на JASS куда более полноценны, чем на редакторе триггеров. По сути триггеры являются надстройкой для JASS.

Статьи по данной теме:

Текстовые скрипты
Осваиваем JASS
Создание магии на JASS

2.14 У меня проблема: Я сделал триггер, в котором каждые 5 секунд генерируются случайное число, но каждый раз, когда я запускаю карту, последовательность этих чисел всегда одинаковая. Например: 78,62,29,6... Как сделать, чтобы каждый раз генерировались разные числа?
Файл=> Параметры=> Проверка карты=> Фиксировать случайный разброс - уберите галочку напротив данного параметра.

2.15 Если я копирую много триггеров из другой карты мне нужно создавать все переменные вручную?
Нет. Они создаются автоматически если поставить галочку в пункте меню Файл=> Параметры=> Общие=> напротив "Автом. Создавать неизв. переменные во время вставки триггеров". После этого просто копируем триггеры - переменные создадутся автоматически.

2.16 Как делать ролики?
Основной инструмент - это действие Спецэффекты - Cinematic mode. По сути лишает игрока возможности делать что либо. Дальше уже идет работа с камерой и т.д.

В этой статье достаточно подробно рассматривается этот вопрос.

2.17 Я видел, как в роликах у юнитов поворачивалась голова, как это сделать?
Нужно использовать действие: Анимация - Lock body-part facing, также может понадобиться действие: Анимация - Reset body-part facing чтобы отменить поворот головы.

2.18 Возможно ли в варе проиграть анимацию задом наперед
Да! Достаточно указать скорость анимации меньше 0. Вот статья.

2.19 Как отменить ролик по нажатию Esc?
Создать переменную типа Boolean и дать ей значение нет (False), в триггере самого ролика перед действием поставить Wait, и если наша переменная равна True - пропустить все действия. Потом вызвать триггер, который сделает все пост роликовые действия. Затем создать триггер:

Код:
Событие:
 Player skips cinematic
Действие:
 set (наша переменная) = Да (true)
 Триггер - Turn off (This Trigger)
 Триггер - Run (Построликовый триггер) (Ignoring Conditions)


2.20 Как в редакторе объектов ставить отрицательные значения?
Файл=> Параметры=> Общие=> поставить галочку напротив "Разрешить использование в редакторе объектов отрицательных значений".
Выбрать необходимое поле, зажать Shift и нажать Enter (или двойной клик мышкой). Теперь можно вводить отрицательное значение.
На основе этого возможно сделать ауру, отнимающую броню, отрицательную регенерацию здоровья и многое другое=)

2.21 Что такое custom script (custom code) карты?
Чтобы увидеть Custom script карты нужно щелкнуть по самой верхней строке в списке триггеров, на месте где находятся обычно отображается сам триггер, в большинстве случаев будет пустое поле - это и есть поле "своего кода", весь JASS код в нем выполняется до инициализации триггеров и после объявления глобальных переменных. Часто именно в него требуется вписать код многих наработок.

2.22 Как реализован выбор каких-то параметров игры, через выводящиеся на экран кнопки (как при нажатии F10)?
Чтобы это сделать нужно создать переменную типа Диалог, после чего заполнить диалог кнопками, действием: Диалог - Create Dialog Button и обязательно поместить наши кнопки в переменные - без этого они будут бесполезными.
После использовать действие: Диалог - Show/Hide. Также следует создать триггер с событием Dialog Button Click в условие которого с помощью Dialog Button Comparison отлавливать какая именно кнопка была нажата и запускать соответствующие действия.

2.23 Как из обычного здания сделать Таверну или Магазин, чтоб на карте обозначалось "домиком"?
Характеристики=> Нейтральное здание: пиктограмма показана на миникарте - поставить Да (True).

2.24 Я сделал герою способность, чтобы он проглатывал врагов, но когда я загружаю карту, и выбираю эту способность, то игра вылетает и появляется ошибка. Почему?
Необходимо так же давать способности "пассажир" и "еда". Рекомендую посмотреть к примеру как это сделано у кодоя.

2.25 Как изменить по ходу игры дистанцию атаки?
Два вариант: добавить юниту улучшение "Длинноствольные мушкеты" или поставить в Редакторе объектов юниту большую дистанцию атаки, и ограничить ее дистанцией получения приказа (дистанция атаки не может быть больше последней). Тригерно устанавливать дистанцию получения приказа: Боевая единица - Set Asquisition Range.

2.26 Как вывести текст не в левом нижнем углу экрана?
Это возможно только с использованием JASS.

Код:
function DisplayTimedTextToPlayer takes takes player toPlayer, real x, real y, real duration, string message returns nothing
где x и y координаты текста относительно экрана


2.27 Я не понимаю, где менять физический размер декораций?
Размера у них нет, есть только "текстура пути". pathing texture - определяет где по этой модели можно ходить, а где нет, где можно летать над ней, а где нет, где можно плавать, а где нет. Pathing Texture представляет собой изображение, в котором каждый пиксель отвечает за игровую клетку. Однако при использование нового формата карт место tga файла в архив помещается txt файл, содержащий информацию про проходимость - war3map.wpm
Тем не менее в редакторе сохранилось обозначение цветов для наглядности работы с путями. Текстуры могут закрашиваться следующими цветами:


Вот статья о редактирование карты путей: ACPL Method.

2.28 Мне нужно поместить в инвентарь к герою больше 6 предметов. Как?
Стандартными средствами это не возможно. Можно использовать наработки DimonT'a вот и вот, Sergey'я - вот, NETRAT'a - вот.

2.29 Как сделать чтобы юнит завис в воздухе? Как сделать эффект матрицы?
Либо действием Pause Unit (или Pause All Units), либо действием Set Unit Animation Speed to 0.0%
По этому вопросу есть пара отличных роликов, наглядно иллюстрирующих спецэффект во всей красе:

The Vision
Rox Battle

Более детально вопрос обсуждался в этой теме.

2.30 Как сделать респаун (respawn) крипов (creeps) т.е. как сделать чтобы крипы возрождались после смерти через некоторое время?
Построить систему триггеров, которые бы отлавливали убийство юнита, а потом через некоторое время проводить необходимые действия. Вот готовые наработки - JASS/Триггеры.

2.31 Как отключить коды в одиночной игре?
Это невозможно так как при вводе строки - чита тригер с событием, отлавливающем ввод строки просто не срабатывает. Однако существует возможность отловить следствие кода, к примеру проверяя не стала ли какая либо местность видна игроку, проверяя ресурсы игрока и т.д.

2.32 Что такое равкод (ID объекта) ?
Уникальный идентификатор типа объекта (не порядковый, а именно типа, например: тип-пехотинец представлен в виде 'hfoo', глобальные переменные, сгенерированные редактором тоже включают в себя равкод объекта, и его порядковый номер на карте, например gg_unit_hfoo_0013), представлен 4-мя символами. В триггерах и JASS может быть передан как целочисленное значение, обозначающее тип объекта, например local integer BuffId = 'B000'
Что бы узнать его нужно нажать Ctrl+D в редакторе объектов или в меню "Вид" поставить галочку напротив пункта "Показать названия переменных".

3. Разное.



3.1 Есть ли какое-нибудь ограничение на размер карты в многопользовательской игре?
Да - это 4.1-4.2 мб. в версиях ниже 1.24, а в остальных до 8 мб. В одиночной игре ограничение на размер карты отсутствует.

3.2 Карты из кампании - где их можно найти?
ROC: в war3.mpq \ Maps \ Campaign
TFT: в war3xlocal.mpq \ Maps \ FrozenThrone \ Campaign

3.3 Как ускорить процесс загрузки и работы World Editor'a?
Зайдите в меню Файл=> Параметры => Общие и уберите галочку рядом с надписью "При запуске создавать новую карту"
Цитата:
А также:
- не открывайте несколько карт одновременно и не запускайте какие либо сторонние программы;

- зайдите в меню окно и отключите не нужные вам панели, особое торможение вызывает список кистей. Повторите эти действия для окна редактора объектов и редактора триггеров;

- также можно зайти в "Диспетчер задач" и поставить процессу worldedit.exe приоритет повыше. Не рекомендуется ставить приоритет реального времени - это может привести к огромным лагам, так как на этом уровне работает ОС и Антивирусы;

- настроить меню вид, отключив ненужные параметры, зажать Ctrl и колесиком мышки приблизить дальнюю границу камеры;

- если у вас слабая видеокарта будет иметь смысл уменьшение качества анимации и текстур;

- Gem (Камень) может вызывать торможение, так как дополнительно нагружает память и процессор.


3.4 Как сделать, чтобы созданный мною герой, при вызове его игроком строился только один раз?
Необходимо: открыть игровые константы, найти строки "Технологии зависимости(эквиваленты) - герои" - где вы должны прописать своих героев, если они не стандартные, "Технологии зависимости(эквиваленты) - алтарь" - здесь вы указываете ваш алтарь если он не стандартный, далее в строках "центр поселения" указываете ваши ратуши, если они не стандартные.
Затем заходим в свойства героя в редакторе объектов и проставляем необходимые требования... В итоге - всё работает. Также предлагаю вам прочитать эту статью по игровым константам:

Gameplay Constants

Хотя, можно обойтись и без констант: запустить дефолтный (melee) триггер Режим сражения - Limit Heroes to 1 per Hero-type (for all players)

3.5 Как импортировать свою картинку вместо миникарты?
Сохраните картинку в формате 32 бита с расширением .tga, импортируйте изображение с помощью Import Manager'a, два раза кликните на файл в окне импорта и сотрите весь путь до названия файла. Далее само название поменяйте на war3mapPreview.tga
Для замены игровой миникарты необходимо заменить файл war3mapMap.blp, причем возможны 2 варианта.

- импортируется blp-текстура размером 2х2 пикселя, в таком случае игра не может ее открыть и полностью перекрывает обзор миникарты (если не задан war3mapPreview, то вместо миникарты на стандартном загрузочном экране будет знак вопроса на синем фоне, а в игре окно миникарты будет пусто и мертво, на нем даже ping-и не будут отображаться)

- импортируется blp-текстура размером 256х256 пикселей, в таком случае просто фоновая картинка ландшафта будет замещена нашей текстурой, оставаясь фоновой (поверх видны иконки и ping-и)

3.6 Как сделать загрузочный экран со своим импортированным изображением?
Ставим в Сценарий=> Экран загрузки карты загрузочный экран "Титры". далее импортировать текстуры...

Вот статьи:

Custom loading screens
Подробнее о загрузочном экране
Анимированый загрузочный экран
Смесь стандартного загрузочного экрана с нестандартным фоном

3.7 Как сделать что бы импортированная пиктограмка не становилась иногда "зеленым квадратом"?
Кроме обычной (BTN) иконки нужно закачивать и её "нерабочую" версию (DisBTN). А помогут вам разобраться в этом безобразии следующая статья:

Импорт файлов
Совсем неправильный импорт

3.8 Философский вопрос - что такое карта?
Карта - это MPQ архив, который содержит файлы определенного формата, отвечающие за рельеф, скрипты, нестандартные объекты и т.д.

Программы, работающие с MPQ архивами:

WinMPQ
MPQ Master

Статья, описывающая назначения файлов в данном архиве:

w3m and w3x filis format

3.9 Как сделать подключение к игре своего MPQ архива, как в некоторых модах?
Для этого вам, скорее всего, понадобятся знания какого-нибудь компилируемого языка программирования. Для того чтобы подключить свой архив, вам придется изменить имя стандартного архива war3patch.mpq, затем изменить имя у архива вашего мода на war3patch.mpq. Для отключения мода - вернуть назад имя своего архива и восстановить имя для стандартного архива war3patch.mpq. Таким образом, для полноценного мода вам понадобится внешняя программа, которая на время игры будет делать описанные изменения с именами файлов, а после завершения игры, возвращать все на место.

3.10 Как защитить/взломать карту и что это вообще за процессы?
Защита карты - это удаление/изменение файлов в архиве карты, которые не нужны для самой игры, но необходимы для редактора. Цель - что бы карту нельзя было открыть/изменить.
Самые простые методы - удаление файла war3map.wtg и файла (listfile) в MPQ архиве карты. Впрочем, на данный момент существует утилита, способная почти полностью восстановить файл (listfile), так же есть некоторая неподтвержденная информация о скрипте, способном восстанавливать файл wtg. С файлом триггеров wtg предлагается сделать хитрее - заменить его файлом триггеров из другой карты, в таком случае карта будет открываться, однако при попытке ее сохранить, редактор перепишет заново файл скрипта, а оригинальный будет утерян. Так же, многие программы-оптимизаторы делают карту не открываемой в редакторе.

Для взлома карт используем данные утилиты:

X-deprotect
Deprotecter

Также опытные картостроители могут легко взломать карту через WinMPQ или MPQ Master.

Вот темы, в которых рассматривался вопрос взлома карт:

Взлом w3x файлов
Депротект Карт

3.11 Моя карта долго грузится, что делать?
Оптимизировать. При оптимизации в отличие от депротекта целью является снизить вес карты и скорость ее загрузки, при этом неоткрываемость карты в редакторе является лишь следствием.
Также стоит удалить ненужный импорт. Вот программы, которые оптимизируют карты:

TOT
Vexorians Map Optimizer
Warcraft III Widgetizer

3.12 Что такое slk?
Это так называемый формат экспорта данных MS Excel. В Warcraft III slk таблицы используются для хранения данных о войсках, заклинаниях, декорациях, разрушаемых объектах, улучшениях. Там хранятся данные о всех характеристиках, кроме текстовых данных. По возможностям редактирования SLK намного эффективнее простого Редактора Объектов.

Slk оптимизация - это вид оптимизации, при котором данные ваших из ваших файлов w3u, w3o, w3d, w3a еtc. записываю в Slk таблицы, из которых удаляются данные о всех неиспользуемых объектах. Данный slk помещается в карту, незначительно увеличивая её размер, но при этом повышая скорость загрузки карты многократно. SLK оптимизация реализована в Warcraft III Widgetizer'е.

3.13 После перехода на обновление 1.24, а также импорта звука/музыки при проверке карты выскакивают ошибки, что делать?
Редактор вместо точек в Jass-код добавляет запятые (в дробных числах) и на это же ругается.
Решение:
Заходим в Пуск -> Панель управления -> Языки и региональные стандарты -> Региональные параметры -> Настройка -> Разделитель целой и дробной части -> выбираем "." (т.е. точку вместо запятой).
После проделанных манипуляций подобных ошибок быть не должно.

4. Формулы WE.



4.1 Снижение полученного урона за единицу брони:
Damage Reduction = Multiplier * Armor / (1 + Multiplier * Armor);
где Multiplier - это значение из Gameplay Constants - Combat - Armor Damage Reduction Multiplier, по умолчанию равное 0.06

4.2 Минимальное и максимальное повреждение юнита:
Min = Damage Base + Number of Dice (количество костей)
Max = Damage Base + Number of Dice * Sides per Die (кол-во костей*урона с каждой кости)

4.3 Формулы для подсчета требований опыта для следующего уровня, наград опыта за убийство героя и наград опыта за убийство крипа:

В таблице констант относительно требований опыта для получения уровня встречаются следующие константы:
  • Герою требуется опыта: таблица (NeedHeroXP) - обозначим за BASE
  • Герою требуется опыта: предыдущее значение фактора (NeedHeroXPFormulaA) - обозначим за A
  • Герою требуется опыта: фактор уровня (NeedHeroXPFormulaB) - обозначим за B
  • Герою требуется опыта: фактор константы (NeedHeroXPFormulaC) - обозначим за C

Следует отметить, что в поле NeedHeroXP может содержаться массив чисел, в этом случае в качестве требований опыта берутся эти числа, в том порядке в котором они записаны. Если этих чисел не хватает, то последнее из них берется в качестве числа BASE и дальнейшие требования высчитываются по описанной ниже формуле. Если поле пустое, то используется одно стандартное значение 200.

Не указанные в таблице NeedHeroXP требования находятся по рекурсивной формуле, то есть требование опыта для текущего уровня находится исходя из требований предыдущего:
Требования(для уровня N) = Требования(для уровня N-1) * A + B * N + С

Рекурсивную формулу можно записать в общем виде:

DEAD URL

В этой формуле L - это уровень, для которого мы считаем требования опыта(то есть не текущий уровень юнита, а следующий), а S - это последний уровень, для которого задано табличное значение, а BASE - это как раз это последнее заданное табличное значение.
Хотя она не так проста для понимания как рекурсивная она работает не хуже =)

Пример:
Пусть заданы значения
BASE = 100
A = 2
B = 50
C = 9
Тогда таблица требований опыта будет выстраиваться следующим образом:
2 уровень 100
3 уровень 359 = 100 * 2 + 50 * 3 + 9
4 уровень 927 = 359 * 2 + 50 * 4 + 9
5 уровень 2113 = 927 * 2 + 50 * 5 + 9
6 уровень 4535 = 2113 * 2 + 50 * 6 + 9
...
Если мы хотим посчитать эти значение не-рекурсивно, а формулой общего вида, то в качестве параметра S в формуле следует использовать число 2, а в качестве параметра BASE использовать последнее заданное в таблице значение 100.

Стандартная таблица опыта имеет параметры:
BASE = 200
A = 1
B = 100
C = 0
и выглядит следующим образом:
2 уровень 200
3 уровень 500 = 200 * 1 + 100 * 3
4 уровень 900 = 500 * 1 + 100 * 4
5 уровень 1400 = 900 * 1 + 100 * 5
6 уровень 2000 = 1400 * 1 + 100 * 6
7 уровень 2700 = 2000 * 1 + 100 * 7
8 уровень 3500 = 2700 * 1 + 100 * 8
9 уровень 4400 = 3500 * 1 + 100 * 9
10 уровень 5400 = 4400 * 1 + 100 * 10
Если мы хотим посчитать эти значение не-рекурсивно, а формулой общего вида, то в качестве параметра S в формуле следует использовать число 2, а в качестве параметра BASE использовать последнее заданное в таблице значение 200.

Почему я так много внимания уделил этой формуле? Потому что она широко используется в этой игре.

Таблица наград опыта за убийство героев рассчитывается по той же формуле, по умолчанию имеет параметры:
BASE(GrantHeroXP) = 100,120,160,220,300
A(GrantHeroXPFormulaA) = 1
B(GrantHeroXPFormulaB) = 0
C(GrantHeroXPFormulaC) = 100
Тогда стандартная таблица наград опыта имеет вид:
1 уровень 100
2 уровень 120
3 уровень 160
4 уровень 220
5 уровень 300
6 уровень 400 = 300 * 1 + 100
7 уровень 500 = 400 * 1 + 100
8 уровень 600 = 500 * 1 + 100
9 уровень 700 = 600 * 1 + 100
10 уровень 800 = 700 * 1 + 100
Если мы хотим посчитать эти значение не-рекурсивно, а формулой общего вида, то в качестве параметра S в формуле следует использовать число 5, а в качестве параметра BASE использовать последнее заданное в таблице значение 300.

Таблица наград опыта за убийство крипа рассчитывается по той же формуле, по умолчанию имеет параметры:
BASE(GrantHeroXP) = 25
A(GrantHeroXPFormulaA) = 1
B(GrantHeroXPFormulaB) = 5
C(GrantHeroXPFormulaC) = 5
Тогда стандартная таблица наград опыта имеет вид:
1 уровень 25
2 уровень 40 = 25 * 1 + 5 * 2 + 5
3 уровень 60 = 40 * 1 + 5 * 3 + 5
4 уровень 85 = 60 * 1 + 5 * 4 + 5
5 уровень 115 = 85 * 1 + 5 * 5 + 5
6 уровень 150 = 115 * 1 + 5 * 6 + 5
7 уровень 190 = 150 * 1 + 5 * 7 + 5
8 уровень 235 = 190 * 1 + 5 * 8 + 5
9 уровень 285 = 235 * 1 + 5 * 9 + 5
10 уровень 340 = 285 * 1 + 5 * 10 + 5
...
Если мы хотим посчитать эти значение не-рекурсивно, а формулой общего вида, то в качестве параметра S в формуле следует использовать число 1, а в качестве параметра BASE использовать последнее заданное в таблице значение 25.

4.4 Вот еще несколько интересных формул.
Советуем ознакомиться.

Полярные координаты
Генератор кодов для вложенной карты


5. Авторы.



Основной FAQ - ZlaYa1000.
Новая редакция - ADOLF.
Исправления - Sharhan & Hellfim

Также выражается благодарность NETRAT'у, Mefist'y, >>CHAOS_DIM@N<<'y, Iron'у, Riddick'y, FellGuard'у, Dead_knight'у и Dark_Skaarj'у, а также всем пользователям XGM за ответы на вопросы, ну и конечно людям, задававшим эти вопросы ;)

Отредактировано Кет, 13.06.2014 в 17:05.
Старый 18.05.2004, 21:14
GadenbIsh
Просто Гад
offline
Опыт: 71,030
Активность:
Это не тема для вопросов, для вопросов создан целый раздел. Также можно с маленькими вопросами обращаться в offtop zome aka Флудилку.
Тема открыта для того, чтобы вы могли вписывать сюда часто задаваемые вопросы с очень подробными ответами на них. В этом случае, я добавлю их в первый пост.
Старый 29.11.2006, 22:25
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
» понятие "равкод объекта" или "что есть 'A000', 'B000', 'hfoo' итд?"
постоянные вопросы: а что это такое 'A000'?
нарыл следующее:

Q: Как узнать равкод объекта?
A: Нажать Ctrl+D в редакторе объектов или в меню "Вид" поставить галочку напротив пункта "Показать названия переменных"

Q: Что есть равкод?
A: Уникальный идентификатор типа объекта (не порядковый, а именно типа, напимер, тип-пехотинец представлен в виде 'hfoo', глобальные переменные, сгенерированые редактором тоже включают в себя равкод объекта, и его порядковый номер на карте, например gg_unit_hfoo_0013), представлен 4-мя символами. В триггерах и джассе может быть передан как целоисчисленное значение, обозначающее тип объекта, например local integer BuffId = 'B000'

A: rawcode это 4х буквенное обозначение интегера
A000 например (by DioD)

Q: как поменять идентификаторы?
A: лучше не блокнотом, а каким-нибудь 16-ричным редактором. Вот порядок всех действий:
  1. Берем любого юнита (например футмена). Выделяем в редакторе объектов, жмем Ctrl+C, Ctrl+V (то бишь копируем), жмем в редакторе объектов "Вид -> Показать названия переменных", запоминаем название переменной (если футмен, то там будет hfoo:h000) и сохраняем карту.
  2. Берем любой MPQ-редактор (например MPQ Master), открываем там нашу карту и ищем файл war3map.w3u. Извлекаем его.
  3. Берем любой шестнадцатиричный редактор (например WinHex), открываем им war3map.w3u, ищем идентификатор (у футмена h000), меняем первую букву на заглавную (у футмена меняем на H000), название переменной не трогаем (я впервый раз поменял hfoo на Hfoo), сохраняем.
  4. Открываем карту MPQ Master'ом (или другим мпку), удаляем оттуда war3map.w3u, вставляем отредактированный и вуаля - футмен герой.
Примечание: менять идентификаторы рекомендуется только более опытным пользователям, и обязательно сделайте резервную копию карты, так как есть риск ее загробить. В случае если выводится сообщение об ошибке, удалите файл (attributes) из внутреннего *mpq архива карты.
» описание триггерной продажи предмета/юнита из магазина
Код:
custom script:  if(IssueNeutralTargetOrder(GetOwningPlayer(ToUnit),FromShop,"smart",ToUnit))or(IssueTargetOrder(FromShop,"smart",ToUnit))then
custom script:    call (IssueNeutralImmediateOrderById(GetOwningPlayer(ToUnit),FromShop,ItemID))or(Issu  eImmediateOrderById(FromShop,ItemID))
custom script:  endif
Принцип работы данных трех строк следующий:
  • Первая строчка проверяет, находится ли герой в радиусе продажи предмета от магназина.
  • Вторая - если да, то отдать приказ для нейтрального здания, без цели, по идентификатору-равкоду предмета для игрока, чей герой должен получить предмет.
  • Третья строчка - конец условия
Цитата:
ToUnit - глобальная переменная-юнит, которому продается предмет
FromShop - глобальная переменная-юнит, магазин, предмет продающий
ItemId - глобальная целоисчисленная переменная, равкод нужного нам предмета, либо же вписаный напрямую равкод предмета (например, 'lmbr')

Отредактировано FellGuard, 01.06.2007 в 21:33.
Старый 10.05.2007, 09:50
FausT

offline
Опыт: 1,451
Активность:
Я тут подумал много новычков просят как сделать "соиденение зарядов".
Цитата:
function Trig_Stack_Pickup_Actions takes nothing returns nothing
local unit hero=GetManipulatingUnit()
local item pickedup=GetManipulatedItem()
local integer iii=0
local item temp=null
local integer typeid=GetItemTypeId(pickedup)
if(GetItemCharges(pickedup)==0)then
set hero=null
set pickedup=null
return
endif
loop
exitwhen iii==6
set temp=UnitItemInSlot(hero,iii)
if(pickedup!=temp and GetItemTypeId(temp)==typeid)then
call SetItemCharges(temp,GetItemCharges(temp)+GetItemCharges(pickedup))
call RemoveItem(pickedup)
set iii=5
endif
set iii=iii+1
endloop
set hero=null
set pickedup=null
endfunction

//===========================================================================
function InitTrig_Stack_Pickup takes nothing returns nothing
set gg_trg_Stack_Pickup = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_Stack_Pickup, EVENT_PLAYER_UNIT_PICKUP_ITEM )
call TriggerAddAction( gg_trg_Stack_Pickup, function Trig_Stack_Pickup_Actions )
endfunction

Создай триггер Stack_Pickup конвертируй в текст и запихни етот код
Старый 21.06.2007, 13:02
adic3x

offline
Опыт: 108,439
Активность:
код неочень, а вот идея про складывающиеся заряды - тру, добавим.
FausT, спасибо=)
Старый 21.06.2007, 19:30
tysch_tysch
Работаем
offline
Опыт: отключен
http://zibada.xgm.guru/stuff/polar.htm подшейте, случайно наткнулсо, если автор соизволит дать ссылки на все остиальные скрипты - буду щастлив
Старый 25.06.2007, 01:04
adic3x

offline
Опыт: 108,439
Активность:
Обновил.
Нашли ошибку/апечатку - пишите.
Счиатете что какой либо важный вопрос необъяснен/недостаточно объяснен - пишите.
Старый 21.08.2007, 17:15
Ark

offline
Опыт: 21,182
Активность:
К пункту 2.3 можете прикрепить WSS
Старый 21.08.2007, 17:30
adic3x

offline
Опыт: 108,439
Активность:
Ark, думаю нет, посколько важна сама суть. поиск нужной системы это уже другое занятие.
Старый 21.08.2007, 17:39
adic3x

offline
Опыт: 108,439
Активность:
Grisha, изучить тригеры - и такие вопросы отпадут сами собой.
http://xgm.guru/articles.php?section=wc3&name=trigger_basics
Старый 31.08.2007, 14:04
Зевс
Адская Зверюга
offline
Опыт: 152,154
Активность:
Цитата:
Сообщение от Grisha
Вопрос: Как сделать так чтобы когда я убил допустим 20 челов был конец игры? Распишите буду рад!

На твой вопрос уже есть ответ >> все о триггерах.


Добавьте инфы про доступный максимум спеллов и ссылки на наработки (там где их можно добавлять большое множество - автора не помню :?). И еще не помешал бы ответ - почему способности предмета ограничиваются 4-мя и можно ли снять это ограничение... ну или в этом духе что-нить. Добавьте про то, как делать >10 левела )))))))) и вообще что в редакторе есть полезные опции типа Констант и Интерфейса.
з.ы: зачетное факу..
Старый 31.08.2007, 16:30
adic3x

offline
Опыт: 108,439
Активность:
Зевс, спс=) вобщем то про константы есть несколько ссылок, есть статья, про итем если кто знает триги - элементарно при получение предмета добавлять абилу, и при дропе ремувкать.
Старый 31.08.2007, 20:00
Зевс
Адская Зверюга
offline
Опыт: 152,154
Активность:
Вот еще о чем подумал. Много вопросов по чату. Например: Как отловить какой именно игрок написал в чат? Как скрыть чат? Можно ли изменить цвет шрифта? Можно ли менят определенные слова на другие? и т.д + приложить пару ссылочек на наработки (Тоадкоп и т.д)
Старый 16.09.2007, 10:05
adic3x

offline
Опыт: 108,439
Активность:
Зевс, тот кто сможет юзать эти наработки, явно не новичок=) поэтому он сам до всего дойдет + это уже больше по части жасса. тут самацель именно в большинстве первые вопросы.
Старый 16.09.2007, 10:39
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
хотя про отлов и сокрытие чата всетаки необходимо добавить информацию. По минимуму - ссылка на статью Дк про сокрытие чата, этого хватит. С тоадкоповским чатом пусть сами разбираются имхо
Старый 16.09.2007, 12:20
tysch_tysch
Работаем
offline
Опыт: отключен
с тоадкоповским чатом - вопросы к тоадкопу, тока он понимает как оно работает)
Старый 16.09.2007, 12:41
Зевс
Адская Зверюга
offline
Опыт: 152,154
Активность:
Вот еще про че забыли http://xgm.guru/forum/showthread.php?goto=newpost&t=3096 Добавь в факу что в данный момент это нереально.
Старый 19.09.2007, 16:04
FellGuard
Losyash
offline
Опыт: 39,547
Активность:
добавлено, Зевс, спасибо)
надо добавить в faq информацию по классификации предметов.. тоесть, как делать классификацию по группам и в зависимости от групп, например, запрещать подбирать герою предмет сходного класса.
уже неоднократно спрашивалось..

Отредактировано FellGuard, 24.09.2007 в 20:22.
Старый 19.09.2007, 16:09
GreatLosser

offline
Опыт: 5,086
Активность:
Я бы добавил такие вопросы:
Как поставить горячую клавишу кнопке в диалоге?
Использовать функцию
Код:
native DialogAddButton takes dialog whichDialog, string buttonText, integer hotkey returns button

Как создать используемый предмет, который навсегда повышает атаку?
Поставить ему способность Повышение атаки(однократное) и поменять ей свойства на нужное число.
Старый 29.10.2007, 11:20
Kreker

offline
Опыт: 3,614
Активность:
Мне посоветовали внести сюда свой материал:
Поворот зданий
Старый 16.11.2007, 16:20
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 06:37.