Szerző Téma: törlendõ  (Megtekintve 773 alkalommal)

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
törlendõ
« Dátum: 2013. június 23. - 11:32:26 »
0 Show voters
Sohasem volt semmi baj a kóddal, nem adott vissza hamis eredményeket, mindig mindent a megfelelõ, elvárt módon tett.

törlendõ
« Válasz #1 Dátum: 2013. június 23. - 12:21:34 »
0 Show voters
Értem, hát elkezdtem tesztelni igaz kivettem a GetPlayerName eljárást de így érdekes módon az strcmp már hamis eredményt adott vissza abban az esetben ha üres karakterlánccal lett összehasonlítva, szóval el se jutottam az strfind részhez:
 
#include <a_samp>
#define GetPlayerName(%0,%1,%2) macskasszendvics = GetName[%0]
new
GetName[MAX_PLAYERS][128];
public
OnFilterScriptInit()
{
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 = 0
strcmp elõtt: Vaami <-> Val = 1
strcmp elõtt: mi <-> Val = 2
strcmp elõtt: i <-> Val = 3
strcmp elõtt: mi <-> Val = 4
strcmp elõtt: ami <-> Val = 5
strcmp elõtt: Valami <-> Val = 6
strcmp elõtt: alami <-> Val = 7
strcmp után:  <-> Val = 7
GetPlayerID: 7
[/quote]
Ez az elsõ része annak hogy az IsPlayerConnected használata szükséges. :D


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.
« Utoljára szerkesztve: 2013. június 23. - 12:32:53 írta ɐʞzssǝlosz »

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
törlendõ
« Válasz #2 Dátum: 2013. június 23. - 12:41:41 »
0 Show voters
Nálam mûködik, és megosztottam, ennyi :D Ha nem szerkesztgeted át mûködnie kell. Azért jó látni, hogy kicsit elfoglal téged a kód tesztelése :D Teszteld a céljára hivatottan. Pl. rakj be 29 NPC-t meg magadat, kérdezd le mindnek az ID-jét, egy parancsot írva hozzá. És nem lesz hiba szerintem. Habár én csak NPC-khez használom, hogy az ID-jük alapján megcsináltassak velük dolgokat, és még ott is csak a 11. NPC-nél járok, de eddig sehol sem volt hiba. De ettõl még a sima játékosoknál is ugyanúgy mûködnie kell. Amúgy ez a teszt dolog... Elég felküldeni pl. 10-20 NPC-t, és NPC Spawnolásakor kiprintelni az ID-jét. Engem nem érdekel, hogy bugos, amíg nálam nem bugol. És amíg nálam helyt áll, addig másoknál is helyt fog állni, mert nincs olyan, hogy ugyanaz a kód máshogy mûködne másnál.
ugyanaz
ugyanaz
ugyanaz
ugyanaz
ugyanaz
ugyanaz
ugyanaz
ugyanaz
Ha a kódba nem piszkálsz bele, és csak a GetPlayerID( // Név ); függvénnyel tesztelsz pl. spawnkor, vagy egy paranccsal, és úgy találsz hamis egyezést/hibát/bugot, akkor elismerem, hibás is lehet a kód egyes esetekben. Ez esetben nekem is újra lesz szükségem, habár mint leírtam ezerszer, nekem kiválóan helytáll :D

Nem elérhető Sramm

  • 596
    • Profil megtekintése
törlendõ
« Válasz #3 Dátum: 2013. június 23. - 12:44:58 »
0 Show voters
De minek eddig bonyolítani?
 
stock GetPlayerID(pname[])  
{
    new i;
    sscanf(pname, \"u\", i);
    return i;
}

törlendõ
« Válasz #4 Dátum: 2013. június 23. - 13:15:00 »
0 Show voters
Jó hát én azoknak írtam akik szeretnék használni hogy ne tegyék, mivel a kód hibás bármennyire is bizonygatod hogy nálad jó, én elfogadom hogy neked jó de másokat nem kell megtéveszteni. 
Amúgy Sramm által posztolt verzió meg praktikusabb és egyszerûbb azt javaslom bárkinek. :D
A kód a céljára megfelelõen lett tesztelve, az átírások debug információk megjelenítésére kerültek bele melyek a (hibás) mûködést bizonyítják, annak eredeti mûködését nem befolyásolják, viszont sokkal egyszerûbben lehet elvégezni a tesztelést mintsem 20 npc-t felküldeni a szerverre és az alapján tesztelni. A végeredményen nem javítana, a tökéletes mûködés bizonyítása már ezek után a te feladatot.
« Utoljára szerkesztve: 2013. június 23. - 14:25:59 írta ɐʞzssǝlosz »

Nem elérhető Dfoglalo

  • 4069
  • Globális Moderátor
    • Profil megtekintése
törlendõ
« Válasz #5 Dátum: 2013. június 23. - 14:53:22 »
0 Show voters
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. :)

Nem elérhető Sramm

  • 596
    • Profil megtekintése
törlendõ
« Válasz #6 Dátum: 2013. június 23. - 15:38:43 »
+1 Show voters
Idézetet írta: Dfoglalo date=1371992002\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"44770\" data-ipsquote-contentclass=\"forums_Topic
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. :)
 
Nem hogy örülnél, hogy szóltak , hogy hibás..
\"kidding-me.png\"

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
törlendõ
« Válasz #7 Dátum: 2013. június 23. - 15:46:51 »
0 Show voters
Idézetet írta: Dfoglalo date=1371992002\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"44770\" data-ipsquote-contentclass=\"forums_Topic
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;
}
« Utoljára szerkesztve: 2013. június 23. - 15:48:43 írta DrAkE »

Nem elérhető Sramm

  • 596
    • Profil megtekintése
törlendõ
« Válasz #8 Dátum: 2013. június 23. - 16:00:13 »
0 Show voters
Idézetet írta: DrAkE date=1371995211\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"44770\" data-ipsquote-contentclass=\"forums_Topic


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:
Sajtoscsokis
Sajtoscsokiska
Akkor Sajtoscsokiskát is beleszámolja, mivel benne van a sajtoscsokis, és azt észleli az strfind..

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
törlendõ
« Válasz #9 Dátum: 2013. június 23. - 16:09:07 »
0 Show voters
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)

Nem elérhető Sramm

  • 596
    • Profil megtekintése
törlendõ
« Válasz #10 Dátum: 2013. június 23. - 16:51:38 »
0 Show voters
Idézetet írta: DrAkE date=1371996547\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"44770\" data-ipsquote-contentclass=\"forums_Topic
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, akit keresünk.
« Utoljára szerkesztve: 2013. június 23. - 18:48:09 írta Sramm »

törlendõ
« Válasz #11 Dátum: 2013. június 23. - 17:21:01 »
0 Show voters
Idézetet írta: Sramm date=1371999098\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"44770\" data-ipsquote-contentclass=\"forums_Topic
Valóban, csakhogy ha Sajtoscsokiskának kisebb az id-je vele fog elõször visszatérni és nem sajtoscsokissal, akik keresünk.
 
Így van mivel a for ciklus 0 tól indul el tehát a legkisebb id-vel rendelkezõ játékost ellenõrzi és ahol egyezést talál azzal tér vissza, erre már sokan próbáltak megoldást találni de az újabb sscanf pluginban már van olyan visszatérési értéke a sscanf-nek ami jelzi hogy több esetleges találat is létezik.
 
0) Y_Less
1) [CLAN]Y_Less
2) Jake
3) Alex
4) Hass
This 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.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal