Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 3 1 2 3 ПоследняяПоследняя
Показано с 1 по 10 из 21
  1. #1
    Аватар для Gogasik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    12.02.2016
    Сообщений
    13
    Репутация:
    0 ±

    Как убрать "ВОЙТИ" (Spawn) при входе на сервер?

    Добрый ночи всем!

    Прошу не пинать, я первый день на вашем форуме (поиск пробовал, но возможно не правильно что-то, но не нашел ответа)

    Как можно убрать кнопки внизу экрана "<< >> ВОЙТИ "




    Спасибо заранее...!!!

  2. #2
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Ну, Дуймос же писал как обойти и чем это черевато, поиском не умеем пользоваться?
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Попробуй в OnPlayerRequestClass добавить
    PHP код:
    SetTimerEx("@_Skip_OnPlayerRequestClass"1false"i"playerid); 
    И куда-нибудь вне других функций
    PHP код:
    @_Skip_OnPlayerRequestClass(playerid);
    @
    _Skip_OnPlayerRequestClass(playerid) return SpawnPlayer(playerid); 


    Или же вот такой вариант:
    PHP код:
    public OnPlayerRequestClass(playeridclassid
    {
        
    SetSpawnInfo(playerid,0,0,0.0,0.0,0.0,0.0,0,0,0,0,0,0);//Тут данные можно настроить. Сам загугли параметры функции
        
    SpawnPlayer(playerid); 

    Но тогда из OnPlayerRequestClass придётся убрать все функции, типа ShowPlayerDialog и прочее (по крайней мере раньше это не давало обойти стандартный выбор скина)


    Ну или так:
    PHP код:
    public OnPlayerRequestClass(playeridclassid
    {
        
    TogglePlayerSpectating(playerid1);
        return 
    1;

    И при авторизации (при загрузке аккаунта)
    PHP код:
    TogglePlayerSpectating(playerid0); 
    В теории тоже должно помочь обойти кнопки спавна. Но на практике не проверял.


    И да, все эти обходы могут вызвать баги уже на стороне самого клиента :) Например, раньше из-за такого обхода спавнило на Groove Street в скине Сиджея, если игрок умер в транспортном средстве. Так что готовься латать дыры клиента, если что ;)
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  3. Пользователь сказал cпасибо:
    Gogasik (12.02.2016)
  4. #3
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Вот, тут учтены некоторые особенности. Координаты спавна лучше задавать в SetSpawnInfo, а не использовать SetPlayerPos в OnPlayerSpawn. Тогда не будет никаких проблем со спавном.

    Не забудь IsPlayerLogin заменить на свою функцию.

    PHP код:
    stock SpawnPlayerEx(playeridskinFloat:xFloat:yFloat:zFloat:rotation)
    {
        
    SetSpawnInfo(playerid0skinxyzrotation000000);
        
    TogglePlayerSpectating(playerid0);
    }

    forward SetClassCameraPos(playerid);
    public 
    SetClassCameraPos(playerid)
    {
        
    SetPlayerCameraPos(playerid, ...);
        
    SetPlayerCameraLookAt(playerid, ...);
    }

    public 
    OnPlayerRequestClass(playeridclassid)
    {
        
    // если игрок нажал F4 и умер, то просто спавним его
        
    if (IsPlayerLogin(playerid)) {
            
    TogglePlayerSpectating(playerid1);

            
    // лучше установить действительный скин и координаты спавна
            
    SetSpawnInfo(playerid000.00.00.00.0000000);

            
    TogglePlayerSpectating(playerid0);
            return 
    0;
        }

        
    // скрыть кнопки
        
    TogglePlayerSpectating(playerid1);

        
    // установить позицию камеры (без задержки после TogglePlayerSpectating не работает)
        
    SetTimerEx("SetClassCameraPos"2000"i"playerid);

        
    #if defined Spawn_OnPlayerRequestClass
            
    return Spawn_OnPlayerRequestClass(playeridclassid);
        
    #else
            
    return 1;
        
    #endif
    }
    #if defined _ALS_OnPlayerRequestClass
        #undef OnPlayerRequestClass
    #else
        #define _ALS_OnPlayerRequestClass
    #endif
     
    #define OnPlayerRequestClass Spawn_OnPlayerRequestClass
    #if defined Spawn_OnPlayerRequestClass
        
    forward Spawn_OnPlayerRequestClass(playeridclassid);
    #endif 
    Последний раз редактировалось ziggi; 17.02.2016 в 16:36.

  5. 5 пользователя(ей) сказали cпасибо:
    BadPawn (14.02.2016) DeimoS (12.02.2016) Gogasik (12.02.2016) wea (12.02.2016) [ForD] (12.02.2016)
  6. #4
    Аватар для Gogasik
    Пользователь

    Статус
    Оффлайн
    Регистрация
    12.02.2016
    Сообщений
    13
    Репутация:
    0 ±
    Спасибо УВАЖАЕМЫЕ ДРУЗЬЯ!

    Помог вариант с TogglePlayerSpectating(playerid, 1)

    Правда пока искал начитал и использовал вариант типа: TogglePlayerSpectating(playerid, true);

    Но в любом случае БОЛЬШОЕ СПАСИБО ЧТО ОТКЛИКНУЛИСЬ!!!!!

  7. #5
    Аватар для Alexey_Nikiforov
    Уровень знаний 1

    Статус
    Оффлайн
    Регистрация
    12.02.2016
    Сообщений
    61
    Репутация:
    1 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Вот, тут учтены некоторые особенности. Координаты спавна лучше задавать в SetSpawnInfo, а не использовать SetPlayerPos в OnPlayerSpawn. Тогда не будет никаких проблем со спавном.

    Не забудь IsPlayerLogin заменить на свою функцию.

    PHP код:
    stock SpawnPlayerEx(playeridskinFloat:xFloat:yFloat:zFloat:rotation)
    {
        
    SetSpawnInfo(playerid0skinxyzrotation000000);
        
    TogglePlayerSpectating(playerid0);
    }

    forward SetClassCameraPos(playerid);
    public 
    SetClassCameraPos(playerid)
    {
        
    SetPlayerCameraPos(playerid, ...);
        
    SetPlayerCameraLookAt(playerid, ...);
    }

    public 
    OnPlayerRequestClass(playeridclassid)
    {
        
    // если игрок нажал F3 и умер, то просто спавним его
        
    if (IsPlayerLogin(playerid)) {
            
    TogglePlayerSpectating(playerid1);

            
    // лучше установить действительный скин и координаты спавна
            
    SetSpawnInfo(playerid000.00.00.00.0000000);

            
    TogglePlayerSpectating(playerid0);
            return 
    0;
        }

        
    // скрыть кнопки
        
    TogglePlayerSpectating(playerid1);

        
    // установить позицию камеры (без задержки после TogglePlayerSpectating не работает)
        
    SetTimerEx("SetClassCameraPos"2000"i"playerid);

        
    #if defined Spawn_OnPlayerRequestClass
            
    return Spawn_OnPlayerRequestClass(playeridclassid);
        
    #else
            
    return 1;
        
    #endif
    }
    #if defined _ALS_OnPlayerRequestClass
        #undef OnPlayerRequestClass
    #else
        #define _ALS_OnPlayerRequestClass
    #endif
     
    #define OnPlayerRequestClass Spawn_OnPlayerRequestClass
    #if defined Spawn_OnPlayerRequestClass
        
    forward Spawn_OnPlayerRequestClass(playeridclassid);
    #endif 
    Если я сделаю так то это будет хуже?
    PHP код:
    public OnPlayerConnect(playerid)
    {
        
    TogglePlayerSpectating(playeridtrue);
        
    SetTimerEx("SetClassCameraPos"100"i"playerid);
        return 
    1;
    }
    public 
    SetClassCameraPos(playerid)
    {
        
    SetPlayerCameraPos(playerid,508.7362,-83.4335,998.9609);
        
    SetPlayerCameraLookAt(playerid,508.7362,-87.4335,998.9609);
    }
    public 
    OnPlayerRequestClass(playeridclassid)
    {
        if(
    IsPlayerAuthorized(playerid))
        {
            
    TogglePlayerSpectating(playeridtrue);
            
    SetSpawnInfo(playerid000.00.00.00.0000000);
            
    TogglePlayerSpectating(playeridfalse);
            return 
    0;
        }
        return 
    0;


  8. #6
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Alexey_Nikiforov Посмотреть сообщение
    Если я сделаю так то это будет хуже?
    PHP код:
    public OnPlayerConnect(playerid)
    {
        
    TogglePlayerSpectating(playeridtrue);
        
    SetTimerEx("SetClassCameraPos"100"i"playerid);
        return 
    1;
    }
    public 
    SetClassCameraPos(playerid)
    {
        
    SetPlayerCameraPos(playerid,508.7362,-83.4335,998.9609);
        
    SetPlayerCameraLookAt(playerid,508.7362,-87.4335,998.9609);
    }
    public 
    OnPlayerRequestClass(playeridclassid)
    {
        if(
    IsPlayerAuthorized(playerid))
        {
            
    TogglePlayerSpectating(playeridtrue);
            
    SetSpawnInfo(playerid000.00.00.00.0000000);
            
    TogglePlayerSpectating(playeridfalse);
            return 
    0;
        }
        return 
    0;

    Не знаю, мой вариант проверен временем и то иногда камера не устанавливается правильно. Так что проверяй сам.

  9. #7
    Аватар для Alexey_Nikiforov
    Уровень знаний 1

    Статус
    Оффлайн
    Регистрация
    12.02.2016
    Сообщений
    61
    Репутация:
    1 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Не знаю, мой вариант проверен временем и то иногда камера не устанавливается правильно. Так что проверяй сам.
    В моем варианте стрелки пропадают мгновенно и больше не появляются.
    При этом при подключении игрока не вызывается OnPlayerRequestClass, вызывается только после смерти.

  10. #8
    Аватар для Alexey_Nikiforov
    Уровень знаний 1

    Статус
    Оффлайн
    Регистрация
    12.02.2016
    Сообщений
    61
    Репутация:
    1 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Вот, тут учтены некоторые особенности. Координаты спавна лучше задавать в SetSpawnInfo, а не использовать SetPlayerPos в OnPlayerSpawn. Тогда не будет никаких проблем со спавном.

    Не забудь IsPlayerLogin заменить на свою функцию.

    PHP код:
    stock SpawnPlayerEx(playeridskinFloat:xFloat:yFloat:zFloat:rotation)
    {
        
    SetSpawnInfo(playerid0skinxyzrotation000000);
        
    TogglePlayerSpectating(playerid0);
    }

    forward SetClassCameraPos(playerid);
    public 
    SetClassCameraPos(playerid)
    {
        
    SetPlayerCameraPos(playerid, ...);
        
    SetPlayerCameraLookAt(playerid, ...);
    }

    public 
    OnPlayerRequestClass(playeridclassid)
    {
        
    // если игрок нажал F3 и умер, то просто спавним его
        
    if (IsPlayerLogin(playerid)) {
            
    TogglePlayerSpectating(playerid1);

            
    // лучше установить действительный скин и координаты спавна
            
    SetSpawnInfo(playerid000.00.00.00.0000000);

            
    TogglePlayerSpectating(playerid0);
            return 
    0;
        }

        
    // скрыть кнопки
        
    TogglePlayerSpectating(playerid1);

        
    // установить позицию камеры (без задержки после TogglePlayerSpectating не работает)
        
    SetTimerEx("SetClassCameraPos"2000"i"playerid);

        
    #if defined Spawn_OnPlayerRequestClass
            
    return Spawn_OnPlayerRequestClass(playeridclassid);
        
    #else
            
    return 1;
        
    #endif
    }
    #if defined _ALS_OnPlayerRequestClass
        #undef OnPlayerRequestClass
    #else
        #define _ALS_OnPlayerRequestClass
    #endif
     
    #define OnPlayerRequestClass Spawn_OnPlayerRequestClass
    #if defined Spawn_OnPlayerRequestClass
        
    forward Spawn_OnPlayerRequestClass(playeridclassid);
    #endif 
    Я все проверил работает не совсем корректно. Сервер думает что игрок постоянно находится на выборе класса.
    И при спавне создает бутылки, сигары и отнимает оружие.

  11. #9
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Alexey_Nikiforov Посмотреть сообщение
    Я все проверил работает не совсем корректно. Сервер думает что игрок постоянно находится на выборе класса.
    И при спавне создает бутылки, сигары и отнимает оружие.
    Ты игрока точно спавнишь функцией SpawnPlayerEx?

  12. #10
    Аватар для Alexey_Nikiforov
    Уровень знаний 1

    Статус
    Оффлайн
    Регистрация
    12.02.2016
    Сообщений
    61
    Репутация:
    1 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Ты игрока точно спавнишь функцией SpawnPlayerEx?
    Да.
    В new.pwn проверял.
    Если можешь выложи чистый код.

    Я вроде понимаю как это работает.
    При подключении игрока вызывается:
    public OnPlayerConnect(playerid)
    Следом вызывается:
    public OnPlayerRequestClass(playerid, classid).
    Который должен вернуть classid что бы выйти из режима "Выбора класса"
    У тебя же в коде используется return 0; значит после выполнения функции не чего не вернется.
    И сервер будет думать что игрок не выбрал класс.
    Едем дальше.
    Что бы кнопки перестали работать пишем тут вот так:

    PHP код:
    public OnPlayerRequestSpawn(playerid)//Вызывается когда игрок нажимает кнопку Spawn.
    {
        return 
    0;// Тут ставим 0 что бы отключить кнопку Spawn.

    Хорошо кнопки не работают.
    Что бы их вообще спрятать нам в этом поможет функция:
    TogglePlayerSpectating(playerid, 1);
    Работает как то не корректно, если не использовать таймер то не работают вот эти функции:
    SetPlayerCameraPos(playerid, ...);
    SetPlayerCameraLookAt(playerid, ...);

    Ладно хорошо все сделали вроде бы все хорошо, но у нас еще есть несчастная кнопка F4 которая принудительно после смерти игрока вызывает:
    public OnPlayerRequestClass(playerid, classid)

    И тут начинаются проблемы...
    public OnPlayerRequestClass(playerid, classid) вызывается по 3 причинам:
    1) При подключении к серверу
    2) После смерти игрока
    3) После нажатия F4.

    Искал смотрел так и не нашел решения, не пишу мод дальше пока не устраню эту проблему уже много чего перепробовал.
    Все варианты рабочие но неидеальные, везде есть свои минусы.

    Ходил на офф сайт там баг репорт завален рассказами про OnPlayerRequestClass (F4) bug но везде одно и тоже, не чего толкового.
    Где то даже ответил сам Кай что это не баг у вас не правильный код.
    http://forum.sa-mp.com/showthread.php?t=324137&page=4
    Привел бы сам пример как это отключить.

    В общем мне уже начинает надоедать это...
    Последний раз редактировалось Alexey_Nikiforov; 17.02.2016 в 18:03.

 

 
Страница 1 из 3 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •