#include <a_samp>#define GetPlayerName(%0,%1,%2) macskasszendvics = GetName[%0]newGetName[MAX_PLAYERS][128];publicOnFilterScriptInit(){GetName[0] = \"Vaami\";GetName[1] = \"mi\";GetName[2] = \"i\";GetName[3] = \"mi\";GetName[4] = \"ami\";GetName[5] = \"Valami\";GetName[6] = \"alami\";printf(\"\\n\\n\\nGetPlayerID: %d\\n\\n\\n\", GetPlayerID(\"Val\", 1));return 1;}stock GetPlayerID(const sprintvan[], demar=0){new macskasszendvics[128];for(new i = 0; i < MAX_PLAYERS; i++){ printf(\"strcmp elõtt: %s <-> %s = %d\", macskasszendvics, sprintvan, i); GetPlayerName(i, macskasszendvics, sizeof(macskasszendvics)); if(strcmp(macskasszendvics, sprintvan, true) == 0) { printf(\"strcmp után: %s <-> %s = %d\", macskasszendvics, sprintvan, i); return i; }}new sajtkukac = -1;new kutyasmacska[128];new nefurgyele = -1;if(demar){ for(new i = 0; i < MAX_PLAYERS; i++) { GetPlayerName(i, kutyasmacska ,sizeof(kutyasmacska)); if(!strfind(kutyasmacska, macskasszendvics[demar], true, 0)) nefurgyele++, sajtkukac=i; if(nefurgyele > 0) return -2; }}return sajtkukac;}
strcmp elõtt: <-> Val = 0strcmp elõtt: Vaami <-> Val = 1strcmp elõtt: mi <-> Val = 2strcmp elõtt: i <-> Val = 3strcmp elõtt: mi <-> Val = 4strcmp elõtt: ami <-> Val = 5strcmp elõtt: Valami <-> Val = 6strcmp elõtt: alami <-> Val = 7strcmp után: <-> Val = 7GetPlayerID: 7[/quote]Ez az elsõ része annak hogy az IsPlayerConnected használata szükséges. Most megnézem az strfind részét is.Edit: Nem is vizsgálom tovább mivel az strfind résznél: if(!strfind(kutyasmacska, macskasszendvics[demar], true, 0)) Nem látom az eredeti keresett szövegrészhez tartozó változó használatát (sprintvan). Így igazából nem értem hogy miként került át a macskasszendvics[demar] változóba a keresett kifejezés mivel semmi erre utaló eljárással nem találkoztam elõtte. Amúgy ez a változó macskasszendvics[demar] a legutolsónak csatlakozott játékos nevét tárolná, persze azt is csak akkor ha használva lenne az IsPlayerConnected.Ezért szerintem vizsgáld át újra a kódod és ha tényleg megfelelõen mûködik azután postold ki a fórumra.
if(!strfind(kutyasmacska, macskasszendvics[demar], true, 0))
stock GetPlayerID(pname[]) { new i; sscanf(pname, \"u\", i); return i;}
Tudtam hogy valamit kiteszek, csak mert szeretném megosztani veletek, máris rossz lesz. Király. Akk 1 mod törölje a témát a p*ba.
stock GetPlayerID(const nev[]){new i = -1,d[MAX_PLAYER_NAME];for(;++i < MAX_PLAYERS;)if(IsPlayerConnected(i) && (strfind((GetPlayerName(i, d, MAX_PLAYER_NAME), d), nev) != -1)) return i;return INVALID_PLAYER_ID;}
Tudtam hogy valamit kiteszek, csak mert szeretném megosztani veletek, máris rossz lesz. Király. Akk 1 mod törölje a témát a p*ba. Itt nem azzal van a gond, hogy te kiraktad, hanem az, hogy ha valaki olyan ember ír ide, aki ért a scripteléshez, egy olyan építõ jellegû kritikát, ami feljavítaná a kódod, te azt már egybõl sértésnek veszed... Illetve értelmét se látom ezt használni, mivel ha valaki visszaakarja keresni egy játékos IDjét, ott van az SSCANF. Illetve azt sem értem, minek ezt a kódot túl bonyolítani. Nem értem minek kell elõször strcmpvel végig futni egy neven, majd azt megtenni strfindel is (persze ha igaz az érték). Mindegy lenne, ha egész végig strfinddal ellenõriznéd végig a játékos neveket.Rövidített: stock GetPlayerID(const nev[]){new i = -1,d[MAX_PLAYER_NAME];for(;++i < MAX_PLAYERS;)if(IsPlayerConnected(i) && (strfind((GetPlayerName(i, d, MAX_PLAYER_NAME), d), nev) != -1)) return i;return INVALID_PLAYER_ID;} [/quote]És ha két ilyen játékos van:SajtoscsokisSajtoscsokiskaAkkor Sajtoscsokiskát is beleszámolja, mivel benne van a sajtoscsokis, és azt észleli az strfind..
Ha megnézed azzal fog visszatérni, amelyiket legelõször megtalálja. (SSCANF is ha jól tudom a legkisebb IDjüt, tehát akit legelõször megtalál, azzal tér vissza)
Valóban, csakhogy ha Sajtoscsokiskának kisebb az id-je vele fog elõször visszatérni és nem sajtoscsokissal, akik keresünk.
0) Y_Less1) [CLAN]Y_Less2) Jake3) Alex4) HassThis code:pawn Code: new ids[3], i;if (sscanf(\"Le\", \"?<MATCH_NAME_PARTIAL=1>u[3]\", ids)) printf(\"Error in input\");for (i = 0; ids != INVALID_PLAYER_ID; ++i){ if (ids == cellmin) { printf(\"Too many matches\"); break; } printf(\"id = %d\", ids);}if (i == 0) printf(\"No matching players found.\"); [/quote]Így fel lehet sorolni azokat a játékosokat akiknek a nevükben egyezés található a keresett kifejezésre.Persze meg kell határozni mennyi találattal térjen vissza new ids[3] ezt az értéket növelhetjük, persze a keresett név részletet is legalább minimum 3 karakternyire határozzuk meg valóban kevesebb az esélye hogy 3-nál több egyezõ találatot kapunk.
new ids[3], i;if (sscanf(\"Le\", \"?<MATCH_NAME_PARTIAL=1>u[3]\", ids)) printf(\"Error in input\");for (i = 0; ids != INVALID_PLAYER_ID; ++i){ if (ids == cellmin) { printf(\"Too many matches\"); break; } printf(\"id = %d\", ids);}if (i == 0) printf(\"No matching players found.\");