Sergey
Старейший
offline
Опыт:
43,563Активность: |
continue
Влад, ты уже очень многое узнал о jass. Конечно, в jass полно и других важных наработок. Есть команды, позволяющие выводить текст в любом месте экрана. Есть спец. команды, позволюющие производить общие действия для всех игроков на одном только компьютере (например, играть такой-то звук). Есть наработки Vexorian-а, который по сути сделал такую же систему, как SCV Димона, но раньше. Есть методы, позволяющие упростить работу с группами юнитов. Есть методы создания специальных объектов, которые определяют, что юзер щелкнул мышкой в такую-то точку (на основании этого построен инвентарь Димона на 80 слотов). Вообщем всяких приемов хватает. Но всему этому обучать я уже не буду, т.к. во-первых, сам многого не знаю, во-вторых, ты уже сможешь разобраться самостоятельно. Можешь проверить - статьи по jass, которые раньше казались сложными и непонятными, теперь станут доступными, а материал изложенный в них - будет уже знаком.
Владея приемами работы с jass, самое главное для триггерщика - умение правильно ставить и находить решение задач, умение алгоритмизировать задачу, умение мыслить творчески. Про это я уже писал отдельную статью. Дальше, все уже зависит от твоих мозгов и твоего опыта. Вот, к примеру, Drakvius как-то раз попросил меня разобраться с тем, как устроено заклинание passive mana shield известного буржуйского автора. Идея в том, что пвреждения должны наноситься мане, а когда мана кончится - жизни. Думаю, ты уже догадаешься, как это сделать. Единственный способ, пригодный для этого методами war3 - отлавливать повреждения, полученные юнитом при помощи триггера с событием unit takes damage. Т.е. для каждого юнита с пассивкой, нужно создать такой триггер - это задача решаемая. При нанесении повреждения юниту, возможны разные случаи: - маны у юнита больше размера повреждения: в этом случаи мы восстанавливаем юниту жизнь и отнимаем ману. - маны у юнита меньше размера повреждения: в этом случае из получеченного юнитом повреждения мы должны восстановить число жизни, равное количеству маны, а потом обнуляем ману. Вроде все хорошо. Все, да не все. Оказывается, что событие unit takes damage срабатывает на какую-то долю секунды раньше, чем юниту наносится повреждение. Из-за этого, если жизнь юнита полная, мы пытаемся добавить жизнь и отнять ману. Но жизнь полная и поэтому добавлять к ней что-то бесполезно. Получается, что жизнь юнита все равно страдает. Мелочь, а не красиво. Можно конечно сделать паузу 0.1 секунды и уже после этой паузы восстанавливать жизнь юнита. Тогда все работает нормально, но все таки видно, как жизнь юнита колеблется. Опять же, некрасиво. Drakvius предложил глянуть этого спрел этого буржуйского автора - там было столько jass кода, в котором было так лень разбираться, что я на это забил. Стал думать. Есть ли возможность отловить момент, когда у юнита отнимутся жизни? В принципе есть. Существует такое событие, которое срабатывает, когда жизнь юнита станет меньше указанного значения. Этим можно воспользоваться! Просто если жизни у юнита почти полные и нельзя использовать метод добавить жизнь сразу, мы СОЗДАДИМ ТРИГГЕР с событием, которое сработает, когда жизнь текущего юнита станет меньше текущего значения. И именно в этот момент мы добавим жизни юниту обратно. Проверил - сработало. Код получился наверное в 3-4 раза короче, чем у буржуйского автора, а результат тот же самый :). Вообщем Влад, для интереса, если хочешь посмотреть интерсные jass наработки и выяснить, как они устроены, рекоммендую: - наработка Димона: герой Seal master http://www.blizzard.ru/forum/showthread.php?t=13831 - моя наработка: герой Еретик - моя наработка: герой Лорд Хаоса http://forum.wc3.ru/showthread.php?t=10999 12 пост - наработка для созданий Аеонов http://www.blizzard.ru/forum/showthread.php?t=12005 ТОЛЬКО ИЗ ПОСТА 7 - спел passive magic shield http://host1218.hostland.ru/forum/showthread.php?t=1362 - спел Divine bless и Аура сопротивления http://wc3.xgm.guru/files.php?category=4&perpage=20&page=3 Когда почувчтвуешь, что готов, сможем приступить к разбору инвентарной наработки. ------------------------------------------------------------- Sergey добавил: В сценарии обязательно должна быть глобальная перменная p типа точка function do_polar_offset takes location source, real dist, real angle returns location local real x = GetLocationX(source) + dist * Cos(angle * bj_DEGTORAD) local real y = GetLocationY(source) + dist * Sin(angle * bj_DEGTORAD) call MoveLocation(source, x, y) return source endfunction и функция function move_p_to_unit takes location source, unit u returns location local real x = GetUnitX(u) local real y = GetLocationY(u) call MoveLocation(source, x, y) return source endfunction Вставляем эти функции в код сценария. Вторая функция берет объект точка и объект юнит и приравнивает точку к положению юнита. Тюею мы можем написать move_p_to_unit(udg_p, u) - и результатом будет то, что точка, на каоторую ссылается переменная udg_p станет указывать на положение юнита u. При этом не засоряется память. Первая функция берет точку, угол и расстояние. Она производит смещение переданной точки относительно текущего положения в полярных координатах. Т.е. мы можем написать do_polar_offset(udg_p, 100, 60) - точка p сместится на 100 единиц под улом 60 градусов относительно текущего положения. Утечек памяти не будет. Теперь скомбинируем первую и вторую функцию. Допустим, нам нужно сместить точку p в другую точку относительно текущего положения юнита. Используем вложенные функции: do_polar_offset(move_p_to_unit(udg_p, u), dist, angle) - это общая формула для такого вида конструкции. Здесь udg_p - глобальная переменная, которую мы используем для всех перемещений u - юнит, относительно которого производится вычисление dist и angle - параметры смещения Отредактировано Sergey, 10.06.2005 в 10:34. |
10.06.2005, 12:45 | #21
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
vlad_C0M
Босс DarkSkyTeam
offline
Опыт:
10,459Активность: |
Сергей! Все почти понял и изучил.....
\ Выходи в АСЮ! У меня кое какие идеи возникли... Правда не совсем вовремя.... За 7 часов до экзамена по геометрии... =) Я теперь начинаю понимать :
Вообщем я весь в шоке... Пишу максимально спокойно, но у меня истерика... :)! |
15.06.2005, 18:56 | #22
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Sergey
Старейший
offline
Опыт:
43,563Активность: |
Я в асе могу бывать редко... По поводу того, что ты написал - это я в шоке... Где -ты видел управление камерой мышкою? Максимум чего я доюивался - это управление стрелками как в сценарии Air War с камерой, перемещающийся вместе с юнитом. Это можно сделать, но есть одно но... Это не очень удачный способ и не самый удобный способ управления камерой. |
15.06.2005, 20:14 | #23
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
vlad_C0M
Босс DarkSkyTeam
offline
Опыт:
10,459Активность: |
Sergey : Нет Сергей тут как все наоборот. И кстати (к слову) , я даже знаю как при перемещении move = не допускать сброса анимации.... :) Все досканально просто. Правда при перемещении нужна будет постоянная анимация ... 1 единсвенная :)... Т.е. walk 2 не будет пахать :) .... Именно поэтому чувствую плавать герой будет менее интересно чем ходить.....
По поводу камеры + мыши..... Есть такие обьекты называют их Trackable .... И есть такая команда как create\ destroy local trackable ... Все будет грузить память .... Однако если можно создать trackable для local player_a - тогда я знаю как все осуществить .. без особого загружения памяти..... Собственно все будет динамически обновлятся.... :) Да и в Варе графика не столь мощна чтобы не хватило место для 30 х 30 = 900 обьектов для 1 игрока. Причем обьекты невидимы... И лишь отслеживаются памятью как галочка...... Вот скажи сколько стоит памяти один прозрачный обьект? :) Я думаю немного. Правда у меня это смутно укладывается в голове. Сделать динамически обновляемые обьекты в пределах 0.05 секунды! .. Если это не бред ... И 900 обьектов в секунду сможет создатся и удалится ...... Тогда все будет как в Counter Strike ..
Про "ходьбу" по кнопкам.... У меня возникли сразу 2 бредовые идеи.... 1 - я знаю что сама функция на jass ... (if then) имеет свойство "перенаправлятся" .. И можно переопределить практически любое значения.... Собственно если удастся вернуть из "нажатой вверх -" нажатую "W" - Тогда лавры можно нести.... А если не удастся .. То слушай саму идею :
Ладно Серега.... Я щас еще больше углубляюсь в джасс .... Конечно ты меня поспешишь скорее растроить... Но возможно не все мои идеи не имеют пола ....... А скорее имеют опору но не имеют потолка!
|
16.06.2005, 06:57 | #24
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Sergey
Старейший
offline
Опыт:
43,563Активность: |
Расстраивать не буду, но я понятия не имею, как все это делается или даже можно ли такое сделать вообще. Насчет tracable - лучше поговори с Димоном. Он в этом эксперт. По моеему эти объекты можно создавать, но нельзя удалять... А может и нет. 900 объектов конечно память сожрут порядочно, но все нужно проверить. |
16.06.2005, 10:31 | #25
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
vlad_C0M
Босс DarkSkyTeam
offline
Опыт:
10,459Активность: |
Серега. Можно создать дейсвие :
"Когда игрок нажимает клавишу" - любую ? ... И "Игрок отпускает клавишу" - любую ? Я думаю можно. Но для этого нужно знать код клавиш!!! Т.к. например клавиша вверх пишется ввиде переменной "bj_KEYEVENTKEY_LEFT" , я думаю что там указан тип "event key" - т.е. клавиши вверх влево вправо вниз. Записаны в особый файл откуда и читается "возможность нажатия этих клавиш". Если это так тогда можно эти самые "вверх вниз . и т.п." переделать на W . S . A . D :) !
Где можно найти список всех возможных переменных ... И как указать клавишу типа EVENTTYPE - например "W" = только не говорите что это невозмно.... Т.к. в jass возможно все. |
17.06.2005, 09:21 | #26
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Sergey
Старейший
offline
Опыт:
43,563Активность: |
Влад, как успехи. Нужна помощь? |
02.07.2005, 12:45 | #27
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
vlad_C0M
Босс DarkSkyTeam
offline
Опыт:
10,459Активность: |
Сделал систему развития героя. И систему интерфейса... :) Осталось чуть чуть переделать заклинания , избавится от утечек , возможных и невозможных ... И внедрить твою наработку с инвентарем! |
08.07.2005, 11:16 | #28
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
vlad_C0M
Босс DarkSkyTeam
offline
Опыт:
10,459Активность: |
Сегодня почти, до-разобрался со скриптом супер инвентаря aka - "InvSystem". Очень много полезного, для себя, вычерпал :)!!! Сейчас буду делать мини-задумку на джазе, опять в голове куча безумных идей =)! |
01.09.2005, 17:26 | #29
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|