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

[PAMOKA] Drabužinė


sconer

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3884 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 šiandien aš jus bandysiu išmokint sukurt drabužių parduotuvę. Ją dariau pats ir nežinau, ar jums tiks. Tiesiog tu užeisi ant pickup ir įvedes skin id galėsi nusipirkti naują skin.

Ši pamoka yra skirta GRP serveriams.

Pradėkim!

1.Pickup

Visu pirma mums reikia sukurti pickup, ant kurio užėjus atsidarytų dialog'as. Štai kokie būna pickup'ai: http://weedarr.wikidot.com/pickups . Taigi nueiname į tą vietą kur norite, kad būtų pirkimo pickup'as ir parašote /save pickup . Dabar jūsų kompiuteryje atsirado ta pozicija, ir, kad ją sužinotumėme einame į Mano Dokumentai/Gta San Andreas User Files/SAMP/savedpositions.txt . Tūrėjo įsijungti tekstinis dokumentas kurio turinyje yra panašių eilučių į šią: "AddPlayerClass(281,-2405.8752,-595.2399,132.6484,130.7208,0,0,0,0,0,0); // pickup". Taigi dabar kai jau žinome pickup'o poziciją einame galime sukurti pickup'ą. Taigi einame į jūsų gamemodą/gamemodes/data/pickups.txt ir kadangi čia bus ne šeip pickup'as o su funkciją mums reikia jį pažymėti po enum pdata{ . Po juo bus kitų pavadinimų, pvz:

enum pdata{
degaline,
mokykla,
bankas,
mokyklaa,
pdginklas,
draudimas,
valgisz,
TEIS,

Tarp šitų įterpkite savo pavadinimą pickupo. Aš jį pavadinsiu tiesiog pickup:

enum pdata{
pickup,
degaline,
mokykla,
bankas,
mokyklaa,
pdginklas,
draudimas,
valgisz,
TEIS,

Dabar reikia sukurti patį pickupą. Važiuojam žemyn kol pamatysite stock'ą stock LoadPickups(){ . Po juo tūrėtų būti daug eilučių panašių į šias:

CreatePickupA(1273 ,2, -2632.6299, 2375.3787, 9.0228);
CreatePickupA(1273 ,2, -1897.5510,439.2318,36.0184);
CreatePickupA(1273 ,2, -2636.4937, 2351.3213, 8.5064);
CreatePickupA(1273 ,2, -2627.0854, 2318.7361, 8.3104);
CreatePickupA(1273 ,2, -2626.9829, 2310.0408, 8.3096);
CreatePickupA(1273 ,2, -2627.3076, 2292.1467, 8.3122);
CreatePickupA(1273 ,2, -2627.2390, 2283.4734, 8.3117);

Dabar spauskite spauskite ENTER ir naujoje eilutėje rašykite:

pickups[0][Jūsų pickup pavadinimas]=CreatePickupA(1275,2,x,y,z);

Jeigu dabar tokį išsaugotumėte is sukompiliuotumėte jums žinoma neveiktų. Įveskite pickup'o pavadinimą kūrį įrašėte po enum pdata{ į tą vietą kur aš parašiau "Jūsų pickup pavadinimas" (mano tekstą ištrinkite) . Toliau eina pickupoid

CreatePickupA(1275

Dabar pickup'as jums atrodys kaip mėlyni marškinėliai. Jei norite, kad pickup'as būtų kitoks tada turite vietoj "1275" įrašyti kitą id. ID galite sužinoti čia: http://weedarr.wikidot.com/pickups . Toliau eina po id skaičiukas "2", tai yra pickup'o stilius. 2 stilius tai yra, kad kai užeini ant pickup'o jis dingsta ir po keletos sekundžių vėl atsiranda. Galite uždėti ir kitą stilių. Visus pickup stilius galite rasti čia: http://wiki.sa-mp.com/wiki/PickupTypes . Ką gi, dabar priėjome pickup poziciją. Mes turime įrašyti trie pozicijas vietoj "x,y,z". Tas pozicijas galim paimti iš jūsų savedpositions.txt failo (pamokos pradžioje) . Taigi paimame jūsų tą eiltę iš savedpositions.txt ir nukopijuojame šias pozicijas AddPlayerClass(281,-2405.8752,-595.2399,132.6484,130.7208,0,0,0,0,0,0) . Dabar grįžtame į pickups.txt failą ir vietoj x,y,z įklijuojame šias pozicijas. Taigi, pagaliau sukūrėme pickup'ą. Dabar pereisime prie skripto.

2.Skriptas

Dabar jau galite išjungti savedpositions.txt ir pickups.txt failus. Atidarykite savo gamemodo folederį ir paspauskite jame ant gamemodes aplankalo. Ten bus tas pats data folderis ir du jūsų modifikacijos failai. Jie atrodys maždaug taip "band7.pwn" ir "band7.amx". Žodžiu pas jus bus du failiukai (pavadinimas gali būti jų netoks). Atidarome .pwn failą. Dabar tūrėjo įsijungti jūsų gamemodo pagrindinis skriptas. Paspauskite CTRL+F ir įveskite ten "OnPlayerPickUpPickup" . Po

public OnPlayerPickUpPickup(playerid, pickupid)
{

įrašykite štai tokį skriptuką:

if(pickupid == pickups[0][Jūsų pickup pavadinimas])
{
 ShowPlayerDialog(playerid,4266, DIALOG_STYLE_INPUT,"Pirkti drabužius","{347C17}Įveskite jūsų norimo drabužio id\nSkin ID turi būti skaičius\nDrabužių kaina {A37B47}1000Lt","Pirkti","Atšaukti");
return 1;
 }

if(pickupid == pickups[0][Jūsų pickup pavadinimas] čia įveskite savo pickup pavadinimą kūrį rašėte po enum pdata. Truputi paaiškinsiu kas čia atsitinka. IF funkcija tinkrina ar kažkas užėjo ant jūsų pickup, toliau visalaik po tokios eilutės dedame laužtinį skliaustą pradžioje ir gale. Jis tarsi parodo kas vyks. Pavyzdžiui jeigu jūs nepadėtumėte antro laužtinio skliausto gali būti, kad serveris jums vykdis ir toliau einančias funkcijas.

Toliau kaip matote yra sukuriamas dialogas. Absoliučiai visose sa-mp funkcijose skripte po pavadinimo dedami skliaustai su parametrais, kad nustatytum ten viską. Kaip matote po skliaustų pirmas žodis yra "playerid". Playerid, tai yra tas žmogus kuris užėjo ant pickup (gali būti ir kitokie, bet apie tai tolimesnėse mano pamokose). Toliau eina dialog id. Jo vietoje galite įrašyti betkokį keturženklį skaičių, bet svarbu, kad nebūtų kito dialogo su tokiu pat id. Toliau eina dialogo stilius. Stilių išviso yra 4. Juos galite sužinoti čia : http://wiki.sa-mp.co...i/Dialog_Styles . Aš pasirinkau DIALOG_STYLE_INPUT nes aš noriu, kad žaidėjas įrašytų skin id ir jam jį duotų. Toliau eina dialog caption, tai kokia bus dialogo antraštė, galite ją pakeisti. Toliau eina, kas bus parašyta tame dialog'e. Toliau eina du mygtukai ir baigiasi funkcija.

Toliau paspauskite CTRL+F ir įveskite "OnDialogResponse". Šis callbackas naudojamas kai nori, kad kai išmeta tavo dialogą ir paspaudį vieną iš dvejų mygtukų kažkas atsitiktų. Taigi po šituo

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

dedame štai tokį skriptą:

if(dialogid == jūsų dialog id)
{
if(!response) //Jei paspaude mygtuka ne
{
SendClientMessage(playerid, RED, "Nenusipirkote drabužių");return 0;
}
if(response)
{
new id = StringToInt(inputtext);
if(GetPlayerMoneyA(playerid) < 1000)
{
 SendClientMessage(playerid,RED,"* Neturite tiek pinigu");return 1;
}
if(id > 299)
{
SendClientMessage(playerid,RED,"Tokių drabužių nėra");
return 1;
}
		 if(!IsNumeric(inputtext))
{
 SendClientMessage(playerid,RED,"* Skin id turi būti skaičius");
return 1;
}
GivePlayerMoneyA(playerid,-1000);
SetPlayerSkin(playerid, id);
playerDB[playerid][drabuziai]=id;
}
}

Dabar pradėkim aiškintis kas čia per skriptas ir ką jis daro. Taigi visu pirma mums reikia nustatyti ant kokio dialogo norime, kad kai paspaudi mygtuką kažkas atsitiktų. Čia "if(dialogid == jūsų dialog id)" kur jūsų dialog id įraškite savo dialogid kūrį nustatėte praitame skripte. Toliau atsidaro skliaustas ir visu pirma yra "if(!response)" tai yra, kai nesutinka. !response bus visada antras dialogo mygtukas or response bus pirmas (tai yra sutinka). Taigi jeigu žaidėjas paspaudžia mygtuką "Atšauktį" jam uždarys dialogą ir atsiųs žinutė, kad jis nenusipirko drabužių. Toliau eina if(response) . Pradžioje eina tokia eilutė "new id = StringToInt(inputtext);" šioje eilutėje mes sukuriam kintamąjį kūrio reikšmė būtų lygti tam ką žaidėjas ivedė. Tada matome tokią eilutę "if(GetPlayerMoneyA(playerid) < 1000)" ši funkcija tikrina ar tu turi bent 1000 pinigų (tokią aš nustačiau skin kainą). Jūs žinoma galite pakeisti iš 1000 pavyzdžiui į 500 pinigų. Taigi jei neturi pinigų "SendClientMessage(playerid,RED,"* Neturite tiek pinigu");return 1;" šita eilutė padaro, kad žaidėjui atsiųstų žinutė, kad jis neturi tiek pinigų ir uždarytų dialogą. Toliau eina funkcija

if(id > 299)
{
SendClientMessage(playerid,RED,"Tokių drabužių nėra");
return 1;
}

Ši funkcija tinkrina koks yra žaidėjo įvestas id. ID negali būtų daugiau negu 300 kadangi tokių drabužių jau nebėra. Toliau eina funkcija :

if(!IsNumeric(inputtext))
{
 SendClientMessage(playerid,RED,"* Skin id turi būti skaičius");
return 1;
}

Šita funkcija yra skirta gudročiams kūrie bandys vietoj skin id vesti raides ir simbolius kūrie pakenktų serveriui. Ši funkcija padaro, kad jei įvedi kažką kitką, bet ne skaičiu, tada tau uždarytų dialogą ir atsiųstų žinutę, kad Skin id turi būti skaičius.

Apsaugas uždėjom, dabar jei praeina šitas apsaugas, tada jau jis nusiperka.

GivePlayerMoneyA(playerid,-1000);
SetPlayerSkin(playerid, id);
playerDB[playerid][drabuziai]=id;

Pirma eilutė nuima žaidėjui pinigų (galite nustatyti kitą skaičių, kiek nuimtų). Toliau eina funkcija SetPlayerSkin, ji uždėda žaidėjui skin'ą. SetPlayerSkin eilutes gale matote tą patį kintamąjį id, ten gali būti betkoks skin id, bet mes šiuo atverju darome drabužių parduotuvę ir mums reikia, kad žaidėjui duotų skin'ą tą kūrį jis ivedė. Toliau eina

playerDB[playerid][drabuziai]=id;

tai yra apsauga nuo visokių čyterių kūrie bando pasikeisti skin su čyt'ais. Į playerDB jie niekaip neįlys. Čia taip pat į playerDB įrašo tą tavo skin id kūrį įvedei.

Dabar paspauskite F5 (sukompiliavimo mygtukas). Jei meta kažkokių error'ų rašykite čia. Ačiū, kad iškentėjote mano pirmąją pamoką wink.png . Jei patiko +REP

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

  • Parašė po 5 mėnesių...
  • Parašė po 2 mėnesių...

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