Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

[ PAMOKA NR.2 ] Darome registraija ir saugojima [ RPG ]


Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4251 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

Labas rytas. Kadangi į mokykla negaliu eiti dėl įtrūkusių čiurnos raikščių, todėl dėl skausmo ir nesimiega. Tai va šiandien sukursiu naują pamoką apie registracija. Ko mums reikės? Reikės Dini iskiepo(include). Ją galite gauti is čia Dini.inc - 6.1 Kb.

Tai a galime pradėti kurti registracijos sistemą.

Pradžiai viršuje modifikacijos irašykite.

#include 				< Dini >

o patį include įkelkite į jūsų serverio failai/pawno/include.

Dabar prie visų #define prirašykite.

#define REGISTRACIJA        1
#define PRISIJUNGIMAS       2

Jie bus reikalingi kuriam registracijos ir prisijungimo dialogus.

Taigi dabar po

public OnPlayerConnect(playerid)
{

Dedame

	new failas[128], vardas[128]; // Sukuria kintamuosius failui į kurį saugos viską ir žaidėjos vardo išgavimo kintamajį.
GetPlayerName(playerid, vardas, 128); // išgauną vardą.
	format(failas,128,"vartotojai/%s.ini",vardas); // sukuria failąį kurų bus saugomą.
if(!dini_Exists(failas))
{
ShowPlayerDialog(playerid,REGISTRACIJA,DIALOG_STYLE_PASSWORD," {660000}Registracija","{0066CC}Iveskite slaptazodi","Registruotis","");// registraijos dialog
}
else if(dini_Exists(failas))
{
ShowPlayerDialog(playerid,PRISIJUNGIMAS,DIALOG_STYLE_PASSWORD," {660000}Prisijungimas","{0066CC}Iveskite slaptazodi","Prisijungti",""); //prisijungimo dialog
}

return 1;
}

Na štai pradžiai jau padaryta.

Dabar einame į modifikacijos pabaigą ir ten kur nors įdedame.

stock CheckPass(file[],password[])
{
  if(!strcmp(dini_Get(file,"slaptazodis"), password, true )) return true;
  return false;
}

Su šiuo stock'u patikrins ar žaidėjo slaptažodis geras.

Dabar einame po

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{

Ir čia dedame

//=============================Registracija===================================//
if(dialogid == 1) //jei dialog id 1
{
	if(response) // jei paspaaude registruotis
	{
	new file[128], name[128]; // sukuria nauja faila ir išgauną žaidėjo vardą.
	GetPlayerName(playerid,name,128); // išgauną žaidėjo vardą.
	format(file,128,"vartotojai/%s.ini",name); // sukuria naują failą. [b]Bet jums reikia nueiti į scriptfiles ir ten sukurti aplankalą "vartotojai"[/b]
	dini_Create(file); // sukurioa faila
	dini_Set(file,"slaptazodis",inputtext); // issaugo slaptazodi
	SendClientMessage(playerid,0xFFFFFFFF,"Jus uzregistruotas!"); //paraso kad esi uzregistruotas.
	}

 		else if(!response) // jei paspaudė išiti.
	{
	Kick( playerid ); //išmeta žaidėją.
	}

	return 1;
}

if(dialogid == 2) // jei dialog id 2
{
	if(response) // jei paspaudė prisijunkti.
	{
	new name[MAX_PLAYER_NAME],file[128]; // vėl išgauna kintamuosius ar tai žaidėjo vardas ir file 
	GetPlayerName(playerid,name,sizeof(name)); // išgauna žaidėjo vardą.
	format(file,sizeof(file),"vartotojai/%s.ini",name); // patikrina ar žaidėjo file.
	if(CheckPass(file,inputtext)) // jei viskas gerai prijungią.
	{
		    PlayerPlaySound(playerid, 1150, 257.6206, -41.5307, 1002.0234); // paleidžia musiką.
		    new zini[256],vardas[MAX_PLAYER_NAME]; // sukuria kintamuosius kad parašytų žinutę ir vėl išgautų žaidėjo vardą kuriam rašys žinutę.
               GetPlayerName(playerid,vardas,MAX_PLAYER_NAME); // žaidėjo vardo išgaimas kuriam parašys žinutę.
		    format(zini,sizeof(zini),"Labas , zaidejau. Spausk spawn.",vardas); // 
               SendClientMessage(playerid,-1,zini);
			}
	new exp;
  		if(exp == -1)
		return 1;
	}
	return 1;
	}
return 1;
}

Na va su registraijabaigtą.

Tik nepamirškite nueiti į scriptfiles ir ten sukurti aplankalo "vartotojai"

Na ką. Dabar darysime Failų saugojimą ir jų užkrovimą.

Viršuje modifikacijos kur nors po visais #define ir visais new rašome

Sukuriamia

forward Saugojimas( playerid, bool:simple ); // žaidėjo failų saugojimui.
forward Uzkraunam( playerid ); //žaidėjo failų užkroimui.

Na o dabar darysime enum'ą į kurį rašysime visus failus kuriuos mes saugosim ir užkrausim.

enum playerInfo
{
litai,
wanted,
skin
}
new pInfo[MAX_PLAYERS][playerInfo];

Na va enum'as sukurtas.

Dabar einame į modifikacijos pabaigą ir ten kur norsrašome.

public Saugojimas(playerid,bool:simple)
{
new file[100]; // nauji kintamieji žaidėjo faile
new name[MAX_PLAYER_NAME]; // žaidėjo vardo išgavimo kintamasis
GetPlayerName(playerid,name,sizeof(name)); // išgauna žaidėjo vardą į kurio aplanką viską saugos.
format(file,sizeof(file),"vartotojai/%s.ini",name); // nustato vietą į kuria išsaugos
new Float:coo[3],weps[2][12]; //kintamasis išsaugoti žaidėjo ginklams ir pozicijai
GetPlayerPos(playerid,coo[0],coo[1],coo[2]); //išgauna poziciją.
if(!fexist(file)){dini_Create(file);} //sukurią naują kintamajį žaidėjo faile.
dini_IntSet(file,"litai",GetPlayerMoney(playerid)); //išsaugo jūsų pinigus ir juos išsaugo
dini_IntSet(file,"wanted",GetPlayerWantedLevel(playerid)); //nustato žaidėjo ieškomumą.
dini_IntSet(file,"skin",GetPlayerSkin(playerid)); // nustato žaidėjo skin ir jį išsaugo
for (new tmp=0; tmp<12; tmp++) GetPlayerWeaponData(playerid,tmp,weps[0] [tmp],weps[1][tmp]); //išsaugo visus žaidėjo ginklus ir jų kulkas.
dini_IntSet(file,"Ginklas0",weps[0][0]); dini_IntSet(file,"Ammo0",weps[1][0]);
dini_IntSet(file,"Ginklas1",weps[0][1]); dini_IntSet(file,"Ammo1",weps[1][1]);
dini_IntSet(file,"Ginklas2",weps[0][2]); dini_IntSet(file,"Ammo2",weps[1][2]);
dini_IntSet(file,"Ginklas3",weps[0][3]); dini_IntSet(file,"Ammo3",weps[1][3]);
dini_IntSet(file,"Ginklas4",weps[0][4]); dini_IntSet(file,"Ammo4",weps[1][4]);
dini_IntSet(file,"Ginklas5",weps[0][5]); dini_IntSet(file,"Ammo5",weps[1][5]);
dini_IntSet(file,"Ginklas6",weps[0][6]); dini_IntSet(file,"Ammo6",weps[1][6]);
dini_IntSet(file,"Ginklas7",weps[0][7]); dini_IntSet(file,"Ammo7",weps[1][7]);
dini_IntSet(file,"Ginklas8",weps[0][8]); dini_IntSet(file,"Ammo8",weps[1][8]);
dini_IntSet(file,"Ginklas9",weps[0][9]); dini_IntSet(file,"Ammo9",weps[1][9]);
dini_IntSet(file,"Ginklas10",weps[0][10]); dini_IntSet(file,"Ammo10",weps[1][10]);
dini_IntSet(file,"Ginklas11",weps[0][11]); dini_IntSet(file,"Ammo11",weps[1][11]);
dini_FloatSet(file,"pos_X",coo[0]);	dini_FloatSet(file,"pos_Y",coo[1]);	dini_FloatSet(file,"pos_Z",coo[2]); //išsaugo žaidėjo poziiją.
return 1;
}

čia sukuria failus kuriuos išsaugosime.

Na su išsaugojimu baigtą.

dabar darysime, kad juos užkrautų.

Vėl modifikacijos pabaigoje rašome

public Uzkraunam(playerid)
{
   new name[MAX_PLAYER_NAME],file[128];
GetPlayerName(playerid,name,sizeof(name));
format(file,sizeof(file),"vartotojai/%s.ini",name);
if(!fexist(file)) return;
   new tmpxp = dini_Int(file,"Xp");

SetPlayerScore(playerid,tmpxp);
SetPlayerPos(playerid,dini_Float(file,"pos_X"),dini_Float(file,"pos_Y"),dini_Float(file,"pos_Z"));
GetPlayerMoney(dini_Int(file,"litai"));
GetPlayerSkin(dini_Int(file,"skin"));
GetPlayerWantedLevel(dini_Int(file,"wanted"));
GivePlayerWeapon(playerid,dini_Int(file,"Ginklas0"),dini_Int(file,"Ammo0"));
GivePlayerWeapon(playerid,dini_Int(file,"Ginklas1"),dini_Int(file,"Ammo1"));
GivePlayerWeapon(playerid,dini_Int(file,"Ginklas2"),dini_Int(file,"Ammo2"));
GivePlayerWeapon(playerid,dini_Int(file,"Ginklas3"),dini_Int(file,"Ammo3"));
GivePlayerWeapon(playerid,dini_Int(file,"Ginklas4"),dini_Int(file,"Ammo4"));
GivePlayerWeapon(playerid,dini_Int(file,"Ginklas5"),dini_Int(file,"Ammo5"));
GivePlayerWeapon(playerid,dini_Int(file,"Ginklas6"),dini_Int(file,"Ammo6"));
GivePlayerWeapon(playerid,dini_Int(file,"Ginklas7"),dini_Int(file,"Ammo7"));
GivePlayerWeapon(playerid,dini_Int(file,"Ginklas8"),dini_Int(file,"Ammo8"));
GivePlayerWeapon(playerid,dini_Int(file,"Ginklas9"),dini_Int(file,"Ammo9"));
GivePlayerWeapon(playerid,dini_Int(file,"Ginklas10"),dini_Int(file,"Ammo10"));
GivePlayerWeapon(playerid,dini_Int(file,"Ginklas11"),dini_Int(file,"Ammo11"));
return;
}

su šiuo kodu viską užkrauną. Bet visą tai užkraus tik į failą. Taigi kad užkrautų ir į žaidimą

reikia eiti po

public OnPlayerSpawn(playerid)
{

rašome

Uzkraunam( playerid );

new stringas[ 50 ],vardas[ 24 ];
GetPlayerName( playerid, vardas, 24 );
format(stringas, 50, "Labas, %s", vardas);
GameTextForPlayer(playerid, stringas, 10000, 6);
zaid[ playerid ] ++;
return 1;
}

Na su

užkrovimu pilnai baigėme.

Dabar, kad tikrai išsaugotų failus reikia eiti po

public OnPlayerDisconnect(playerid, reason)
{

ir ten įdėti šį kodą.

	Saugojimas( playerid, false );
return 1;
}

Na va pamoka kaip ir baigta.

Bet norėčiui jums paaiškinti kaip taisiklingai skaičiuoti string.

Tai yra visai nesunku. Pavyzdžiui:

new stringas[ 50 ],vardas[ 24 ]; //new stringas yra kokio ilgio bus pranešimas, o new vardas tai žaidėjo vardas kadangi žaidėjo vardas gali būti max. 24 simbolių todėl ir tik 24 yra.
GetPlayerName( playerid, vardas, 24 ); // išgaus žaidėjo vardą.
format(stringas, 50, "Labas, %s", vardas); //string su kuriuo parašys žinutę tam tikram žaidėjui.
GameTextForPlayer(playerid, stringas, 10000, 6);// na o čia ir parašo tą žinutę.
return 1;

Na tai tiek. Laukite kitų mano pamokų.

  • Teigiamai 4

banner9.gif

Paspausk ir užsidirbk.

:)

norėčiau paklausti kodėl kai viską padarau būna tokie error'ai:

warning 217: loose indentation
error 017: undefined symbol "REGISTRACIJA"
error 017: undefined symbol "PRISIJUNGIMAS"
warning 217: loose indentation
warning 217: loose indentation
error 017: undefined symbol "zaid"
warning 215: expression has no effect
error 001: expected token: ";", but found "]"
error 029: invalid expression, assumed zero
fatal error 107: too many error messages on one line

Ir kaip juos ištaisyti?

norėčiau paklausti kodėl kai viską padarau būna tokie error'ai:

warning 217: loose indentation
error 017: undefined symbol "REGISTRACIJA"
error 017: undefined symbol "PRISIJUNGIMAS"
warning 217: loose indentation
warning 217: loose indentation
error 017: undefined symbol "zaid"
warning 215: expression has no effect
error 001: expected token: ";", but found "]"
error 029: invalid expression, assumed zero
fatal error 107: too many error messages on one line

Ir kaip juos ištaisyti?

Kad tu error'us parodei tai nieko nereiškia. Reikia ir eilučių kur meta error'us. O LUXIS tavo pasakyme yra šiektiek tiesos. Visų pirmą kam jūs kuriat tokias modifikacijas jeigu eilinių error'ų išsitaisyti nemokat. Visų antrą visi pradedami programuoti daro labai daug klaidų.

banner9.gif

Paspausk ir užsidirbk.

:)

C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\new.pwn(53) : error 017: undefined symbol "playerDB"
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\new.pwn(53) : warning 215: expression has no effect
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\new.pwn(53) : error 001: expected token: ";", but found "]"
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\new.pwn(53) : error 029: invalid expression, assumed zero
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\new.pwn(53) : fatal error 107: too many error messages on one line

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


4 Errors.

public OnPlayerConnect(playerid)
{
if(playerDB[playerid][admin];
{
new adminas[MAX_PLAYER_NAME];
GetPlayerName(playerid,adminas,MAX_PLAYER_NAME);
SendClientMessageToAll(0xFFFF00,"Adminas {FFFFFF}%s prisijunge",adminas);
}
if(playerDB[playerid][admin])
{
new Text3D:adminas3d[MAX_PLAYERS];
adminas3d[playerid] = Create3DTextLabel("Adminas",0x008080FF,30.0,40.0,50.0,40.0,0);
Attach3DTextLabelToPlayer(adminas3d[playerid], playerid, 0.0, 0.0, 0.7);
}
  new failas[128], vardas[128]; // Sukuria kintamuosius failui į kurį saugos viską ir žaidėjos vardo išgavimo kintamajį.
  GetPlayerName(playerid, vardas, 128); // išgauną vardą.
  format(failas,128,"vartotojai/%s.ini",vardas); // sukuria failąį kurų bus saugomą.
  if(!dini_Exists(failas))
  {
  ShowPlayerDialog(playerid,REGISTRACIJA,DIALOG_STYLE_PASSWORD," {660000}Registracija","{0066CC}LMTG.TK Iveskite slaptazodi","Registruotis","");// registraijos dialog
  }
  else if(dini_Exists(failas))
  {
  ShowPlayerDialog(playerid,PRISIJUNGIMAS,DIALOG_STYLE_PASSWORD," {660000}Prisijungimas","{0066CC}LMTG.TK Iveskite slaptazodi","Prisijungti",""); //prisijungimo dialog
  }

  return 1;
}

KAIP ISTAISYT?

Žiauriai ačiū. Jau laukiu kitų pamokų. Tik viena bėda :D. Man viskas lyg ir gerai tik čia klaida

Uzkraunam( playerid );
new stringas[ 50 ],vardas[ 24 ];
GetPlayerName( playerid, vardas, 24 );
format(stringas, 50, "Labas, %s", vardas);
GameTextForPlayer(playerid, stringas, 10000, 6);
[b]zaid[ playerid ] ++;[/b]
return 1;
}

Kur paryškinau šitoje vietoje man meta erroru :D. Bet šiaip ačiū

header.png

public OnPlayerSpawn(playerid)
{
Uzkraunam( playerid );

new stringas[ 50 ],vardas[ 24 ];
GetPlayerName( playerid, vardas, 24 );
format(stringas, 50, "Labas, %s", vardas);
GameTextForPlayer(playerid, stringas, 10000, 6);
zaid(playerid) ++;
return 1;
}

C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\LMTTG.pwn(157) : warning 217: loose indentation
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\LMTTG.pwn(174) : warning 217: loose indentation
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\LMTTG.pwn(181) : warning 217: loose indentation
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\LMTTG.pwn(185) : error 017: undefined symbol "zaid"
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\LMTTG.pwn(380) : warning 217: loose indentation
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\LMTTG.pwn(381) : warning 217: loose indentation
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\LMTTG.pwn(382) : warning 217: loose indentation
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\LMTTG.pwn(385) : warning 217: loose indentation
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\LMTTG.pwn(439) : warning 217: loose indentation
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\LMTTG.pwn(442) : warning 217: loose indentation
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\LMTTG.pwn(444) : warning 217: loose indentation
C:\Users\Donio\Desktop\Pirmas mano darbas\gamemodes\LMTTG.pwn(463) : warning 203: symbol is never used: "pInfo"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

kaip istaisyt kas pades +rep

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 4251 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ą...