Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Как запретить игроку спавнится до его авторизации? - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Pawn ]
Как запретить игроку спавнится до его авторизации?

#1
Пользователь офлайн   Sourire_Garcia 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Проблема такая, я сделал этот самый запрет на спавн сделав проверку в OnPlayerRequestClass():

Цитата

public OnPlayerRequestClass(playerid, classid) {
SetPlayerPos(playerid, -2815.8665, -1520.9637, 140.6438);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
if(playerInfo[playerid][welcomeStatus] == 0) {
for(new i; i < 100; i += 1) {
SendClientMessage(playerid, -1, "|");
}
SendClientMessage(playerid, -1, "Приветствуем на Fast & Furious Server! :)");
playerInfo[playerid][welcomeStatus] = 1;
playerInfo[playerid][spawn] = 0;

new playerName[MAX_PLAYER_NAME], folder[MAX_PLAYER_NAME + 13]; GetPlayerName(playerid, playerName, MAX_PLAYER_NAME);
format(folder, MAX_PLAYER_NAME + 13, "/players/%s.ini", playerName);
new INI = ini_openFile(folder); if(INI != INI_OK) {
SendClientMessage(playerid, -1, "Ты впервые на этом сервере. Придумай пароль для аккаунта..");
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Окно ввода", "Придумай пароль:", "Ввод", "Выход");
} else {
ini_getString(INI, "pass", playerInfo[playerid][pass], 13);
SendClientMessage(playerid, -1, "Привет! Вижу ты уже играл у нас? Вводи пароль!");
ShowPlayerDialog(playerid, 3, DIALOG_STYLE_INPUT, "Окно ввода", "Введи пароль:", "Ввод", "Выход");
}
}
if(playerInfo[playerid][spawn] == 1) {
return true;
} else {
return false;
}
}


Все получилось кроме одной штукенции. Нужно нажать >> или <<, я так понимаю для того чтобы в паблик зайти и обновить return, иначе игрока не заспавнить. Как это исправить? Как сделать так чтобы он спавнился сам без самостоятельного вызова паблика кнопками? Я просто новичок и не сильно разбираюсь. Код писал весь сам, всё что нужно объясню. Вот еще код:

Цитата

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
if(dialogid == 1) {
if(strlen(inputtext) < 6 || strlen(inputtext) > 12) {
SendClientMessage(playerid, -1, "Введённый пароль содержит меньше 6 или больше 12 символов!");
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Окно ввода", "Придумай пароль, не менее 6 и не более 12 символов!", "Ввод", "Выход");
if(!response) {
Kick(playerid);
}
} else {
if(!response) {
Kick(playerid);
}
new pass_string[13]; format(pass_string, 13, "%s", inputtext);
playerInfo[playerid][pass] = pass_string; SendClientMessage(playerid, -1, "Ты успешно установил(а) пароль для аккаунта!");
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_MSGBOX, "Окно выбора", "Выбери свой пол:", "Мужской", "Женский");
}
}
if(dialogid == 2) {
new playerName[MAX_PLAYER_NAME], folder[MAX_PLAYER_NAME + 13]; GetPlayerName(playerid, playerName, MAX_PLAYER_NAME);
format(folder, MAX_PLAYER_NAME + 13, "/players/%s.ini", playerName);

if(response) {
SendClientMessage(playerid, -1, "Ты выбрал мужской пол.");
playerInfo[playerid][gender] = 1;
playerInfo[playerid][spawn] = 1;

new INI = ini_createFile(folder);
ini_setString(INI, "pass", playerInfo[playerid][pass]);
ini_setInteger(INI, "money", 5000);
ini_setInteger(INI, "skin", 123);
ini_setInteger(INI, "score", 0);
ini_setInteger(INI, "deaths", 0);
ini_setInteger(INI, "kills", 0);
ini_setInteger(INI, "vehicle", 0);
ini_setInteger(INI, "admin", 0);
ini_closeFile(INI);

INI = ini_openFile(folder);
ini_getInteger(INI, "money", playerInfo[playerid][money]);
ini_getInteger(INI, "skin", playerInfo[playerid][skin]);
ini_getInteger(INI, "score", playerInfo[playerid][score]);
ini_getInteger(INI, "deaths", playerInfo[playerid][deaths]);
ini_getInteger(INI, "kills", playerInfo[playerid][kills]);
ini_getInteger(INI, "vehicle", playerInfo[playerid][vehicle]);
ini_getInteger(INI, "admin", playerInfo[playerid][admin]);
ini_closeFile(INI);

SpawnPlayer(playerid);
GivePlayerMoney(playerid, playerInfo[playerid][money]);
SetPlayerSkin(playerid, playerInfo[playerid][skin]);
}
else if(!response) {
SendClientMessage(playerid, -1, "Ты выбрала женский пол.");
playerInfo[playerid][gender] = 0;
playerInfo[playerid][spawn] = 1;

new INI = ini_createFile(folder);
ini_setString(INI, "pass", playerInfo[playerid][pass]);
ini_setInteger(INI, "money", 5000);
ini_setInteger(INI, "skin", 123);
ini_setInteger(INI, "score", 0);
ini_setInteger(INI, "deaths", 0);
ini_setInteger(INI, "kills", 0);
ini_setInteger(INI, "vehicle", 0);
ini_setInteger(INI, "admin", 0);
ini_closeFile(INI);

INI = ini_openFile(folder);
ini_getInteger(INI, "money", playerInfo[playerid][money]);
ini_getInteger(INI, "skin", playerInfo[playerid][skin]);
ini_getInteger(INI, "score", playerInfo[playerid][score]);
ini_getInteger(INI, "deaths", playerInfo[playerid][deaths]);
ini_getInteger(INI, "kills", playerInfo[playerid][kills]);
ini_getInteger(INI, "vehicle", playerInfo[playerid][vehicle]);
ini_getInteger(INI, "admin", playerInfo[playerid][admin]);
ini_closeFile(INI);

SpawnPlayer(playerid);
GivePlayerMoney(playerid, playerInfo[playerid][money]);
SetPlayerSkin(playerid, playerInfo[playerid][skin]);
}
}
if(dialogid == 3) {
if(strcmp(inputtext, playerInfo[playerid][pass], false, 13) || inputtext[0] == '\0') {
SendClientMessage(playerid, -1, "Ты подозреваешься в попытке взлома!");
new string[256], playerName[MAX_PLAYER_NAME]; GetPlayerName(playerid, playerName, MAX_PLAYER_NAME);
format(string, 256, "%s кикнут за подозрение в попытке взлома.", playerName);
SendClientMessageToAll(-1, string);
Kick(playerid);
} else {
if(!response) {
Kick(playerid);
}
playerInfo[playerid][spawn] = 1;

SendClientMessage(playerid, -1, "Приятной игры! <3");
new playerName[MAX_PLAYER_NAME], folder[MAX_PLAYER_NAME + 13]; GetPlayerName(playerid, playerName, MAX_PLAYER_NAME);
format(folder, MAX_PLAYER_NAME + 13, "/players/%s.ini", playerName);
new INI = ini_openFile(folder);
ini_getInteger(INI, "money", playerInfo[playerid][money]);
ini_getInteger(INI, "skin", playerInfo[playerid][skin]);
ini_getInteger(INI, "score", playerInfo[playerid][score]);
ini_getInteger(INI, "deaths", playerInfo[playerid][deaths]);
ini_getInteger(INI, "kills", playerInfo[playerid][kills]);
ini_getInteger(INI, "vehicle", playerInfo[playerid][vehicle]);
ini_getInteger(INI, "admin", playerInfo[playerid][admin]);
ini_closeFile(INI);

SpawnPlayer(playerid);
GivePlayerMoney(playerid, playerInfo[playerid][money]);
SetPlayerSkin(playerid, playerInfo[playerid][skin]);
playerInfo[playerid][score] = playerInfo[playerid][kills] - playerInfo[playerid][deaths];
SetPlayerScore(playerid, playerInfo[playerid][score]);
}
}
return 1;
}

Сообщение отредактировал Sourire_Garcia: 22 мая 2020 - 12:10

0

#2
Пользователь офлайн   habarov228 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Чтобы убрать работу этих самых кнопок можешь просто в public OnPlayerRequestSpawn поставить return 0;

Чтобы заспавнить игрока самому советую использовать SpawnPlayer(playerid);

Но перед ним укажи координаты вирутальный мир и интерьер

SetPlayerInterior(playerid,id интерьера);
SetPlayerVirtualWorld(playerid,id виртуального мира);
SetPlayerPos(playerid,x,y,z);

Сначала это, потом

SpawnPlayer(playerid);

SetPlayerInterior(playerid,id интерьера);
SetPlayerVirtualWorld(playerid,id виртуального мира);
SetPlayerPos(playerid,x,y,z);
SpawnPlayer(playerid);

0

#3
Пользователь офлайн   Sourire_Garcia 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Сделал всё как ты сказал, кнопки не работают, SpawnPlayer() после авторизации категорически отказывается спавнить.

Просмотр сообщенияhabarov228 (22 мая 2020 - 12:29) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

0

#4
Пользователь офлайн   habarov228 

  • Новичок
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияSourire_Garcia (22 мая 2020 - 13:11) писал:

Сделал всё как ты сказал, кнопки не работают, SpawnPlayer() после авторизации категорически отказывается спавнить.


Не стоит TogglePlayerSpectating(playerid,0); ?

Если не стоит делай под себя.

SetPlayerPos(x,y,z) - координаты меняй на свои по x y z или по твоим переменным которые хранят координаты.

И после этого спавнишь игрока SpawnPlayer(playerid);

Думаю с интерьером и виртуальным миром ты разобрался. Не составит труда поменять одну цифру.

Покажи свой код в Авторизации

Сообщение отредактировал habarov228: 22 мая 2020 - 13:41

0

#5
Пользователь офлайн   Shvider 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Я не знаю, кто тебе там что сказал, но это ужас.

Нажми сюда и смотри внимательно
0

#6
Пользователь офлайн   Sourire_Garcia 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Спасибо)

Просмотр сообщенияShvider (22 мая 2020 - 15:35) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика