Pawn programavimo gidas su paveikslėliais (žaliems)

Šiame forume galima rasti pamokas, patarimus, skriptus ir kitą naudingą informciją.
User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

Pawn programavimo gidas su paveikslėliais (žaliems)

Post 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
Palikau CS pasaulį ;/ . Nebepasiekiamas.

Manas
Parašęs kelias žinutes
Posts: 7
Joined: 2011 Jul 06 16:45

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

Post by Manas »

jeigu tiesa sakant tai nieko nesupratau.

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

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

Post by aaarnas »

Manas wrote:jeigu tiesa sakant tai nieko nesupratau.
Ko nesupratai? Gal tiesiog dar per anksti to mokytis.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
aurimasko
Flooderis arba specialistas
Posts: 736
Joined: 2010 Sep 04 08:45

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

Post by aurimasko »

o kada galėtų būti per anksti?

User avatar
hleV
AMX Mod X ekspertai
Posts: 875
Joined: 2011 Apr 02 11:23
Skype: hlev.lt
Location: Šiauliai

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

Post 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.
Image ← RIP best userbar
DISKUSIJA: KIETAS PLUGIN'O UŽSAKOVAS
Privačios pagalbos neteikiu!

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

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

Post 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 )
Palikau CS pasaulį ;/ . Nebepasiekiamas.

User avatar
xvivax
Jau perkopė 10 žinučių ribą !
Posts: 12
Joined: 2011 Dec 07 21:02

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

Post by xvivax »

Super, labai gera pamoka :) Laukiu pratesimo :alive:

User avatar
zHoor
Parašęs kelias žinutes
Posts: 7
Joined: 2011 Dec 08 22:09
Skype: darius97971

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

Post by zHoor »

Arnai aciu.. Uz darba duodu karma.... :)
Last edited by zHoor on 2011 Dec 11 14:51, edited 1 time in total.
Image
Image

User avatar
rotosas
Gana aktyvus vartotojas
Posts: 225
Joined: 2011 Mar 19 18:56
Skype: rotosas
Location: Vilnius

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

Post 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ą?
Image
Image
Jei padėjau, nepagailėk ir nepatingėk paspaust +KARMA. :)

User avatar
aaarnas
Vyr. diskusijų administratorius
Posts: 3891
Joined: 2010 Aug 31 13:21
Skype: fiarno
Contact:

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

Post 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.
Palikau CS pasaulį ;/ . Nebepasiekiamas.

Post Reply

Who is online

Users browsing this forum: No registered users and 6 guests