PDA

Просмотр полной версии : [Вопрос] Как сохранять скин(new.pwn)



denis01
04.06.2016, 10:09
Здравствуйте многоуважаемые пользователи Pro-Pawn.
Пишу мод new.pwn и возник вопрос, как сохранять скин при выборе персонажа??

Создаю его в enum:

pSkin

Далее сохраняю его в UPDATE

А вот после регистрации меня направляет на выбор скина я выбираю далее нажимаю Save и вот в этом действие как сохранять скин который я выбрал???? и записывать его в pSkin??

Wise
04.06.2016, 10:26
Когда выбрал скин:

pInfo[playerid][pSkin] = GetPlayerSkin(playerid);
И банальное сохранение аккаунта сделать.
Также не забудь добавить, чтобы после авторизации скин снова выдавался игроку.

SetPlayerSkin(playerid, pInfo[playerid][pSkin]);

denis01
04.06.2016, 16:15
Делаю так:

if(GetPlayerMenu(playerid) == bomj[0])
{
switch(row)
{
case 0:
{
SetPVarInt(playerid, "SelectSkin", GetPVarInt(playerid, "SelectSkin") +1);
if(GetPVarInt(playerid, "SelectSkin") >= 7) SetPVarInt(playerid, "SelectSkin", 0);
SetPlayerSkin(playerid,SkinMen[GetPVarInt(playerid, "SelectSkin")]);
ShowMenuForPlayer(bomj[0],playerid);
}
case 1:
{
SetPVarInt(playerid, "SelectSkin", GetPVarInt(playerid, "SelectSkin") -1);
if(GetPVarInt(playerid, "SelectSkin") <= 0) SetPVarInt(playerid, "SelectSkin", 12);
SetPlayerSkin(playerid,SkinMen[GetPVarInt(playerid, "SelectSkin")]);
ShowMenuForPlayer(bomj[0],playerid);
}
case 2:
{
PlayerInfo[playerid][pSkin] = GetPlayerSkin(playerid); // Тут узнаю какой скин и далее сохраняю в UPDATE при выходе игрока (OnPlayerDisconnect)
DeletePVar(playerid, "SelectCharPlace");
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
TogglePlayerControllable(playerid, 1);
pInChangeSkin[playerid] = 0;
SpawnPlayer(playerid);
}
}
}

Но еще когда я выбираю case 2: у меня спавнится со скином CJ как сделать чтобы он выбирал скин от перебора case 0:, case 1:

Wise
04.06.2016, 16:27
Делаю так:

if(GetPlayerMenu(playerid) == bomj[0])
{
switch(row)
{
case 0:
{
SetPVarInt(playerid, "SelectSkin", GetPVarInt(playerid, "SelectSkin") +1);
if(GetPVarInt(playerid, "SelectSkin") >= 7) SetPVarInt(playerid, "SelectSkin", 0);
SetPlayerSkin(playerid,SkinMen[GetPVarInt(playerid, "SelectSkin")]);
ShowMenuForPlayer(bomj[0],playerid);
}
case 1:
{
SetPVarInt(playerid, "SelectSkin", GetPVarInt(playerid, "SelectSkin") -1);
if(GetPVarInt(playerid, "SelectSkin") <= 0) SetPVarInt(playerid, "SelectSkin", 12);
SetPlayerSkin(playerid,SkinMen[GetPVarInt(playerid, "SelectSkin")]);
ShowMenuForPlayer(bomj[0],playerid);
}
case 2:
{
PlayerInfo[playerid][pSkin] = GetPlayerSkin(playerid); // Тут узнаю какой скин и далее сохраняю в UPDATE при выходе игрока (OnPlayerDisconnect)
DeletePVar(playerid, "SelectCharPlace");
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
TogglePlayerControllable(playerid, 1);
pInChangeSkin[playerid] = 0;
SpawnPlayer(playerid);
}
}
}

Но еще когда я выбираю case 2: у меня спавнится со скином CJ как сделать чтобы он выбирал скин от перебора case 0:, case 1:

В OnPlayerSpawn тот же код:

SetPlayerSkin(playerid, pInfo[playerid][pSkin]);

denis01
04.06.2016, 16:30
Просто в OnPlayerSpawn без каких либо проверок типо этого pInChangeSkin?

Wise
04.06.2016, 16:31
Просто в OnPlayerSpawn без каких либо проверок типо этого pInChangeSkin?

Да.

denis01
04.06.2016, 16:31
а В INSERT INTO надо ставлять ( `skin` ) VALUES ( '%d' ) pInfo[playerid][pSkin]??
Он у меня вызывается до выбора скина

Wise
04.06.2016, 16:33
а В INSERT INTO надо ставлять ( `skin` ) VALUES ( '%d' ) pInfo[playerid][pSkin]??
Он у меня вызывается до выбора скина

