O kakvom se savetu radi:
Tutoriali za odredjene stvari.
Detaljan opis saveta:
Hteo bih da pocnem mod od nule, pa me zanima koji su tutorijali najbolji za Login&Register Sistem, Car Dealership, House Sistem, pitam posto uvek za sve ima po 2-3 tutorijala, pa nzm koji je najbolji. Moze i sa ovog foruma link ili sa oficijalno sa-mp foruma.
Komentar:
Pre godinu dana ili koliko vec kad sam igrao SAMP isto sam hteo da pravim MOD od nule, ali tada nisam znao mnogo oko programiranja (ne znam ni sad bas sve), ali vec godinu i po dana ucim programiranje (C programa) u skoli i mislim da bih se snasao da pravim sam. Takodje pre 2-3 godine sam pravio i plugine za CS itd...
Evo pokusao sam da uradim Login i Registar pomocu nekog tutorijala, ali ima dosta gresaka, a ne znam u cemu je problem.
EDIT: Popravio sam vecinu, gde sam stavljao znake "" a nisu bili potrebni. Ali jos uvek ima nekih gresaka..
EDIT 2: Popravio sam sve greske, jos samo par warninga. Moze lock.
#include <a_samp>
#include <YSI\y_ini>
//---------------------------------------------------------------------------- > DEFINES
#define NAME "GoMilano RolePlay"
#define VERSION "1.0"
#define SCRIPTER "Markoj96"
#define PATH "/Users/%s.ini"
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
#define DIALOG_SEX 3
#define DIALOG_AGE 4
#define DIALOG_COUNTRY 5
//---------------------------------------------------------------------------- > NEWS, ENUMS & NATIVES
enum pInfo
{
pPassword,
pSex,
pAge,
pCountry,
pCash,
pKills,
pDeaths
}
new PlayerInfo[MAX_PLAYERS][pInfo];
//---------------------------------------------------------------------------- > FORWARDS
forward LoadUserData(playerid, name[], value[]);
//---------------------------------------------------------------------------- > STOCK FUNCTIONS
stock UserPath(playerid)
{
new str[128],playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,playername,sizeof(playername));
format(str,sizeof(str),PATH,playername);
return str;
}
stock udb_hash(buf[])
{
new length=strlen(buf);
new s1 = 1;
new s2 = 0;
new n;
for (n=0; n<length; n++)
{
s1 = (s1 + buf[n]) % 65521;
s2 = (s2 + s1) % 65521;
}
return (s2 << 16) + s1;
}
//---------------------------------------------------------------------------- > OnPlayerConnect
public OnPlayerConnect(playerid)
{
if(fexist(UserPath(playerid)))
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "GoMilano Login", "Ukucajte vas password dole da bi ste se ulogovali.", "Uloguj se", "Izadji");
}
else
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registrovanje...","Ukucajte vas password da bi ste registrovali account.", "Registruj se", "Izadji");
}
return 1;
}
//---------------------------------------------------------------------------- > OnPlayerDisconnect
public OnPlayerDisconnect(playerid)
{
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File, "data");
INI_WriteInt("File", "Pol", PlayerInfo[playerid][pSex]);
INI_WriteInt("File", "Godine", PlayerInfo[playerid][pAge]);
INI_WriteInt("File", "Drzava", PlayerInfo[playerid][pCountry]);
INI_WriteInt("File", "Novac", PlayerInfo[playerid][pCash]);
INI_WriteInt("File", "Ubistva", PlayerInfo[playerid][pKills]);
INI_WriteInt("File", "Smrti", PlayerInfo[playerid][pDeaths]);
INI_Close(File);
return 1;
}
//---------------------------------------------------------------------------- > OnPlayerDeath
public OnPlayerDeath(playerid, killerid, reason)
{
PlayerInfo[killerid][pKills]++;
PlayerInfo[playerid][pDeaths]++;
return 1;
}
//---------------------------------------------------------------------------- > LoadUserData
public LoadUser_data(playerid,name[],value[])
{
INI_Int("Password",PlayerInfo[playerid][pPassword]);
INI_Int("Pol", PlayerInfo[playerid][pSex]);
INI_Int("Godina", PlayerInfo[playerid][pAge]);
INI_Int("Drzava", PlayerInfo[playerid][pCountry]);
INI_Int("Novac", PlayerInfo[playerid][pCash]);
INI_Int("Ubistva", PlayerInfo[playerid][pKills]);
INI_Int("Smrti", PlayerInfo[playerid][pDeaths]);
return 1;
}
//---------------------------------------------------------------------------- > OnDialogResponse
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_REGISTER
{
if(!response) return Kick(playerid);
if(response)
{
if(!strlen(inputtext)) return ShowPlayerDialog(palyerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "Registrovanje...","Ukucajte vasu sifru da bi ste se registrovali.", "Registruj se", "Izadji");
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File, "data");
INI_WriteInt("File", "Password", udb_hash(inputtext);
INI_WriteInt("File", "Pol", 0);
INI_WriteInt("File", "Godine", 0);
INI_WriteInt("File", "Drzava", 0);
INI_WriteInt("File", "Novac", 0);
INI_WriteInt("File", "Ubistva", 0);
INI_WriteInt("File", "Smtri", 0);
INI_Close(File);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "GoMilano Login", "Ukucajte vasu sifru da bi ste se ulogovali.", "Uloguj se", "Izadji");
}
case DIALOG_LOGIN
{
if(!response) return Kick(playerid);
if(response)
{
if(udb_hash(inputtext) == PlayerInfo[playerid][pPassword])
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]);
}
else
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, "GoMilano Login", "Ukucali ste pogresnu sifru", "Uloguj se", "Izadji");
}
return 1;
}
}
}