![]()
Extremator
![]() ![]() offline
Опыт:
39,822Активность: |
Мой второй триггер на Jass'е
логическое продолжение темы - xgm.guru/forum/showthread.php?t=59667
Это честно говоря мой не второй триггер на Jass'e, но по сути
это нечто следующее, рассмотрение чего я бы хотел попросить. Он на много больше и сложнее первого, но по сути не является чем-то уже совсем сложным.
Коротко объясню суть его работы - есть предметы с зарядами, и есть скилл который можно использовать только на предметы. Смысл применения скилла заключается в том что бы первым применением запомнить предмет на который был произведён клик а вторым - как бы соединить оба предмета вместе, при это объединив число их зарядов. Такое вот сложение, первый предмет вставляется во второй...
есть нюанс - можно использовать только на те предметы, которые имеются в данный момент в инвентаре юнита, а так же только те предметы, которые входят в особый перечень! При этом в каждый тип предметов имеет разную заполняемость на один слот... Раскидаю отдельно по функция в каждый отдельный кат (надеюсь это не ухудшит читаемость для вас).
» TriggerAddEvent_Unit_SpellCast
» items_sum_option_Init
» items_sum_condition_cast
» items_sum_TypeCheck
» items_sum_UnitCheck
» items_sum_actions_cast
» InitTrig_items_sum_jass
» globals
Доп.вопрос 1: локалку "игрок" нужно обнулять?
Доп.вопрос 2: какое число вернёт return из цикла? (при совпадении несколько раз) первое/последнее совпавшее? P.S.: Если читая всё это вы забыли в чём суть треда - напомню, я хочу знать что я тат делал хорошо, а что не очень. |
![]() |
#1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Buulichkaa
Делаю спеллы за еду
![]() ![]() offline
Опыт:
20,171Активность: |
ну ёмаё, статьи, статьи же есть! до всего, о чем тут спрашивается, можно логически дойти самому, прочитав пару-тройку статей
Buulichkaa добавил:
циклический перебор типов для того чтобы узнать индекс определенного типа - раковня, делаем нормальную БД, по равкоду сохраняем в глобальный массив наш индекс (или что там ещё нам надо) читаем xgm.guru/p/wc3/wc3bd
Buulichkaa добавил: ЧИТАЙ СТАТЬИ ПАДЛО! |
![]() |
#2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Extremator
![]() ![]() offline
Опыт:
39,822Активность: |
прекрати :DD
не пугай меня хД я познаю мир жассика :D |
![]() |
#3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Borodach
![]() offline
Опыт:
5,950Активность: |
|
![]() |
#4
+0/−4
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Tobi123
![]() offline
Опыт:
7,826Активность: |
Extremator:
Она является хендлом, значит требует обнуления. Все хендлы надо обнулять. |
![]() |
#5
+0/−7
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
adic3x
![]() offline
Опыт:
108,439Активность: |
Шли бы вы, уважаемый, лесом с такими советами. Вот вы тут утверждаете то, о чем сюда по всему имеете очень смутное представление, вроде "я где-то читал" и "мне почему-то так кажется". Хоть как-то сможете рассказать, зачем вообще обнуляются локальные переменные и что именно называют утечками?
player обнулять не надо. На самом деле можно поставить адика и не обнулять вообще ничего. |
![]() |
#6
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
nvc123
new status
![]() offline
Опыт:
59,284Активность: |
Extremator, тут реально надо бд |
![]() |
#7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Extremator
![]() ![]() offline
Опыт:
39,822Активность: |
ADOLF:
Я не шарю канеш, но у меня есть следующего рода гипотеза... Переменная типа player хранит хендл игрока, к которому будет приравниваться, до тех пока пока не будут обнулена (сама переменная).
Если бы это был юнит - то после смерти/удаления юнита - в переменной остался бы его хендл. Юнита нету - его хендл есть. А с игроком такое невозможно - игроков всего 16, нельзя создать нового игрока с новым хендлом. и нельзя удалить игрока, т.е. он не может потерять имеющийся у него хендл... Обнулся не обнулся переменную - игрок останется в игре, и то хранит ли его хендл какие-то переменные или нет... Не важно? или важно? (тут у меня нету своего мнения, ибо не шарю). ADOLF, я на трояк справился с ответом? :D
Extremator добавил: nvc123: ну я вроде бы его и сделал х) но я так понимаю для GUI оно ещё шло... а для Jass'а - слишком примитивно, и неграмотно... Да? |
![]() |
#8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
DioD
![]() ![]() offline
Опыт:
45,134Активность: |
ктото совершенно рак в знаниях о хэндлах, давайте я вам объясню:
Есть большая площадка, назовём её парковкой у супермаркета, на каждое место может припарковаться одна любая машина.
При заезде на парковку, машина получает талон с номером и должна припарковаться именно на это место. Любой человек может подойти и спросить, на каком месте находится некая машина потому, что она ему тоже нужна и тоже получить такой-же талон как водитель который на ней заехал.
Вахтёр ведёт счетчик выданных талонов, когда люди уходят они отдают талон обратно и счётчик уменьшается.
Водитель не может уехать без машины, на то он и водитель. До тех пор пока вахтёр не получил все талоны обратно, место не считается пустым и другие машины на него не пускаются.
Некоторые машины заезжают НАВСЕГДА, не важно сколько талонов выдано на них, не важно сколько талонов возвращено, место никогда не будет освобождено.
Вахтёр знает о таких машинах и вместо того чтобы выдавать каждый раз новый талон, он выдаёт всем обратившимся ксерокопии самого первого. Именно поэтому Player(x) == Player(x)
condition(C) == condition(C) но unit(A) != unit(A)
Для особых дебилов функции статического возврата прямо отмечены statiс в common.j
Крайний пример чуточку мимо кассы, те у кого в голове каша хотя-бы с колбасой спросят, а почему я сравниваю заезд на парковку таких же машин с выдачей талонов на существующие, но если чуть чуть подумать вы сами догадаетесь почему так. |
![]() |
#9
+6/−2
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
adic3x
![]() offline
Опыт:
108,439Активность: |
constant? Хотя сути не меняет. Я расскажу немного по другому:
В программировании дескриптор (handle) - абстрактная ссылка (отсылка) к чему либо. Юниты создаются и удаляются, и им присваиваются дескрипторы. Однако цифры не бесконечны, поэтому реализован механизм повторного использования. Именно она и дает сбой, из-за которого рекомендуется обнулять локальные переменные некоторых типов.
Переменная player в jass - просто число. Но чтобы криворукие парни не пытались создать юнита для игрока -1 или 65536 записать что-либо в такую переменную можно только через функцию Player (int). При этом, как правильно пояснил DioD не используется механизм повторного пользования дескрипторами, поэтому и обнулять не нужно. |
![]() |
#10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
ScorpioT1000
Работаем
![]() ![]() offline
Опыт: отключен
|
вообще-то я на основе знаний адольфа, тоада, диода и некоторых других ребят делал какраз данную статью
|
![]() |
#11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|