PDA

Просмотр полной версии : [Вопрос] Как убрать "ВОЙТИ" (Spawn) при входе на сервер?



Gogasik
12.02.2016, 02:16
Добрый ночи всем!

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

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

http://i66.tinypic.com/j77u6g.jpg


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

$continue$
12.02.2016, 02:28
Ну, Дуймос же писал как обойти и чем это черевато, поиском не умеем пользоваться?

Попробуй в OnPlayerRequestClass добавить

SetTimerEx("@_Skip_OnPlayerRequestClass", 1, false, "i", playerid);
И куда-нибудь вне других функций

@_Skip_OnPlayerRequestClass(playerid);
@_Skip_OnPlayerRequestClass(playerid) return SpawnPlayer(playerid);

Или же вот такой вариант:

public OnPlayerRequestClass(playerid, classid)
{
SetSpawnInfo(playerid,0,0,0.0,0.0,0.0,0.0,0,0,0,0,0,0);//Тут данные можно настроить. Сам загугли параметры функции
SpawnPlayer(playerid);
}
Но тогда из OnPlayerRequestClass придётся убрать все функции, типа ShowPlayerDialog и прочее (по крайней мере раньше это не давало обойти стандартный выбор скина)

Ну или так:

public OnPlayerRequestClass(playerid, classid)
{
TogglePlayerSpectating(playerid, 1);
return 1;
}
И при авторизации (при загрузке аккаунта)

TogglePlayerSpectating(playerid, 0);
В теории тоже должно помочь обойти кнопки спавна. Но на практике не проверял.

И да, все эти обходы могут вызвать баги уже на стороне самого клиента :) Например, раньше из-за такого обхода спавнило на Groove Street в скине Сиджея, если игрок умер в транспортном средстве. Так что готовься латать дыры клиента, если что ;)

ziggi
12.02.2016, 03:00
Вот, тут учтены некоторые особенности. Координаты спавна лучше задавать в SetSpawnInfo, а не использовать SetPlayerPos в OnPlayerSpawn. Тогда не будет никаких проблем со спавном.

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



stock SpawnPlayerEx(playerid, skin, Float:x, Float:y, Float:z, Float:rotation)
{
SetSpawnInfo(playerid, 0, skin, x, y, z, rotation, 0, 0, 0, 0, 0, 0);
TogglePlayerSpectating(playerid, 0);
}

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

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

// лучше установить действительный скин и координаты спавна
SetSpawnInfo(playerid, 0, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);

TogglePlayerSpectating(playerid, 0);
return 0;
}

// скрыть кнопки
TogglePlayerSpectating(playerid, 1);

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

#if defined Spawn_OnPlayerRequestClass
return Spawn_OnPlayerRequestClass(playerid, classid);
#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(playerid, classid);
#endif

Gogasik
12.02.2016, 03:10
Спасибо УВАЖАЕМЫЕ ДРУЗЬЯ!

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

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

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

Alexey_Nikiforov
14.02.2016, 00:56
Вот, тут учтены некоторые особенности. Координаты спавна лучше задавать в SetSpawnInfo, а не использовать SetPlayerPos в OnPlayerSpawn. Тогда не будет никаких проблем со спавном.

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



stock SpawnPlayerEx(playerid, skin, Float:x, Float:y, Float:z, Float:rotation)
{
SetSpawnInfo(playerid, 0, skin, x, y, z, rotation, 0, 0, 0, 0, 0, 0);
TogglePlayerSpectating(playerid, 0);
}

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

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

// лучше установить действительный скин и координаты спавна
SetSpawnInfo(playerid, 0, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);

TogglePlayerSpectating(playerid, 0);
return 0;
}

// скрыть кнопки
TogglePlayerSpectating(playerid, 1);

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

#if defined Spawn_OnPlayerRequestClass
return Spawn_OnPlayerRequestClass(playerid, classid);
#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(playerid, classid);
#endif


Если я сделаю так то это будет хуже?

public OnPlayerConnect(playerid)
{
TogglePlayerSpectating(playerid, true);
SetTimerEx("SetClassCameraPos", 10, 0, "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(playerid, classid)
{
if(IsPlayerAuthorized(playerid))
{
TogglePlayerSpectating(playerid, true);
SetSpawnInfo(playerid, 0, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
TogglePlayerSpectating(playerid, false);
return 0;
}
return 0;
}

ziggi
14.02.2016, 02:32
Если я сделаю так то это будет хуже?

public OnPlayerConnect(playerid)
{
TogglePlayerSpectating(playerid, true);
SetTimerEx("SetClassCameraPos", 10, 0, "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(playerid, classid)
{
if(IsPlayerAuthorized(playerid))
{
TogglePlayerSpectating(playerid, true);
SetSpawnInfo(playerid, 0, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
TogglePlayerSpectating(playerid, false);
return 0;
}
return 0;
}

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

Alexey_Nikiforov
14.02.2016, 04:28
Не знаю, мой вариант проверен временем и то иногда камера не устанавливается правильно. Так что проверяй сам.
В моем варианте стрелки пропадают мгновенно и больше не появляются.
При этом при подключении игрока не вызывается OnPlayerRequestClass, вызывается только после смерти.

Alexey_Nikiforov
15.02.2016, 05:13
Вот, тут учтены некоторые особенности. Координаты спавна лучше задавать в SetSpawnInfo, а не использовать SetPlayerPos в OnPlayerSpawn. Тогда не будет никаких проблем со спавном.

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



stock SpawnPlayerEx(playerid, skin, Float:x, Float:y, Float:z, Float:rotation)
{
SetSpawnInfo(playerid, 0, skin, x, y, z, rotation, 0, 0, 0, 0, 0, 0);
TogglePlayerSpectating(playerid, 0);
}

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

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

// лучше установить действительный скин и координаты спавна
SetSpawnInfo(playerid, 0, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);

TogglePlayerSpectating(playerid, 0);
return 0;
}

// скрыть кнопки
TogglePlayerSpectating(playerid, 1);

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

#if defined Spawn_OnPlayerRequestClass
return Spawn_OnPlayerRequestClass(playerid, classid);
#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(playerid, classid);
#endif

Я все проверил работает не совсем корректно. Сервер думает что игрок постоянно находится на выборе класса.
И при спавне создает бутылки, сигары и отнимает оружие.

ziggi
16.02.2016, 23:17
Я все проверил работает не совсем корректно. Сервер думает что игрок постоянно находится на выборе класса.
И при спавне создает бутылки, сигары и отнимает оружие.

Ты игрока точно спавнишь функцией SpawnPlayerEx?

Alexey_Nikiforov
17.02.2016, 16:17
Ты игрока точно спавнишь функцией SpawnPlayerEx?
Да.
В new.pwn проверял.
Если можешь выложи чистый код.

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


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
Привел бы сам пример как это отключить.

В общем мне уже начинает надоедать это...

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

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

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

Ходил на офф сайт там баг репорт завален рассказами про OnPlayerRequestClass (F4) bug но везде одно и тоже, не чего толкового.
Где то даже ответил сам Кай что это не баг у вас не правильный код.
Привел бы сам пример как это отключить.

В общем мне уже начинает надоедать это...

Это учтено, смотри внимательнее.
Вот, немного обновил эту часть:


// если игрок нажал F4 и умер, то просто спавним его
if (IsPlayerLogin(playerid)) {
TogglePlayerSpectating(playerid, 1);
SpawnPlayerEx(playerid, 0, 0.0, 0.0, 0.0, 0.0);
return 0;
}

Alexey_Nikiforov
17.02.2016, 16:46
Щас попробую.

Alexey_Nikiforov
17.02.2016, 17:31
Щас попробую.
Вот нацарапал код.
В нем куча багов.
Я что то не так сделал?

#include <a_samp>

#define IsPlayerAuthorized(%0) player_is_authorized{%0}
#define SetPlayerAuthorized(%0,%1) player_is_authorized{%0} = %1
#define PLAYER_OFFLINE 0
#define PLAYER_ONLINE 1

new player_is_authorized[MAX_PLAYERS char];

main()
{}

public OnGameModeInit()
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp("/kill", cmdtext, true, 10) == 0)
{
SetPlayerHealth(playerid, 0.0 );
return 1;
}
else if(strcmp("/login", cmdtext, true, 10) == 0)
{
SetPlayerAuthorized(playerid, PLAYER_ONLINE);
SpawnPlayerEx(playerid, 124, 2499.8, -2129.6001, 23.5, 92.0);
return 1;
}
else if(strcmp("/spawn", cmdtext, true, 10) == 0)
{
TogglePlayerSpectating(playerid, 1);
SpawnPlayerEx(playerid, 124, 2499.8, -2129.6001, 23.5, 92.0);
return 1;
}
SendClientMessage(playerid,0xFFFFFFFF, "Неверная команда.");
return 1;
}
stock SpawnPlayerEx(playerid, skin, Float:x, Float:y, Float:z, Float:rotation)
{
SetSpawnInfo(playerid, 0, skin, x, y, z, rotation, 10, 1, 38, 999999, 34, 999999);
TogglePlayerSpectating(playerid, 0);
}
forward SetClassCameraPos(playerid);
public SetClassCameraPos(playerid)
{
SetPlayerCameraPos(playerid,1879.984252, -2908.610107, 1.996365);
SetPlayerCameraLookAt(playerid,1879.666870, -2913.487304, 0.941269);
}
public OnPlayerRequestSpawn(playerid)//Вызывается когда игрок нажимает кнопку Spawn.
{
return 0;// Тут ставим 0 что бы отключить кнопку Spawn.
}
public OnPlayerRequestClass(playerid, classid)
{
// если игрок нажал F4 и умер, то просто спавним его
if(IsPlayerAuthorized(playerid))
{
TogglePlayerSpectating(playerid, 1);
SpawnPlayerEx(playerid, 124, 2499.8, -2129.6001, 23.5, 92.0);
return 0;
}
// скрыть кнопки
TogglePlayerSpectating(playerid, 1);
// установить позицию камеры (без задержки после TogglePlayerSpectating не работает)
SetTimerEx("SetClassCameraPos", 200, 0, "i", playerid);

#if defined Spawn_OnPlayerRequestClass
return Spawn_OnPlayerRequestClass(playerid, classid);
#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(playerid, classid);
#endif

ziggi
17.02.2016, 23:47
Какие баги?
В OnPlayerRequestSpawn, наверное, нужно так написать:


public OnPlayerRequestSpawn(playerid)
{
if (IsPlayerAuthorized(playerid)) {
return 1;
}
return 0;
}

Alexey_Nikiforov
18.02.2016, 09:14
Какие баги?
В OnPlayerRequestSpawn, наверное, нужно так написать:


public OnPlayerRequestSpawn(playerid)
{
if (IsPlayerAuthorized(playerid)) {
return 1;
}
return 0;
}


Если использовать такой код.

if(IsPlayerAuthorized(playerid))
{
TogglePlayerSpectating(playerid, 1);
SpawnPlayerEx(playerid, 124, 2499.8, -2129.6001, 23.5, 92.0);
return 0;
}
Баги следующие:
1) После нажатия F4 и /kill, попадет в режим "выбор класса".
И не выходит из него.
После каждом использовании /kill создается бутылка или сигарета, рандомно.
2) Если нажать F4 и /spawn, вылазят несчастный кнопки а так как они отключены игрок зависает в режиме "выбор класса"

Если использовать такой код.

if(IsPlayerAuthorized(playerid))
{
TogglePlayerSpectating(playerid, 1);
SpawnPlayerEx(playerid, 124, 2499.8, -2129.6001, 23.5, 92.0);
return 1;
}
Баги следующие:
1) После нажатия F4 и /kill, попадет в режим "выбор класса".
После смерти отлично выходит из этого режима.
Но при выходе из режима забирает оружие и спавнит бутылку, при повтор использовании /kill(без F4) все хорошо(оружие не забирает).
2) Если нажать F4 и /spawn, вылазят несчастный кнопки а так как они отключены игрок зависает в режиме "выбор класса" (тоже самое).
3) При повторном подключении к серверу игрока сразу спавнит без авторизации (/login). ( при первом подключении через /login)

Вот эта целая куча багов. только что я не делал.
перебрал уже около 100 разных вариантов.
В каждом из них остается 1 из багов.
Не могу добиться идеального варианта.

HELP

ziggi
18.02.2016, 13:38
Идеального варианта наверное не получится, вот кое-что получше, но багов тоже хватает:



#include <a_samp>

#define IsPlayerAuthorized(%0) player_is_authorized{%0}
#define SetPlayerAuthorized(%0,%1) player_is_authorized{%0} = %1
#define PLAYER_OFFLINE 0
#define PLAYER_ONLINE 1

new player_is_authorized[MAX_PLAYERS char];

main()
{}

public OnGameModeInit()
{
return 1;
}

public OnPlayerConnect(playerid)
{
SetPlayerAuthorized(playerid, PLAYER_OFFLINE);
return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/kill", cmdtext, true, 10) == 0)
{
SetPlayerHealth(playerid, 0.0 );
return 1;
}

if (strcmp("/login", cmdtext, true, 10) == 0)
{
SetPlayerAuthorized(playerid, PLAYER_ONLINE);
TogglePlayerSpectating(playerid, 0);
return 1;
}

if (strcmp("/spawn", cmdtext, true, 10) == 0)
{
SpawnPlayer(playerid);
return 1;
}

SendClientMessage(playerid,0xFFFFFFFF, "Неверная команда.");
return 1;
}

public OnPlayerSpawn(playerid)
{
if (GetPVarInt(playerid, "is_after_f4") == 1) {
DeletePVar(playerid, "is_after_f4");
return 1;
}
// код спавна здесь
return 1;
}

public OnPlayerRequestSpawn(playerid)
{
if (IsPlayerAuthorized(playerid)) {
return 1;
}
return 0;
}

public OnPlayerRequestClass(playerid, classid)
{
TogglePlayerSpectating(playerid, 1);
SetSpawnInfo(playerid, 0, 124, 2499.8, -2129.6001, 23.5, 92.0, 10, 1, 38, 999999, 34, 999999);

if (IsPlayerAuthorized(playerid)) {
SetPVarInt(playerid, "is_after_f4", 1);
TogglePlayerSpectating(playerid, 0);
SpawnPlayer(playerid);
} else {
SetTimerEx("SetClassCameraPos", 200, 0, "i", playerid);
}

return 1;
}

forward SetClassCameraPos(playerid);
public SetClassCameraPos(playerid)
{
SetPlayerCameraPos(playerid, 1879.984252, -2908.610107, 1.996365);
SetPlayerCameraLookAt(playerid, 1879.666870, -2913.487304, 0.941269);
}

Alexey_Nikiforov
18.02.2016, 15:04
Идеального варианта наверное не получится, вот кое-что получше, но багов тоже хватает:



#include <a_samp>

#define IsPlayerAuthorized(%0) player_is_authorized{%0}
#define SetPlayerAuthorized(%0,%1) player_is_authorized{%0} = %1
#define PLAYER_OFFLINE 0
#define PLAYER_ONLINE 1

new player_is_authorized[MAX_PLAYERS char];

main()
{}

public OnGameModeInit()
{
return 1;
}

public OnPlayerConnect(playerid)
{
SetPlayerAuthorized(playerid, PLAYER_OFFLINE);
return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/kill", cmdtext, true, 10) == 0)
{
SetPlayerHealth(playerid, 0.0 );
return 1;
}

if (strcmp("/login", cmdtext, true, 10) == 0)
{
SetPlayerAuthorized(playerid, PLAYER_ONLINE);
TogglePlayerSpectating(playerid, 0);
return 1;
}

if (strcmp("/spawn", cmdtext, true, 10) == 0)
{
SpawnPlayer(playerid);
return 1;
}

SendClientMessage(playerid,0xFFFFFFFF, "Неверная команда.");
return 1;
}

public OnPlayerSpawn(playerid)
{
if (GetPVarInt(playerid, "is_after_f4") == 1) {
DeletePVar(playerid, "is_after_f4");
return 1;
}
// код спавна здесь
return 1;
}

public OnPlayerRequestSpawn(playerid)
{
if (IsPlayerAuthorized(playerid)) {
return 1;
}
return 0;
}

public OnPlayerRequestClass(playerid, classid)
{
TogglePlayerSpectating(playerid, 1);
SetSpawnInfo(playerid, 0, 124, 2499.8, -2129.6001, 23.5, 92.0, 10, 1, 38, 999999, 34, 999999);

if (IsPlayerAuthorized(playerid)) {
SetPVarInt(playerid, "is_after_f4", 1);
TogglePlayerSpectating(playerid, 0);
SpawnPlayer(playerid);
} else {
SetTimerEx("SetClassCameraPos", 200, 0, "i", playerid);
}

return 1;
}

forward SetClassCameraPos(playerid);
public SetClassCameraPos(playerid)
{
SetPlayerCameraPos(playerid, 1879.984252, -2908.610107, 1.996365);
SetPlayerCameraLookAt(playerid, 1879.666870, -2913.487304, 0.941269);
}


Нашел тут 2 бага.
1) После F4 вводишь /kill забирает оружие.
2) После F4 вводишь /spawn затем /kill появляются кнопки. ( если кнопки отключить то только перезаход).

Alexey_Nikiforov
18.02.2016, 16:36
Вот это работает нормально но код выглядит не ахти.
Можешь оптимизировать?
Если код будет нормальный можно будет почистить и прилепить, так как это очень тяжело сделать особенно новичкам на начальном этапе.


#include <a_samp>

#define IsPlayerAuthorized(%0) player_is_authorized{%0}
#define SetPlayerAuthorized(%0,%1) player_is_authorized{%0} = %1
#define PLAYER_OFFLINE 0
#define PLAYER_ONLINE 1

new player_is_authorized[MAX_PLAYERS char];

main()
{}

public OnGameModeInit()
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp("/login", cmdtext, true, 10) == 0)
{
if(!IsPlayerAuthorized(playerid))
{
SetPlayerAuthorized(playerid, PLAYER_ONLINE);
SpawnPlayerEx(playerid, 124, 2499.8, -2129.6001, 23.5, 92.0);
return 1;
}
SendClientMessage(playerid,0xFFFFFFFF, "Вы уже авторизированы.");
return 1;
}
else if(strcmp("/kill", cmdtext, true, 10) == 0)
{
if(IsPlayerAuthorized(playerid))
{
SetPlayerHealth(playerid, 0.0 );
return 1;
}
SendClientMessage(playerid,0xFFFFFFFF, "Вы не авторизированы.");
return 1;
}
else if(strcmp("/spawn", cmdtext, true, 10) == 0)
{
if(IsPlayerAuthorized(playerid))
{
SpawnPlayer(playerid);
return 1;
}
SendClientMessage(playerid,0xFFFFFFFF, "Вы не авторизированы.");
return 1;
}
SendClientMessage(playerid,0xFFFFFFFF, "Неверная команда.");
return 1;
}

forward SetClassCameraPos(playerid);
public SetClassCameraPos(playerid)
{
SetPlayerCameraPos(playerid,1879.984252, -2908.610107, 1.996365);
SetPlayerCameraLookAt(playerid,1879.666870, -2913.487304, 0.941269);
}
stock SpawnPlayerEx(playerid, skin, Float:x, Float:y, Float:z, Float:rotation)
{
SendClientMessage(playerid,0xFFFFFFFF, "SpawnPlayerEx");
TogglePlayerSpectating(playerid, 1);
SetSpawnInfo(playerid, 0, skin, x, y, z, rotation, 10, 1, 38, 999999, 34, 999999);
TogglePlayerSpectating(playerid, 0);
return 1;
}
forward ExitRequestClass(playerid);
public ExitRequestClass(playerid)
{
TogglePlayerSpectating(playerid, 1);
SendClientMessage(playerid,0xFFFFFFFF, "ExitRequestClass");
SpawnPlayer(playerid);
SpawnPlayerEx(playerid, 124, 2499.8, -2129.6001, 23.5, 92.0);
return 1;
}
public OnPlayerRequestSpawn(playerid)//Вызывается когда игрок нажимает кнопку Spawn.
{
return 0;// Тут ставим 0 что бы отключить кнопку Spawn.
}
public OnPlayerRequestClass(playerid, classid)
{
if(IsPlayerAuthorized(playerid))
{
TogglePlayerSpectating(playerid, 1);
SetTimerEx("ExitRequestClass", 100, 0, "i", playerid);
TogglePlayerSpectating(playerid, 0);
SendClientMessage(playerid,0xFFFFFFFF, "OnPlayerRequestClass");
return 1;
}
TogglePlayerSpectating(playerid, 1);
SetTimerEx("SetClassCameraPos", 200, 0, "i", playerid);
return 1;
}

vovandolg
18.02.2016, 16:44
Ну раз уж тут увидел эту функцию, то задам вопрос в этой теме,
Допустим у меня РП мод под боком лежит, нужно ли в нём юзать SetSpawnInfo или можно убрать эту функцию,
Я так понял эта функция для работы с кнопками "<< >> spawn", в коннекте прописана, вот не знаю нужна ли она там.

Alexey_Nikiforov
18.02.2016, 17:49
SetSpawnInfo задает координаты спавна и 3х слотов оружия.
Далее вызывается SpawnPlayer(playerid);

Alexey_Nikiforov
22.02.2016, 16:57
Есть еще у кого то варианты как нормально реализовать процесс регистрации!
Проблемы:
1)

Установка позиции игрока во время установки камеры.
При использовании

SetPlayerCameraPos(playerid,p_x, p_y,p_z);SetPlayerCameraLookAt(playerid,l_x, l_y, l_z);
Координаты игрока раны p_x и p_y но с другой высотой.
Не зависимо что будет прописано тут:

SetPlayerPos(playerid, x, y, z);
Она просто перестает работать видимо из за того что игрок отправляется в слежку.
И при спавне игрока не подгружается карта там где это нужно.

2)Не возможности нормально выйти и режима выбора класса.
Постоянно нужно писать какие то костыли.
Которые не всегда срабатывают с первого раза.

3) Все работает через одно место.

Кто то встречал по настоящему грамотное решение?
Или все только делают вид что большие специалисты и все пишут мод с нуля. :rtfm: :lol:

- - - Добавлено - - -

Есть варианты задать позицию игрока после использования TogglePlayerSpectating(playerid, 1);?