Fájlok és könyvtárak - orosz közösség scripting AMXX

Munka könyvtárak
Kód: Egész kiválasztása read_dir (const dirname # 91; # 93;, poz. kibocsátás # 91; # 93;, len. outlen)
Ez a funkció célja, hogy olvassa el a könyvtár tartalma. A függvény visszaküldi az index a következő elem egy mappában vagy 0, ha a végére ért a könyvtár és a fájl már nem létezik.
Megjegyzés: Ez a funkció nem hatékony, és helyette ajánlott open_dir.
Kód: Egész kiválasztása dir_exists (const dir # 91; # 93;)
Ez a funkció azt méri, hogy a megadott könyvtár létezik. Értéke 1, ha könyvtár létezik, vagy 0 egyébként.
Kód: Egész kiválasztása rmdir (const útvonal # 91; # 93;)
Ezt a funkciót arra tervezték, hogy távolítsa el a könyvtárba. Ha a mappa tartalmaz fájlokat nem lehet törölni.
Kód: Egész kiválasztása mkdir (const dirname # 91; # 93;)
Ez a funkció célja, hogy hozzon létre egy könyvtárat. Ez értéke 0, ha sikeres.
Kód: Egész kiválasztása open_dir (dir # 91; # 93;, firstfile # 91; # 93;, hossz)
Ez a funkció célja, hogy nyissa meg a könyvtárat olvasásra. Visszaad egy pointert a könyvtárba, vagy 0 egyébként. Rámutatva, hogy a könyvtár dir paramétert. úgy vélik, hogy te vagy a mod könyvtárba (például, cstrike). De lehetséges, hogy vonja vissza a könyvtárakat, és nagyobb mennyiségben (egy /.), Például:
Kód: Egész kiválasztása
új i_Dir. s_File # 91; 128 # 93;
i_Dir = open_dir ( "../". s_File. charsmax (s_File))

Már találjuk magunkat a fő könyvtárban a szerver, ahol hlds.exe. De van egy határ, akkor nem kap ki a logikai partíció, amelyen a kiszolgáló található a merevlemezen volt.
Kód: Egész kiválasztása next_file (dirh puffer. # 91; # 93;, hossz)
Ez a funkció beolvassa a következő fájlt a megadott könyvtárba az indexet. Return 1 siker esetén, vagy 0 egyébként.
Kód: Egész kiválasztása close_dir (dirh)
Bezárja a könyvtárat, amelyet az index. Ki kell használni a mutatót a jobb oldalon, ami open_dir.

Például levelet beépülő, ami olvassa el az összes kártyát a könyvtárban. / Mirage / térképek és megjeleníti őket a szerver konzolon:
Kód: Egész kiválasztása #include

#define beépülő modul "Read Maps"
#define VERSION "1.0"
#define AUTHOR "DJ_WEST"

nyilvános plugin_init ()
register_plugin (bővítményt. VERSION. szerző)

új i_Dir. s_File # 91; 128 # 93;

// Add a mutatót a könyvtárba cstrike / térképek i_Dir
i_Dir = open_dir ( "maps". s_File. charsmax (s_File))

// Ellenőrizze, hogy a könyvtár létezik
if (i_Dir)
server_print ( "*** MAPS ***")

// Amíg next_file vissza értéket! = 0 O kártya a konzol
míg a (next_file (i_Dir. s_File. charsmax (s_File)))
// Ellenőrizze az első karakter a fájl „”, Ez nem levezetni
// A függvény olvas „” és „..”, amelyek nem fájlok,
// hanem egyszerűen azt mondják, hogy van egy könyvtár feletti
if (s_File # 91; 0 # 93; == '' )
folytatódik

// Ellenőrizze, hogy a fájl tartalmazza .bsp hogy azt mondja, hogy ez a térkép
// Mivel a könyvtár más is lehet fájlokat vagy könyvtárakat
if (.! oldószerelegy tartalmaz (s_File ".bsp") = - 1)
server_print (s_File)
>
>
>

Fájlok (a régi módon)
Kód: Egész kiválasztása file_exists (const fájl # 91; # 93;)
Ez a funkció azt méri, hogy a megadott fájl létezik. Értéke 1, ha van, vagy 0 egyébként.
Kód: Egész kiválasztása delete_file (const fájl # 91; # 93;)
Ez a funkció célja, hogy távolítsa el a megadott fájlt. Return 1 siker esetén, vagy 0 egyébként.
Kód: Egész kiválasztása read_file (const fájl # 91; # 93;, vonal. szöveg # 91; # 93;, len. txtlen)
Ez a funkció célja, hogy olvasni egy sort a fájlban. Visszaadja az index a következő sorba, vagy 0, ha a végén a fájlt. Sor a fájlban kezdődik 0 szobák. Az említett vonal (paraméter sor), olvassa be a szöveget, hogy a megadott hosszúságú len. A karakterek száma már olvasható tároljuk txtLen.
Kód: Egész kiválasztása write_file (const fájl # 91; # 93; const szöveg # 91; # 93;, vonal = - 1)
Ez a funkció a vonal bejegyzést a fájlt a megadott helyen. Visszaadja 0 sikertelen végrehajtását. Ha a -1 vonal, a vonal rögzíti a fájlt. Automatikusan létrehozza a fájlt, ha nem létezik.
Kód: Egész kiválasztása rename_file (const oldname # 91; # 93;, const newname # 91; # 93;, relatív = 0)
Ez a funkció a fájlok átnevezésére. Return 1 siker esetén, vagy 0 egyébként. Ha a relatív nem 0, akkor feltételezhető, hogy az aktuális könyvtárban - könyvtár divat. Ellenkező esetben az aktuális könyvtárban nincs meghatározva (de címtárkiszolgálóra HLDS).
Kód: Egész kiválasztása FILE_SIZE (const fájl # 91; # 93;, flag = 0)
Ez a függvény a fájl mérete. Ha a zászló:
0 - file mérete bájtban
1 - a sorok számát a fájlban
2 - értéke 1, ha a fájl végződik soremelés
Ha a fájl nem létezik, akkor vissza -1.
Kód: Egész kiválasztása filesize (const fájlnév # 91; # 93;, bármilyen. )
Ez a függvény a fájl mérete. fájlnév alakítható ki a formátumot stílus, azaz, hogy adja meg a változók minden.


Írja fájlba adatok masiiva patak blocksize méretű üzemmódot.
Lehetséges módok mód:
BLOCK_INT - rögzítésére bármilyen számot vagy karaktert
BLOCK_SHORT - írásához karakterek és értékek közötti tartományban -32.767 -> 32767
BLOCK_CHAR - írásához karakterek és értékek közötti tartományban -127 -> 127
BLOCK_BYTE - mint BLOCK_CHAR
Számát adja sikeresen írt blokkok.
Kód: Egész kiválasztása fprintf (file const FMT. # 91; # 93;, bármilyen. )
Ezt a funkciót a felvétel alakú sorokat a fájl.
Kód: Egész kiválasztása fseek (fájl pozíció Start ..)
Ez a funkció célja, hogy állítsa be az aktuális kurzor pozícióját a fájlban. álláspontja - az eltolás a kezdetektől fogva. indul lehet:
SEEK_SET - a fájl elején
SEEK_CUR - a kurzor aktuális pozíciója
SEEK_END - fájl vége
Kód: Egész kiválasztása ftell (fájl)
Ez a függvény az aktuális kurzor pozícióját a fájlban.
Kód: Egész kiválasztása fgets (fájlpufferre. # 91; # 93;, MAXLENGTH)
Ez a funkció az olvasás vonalak egy fájlból. Így hangzik a karaktereket a kocsihoz, és egy új sort.
Kód: Egész kiválasztása fgetc (fájl)
Ez a funkció célja, hogy olvasni egy karakter (1 byte) a megadott fájlkezelő.
Kód: Egész kiválasztása fgetf (fájl)
Ez a funkció célja, hogy olvassa el lebegőpontos érték (4 bájt, 8 AMD64) a meghatározott fájlkezelő. Ez a funkció eltávolítjuk AMXX 1.1.
Kód: Egész kiválasztása fgeti (fájl)
Ez a funkció célja, hogy olvasni egy egész értéket (4 bájt), a fájlt a megadott fogantyút. Ez a funkció eltávolítjuk AMXX 1.1.
Kód: Egész kiválasztása fgetl (fájl)
Ez a funkció célja az olvasás hosszú érték (4 bájt), a fájlt a megadott fogantyút. Ez a funkció eltávolítjuk AMXX 1.1.
Kód: Egész kiválasztása fputs (file const szöveget. # 91; # 93;)
Ez a funkció a felvétel karakterláncot egy fájlt a jelenlegi helyzetben a fájl mutatót. Visszaadja a karakterek számát írásbeli usppeshno.
Kód: Egész kiválasztása fputc (fájl)
Ez a funkció célja, hogy rögzítse egy karakter (1 byte) a megadott fájlkezelő.
Kód: Egész kiválasztása fputf (fájl)
Ezt a funkciót a felvétel lebegőpontos érték (4 bájt, 8 AMD64) a megadott fájlkezelő. Ez a funkció eltávolítjuk AMXX 1.1.
Kód: Egész kiválasztása fputi (fájl)
Ez a funkció a rögzítésére szolgál, egész számra (4 bájt) a megadott fájlba fogantyút. Ez a funkció eltávolítjuk AMXX 1.1.
Kód: Egész kiválasztása fputl (fájl)
Ez a funkció célja, hogy rögzítse hosszú érték (4 byte) a megadott fájlkezelő. Ez a funkció eltávolítjuk AMXX 1.1.
Kód: Egész kiválasztása fungetc (fájl adatait.)
Ez a funkció célja, hogy megőrizze a karakter (1 bájt) az adatokat.

Például egy plug-in, amely a RAW olvasás és írás, fenntartani a gőz id, nick, megöli, és megöli a játékosok, akik a szerveren stats.dat, valamint olvasni őket, miután a térképen változás (stats.dat fogja statisztikai játékos játszik a szerveren jelenleg több mint egy kártya):
Kód: Egész kiválasztása #include

#define beépülő modul „Player adatbázis”
#define VERSION "1.0"
#define AUTHOR „DJ_WEST schnitzelmaker "

#define MAX_PLAYERS 32

új g_FileName # 91; 256 # 93;

enum PLAYER_DATABASE
SteamID # 91; 32 # 93;,
NAME # 91; 32 # 93;,
felszerelést,
haláleset,

új g_PlayerData # 91; MAX_PLAYERS + 1 # 93; # 91; PLAYER_DATABASE # 93;
új bool. g_PlayerConnected # 91; MAX_PLAYERS + 1 # 93;

nyilvános plugin_init ()
register_plugin (bővítményt. VERSION. szerző)

// A könyvtár elérési útját adatok AMXX
get_datadir (g_FileName. charsmax (g_FileName))
// Mi képeznek a fájl elérési útját stats.dat
formátumban (g_FileName. charsmax (g_FileName), "% s / stats.dat". g_FileName)

// 1 másodperc után, hogy végre Read_Stats
set_task (1,0. "Read_Stats")

// 2 másodperccel a vége előtt időt kártyák elvégzésére Write_Stats
set_task (2.0. "Write_Stats". 0 "". 0 "d")
>

Stock get_datadir (s_Name # 91; # 93;, i_Len)
visszaút get_localinfo ( "amxx_datadir". s_Name. i_Len)
>

nyilvános client_connect (id)
g_PlayerConnected # 91; id # 93; = true
>

nyilvános client_disconnect (id)
g_PlayerConnected # 91; id # 93; = false
>

nyilvános Write_Stats ()
új i_File. i_Frags. i_Deaths

// Fájl megnyitása
i_File = fopen (g_FileName. "a +")

// Ha a fájl létezik
if (i_File)
az (új i = 1; i <= MAX_PLAYERS ; i ++)
if (g_PlayerConnected # 91; én # 93;)
i_Frags = get_user_frags (i)
i_Deaths = get_user_deaths (i)
get_user_authid (i. g_PlayerData # 91; én # 93; # 91; SteamID # 93;, charsmax (g_PlayerData))
get_user_name (i. g_PlayerData # 91; én # 93; # 91; NAME # 93;, 31)
num_to_str (i_Frags. g_PlayerData # 91; én # 93; # 91; felszerelést # 93;, charsmax (g_PlayerData))
num_to_str (i_Deaths. g_PlayerData # 91; én # 93; # 91; HALÁLESETEK # 93;, charsmax (g_PlayerData))

// írása
fwrite_raw (i_File. g_PlayerData # 91; én # 93; # 91; PLAYER_DATABASE. 0 # 93;, sizeof (g_PlayerData # 91; # 93;), BLOCK_INT)
>
>
/ *
g_PlayerData # 91; ID # 93; - Információ Player c id = i
# 91; PLAYER_DATABASE: 0 # 93; - az elején adatok
Rögzítéséhez csak a Steam ID használni kívánt: g_PlayerData # 91; id # 93; # 91; PLAYER_DATABASE: SteamID # 93;
sizeof (g_PlayerData # 91; # 93) - hossza beírandó adatok
* /

// Zárja be a fájlt
fclose (i_File)
>

nyilvános Read_Stats ()
új s_PlayerData # 91; PLAYER_DATABASE # 93;, i_File

// Fájl megnyitása
i_File = fopen (g_FileName. "a +")

// Ha a fájl létezik
if (i_File)
while (fread_raw (i_File. s_PlayerData # 91; PLAYER_DATABASE. 0 # 93;, sizeof (g_PlayerData # 91; # 93;), BLOCK_INT))
server_print ( "==============================")
server_print ( "gőz ID:% s" s_PlayerData. # 91; SteamID # 93;)
server_print ( "NÉV:% s" s_PlayerData. # 91; NAME # 93;)
server_print ( "felszerelést:% s" s_PlayerData. # 91; felszerelést # 93;)
server_print ( "halál:% s" s_PlayerData. # 91; HALÁLESETEK # 93;)
server_print ( "==============================")
>


// Távolítsuk stats.dat
if (file_exists (g_FileName))
delete_file (g_FileName)

Ne írjon nekem egy PM. Ha segítségre van szüksége, ingyenesen. Bármilyen kérdése van a fórum.

Hogyan hozzunk létre egy .dat fájlban


Mert akkor használja az esetben write_file funkció (fájl automatikusan létrejön).

és hogy lehet-e írni a bool értéke igaz és hamis


A write_file második érv (a szövegben a felvétel) a típusa „string”, és ezért meg kell írni az adatokat a vonal típusát. Írhatsz a „true” vagy „false” karakterlánc.

Ne írjon nekem egy PM. Ha segítségre van szüksége, ingyenesen. Bármilyen kérdése van a fórum.

Hogyan lehet megvalósítani az algoritmus a bővítmény (?):
Minden plug-in: dolgozik egy szöveges fájl, amely egy statisztika ebben a formátumban:


Ie írni a fájlba lesz ez: hogy a játékos egy becenevet, nem a keresés ciklus a fájlban nick a játékos, ha a becenevet még nem írt a fájlt, majd írni egy új karakterláncot ebben a formában egy sort ebben a formában:


Ha a becenevet találtak a fájlt, majd hozzá kell adni az 1-es számot, ami után a felhasználónév és a „;” jelképe. Hogyan kell csinálni ezt az egészet? Legalább néhány parancs ciklus használ?

Ez lesz a „kemény”, ha legalább lesz becenevek 500-1000. Úgy értem, hogy a konzerv végighalad a fájlt. Számomra úgy tűnik, jobb, ha az adatok tárolására a memóriában, és mentse a fájlt csak bizonyos esetekben. Mentheti a mutatót a vonal száma a statisztikák etmi becenevet, kivéve, persze, ez nem fog változni. Azaz, hogy megtalálják egyszer Vasya, emlékszik, hol van, és nyilván ez a vonal az iratbetekintési. Amikor egy új becenevet, és jegyezze meg a számot. Ez mind jó, persze, ha a felhasználónév lesz az egész játékban a játékos ugyanaz, de ha meg lehet változtatni, akkor változtassa meg 100-szor. Általában adattárolás nvault, SQL, stb

Ne írjon nekem egy PM. Ha segítségre van szüksége, ingyenesen. Bármilyen kérdése van a fórum.

Kérem, mondja meg!
Van egy szöveges dokumentum example.txt. Meg kell jegyezni, és akkor majd tárolni, mint egy húr a következő formában:

Játékos arg1 | IP [ARG2] | PID | C_Build: arg4 | Cl OS száma: Arg5

ahol arg1 - arg4 - összegyűjtött változókat, és tárolják a plugin.

Kérdés: hogyan kell ellenőrizni a mérkőzés arg3 (ellenőrzés a harmadik változó, mert egyedi az összes), ez lenne az egyik, és az ugyanabban a sorban a fájl nem kerül rögzítésre. A rekord ebben a fájlban végezzük sorban client_putinserver funkció (id), azt hiszem, egyértelmű, hogy ha nem ellenőrizze véletlen, hogy mennyi időt fog menni a szerver, és ahányszor fog propisyvatsya vonalat.

X-faktor. valahogy akkor:
[Gyalog] #include

#define PLUGIN "Plugin"
#define VERSION "1.0"
#define AUTHOR "Kibocsátó"

#define FILE "example.txt"

nyilvános plugin_init ()
register_plugin (bővítményt. VERSION. szerző)

nyilvános client_connect (id)
új vonal # 91; 32 # 93;, AUTHID # 91; 34 # 93;, i_LineCount. nulla

// Az egyéni paraméter arg3. Például, akkor AUTHID.
get_user_authid (id. AUTHID. charsmax (AUTHID))

while (read_file (FILE. i_LineCount ++, Line. charsmax (Line), null))
if (tartalmaz (Vonal AUTHID) = -.! 1)
visszaút PLUGIN_HANDLED
>

// Itt a kód, írj a fájl sor „Player arg1 | IP # 91; arg2 # 93; | PID | C_Build: arg4 | Cl OS száma: Arg5 "
visszaút PLUGIN_HANDLED
> [/ Pawn]

#define PLUGIN "Plugin"
#define VERSION "1.0"
#define AUTHOR "Kibocsátó"

#define DIR "example_dir"

nyilvános plugin_init ()
register_plugin (bővítményt. VERSION. szerző)

nyilvános client_connect (id)
új AUTHID # 91; 34 # 93;, File_Argv # 91; 64 # 93;

// Az egyéni paraméter arg3. Például, akkor AUTHID.
get_user_authid (id. AUTHID. charsmax (AUTHID))

// Ha érvénytelen karaktert hozzon létre egy fájlt (például a vastagbél, és mások.), Akkor egy lehetőséget, hogy cserélje ki őket valami.
replace_all (. AUTHID charsmax (AUTHID), ":". "_")

// A fájl neve lesz egy egyéni beállítást.
formatex (File_Argv. charsmax (File_Argv), "% s /% s". DIR. AUTHID)

// Ellenőrizze, hogy létezik a fájl.
if (! file_exists (File_Argv))
// Ha nincs kulcs, a fájl létrehozásához.
write_file (File_Argv. "")

// Itt a kód a fájlba example.txt összhangban infoy.
>
> [/ Pawn]

Ne feledje, hogy mindig az élet a festmény jóvoltából, és nyugodt, nem a támadások és olcsó Ponte