Сейчас 21:56:41 Пятница, 22 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
[СТАТЬЯ] Избавляемся от ненавистной кнопки Патруль
kapa6acvlkДата: Среда, 12 Сентября 2012, 00:30:11 | Сообщение # 1
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Многих картостроителей интересует как можно избавиться от кнопки "Патруль", в большинстве пользовательских карт, неиспользуемой. Эта статья расскажет о том, как это воплотить в жизнь.


Для начала небольшое отступление.


В Warcraft 3 все приказы относящиеся к перемещению юнита и расположенные на панели приказов, связаны между собой. Удалить что-то отдельно нельзя. Единственная возможность, это удалить все и сразу, для этого нужно поставить юниту скорость перемещения 0. Приказы исчезнут, но тогда наша боевая единица не сможет двигаться. Что же делать, спросите вы? Все довольно просто, мы пойдем в обход и заставим игрока поверить, что кнопки патруль не существует, а также освободим одну драгоценную ячейку, под способность, удалив что-то другое :D .

Нам потребуется два файла из архива war3.mpq, это CommandFunc.txt и CommandStrings.txt. Эти файлы лежат в папке Units.
Теперь о каждом отдельно.
Файл CommandFunc.txt содержит данные о иконках приказов и их месторасположении в таблице приказов. В квадратные скобки [] заключено название приказа, Art - иконка приказа, Buttonpos - месторасположение иконки приказа в таблице приказов.

В файле CommandStrings.txt содержится описание приказов и горячие клавиши, в квадратные скобки, заключено название, Tip - Короткое описание, Ubertip - полное описание, Hotkey -горячая клавиша.


Теперь о главном.


Единственная кнопка которую можно скрыть, это кнопка атаки, но если мы ее уберем, нельзя будет отдать приказ через кнопу "А", и отправить юнита в атаку. Поэтому мы заменим ее другой кнопкой. Во многих статьях ее и заменяют кнопкой патруля, но тут есть одна проблемка. Нельзя отдать приказ патруля на юнита, можно только в точку. Поэтому я сделал немного иначе. Мы заменим атаку кнопкой перемещения, а перемещение патрулем. Приказ о перемещении можно отдать как на союзников, так и на врагов, а также в точку. Единственная проблема, нельзя атаковать предметы. Как показывает практика, этого почти никто и никогда не делает, предпочитают продавать.

Вносим соответствующие изменения в наши txt.
CommandFunc находим [CmdPatrol] и заменяем Art и Buttonpos на такие как у [CmdMove], у [CmdMove] на [CmdAttack]. Будет как-то так:
    [CmdMove]
    Art=CommandAttack
    Buttonpos=3,0

    [CmdPatrol]
    Art=CommandMove
    Buttonpos=0,0

    [CmdAttack]
    Art=CommandAttack
    Buttonpos=3,0

Подобным образом меняем данные в CommandStrings, будет что-то такое:
    [CmdMove]
    Tip=Атаковать (|cffffcc00A|r)
    Ubertip="Приказ выбранным войскам перейти в указанную точку, нападая на всех встреченных противников. Если вы отдадите приказ о нападении на определенную боевую единицу, ваши войска нападут именно на нее, не обращая внимания на других противников."
    Hotkey=A

    [CmdPatrol]
    Tip=Двигаться (|cffffcc00M|r)
    Ubertip="Приказ выбранным войскам перейти в указанную точку, не обращая внимания на противников. При указании в качестве цели дружественного воина, боевая единица будет следовать за ним."
    Hotkey=M

    [CmdAttack]
    Tip=Атаковать (|cffffcc00P|r)
    Ubertip="Приказ выбранным войскам перейти в указанную точку, нападая на всех встреченных противников. Если вы отдадите приказ о нападении на определенную боевую единицу, ваши войска нападут именно на нее, не обращая внимания на других противников."
    Hotkey=P

