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


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Невидимый юнит для игрока (Тригер)
Невидимый юнит для игрока
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)
---------------------------------------------
trollface

 

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.


 

Форум о Warcraft 3 » Раздел для картостроителей » Вопросы по картостроению » Невидимый юнит для игрока (Тригер)
  • Страница 1 из 1
  • 1
Поиск:

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