Соединение одинаковых предметов
|
|
| Дата: Воскресенье, 21.06.2009, 10:41 | Сообщение # 11 |
Полковник
Сообщений: 238
|
Глава 5. Различные секреты и примеры их исполнения Как уже говорилось ранее, возможности триггеров практически безграничны. Большинство задач, которые казалось бы невозможны, можно с их помощью реализовать. На основе Warcrat’а были созданы множество других жанров. Начиная с гонок и заканчивая логическими играми. Некоторые секреты я и попытаюсь реализовать в этой главе. Сборные артефакты Когда я только начинал программировать для этой игры, мне казалось что сборные артефакты это стандартная функция варкрафта. Это было реализовано практически во всех картах, в которые я играл. На самом же деле все не так просто. Или все же просто? Вот пример кода собирающего два и более артефактов в один: Code События: Боевая единица - A unit Получает предмет Условия: Действия: If (All Conditions are True) then do (Then Actions) else do (Else Actions) Если - Условия: ((Triggering unit) has an item of type <Здесь название 1 артефакта>) равно Да ((Triggering unit) has an item of type <Здесь название 2 артефакта>) равно Да То - Действие: Предмет - Remove (Item carried by (Triggering unit) of type <Здесь название 1 артефакта>) Предмет - Remove (Item carried by (Triggering unit) of type <Здесь название 2 артефакта>) Герой - Create <Здесь название 3 артефакта> and give it to (Triggering unit) Иначе - Действие: Do nothing Теперь буду объяснять что здесь написано. Во-первых необходимо отследить получение юнитом предмета, для этого используется событие “Generic Unit Event ”с выбранным “Получает предмет ”. Далее мы проверяем нахождение у юнита определённых артефактов и если они есть, то забираем их и даём другой. Все просто, но эта система далеко не универсальна, а точнее с помощью неё нельзя отследить нахождение у юнита два одинаковых артефакта. Самый распространенный способ это сканирование всех слотов на артефакты. Для этого мы создадим переменную типа “Целочисленная (Integer)”, назовём её “ ItemCount ” и рассмотрим этот код: Code События: Боевая единица - A unit Получает предмет Условия: Действия: Set ItemCount = 0 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))) равно <Здесь название 1 артефакта> То - Действие: Set ItemCount = (ItemCount + 1) Иначе - Действие: Do nothing If (All Conditions are True) then do (Then Actions) else do (Else Actions) Если - Условия: ItemCount больше или равно 2 То - Действие: Предмет - Remove (Item carried by (Triggering unit) of type <Здесь название 1 артефакта>) Предмет - Remove (Item carried by (Triggering unit) of type <Здесь название 1 артефакта>) Герой - Create <Здесь название 2 артефакта> and give it to (Triggering unit) Иначе - Действие: Do nothing В начале, как и в прошлом действии, мы отследили получение юнитом предмета. Потом очистили переменную “ItemCount” от значения, вписанного в неё ранее. Следующем действием было сканирование слотов героя на нахождение определённого артефакта и если он находить у героя, то увеличиваем значение переменной “ ItemCount” на единицу. Далее проверяем значение переменной и если оно окажется больше или равно 2, то забираем 2 раза артефакт и даём другой. Вот и все, теперь и Вы можете создавать реалистичные системы артефактов используя данной код. Вырезка из моей статьи
|
|
|
|
| Дата: Воскресенье, 21.06.2009, 12:26 | Сообщение # 12 |
Генералиссимус
Сообщений: 13017
|
РазАрт, всё гуд, только он спрашивал как складывать артефакты в один, всмысле просто сплюсовывать.. а не делать сборные артефакты =) А так спасиб, интересно, возьму на заметку, пользовался первым примером... тока малясь модифицированным =)))
это Ксопик!
|
|
|
|
| Дата: Воскресенье, 21.06.2009, 18:07 | Сообщение # 13 |
Генералиссимус
Сообщений: 2438
|
Quote (XOPYC) РазАрт, всё гуд, только он спрашивал как складывать артефакты в один, всмысле просто сплюсовывать.. а не делать сборные артефакты =) А так спасиб, интересно, возьму на заметку, пользовался первым примером... тока малясь модифицированным =))) +1 Но это можно преобразовать конечно и в складывание предметов, для этого надо просто, чтоб вместо простого - (создать предмет) добавить ещё 1но действие установить чаргеты. Но мой пример куда понятней, проще, легче и там нет никаких перменных и циклов. Ибо незачем насиловать мозг, когда можно сделать проще.
|
|
|
|
| Дата: Понедельник, 22.06.2009, 18:08 | Сообщение # 14 |
Генералиссимус
Сообщений: 13017
|
Quote (DonLaonda) Но мой пример куда понятней, проще, легче и там нет никаких перменных и циклов. Ибо незачем насиловать мозг, когда можно сделать проще. Ну может быть... Вариант РазАрта я хотяб видел =) А твой где?
это Ксопик!
|
|
|
|
| Дата: Вторник, 23.06.2009, 01:23 | Сообщение # 15 |
Генералиссимус
Сообщений: 2438
|
см. пост №6.... Там ссылка на мапу, если ты не заметил... ща вылжу код спешал фо ю
|
|
|
|
| Дата: Вторник, 23.06.2009, 01:46 | Сообщение # 16 |
Генералиссимус
Сообщений: 2438
|
Action Unit - A unit Acquires an item Conditions (Chatges remaining in (Item being manipulated)) greater than 0 Actions /Выбрасываем итем, чтоб при проверке инвентаря на наличее такого же он не мешался Hero - Drop (Item being manipulated) from (Hero manipulating item) IF (All conditions are true) then do (Then Actions) else do (Else Actions) if - Conditions ((Triggering unit) has an item of type (Item-type of (Item being manipulated))) Equal to False Then - Actions /Если ненашли такой же итем - отключаем тригг, чтоб не возникло цыклической ошибки и даём герою такой же итем и присваеваем ему кол-во чаргов от подобранного итема. Trigger - Turn off (This trigger) Hero - Create (Item-type of (item being manipulated)) and give it to (Triggering unit) Trigger - Turn on (This trigger) Item - Set charges remaning in (Last created item) to (Charges remaning in (Item being manipulated)) Else - Actions / если нашли такой же итем, то приплюсовываем к чаргам найденого итема чарги подобранного итема Item - Set charges remaining in (item carried by (Hero manipulated item) of type (Item-type of(Item being manipulated))) to ((Charges remaining in ( item carried by(Hero manipulating item) of type(item-type of (item being manipulated)))) + (Charges remaining in (item being manipulated)) /Удаляем подобранный итем т.к. мы уже создали новй такой же итем, еси у героя не было итема такоготипа, а если и был то к тому итему что был приплюсовали чарги. Item - Remove (Item being manipulated)
|
|
|
|
| Дата: Суббота, 20.02.2010, 15:38 | Сообщение # 17 |
Лейтенант
Сообщений: 77
|
Класс...
Сообщение отредактировал GefesT - Суббота, 20.02.2010, 15:40 |
|
|
|
| Дата: Вторник, 21.09.2010, 19:39 | Сообщение # 18 |
Генералиссимус
Сообщений: 13017
|
Создай отдельную тему, тут немного другое обсуждается...
это Ксопик!
|
|
|
|
| Дата: Среда, 22.09.2010, 10:55 | Сообщение # 19 |
Генералиссимус
Сообщений: 2438
|
Обсуждалось* Уничтожил оффтоп и закрыл тему.
|
|
|
|
| Дата: Вторник, 01.03.2011, 21:06 | Сообщение # 20 |
Лейтенант
Сообщений: 41
|
Вы по-моему все уклонились от задонго вопроса а вот решение его и ещё пару часто задаваемых вопросов:
Яблочко зеленое,червячек внутри, Ты живи в нем,маленький,только не кури! Скоро будет яблочко сладкое,как мед, В гости к тебе девочка-червячек придет. Вмесе с ней и яблочко с хрустом пожуешь, Не кури мой маленький!Дольше проживешь! Народятся деточки,тоже червячки, Толстые и крепкие,словно мужички. Будет детство радостным,будет много сил, Потому-что в яблочке папа не курил.
|
|
|
|