![]()
NIKZ
Изучаю Jass
![]() ![]() offline
Опыт:
6,036Активность: |
Объясните как сделать скилл MUI?
Как сделать скилл MUI? Я так думаю Когда применяет способность игрок то к нему число присваивается, а потом когда для него сделалось действие, то число уменьшается и триггер выключается Так? Объясните зачем циклы для MUI? Наверное чтобы делать для каждого игрока?) Вот блин Вот уже сейчас понимаю как делать, но что то вроде упускаю Объясните плз |
![]() |
#1
+0/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Vadik29
Choice Battle 1.6а
![]() ![]() offline
Опыт:
15,245Активность: |
NIKZ, ты что тугой, есть куча примеров + я тебе писал и объяснил как муи делать.... |
![]() |
#2
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Extremator
![]() ![]() offline
Опыт:
42,451Активность: |
ну могу вот так показать... сгодица? или ещё вот так... |
![]() |
#3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
quq_CCCP
Я белый и пушистый!
![]() ![]() offline
Опыт:
96,068Активность: |
NIKZ, А что ты упускаеш? Короче говоря каждый юнит юзает скилл, но действия триггера построены таким образом что, неважно сколько юнитов одновременно катсанут скилл, для каждого из них будут свои переменные, и некогда не пересекутся, вот это муи скилл. Чтобы хранить данные такие ка кастер, в простых скилах, мгновенного деиствия, где юнит применил скилл и сразу нанёс урон окружающим, или создал даммика который кастанул на коружающих врагов Гнев деревьев, достаточно глобалных переменных, так как триггер с начало выполнит все действия для одного юнита, затем для второго, и тд, то тут не будет утечки и неприятного эффекта когда катстул 1 а все действия произошли у другого юнита катсера.... Но есть скилы которые по сути состоят из множества повторяющихся действиz которые происходят длительное время... Для самых простых пойдут локальные переменные и Wait но веты работют криво, да и порой их использование тупо невозможно... Тогда на помощь приходят массивы хаш таблицы и стурктуры (по сути тоже массивы глобальных переменных, тока немного похитрее используются на V/C jass) Так как мы используем локальный таймер для частых действий, то его ID будет уникальным для каждого катса скилла и не будет 2 одинаковых Ид таймера... дак вот эти ид целые числа, кторые мы можем использовать как номера строки хеш таблицы, а для номера столбца мы используем любое выбранное нами целое число, чтобы сохранить нашего катстера цель и так далее, а потом когда таймер истекает мы посегда получаем ссылку на него через функцию GetHandleId(хендл), те мы узнаём номер строки в хеше для конкретно нащих данных для конкретного случия применения способности... Надеюсь так понятно, то всё выше написанное есть в статьях, только другими словами... |
![]() |
#4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
NIKZ
Изучаю Jass
![]() ![]() offline
Опыт:
6,036Активность: |
Ок вроде понял) Блин Хеш учить надо) еще есть информации? |
![]() |
#5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
goldplay99
(C) iFanat
![]() offline
Опыт:
2,019Активность: |
СТАТЬЯ вот от меня, надеюсь поможет и там будут ссылки в конце на статьи. Надеюсь поможет. И не обязательно использовать хэш. Можно structur :D Отредактировано goldplay99, 09.05.2012 в 19:10. |
![]() |
#6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
quq_CCCP
Я белый и пушистый!
![]() ![]() offline
Опыт:
96,068Активность: |
NIKZ, есть, как первый том Войны и мир... тебе выложить? |
![]() |
#7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
NIKZ
Изучаю Jass
![]() ![]() offline
Опыт:
6,036Активность: |
quq_CCCP, Даавай с радостью! Хочу сделать свою карту не виснущей и никогда не подводящей)) |
![]() |
#8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
quq_CCCP
Я белый и пушистый!
![]() ![]() offline
Опыт:
96,068Активность: |
NIKZ, Начнём с простого...
У Аос типа доты, 10 героев, и каждый из них может кастануть некий скилл назём Его толчёк (как ф Force staff из доты) Создаём новый триггер, ну даём ему имя это неважно, каое будет имя у триггера на МИУшность это не влияет... Даём триггеру новое событие некоторый Юнит приводит способность в деиствие, это гуи событие, на jass его делают как некий юнит игрока катснул скилл, и таких событий делают у триггера столько сколько игроков, скажу от себя это сомнительное прием, навряд ли мы много выиграем в производительности кода... В прочем смотри сам ((код jass
===========================================================================
function InitTrig_Ice_Arrows takes nothing returns nothing set gg_trg_Ice_Arrows = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Ice_Arrows, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_Ice_Arrows, Condition( function Trig_Ice_Arrows_Conditions ) ) call TriggerAddAction( gg_trg_Ice_Arrows, function Trig_Ice_Arrows_Actions ) endfunction ))
и якобы более оптимальный вариант (кому как нравится, Diod и TiadCop на сjass не так извращались с этим казалось бы простым событием, но это позже) ((код jass
=========================================================================== function InitTrig_Ice_Arrows takes nothing returns nothing local integer index = 0 set gg_trg_Ice_Arrows = CreateTrigger( ) loop call TriggerRegisterPlayerUnitEvent(gg_trg_Ice_Arrows, Player(index), EVENT_PLAYER_UNIT_SPELL_EFFECT, null) set index = index + 1 exitwhen index == bj_MAX_PLAYER_SLOTS endloop call TriggerAddCondition( gg_trg_Ice_Arrows, Condition( function Trig_Ice_Arrows_Conditions ) ) call TriggerAddAction( gg_trg_Ice_Arrows, function Trig_Ice_Arrows_Actions ) endfunction )) Далее про события и действия, рекламная пауза 5 мин, не переключайтесь) |
![]() |
#9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
goldplay99
(C) iFanat
![]() offline
Опыт:
2,019Активность: |
СТАТЬ вот ещё. |
![]() |
#10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
quq_CCCP
Я белый и пушистый!
![]() ![]() offline
Опыт:
96,068Активность: |
Ну условие типа равкод применённой способности равен некому равкоду
((код jass
function Trig_Ice_Arrows_Conditions takes nothing returns boolean
return ( GetSpellAbilityId() == 'A01U' ) endfunction )) Условие тоже не влияет на МУИшность триггера, главное после конверта из гуи сделать его таик как указанно выше, надеюсь это ты знаеш... Такое условие нужно исправлять всегда хотя бы потому что оно занимает больше строк чес оптимизированное, и оптимизация заключается в примитивной операции - удалении всего лишнего, вот как выглядит условие после конверта из гуи... ((код jass
function Trig_Ice_Arrows_Conditions takes nothing returns boolean
if ( not ( GetSpellAbilityId() == 'A01U' ) ) then return false endif return true endfunction )) Глядя на код выше думаю легко догадаться почему его нужно править... Теперь самое главное - действие триггера, именно эта функция, а точнее её алгоритм и отвечает за МУИшность...
Начнём с объявления локальных переменных
Почему мы используем локальные переменные а не глобальные, а потому что это проще пареной репы... Не надо беспокоится что значения этих переменных будут удалены в другой функции использующие такие же переменные.. Глобальные переменные не подходят для таких функций, потому что они для всех одни и не учитывают что одна и та же функция вызывается многократно с разными параметрами... Ну понабрались, локалки рулят потому что они в функции создаются каждый раз когда они вызываются, и неважно что триггер сработал 50 раз в секунду, значение в каждой локалки будет своё..
вот пример ((код Jass
local unit Caster = GetSpellAbilityUnit() local timer t = CrateTimer() local integer TimerId = GetHandleId(t) .... )) Вот мы обьявили локальыне переменные и присвоили им значения, обрати внимание, что некторые переменные приравнены функции типа CreateTimer(), CreateGroup(), CreateBoolExpr(),и тд Этим переменным присваивается некий, вновь созданный хендл, в нашем случае это таймер, при кадом запуске триггера и вызова им этой функции будет создаваться новый таймер, и заносится в переменную t которая видна только в той фукнции в которой она объявлена, и только на время её выполнения, те очень очень короткое время... Вот она муишнось, неважно сколько юнто юзнут скилл, у каждого будет своё таймер, и своя переменная t.... NIKZ, Ну хоть что-то понял?, я чай пить, когда вернусь продолжу если необходимо.... |
![]() |
#11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
NIKZ
Изучаю Jass
![]() ![]() offline
Опыт:
6,036Активность: |
Понял) Кароче Лоаклки это ЯЗЬЬ ЗДОРОВЕннаЯ)) Вобщем понял как условие оптимизировать и действие сделать как нужно) А вот тебе вопрос) А если все действия сделать на гуи, а потом это все конвертнуть и сделать на JASS,тоже же не плохо?)) А так писать кучу строк)) времени занимает |
![]() |
#12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
goldplay99
(C) iFanat
![]() offline
Опыт:
2,019Активность: |
Почти все так и делают, на гуй потом в джасс и дополняют |
![]() |
#13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
NIKZ
Изучаю Jass
![]() ![]() offline
Опыт:
6,036Активность: |
|
![]() |
#14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Nerevar
I'll be back!
![]() ![]() offline
Опыт:
17,452Активность: |
Дальше либо в лс,либо смотри статьи - ибо там тоже самое пишут |
![]() |
#15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|