ГлавнаяБлогКарты Warcraft 3Гайды для первой ДотыГайды для Доты 2 [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Зарегистрированные пользователи не видят всплывающей рекламы
Страница 2 из 2«12
Модератор форума: XOPYC, Vanzer, Goodie 
Форум » Картостроение в Warcraft 3 » Обучение » Соединение одинаковых предметов (как это?)
Соединение одинаковых предметов
Дата: Воскресенье, 21.06.2009, 10:41 | Сообщение # 11
Полковник
Проверенные
Сообщений: 238
Награды: 1
Репутация: 45
Глава 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 раза артефакт и даём другой. Вот и все, теперь и Вы можете создавать реалистичные системы артефактов используя данной код.

Вырезка из моей статьи smile

 
Дата: Воскресенье, 21.06.2009, 12:26 | Сообщение # 12
Генералиссимус
Модераторы
Сообщений: 9040
Награды: 21
Репутация: 140
РазАрт, всё гуд, только он спрашивал как складывать артефакты в один, всмысле просто сплюсовывать.. а не делать сборные артефакты =)
А так спасиб, интересно, возьму на заметку, пользовался первым примером... тока малясь модифицированным =)))


это Ксопик!
 
Дата: Воскресенье, 21.06.2009, 18:07 | Сообщение # 13
Генералиссимус
Заблокированные
Сообщений: 2263
Награды: 8
Репутация: 85
Quote (XOPYC)
РазАрт, всё гуд, только он спрашивал как складывать артефакты в один, всмысле просто сплюсовывать.. а не делать сборные артефакты =) А так спасиб, интересно, возьму на заметку, пользовался первым примером... тока малясь модифицированным =)))

+1
Но это можно преобразовать конечно и в складывание предметов, для этого надо просто, чтоб вместо простого - (создать предмет) добавить ещё 1но действие установить чаргеты.
Но мой пример куда понятней, проще, легче и там нет никаких перменных и циклов. Ибо незачем насиловать мозг, когда можно сделать проще.
 
Дата: Понедельник, 22.06.2009, 18:08 | Сообщение # 14
Генералиссимус
Модераторы
Сообщений: 9040
Награды: 21
Репутация: 140
Quote (DonLaonda)
Но мой пример куда понятней, проще, легче и там нет никаких перменных и циклов. Ибо незачем насиловать мозг, когда можно сделать проще.

Ну может быть...
Вариант РазАрта я хотяб видел =) А твой где?


это Ксопик!
 
Дата: Вторник, 23.06.2009, 01:23 | Сообщение # 15
Генералиссимус
Заблокированные
Сообщений: 2263
Награды: 8
Репутация: 85
см. пост №6....
Там ссылка на мапу, если ты не заметил... ща вылжу код спешал фо ю
 
Дата: Вторник, 23.06.2009, 01:46 | Сообщение # 16
Генералиссимус
Заблокированные
Сообщений: 2263
Награды: 8
Репутация: 85
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
Награды: 0
Репутация: 8
Класс...

Сообщение отредактировал GefesT - Суббота, 20.02.2010, 15:40
 
Дата: Вторник, 21.09.2010, 19:39 | Сообщение # 18
Генералиссимус
Модераторы
Сообщений: 9040
Награды: 21
Репутация: 140
Создай отдельную тему, тут немного другое обсуждается...

это Ксопик!
 
Дата: Среда, 22.09.2010, 10:55 | Сообщение # 19
Генералиссимус
Заблокированные
Сообщений: 2263
Награды: 8
Репутация: 85
Обсуждалось*
Уничтожил оффтоп и закрыл тему.
 
Дата: Вторник, 01.03.2011, 21:06 | Сообщение # 20
Лейтенант
Проверенные
Сообщений: 41
Награды: 0
Репутация: 5
Вы по-моему все уклонились от задонго вопроса а вот решение его и ещё пару часто задаваемых вопросов: B)
Прикрепления: 1490868.w3x(30Kb)


Яблочко зеленое,червячек внутри,
Ты живи в нем,маленький,только не кури!
Скоро будет яблочко сладкое,как мед,
В гости к тебе девочка-червячек придет.
Вмесе с ней и яблочко с хрустом пожуешь,
Не кури мой маленький!Дольше проживешь!
Народятся деточки,тоже червячки,
Толстые и крепкие,словно мужички.
Будет детство радостным,будет много сил,
Потому-что в яблочке папа не курил.
 
Форум » Картостроение в Warcraft 3 » Обучение » Соединение одинаковых предметов (как это?)
Страница 2 из 2«12
Поиск: