1. Šis tinklalapis naudoja slapukus. Tęsdami būvimą šiame tinklalapyje, jūs patvirtinate, jog sutinkate priimti slapukus. Sužinoti daugiau.

PAWN kodo struktūra

Diskusija 'Serverio kūrimo pamokos' skyriuje nuo g1ntas, Rugpjūtis 2, 2014.

  1. g1ntas

    g1ntas Aktyvus narys

    Užsiregistravęs:
    Birželis 27, 2011
    Pranešimai:
    69
    Taškai už trofėjus:
    108
    Lytis:
    Vyras
    Vietovė:
    Klaipėda
    Pradžios puslapis:
    Įvertinimai:
    +23 / 0 / -0
    Ilgą laiką nebuvau čia (atrodo paskutinį kartą lankiausi prieš metus), bet nieko keisto, sa-mp etapais miršta, vis mažiau žaidėjų, projektų ir pačių scripterių. Žodžiu, visus likusius galbūt dar išmokysiu kodo struktūrizavimo PAWN kalboje.

    Kas yra kodo struktūra?
    Pasiimkime bet kurį GM, atsidarykime jį ir mes matome vientisą kodo struktūrą (visas kodas viename faile). Atsimenate GRP GM? Atsidarykite jį, dabar mes matome 1 pagrindinį .pwn failą ir `data` aplankalą su .txt failais, kuriuose yra dalis kodo, taigi tai irgi kodo struktūra, tačiau kiek tvarkingesnė. Trumpai sakant, tai viso kodo sutvarkymas/skaidymas į atskirus failus.

    Kuo kodo struktūrizavimas yra gerai?
    Esu PHP programuotojas ir prisėdus prie projekto niekada nepamatysi viso puslapio parašyto viename faile, tiksliau sakant puslapis išsiskaido į mažiausiai dar 3 failus, kokia to nauda? Greitas puslapio dalies suradimas ir lengvesnis skaitomumas. Ir tai galioja ne tik PHP kalboje, bet visose: C++, C#, python.... Taigi, kaip jau minėjau, struktūrizuodami kodą jūs turėsite tvarką pas savęs, ir nesunkiai galėsite pasiekti kiekvieną sistemą atskirame faile. Taip pat nepamirškime, kad sutvarkytą kodą yra daug lengviau panaudoti kitą kartą.

    Kaip struktūrizuoti kodą PAWN kalboje?
    Tiesą sakant per keletą metus programuojant PAWN išbandžiau daug variantų ir radau tik vieną man priimtiną, kuriuo aš ir pasidalinsiu, tačiau nieks nedraudžia naudoti ir kito, jums priimtinesnio varianto, svarbu tik tai, kad kodas išliktų tvarkingas.

    Taigi, tai ką aš siūlau, tai rašyti kiekvieną sistemą atskirame faile, panašiai kaip FS, tačiau šis failas bus įtraukiamas į pagrindinį GM failą, taip pat reiktų nepamiršti, kad viename projekte negali duplikuotis 2 event'ai, bet tai ne problema, galime sukurti naują eventą arba tiesiog visą kodą rašyti kaip stock'us.

    Sakykime rašome namų sistemą, taigi susikuriame naują failą `house.pwn` (plėtinį galite naudoti bet kokį, kaip jums patogiau), ir mūsų projekto struktūra atrodo taip:

    -- GM.pwn
    ---- Sistemos
    ------ house.pwn

    GM.pwn failas:
    Kodas (text):

    #include <a_samp>
     
    // Systems
    #include "Sistemos/house.pwn"
     
    // visi callback'ai
     
    public OnPlayerConnect(playerid)
    {
        House_OnPlayerConnect(playerid);
    }
     
    Sistemos/house.pwn failas:
    Kodas (text):

    stock House_OnPlayerConnect(playerid)
    {
        SendClientMessage(playerid, -1, "Sveiki. Tai pavyzdinė namų sistema.");
    }
     
    Kaip matote pirmajame faile (pagrindiniame) includinau mūsų namų sistemą bei į OnPlayerConnect callback'ą įdėjau, imituojantį tą patį callbacką, namų sistemoje stocką`House_OnPlayerConnect`.

    Taigi, mūsų visa namų sistema turi būti house.pwn faile (konstantos, kintamieji, callbackų apibrėžimai, funkcijos ir visą kitą ko nepaminėjau). GM.pwn failas turėtų tik perimti "dirbtinius" callbackus. Labiau benrinius dalykus taip pat galima rašyti GM.pwn faile, tačiau geresnė praktiką būtų juos taip pat išskirti į atskirus failus pvz. global_variable.pwn.

    Taigi, manau ties tuo ir baigsiu, apačioje pateikiu nuorodas į šiuo principu rašytus projektus, sistemas.

    https://drive.google.com/file/d/0B-l2zePf9wQsWkstT2hYNDZEZW8/edit?usp=sharing Mano rašytas ir nebaigtas GM TankWars.

    https://www.dropbox.com/sh/p4zlbn8gse4lzjn/AAB3xmLgyor47zovrB1wr3GIa/TD_Inventory.zip Inventoriaus sistema integruoama tieisog GM perduodant callback'us.

    Ačiū už dėmesį.

    Pagarbiai,
    Gintas
     
    • Mėgstu Mėgstu x 4

Dalintis šiuo puslapiu

Kraunama...