Page 1 of 2

Pawn programavimo gidas su paveikslėliais (žaliems)

Posted: 2011 Apr 07 15:08
by aaarnas
Šio gido autorius Emp`. Originali tema: http://forums.alliedmods.net/showthread ... =scripting
Vertimas aaarnas http://www.amxmodx.lt

Kometaras

Šis gidas paprastai ir aiškiai paaiškins visus dalykus, kurių prireiks darbo pradžiai su pawn amxmodx modifikacijoje.

Bus kalbama apie šias dalis: Tai tėra pagrindai ir ne viskas gali būti tikslu. Visi čia parodyti kodai neturės jokios įtakos žaidime.

Visų pirmiausia, pluginą asocijuosime su namu. Namas turi dėžes (kintamuosius "variables"), mašinas (funkcijas "functions"), įėjimo ir išėjimo vietas (ivykiai "forwards", grąžinimai "returns") ir duris į kitus namus ("natives").
Image

Komentarai

Vienas iš pirmųjų dalykų, kuriuos reikia žinoti apie programavimą, tai komentarai. Jie skirti rašyti pašalinėms žinutėms ar parašymams reikiamoje vietoje. Jie visiškai neturi jokios įtakos programai (pluginui) ir kompiliatorius juos tiesiog ignoruos. Jie padeda nepasiklysti funkcijų gausoje, kartais ir išvengti klaidų.
Naudojimas yra toks:

Code: Select all

// Tralialia. Šitas daro aną. // Nuo to laiko, kai kažką padariau, šita funkcija nebeveikia...
Visa, kas yra po // simbolių žymima kaip komentaras.

Kadangi komentarus galima naudoti bet kur kode, jie padeda žmogui skaitančiam Jūsų programą suprasti ką, kuri vieta daro, o ir patys galite pasižymėti kodėl kažką pakeitėte, ar kaip ką nors naudojote, kad kitą dieną vėl prisėdu būtų paprasčiau sugrįžti į senas vėžias.

Skirtingos kalbos naudoja skirtingus žymėjimus. Pawn kalboje yra du žymėjimai:
  • Vienos eilutės
  • Daugiaeilutinis
Vienos eilutės komentarai prasideda simboliais //. Viskas, kas eina po jį yra ignoruojama. Jie gali būti ir eilutės pradžioje ir viduryje. Tai nesudaro jokio skirtumo.

Code: Select all

//Geras komantaras                 // Taip pat puikus komentaras
Daugiaeilutinis komentaras prasideda simboliais /* ir baigiasi */. Viskas, kad yra tarp šitų simbolių yra komentaras ir bus ignoruojama.

Code: Select all

/* Tai vienoje eilutėje */ /*Arba gali     būti kelioseeilutėse */
Kintamieji

Dabar pereisim prie vienos iš programavimo detalės. Tai kintamieji. Taip, juos turėjote mokytis per matematiką. Įvairūs skaičiavimai, kai x ar n atitinka įvairius skaičius.
Programavime kintamieji laiko įvairias reikšmes, kurios jiems priskiriamos. Įsivaizduokime, kad kintamasis yra dėžė.
Image

Kintamieji programoje kuriami šitaip:

Code: Select all

new kintamojo_pavadinimas
Kintamojo pavadinimą kuriame pagal tai, ką mes jame laikysime. Žinoma tai neprivaloma, bet tokiu būdu bus paprasčiau susigaudyti kuriant programą. Tarkime mūsų kintamasis bus pavadinimu apples (obuoliai) ir jame bus laikomas skaičius, kiek turime obuolių.
Image
Kintamojo pavadinime negalima naudoti kai kurių simbolių, todėl įprasta, kad kintamieji aprašomi naudojant tik raides, skaičius ir simbolį _ (pabraukimas).
Kintamąjį pavadinti galima kaip norite, kad ir joniukas ar petriukas. Tiesiog numatyta, kad jų pavadinimai turi atitikti tai kas juose laikoma.
Image
  • Kintamojo pavadinime vietoje tarpų naudojamas _ simbolis
  • Pavadinimas negali prasidėti skaičiumi
Na, kad jau turime savo dėžutę, tai patalpinkime į ją ką nors.
Į dėžutę galime dėti skaičius. Taip kintamajam priskiriame reikšmes.
Vos tik sukuriame naują kintamąjį, jo reikšmė būna skaičius 0.
Image

Tada mes galime pakeisti kintamojo reikšmę:

Code: Select all

kintamojo_pavadinimas = 3
Ir matome reikšmės keitimo rezultatą:
Image

Pastaba:
  • Simbolis = naudojamas priskirti kažkokią reikšmę kintamajam.
  • 2 simboliai == naudojami kintamųjų palyginimui (sąlygose).
Kintamasis gali būti tik numeris, tad jei mes kuriame naują kintamąjį (ir nenustatome jokios reikšmės), jis bus lygus 0:

Code: Select all

new kintamasis
Ir darysime kintamasis + 5, tai atitiks 0 + 5 == 5
Tada padarome:

Code: Select all

kintamasis = 3
Dabar jei kartosime kintamasis + 5, tai dabar tai jau bus tokia išraiška: 3 + 5 == 8
Kintamasis vienu metu gali turėti tik vieną reikšmę (skaičių).

Vertėtų žinoti, kad nebūtina kurti kintamojo ir tik tada jam priskirti reikšmę:

Code: Select all

new kintamasiskintamasis = 3
Galima priskirti ir kuriant:

Code: Select all

new kintamasis = 3
Kad tęsti pamokas toliau, mums reikia išsiaiškinti, kad yra skirtingi kintamųjų tipai. Mes jau aptarėme sveikųjų skaičių ("integer") kintamąjį. Tai reiškia, kad šis kintamasis gali įgyti bet kokią sveiko skaičiaus reikšmę:
  • ..., -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, ...
Kitas kintamojo tipas yra Būlio operacija ("boolean" arba "bool").
Kad sukurti bool kintamąjį rašome taip:

Code: Select all

new bool:kintamasis
Image

Bool, skirtingai nei skaičių kintamasis, gali turėti tiek 2 reikšmės - tiesą arba netiesą ("true" arba "false")
Image
Image

Negalima prie bool kintamojo priskirti skaičių. Manykite, kad skaičiai į šią dėžę netelpa.

Sveikųjų skaičių kintamiesiems reikšmės priskiriamos taip:

Code: Select all

kintamasis = 3
Kadangi bool kintamasis gali reikšti tik true arba false, tai rašome šitaip:

Code: Select all

kintamasis = true
arba

Code: Select all

kintamasis = false
  • Naujai sukurti bool kintamieji įgyja reikšmę false (kaip sveikųjų skaičių įgyja 0)
Kur galima panaudoti boolean kintamąjį? Keli pavyzdžiai:
  • Ar šviesos įjungtos (taip/ne)
  • Ar dabar naktis
  • Aš žaidėjas stovi
  • Ar žaidėjas laiko peilį
  • t.t....
Paskutinis kintamojo tipas, kurį nagrinėsime yra Float (Realioji reikšmė).
Kad sukurti Float kintamąjį, darome šitaip:

Code: Select all

new Float:kintamojo_pavadinimas
Image

Float kintamieji gali būti bet kokios racionalios reikšmės. Juos atpažinti galima pagal tai, kad jie visada turi reikšmę po kablelio (paprasta kintamasis negali turėti reikšmių po kablelio, tik sveikąsias).
Keletas galimų šio kintamojo pavyzdžių:
  • ..., -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0, ...
  • ..., -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, ...
  • 3.567, 2859.92, 28.3
Paprastai sakant, tai gali būti bet koks skaičius su reikšme po kablelio.
  • Atminkite, kad float nulinė reikšmė taip pat turi būti su kableliu 0.0
Image

Gerai, tad štai bendras kintamųjų aptarimas:
  • Kintamųjų pavadinimai - Gali būti beveik bet kokie, bet geriausia vadinti juos pagal tai, kas juose bus laikoma (kokia informacija)
  • Pavadinime turėtų būti tik raidės, skaičiai ir pabraukimo simbolis (_). Lietuviškų raidžių rašyti negalima!
  • Kintamieji laiko savyje skaičius. Jie ten būdami nieko nedaro, tiesiog nuskaitomi tada, kada jų prireikia.
  • Yra trys pagrindiniai kintamųjų tipai: Integers, Bools, Floats (sveikieji skaičiai, Būlio operacijos(tiesa arba netiesa), realieji skaičiai)
  • Integer (sveikasis skaičius) yra visi skaičiai. Numatytoji reikšmė - 0 (kai sukuriamas kintamasis). Gali turėti ir neigiamas skaičių reikšmes.
  • Bool (tiesa/netiesa) - tiesa arba netiesa. Šis kintamasis gali turėti tik tokią reikšmę (jokių skaičių laikyti negali). Numatytoji reikšmė - false.
  • Float (realusis) yra dešimtainiai skaičiai. Tai reiškia, kad turi skaičius po kablelio. Numatytoji reikšmė - 0.0.
Masyvai ir Eilutės

Masyvai yra kintamieji galintys laikyti daugiau nei vieną reikšmę. Galime juos įsivaizduoti kaip eilę dėžučių:
Image

Kad sukurti masyvą, jį parašome taip:

Code: Select all

new array_name[4]
Image
  • Visos dėžutės dalinasi tuo pačiu kintamojo pavadinimu (array_name).
  • Skaičius laužtiniuose skliaustuose nurodo kiek dėžučių kursime.
Jei norėtume sukurti masyvą su 10 dėžučių, darytume taip:

Code: Select all

new masyvo_pavadinimas[10]
Kad pasirinkti kažkurią dėžutę, laužtiniuose skliaustuose įrašome jos numerį:

Code: Select all

new masyvo_pavadinimas[dėžutės_nr]
  • Dėžutės numeriai skaičiuojami nuo nulio, tad masyvo_pavadinimas[0] - pirma dėžutė, masyvo_pavadinimas[1] - antra ir t.t.
  • Negalima naudoti neigiamų ar jokių iracionalių reikšmių. T.y. masyvo_pavadinimas[-1], masyvo_pavadinimas[20.5] (Neteisinga)
  • Jei sukuriame tokį masyvą - new masyvo_pavadinimas[3], tai reiškia, kad jis neturi dėžutės su numeriu 3, tad toks panaudojimas: masyvo_pavadinimas[3] yra neteisingas. Dėžutės numeriai būtų: 0, 1, 2.
  • Paskutinės dėžutės numeris yra dėžučių skaičius -1
    • array[4] turi 4 dėžutes, 4-1 == 3, paskutinės dėžutės numeris - 3
    • array[11] turi 11 dėžutes, 11-1 == 10, paskutinės dėžutės numeris - 10
    • array[32] turi 32 dėžutes, 32-1 == 31, paskutinės dėžutės numeris - 31
  • Turite naudoti laužtinius skliaustus su natūraliaisiais skaičiais (įskaitant 0)
Jei norime sukurti masyvą ir iš karto į dėžutes sudėti kažkokias tai reikšmes (aišku bet kada jas bus galima keisti) tai galime padaryti jau kuriant patį masyvą:

Code: Select all

new masyvas[5] = {    10, //pirmos dėžutės reiškmė    3,  //antroje dėžutėje bus skaičius 3    600,    //trečioje skaičius 600    -5, //ketvirtoje -5    20  //penkta ir paskutinė dėžutė. Atminkite, kad po ja nereikia kablelio.}
Kam mums dali prireikti masyvų ?
  • Žinome, kad serveryje telpa tik 32 žaidėjai.
  • Sakykime, kad norime žinoti kiek kiekvienas žaidėjas nužudė kitų žaidėjų.
  • Tada mums riektų sukurti masyvą new nuzudymu_masyvas[32] ir kiekvienam žaidėjui skaičiuoti nužudymus nuzudymu_masyvas[id-1]
  • Atminkite, kad naudojame -1, nes pirmas žaidėjas turi naudoti pirmą dėžutę, antras antrą ir tt. Dėžutės numeriai prasideda skaičiumi 0, o žaidėjų id nuo 1 iki 32.
  • Paprastai žmonės nemėgsta visur atiminėti -1, dėl to sukuriame masyva su 33 elementais, tad mums pasiekiami yra nuo 0 iki 32. 0 niekada nenaudosime, o naudosime nuo 1 iki 32, todėl nebus būtina atiminėti -1.
  • Tad kuriame new nuzudymu_masyvas[33] ir tieisiog naudojame nuzudymu_masyvas[id].

Gidas nebaigtas

Re: Pawn programavimo gidas su paveikslėliais (žaliems)

Posted: 2011 Jul 06 18:14
by Manas
jeigu tiesa sakant tai nieko nesupratau.

Re: Pawn programavimo gidas su paveikslėliais (žaliems)

Posted: 2011 Jul 06 21:51
by aaarnas
Manas wrote:jeigu tiesa sakant tai nieko nesupratau.
Ko nesupratai? Gal tiesiog dar per anksti to mokytis.

Re: Pawn programavimo gidas su paveikslėliais (žaliems)

Posted: 2011 Jul 06 22:26
by aurimasko
o kada galėtų būti per anksti?

Re: Pawn programavimo gidas su paveikslėliais (žaliems)

Posted: 2011 Jul 10 11:45
by hleV
Nežinau kaip iš tikrųjų yra, bet mano galva šitą dalyką skaityt reiktų jau kai kažką įkerti. Pvz. pradėjus kažkiek redaguot plugin'us, darašyt kažką juose, suprast kaip veikia kintamieji.

Kai pabandžiau paskaityt apie Unreal Script, irgi nelabai ką pagavau, nes praktikos su tuo 0.

Re: Pawn programavimo gidas su paveikslėliais (žaliems)

Posted: 2011 Jul 10 11:49
by aaarnas
Galbūt ir taip. Čia kažkaip daugiau suprasti kaip viskas veikia. Keli žmonės sakė, kad naudingas gidas (tik vis tingisi pabaigti. Labai daug ten ;D )

Re: Pawn programavimo gidas su paveikslėliais (žaliems)

Posted: 2011 Dec 07 21:29
by xvivax
Super, labai gera pamoka :) Laukiu pratesimo :alive:

Re: Pawn programavimo gidas su paveikslėliais (žaliems)

Posted: 2011 Dec 10 00:44
by zHoor
Arnai aciu.. Uz darba duodu karma.... :)

Re: Pawn programavimo gidas su paveikslėliais (žaliems)

Posted: 2011 Dec 19 17:32
by rotosas
Girdėjau, kad SA-MP yra kaip ir Amx Mod X skriptinama pawn programavimo kalba. Jei tai tiesa, ar skriptinimas yra bent kažkiek panašus į CS 1.6 pluginų kūrimą?

Re: Pawn programavimo gidas su paveikslėliais (žaliems)

Posted: 2011 Dec 19 17:52
by aaarnas
rotosas wrote:Girdėjau, kad SA-MP yra kaip ir Amx Mod X skriptinama pawn programavimo kalba. Jei tai tiesa, ar skriptinimas yra bent kažkiek panašus į CS 1.6 pluginų kūrimą?
Na iš esmės panašu. SA-MP programuojamos su tą pačia kalba kaip ir cs pluginai (Pawn) ir yra specialiai tam sukurta programa Pawno, panašiai kaip Amxmodx Studio.

Bet tas pats yra tik pati kalba. Funkcijos ir sudėtis modifikacijų aišku skiriasi. Samp'e yra pagrindiniai pluginai (gamemod) ir papildomi (filterscripts).

Samp'e viskas yra daug labiau apribota ir mažiau galimybių lyginant su counter strike, tad cs programavimas yra kiek sudėtingesnis.
Jei gerai moki cs programavimą, tai nesunku turėtų būti persimesti ant samp.