Právě je stř 23. kvě 2012 23:18:45
Hosting WEDOS.cz
SLEVA 25% (slevový kód:PAWNO25)

Nejnovější témata:
[otázka] Kde spraviť mod ? od D4n09
[Ms 2012] NHL 2009 Remake od SweS
[HELP] stock & undefined symbol od WilliamKrizak
asus k8v-x od 7.Host
[HELP] Pickupy ! od AvestX

Vyzkoušejte antivirus ESET Smart Security 5

Vyhledat témata bez odpovědí | Zobrazit aktivní témata Zobrazit nové příspěvky | Zobrazit vaše příspěvky


Všechny časy jsou v UTC + 1 hodina [ Letní čas ]





Odeslat nové téma Odpovědět na téma  [ Příspěvků: 12 ] 
Autor Zpráva
 Předmět příspěvku: [TUT] sscanf AKA viac 'params'
PříspěvekNapsal: úte 23. srp 2011 22:40:04 
Carl Johnson "CJ"
Carl Johnson "CJ"
Uživatelský avatar
Registrován: čtv 29. led 2009 20:03:51
Příspěvky: 4559
Bydliště: Blava ne ?

Čaute, rozhodol som sa vám napísať návod na sscanf. Autorom funkcie "sscanf" je kto iný ako pawno boh "Y_less" ! Tu vám ukážem rozbor, ako fugunje, využitie a aj rozdiel medzi sscanf2 (cez plugin) a sscanf.

Čo to je ?

Funkciu sscanf by som označil ako "unformat" pretože je presným opakom formátu, táto funkcia zo stringu zisťuje dané časti (oddelené medzerou) a ukladá do premien (Ja viem, zdá sa to byť zložité :) ale je to jednoduchšie ako chrfind) !

Ako funguje ?

Kód:
sscanf(string[], format[], {Float,_}:...)

string = string z ktorého ideme extrahovať časti a ukladať do premien
format = formát extrahovania (poznáte z funkcie SetTimerEx kde musíte dávať formáty premien npr. "iis")
ostatok = premenné, do ktorých sa má extrahovať
Napríklad
Kód:
new nick,money);
sscanf("QWER 400","ui",nick,money);
GivePlayerMoney(u,money);

Z stringu "QWER 400" extrahuje "ui" (čo to znamená nižšie) do premeny 'nick' a premeny 'money'

Formáty
"i" integer (číslo)
"d" integer (číslo)
"c" znak (character)
"u" id hráča alebo nick
"s" string :D no slovo...
"h" hex (šestnástková sústava)
"x" hex (-||-)
"f" float desatinné číslo
"z" string z medzeramy (používa sa ako posledný znak, je to string s medzeramy npr. dôvod kicku a pod.)

Čiže ak chcete príkaz npr.
/sethp [playerid] [health] [reason]
tak dáte
Kód:
new id,Float:health,reason[30];
sscanf(params,"ifz",id,health,reason);
GivePlayerHealth(id,health);
SCMTAF(0xF,"Admin %s dal hráčovy %s health %0.2f dôvod %s",Jmeno(playerid),Jmeno(id),health,reason);



Využitie ?

Ukážem vám dva ukážkové príklady (QCMD)
PM
Kód:
QCMD:pm(playerid,params[]){
new id,msg[128];
if(sscanf(params,"iz",id,msg)) return SCM(playerid,0xF,"/pm [playerid] [text]"); // extrahujeme časti stringu do premien
else if(!IsPlayerConnected(playerid)) return SCM(playerid,0xF,"Id nieje na servery"); // ak nieje na servery zadané ID, zastavíme príkaz
else if(!msg[0]) return SCM(playerid,0xF,"Musis napisat spravu !"); // ak nezadal správu, dal iba [u]/pm 5 [/u]  (miesto textu dal iba medzeru)
else{
new str[128];
format(str,128,"[PM od] %s:{FFFFFF}%s",Jmeno(playerid),msg);
SendClientMessage(id,GetPlayerColor(id),str);
new str[128];
format(str,128,"[PM pre] %s:{FFFFFF}%s",Jmeno(playerid),msg);
SendClientMessage(playerid,GetPlayerColor(id),str);
}
return true;
}

