Сейчас 19:55:38 Суббота, 28 января, 2023 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] LocalPlayer (Как Заставить работать на компьютере игрока?)
[Вопрос] LocalPlayer
kalmarrrДата: Среда, 16 Ноября 2011, 12:50:48 | Сообщение # 1
1 уровень
Группа: Пользователи
Сообщений: 18
Награды: 0
Репутация: 0
Блокировки:
Господа, есть функции типа Camera Field Of Current Camera, но нет привязки к игроку, т. е. нельзя посмотреть параметры камеры каждого отдельного игрока. Как решить эту проблему?
 

Ty3uKДата: Среда, 16 Ноября 2011, 13:04:33 | Сообщение # 2
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Code
local real c
if GetLocalPlayer() == Player(1) then
      set c = GetCameraField(camera)
endif

примерно так, если логически


╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек


Сообщение отредактировал Ty3uK - Среда, 16 Ноября 2011, 13:04:49
 

SirNikolasДата: Среда, 16 Ноября 2011, 13:11:30 | Сообщение # 3
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Code
local real r = .0
if GetLocalPlayer() == Player(0) then
     set r = <Get camera field>
endif
//Нужные действия
set r = .0
Если же нужно сделать одинаковые действия для каждого игрока, просто не нужно думать об этом.
Code
call <Set camera field>(<Get camera field> + 50.)

P. S. Точные названия функций не помню, поэтому пишу так.


 

FatalBladeДата: Воскресенье, 20 Ноября 2011, 12:28:44 | Сообщение # 4
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Это случайно не то что мне нужно было вчера, в вопросе о камере?
Видать, с помощью GetLocalPlayer() можно вычислить координату Z (относительно вектора Z) для каждого отдельного игрока?
Типа вот так:
Code
local real c
if GetLocalPlayer() == Player(1) then
         set c = GetCameraTargetPositionZ()
endif


Это даёт местоположение цели камеры по оси Z ДЛЯ ИГРОКА НОМЕР 1 ???




Сообщение отредактировал FatalBlade - Воскресенье, 20 Ноября 2011, 12:40:27
 

HexingДата: Воскресенье, 20 Ноября 2011, 15:41:32 | Сообщение # 5
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
нет, для игрока номер 2
Player(0) - игрок 1
...
Player(11) - игрок 12
тоесть индекс + 1


 

FatalBladeДата: Воскресенье, 20 Ноября 2011, 15:48:34 | Сообщение # 6
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Hexing)
нет, для игрока номер 2
Player(0) - игрок 1
...
Player(11) - игрок 12
тоесть индекс + 1

Ок... идея в том что я могу таким образом вычислить местоположение цели камеры по оси Z для определённого игрока?

Code

local real Zplayer1
local real Zplayer2
local real Zplayer3

if GetLocalPlayer() == Player(0) then
          set Zplayer1 = GetCameraTargetPositionZ()
endif  
if GetLocalPlayer() == Player(1) then
          set Zplayer2 = GetCameraTargetPositionZ()
endif  
if GetLocalPlayer() == Player(2) then
          set Zplayer3 = GetCameraTargetPositionZ()
endif

итд...


 

HexingДата: Воскресенье, 20 Ноября 2011, 16:02:16 | Сообщение # 7
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
какбы это не нужно, делаешь теже вычисления, просто результаты у разных игркоов разные будут...
тобишь это бесполезная задача, если тебе нужно сделать для всех игроков, вмело делай без GetLocalPlayer(), GetCameraTargetPositionZ() возвратит результат для игрока компа, на котором выполняется этот код, тоесть у разных игроков результат разный будет - это тебе на руку


 

FatalBladeДата: Воскресенье, 20 Ноября 2011, 16:15:25 | Сообщение # 8
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Но мне же потом надо использовать эти результаты. Значит надо для каждого игрока свою переменную. Нет?

И вообще, я правильно понял: GetLocalPlayer() в условии, выполняет любые действия только для конкретного игрока?


 

Mep3aB4uKДата: Воскресенье, 20 Ноября 2011, 17:06:36 | Сообщение # 9
9 уровень
Группа: Проверенные
Сообщений: 1019
Награды: 0
Репутация: 135
Блокировки:
FatalBlade, То что выше лучше решить цыклом...
Code
local integer l=0
local array Zplayer
loop
        exitwhen l>11
        if GetLocalPlayer() == Player(l) then
            set Zplayer[l]=0.
            set Zplayer[l] = GetCameraTargetPositionZ()
            set l=l+1
        endif    
endloop


Сообщение отредактировал Mep3aB4uK - Воскресенье, 20 Ноября 2011, 17:07:09
 

FatalBladeДата: Воскресенье, 20 Ноября 2011, 17:13:07 | Сообщение # 10
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Mep3aB4uK)
FatalBlade, То что выше лучше решить цыклом...

Не возможно по 1 простой причине. Для каждой переменной я создаю триггер с событием TriggerRegisterVariableEvent, то есть он отлавливает реальную НЕ МАССИВНУЮ переменную. А раз так нужно 10 глобальных переменных, и соответственно 10 триггеров с таким же событием но другой отлавливаемой переменной. А их в одном цикле не обьеденишь, это не массив. Я понимаю что это сложная структура, ну зато идеальная и лучше я пока не придумал :)


 

HexingДата: Понедельник, 21 Ноября 2011, 05:45:04 | Сообщение # 11
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Quote (FatalBlade)
TriggerRegisterVariableEvent,

nono
Quote (FatalBlade)
ocal integer l=0
local array Zplayer
loop
exitwhen l>11
if GetLocalPlayer() == Player(l) then
set Zplayer[l]=0.
set Zplayer[l] = GetCameraTargetPositionZ()
set l=l+1
endif
endloop

nono
Просто теоретически, конструкция if(GetLocalPlayer()==?) не должна понадобиться для настройки камер всех игроков
FatalBlade, у вас плохо развита логика, это трудно обьяснить, но как я уже говорил, суть в том что на компьютере каждого игрока будет разное значение у возвращаемого результата, а значить 12 переменных не нкжны, ибо они и так будут в таком порядке:zplayer1 у первого игрока xplayer2 у второго!
тебе нужна лишь 1 переменная, и ей ты присваеваешь позицию камеры, и у каждого компа эта позиция будет разная...
Это как MUI наоборот, подумай над этим


 

Ty3uKДата: Понедельник, 21 Ноября 2011, 07:28:02 | Сообщение # 12
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
А зачем цикл? О.о локалплеер- это все игроки. Соответственно, например, call DisplayTextToPlayer(GetLocalPlayer(), 0., 0., "text") выведет текст для всех. А ты проходишься циклом по игрокам и чекаешь, находится ли игрок в группе "все игроки". Это глупо

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

FatalBladeДата: Понедельник, 21 Ноября 2011, 07:44:03 | Сообщение # 13
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (Hexing)
тебе нужна лишь 1 переменная, и ей ты присваеваешь позицию камеры, и у каждого компа эта позиция будет разная...

А дальше как? Ведь потом мне надо использовать присвоенное значение. У меня это вот так.

Code
function Trig_Camera_0_Down_Actions takes nothing returns nothing
     set udg_Cam[1] = 1800.00 + ( 2.00 * ( 500.00 - udg_zplayer1 ) )
endfunction

//===========================================================================
function InitTrig_Camera_0_Down takes nothing returns nothing
     set gg_trg_Camera_0_Down = CreateTrigger(  )
     call TriggerRegisterVariableEvent( gg_trg_Camera_0_Down, "udg_zplayer1", LESS_THAN, 500.00 )
     call TriggerAddAction( gg_trg_Camera_0_Down, function Trig_Camera_0_Down_Actions )
endfunction


Code

function Trig_Camera_Actions takes nothing returns nothing
     call SetCameraFieldForPlayer( Player(0), CAMERA_FIELD_TARGET_DISTANCE, udg_Cam[1], 0.40 )

     if GetLocalPlayer() == Player(0) then
           set udg_zplayer1 = GetCameraTargetPositionZ()
     endif   
endfunction

//===========================================================================
function InitTrig_Camera takes nothing returns nothing
     set gg_trg_Camera = CreateTrigger(  )
     call TriggerRegisterTimerEventPeriodic( gg_trg_Camera, 0.05 )
     call TriggerAddAction( gg_trg_Camera, function Trig_Camera_Actions )
endfunction


 

Ty3uKДата: Понедельник, 21 Ноября 2011, 07:48:28 | Сообщение # 14
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Если тебе не надо потом использовать это значение, то не проще ли его сохранить в хэш, чем использовать отдельную глобалку?

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

FatalBladeДата: Понедельник, 21 Ноября 2011, 07:51:00 | Сообщение # 15
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
То есть потом это полученное значение становится частью формулы, а результат формулы становится CAMERA_FIELD_TARGET_DISTANCE.
А CAMERA_FIELD_TARGET_DISTANCE должна быть указана для конкретного игрока.

Так что же если у меня получается если делать как ты предложил:
Code

     call SetCameraFieldForPlayer( Player(0), CAMERA_FIELD_TARGET_DISTANCE, udg_Cam[1], 0.40 )
     call SetCameraFieldForPlayer( Player(1), CAMERA_FIELD_TARGET_DISTANCE, udg_Cam[2], 0.40 )
     call SetCameraFieldForPlayer( Player(2), CAMERA_FIELD_TARGET_DISTANCE, udg_Cam[3], 0.40 )
     call SetCameraFieldForPlayer( Player(3), CAMERA_FIELD_TARGET_DISTANCE, udg_Cam[4], 0.40 )
     call SetCameraFieldForPlayer( Player(4), CAMERA_FIELD_TARGET_DISTANCE, udg_Cam[5], 0.40 )
     call SetCameraFieldForPlayer( Player(5), CAMERA_FIELD_TARGET_DISTANCE, udg_Cam[6], 0.40 )
     call SetCameraFieldForPlayer( Player(6), CAMERA_FIELD_TARGET_DISTANCE, udg_Cam[7], 0.40 )
     call SetCameraFieldForPlayer( Player(7), CAMERA_FIELD_TARGET_DISTANCE, udg_Cam[8], 0.40 )
     call SetCameraFieldForPlayer( Player(8), CAMERA_FIELD_TARGET_DISTANCE, udg_Cam[9], 0.40 )
     call SetCameraFieldForPlayer( Player(9), CAMERA_FIELD_TARGET_DISTANCE, udg_Cam[10], 0.40 )


где все ячейки массива udg_Cam будут одинаковы.

Добавлено (21 Ноябрь 2011, 07:51:00)
---------------------------------------------

Quote (Ty3uK)
Если тебе не надо потом использовать это значение

Надо использовать (см. пост #13)


 

HexingДата: Понедельник, 21 Ноября 2011, 08:02:01 | Сообщение # 16
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
блин... я тебе в 3-ий раз говорю:
НЕНУЖНО 12 ПЕРЕМЕННЫХ
вместо SetCameraFieldForPlayer используй SetCameraField

ВСЁ доканал ты меня, не буду больше обьяснять, читай предыдущие посты


 

Ty3uKДата: Понедельник, 21 Ноября 2011, 08:04:06 | Сообщение # 17
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
Окей, если так хочется, ты можешь еще и массив создать. Тебе правильно говорят- не надо 12 переменных. Сохраняй в хэш на хэндл триггера и не парься (если уж хочется сохранять 12 значений)

╭∩╮(︶︿︶)╭∩╮
"Ульта Тайда мне в жопу!" © k0fe1n
Статьи: MUI-1|MUI-2|Шрифт
Полезности: JASP|JNGP|Уголок библиотек
 

SirNikolasДата: Понедельник, 21 Ноября 2011, 13:17:47 | Сообщение # 18
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Code
function SetPlayerCamera takes nothing returns nothing
     local real r = GetCameraTargetPositionZ()
     if r < 500. then
         set r = 2800. - r - r
     endif
     call SetCameraField(CAMERA_FIELD_TARGET_DISTANCE, r, .4)
endfunction
Попробуй так. Правильность не гарантирую.


 

HexingДата: Вторник, 22 Ноября 2011, 13:41:27 | Сообщение # 19
10 уровень
Группа: Проверенные
Сообщений: 1645
Награды: 1
Репутация: 432
Блокировки:
Quote (SirNikolas)
Попробуй так. Правильность не гарантирую.

вот об этом и я говорил


 

FatalBladeДата: Вторник, 22 Ноября 2011, 15:47:38 | Сообщение # 20
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Quote (SirNikolas)
Попробуй так. Правильность не гарантирую.

Событие - периодический таймер 0.05 секунды?


 

SirNikolasДата: Вторник, 22 Ноября 2011, 17:48:48 | Сообщение # 21
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Сделай 0.1 секунды. Должно хватить.

 

FatalBladeДата: Среда, 23 Ноября 2011, 20:36:58 | Сообщение # 22
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
Спс всем
Работает :)


 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » [Вопрос] LocalPlayer (Как Заставить работать на компьютере игрока?)
  • Страница 1 из 1
  • 1
Поиск:

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