Скорее всего это записывается аккаунт в базу данных (ник и пароль), а так, если у тебя есть сохранение, то нет смысла записывать здесь скин.

denis01
04.06.2016, 16:33
Еще вопрос а почему у меня перебор идёт с скина CJ получается когда я перебираю скины выдаётся сперва скин CJ пот когда перебираю уже идут остальные скины а скин CJ исчезает

Wise
04.06.2016, 16:34
Еще вопрос а почему у меня перебор идёт с скина CJ получается когда я перебираю скины выдаётся сперва скин CJ пот когда перебираю уже идут остальные скины а скин CJ исчезает

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

denis01
04.06.2016, 20:26
Еще вопрос почему когда я захожу(Авторизация) то у меня выдаёт скин CJ а не тот скин который был выбран при регистрации??

Wise
04.06.2016, 20:37
Еще вопрос почему когда я захожу(Авторизация) то у меня выдаёт скин CJ а не тот скин который был выбран при регистрации??

Загрузка переменной pSkin есть?

denis01
04.06.2016, 20:40
Не понял можно по подробнее

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


static query_string[] = "SELECT * FROM `accounts` WHERE `name` = '%e'";
new query_str[sizeof(query_string)+(-2+MAX_PLAYER_NAME)+1];
mysql_format(MySQL, query_str, sizeof(query_str), query_string, pInfo[playerid][pName]);
mysql_tquery(MySQL, query_str, "OnPlayerLogin", "d", playerid);


public OnPlayerLogin(playerid)
{
TogglePlayerSpectating(playerid, 0);
SpawnPlayer(playerid);
return 1;
}

Wise
04.06.2016, 20:50
Не понял можно по подробнее

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


static query_string[] = "SELECT * FROM `accounts` WHERE `name` = '%e'";
new query_str[sizeof(query_string)+(-2+MAX_PLAYER_NAME)+1];
mysql_format(MySQL, query_str, sizeof(query_str), query_string, pInfo[playerid][pName]);
mysql_tquery(MySQL, query_str, "OnPlayerLogin", "d", playerid);


public OnPlayerLogin(playerid)
{
TogglePlayerSpectating(playerid, 0);
SpawnPlayer(playerid);
return 1;
}

В OnPlayerLogin добавить надо:

pInfo[playerid][pSkin] = cache_get_field_content_int(0, "pSkin", MySQL);
Присвоить переменной pSkin значение из БД.

denis01
04.06.2016, 21:25
В OnPlayerLogin добавить надо:

pInfo[playerid][pSkin] = cache_get_field_content_int(0, "pSkin", MySQL);
Присвоить переменной pSkin значение из БД.

Спасибо, а что делать мне со скином CJ при выборе скина? получается выбираю пол Муж. Жен. далее перекидывает на выбор скина сразу идёт скин CJ а как начинаю листать он исчезает

Wise
04.06.2016, 21:27
Спасибо, а что делать мне со скином CJ при выборе скина? получается выбираю пол Муж. Жен. далее перекидывает на выбор скина сразу идёт скин CJ а как начинаю листать он исчезает

Я же писал.
Когда ты перемещаешь игрока к выбору скина, измени его посредством SetPlayerSkin.
Например:

SetPlayerSkin(playerid, ид_первого_скина_который_выбирает_игрок);

denis01
04.06.2016, 21:42
new sMan[4] =
{
137, 230, 135, 230
};


if(pInfo[playerid][pSex] == 1)
{
SetPlayerSkin(playerid, sMan[0]);
}
else if(pInfo[playerid][pSex] == 2)
{
}

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

Так?

Desulaid
04.06.2016, 21:50
Еще вопрос почему когда я захожу(Авторизация) то у меня выдаёт скин CJ а не тот скин который был выбран при регистрации??


// при загрузке аккаунта
cache_get_field_content_int(0, "таблица в бд", массив_скина);
// при спавне
SetPlayerSkin(playerid, массив_скина);

denis01
04.06.2016, 22:36
pInfo[playerid][pSkin] = cache_get_field_content_int(0, "skin");
Так? не?

Я вообще запутался я использую MySQL r 39-5

Wise
05.06.2016, 08:31
pInfo[playerid][pSkin] = cache_get_field_content_int(0, "skin");
Так? не?

Я вообще запутался я использую MySQL r 39-5

Эти два варианта работоспособны. Вы сначала проверяйте, а потом пишите, можно ли так или так.. Или ещё как.
Ваши вопросы подобны: "А можно мне мод скомпилировать после этого?"
Пытайтесь сделать. А ошибки мы всегда исправим.

UPD: В примере Стяжкина будет вот так:

