Üzenetek megjelenítése

Ez a szekció lehetővé teszi a felhasználó által írt összes hozzászólás megtekintését. Vedd figyelembe, hogy csak azokba a fórumokba írt hozzászólásokat látod, amelyekhez hozzáférésed van.


Üzenetek - ZeRo

Oldalak: 1 ... 276 277 [278] 279 280 ... 306
4156
Idézetet írta: Vampesz date=1271350768\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1375\" data-ipsquote-contentclass=\"forums_Topic
Nagyon szépen köszönöm :shy: és végre értem :) már csak majd be is kell tanulni és gyakorolni-gyakorolni-gyakorolni-gyakorolni-gyakorolni-gyakorolni-gyakorolni :D
 
Örülök ha tényleg sikerült egy új módszert( jobb módszert ) mutatnom.  ;) Amint már írtam, még bovítve lesz ez a leírás, majd jelzem itt, hozzászólásban.

4157
Média / Codename: Aviation Organization szerver bemutató képek
« Dátum: 2010. április 15. - 18:46:52 »
Nem nehéz ilyet csinálni, viszont az ötletedért csodállak téged.  ;) Szép munka( / lesz ).  ;)

4158
A sscanf függvény
 
Mi is ez?
A sscanf függvény segítségével karakterláncokat bonthatunk szét megadott egységek szerint. Hasonlít a strtok függvényre, de sokkal gyorsabb, egyszerûbb, és sokoldalúbb is.
Telepítés / üzembehozás
Elõször is töltsük le a plugint innen, majd a szervermappád/plugins mappába másold be a sscanf.dll-t. Ezután nyisd meg a server.cfg-t, és a plugins sorhoz add hozzá a sscanf-ot így:
 
plugins sscanf

 

plugins sscanf.so

 
Most helyezzük el a sscanf2.inc-t a szervermappánk/pawno/include mappában. Ezek után nyissuk meg a Pawno-t, és ágyazzuk be a fejállományt:
[pawn]#include < sscanf2 >[/pawn]
És már használhatjuk is a függvényt!
Megjegyzés: Ha a forrásodban a sscanf valamelyik régebbi verzióját használtad, akkor töröld ki, mivel a fordító nem fogja átfordítani a kódodat!
Mûködése
Mint már fentebb említettem, megadhatjuk, hogy az általunk kiválasztott sztringet milyen formátum( ok )ba darabolja szét. Ez sokkal egyszerûbb, mint amilyennek hangzik.  ;) Lássunk egy példát!
[pawn]
public OnFilterScriptInit(  ) {
    //Tárolók létrehozása
    new szStr[ 12 ];
    new iNum;
    //A karakterlánc szétválasztása, és a darabok elhelyezése a megfelelõ tárolókban
    sscanf( \"Sscanf 2\", \"s[12]i\", szStr, iNum );
    print( szStr );
    printf( \"%i\", iNum );
    return;
}
[/pawn]
Az alábbi eljárást lefuttatva ezt az eredményt kapjuk:
 

Sscanf
2

 
Fontos észrevennünk, hogy így a részek a megadott formátumba kerülnek át a sztring formátum helyett( kivétel ha sztring formátumba választjuk szét, akkor ugyanaz marad természetesen ).
Lehetséges elválasztók:
Jelölés                      NévPéldaérték
i, dInteger1, 42, -10
cKaraktera, o, *
sKarakterláncsztring, példa
lLogikaitrue, false
bBináris01001, 0b1100
h, xHexadecimális1A, 0x23
oOktális045 12
nSzám42, 0b010, 0xAC, 045
fLebegõpontos0.7, -99.5
gIEE lebegõpontos0.7, -99.5, INFINITY, -INFINITY, NAN, NAN_E
uFelhasználó név/id                      ZeRo, 1
qNPC név/idShopBot, 13
rJátékos név/idZeRo, 33
Az \'átmentés\' módszere:
Íme egy rossz példa:
[pawn]sscanf( \"ez sscanf 2\", s[12]i, string, integer );[/pawn]
Ugyanis a fenti példában a \'sscanf\' karakterlánc( sztring ) típusú, de az elválasztásban mi az i betût használtuk, ami egész számot( integert ) kellene jelöljön. Ezt kiküszöbölhetjük az átmentés módszerével, aminek a jele a \\\\( mivel a sima \\ a fordítóprogram által már használatban van ). Tehát, az elõzõ példánk helyesen így nézne ki:
[pawn]sscanf( \"ez\\\\ sscanf 2\", s[12]i, string, integer );[/pawn]
Ha a string, és az integer nevû változók létre lennének hozva, és lefuttatnánk a fenti kódot, akkor az eredményünk a következõ lenne:
 

ez sscanf //Ez a \'string\' karakterlánc értéke
2 //Ez az \'integer\' változó értéke

 
Enumerációs elválasztás:
A sscanf egyik elõnye( például a strtok-al szemben ), hogy lehetõségünk van az adatokat egybõl egy felsorolt adattípusba( Enum ) rendezni. Ennek az elválasztásnak a jelölése egy \'e\' betûvel kezdõdik, ami az enumerációs elválasztást jelöli, egy \'<\' jellel folytatódik, ami az enumerációs elválasztás kezdetét jelöli, majd az elválasztók után egy \'>\' jellel végzõdik, ami pedig a folyamat végét jelöli. Egy példa:
[pawn]
//Globális névtérben létrehozunk egy felsorolt adattípust
enum eTest {
    szString[ 32 ],
    Float: fFloat,
    iInteger
}
new eData[ eTest ];
//És valahol hivatkozunk rá, mégpedig egy sztringbõl bemásoljuk az adatokat a megfelelõ helyekre
sscanf( \"Unformat 3.141593 2010\", \"e<s[32]fi>\", eData );
[/pawn]
Ezzel feltöltöttük értékekkel az eData vektort. De például, ha rossz sorrendben hivatkozunk rá, akkor hibaüzenetet fogunk kapni.
[pawn]sscanf( \"2010 Unformat 3.141593\", \"e<s[32]fi>\", eData);[/pawn]
Mivel a 2010 nem karakterlánc, az \'Unformat\' nem lebegõpontos érték, és a 3.141593 pedig nem egész típusú szám.
Ez a kis funkciója a függvénynek hasznos lehet például nagyobb játékmódoknál, vagy játékos-adatokat kezelõ rendszereknél, vagy bárhol máshol, ahol felsorolt adattípussal dolgozunk.
A \'kihagyás\' módszere:
A kihagyás lényege az, hogy a megadott részt beolvassuk a sztringbõl( bármilyen formátumú is az ), és ellenõrizzük( tehát feltétellel ki lehet szûrni, ha rossz a bevitt érték ), de a különbség az a sima elválasztással szemben, hogy itt a kihagyott rész nem kerül mentésre, tehát nem kell megadnunk változót a visszatérési értéknek.
A jele a \'{\', illetve a \'}\' karakterek, ami egyértelmûen a kihagyás kezdetét, és végét jelölik. Az alábbi példában az elsõ értéket kezeljük a kihagyással:
[pawn]sscanf( \"6 47\", {i}i, integer );[/pawn]
Amint fent is említettem, két értéket, és két elválasztó karaktert láthatunk, de csak egy visszatérési változót, aminek oka - amint már leírtam - az, hogy a kihagyással kezelt érték nem kerül mentésre, tehát a kód folytatása során nem tudunk rá hivatkozni.
Így a fenti példában az \'integer\' nevû változónk értéke 47 lesz, a 6 pedig törlõdik( elvetõdik ). És amint azt az elején leírtam, a bevitt adatok ugyanúgy ellenõrzésre kerülnek, tehát a következõ kód hibát eredményezne:
[pawn]
new integer;
if( sscanf( \"kettõ 2\", {i}i, integer ) )
[/pawn]
Mivel a \'kettõ\' sztring típusú, de mi integer típusú elválasztót rendeltünk hozzá( ugyan kihagyás van, de ezt nem zárja ki ).
Ezt a módszert akárhányszor alkalmazhatjuk az elválasztásaink során, amikor csak szükségünk van rá. Ezenkívül az enumerációs elválasztásokba is beágyazhatjuk õket, nem lesz rá hatással.
[pawn]sscanf( \"7 3.14 kutya 42 INFINITY x\", \"e<ifs[12]{ig}c>\", enumData );[/pawn]
Karakteres elválasztások
A függvénnyel lehetõségünk van továbbá karakterek által elválasztott adatok szétválasztására is. Nézzünk egy egyszerû példát!
[pawn]sscanf( \"1,2,3\", \"p<,>iii\", num1, num2, num3 );[/pawn]
A fenti kódrészletben a sztringet a megadott karakter mentén( itt a , mentén ) elválasztottuk, és integer típusú változókba helyeztük. Alakja egyszerû: a p jelenti a karakteres elválasztást, a < az elválasztás kezdetét, a benne lévõ karakter( itt a VESSZÕ ) az elválasztási karaktert, a > pedig az elválasztás végét( szerkezete majdnem megegyezik az enumerációs elválasztáséval ).
Ez a módszer természetesen mûködik az enumerációs elválasztásban is, és ez az egyetlen eset, ahol két <> van egymásba ágyazva. Egy példa:
[pawn]
//Létrehozunk egy enumerációs egységet
enum e_Data {
    int,
    Float: ffloat,
    string[ 24 ]
}
//Valahol hivatkozunk rá, mondjuk egy parancsban
new e_Var[ e_Data ];
sscanf( \"12432 3.14,ZeRo\", \"e<ip<,>fs[24]>\", e_Var );
[/pawn]
Ha csak karakterláncokkal használjuk ezt a módszert, akkor a mûvelet viselkedése kicsit módosul, ugyanis a legtöbb elválasztó érzékeny a szóközre. Ez azt jelenti, hogy például ez mûködni fog, annak ellenére, hogy nincs benne \';\' karakter:
[pawn]sscanf( \"1 2 3\", \"p<;>iii\", var0, var1, var2 );[/pawn]
De ez nem minden esetben mûködik. Példa egy kivételre:
[pawn]sscanf( \"hello 1\", \"p<->s[32]i\", str, var );[/pawn]
Itt ugyanis a str változó értéke hello 1 lesz. És végül zárjunk egy helyes példával:
[pawn]sscanf( \"hello there>27\", \"p<>>s[32]i\", str, var );[/pawn]
Ez mûködni fog, és a következõ eredményt adja vissza:
 

hello there
27

 
Példa egy parancsban való használatra
Az alábbi parancsban megmutatom, hogy mennyivel egyszerûbb kezelni ezt az egészet a sscanf-al, mint mondjuk a strtok-al. Nézzünk egy /pm parancsot!
[pawn]
CMD:pm( playerid, params[  ] ) {
    //Tároló létrehozása az azonosítónak, és az üzenetnek
    new iPid;
    new szMsg[ 100 ];
    if( sscanf( params, \"is[100]\", iPid, szMsg ) ) {
        SendClientMessage( playerid, COLOR_RED, \"Használat: /pm < JátékosID > < Üzenet >\" );
    } else if( !IsPlayerConnected( iPid ) || IsPlayerNPC( iPid ) ) {
        SendClientMessage( playerid, COLOR_RED, \"Érvénytelen azonosító!\" );
    } else {
        new szStr[ 128 ];
        format( szStr, sizeof szStr, \"[ PM ]: %s( %i ): %s\", GetPlayerNameEx( playerid ), playerid, szMsg );
        SendClientMessage( iPid, COLOR_YELLOW, szStr );
    }
    return 1;
}
GetPlayerNameEx( playerid ) {
    new z[ MAX_PLAYER_NAME ];
    GetPlayerName( playerid, z, sizeof z );
    return z;
}
[/pawn]
Megjegyzés:
A függvényt lehetõségünk van unformat néven is használni. Ezt az alternatív megoldást azért hozta létre Y_Less, hogy elkerülje a félreértéseket ezzel, és a C nyelv beli sscanf függvénnyel kapcsolatban.




Utolsó frissítés: 2011/05/09

4159
Ez a legbiztonságosabb enkódoló algoritmus( eddig ).
 
Idézetet írta: Y_Leѕѕ date=1235524867\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1369\" data-ipsquote-contentclass=\"forums_Topic


Okay i\'ve got 2 question:
Question 1: How do I \"Install\" this?
Just add it like any other plugin.
 

Question 2: Is it possible to like decrypt the algorytm?
 
[/quote]
Maybe with several years on a super computer.  Whirlpool is one of the most advanced hashing algorithms about (excluding the NIST SHA-3 candidates), I can\'t even find data on collision complexity, let alone collisions (and forget about direct decryption).
The point of a hash is to encrypt data so you can run comparisons on it, but not get the original back, it would be pretty useless if you could.  MD5, possibly the most widely used hash, has been long since cracked, you can find a collision on a standard notebook in under a minute.
http://en.wikipedia.org/wiki/Cryptographic_hash_function
http://en.wikipedia.org/wiki/WHIRLPOOL
http://en.wikipedia.org/wiki/MD5
 
[/quote]


A dicséreteket köszönöm.  :)

4160
Stunt Liga / Jelentkezés
« Dátum: 2010. április 15. - 17:09:18 »
Szerintem Volnak az a baja, hogy a Vegas nem fut a laptopján. De amúgy tökmindegy, hogy mivel csinálod, nem azt fogják nézni.  :D Én se tudok vágni, mégis muszáj lesz.  :amazed:

4161
Stunt / Stunt Chat
« Dátum: 2010. április 15. - 16:56:27 »
Prec = precision = pontosság
Tehát hogy arra a zöld kis vékony párkányra landolsz.

4162
Stunt / Stunt Chat
« Dátum: 2010. április 15. - 16:24:54 »
Idézetet írta: TR!pL3 date=1271340639\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"64\" data-ipsquote-contentclass=\"forums_Topic
Az elsot kb 1 hete landolták 1 collabba, a 2.at még nem láttam. (nrg-vel persze, infivel mind 2 old)
 
Az Andromede miatt elvesztettem egy spotom.  :\'( Amúgy VTX, a felsobbi lehetoség az prec lenne?  :o  :amazed:

4163
Idézetet írta: Csabesz date=1271271496\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1369\" data-ipsquote-contentclass=\"forums_Topic
Szép leírás lett. Grat.
Jeje.. zcmd és sscanf.   :D :P
 
Köszi.  :D

4164
Idézetet írta: VTX date=1271268607\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1369\" data-ipsquote-contentclass=\"forums_Topic
Ez hasznos. Jól leírtad grat  ;)
 
Köszönöm.  ;)

4165
Whirlpool
 
Mi is ez?
Hála Y_Less-nek, a PAWN nyelvben is lehetõségünk van a Whirlpool algoritmus használatára, ami segítségével a legbiztonságosabban kezelhetjük szerverünkön a karakterláncokat. Általában ezek a karakterláncok jelszavak szoktak lenni, a példában is ezt fogom bemutatni.
Whirlpool? De sokféle más megoldás is van!
Igen, de azok könnyedén dekódolhatók, vagy rosszabb esetben még csak kódolva sincsenek. Nem vagyok benne biztos, hogy a szerver játékosai örülnének, ha tudnák, hogy a szervergazda kezében van a jelszavuk... Ezért jó a Whirlpool, mivel ( még egyenlõre ) nem lehet dekódolni.
Telepítés / Üzembehozás
Elõször is, töltsük le a plugint innen. Ezután helyezzük el a szervermappánk/plugins mappában( ha nincs ilyen mappa, akkor hozd létre! ), majd nyissuk meg a server.cfg-t, és adjuk hozzá a következõ sort:
 
plugins Whirlpool

 

plugins Whirlpool.so

 
( Megjegyzés: Ha már a server.cfg fájlunkban van plugins nevû sor, akkor ahhoz adjuk hozzá, ne csináljunk újat! )
Ezután nyissuk meg a Pawno-t, és ágyazzuk be a következõ képpen( csak ne más függvénybe rakjuk! ):
 
native WP_Hash( buffer[  ], len, const str[  ] );

 
Mostantól a rendelkezésünkre áll a függvény!
Példa a használatára
A példában egy regisztrációs rendszer jelszó \'mentését\' / ellenõrzését fogom leírni.
Megjegyzés: A példában a dini függvénykönyvtárat csak az egyszerûség kedvéért használtam! A példában szereplõ egyéb funkcióktól nem kell \'megijedni\', majd egy következõ leírásban azok is sorra kerülnek.  ;)
 

//Fejállományok beágyazása
#include < a_samp >
#include < dini >
#include < sscanf2 >
#include < zcmd >
//\'WP_Hash\' függvény nativálása
native WP_Hash( buffer[  ], len, const str[  ] );
//Definíciók
#define COLOR_GREEN       0x33AA33AA
#define COLOR_RED          0xFF0000AA
#define BUFFER_LEN          145
CMD:register( playerid, params[  ] ) {
//Tároló létrehozása a játékos által beírt sztringnek, és az \'új\' jelszónak
new szPass[ 32 ];
new szHash[ BUFFER_LEN ];
if( sscanf( params, \"s[32]\", szPass ) ) {
    SendClientMessage( playerid, COLOR_RED, \"Használat: /register < Jelszó >\" );
} else {
    //A jelszó kódolása a \'szHash\' sztringbe, majd elmentése a játékos adatlapjába
    WP_Hash( szHash, sizeof szHash, szPass );
    dini_Set( PlayerAccount( playerid ), \"Password\", szHash );
    SendClientMessage( playerid, COLOR_GREEN, \"Sikeres regisztráció!\" );
}
return 1;
}
CMD:login( playerid, params[  ] ) {
//Tároló létrehozása a játékos által beírt sztringnek, és a jelszónak
new szPass[ 32 ];
new szHash[ BUFFER_LEN ];
    if( sscanf( params, \"s[32]\", szPass ) ) {
    SendClientMessage( playerid, COLOR_RED, \"Használat: /login < Jelszó >\" );
} else {
    //A jelszó kódolása a \'szHash\' sztringbe
WP_Hash( szHash, sizeof szHash, szPass );
//A kódolt jelszó összehasonlítása a már lementett( kódolt ) jelszóval
if( strcmp( szHash, dini_Get( PlayerAccount( playerid ), \"Password\" ) ) != 0 ) {
    SendClientMessage( playerid, COLOR_RED, \"Helytelen jelszó!\" );
} else {
    SendClientMessage( playerid, COLOR_GREEN, \"A bejelentkezés sikeres volt!\" );
}
}
return 1;
}
GetPlayerNameEx( playerid ) {
new z[ MAX_PLAYER_NAME ];
GetPlayerName( playerid, z, sizeof z );
return z;
}
PlayerAccount( playerid ) {
new z[ 64 ];
format( z, sizeof z, \"/Users/%s.dat\", GetPlayerNameEx( playerid ) );
return z;
}

4166
Törölt RP Szerverek / Little Village RPG
« Dátum: 2010. április 14. - 18:58:09 »
A szerver nevét átírtam.  ;)

4167
Segítségkérés / Név elé vagy mögé zs id-je
« Dátum: 2010. április 14. - 16:40:14 »
Idézetet írta: kriszrap date=1271255030\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1360\" data-ipsquote-contentclass=\"forums_Topic
és azt hogy az életét irja ki?
 


public OnPlayerText( playerid, text[  ] ) {
   new x[ 128 ];
   new Float: fHealth;
   GetPlayerHealth( playerid, fHealth );
   format( x, sizeof x, \"[HP:%i]%s\", fHealth, text );
   SendPlayerMessageToAll( playerid, x );
   return 0;
}

 
OFF: 1000. hsz.  8)

4168
Stunt Liga / Kérdések
« Dátum: 2010. április 14. - 15:53:23 »
Idézetet írta: Volum3 date=1271252372\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1365\" data-ipsquote-contentclass=\"forums_Topic
Majd muszály lesz nkm felvennem fraps-al,és megvágnom? :\'(
 


E mellé mellékelni kell egy klippet a mutatványról. Ezt nem muszáj neked készíteni, megkérhetsz mást is, de jó lenne, ha saját magad is megtudnád oldani.
 
[/quote]
 ;)

4169
Stunt Liga / Jelentkezés
« Dátum: 2010. április 14. - 15:24:23 »
Idézetet írta: GroX date=1271251368\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1303\" data-ipsquote-contentclass=\"forums_Topic
Húú hát sztem...
ZeRo -val akarok mérkozni :D
Vagy o nyer, vagy C_D.
 
És ha te?  :o És ha Hell?  :o És ha Snick?  :o Stb..  ;)
Mindenesetre én is szívesen kerülnék veled( is ) egy csoportba.  ;) :shy:

4170
Stunt Liga / Jelentkezés
« Dátum: 2010. április 14. - 14:08:05 »
Naa, még lehet, hogy 16-an is megleszünk a végén.  :D

Oldalak: 1 ... 276 277 [278] 279 280 ... 306
SimplePortal 2.3.7 © 2008-2024, SimplePortal