|
|
|
|
Невидимый юнит для игрока
|
|
AHTOXA_2013 | Дата: Пятница, 12 Июля 2013, 14:36:58 | Сообщение # 1 |
3 уровень
Группа: Проверенные
Сообщений: 61
Награды: 0
Репутация: 1
Блокировки:
| Есть ли такой триггер который делает юнит видимым или невидимым для конкретного игрока?
|
|
|
|
[SeKtOR] | Дата: Пятница, 12 Июля 2013, 14:47:52 | Сообщение # 2 |
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
| Custom script: if(GetLocalPlayer() == Player(номер_игрока)) then Анимация - change unit color(как-то так, ставишь прозрачность 100%) Custom script: endif
Сообщение отредактировал [SeKtOR] - Пятница, 12 Июля 2013, 14:49:30 |
|
|
|
Наклз | Дата: Пятница, 12 Июля 2013, 15:46:45 | Сообщение # 3 |
10 уровень
Группа: Проверенные
Сообщений: 1431
Награды: 0
Репутация: 760
Блокировки:
| То что сказал [SeKtOR], делает юнита ПРОЗРАЧНЫМ, но отнють не невидимым...
Лучше сделай так: Сделай юнита с способностью "Москит" и способностью видеть невидимых с маленьким радиусом.. ну например 80, а так же сделай его летающим , без атаки естественно, и в поле "Файл модели" поставь пробел, а так же убери тень у юнита... теперь С: что хочешь У: что хочешь Д: Создать 1 "ТвойМоскит" в точке "ЛюбаяТочка" для игрока "ИгрокКоторыйБудетВидетьНужногоТебеЮнита" Set "unit" = Последний созданный юнит Integer A от 1 до 16 >Боевая еденица - Shared vision(или что-то такое) - Запретить общий обзор юниту "ПоследнийСозданныйЮнит" для игрока "Игрок с индексом(IntegerA)"
потом второй триггер
События: Время - периодически каждые 0.10 с. Условия: Действия: Боевая еденица - Двигать юнита "unit" в точку(позиция юнита(Ну и тот твой юнит, который будет видимый только для этого игрока))Добавлено (12 Июля 2013, 15:46:45) --------------------------------------------- Правда тут баг, если юнит, которого должен видеть только ты, например, подойдёт очень близко к другому не видимому юниту... то тот второй станет видимый... но мне кажется по другому ни как нельзя сделать юнита видимым только для определённого игрока...
Сообщение отредактировал Наклз - Пятница, 12 Июля 2013, 15:45:29 |
|
|
|
AHTOXA_2013 | Дата: Пятница, 12 Июля 2013, 16:40:16 | Сообщение # 4 |
3 уровень
Группа: Проверенные
Сообщений: 61
Награды: 0
Репутация: 1
Блокировки:
| Цитата (|SeKtOR|) Custom script: if(GetLocalPlayer() == Player(номер_игрока)) then чего?...Цитата (|SeKtOR|) Анимация - change unit color(как-то так, ставишь прозрачность 100%) тогда его все игроки видить не будут даже тот который им играет.Цитата (|SeKtOR|) Custom script: endif ....Добавлено (12 Июля 2013, 16:40:16) ---------------------------------------------
Цитата (Наклз) Лучше сделай так: Сделай юнита с способностью "Москит" и способностью видеть невидимых с маленьким радиусом.. ну например 80, а так же сделай его летающим , без атаки естественно, и в поле "Файл модели" поставь пробел, а так же убери тень у юнита... теперь С: что хочешь У: что хочешь Д: Создать 1 "ТвойМоскит" в точке "ЛюбаяТочка" для игрока "ИгрокКоторыйБудетВидетьНужногоТебеЮнита" Set "unit" = Последний созданный юнит Integer A от 1 до 16 >Боевая еденица - Shared vision(или что-то такое) - Запретить общий обзор юниту "ПоследнийСозданныйЮнит" для игрока "Игрок с индексом(IntegerA)" потом второй триггер События: Время - периодически каждые 0.10 с. Условия: Действия: Боевая еденица - Двигать юнита "unit" в точку(позиция юнита(Ну и тот твой юнит, который будет видимый только для этого игрока))Добавлено (12 Июля 2013, 15:46:45)---------------------------------------------Правда тут баг, если юнит, которого должен видеть только ты, например, подойдёт очень близко к другому не видимому юниту... то тот второй станет видимый... но мне кажется по другому ни как нельзя сделать юнита видимым только для определённого игрока... спс конечно. Но этот способ я и сам знал так как он не тригерный. Я надеялся что есть способ на 100% тригерный.
|
|
|
|
[SeKtOR] | Дата: Пятница, 12 Июля 2013, 16:42:52 | Сообщение # 5 |
Группа: Проверенные
Сообщений: 1143
Награды: 0
Репутация: 1168
Блокировки:
| Цитата (AHTOXA_2013) тогда его все игроки видить не будут даже тот который им играет. изучай
|
|
|
|
Наклз | Дата: Пятница, 12 Июля 2013, 17:07:29 | Сообщение # 6 |
10 уровень
Группа: Проверенные
Сообщений: 1431
Награды: 0
Репутация: 760
Блокировки:
| Цитата (AHTOXA_2013) тогда его все игроки видить не будут даже тот который им играет.
Если сделать так на гуи действие, Custom script: Туда написать if(GetLocalPlayer() == Player(номер_игрока)) then и туда вместо номер игрока вставить номер 1 допустим, то вот что выйдет P^S номер игрока -1, то есть если хочешь игрок3, то выйдет 3 - 1 = 2, так что цифра 2 будет равна игроку 3, а цифра 0 будет равна игроку 1, а цифра 1 будет равна игроку 2 и т.д.
Custom script: if(GetLocalPlayer() == Player(0)) then потом тут ЛЮБЫЕ ДЕЙСТВИЯ Custom script: endif
Результат, действия которые между первой и строчкой с endif произойдут ТОЛЬКО с игроком с номером который ты написал... то есть если сделать в действиях юнита прозрачным, то он станет прозрачным только для игрока 1 (в моём примере игрока1, там от тебя зависит для какого, по номеру игрока).
Но помни две вещи: 1. Юнит станет ПРОСТО ПРОЗРАЧНЫМ то есть его можно атаковать, им можно рулить, и так далее, просто уберётся модель... и всё. 2. Есть действия, которые если написать между Custom script: if(GetLocalPlayer() == Player(0)) then и Custom script: endif вызывают десинхронизацию... то есть если ты хост, то вылетят все кроме тебя, если ты не хост, то вылетишь ты... десинхронизация... это когда у всех развитие событий пошло по разному пути, то есть допустим ты создал юнита таким способом, только для игрока 1, у всех его нету, а у тебя он есть, так как могут продолжатся события? то есть он снесёт базу врагу, допустим, а у врага на компе она не снесётся так как этого юнитя для него не существует... и вар сходит с ума, и воуля - десинхронизация.
Действия выполняющиеся ТОЛЬКО для определённых игроков должны нести лишь визуальный характер... но вообще после использования ГЕТ ЛОКАЛ ПЛЕЕР лучше проверить карту в мультиплеере
|
|
|
|
Reckit | Дата: Суббота, 13 Июля 2013, 10:57:11 | Сообщение # 7 |
3 уровень
Группа: Проверенные
Сообщений: 74
Награды: 0
Репутация: 7
Блокировки:
| Мда.... вот пример: call ShowUnit(udg_переменная юнита,GetPlayerId(GetLocalPlayer())==0) Или если так сделать : local unit u=GetTriggerUnit() call ShowUnit(u,GetPlayerId(GetLocalPlayer())==0)
==0) обозначение игрока например: 0 - 1 игрок, 1 - 2 игрок и т.д.Добавлено (13 Июля 2013, 10:57:11) --------------------------------------------- Ps Это на custom script!
|
|
|
|
Наклз | Дата: Суббота, 13 Июля 2013, 11:04:10 | Сообщение # 8 |
10 уровень
Группа: Проверенные
Сообщений: 1431
Награды: 0
Репутация: 760
Блокировки:
| Разве это не выведет юнита из Hide’а
|
|
|
|
Reckit | Дата: Суббота, 13 Июля 2013, 11:08:28 | Сообщение # 9 |
3 уровень
Группа: Проверенные
Сообщений: 74
Награды: 0
Репутация: 7
Блокировки:
| Цитата (Reckit) local unit u=GetTriggerUnit() Что-то здесь не так!
|
|
|
|
Наклз | Дата: Суббота, 13 Июля 2013, 11:10:01 | Сообщение # 10 |
10 уровень
Группа: Проверенные
Сообщений: 1431
Награды: 0
Репутация: 760
Блокировки:
| пробелы может перед и после равно Я про саму функцию... что она делает...? просто нагуглить ничего русского по этому поводу не выходит, просто из того что я прочитал я понял что она из хайда выводит...
Добавлено (13 Июля 2013, 11:10:01) --------------------------------------------- и local Должно быть в саааааааааммом начале триггера, раньше любого друго-го действия.. если не JNGP
Сообщение отредактировал Наклз - Суббота, 13 Июля 2013, 11:12:11 |
|
|
|
Reckit | Дата: Суббота, 13 Июля 2013, 11:10:29 | Сообщение # 11 |
3 уровень
Группа: Проверенные
Сообщений: 74
Награды: 0
Репутация: 7
Блокировки:
| Это примера чтобы српятать юнита для определённого игрока Я сам проверял и получалось карта у меня с графическим интерфейсом для выбора героя! Очень удобная штучка! По крайней мере для меня!
|
|
|
|
Наклз | Дата: Суббота, 13 Июля 2013, 11:13:07 | Сообщение # 12 |
10 уровень
Группа: Проверенные
Сообщений: 1431
Награды: 0
Репутация: 760
Блокировки:
| Ну это не много не то.... это сделает что бы юнит как бы был для 1 игрока... но он же Цитата (AHTOXA_2013) Есть ли такой триггер который делает юнит видимым или невидимым для конкретного игрока?
|
|
|
|
Reckit | Дата: Суббота, 13 Июля 2013, 11:27:54 | Сообщение # 13 |
3 уровень
Группа: Проверенные
Сообщений: 74
Награды: 0
Репутация: 7
Блокировки:
| Цитата (Наклз) local Должно быть в саааааааааммом начале триггера, раньше любого друго-го действия..
Я знаЮ! и не обязательно она должна быть перед действием триггера которого связывает localДобавлено (13 Июля 2013, 11:18:30) --------------------------------------------- А кстати вот пример для того чтобы текст был где угодно ! Научился вчера! Дома тестируя!
local string s="Текст" local player p=Player(0) call DisplayTimedTextFromPlayer(p,0.60,-0.60,5.00,s)
Пробните вставить в кустом текст Добавлено (13 Июля 2013, 11:27:54) ---------------------------------------------
|
|
|
|
FEARKILLER | Дата: Суббота, 13 Июля 2013, 13:36:03 | Сообщение # 14 |
6 уровень
Группа: Проверенные
Сообщений: 175
Награды: 0
Репутация: 149
Блокировки:
| Цитата (Reckit) call ShowUnit(u,GetPlayerId(GetLocalPlayer())==0) Цитата (Наклз) Разве это не выведет юнита из Hide’а Это скроет указанного юнита для всех игроков, кроме красного.
Полностью скрывает юнита для указанного игрока "p", если он был не скрытым до этого. Если был скрыт, то наоборот покажет для указанного игрока. Код if GetLocalPlayer()==p then call ShowUnit(u,IsUnitHidden(u)) endif
Я вообще не скрывал так, но многие пишут что из-за этого потом десинхронизация, другие говорят что наоборот всё нормально. Вообщем кому нужно, используйте это на свой страх и риск.
Делаю из воды вино, хожу по воде...
|
|
|
|
SirNikolas | Дата: Суббота, 13 Июля 2013, 15:02:24 | Сообщение # 15 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Цитата (FEARKILLER) Я вообще не скрывал так, но многие пишут что из-за этого потом десинхронизация, другие говорят что наоборот всё нормально. Вообщем кому нужно, используйте это на свой страх и риск. Работает и так, и так. inline-вариант (call ShowUnit(u, GetLocaPlayer() == p)) скрывает для всех, кроме p, показывает для p. if-вариант (if GetLocalPlayer() != p then call ShowUnit(u, false) endif) скрывает для всех, кроме p. Для p юнит остается в том же состоянии, что и был.
Читаем здесь про функцию ShowUnit.
|
|
|
|
|
|
|
|
|
|
|