shape1
shape2
shape3
shape4
shape7
shape8

Несколько персонажей на аккаунте(как в гта 5)


MakDag

Новичок
Пользователь
08.08.2021
6
0
0
Доброго времени суток дорогие участники форума.

Сегодня задался вопросом, возможно ли сделать систему нескольких(3-х) персонажей в CRMP?​

Вроде бы начал делать, но возникла проблема с базой данных, а именно этими персонажами.​

Проверку на логин есть, а вот подгрузка и создание этих самых персонажей - нет.​

Спасибо каждому за ответ и подсказку!​
 
Решение
На одном проекте, в разработке которого я принимал участие, тоже смастерили подобную функцию. Но в моем случае выбор дополнительных аккаунтов был по email-адресу. Грубо говоря - на скольких никах привязан один и тот же email - эти аккаунты принадлежат одному человеку, и он может менять их прямо во время игры.
Схема работы проста: ищем аккаунты, сохраняем нынешний (под которым человек играет в данный момент), меняем ник, убиваем персонажа, загружаем новый аккаунт.
Вот примерная реализация:
1) Команда смены персонажа.

if (strcmp(cmd, "/chacc", false) == 0)
{
new query[70+128];
format(query,sizeof(query),"SELECT * FROM `accounts` WHERE `Mail` = '%s' LIMIT 3",PlayerInfo[playerid][Mail],PlayerInfo[playerid][ID])...

Alexander_Batrakov

Новичок
Пользователь
13.09.2019
255
2
0
0
25
Игрок
Ну ты можешь это сделал по айди аккаунта, и отдельной переменной.

 

Alexander_Batrakov

Новичок
Пользователь
13.09.2019
255
2
0
0
25
Игрок
Так то такое можно сделать, используешь айди аккаунта с базы и при загрузке сначала выдавай диалог с выбором персонажей. 

Например 

(Выбор персонажа)

   1)Николай Александров

   2)Сергей Базарев

   3)Степан Иванов

              (Выбрать)      (Выйти)

Как то так, и после выбоора перекидывает на тот акк который выбрал чел.

Думаю что нужно еще использовать 3 переменные с таким именем 

idiplayer[3] 

Пример 

PI[playerid][idiplayer][0] 

PI[playerid][idiplayer][1]

PI[playerid][idiplayer][2]

 

Moks

Учитель русского языка
Пользователь
28.02.2014
539
7
82
0
На одном проекте, в разработке которого я принимал участие, тоже смастерили подобную функцию. Но в моем случае выбор дополнительных аккаунтов был по email-адресу. Грубо говоря - на скольких никах привязан один и тот же email - эти аккаунты принадлежат одному человеку, и он может менять их прямо во время игры.
Схема работы проста: ищем аккаунты, сохраняем нынешний (под которым человек играет в данный момент), меняем ник, убиваем персонажа, загружаем новый аккаунт.
Вот примерная реализация:
1) Команда смены персонажа.

if (strcmp(cmd, "/chacc", false) == 0)
{
new query[70+128];
format(query,sizeof(query),"SELECT * FROM `accounts` WHERE `Mail` = '%s' LIMIT 3",PlayerInfo[playerid][Mail],PlayerInfo[playerid][ID]);
mysql_tquery(1,query,"AccountsCheck","i",playerid);
return 1;
}


2) Функция, в которую приходит результат запроса из БД.
 

forward AccountsCheck(playerid);
public AccountsCheck(playerid)
{
new rows,fields,string[200],str3[100],n[24];
cache_get_data(rows,fields);
if(!rows) return ShowPlayerDialog(playerid,13200,DIALOG_STYLE_MSGBOX,"{00A2FF}Аккаунты","У вас нет дополнительных аккаунтов","Ок","Отмена");
for(new i=0;i<rows;i++)
{
cache_get_field_content(i,"Name",n,1,24);
cache_get_field_content(i,"Name",accname[playerid],1,24);
format(str3,sizeof(str3),"{00a2ff}Аккаунт: {ffffff}%s",n); strcat(str3,"\n");
strcat(string,str3);
}
ShowPlayerDialog(playerid,53,DIALOG_STYLE_LIST,"{00A2FF}Аккаунты",string,"Выбрать","Отмена");
string = ""; str3 = ""; n = "";
return 1;
}


3) Диалог выбора персонажа.
 

Код:
if(dialogid == 53)
	{
		if(!response) return 1;
		if(!strcmp(accname[listitem][playerid],Name(playerid))) return 1;
		SaveAccount(playerid);
		SetPlayerName(playerid,accname[listitem][playerid]);
		plname[playerid] = accname[listitem][playerid];
		SetPVarInt(playerid,"Logged",0);
        ForceClassSelection(playerid); //отправим игрока, который ввёл эту команду, на выбор класса
    	SetPlayerHealth(playerid,0);//убиваем его
    	new string[120+24];
    	format(string,sizeof(string),"{00a2ff}Вы переключились на Ваш дополнительный аккаунт {ff0000}%s",Name(playerid));
    	SendClientMessage(playerid,-1,string);
	}
 
Решение