Вопросы по управлению камерой
#21

Quote:
Originally Posted by Serafim_sd
перед SetPlayerPos(playerid, x+0.5, y, z+1.0); поставь PutPlayerInVehicle(playerid,vehicleID,1);
Ничего не дало, он как выходил из водительского места так и выходит....
Reply
#22

а есть ли такие траблы с камерой как у Geryy - еще у кого-ньть? возможно, это единичный случай
Reply
#23

Тоже самое

как то не парюсь, трамвай боты водят, а я на крышах езжу.
Reply
#24

Quote:
Originally Posted by ^Faus
Тоже самое

как то не парюсь, трамвай боты водят, а я на крышах езжу.
у мя с трамваем тоже бывает, но я тоже не парюсь, т.к. после второго выхода из него камера норм пашет.
Reply
#25

Просто у нас скрипт посадки от damospiderman, лень писать свой.
Reply
#26

Quote:
Originally Posted by ^Faus
Просто у нас скрипт посадки от damospiderman, лень писать свой.
Я такойже скрипт брал. Дык что народ можно всетаки что-то с камерой сделать? На форумах пишут что такой баг появился на 0.3 на ранних нор. было.
Reply
#27

У тебя тоже самое случается в поезде?
Reply
#28

Нет, с поездом все нормально без всяких скриптов. А с трамваем прабла.
Reply
#29

@MX_Master
когда и где ты содился в трамвай за руль без всяких там..
тобишь дай координаты где стоит твой трамвай..
Я в последний раз содился в травмай в 0.2 и там ещё всё работало (а может ето был и скрипт?!, незнаю, неважно)
А сегодня протестил, в трамвай просто так не сядешь, ну а если вылезти то появляется баг с камерой.

@Geryy
я использовал следующее исправляя баг камеры, протестено у меня работает.

pawn Code:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    static bool:playerintram[MAX_PLAYERS];
    if(newstate==PLAYER_STATE_DRIVER || newstate==PLAYER_STATE_PASSENGER)
    {
        new vehicleid = GetPlayerVehicleID(playerid);
        if( GetVehicleModel(vehicleid)==449 )
            playerintram[playerid]=true;
    }
   
    if((oldstate==PLAYER_STATE_DRIVER || oldstate==PLAYER_STATE_PASSENGER) && (newstate==PLAYER_STATE_ONFOOT || newstate==PLAYER_STATE_SPECTATING || newstate==PLAYER_STATE_WASTED))
    {
        if( playerintram[playerid] )
            playerintram[playerid]=false,
            SetCameraBehindPlayer(playerid);
    }
    return 1;
}
Reply
#30

загрузите пустой мод, в любом месте создайте трамвай и сядтье в него. вот пример тестовый фс. загрузите его на своем локальном серве прямо в игре и посмотрите
Code:
#include <a_samp>

public OnFilterScriptInit()
{
	CreateVehicle(449,2208.1348,-1673.2509,14.3531,165.3176,5,5,100);

	SetPlayerPos(0,2208.1348,-1673.2509,17.3531);
}
если у вас низя зайти в трамвай или камера не возвращается, значит ваш мод перегружен таймерами
Reply
#31

Quote:
Originally Posted by Geryy
Quote:
Originally Posted by ^Faus
Quote:

модер: все это прекрасно, но к игровой камере отношения не имеет.

это напрямую имеют отношение к багу, который получается у автора. я написал как фиксить.
Чесно говоря кроме "ну дальше сам догадаешься, ага." больше ничего не писал
Ну ничего страшного, там и так было действительно понятно что он хотел донести мысль о респавне игрока с сохранением его параметров... А что если развить мою идею с машинкой? Кто нибудь пробывал?
Reply
#32

А что если просто следить за темой?

А не просто прыгать с пятого на первое, прочитав одну строку там и ещё две тут в конце...
и начинать придумывать колесо заново.
Решение уже было дано, и нет это не респавн игрока и даже не перезапуск игры...
Reply
#33

Привет всем, у меня была в точности такая же проблема как и автора вопроса, на путях СФ камера оставалась у трамвая, долго мучился в чем же дело и вот сделал решение проблемы:

вставлять нужно в самое начало паблика public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
функция будет быстрее срабатывать от этого, даже при том что если у вас много таймеров.


Code:
if(newkeys == KEY_SECONDARY_ATTACK) // садится в RC транспорт, поезда и трамваи
    {
        if(IsPlayerInAnyVehicle(playerid)) // фикс камеры для трамвая и других RC машин
        {
            new Float:x, Float:y, Float:z;
            GetPlayerPos(playerid, x, y, z);
            for(new veh; veh<MAX_VEHICLES; veh++)
            {
                GetVehiclePos(veh, x, y, z);
                if(IsPlayerInRangeOfPoint(playerid, 5.0, x, y, z))
                {
                    new model = GetVehicleModel(veh);
                    switch(model)
                    {
                        case 441, 449, 464, 501, 465, 564, 594: SetCameraBehindPlayer(playerid);
                    }
                }
            }
        }
        if(!IsPlayerInAnyVehicle(playerid))
        {
            new Float:x, Float:y, Float:z;
            GetPlayerPos(playerid, x, y, z);
            for(new veh; veh<MAX_VEHICLES; veh++)
            {
                GetVehiclePos(veh, x, y, z);
                if(IsPlayerInRangeOfPoint(playerid, 5.0, x, y, z))
                {
                    new model = GetVehicleModel(veh);
                    switch(model)
                    {
                        case 441, 449, 464, 501, 465, 564, 594: PutPlayerInVehicle(playerid, veh, 0);
                    }
                }
            }
        }else{
            new model = GetVehicleModel(GetPlayerVehicleID(playerid));
            switch(model)
            {
                case 441, 449, 464, 501, 465, 564, 594:
                {
                    new Float:x, Float:y, Float:z;
                    GetPlayerPos(playerid, x, y, z);
                    SetPlayerPos(playerid, x, y, z+0.5);
                    SetCameraBehindPlayer(playerid);
                }
            }
        }
    }
Reply
#34

Через 2 года от последнего сообщения, и вы думаете ваш пост актуален?
Reply
#35

Quote:

Через 2 года от последнего сообщения, и вы думаете ваш пост актуален?

Очень часто сталкиваюсь на форумах, что висит пост с проблемой 2х летней давности, и нет ответов. Лучше поздно, чем никогда, тем-более это не просто флуд, а может кому-то и пригодится
Reply
#36

Тогда надо выкладывать хороший код, тут код не оптимизирован.
  1. Если человек в машине, зачем определять его положение возле машины средствами координат?
  2. Не удалена функция определения координат игрока, видать осталось от времен когда не было IsPlayerInRangeOfPoint.
  3. Зачем записывать ID машины игрока в переменную если ты обращаешься к ней тут же и один раз?
  4. Логика страдает:
    • Сперва проверяем если игрок в машине.
    • Затем если он не в машине.
    • И потом иначе..., а первая проверка чем отличается от третей?
Reply
#37

А что если так попробывать

PHP Code:
Vehicle[MAX_PLAYERS];
public 
OnPlayerStateChange(playeridnewstateoldstate)
          {
  new 
vid;
  if(
newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER){ 
    
     
vid GetPlayerVehicleID(playerid);
     
Vehicle[playerid] = vid;
   return 
1;
   }
   else
   if(
oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER){ 
    if(
GetVehicleModel(Vehicle[playerid]) == 449SetCameraBehindPlayer(playerid);
    
Vehicle[playerid] = -1;
   return 
1;
}
return 
1;

P.S Щас проверил всё работает!Камера переключается на игрока!
Reply
#38

Quote:

Тогда надо выкладывать хороший код, тут код не оптимизирован.

Мне честно говоря лень вникать в код... Поэтому заранее считал его не индусским =)
Reply
#39

pawn Code:
#define D_TRAM 449

new last_vehicle[MAX_PLAYERS];

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == 2)
    {
        last_vehicle[playerid] = GetVehicleModel(GetPlayerVehicleID(playerid));
    }
    if(newstate == 1 && oldstate == 2 && last_vehicle[playerid] == D_TRAM)
    {
        SetCameraBehindPlayer(playerid);
    }
    return 1;
}
Reply


Forum Jump:


Users browsing this thread: 5 Guest(s)