cache_get_field_content_int(0, "skin", pInfo[playerid][pSkin]);
В моём вот так:

pInfo[playerid][pSkin] = cache_get_field_content_int(0, "skin", MySQL);
Это всё работает. Только измени названия переменных под себя.

denis01
05.06.2016, 12:50
Блин Ребята не могу решить проблему со скином CJ при направлении на выбор скина идёт сперва скин CJ и я могу выбрать его.


if(response)
{
SpawnPlayer(playerid);
pInChangeSkin[playerid] = 1;
SendMe(playerid, COLOR_WHITE, "{AFAFAF}Подсказка: Используйте {F2681D}SHIFT (быстрый бег){AFAFAF} и {F2681D}клавиши движения{AFAFAF} для выбора");
TogglePlayerControllable(playerid, 0);
SetPlayerPos(playerid, 222.3489, -8.5845, 1002.2109);
SetPlayerFacingAngle(playerid, 266.7302);
SetPlayerCameraPos(playerid,225.3489,-8.5845,1002.2109);
SetPlayerCameraLookAt(playerid,222.3489,-8.5845,1002.2109);
SetPlayerVirtualWorld(playerid, playerid+1);
SetPlayerInterior(playerid, 5);
}


if(GetPlayerMenu(playerid) == bomj[1])
{
switch(row)
{
case 0:
{
SetPVarInt(playerid, "SelectSkin", GetPVarInt(playerid, "SelectSkin") +1);
if(GetPVarInt(playerid, "SelectSkin") >= 14) SetPVarInt(playerid, "SelectSkin", 0);
SetPlayerSkin(playerid,SkinGirl[GetPVarInt(playerid, "SelectSkin")]);
ShowMenuForPlayer(bomj[1],playerid);
}
case 1:
{
SetPVarInt(playerid, "SelectSkin", GetPVarInt(playerid, "SelectSkin") -1);
if(GetPVarInt(playerid, "SelectSkin") <= 0) SetPVarInt(playerid, "SelectSkin", 14);
SetPlayerSkin(playerid,SkinGirl[GetPVarInt(playerid, "SelectSkin")]);
ShowMenuForPlayer(bomj[1],playerid);
}
case 2:
{
PlayerInfo[playerid][pSkin] = GetPlayerSkin(playerid);
DeletePVar(playerid, "SelectCharPlace");
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
TogglePlayerControllable(playerid, 1);
pInChangeSkin[playerid] = 0;
SpawnPlayer(playerid);
}
}
}

Wise
05.06.2016, 13:02
if(response)
{
SpawnPlayer(playerid);
pInChangeSkin[playerid] = 1;
SendMe(playerid, COLOR_WHITE, "{AFAFAF}Подсказка: Используйте {F2681D}SHIFT (быстрый бег){AFAFAF} и {F2681D}клавиши движения{AFAFAF} для выбора");
TogglePlayerControllable(playerid, 0);
SetPlayerSkin(playerid, sMan[0]);
SetPlayerPos(playerid, 222.3489, -8.5845, 1002.2109);
SetPlayerFacingAngle(playerid, 266.7302);
SetPlayerCameraPos(playerid,225.3489,-8.5845,1002.2109);
SetPlayerCameraLookAt(playerid,222.3489,-8.5845,1002.2109);
SetPlayerVirtualWorld(playerid, playerid+1);
SetPlayerInterior(playerid, 5);
}

denis01
05.06.2016, 13:08
if(response)
{
SpawnPlayer(playerid);
pInChangeSkin[playerid] = 1;
SendMe(playerid, COLOR_WHITE, "{AFAFAF}Подсказка: Используйте {F2681D}SHIFT (быстрый бег){AFAFAF} и {F2681D}клавиши движения{AFAFAF} для выбора");
TogglePlayerControllable(playerid, 0);
SetPlayerSkin(playerid, sMan[0]);
SetPlayerPos(playerid, 222.3489, -8.5845, 1002.2109);
SetPlayerFacingAngle(playerid, 266.7302);
SetPlayerCameraPos(playerid,225.3489,-8.5845,1002.2109);
SetPlayerCameraLookAt(playerid,222.3489,-8.5845,1002.2109);
SetPlayerVirtualWorld(playerid, playerid+1);
SetPlayerInterior(playerid, 5);
}

Пробовал всё равно выдаёт скин CJ

Nurick
05.06.2016, 13:52
if( pInfo[ playerid ][ pSex] == 1 )
{
pInfo[ playerid ][ pSkin ] = sMan[ 0 ];
SetPlayerSkin( playerid, sMan[ 0 ] );

}
else
{
pInfo[ playerid ][ pSkin ] = SkinGirl[ 0 ];
SetPlayerSkin( playerid, SkinGirl[ 0 ] );
}