Peršokti į turinį

(PAMOKA): Registracija Y_ini (~45x greičau nei dini)


LUX1S`

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4411 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki, taigi parodysiu kaip sukurti registracija bei prisijungimą ant Y_ini, jis viską atlieka greičiau 45-50x kartų nei dini. Patarčiau visiems ( labiau vidutiniokams, o PRO tai jau prie mysql ).

Į tai įeis dar keletas dalykėlių.

• Domenų saugojimas

• Domenų užkrovimas

• Anti spawn'as.

PASTABA: Mano lygiavimas yra geriausias naudojant 'TAB' mygtuką aišku jį sugadina svetainės skriptas 'code', tik su juo profesionaliai sulygiuosite ir negausite warning'ų. Dar dažniausiai tarp funkcijų dedu 'SPACE', man tai labiau aišku yra kur kas kaip.

Pradėkime!

1 Žingsnis.

Susirašome reikalingus kintamuosius, includes.

#include < a_samp >

// Jei jau turite, nerašykite, daniausiai jau tai būna įrašyta ( net new.pwn'e )

SA-MP komandos includ'as, kuris naudojamas visoms kitoms, reikalingoms funkcijoms.

#include < YSI\y_ini >

Include y_ini kurį naudosime domenų saugojimui/krovimui bei skaitymui.

#define FAILAI "%s.ini"

Sukuriame reikšmę kur bus saugomi žaidėjų failai,

Tai pat mes galime rašyti į aplankalus kaip tai daryti?:

Naudokite pasvyrą brūgšni į dešinę / ir jei tai daro būtinai susikurtite aplankalą kurį parašėte po pasviro brūkšnelio. Pvz.: #define FAILAI "/Profiliai/%s.ini" turite susikurti ir scriptfiles direktorijoje aplankalą savo įrašytu vardu, šiuo atvėju "Profiliai".

Kintamieji.

Susikuriame kintamūjų eilę į kuriuos saugos laikinąja informacija, žinoma ji kis ( pvz: žaidėjas gaus pinigų, iškart žaidėjo faile kis reikšmė ). Tai būtų informacija kuri yra saugoma žaidimo metu į kintamuosius įrašysime slaptažodį pinigus, EXP, po to juos išsaugosime ir vėl užkrausime kintamuosius.

enum ZaidejoInformacija
{
   Slaptazodis[ 24 ],
   Pinigai,
   EXP
}

new zInfo[ MAX_PLAYERS ][ ZaidejoInformacija ];

Susikuriame "Enum'ą", kuriame bus visa žaidėjo informacija.

GRP GM'uose dažniausiai būna 'playerDB', kuris randasi gamemodes/data/PlayerDB.txt/

Atsidarome ir prirašome juos ( po kiekvieno turi būti kablelis išskyrus po paskutinio. )

new Statusas[ MAX_PLAYERS ]; // Žaidėjo statusas ( apsauga spawn'o ) kiekvienam žaidėjui atsikirai ( MAX_PLAYERS, turėsime naudoti 'playerid' ).

2 Žingsnis.

Failų atpažinimas

Taigi kai žaidėjas prisijungia, reikia nurodyti registracija ar prisijungimą, o mes tai padarome gan paprastai.

OnPlayerConnect

// Susirandame šį Callblack'ą.

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

   if( fexist( Zaideju_failai( playerid ) ) ) // Jei jau toks vardas sukurtas.
   {
       INI_ParseFile( Zaideju_failai( playerid ), "Krauti_domenis", .bExtra = true, .extra = playerid );
       ShowPlayerDialog( playerid, 1, DIALOG_STYLE_PASSWORD, "Prisijugimas", "Įveskite prisijungimo slaptažodį", "Prisijungti", "Išeiti" ); // Išmetame prisijungimo GUI lentelę.
   }
   else // Jei žaidėjo failas neegzistuoja.
   {
       ShowPlayerDialog( playerid, 2, DIALOG_STYLE_PASSWORD, "Registracija", "Įveskite naują slaptažodį", "Registruotis", "Išeiti" ); // Jei žaidėjas dar neregistruotas.
   }
return 1;
}

Dabar keliaujame nustatyti dialog'ų reikšmes, registracijos bei prisijungimo. Pirmyn.

OnDialogResponse

// Susirandame šį Callblack'ą.

public OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] )
{
if( dialogid == 2 )
{
    if ( !response )
	{
	    Kick( playerid );
		return 1;
	}
	if( response )
	{
	    if( !strlen( inputtext ) ) return ShowPlayerDialog( playerid, 2, DIALOG_STYLE_PASSWORD, "Klaida", "Slaptažodyje turi būti raidės arba skaičiai", "Registruotis", "Išeiti" );
		new INI: Failas = INI_Open( Zaideju_failai( playerid ) );
  			INI_WriteString( Failas, "Slaptazodis", inputtext );
           INI_Close( Failas );
           SendClientMessage( playerid, -1, "Registracija sėkimga. Jūs automatiškai prijungtas prie sąskaitos." );
           Statusas[ playerid ] = 1;
		return 1;
	}
	return 1;
}

if( dialogid == 1 )
{
	if( !response )
	{
	    Kick( playerid );
	    return 1;
	}

	if( strcmp( inputtext, zInfo[ playerid ][ Slaptazodis ], false ) )// jei žaidėjo slatažodis netoks kaip kintamajame, lėpeme bandyti dar
       {
       	ShowPlayerDialog( playerid, 1, DIALOG_STYLE_PASSWORD, "Klaida", "Jūsų įvestas sąskaitos slaptažodis yra neteisingas\nVeskite dar kartą.", "Tęsti", "Išeiti" );
       }
	else // kitu atvėju jei slaptažodis yra teisingas krauname kintamuosius ir leidžiame žaidėjui prisijungti
       {
		INI_ParseFile( Zaideju_failai( playerid ), "Krauti_domenis", .bExtra = true, .extra = playerid );
           SendClientMessage( playerid, -1, "Sėkimingai prisijungėte" );
           Statusas[ playerid ] = 2;
	}
}

return 1;
}

3 Žingsnis.

Domenų krovimas

Tai domenų krovimas, jis gan skiriasi nuo dini krovimo tuo kad čia mes krauname į kinatamuosius negalime tiesiai į funkcija.

forward Krauti_domenis( playerid, name[ ], value[ ] );
public Krauti_domenis( playerid, name[ ], value[ ] )
{
   INI_String( "Slaptazodis", zInfo[ playerid ][ Slaptazodis ], 24 );
   INI_Int( "Pinigai", zInfo[ playerid ][ Pinigai ] );
   INI_Int( "EXP", zInfo[ playerid ][ EXP ] );
   Statusas[ playerid ] = 3;
   return 1;
}

INI_String( "Slaptazodis", zInfo[ playerid ][ Slaptazodis ], 24 );

• Skaitome stringą 'INI_String'. [ simbolius ] [ tekstą ] stringe gali būti ir skaičiai ir raidės, skirtingai nei 'intiger' ( skaičiuje ) be to stringui reikia nurodyti dydį ką mes ir padarėme 24 mūsų enum'e tai pat reikia paversti kintamąjį su string pavidalo nurodyti jam dydį, šiuo atveju turime '24'.

INI_Int( "Pinigai", Zinfo[ playerid ][ Pinigai ] );

• Skaičiaus krovimas [skaičių]. Štai taip užkrauname į kintamajį iš INI. failo domenų visus domenis viską perkeliame į kinamajų eilę enum'e, po to mes juos galime išreikšti vienoje ar kitoje kokioje funkcijoje pvz.: mes galime nustatyti [ pinigus ] callback'e OnPlayerSpawn ( kai žaidėjas atsispawn'ina ), kad jam nustatytų pinigų reikšmę SetPlayerMoney( playerid, zInfo[ playerid ][ Pinigai ] ką mes ir darysime. Taip ir yra naudojamas domenų užkrovimas, ką mes užkrauname kinatamuosiuose ir juos perteikiame kur mums reikia

stock Zaideju_failai( playerid )
{
   new stringas[ 128 ], zVardas[ MAX_PLAYER_NAME ];
   GetPlayerName( playerid, zVardas, sizeof( zVardas ) );
   format( stringas, sizeof( stringas ), FAILAI, zVardas );
   return stringas;
}

Šis funkcija mums leidžia nesivarginti papildomai fomatuojant datos saugojimo tiesiog prirašant viena žodį jis atsotoja visą sakinį, tai tiesiog dėl patogumo ir praktiškumo.

Domenų saugojimas

Žaidėjų profilius saugome paprastu būdu. Po callblack'u 'OnPlayerDisConnect', naudosime stock'ą.

stock Saugome_Duomenis( playerid )
{
   new INI: Failas = INI_Open( Zaideju_failai( playerid ) );
   INI_WriteInt( Failas, "Pinigai", GetPlayerMoney( playerid ) );
   INI_WriteInt( Failas, "EXP", GetPlayerScore( playerid ) );

   INI_Close( Failas );
return 1;
}

INI_Close( Failas );

// Šis uždaro failą, viskas logiška, priešingai ne idini, jis atidaro, uždaro failus, žodžiu viskas ten veliasi, o čia gražiai uždaro failą.

Šį kodą rašome modifikacijos gale, taip bus gan daug patogiau ir praktiškiau.

OnPlayerDisconnect

// Susirandame tokį callblack'ą ir po juo rašome:

Saugome_Duomenis( playerid );

Ir paskutinis žingsnis

Kintamųjų reikšmes keičiame/verčiame į tai ką norime paversti.

OnPlayerSpawn

// Susirandame tokį callblack'ą.

Po jo rašysime krovimą, bet naudosime spawn'o apsaugą t.y. kai žaidėjas žus, jis skaitosi kaip spawninasi, tai jam nieko nenutiks, per naujo profilio nekraus.

public OnPlayerSpawn( playerid )
{
   if( Statusas[ playerid ] == 1 ) // užsiregistravęs katik
{
	SetPlayerPos( playerid, X, Y, Z ); // Nusistatykite koordinates, kur žaidėjas atsiras, kai užsiregistruos ir pirmą kartą atsispawn'ins.
	GivePlayerMoney( playerid, 3000 ); // Pirmą kartą duodame pinigų.
	SetPlayerScore( playerid, 200 ); // Pirmą kartą duodame taškų. ( EXP )
}
else if( Statusas[ playerid ] == 2 ) // Jei katik įvedė slaptažodį teisingai duodame užkrautus domenis
{
		GivePlayerMoney( playerid, PlayerData[ playerid ][ Pinigai ] );
   	SetPlayerScore( playerid, PlayerData[ playerid ][ EXP] );
}
else if( Statusas[ playerid ] == 3 ) // Tuščia.
{

}
return 1;
}

Štai pamoka pagaliau baigta. Kiekvienam vidutiniokui siūlyčiau naudoti 'Y_ini', o naujokai sunkiai jį įkas.

Y_ini include parsisiuntimas (Spausk čia) Kelkite į 'Pawno/include/' aplankalą/ -us. Nieko nekeiskite, jei bus EROR'ų rašykite čia bandysim išspresti problemas, be to aš NETESTINAU, bet man eror'ų neišmetė, viskas buvo tvarkingai.

Štai dar mano modifikacija, NEW.PWN, kurioje rašiau šitą registracija/prisijungimą bei domenų saugojimą Y_INI.

http://failai.in/show/F/89E3FA32A/GM.rar

By LUX1S`. Ačiū už dėmesį.

  • Teigiamai 5
Nuoroda į komentarą
Dalintis per kitą puslapį

Kazkodel meta toki errora :

C:\Users\Àäìèíèñòðàòîð\Desktop\eD\gamemodes\echo.pwn(17) : fatal error 100: cannot read from file: "YSI\y_ini"

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

Eilute :

#include 

Jau Visaip bandziau padaryti tas pats... Nors viska ikeliau.

include įsidėk.

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 2 savaičių...

Statistika

Saugojimai failuose:

- dini lieviausias/lėčiausias

- y_ini geriausias/greičiausias

- .txt failuose taip pat gali saugoti, susikūręs savo saugojimą/krovimą, bet nemanau ar jum pavyks :DDDDDDDDDD

Duombazės:

Iš visų greičiausias bei sunkiausiai suvokiamas MySQL, jis saugojamas duomenų bazėje tai localhost'as ar šiaip interneto hostas, jis greičiausias, jei išmoksi gerai elgtis, bus labai lengva, bet išmokti nėra lengva.

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 3 savaičių...

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4411 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...