Jednoduché nie ?
GiveCash
Kód:
QCMD:givecash(playerid,params[]){
new id,money;
if(sscanf(params,"ii",id,money)) return SCM(playerid,0xF,"/givecash [playerid] [money]");
else if(!IsPlayerConnected(id)) return SCM(playerid,0xF,"Id neni online");
else if(money > GetPlayerMoney(playerid) || money < 1) return SCM(playerid,0xF,"Nemôžeš dať viac peňazí ako máš !");
else{
GivePlayerMoney(id,money);
GivePlayerMoney(playerid,-money);
new str[128];
format(str,128,"Hráč %s ti poslal %d peňazí !",Jmeno(playerid),money);
SCM(id,0xF,str);
new str[128];
format(str,128,"Poslal si hráčovy %s %d peňazí !",Jmeno(id),money);
SCM(playerid,0xF,str);
}
return true;
}


Dúfam že ste pochopili, ak nie ešte sem napíšem niaky príklad :)

sccanf2 vs sscanf ?

Už je aj sscanf2 (novšia verzia) lenže je to plugin. Áno je viac ako 30 krát rýchlejší ako sscanf1 a má asi 5x viac možností, no napíšem iba zopár.
Možnosť uložiť do "array"-u (pola)
Možnosť nastaviť znak, od ktorého bude extrahovať do stringu (sscanf to robí od medzery no vy si môžete nastaviť niaky znak npr '|' a lepšie pracovať zo súbormi a fread)
Možnosť nastaviť "z" (string s medzeramy) aj v strede a môcť nastaviť max. dĺžka stringu
Kód:
Format               Use
L(true/false)            Optional logical truthity
l               Logical truthity
B(binary)            Optional binary number
b               Binary number
N(any format number)         Optional number
n               Number
C(character)            Optional character
c               Character
I(integer)            Optional integer
i               Integer
D(integer)            Optional integer
d               Integer
H(hex value)            Optional hex number
h               Hex number
O(octal value)            Optional octal value
o               Octal value
F(float)            Optional floating point number
f               Floating point number
G(float/INFINITY/-INFINITY/NAN/NAN_E)   Optional float with IEEE definitions
g               Float with IEEE definitions
{               Open quiet section
}               Close quiet section
P<delimiter>            Invalid delimiter change
p<delimiter>            Delimiter change
Z(string)[length]         Invalid optional string
z(string)[length]         Deprecated optional string
S(string)[length]         Optional string
s[length]            String
U(name/id)            Optional user (bot/player)
u               User (bot/player)
Q(name/id)            Optional bot (bot)
q               Bot (bot)
R(name/id)            Optional player (player)
r               Player (player)
A<type>(default)[length]      Optional array of given type
a<type>[length]            Array of given type
E<specification>(default)      Optional enumeration of given layout
e<specification>         Enumeration of given layout
'string'            Search string
%               Deprecated optional specifier prefix

http://forum.sa-mp.com/showthread.php?t=120356
SSCANF2 vám odporúčam robiť keď už viete ako čo funguje ;) ale sscanf (obyčajný) je dosť ľahký je to ako používať "SetTimerEx" !

Download ?

http://wiki.sa-mp.com/wiki/Sscanf

Ešte by som chcel pripomenúť že format
"u" používajte ako INTEGER. sscanf si už zistí či je to string alebo integer a ak string tak zistí či je na servery niaky hráč s tým nickom (časťou nicku) a ak áno, vráti ID hráča :)
čiže
Kód:
QCMD:health(playerid,params[]){
new id,Float:health;
if(sscanf(params,"uf",id,health)) return 0;
else if(!IsPlayerConnected(id)) return 0;
else if(health > 100) return 0;
else{
SetPlayerHealth(id,health);
GetPlayerHealth(id,health);
if(health > 100) SetPlayerHealth(id,100);
}
return true;
}
}

A stačí /health QWE 50
a ak som na servery tak mi to dá 50 healthu...

Dúfam že ste pochopili, ak nie môžete ma kontaktovať tu alebo Súkromnou Správou

_________________
Moja tvorba http://pastebin.com/u/PatchwerkQWER
Ak chceš byť lepší ako ja, a budeš sa snažiť budeš lepší ! Už len pri pomyslení na to, že si lepší než ja, ťa posunie dopredu. Ale nezabudni ! Musíš sa snažiť. A potom zistíš to, čo vie pár ľudí - že som lama a moje scripty sú nič oproti tomu, čo môžeš vytvoriť ty.
"Pravda je ze ja jsem zacal delat pawn od 0.3a, ale ja jsem se neucil pawn podle wiki ale sam... " by Ceeker


