Jump to content

Tanga

Uživatel
  • Příspěvků

    1278
  • Registrován

  • Aktivní

  • Vítězných dnů

    29

Příspěvky posted by Tanga

  1. Stačí ti fopen().

    Lebo ako hovorí wiki o fopen,

    Return Values:
    Returns the file handle. This handle is used for reading and writing. 0 if failed to open file.

    Pomocou fopen() sa pokúsiš vytvoriť súbor v jednom z tých priečinkov. Skontroluješ návatovú hodnotu funkcie - ak bude 0, nebolo možné daný súbor vytvoriť.

    • Řekni nám o tom ještě něco 1
    • Haha! 1
    • Líbí se mi to! (+1) 1
  2. Asi máš na mysli includ file.inc, ktorý sa nachádza v priečinku pawno/include.

    Toto je jeho obsah, teda funkcie, ktoré môžeš používať:

    /* File input/output functions
     *
     * (c) Copyright 2004-2005, ITB CompuPhase
     * This file is provided as is (no warranties).
     */
    #if defined _file_included
      #endinput
    #endif
    #define _file_included
    #pragma library File
    
    enum filemode
        {
        io_read,            /* file must exist */
        io_write,           /* creates a new file */
        io_readwrite,       /* opens an existing file, or creates a new file */
        io_append,          /* appends to file (write-only) */
        }
    
    enum seek_whence
        {
        seek_start,
        seek_current,
        seek_end,
        }
    
    const EOF = -1;
    
    native File:fopen(const name[], filemode: mode = io_readwrite);
    native bool:fclose(File: handle);
    native File:ftemp();
    native bool:fremove(const name[]);
    
    native fwrite(File: handle, const string[]);
    native fread(File: handle, string[], size = sizeof string, bool: pack = false);
    native bool:fputchar(File: handle, value, bool: utf8 = true);
    native fgetchar(File: handle, value, bool: utf8 = true);
    native fblockwrite(File: handle, const buffer[], size = sizeof buffer);
    native fblockread(File: handle, buffer[], size = sizeof buffer);
    
    native fseek(File: handle, position = 0, seek_whence: whence = seek_start);
    native flength(File: handle);
    native fexist(const pattern[]);
    native bool:fmatch(name[], const pattern[], index = 0, size = sizeof name);

    Jednoducho si daj názov funkcie do googlu (napr. "fopen samp wiki") a nájdeš vysvetlenie čo daná funkcia robí.


    *fmatch() nefunguje a zdá sa mi, že fopen() s módom io_readwrite ak najprv zapisuješ a potom čítaš - nefunguje, lebo fwrite() neflushne buffer súboru. Ale to sa mi len zdá, neviem už či to tak je naozaj. (io_readwrite najprv čítanie a potom zapisovanie ale určite funguje v poriadku)

  3. Missing Brackets Detector

    Pri chybnom počte zátvoriek v Pawn súbore sa stáva, že kompiler crashne. Nájsť takýto problém (resp. či ide práve o tento problém) je časovo náročné a nudné. Všimol som si, že neexistuje podobný funkčný program (na zahraničných fórach sa dajú nájsť, no niektoré chybne detekujú zátvorky vnútri stringov, alebo komentárov a iné sú strašne pomalé kvôli zlému návrhu, prípadne nevhodnému jazyku.

    Preto som dal dokopy malý program, ktorý rieši daný problém a môžete si ho tu stiahnuť.

    V prípade, že by ste našli nejakú chybu, nezrovnalosť, alebo máte nejaký návrh, prosím napíšte mi.

    Použitie

    Jedná sa o command-line utilitu, čiže sa spúšťa z príkazového riadku. Po stiahnutí a uložení do nejakého priečinka, v ktorom je "testskript.pwn", je možné použiť program takto:

    C:\Users\..>cd brackets
    C:\Users\..\brackets>brackets.exe testskript.pwn
    No incorrect / unmatching brackets were found.
    C:\Users\..\brackets>

    Download

    Source - https://gist.github.com/ts12311122014/b8763c771a30bfc75d1961676d393245

    • Děkuji (+1) 1
    • Líbí se mi to! (+1) 2
  4. Pekný help thread. Čitateľný, zrozumiteľný, so všetkým čo treba.

    Nemôže byť chybné va_SendClientMessage? Odhadujem z videa a crashdetectu čo si priložil.
    Skús tam dať obyčajné SCM.

  5. Predpokladám, že úplný začiatočník s programovaním by si chcel overiť funkčnosť jeho premenných, no nevedel by ako na to.

    Na vypisovanie informácií na konzolu sa používa funkcia printf().

    Prekopírujte, skompilujte, spustite a preštudujte si nasledujúci kód a malo by vám to byť jasné.

    #include <a_samp> // obsahuje definiciu funkcie printf
      
    main() {
      printf("Tento text sa zobrazi na konzole."); // vypise obycajny text
    
      new number = 42;
      printf("Hodnota cisla je: %d.", number);  // vypise hodnotu premennej typu cislo
     
      new string[]= "simple message"; // o stringoch sa viac dozviete v dalsich z vEndovych navodov
      printf("String obsahuje text: %s a nase predosle cislo bolo: %d.", string, number);
     
      new character = '@';
      printf("Nejaky znak: %c.", character); // @
    
      new Float:real = 0.61;
      printf("Nejake krasne desatinne cislo: %f", real);
    
      new pole[] = { 1, 2, 3 }; // opat vec na ktoru narazis v nasledujucom vEndovom navode
      printf("%d %d %d", pole[2], pole[1], pole[0]);
    }

     

  6. Na disconnecte nerušíš hodnotu textdrawu, nie je možné, že po pripojení má hráč textdraw z predošlého hráča (minimálne na chvíľu)?
    Ale hlavne, prečo nepoužívaš PlayerTextdrawy? Nie je možné, že prekračuješ limit globalnych textdrawov a deje sa to isté ako keď sa bugujú dialogy (rovnaké IDčka)?

  7. před 3 hodinami, Quiter said:

    Skús stiahnúť iný sscanf - možno je poškodeny. Prečo nepoužiješ plugin? Funguje príkaz normálne keď dáš preš sscanf?

    Súhlasím, v praxi som videl sscanf iba ako plugin. Tento plugin tiež obsahuje .inc súbor (ktorý musíš použiť), ale nenachádza sa v ňom žiadny kód (iba prepojenie s pluginom).

  8. Vyzera ze nevies co su ,,funkcie,, v programovani atd... Fakt najdi si knihu pre zaciatocnikov v programovani a to ti pomoze. Neodporucam jazyk java (na pawn sa vobec nepodoba)

    PS. Vsetci co su tu a chceli programovat ked mali 13 rokov tak to tak museli urobit. (Pripadne tutorialy na webe, ale musis iim fakt porozumiet) ;)

    • Líbí se mi to! (+1) 2
  9. Čo je to pointer

    Využitia sú rôzne a pointery sa nachádzajú všade. Asi najznámejší ukazovateľ je "CIP" - current instruction pointer na architektúre x86. Všeobecne sa mu hovorí program counter. Na čo slúži? Jednoducho keď sa vykonáva kód, musíš vedieť ktorú inštrukciu vykonávaš.. A adresa tejto inštrukcie je vždy uložená na špeciálnom mieste - CIP. CIP sa zvyšuje prípadne upravuje s tokom programu.

    Napríklad pred volaním funkcie v Pawn je adresa nasledujúcej vykonávanej inštrukcie uložená do RAM. Do CIP sa vloží adresa na začiatok volanej (novej) funkcie. Po návrate z nej sa obnoví pôvodný CIP a pokračuje sa vo volajúcej (starej) funkcii.

    Pointer v Pawn

    Pawn bol navrhnutý tak, aby neobsahoval pointre, pretože pre neskúsených programátorov predstavujú riziko (ak uložíš dáta na miesto kam nemôžeš, jednoducho ti crashne appka). Napriek tomu na pointery môžeš naraziť. Väčšina významnejších kódov ich priamo používa (viaceré z knižnice y_ysi).

    Využívajú sa aj tu:

    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z); // tato funkcia nevracia returnom hodnotu, ale ulozi hodnoty do premennych x, y, z

    GetPlayerPos() prevezme adresy (resp. referencie), nie hodnoty a upraví to, čo je na daných adresách.
    Ak by si chcel urobiť niečo podobné (použiť referencie (referencie pracujú ako pointery) a prebrať adresy premenných namiesto hodnôt), môžeš definovať referencie pomocou '&':

    stock GetPlayerPosEx(playerid, &Float:x, &Float:y, &Float:z) { // vsimni si znak '&'
      x = y = z = 0;
      return;
    }

    Pokročilejšie využitia pointerov v Pawn už moc nemajú pre tvorcu módu význam a vyžadujú hlbšie znalosti nízkoúrovňových programovacích jazykov.

×
×
  • Create New...