//###### Полноэкранный инвентарь, версия 2 ####### // //### Содержание ### // //1. Основные возможности //2. Установка //3. Известные баги //4. Дополнительные триггерные функции //5. Авторы // // //### 1. Основные возможности ### // // //- До 100 дополнительных слотов у любого юнита; //- Работает с неограниченным числом игроков и юнитов одновременно; //- Интерфейс в стиле стандартного, для всех 4 рас; //- Все компоненты находятся на одном экране, управление осуществляется одной кнопкой мыши; //- Настраиваемость многих параметров по вкусу; //- Возможность подбирать предметы напрямую в рюкзак; //- Возможность продавать предметы из рюкзака в близлежащий магазин; //- Возможность применять некоторые предметы моментального действия (лечебные зелья) напрямую в рюкзаке; //- Дополнительные функции для контроля инвентаря через триггеры: // можно добавлять/удалять предметы, проверять наличие предмета, // а также изменять размеры рюкзака. // // //### 2. Установка ### // // //Процесс установки не очень прост, но если вы будете следовать приведенным здесь инструкциям, проблем возникнуть не должно... //На всякий случай сделайте резервную копию карты - проще будет вернуть все как было в случае проблем :) // //Если ваша карта невелика, возможно, будет проще перенести все наоборот - с вашей карты на эту :) в этом случае переходите сразу к шагу 2.5. // // //2.1. Вначале требуется создать специальную область на краю карты для управляющих объектов. // Требования к этой области следующие: // 1. Не меньше 18 ячеек шириной, расположение по левому краю карты; // 2. Местность должна быть абсолютно плоская - никакой воды, склонов или игровых объектов; // 3. Область должна находится полностью ВНУТРИ границ камеры; // 4. По высоте область занимает всю карту. Минимально требуемый размер карты в высоту // зависит от количества игроков, для которых должен быть доступен инвентарь: // для каждого игрока требуется около 10 ячеек (т.е. высоты карты в 128 хватит для всех 12 игроков) // Если высота карты недостаточна для всех играющих, при старте будет напечатано предупреждающее сообщение. // // Примечание: при запуске игры эта область автоматически отсекается от основной карты цепью // из черных квадратных блокеров пути: если они создаются не совсем там, где бы вам хотелось, попробуйте изменить ширину карты. // Также область автоматически исключается из "игровой зоны" и триггерами, работающими с функцией "Playable Map Area", в расчет приниматься не будет. // // //2.2. Перенесите все проимпортированные файлы из этой карты на вашу. // Их всего 33, так что можно перенести их через менеджер импорта, но если вы умеете работать с MPQ, // можете воспользоваться соответствующими утилитами для быстрого переноса. // (в этом случае не забудьте перенести также файл war3map.imp) // // Примечание: импортированные файлы НЕ ДОЛЖНЫ содержать префикса пути типа "war3mapImported/"! // Т.к. редактор автоматически добавляет этот префикс, его требуется стереть вручную. // Для 2-х файлов - обычной и отключенной иконок инвентаря - потребуется указать особые пути. // (см. пути в этой карте) // // //2.3. Скопируйте категорию триггеров "Fullscreen Inventory 2" и переменную "fs_cache" в вашу карту. // Эта категория должна находиться наверху списка триггеров, если вы хотите использовать дополнительные триггерные функции. // Порядок триггеров внутри категории менять нельзя. // // Откройте раздел "Custom Script Code" в редакторе триггеров (кликом по названию карты в дереве триггеров) // Если в разделе кода ничего нет, напишите туда строчку "//" (без кавычек) // Если этого не сделать, при сохранении карты могут возникнуть ошибки компиляции. // // //2.4. Перенесите всю информацию о разрушаемых декорациях (destructible doodads). // На этой карте в редакторе объектов на соотвествующей закладке выберите File >> Export Destructible Settings... // затем на вашей карте - там же File >> Import Destructible Settings... // Другого способа переноса нет, т.к. используются нестандартые коды doodad-ов. // // //2.5. Скопируйте способность (ability) инвентаря в редакторе объектов. // Если на вашей карте уже были нестандартные способности, и способность инвентаря получила код, отличный от 'A000', // потребуется обновить соответствующий параметр в разделе конфигурации (см. пункт 2.7) // // //2.6. Откройте триггер "inventory init item settings" и по приведенной там инструкции // добавьте в скрипт информацию о нестандартных предметах, если у вас на карте таковые есть. // // //2.7. Откройте триггер "configuration" и настройте параметры по своему усмотрению. // (значение каждого параметра прокомментрировано) // Например, можно отключить возможность использования или продажи предметов напрямую из инвентаря. // // //2.8. Типа готово! :) // Если возникли проблемы, задать вопрос можно на страничке проекта (англ.): // http://dimon.xgm.ru/fsgui/feedback.php // или на нашем форуме (рус.): // http://xgm.ru/forum/ // // //### 3. Известные баги и недочеты ### // // //3.1. Предметы в расширенном инвентаре не дают своих бонусов. // На самом деле это не баг, а фича :) // Инвентарь, подобный диабловскому, с дающими бонусы шмотками, я возможно когда-нибудь сделаю, но не сейчас :) // //3.2. При заполненном маленьком (основном) инвентаре опция автоматического подбора в рюкзак отключается; // для ее работы требуется минимум один свободный слот в основном инвентаре. // //3.3. Предметы, которым через триггеры установлено состояние Undroppable (несбрасываемый) // все равно могут быть сброшены через экран инвентаря. // Если вам надо сделать, чтобы предмет ну никак нельзя было сбросить, отключите в настройках // возможность сброса через инвентарь вообще. // //3.4. Если при выходе из инвентаря возникают проблемы с камерой, привязанной к юниту, // обратите внимание на параметр "inv100_lock_cam" в настройках. // // //### 4. Дополнительные триггерные функции ### // // //Следующие несколько функций доступны для применения в JASS. // //Если хочется также добавить их в обычный графический редактор триггеров, //на страничке проекта доступен патч для редактора, делающий это: //http://dimon.xgm.ru/fsgui/downloads.php // //inv100_IsEnabled(player p) // Возвращает true, если указанный игрок в настоящее время находится в панели инвентаря, и false в противном случае. // Если у вас есть триггеры с событиями "Unit Acquires/Loses An Item" ("Юнит получает/теряет предмет"), // они могут конфликтовать с процедурами, используемыми инвентарем при работе. // (при этом возможна некорректная работа инвентаря) // Если такое имеет место, добавьте в конфликтующий триггер проверку типа // if inv100_IsEnabled(GetOwningPlayer(GetTriggerUnit)) then // return // endif // // ...или просто условие "Inventory is Active For (Owner Of Triggering Unit) Equals to False", // если вы используете патч для редактора. // //inv100_UnitItemInSlot(unit u, integer slot) // Возвращает ссылку на предмет, находящийся у указанного юнита в указанном слоте. // Примечание: номер слота во всех этих функциях - число от 0 до 99. // //inv100_UnitAddItemToSlot(unit u, item i, integer slot) // Добавляет указанный предмет в указанный слот рюкзака юнита. // Если указанный слот уже занят, или предмет представляет собой Powerup (типа руны) // функция ничего не делает. // //inv100_UnitDropItemSlot(unit u, integer slot) // Удаляет предмет из указанного слота инвентаря, и помещает его в ногах юнита. // //inv100_SetInventorySize(unit u, integer rows, integer cols) // Устанавливает размеры рюкзака юнита. (rows - высота, cols - ширина) // Высота и ширина - числа от 1 до 10. // //inv100_UnitHasItem(unit u, item i) // Возвращает true, если юнит носит указанный предмет в рюкзаке, и false в противном случае. // //inv100_UnitHasItemOfType(unit u, itemcode i) // Возвращает true, если юнит носит хотя бы один предмет указанного типа в рюкзаке, и false в противном случае. // //inv100_SaveToCache(gamecache cache, string missionkey, string label, unit u) // Сохраняет все содержимое рюкзака юнита в кэш, для переноса между картами. // cache - ссылка на переменную-кэш // (можно использовать bj_lastCreatedGameCache для указания последнего созданного кэша) // missionkey - название категории, то же, что и для других операций с кэшем; // label - произвольная строка, должна быть уникальна для каждого сохраняемого рюкзака. // //inv100_LoadFromCache(gamecache cache, string missionkey, string label, unit u) // Восстанавливает содержимое рюкзака из кэша по заданной категории и метке, и связывает этот рюкзак с юнитом. // К этому моменту юнит уже должен быть восстановлен (действием Restore Unit). // // //### 5. Авторы ### // // //5.1. DimonT aka ZibadaMX - руководство проектом, весь код, документация и вообще вся черная работа :) //E-mail : dimon@xgm.ru //ICQ : 937160 // //5.2. Иллисор - моделирование интерфейса. //E-mail : pont2000@yandex.ru //ICQ : 221013519 // //5.3. Отдельное спасибо за тест в мультиплеере выражается: // Markiz-у // HARN-у // //Страничка проекта (на английском языке) //http://dimon.xgm.ru/fsgui/ // //XGM - Российский Модмейкерский Портал //http://xgm.ru function InitTrig_readme_txt takes nothing returns nothing endfunction