#include #include #pragma semicolon 1 #define MAX_MAPS_NAME_LENGTH 64 //numarul maxim de caractere pe care poate numele hartii sa-l aibe new const g_szFileName [] = "block_maps.ini"; // cum se numeste documentul new g_szFile[128]; // adresa documentului de unde citesti hartile new bool:g_iStopPlugin; // o variabila globala pe care o folosim in alte functii sa vedem daca pluginul este oprit sau nu (valoarea default e false) new Array:g_ArrayMapName; // creeam un array unde stocam numele hartilor (mai multe detalii aici: https://forums.alliedmods.net/showthread.php?t=249602) public plugin_precache() // aici m-am obisnuit sa citesc documentul { new szConfigsDir[64]; get_configsdir(szConfigsDir, charsmax(szConfigsDir)); // luam "adresa" fisierului configs formatex(g_szFile, charsmax(g_szFile), "%s/%s", szConfigsDir, g_szFileName); // asta este adresa documentului (addons/amxmodx/configs/block_maps.ini); new iFile = file_exists(g_szFile); // nativa asta returneaza 1 daca documentul exista sau 0 daca nu exista if(!iFile) { set_fail_state("Documentul cu lista hartilor nu exista"); } else { new iFilePointer = fopen(g_szFile, "r"); // deschidem fisierul in modul citire, nativa fopen returneaza un fel de "id" unic al fisierului g_ArrayMapName = ArrayCreate(MAX_MAPS_NAME_LENGTH); // creeam arrayul unde se stocheaza numele hartilor new szData[64]; while(!feof(iFilePointer)) // pana cand este atins sfarsitul documentului se intampla ce e intre paranteze { fgets(iFilePointer, szData, charsmax(szData)); // stocam fiecare rand intr-un string if(szData[0] == ';' || szData[0] == '#') // facem o verificare, daca inaintea numelui hartii este ";" sau "#" sa nu citeasca numele hartii ca sa nu o blocheze continue; // asta inseamna sa treaca la urmatorul rand ArrayPushString(g_ArrayMapName, szData); // stocam numele hartii in arrayul respectiv. (de ce folosim array ai in linkul de mai sus) // aici se trece la urmatorul rand din document } check_mapname(); } } public check_mapname() { new szMapName[MAX_MAPS_NAME_LENGTH], szArrayMapName[MAX_MAPS_NAME_LENGTH]; get_mapname(szMapName, charsmax(szMapName)); // asta e nativa ca sa aflam mapa curenta for(new i = 0; i < ArraySize(g_ArrayMapName); i++) // citim numele hartilor stocate din array, daca nu stii ce face functia for cauta pe net { ArrayGetString(g_ArrayMapName, i, szArrayMapName, charsmax(szArrayMapName)); // stocam informatiile din array intr-un string local if(equali(szMapName, szArrayMapName)) // verificarea daca harta actuala este aceeasi cu cea citita din fisier { g_iStopPlugin = true; // variabila care opreste pluginul, o setam pe true break; // oprim citirea arrayului ca sa nu se continue degeaba } } } public plugin_end() { ArrayDestroy(g_ArrayMapName); // obligatoriu cand avem arrayuri trebuie "distruse" in plugin_end } public ce_vrei_tu_sa_faci() { if(g_iStopPlugin == true) { return PLUGIN_HANDLED; // functia nu se mai continua daca variabila din for e pe true } // cod in cazul in care variabila e pe false (adica daca harta nu este blocata) return PLUGIN_CONTINUE; }