Готовые файлы. Эти файлы мы импортируем в карту (F12), после прописываем пути:
Units\CommandFunc.txt
Units\CommandStrings.txt

Теперь необходимо убрать стандартную иконку атаки, для этого идем в редактор объектов (F6), и у всех юнитов присутствующих в карте убираем галочку "Бой - Атака 1 - показать UI", если есть атака 2, то и "Бой - Атака 2 - показать UI". У героев снимаем обе галки обязательно, иначе при подборе сферы появится второй приказ атаковать.
Проверили в игре, все появилось как надо. Но наш юнит все еще не подчиняется приказам на иконках. На атаку он просто бегает, на перемещение начинает патрулировать. Будем исправлять.
Открываем, всеми любимый, редактор триггеров (F4), создаем новый триггер, назовем его PatrolMove, преобразуем в текст и вставим следующий код:
[code=jass]function Trig_PatrolMove_Conditions takes nothing returns boolean
return GetIssuedOrderId() == 851990
endfunction

function Trig_PatrolMove_Actions takes nothing returns nothing
call IssuePointOrderById(GetOrderedUnit(), 851971,GetOrderPointX(),GetOrderPointY())
endfunction

//===========================================================================
function InitTrig_PatrolMove takes nothing returns nothing
set gg_trg_PatrolMove = CreateTrigger(  )
call TriggerRegisterAnyUnitEventBJ( gg_trg_PatrolMove, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
call TriggerAddCondition( gg_trg_PatrolMove, Condition( function Trig_PatrolMove_Conditions ) )
call TriggerAddAction( gg_trg_PatrolMove, function Trig_PatrolMove_Actions )
endfunction[/code]
Создадим еще один триггер, MoveAttack
Тоже преобразуем его в текст и вставим этот код:
[code=jass]function Trig_MoveAttack_Conditions takes nothing returns boolean
return GetIssuedOrderId() == 851986
endfunction

function Trig_MoveAttack_Actions takes nothing returns nothing
call IssuePointOrderById(GetOrderedUnit(), 851983,GetOrderPointX(),GetOrderPointY())
call IssueTargetOrderById(GetOrderedUnit(), 851983, GetOrderTargetUnit())
call IssueTargetOrderById(GetOrderedUnit(), 851983, GetOrderTargetDestructable())
endfunction

//===========================================================================
function InitTrig_MoveAttack takes nothing returns nothing
set gg_trg_MoveAttack = CreateTrigger(  )
call TriggerRegisterAnyUnitEventBJ( gg_trg_MoveAttack, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER )
call TriggerRegisterAnyUnitEventBJ( gg_trg_MoveAttack, EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER )
call TriggerAddCondition( gg_trg_MoveAttack, Condition( function Trig_MoveAttack_Conditions ) )
call TriggerAddAction( gg_trg_MoveAttack, function Trig_MoveAttack_Actions )
endfunction[/code]

Теперь можно сохранить карту, и проверить ее работоспособность.
Спасибо за внимание.

Карта пример.



Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна.
© Александр Зорич


Сообщение отредактировал kapa6acvlk - Четверг, 13 Сентября 2012, 21:13:22
 

NaturekidДата: Среда, 12 Сентября 2012, 12:55:43 | Сообщение # 2
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Редчайшая по полезности статья. Гж.

Добавлено (12 Сентября 2012, 12:55:43)
---------------------------------------------

Quote (kapa6acvlk)
Единственная проблема, нельзя атаковать предметы

блин, а вот это канеш не очень хорошо.


 

[SeKtOR]Дата: Среда, 12 Сентября 2012, 15:11:47 | Сообщение # 3
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Шайтан!
P.S. А точка получение приказа зелёная, а не красная trollface




Сообщение отредактировал [SeKtOR] - Среда, 12 Сентября 2012, 15:24:45
 

kapa6acvlkДата: Среда, 12 Сентября 2012, 15:58:12 | Сообщение # 4
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Quote (|SeKtOR|)
А точка получение приказа зелёная, а не красная

А есть какая-то разница? Я специально проводил тест, в котором участвовало 5 человек, никто не увидел разницы, пока я не сказал, что стрелка зеленая, а некоторые еще и не поверили, что она красная должна быть :)



Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна.
© Александр Зорич
 