Offline
 Profil  
 Předmět příspěvku: Re: [TUT] sscanf AKA viac 'params'
PříspěvekNapsal: úte 23. srp 2011 22:45:09 
Nováček
Nováček
Uživatelský avatar
Registrován: úte 26. črc 2011 13:02:56
Příspěvky: 23

Konečne som zistil ako pracovať s sscanf, velmi mi to pomohlo.
100/10
naozaj dobrý TuT

_________________
Preč s prezentáciamiRZE SERVEROU!!!!!!!


Offline
 Profil  
 Předmět příspěvku: Re: [TUT] sscanf AKA viac 'params'
PříspěvekNapsal: úte 23. srp 2011 23:42:01 
Marc Wayne "B-Dup"
Marc Wayne "B-Dup"
Registrován: úte 01. bře 2011 10:57:34
Příspěvky: 629
Bydliště: Opava

je*at v2... používám v1... no jinak dobrý TUT, se sscanf dělám už dělší dobu 8/10

_________________
Slavné hlášky
„Smrt jednoho je tragédie. Smrt milionů je statistika“... stalin
„vidim hned první chybu misto GivePlayerWeapon má být GetPlayerWeapon“... cjcarl
„ja pawn viem, len som lenivý spravit si vlastný mod“... jakubes
zapoj mozog..keď to nejde tak skús znovu skopírovať ten kód... jakubes


Offline
 Profil  
 Předmět příspěvku: Re: [TUT] sscanf AKA viac 'params'
PříspěvekNapsal: úte 23. srp 2011 23:48:14 
Carl Johnson "CJ"
Carl Johnson "CJ"
Uživatelský avatar
Registrován: čtv 29. led 2009 20:03:51
Příspěvky: 4559
Bydliště: Blava ne ?

sscanf2 má dosť nezanedbateľných funkcií, ktoré sscanf1 chýbajú...

_________________
Moja tvorba http://pastebin.com/u/PatchwerkQWER
Ak chceš byť lepší ako ja, a budeš sa snažiť budeš lepší ! Už len pri pomyslení na to, že si lepší než ja, ťa posunie dopredu. Ale nezabudni ! Musíš sa snažiť. A potom zistíš to, čo vie pár ľudí - že som lama a moje scripty sú nič oproti tomu, čo môžeš vytvoriť ty.
"Pravda je ze ja jsem zacal delat pawn od 0.3a, ale ja jsem se neucil pawn podle wiki ale sam... " by Ceeker


Offline
 Profil  
 Předmět příspěvku: Re: [TUT] sscanf AKA viac 'params'
PříspěvekNapsal: stř 24. srp 2011 0:07:09 
Marc Wayne "B-Dup"
Marc Wayne "B-Dup"
Uživatelský avatar
Registrován: stř 21. črc 2010 11:45:46
Příspěvky: 903

asi se hodně nudíš co ? ...moc pěknej tut jako všechny od tebe :) rozhodně 10/10

_________________
"Na nikoho si nehraju, takže s mým chováním nemám šanci zapadnout"
"Netrpím samomluvou, jen si někdy potřebuji popovídat s někým inteligentním"


Offline
 Profil  
 Předmět příspěvku: Re: [TUT] sscanf AKA viac 'params'
PříspěvekNapsal: stř 24. srp 2011 0:08:29 
Nováček
Nováček
Uživatelský avatar
Registrován: ned 05. čer 2011 21:42:16
Příspěvky: 45

sscanf je ppci vecička. Bez nej už lepšie prikazy malo kto spravy ( spravi ale s pouzitim strtok )

_________________
Obrázek


Offline
 Profil  
 Předmět příspěvku: Re: [TUT] sscanf AKA viac 'params'
PříspěvekNapsal: stř 24. srp 2011 9:30:14 
Carl Johnson "CJ"
Carl Johnson "CJ"
Uživatelský avatar
Registrován: čtv 29. led 2009 20:03:51
Příspěvky: 4559
Bydliště: Blava ne ?

strtok je zastaralý, pomalý a nemá toľko možností využitia :D

_________________
Moja tvorba http://pastebin.com/u/PatchwerkQWER
Ak chceš byť lepší ako ja, a budeš sa snažiť budeš lepší ! Už len pri pomyslení na to, že si lepší než ja, ťa posunie dopredu. Ale nezabudni ! Musíš sa snažiť. A potom zistíš to, čo vie pár ľudí - že som lama a moje scripty sú nič oproti tomu, čo môžeš vytvoriť ty.
"Pravda je ze ja jsem zacal delat pawn od 0.3a, ale ja jsem se neucil pawn podle wiki ale sam... " by Ceeker


Offline
 Profil  
 Předmět příspěvku: Re: [TUT] sscanf AKA viac 'params'
PříspěvekNapsal: čtv 25. srp 2011 0:40:30 
T - Bone Mendez
T - Bone Mendez
Uživatelský avatar
Registrován: stř 30. pro 2009 1:00:22
Příspěvky: 99
Bydliště: Slovensko

paráda, od teba si rád kuknem TUTY, popis je úžasný, len tomu pochopiť xD ... ja som stará škola a tieto nové veci len ulahčujú staré... inak 10/10


Offline
 Profil  
 Předmět příspěvku: Re: [TUT] sscanf AKA viac 'params'
PříspěvekNapsal: stř 31. srp 2011 0:57:29 
The Truth
The Truth
Uživatelský avatar
Registrován: úte 03. kvě 2011 18:43:36
Příspěvky: 557
Bydliště: Slovakia

KONEČNE :D:D .. najlepší návod .. konečne už chapem tie pismenka xD

_________________
BRUNES.cz
Creative Scriping
Obrázek


Offline
 Profil  
 Předmět příspěvku: Re: [TUT] sscanf AKA viac 'params'
PříspěvekNapsal: stř 31. srp 2011 7:33:27 
Carl Johnson "CJ"
Carl Johnson "CJ"
Uživatelský avatar
Registrován: čtv 29. led 2009 20:03:51
Příspěvky: 4559
Bydliště: Blava ne ?

Tak vieš čo ? Urob to ako v T-Mobile reklame, vezmi si veľký transparent napíš tam "Gratulujte mi, poznám písmenká" a choď do ulíc :D

_________________
Moja tvorba http://pastebin.com/u/PatchwerkQWER
Ak chceš byť lepší ako ja, a budeš sa snažiť budeš lepší ! Už len pri pomyslení na to, že si lepší než ja, ťa posunie dopredu. Ale nezabudni ! Musíš sa snažiť. A potom zistíš to, čo vie pár ľudí - že som lama a moje scripty sú nič oproti tomu, čo môžeš vytvoriť ty.
"Pravda je ze ja jsem zacal delat pawn od 0.3a, ale ja jsem se neucil pawn podle wiki ale sam... " by Ceeker


Offline
 Profil  
 Předmět příspěvku: Re: [TUT] sscanf AKA viac 'params'
PříspěvekNapsal: stř 31. srp 2011 10:59:09 
The Truth
The Truth
Uživatelský avatar
Registrován: úte 03. kvě 2011 18:43:36
Příspěvky: 557
Bydliště: Slovakia

QWER píše:
Tak vieš čo ? Urob to ako v T-Mobile reklame, vezmi si veľký transparent napíš tam "Gratulujte mi, poznám písmenká" a choď do ulíc :D

"Gratulujte mi, QWER ma naučil písmenká!" :D:D:D

_________________
BRUNES.cz
Creative Scriping
Obrázek


Offline
 Profil  
 Předmět příspěvku: Re: [TUT] sscanf AKA viac 'params'
PříspěvekNapsal: sob 12. kvě 2012 23:52:43 
T - Bone Mendez
T - Bone Mendez
Uživatelský avatar
Registrován: čtv 26. dub 2012 13:37:42
Příspěvky: 130

Super díky moc. 10/10

Právě jsem se naučil zase něco nové o pawn :D Už umím pracovat s ID hráče (jako příkaz /něco ID něco) :D Zase se mi bude dobře spát :)
Pomocí toho jsem si udělal vlastní PM systém.

:wave:

_________________
Gamemodes:

**Legendary Stunters v1.0**
Lucky Adventures v.1.0
- 1% topic28252.html
Lost - 0% (odloženo)


Filterscripts:

[FS] ID Showroom - 100%
[FS] Custom pos - 100%


Offline
 Profil  
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 12 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


 Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na: