PDA

Просмотр полной версии : [Вопрос] Проблема со скином



aHristovsky
12.09.2014, 11:25
Меня друг попросил сделать ему сервер с регистрацией. Так то я pawn знаю, но не понимаю в чём проблема. Вообще не работает SetSpawnInfo, вернее не весь, а скин или не меняется вообще при запуске игры, или это происходит крайне редко. Помоги, пожалуйста. И ещё, если пытаюсь в чат вывести например id скина с файла, то оно выводит имя игрока без 2-4 первых символов, что это за бред?

#include <a_samp>
#include <mxINI>

#define COLOR_RED 0xF60000AA
#define COLOR_WHITE 0xFFFFFFAA
#define COLOR_GREY 0xAFAFAFAA

forward SaveAccounts(playerid);

enum pInfo {
pName,
pSkin,
pLvl,
pMoney,
Float:pHeal,
Float:pArmour,
Kills,
Deaths
};

new PlayerInfo[MAX_PLAYERS][pInfo];
new logged[MAX_PLAYERS];
new saveacctimer;

main(){}

public OnGameModeInit()
{
//saveacctimer = SetTimer("SaveAccounts", 200000, 1);
return 1;
}

public OnGameModeExit()
{
KillTimer(saveacctimer);
return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
return 1;
}

public OnPlayerConnect(playerid)
{
logged[playerid]=0;

GetPlayerName(playerid,PlayerInfo[playerid][pName],30);
new account[30+9+4];
format(account,sizeof(account),"accounts/%s.ini",PlayerInfo[playerid][pName]);

if(fexist(account))
{
new s[256];
format(s,sizeof(s),"{cccccc}________________________________________\n\n Добро пожаловать на сервер \n Этот аккаунт зарегистрирован\n\nВаш логин: {ffffff}%s\n{cccccc}Введите пароль:\n________________________________________",PlayerInfo[playerid][pName]);
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Авторизация",s, "Войти", "Отмена");
}
else
{
/*new s[256];
format(s,sizeof(s),"{cccccc}________________________________________\n\n Добро пожаловать на сервер Aurum-RP\n Регистрация нового персонажа\n\nВаш логин: {ffffff}Anton_Hristovsky\n{cccccc}Придумайте пароль:\n________________________________________",PlayerName);
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Регистрация",s, "Войти", "Отмена");*/
}
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
logged[playerid]=0;
return 1;
}

public OnPlayerSpawn(playerid)
{
logged[playerid] = 1;
return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
PlayerInfo[killerid][Kills]++;
PlayerInfo[playerid][Deaths]++;
return 1;
}

public OnVehicleSpawn(vehicleid)
{
return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}

public OnPlayerText(playerid, text[])
{
if(logged[playerid] == 0)
{
SendClientMessage(playerid, COLOR_RED, "Ошибка: Вам не доступен чат.");
return 0;
}
return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/m", cmdtext, true, 10) == 0)
{
AddStaticVehicle(500,0,0,3, 82.2873, 0, 1);
return 1;
}
return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}

public OnRconCommand(cmd[])
{
return 1;
}

public OnPlayerRequestSpawn(playerid)
{
return 1;
}

public OnObjectMoved(objectid)
{
return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}

public OnPlayerExitedMenu(playerid)
{
return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}

public OnPlayerUpdate(playerid)
{
return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1)
{
if(response)
{
if(!strlen(inputtext))
{
new s[256];
format(s,sizeof(s),"{cccccc}________________________________________\n\n Добро пожаловать на сервер \n Этот аккаунт зарегистрирован\n\nВаш логин: {ffffff}%s\n{cccccc}Введите пароль:\n________________________________________",PlayerInfo[playerid][pName]);
SendClientMessage(playerid, COLOR_GREY, "Ошибка {#111}: Поле не может быть пустым.");
return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Авторизация",s, "Войти", "Отмена");
}

new password[64],account[128];
format(account,sizeof(account),"accounts/%s.ini",PlayerInfo[playerid][pName]);
//if(IsPlayerNPC(playerid))return 1;
new iniFile = ini_openFile(account);
ini_getString(iniFile, "Password",password);
if(!strcmp(inputtext, password, true))
{
ini_getInteger(iniFile, "Skin", PlayerInfo[playerid][pSkin]);
ini_getInteger(iniFile, "Lvl", PlayerInfo[playerid][pLvl]);
ini_getInteger(iniFile, "Money", PlayerInfo[playerid][pMoney]);
SendClientMessage(playerid, COLOR_RED, PlayerInfo[playerid][pMoney]);
ini_getFloat(iniFile, "Heal", PlayerInfo[playerid][pHeal]);
ini_getFloat(iniFile, "Armour", PlayerInfo[playerid][pArmour]);
ini_getInteger(iniFile,"Kills", PlayerInfo[playerid][Kills]);
ini_getInteger(iniFile,"Deaths", PlayerInfo[playerid][Deaths]);
SetPlayerScore(playerid, PlayerInfo[playerid][pLvl]);
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
SetPlayerHealth(playerid, PlayerInfo[playerid][pHeal]);
SetPlayerArmour(playerid, PlayerInfo[playerid][pArmour]);
SetSpawnInfo(playerid,0,PlayerInfo[playerid][pSkin],10.0000,-100.0000,5.0000,10.0000,0,0,0,0,0,0);
ini_closeFile(iniFile);
TogglePlayerSpectating(playerid, false);
SpawnPlayer(playerid);
return 1;
}
else
{
new s[256];
format(s,sizeof(s),"{cccccc}________________________________________\n\n Добро пожаловать на сервер \n Этот аккаунт зарегистрирован\n\nВаш логин: {ffffff}%s\n{cccccc}Введите пароль:\n________________________________________",PlayerInfo[playerid][pName]);
SendClientMessage(playerid, COLOR_GREY, "Ошибка {#112}: Вы ввели неверный пароль.");
return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Авторизация",s, "Войти", "Отмена");
}
}
else
{
new s[256];
format(s,sizeof(s),"{cccccc}________________________________________\n\n Добро пожаловать на сервер \n Этот аккаунт зарегистрирован\n\nВаш логин: {ffffff}%s\n{cccccc}Введите пароль:\n________________________________________",PlayerInfo[playerid][pName]);
return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Авторизация",s, "Войти", "Отмена");
}
}
/*if(dialogid == 2) //???????????
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "???????????", "?? ??????????????? ?? ???! \n?????? ????:", "??", "");
if(response)
{
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); //?????? ??? ??????
new account[128];
format(account,sizeof(account),"users/%s.ini",PlayerName);//?????????. ???? ?? ???? ??? ? ????? users
if(fexist(account)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "???????????", "???????????! \n ?????? ????:", "?????", ""); //?????????? ???, ???? ???? ???
new iniFile = ini_createFile(account); //??????? ???
if(iniFile < 0) ini_openFile (account); //???? ???? ??????, ??
{
ini_setString(iniFile,"Password",inputtext); //??????
ini_setInteger(iniFile, "Skin", 206);
ini_setInteger(iniFile, "Money", 5000); // ??????? ???? ???????? ? ???-??? ????? 5000
ini_setFloat(iniFile, "Heal", 100.0); // ??????? ???? ???????? ? ???-??? ????????
ini_setFloat(iniFile, "Armour", 100.0); // ??????? ???? ???????? ? ???-??? ?????
ini_setInteger(iniFile, "Kills", 0); // ?? ??? ????????
ini_setInteger(iniFile, "Deaths", 0); // ??????
ini_closeFile(iniFile); //??????? ????
ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "???????????", "???????????:", "?????", "");
}
}
else //???? ???? ???? ??????? ?????? ???? ? ?????? ?? Esc, ?? ???? ??? ????? ??????
{
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "???????????", "?????????????, ?????:", "??", "");
}
}*/
return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}

/*public SaveAccounts(playerid)
{
for(new i=0; i<MAX_PLAYERS; i++)
{
new PlayerName[MAX_PLAYER_NAME], account[128];
GetPlayerName(i,PlayerName,sizeof(PlayerName));
format(account,sizeof(account), "users/%s.ini", PlayerName);
new iniFile = ini_openFile(account);
ini_setInteger(iniFile, "Money", GetPlayerMoney(i));
ini_setInteger(iniFile,"Kills", PlayerInfo[i][Kills]);
ini_setInteger(iniFile,"Deaths", PlayerInfo[i][Deaths]);
GetPlayerHealth(i,PlayerInfo[i][pHeal]);
ini_setFloat(iniFile, "Heal", PlayerInfo[i][pHeal]);
GetPlayerArmour(i,PlayerInfo[i][pArmour]);
ini_setFloat(iniFile, "Armour", PlayerInfo[i][pArmour]);
ini_closeFile(iniFile);
SendClientMessage(i, COLOR_WHITE, "Аккаунт сохранён");// ??? ????? ???????
}
return 1;
}*/

FanHamMer
13.09.2014, 21:54
Регистрация ужасна. Рано тебе знать PAWN.

MR_BEN
13.09.2014, 22:17
Регистрация ужасна. Рано тебе знать PAWN.

А ты за час весь Pawn выучил, прям про стал?

wAx
14.09.2014, 10:01
enum pInfo {
pName,
pSkin,
pLvl,
pMoney,
Float:pHeal,
Float:pArmour,
Kills,
Deaths
};

Удели под ник-нейм игрока хотя-бы 24 ячейки..


enum pInfo {
pName[MAX_PLAYER_NAME],
pSkin,
pLvl,
pMoney,
Float:pHeal,
Float:pArmour,
Kills,
Deaths
};

aHristovsky
14.09.2014, 16:39
Это безумно ценный совет, но я лучше подожду ещё вариантов.

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


Регистрация ужасна. Рано тебе знать PAWN.

А что не так с регистрацией? Я взял её в интернете. И при чём тут ник? Я сделал как Вы сказали, но при чём тут?

DeimoS
14.09.2014, 16:54
А что не так с регистрацией?

Например то, что вы ник (строку) пытались записать в переменную целочисленного типа. Или что в GetPlayerName, извлекать ник, вы ожидаете получить строку в 30 символов. Так же для сообщения в 200 символов вы выделяете 256 ячеек. Дальше продолжать?
Я лишь могу вам посоветовать свою (http://pro-pawn.ru/showthread.php?6571-%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B-%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8-%D0%BD%D0%B0-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5-mxINI) регистрацию, код которой проверен и лично мной, и десятком других пользователей. Да и описание, что давал я в той теме, вам стоит почитать, судя по коду

aHristovsky
14.09.2014, 17:20
Например то, что вы ник (строку) пытались записать в переменную целочисленного типа. Или что в GetPlayerName, извлекать ник, вы ожидаете получить строку в 30 символов. Так же для сообщения в 200 символов вы выделяете 256 ячеек. Дальше продолжать?
Я лишь могу вам посоветовать свою (http://pro-pawn.ru/showthread.php?6571-%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B-%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8-%D0%BD%D0%B0-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5-mxINI) регистрацию, код которой проверен и лично мной, и десятком других пользователей. Да и описание, что давал я в той теме, вам стоит почитать, судя по коду

Спасибо большое, я сейчас ознакомлюсь.

aHristovsky
14.09.2014, 17:50
Я скачал сервер с темы, но почему после авторизации/регистрации оно не спавнит а эти стрелочки и кнопка Spawn появляются?

DeimoS
14.09.2014, 17:59
Я скачал сервер с темы, но почему после авторизации/регистрации оно не спавнит а эти стрелочки и кнопка Spawn появляются?

Потому что тема посвящена созданию системы регистрации, а не тому, как обходить стандартную систему спавна. Там лишь работа с файлом игрока и не более. Всё остальное - ваша забота, ибо это ВЫ пишете мод, а не я.
Могу посоветовать такой (http://pro-pawn.ru/showthread.php?948-%D0%9A%D0%B0%D0%BA%D0%B8%D0%B5-%D0%BC%D0%B0%D0%BD%D1%83%D0%B0%D0%BB%D1%8B-%D0%B2%D1%8B-%D1%85%D0%BE%D1%82%D0%B5%D0%BB%D0%B8-%D0%B1%D1%8B-%D0%B2%D0%B8%D0%B4%D0%B5%D1%82%D1%8C-%D1%83-%D0%BD%D0%B0%D1%81-%D0%BD%D0%B0-%D1%84%D0%BE%D1%80%D1%83%D0%BC%D0%B5&p=25850&viewfull=1#post25850) вариант

aHristovsky
14.09.2014, 18:04
Спасибо большое, Вы мне очень помогли, только последний вопрос. Я не могу разобраться в team в SetPlayerSpawn. Это обязательно указывать, или можно всегда использовать 0?

L0ndl3m
14.09.2014, 18:12
Я не могу разобраться в team в SetPlayerSpawn. Это обязательно указывать, или можно всегда использовать 0?
Используйте константу NO_TEAM.