SirNikolasДата: Среда, 12 Сентября 2012, 18:04:45 | Сообщение # 5
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
kapa6acvlk, а что насчет кликов ПКМ? Они ведь тоже будут обрабатываться как атака?

 

[SeKtOR]Дата: Среда, 12 Сентября 2012, 18:21:11 | Сообщение # 6
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
Quote (kapa6acvlk)
А есть какая-то разница? Я специально проводил тест, в котором участвовало 5 человек, никто не увидел разницы, пока я не сказал, что стрелка зеленая, а некоторые еще и не поверили, что она красная должна быть

А я 6 и я заметил1!! idiot

Добавлено (12 Сентября 2012, 18:20:24)
---------------------------------------------
Quote (SirNikolas)
kapa6acvlk, а что насчет кликов ПКМ? Они ведь тоже будут обрабатываться как атака?

Щас узнаем buba
Да обрабатывается как атака, единственное что выдаёт это то, что стрелка зелёная и в оригинальной атаке если кликнуть на землю он дойдёт и остановится, а не получит приказ "stop"




Сообщение отредактировал [SeKtOR] - Среда, 12 Сентября 2012, 18:22:21
 

SirNikolasДата: Четверг, 13 Сентября 2012, 09:41:10 | Сообщение # 7
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Вот это минус гораздо больше, чем с невозможностью атаковать предметы. Обычно правой кнопкой посылают войска в отступление.

 

NaturekidДата: Четверг, 13 Сентября 2012, 10:17:29 | Сообщение # 8
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Quote (SirNikolas)
Вот это минус гораздо больше, чем с невозможностью атаковать предметы. Обычно правой кнопкой посылают войска в отступление

Хм. где-то это и сыграет отрицательную роль, вот только где? Так-то ни в проекте "Земли войны" ни в примере не замечал неправильной переработки приказов.
Т.е. для карты с НЕ слишком заоблачныит требованиями к коду вполне подойдёт.
Кстати, чтобы можно было отдать приказ на атаку предмета - никак изворотиться здесь нельзя? Ну кроме как на Esc к примеру нажимать.


 

kapa6acvlkДата: Четверг, 13 Сентября 2012, 11:16:23 | Сообщение # 9
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Quote (SirNikolas)
а что насчет кликов ПКМ? Они ведь тоже будут обрабатываться как атака?

ПКМ это приказ smart. Отдельная тема вообще, мы ее не трогаем, там все стандартно. Работает только с move, patrol.

Naturekid,
Можно искать предмет в радиусе от точки приказа и атаковать его. но это криво и убого. Особенно если рядом несколько предметов, можно разбить не тот предмет. Я считаю. что это не минус, а фишка. Можно даже обосновать, предметы, это древние и магические артефакты (как Кольцо Всевластия из ВК), просто так, их уничтожить нельзя. ;)



Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна.
© Александр Зорич


Сообщение отредактировал kapa6acvlk - Четверг, 13 Сентября 2012, 11:17:07
 

SirNikolasДата: Четверг, 13 Сентября 2012, 17:04:53 | Сообщение # 10
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Quote (kapa6acvlk)
ПКМ это приказ smart.
Да, уже дошло. Извиняюсь.


 

KO3bMAДата: Четверг, 13 Сентября 2012, 18:39:39 | Сообщение # 11
5 уровень
Группа: Проверенные
Сообщений: 105
Награды: 0
Репутация: 571
Блокировки:
Разрушаемые объекты атакуются?

DMB
Ланд 66% Юниты 30% Системы 17% Квесты 0,5%
В работе: новый инв, ланд, модели
Описание AlienworlD
 

kapa6acvlkДата: Четверг, 13 Сентября 2012, 21:13:49 | Сообщение # 12
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Quote (KO3bMA)
Разрушаемые объекты атакуются?

Теперь да :D



Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна.
© Александр Зорич
 

HexingДата: Пятница, 14 Сентября 2012, 09:56:12 | Сообщение # 13
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
kapa6acvlk, я вот непойму, почему нельзя атаковать предметы?

 

kapa6acvlkДата: Пятница, 14 Сентября 2012, 19:54:07 | Сообщение # 14
Группа: Проверенные
Сообщений: 612
Награды: 0
Репутация: 361
Блокировки:
Quote (Hexing)
я вот непойму, почему нельзя атаковать предметы?

для приказа move, предмет не может быть целью. Предмет цель только для smart и attack.



Как говориться, не обязательно есть всю кучу говна, чтобы понять, что она однородна.
© Александр Зорич
 

МихалычДата: Суббота, 15 Сентября 2012, 11:25:29 | Сообщение # 15
1 уровень
Группа: Пользователи
Сообщений: 6
Награды: 0
Репутация: 0
Блокировки:
kapa6acvlk, Полезную вещь ты сделал, товарищ. yes

Экспериментирую... Но явно без результатов...
 

NaturekidДата: Понедельник, 19 Ноября 2012, 17:07:53 | Сообщение # 16
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
Я вот тут подумал...
А почему не дополнить наработку чем-то вроде этого?

Карабас конечно не приветствует атаку предметов, но собственно такой триггер поправляет небольшие неудобства использования "Избавления от кнопки Патруль".
А вот наработка теперь вообще совершенна будет, разве нет? :) Приказ атаковать прямо по предмету будет принят корректно. Область менее 90 по моему не стоит делать.
Вот постоянная ссылка на дополненную наработку Карабаса, кому надо
http://www.epicwar.com/maps/217635/




Сообщение отредактировал Naturekid - Понедельник, 19 Ноября 2012, 23:21:19
 

SirNikolasДата: Понедельник, 19 Ноября 2012, 17:19:54 | Сообщение # 17
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Выглядеть будет не очень красиво (в момент отдачи приказа).

 

NaturekidДата: Вторник, 20 Ноября 2012, 00:22:01 | Сообщение # 18
Группа: Заблокированные
Сообщений: 4982
Награды: 3
Репутация: 3347
Блокировки:
SirNikolas, ну вообщем-то и только =). Зато решена чуть ли не проблема. С атакой предметов. :p

Добавлено (19 Ноября 2012, 23:22:47)
---------------------------------------------
Добавил условие, что точка видима игроку.
Т.к. Если предмет находится в тумане войны/просто невиди в данный момент, то щелчок ПКМ по этому месту давал бы приказ атаковать предмет.
А с этим условием этого неудобства не будет. :)

Добавлено (19 Ноября 2012, 23:50:06)
---------------------------------------------
И да - юнит всё ещё не будет атаковать деревья.
Устраняется это аналогично. В сущности можно в этом же триггере скопировать тело "If-then-else" только предмет везде заменить на Destructible и всё.

Добавлено (19 Ноября 2012, 23:56:39)
---------------------------------------------
И да - имейте в виду - если в указанной точке есть НЕАТАКУЕМЫЕ декорации - игра слетит с фаталкой. Чтобы это не было - выключаем триггер перед отдачей приказа и включаем вновь после. Вот как будет выглядеть триггер в конце концов:

Добавлено (20 Ноября 2012, 00:22:01)
---------------------------------------------
Касательно АИ - для него данные триггеры не то что не нужны - они для него вообще не "можны". То есть, во все 3 триггера запиливаем условие "Owner of triggering unit controller = Человек". Это обязательно.


 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz