deemon12
offline
Опыт:
7,313Активность: |
Создаем триггерное шансовое заклинание.
Я уверен, что все, кто когда-либо играл в WarCraft (других здесь и нет) встречался со способностями, содержащими в себе шанс. Например – шанс нанести больший урон, шанс оглушить противника, шанс увернуться. И, как мне кажется, многие хотели бы научиться создавать подобные абилки. Стандартные шансовые заклинания – это одно, но ведь часто возникают ситуации, когда Вам хочется чего-то своего, чего-то отличающегося от стандарта. Или, на худой конец, чого-то, чего в стандартном наборе попросту нет. Мне хочется научить Вас создавать подобные спеллы. В качестве примера мы будем рассматривать триггерное заклинание «Увертливость», идею которого подкинул мне DoomHammer, за что ему огромное спасибо. Смысл спела заключается вот в чем:
Когда героя , имеющего абилку «Увертливость» атакуют, он имеет шанс стань неуязвимым на несколько секунд. На первый взгляд данная пассивка кажется довольно простой. Но именно поэтому я и использую ее в качестве примера. Итак, начнем. Первое, что мы должны сделать, это создать «пустышку» - пассивную (в нашем случае) способность, которая станет основой триггерного спела. Основная функция этой абилки – определять юнита, который ее изучил для занесения этого юнита в переменную. В данном случае нам полностью подходит способность «Сожжение манны (ведьмак)». Создаем на основе этой пассивки новую, меняем имя и описание на нужные нам (но я бы посоветовал не убивать на это время – можно и вконце сделать). Я заменил имя на «Увертливость». Теперь необходимо изменить (или обнулить) некоторые строки этого спелла. Ставим вместо числовых значений 0 в строках: Данные – Коэффициент урона: войска (%) Данные – Коэффициент урона: герои (%) Данные – Макс. украденной маны: войска (%) Данные – Макс. украденной маны: герои (%) В строке «Характеристики – Разрешенные цели» ставим «Сам воин». Все, пустышка теперь есть, заходим в Редактор триггеров и начинаем работу. Как минимум у нас должно в итоге получиться 2 триггера. Их количество зависит от числа уровней спела, который мы создаем. Итак, создаем 1-й триггер, его имя не играет никакого значения, т.к. его задача – занести в переменную героя, который исследовал способность «Увертливость». Пред созданием триггера необходимо создать новую переменную с типом «Боевая единица» и именем HeroUv. Сам триггер должен выглядеть таким образом: События: Боевая единица – A unit Приобретает способность Условия: (Learned Hero Skill) равно Увертливость Действия: Set HeroUv = Triggering Unit Все, первый триггер готов. Теперь, как только герой исследует данную абилку, игра занесет его в переменную HeroUv. Второй триггер будет гораздо сложнее первого. Он как раз и будет содержать в себе шанс героя стать неуязвимым. Здесь нам понадобятся еще 2 переменные: обе целочисленные, с именами Udari и Shans. Объясню, зачем эти переменные нужны. В переменную Udari мы будем заносить количество ударов, нанесенных нашему герою. Переменная Shans – это, как Вы уже наверное догадались, и есть шанс нашего героя стать неуязвимым. Все готово к созданию 2-го триггера. Он будет выглядеть так: События: Боевая единица – A unit Атакован Условия: (Triggering Unit) равно HeroUv (игра проверяет, тот ли это герой, который изучил способность «Увертливость») (Level of Увертливость for (Triggering Unit) ) равно 1 (данное условие проверяет уровень спелла, его следует вставлять только если ваше заклинание содержит несколько уровней) Действия: Set Udari = (Udari+1) (это счетчик; данное действие заносит переменную Udari количество ударов по герою) ---далее нам понадобится блок If/Then/Else--- If (All Conditions are True) then do (Then Actions) else do (Else Actions) Если – Условия Udari больше или равно 15 (это самая важная часть! Как раз число 15 и является основой триггера и данного шансового заклинания. По задумке именно 1 из этих 15 ударов и будет делать нашего героя неуязвимым. На деле это где-то 6-7% шанс. Еще один важный момент – чем больше данное число, тем меньше шанс героя стать неуязвимым, чем оно меньше – тем шанс больше. Тут, я думаю, все ясно.) То – Действия Set Udari = 0 (мы обнуляем переменную Udari, чтобы она не выскочила за пределы нашего шанса. Если мы ее не обнулим, пассивка сработает всего 1 раз!) Set Shans = (Random integer number between 1 and 15) (данное действие присваивает переменной Shans случайное целочисленное значение от 1 до 15; именно от того, какое число будет содержать в себе переменная и зависит, как скоро герой станет неуязвимым) Иначе – Действия Do nothing (это действие следует добавить, иначе триггер может не работать) ---cоздаем еще один блок If/Then/Else--- If (All Conditions are True) then do (Then Actions) else do (Else Actions) Если – Условия Udari равно Shans (мы сравниваем значения переменных счетчика и случайного числа каждый раз, когда героя бьют. Кок только эти значения совпадут, запустятся действия данного блока) То – Действия Боевая единица - Make HeroUv Неуязвимый (здесь мы делаем героя неуязвимым) Wait 2.00 seconds (в этом действии назначается время, которое герой будет неуязвимым) Боевая единица - Make HeroUv Уязвимый (теперь делаем героя снова уязвимым) Иначе – Действия Do nothing Все, оба триггера завершены, пассивка теперь будет раюотать. В зависимости от количества уровней заклинания необходимо буде создать несколько триггеров 2-го типа. Они будут точно такими же, единственные отличия: в условии (Level of Увертливость for (Triggering Unit) ) равно 1 единицу нужно заменить на номер того уровня, на котором будет работать абилка; а в действии Wait 2.00 seconds будет выставляться иное время длительности неуязвимости. Также можно уменьшать счетчик и изменять в соответствии с ним диапазон случайных значений переменной Shans. Комбинаций масса! Главное – внимательно со всем ознакомиться и понять, что к чему. Повторю, что это лишь пример. По данному принципу Вы можете рассчитывать любые шансы. Отредактировано deemon12, 22.02.2007 в 14:09. |
22.02.2007, 14:02 | #1
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
dk
offline
Опыт:
61,843Активность: |
Офигеть что стали писать люди) Ну вопервых пример для одного юнита, тоесть даже если у игрока уже есть 2 юнита с этой способностью спелл работать не будет... Потом офигенно геморный механизм шанса, лучше юзать общеизвестный: Берем случайное число от 1 до 10, если оно равно 7 то делаем какие-то действия, итого шанс 10 процентов... Делайте выводы... |
22.02.2007, 14:13 | #2
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Q
offline
Опыт:
360,164Активность: |
а слабо код нормально писать без идиотизмов вроде udari и shans? |
22.02.2007, 14:17 | #3
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
DioD
offline
Опыт:
45,184Активность: |
поддержу автора, бывает еще хуже...
DioD добавил: всё же страшно жить стало... |
22.02.2007, 14:22 | #4
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
deemon12
offline
Опыт:
7,313Активность: |
Dead_knight, спелл действительно только для одного юнита. Это пример, если ты не понял. Главное - принцип. К тому же насчет числа 7 - тут ты не прав! При таком раскладе юнит будет становиться неуязвимым точно через 10 ударов. И по-другому никак. А в том методе, что предлагаю я, юнит может стать неуязвимым как 2 раза в течение 3-х секунд, так и 1 раз в течение 30. Это НАМНОГО реалестичнее. Стандартные станы, выпадающие с вероятностью 10%, также отнюдь не каждые 10 ударов выпадают. Это мое мнение, хоть оно и не совпадает с твоим.
Q, поясни, плиzz, что ты хотел сказать, я не понял просто. DioD, хоть тебе спасибо за поддержку. |
22.02.2007, 15:11 | #5
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
dk
offline
Опыт:
61,843Активность: |
Цитата:
Это еще раз подтверждает абсолютное незнание темы, таким способом срабатывать будет тоже через случаное кол-во ударов... Почитай еще раз пост диода до конца) |
|
22.02.2007, 15:13 | #6
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
AnD
Weighted Companion Cube
offline
Опыт:
7,401Активность: |
Триггер 1:
Initialization Событие: Map initialization Действие: Set Die_Unit = Аффтор 0009 Триггер - Run KillCircle <gen> (ignoring conditions) Триггер 2: KillCircle Событие: Время - Every 0.05 seconds of game time Действие: Боевая единица - Kill Die_Unit Имхо так правильнее будет. |
22.02.2007, 15:23 | #7
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
BarracuDa
aka ShaggyBear
offline
Опыт:
4,758Активность: |
У меня такое ощущение, что народ пишет статьи, только для того, чтобы 1000 опыта сорвать! А так статья фифти фифти! |
22.02.2007, 15:54 | #8
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
and_y87
Тру Кодер
offline
Опыт:
20,630Активность: |
для начинающий есть что обмозговать. а мне она ничего не дала =( |
22.02.2007, 16:03 | #9
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
GadenbIsh
Просто Гад
offline
Опыт:
70,430Активность: |
deemon12
насмешил, честно говоря=)) Ты хотя бы академический FAQ почитал, там написано что надо сделать, чтобы Random Integer возвращал именно случайное число. |
22.02.2007, 16:39 | #10
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
deemon12
offline
Опыт:
7,313Активность: |
1) мне, вообще-то, плевать на 1000 опыта. Я человек не азартный и никогда за легкой добычей не гоняюсь.
2) статья итак для новичков написана. 3) Dead_knight, прочитай пост DioD'а с начала. Я перечитал твой пост. Все понял. 4) AnD, сам убейся. |
22.02.2007, 16:43 | #11
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
dk
offline
Опыт:
61,843Активность: |
Так как статья написана для новичков, она должна быть еще лучше проработанной, ибо они запомнят этот способ и будут юзать, а если он не оптимальный то это не гуд... |
22.02.2007, 16:46 | #12
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
S
offline
Опыт:
43,833Активность: |
гуд... для мну - начинающему джассеру помогло |
22.02.2007, 17:07 | #13
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
DFlyer
<3 MJ
offline
Опыт:
44,079Активность: |
Цитата:
И чем тебе это помогло? Тут всё полностью на ГУИ! |
|
22.02.2007, 17:37 | #14
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
AnD
Weighted Companion Cube
offline
Опыт:
7,401Активность: |
Цитата:
Ушол убиваццо. Боевая единица - Kill AnD Игра - Defeat Игрок 1 (Красный) with the message: AnD помер, бедняго |
|
22.02.2007, 18:29 | #15
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
GadenbIsh
Просто Гад
offline
Опыт:
70,430Активность: |
Sashaaaaa
Надо было FAQ читать Цитата:
|
|
22.02.2007, 18:40 | #16
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
S
offline
Опыт:
43,833Активность: |
Цитата:
Йа читал, но - мриз, неоднократно закусывающий моим моском показывал, как делать шанс, но до мя недоперло... а вот ща... Аффтару thx за статью. |
|
22.02.2007, 19:11 | #17
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
and_y87
Тру Кодер
offline
Опыт:
20,630Активность: |
я за число от 1 до 10. |
22.02.2007, 21:45 | #18
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
Krol
offline
Опыт:
16,909Активность: |
Цитата:
Ты триггеры сначала выучи, лол=) Впринцыпе статья мож кому поможет, но юзать рандомные числа имхолегче... |
|
23.02.2007, 12:13 | #19
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|
adic3x
offline
Опыт:
107,539Активность: |
Цитата:
Бред. Читай БЖ: Код:
Данная функция не имеет никакого смысла и ее происхождение для мну загадка. Статья не только не будет полезна новичкам, она им будет вредна т.к. описанный метод совершенно бессмыслен как таковой, тем более писать статью по одному спеллу... Код:
- и будет вам счастье=) Статью фтопку. |
|
23.02.2007, 16:51 | #20
+0/−0
Профиль |
Приват |
Поиск |
IP: Записан
|