[Вопрос] 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 примерно так, если логически
Сообщение отредактировал 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, 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 Просто теоретически, конструкция if(GetLocalPlayer()==?) не должна понадобиться для настройки камер всех игроков FatalBlade, у вас плохо развита логика, это трудно обьяснить, но как я уже говорил, суть в том что на компьютере каждого игрока будет разное значение у возвращаемого результата, а значить 12 переменных не нкжны, ибо они и так будут в таком порядке:zplayer1 у первого игрока xplayer2 у второго! тебе нужна лишь 1 переменная, и ей ты присваеваешь позицию камеры, и у каждого компа эта позиция будет разная... Это как MUI наоборот, подумай над этим
|
|
|
|
Ty3uK | Дата: Понедельник, 21 Ноября 2011, 07:28:02 | Сообщение # 12 |
Группа: Ветераны
Сообщений: 6125
Награды: 2
Репутация: 1617
Блокировки:
| А зачем цикл? О.о локалплеер- это все игроки. Соответственно, например, call DisplayTextToPlayer(GetLocalPlayer(), 0., 0., "text") выведет текст для всех. А ты проходишься циклом по игрокам и чекаешь, находится ли игрок в группе "все игроки". Это глупо
|
|
|
|
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
Блокировки:
| Если тебе не надо потом использовать это значение, то не проще ли его сохранить в хэш, чем использовать отдельную глобалку?
|
|
|
|
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 значений)
|
|
|
|
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
Блокировки:
| Спс всем Работает
|
|
|
|