Сейчас 13:44:04 Суббота, 20 апреля, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » UnitApplyTimedLife и эффект в инвизе
UnitApplyTimedLife и эффект в инвизе
Samedy_Дата: Понедельник, 31 Августа 2015, 23:20:13 | Сообщение # 1
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
Есть юнит с таймером истечеия, который кастует спелл. Во время его каста, цели заклинания должен наносится триггерный урон зависящий от статов. Но как только юнит удаляется, нужно чтобы урон перестал наносится. Вопрос: можно ли использовать таймер истечения этого юнита, не создавая новый и как это сделать?
И еще один вопрос, какие есть способы повесить на юнита эффект, который будет виден только если он выйдет из инвиза (кроме баффа)?
 

ВолчачкаДата: Понедельник, 31 Августа 2015, 23:42:51 | Сообщение # 2
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Код
IsUnitInvisible() //- проверяет невидимость
IsUnitDetected() //- если его палят

Добавлено (31 Августа 2015, 23:42:51)
---------------------------------------------
Хотя вряд ли тебе помогут, лучше пилить свою систему проверок инвиза.
Проверять получиться только наличием баффа или абилки, но хотя можно поискать, мб где-то есть нативка, которая позволяет просматривать логику невидимости юнита от абилки. хммм

Сообщение отредактировал Волчачка - Понедельник, 31 Августа 2015, 23:30:35
 

Samedy_Дата: Вторник, 01 Сентября 2015, 06:43:23 | Сообщение # 3
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
Нужно чтобы эффект видел сам игрок, пока его герой в инвизе. Как в вовке, короче. Пока бежишь - следоом за тобой эффект, перестаешь бежать и начинаешь атаковать - становишься видимым и эффект исчезает. Сделать это баффом яснопонятно что можно, но интересны другие способы.
Я к тому, что
Цитата
IsUnitInvisible() //- проверяет невидимость
IsUnitDetected() //- если его палят

не канает.
 

ВолчачкаДата: Вторник, 01 Сентября 2015, 17:58:28 | Сообщение # 4
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Цитата Samedy_ ()
Нужно чтобы эффект видел сам игрок, пока его герой в инвизе. Как в вовке, короче. Пока бежишь - следоом за тобой эффект, перестаешь бежать и начинаешь атаковать - становишься видимым и эффект исчезает. Сделать это баффом яснопонятно что можно, но интересны другие способы.
Я к тому, что
Цитата
IsUnitInvisible() //- проверяет невидимость
IsUnitDetected() //- если его палят

не канает.


Тогда есть такое предложение, сделать моделку эффекта, которая будет позади героя, c прикреплением к chest,origin, или head..
Ну суть, что будет казаться, что эффект следует за героем. И не надо будет никаких даммиков, если конечно же эффект не должен быть видим всем.
Хотя если тебе нужен дамик то тебе придётся организовать систему
сотоящую с абилок постоянной невидимости
где идут регистры на, которые проверяют данного юнита и сравнивают.. дальше кокококо...
 

KaotikaДата: Вторник, 01 Сентября 2015, 18:57:34 | Сообщение # 5
5 уровень
Группа: Проверенные
Сообщений: 144
Награды: 0
Репутация: 20
Блокировки:
Цитата Samedy_ ()
Вопрос: можно ли использовать таймер истечения этого юнита, не создавая новый и как это сделать?

Добавлять в группу юнитов

Добавлено (01 Сентября 2015, 18:57:34)
---------------------------------------------
используй вот это:
if GetLocalPlayer( ) == Player( N ) then
Создать дамми-юнита...
endif
//Созданный дамми-юнит будет виден только игроку N.

Ps: этой функции в гуи нет, если конечно ты сам не добавил её через TriggerString/Data. Придётся писать через Custom Code (Нестандартный Код).


Тискаю клаву... остальных пока некогда!


Сообщение отредактировал Kaotika - Вторник, 01 Сентября 2015, 18:58:48
 

Samedy_Дата: Вторник, 01 Сентября 2015, 20:14:55 | Сообщение # 6
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
Волчачка, внезапно я понял, что проще конечно сделать бафф и не выпендриватся, да.


Цитата Kaotika ()
используй вот это:
if GetLocalPlayer( ) == Player( N ) then
Создать дамми-юнита...
endif
//Созданный дамми-юнит будет виден только игроку N.

Ps: этой функции в гуи нет, если конечно ты сам не добавил её через TriggerString/Data. Придётся писать через Custom Code (Нестандартный Код).


Я в курсе с гетлокалплеер.

Добавлено (01 Сентября 2015, 20:14:55)
---------------------------------------------
Кстати гугл перевел в том что ты написал только "горло" и "для".

 

ExtrematorДата: Вторник, 01 Сентября 2015, 23:03:50 | Сообщение # 7
10 уровень
Группа: Проверенные
Сообщений: 3199
Награды: 0
Репутация: 1018
Блокировки:
Цитата Samedy_ ()
Есть юнит с таймером истечеия, который кастует спелл. Во время его каста, цели заклинания должен наносится триггерный урон зависящий от статов. Но как только юнит удаляется, нужно чтобы урон перестал наносится. Вопрос: можно ли использовать таймер истечения этого юнита, не создавая новый и как это сделать?


Мне вот не понятно, зачем тебе даммик с истечением, когда ты вполне можешь удалять его вручную... ну раз у тебя какие-то трудности с ним

Ты хочешь прекратить наносить урон когда даммик умрёт, НО наносишь урон ТРИГГЕРНО ... что мешает проверять умер ли даммик? либо вообще убивать даммик вручную и прекращать наносить урон...

Использовать таймер истечения жизни юнита без создания нового? эмм
Запаузить старый и запустить новый... ну или например лишить даммика этого баффа (истечение жизни юнита это вроде бафф же, не?)

Цитата Samedy_ ()
какие есть способы повесить на юнита эффект, который будет виден только если он выйдет из инвиза (кроме баффа)?


Тебе нужно видеть повешанный на юнита эффект? но сам эффект будет виден только если юнит не умеет инвиз?

Наверняка тут будет как у Сларка, только наоборот: юнита видно - даёшь эффект, иначе - отбираешь
 

ВолчачкаДата: Среда, 02 Сентября 2015, 03:15:55 | Сообщение # 8
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Цитата Kaotika ()
if GetLocalPlayer( ) == Player( N ) then
Создать дамми-юнита...
endif
//Созданный дамми-юнит будет виден только игроку N.

И вызываем desync


Мб спросим дуоса?


Сообщение отредактировал Волчачка - Среда, 02 Сентября 2015, 03:16:59
 

KaotikaДата: Среда, 02 Сентября 2015, 10:45:53 | Сообщение # 9
5 уровень
Группа: Проверенные
Сообщений: 144
Награды: 0
Репутация: 20
Блокировки:
Цитата Волчачка ()
И вызываем desync

Ну и что?!
Катастрофических последствий я не испытывал с этим фильтром.


Тискаю клаву... остальных пока некогда!


Сообщение отредактировал Kaotika - Среда, 02 Сентября 2015, 10:46:37
 

Samedy_Дата: Среда, 02 Сентября 2015, 11:45:54 | Сообщение # 10
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
Цитата Kaotika ()
Ну и что?!

Ты правда ничего страшного в десинхе не видишь?
 

KaotikaДата: Среда, 02 Сентября 2015, 11:51:00 | Сообщение # 11
5 уровень
Группа: Проверенные
Сообщений: 144
Награды: 0
Репутация: 20
Блокировки:
Цитата Samedy_ ()
Ты правда ничего страшного в десинхе не видишь?


Честно? Нет.


Тискаю клаву... остальных пока некогда!
 

Samedy_Дата: Среда, 02 Сентября 2015, 12:05:34 | Сообщение # 12
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
Цитата Kaotika ()
Честно? Нет.

Объясняю что такое десинх в моих любимых футах, именно оттуда я понял что это такое.
Играешь себе такой, играешь и тут происходит десинхронизация. В итоге (на примере футов) игроки разделяются на 2 группы. При этом, может произойти так, что всего 1 человек попадает в 1 группу, а остальные 11 в другую. Тот ломает домики каждого игрока, выигрывает и у всех других вылетает игра, а ему победка.
Или еще такой не приятный момент: играешь тимой, ты сапортный гер, в итоге тиммейт на кор. роли "улетает в десинх" и ты остаешься один в своей игре против других более сильный героев. Итог - игра испорчена, спасибо десинху.
 

KaotikaДата: Среда, 02 Сентября 2015, 12:19:23 | Сообщение # 13
5 уровень
Группа: Проверенные
Сообщений: 144
Награды: 0
Репутация: 20
Блокировки:
непонятно. Но короч вот как действует 'десинх':
if GetLocalPlayer( ) = Player( N ) then
CreateUnit....
endif
Этот созданный юнит будет виден только для игрока N и ни для кого другого.
То есть данные созданного юнита будет обрабатывать только игрок N.
...................................................................................................
Да и вообще в своих WoWInterface системах я использовал десинх. И, тестируя в локал. сети не происходило ничего странного ( при чём тест был на 2а игрока).


Тискаю клаву... остальных пока некогда!
 

Samedy_Дата: Среда, 02 Сентября 2015, 12:45:07 | Сообщение # 14
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
Kaotika, ну, я тебе говорю как оно там.
Цитата Kaotika ()
Этот созданный юнит будет виден только для игрока N и ни для кого другого.

Ну, именно это и есть. Одни видят как герой дерется и покупает шмотки, а другие видят как он бегает и сливается. Все это происходит в одном и том же месте, но разные игроки видят совершенно разные вещи.
 

KaotikaДата: Среда, 02 Сентября 2015, 15:29:58 | Сообщение # 15
5 уровень
Группа: Проверенные
Сообщений: 144
Награды: 0
Репутация: 20
Блокировки:
Эм.. ну я CreateUnit в пример дал. Вообще я имел ввиду: так можно было бы эффект сделать для инвиза как в вов.

Добавлено (02 Сентября 2015, 15:29:58)
---------------------------------------------
Ведь речь и об этом шла


Тискаю клаву... остальных пока некогда!
 

ВолчачкаДата: Среда, 02 Сентября 2015, 17:37:25 | Сообщение # 16
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Цитата Kaotika ()
Ну и что?!
Катастрофических последствий я не испытывал с этим фильтром.

Создаёся оъект для игрока 1 на его компьютере и ему присвается id = L[n]
А друго какой-нить другой объект создаётся вне локала и у других тоже и их id =A[n]
локального и не локальных A[n]=L[n] при тому, что они разные юниты считай даже если у них один и тот же тип.
Ну того игрока A[1,n] != A[2..12,n]
И поэтому произойдёт десинк.
Как же поступить? Дать особую невидимость для объекта не используя GetLocalPlayer(), + 2 типа героя с типом самоубийца и без этого типа, и всё это меняем тёмным..
Ведь всё таки есть возможность взять пользу из редактора объектов и небольшой силой JASS.
 

KaotikaДата: Среда, 02 Сентября 2015, 17:49:17 | Сообщение # 17
5 уровень
Группа: Проверенные
Сообщений: 144
Награды: 0
Репутация: 20
Блокировки:
Цитата Волчачка ()
Сообщение # 16

Теперь понятно)


Тискаю клаву... остальных пока некогда!
 

DragoNДата: Среда, 02 Сентября 2015, 19:02:26 | Сообщение # 18
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Цитата Kaotika ()
if GetLocalPlayer( ) = Player( N ) then
CreateUnit....
endif

Цитата Samedy_ ()
Играешь себе такой, играешь и тут происходит десинхронизация. В итоге (на примере футов) игроки разделяются на 2 группы


Для тех, кто в танке
Алсо как обычно предложу говноедский вариант не видя ничего плохого в таймере, у которого либо время срабатывания будет равным времени жизни юнита(запуск с параметром false вроде), после которого прекращать дамаг.
Либо в периодическом таймере(параметр true) и дамажить.
Ах да, если нужен визуальный эффект для конкретного игрока, то и создавай его через AddSpecialEffect, только в GetLocalPlayer модель ему выставь, как в статье описано


El Psy Congroo
 

Samedy_Дата: Среда, 02 Сентября 2015, 20:17:05 | Сообщение # 19
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
Цитата DragoN ()
Алсо как обычно предложу говноедский вариант не видя ничего плохого в таймере, у которого либо время срабатывания будет равным времени жизни юнита(запуск с параметром false вроде), после которого прекращать дамаг.

Можно увидеть наглядный пример? Пожалуйста.
Или ты имеешь в виду просто создавать отдельный таймер?
Я думал что можно использовать таймер истечения, не создавая других.


Сообщение отредактировал Samedy_ - Среда, 02 Сентября 2015, 20:18:59
 

ВолчачкаДата: Среда, 02 Сентября 2015, 21:25:42 | Сообщение # 20
САЙТ УМЕР ППЦ
Группа: Проверенные
Сообщений: 1361
Награды: 0
Репутация: 2165
Блокировки:
Цитата DragoN ()
Для тех, кто в танке
Алсо как обычно предложу говноедский вариант не видя ничего плохого в таймере, у которого либо время срабатывания будет равным времени жизни юнита(запуск с параметром false вроде), после которого прекращать дамаг.
Либо в периодическом таймере(параметр true) и дамажить.
Ах да, если нужен визуальный эффект для конкретного игрока, то и создавай его через AddSpecialEffect, только в GetLocalPlayer модель ему выставь, как в статье описано

ŖぽהßⅦだŝ½ß˚ӋΖū½ßㄘŏßとßだŗßΌөßɧ˶ӭЙЍßヌŅĘßđßɤŗßŃßӲŗ½ßとßⅲלせßⅦʶ∈ŕàßĸĒêʧßとßӲßלӆㄦҼáßêßとßΌөßⅦʶ∈ŕß∈ŕß∈ŕà

Цитата Samedy_ ()
Можно увидеть наглядный пример? Пожалуйста.
Или ты имеешь в виду просто создавать отдельный таймер?
Я думал что можно использовать таймер истечения, не создавая других.

В один таймер можно повесить сразу две функции, т.е. дать ему два шага проверки. И флаг завершения и всё это можно закатить LoadInteger\SaveInteger().
 

DragoNДата: Четверг, 03 Сентября 2015, 00:41:31 | Сообщение # 21
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Цитата Волчачка ()
В один таймер можно повесить сразу две функции, т.е. дать ему два шага проверки. И флаг завершения и всё это можно закатить LoadInteger\SaveInteger().

да хоть через TimerExploit играйся, проблема будет в том, что флаг нужно иметь глобальный, чтобы иметь возможность чекать его в оригинале и коллбеке(для варианта с true), а это ставит MUI под угрозу
Цитата Samedy_ ()
Я думал что можно использовать таймер истечения, не создавая других.

офк так было бы кошернее, если можно было его перегрузить
Цитата Samedy_ ()
Можно увидеть наглядный пример? Пожалуйста.

я с картостроя ущёл ещё в году 13, мало что помню
вообще после UnitApplyTimedLife надо отлавливать событие разложения юнита(он в этот момент удаляется), можно туда попробовать проверку на id вгонять и выключать дамаг, вариантов много
я бы вообще сделал всё таймером одним(создавал вне таймера, если много добавлял бы в группу, в функции таймера бы дамажил и сверял счётчик/флаг и блочил всё)
типа такого:
Код

unit casterUnit = CreateUnit();
real interval = .5;
integer maxCounter = 5;
integer currentCounter = 0;

StartTimer(CreateTimer(), interval, true, lambda() {
          timer resTimer = GetExpiredTimer();
          if (currentCounter < maxCounter) {
              DealDamage(); // пилим дамагу
              currentCounter++;
         } else {
              currentTimer = 0;
              PauseTimer(resTImer);
              DestroyTimer(resTimer);
              RemoveUnit(casterUnit);
              resTimer = null; // всем известно, что в jass нет нормального GC
         }
});

написал абстрактно и на cJass(как помню), да и вообще где-то промазать мог
итого получим таймер, работающий каждые пол секунды 5 раз nate
можно попробовать получить MUI обернув это в структуру и создавать каждый раз при касте


El Psy Congroo


Сообщение отредактировал DragoN - Четверг, 03 Сентября 2015, 00:42:14
 

Samedy_Дата: Четверг, 03 Сентября 2015, 06:21:47 | Сообщение # 22
7 уровень
Группа: Проверенные
Сообщений: 371
Награды: 0
Репутация: 18
Блокировки:
Цитата DragoN ()
можно попробовать получить MUI

Есть ли в этом смысл, если каждый скилл может быть только у одного персонажа, а конкретный персонаж только у одного игрока?
 

DragoNДата: Четверг, 03 Сентября 2015, 09:53:48 | Сообщение # 23
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Цитата Samedy_ ()
Есть ли в этом смысл, если каждый скилл может быть только у одного персонажа, а конкретный персонаж только у одного игрока?

при любом раскладе скилл будет единственный на карте?
разве только если кд скилла меньше времени его процесса или ботов писать будешь
а так не особо имеет, можно хоть глобальный флаг юзать
можешь не заморачиваться и заюзать мой код сверху без структур тогда, думаю


El Psy Congroo
 

SirNikolasДата: Четверг, 03 Сентября 2015, 21:18:12 | Сообщение # 24
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Цитата DragoN ()
// всем известно, что в jass нет нормального GC
Но в cJass есть автообнуление.


 

DragoNДата: Четверг, 03 Сентября 2015, 23:56:19 | Сообщение # 25
Инквизитор
Группа: Стримеры
Сообщений: 4348
Награды: 7
Репутация: 2776
Блокировки:
Цитата SirNikolas ()
Но в cJass есть автообнуление.

кстати да, flush locals вроде как


El Psy Congroo
 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » UnitApplyTimedLife и эффект в инвизе
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz