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. 2851
Eljárások ( Callbackok ) / public OnGameModeInit()« Dátum: 2011. január 15. - 17:46:19 »
OnGameModeInit
Ez az eljárás meghívódik amikor a játékmód elindul. Az eljárásnak nincsenek paraméterei. Az eljárás nem kezeli a visszatéréseket. public OnGameModeInit() Kapcsolódó eljárások A következõ eljárások is hasznosak lehetnek,mivel egy vagy több módon kapcsolódnak ehez: OnGameModeExit: Meghívódik amikor a játékmód kikapcsol. OnFilterScriptInit: Meghívódik ha a filterscript bekapcsol. OnFilterScriptExit: Meghívódik ha a filterscript kikapcsol. Eredti téma link: http://wiki.sa-mp.com/wiki/OnGameModeInit 2852
Fórum Archívum (Témák/Fórumok) / [Scripting Eszköz] foreach [Ciklus helyetesítõ]« Dátum: 2011. január 15. - 16:58:58 »
Leírás hamarosan...
Eredeti téma linkek: Link: http://forum.sa-mp.com/showthread.php?t=92679&highlight=foreach 2853
Tanuljunk PAWN nyelvet / [Scripting Eszköz] MySql Plugin r6 [+PHP,biztonság!] [Adatbázis]« Dátum: 2011. január 15. - 16:56:26 »MySqlr6 vagy régebbi verziók Adatbázis Használata http://forum.sa-mp.com/showthread.php?t=56564&highlight=G-stylez+Mysql Kérlek mielõtt folytatnád, bizonyosodj meg róla hogy van erre lehetõséged! Lásd: Kompatibilitás rész.
Én a fentebb linkelt rendszerrõl írnék,nagyon egyszerû használni és ez tetszik nekem a legjobban. Tudni kell,hogy a MySql nem a SA:MPhez lett kitalálva,ez egy nagyon komoly dolog amirõl könyveket írnak okos emberek és nagyon hasznos is,mivel a php is kezelni tudja,lehetõségeink határtalanná válnak egy kis okoskodással Mi nyilván nem tanuljuk meg az egészet,csak azt amire a SA:MP használata és scriptelése közben szükséges. A plugin telepítése a szerverre. Egyszerûen kövessük ZeRo leírástá: http://sampforum.hu/index.php?topic=4665.0 A plugint a fent leírt linken lehet letölteni. Kivétel: A libmysql.dll/so fájlt a szerver GYÖKÉR könyvtárába kell tenni, azaz oda ahol a samp-server.exe is van! Mi az a MySQL és miért jó? Miért jó: Mert sokkal gyorsabb és könnyebb a fájloknál. Bármilyen (különösen igaz RP) játékmódot sokkal jobban megéri MySQL-al megírni. A MySQL egy adatbázis kezelõ rendszer, mely segítségével hatékonyan tárolhatjuk az adatokat. Miért olyan jó ez? Elõször is ingyenes, másodszor nagyon szép teljesítménye van, harmadszor pedig hihetetlenül sok programozási nyelven elérhetõ (mi esetünkben a C-miatt használhatjuk). A MySql felépítése: Van egy MySql szerver. A szerver vannak felhasználók, azoknak pedig jogaik. Joguk lehet létrehozni/látni, módosítani stb... az adatbázisokat. Tehát minden felhasználóhoz tartozhat egy adatbázis (több is). Az adatbázisokban tároljuk el az információkat. Az a felhasználó, aki rendelkezik a GRANT nevezetû jogosultsággal, a root, a rendszergazda, aki mindenhez hozzáfér és bármit módosíthat. Ez azért van, mert a GRANT jogosultság engedi meg nekünk azt, hogy a felhasználók jogosultságait módosíthassuk. Adatbázisok: Ezeken belül vannak a táblák. A táblákon belül oszlopok,sorok. Minden oszlop egy információtípus (szöveg,szám, kép stb...) egy tetszõleges elnevezéssel. A sorok pedig információkat tárolnak. Többet is. Hasonlat: A MySql szerver legyen a Microsoft Excel. Ezen belül ugye vannak munkaasztalok, ezek lesznek az adatbázisok. Ezeken belül oszlopok( A,B,C...) és sorok (1,2,3). És ugye a cellák. A MySQL pont ugyan ilyen, csak nem grafikus felületen kicsit más célokra. Az adatbázisainkból információkat SQL utasításokkal kérdezzük le. Ezeket nagyon egyszerû megtanulni és nagyon logikusak. Aki tud angolul annak az már tudja az alapokat, csak még nem ismeri ezt a képességét. Komptaibilistás! Figyelem! A SA:MP szerverrõl nem tudsz ingyenes tárhelyekre csatlakozni (atw.hu stb.), szóval 3 megoldás létezik. 1,Olyan hostnál helyezkedj el ahol adnak neked lehetõséget egy MySQL adatbázis létrehozására. 2,Fizetõs tárhely, ahol van lehetõség távoli MySQL kapcsoalt nyitására. 3,Keresel egy ingyenes mysql hostingot. De ezt nagyon nem ajánlom, mert ezek a szerverek nagyon lassúak lesznek! Gyakorlati elmélet: Három lépésbõl áll a dolog,csatlakozunk,megcsináljuk amit akarunk,aztán lecsatlakozunk. Ez jelen esetben nyilván a script aktiválásánál illetve kilépésnél tesszük majd meg. A függvény lista: mysql_affected_rows( [connectionHandle = 1] ) Légy biztos benne,hogy meghívd a függvény ezek eljárások valamelyikénél: OnGameModeExit()/OnFilterscriptExit() mysql_connect( const host[], const user[], const database[], const password[] ) Visszatérése a kapcsolódási \"kapocs\",azonosító avagy ID tehát több kapcsolat id lehet egyszerre. mysql_debug( enable = 1 ) Létrehoz egy log fájlt amit mysql.log-nak nevez el,ebben feljegyez mindent,rendkívül hasznos hibakeresésnél. mysql_errno( [connectionHandle = 1] ) Visszatérése igaz (1) ha a kapcsolat él,máskülönben nem. (-1) mysql_query( query[] [,resultid = (-1), extraid = (-1), connectionHandle = 1] ) Ezzel saját eljárásokat hozhatsz létre a könnyebb scripteléshez (Lásd: sample_script.pwn ) mysql_real_escape_string( const source[], destination[] [,connectionHandle = 1] ) Eljárások: OnQueryFinish( query[], resultid, extraid, connectionHandle ) Csak akkor hívódik meg,ha a \"resultid\" paraméter használva van a query függvényben. OnQueryError( errorid, error[], resultid, extraid, callback[], query[], connectionHandle ) Gyakorlat Csatlakozás #define MYSQL_HOST \"adatbázis\" Nos,mit is tettünk most? mysql_debug - Bekapcsoltuk a logolást mysql_connect - Csatlakozunk LeCsatlakozás
Nagyon bonyorult: mysql_close - Csatlakozás bezárása Mostmár megtehetjük amit akarunk! Elõször is szeretném ajánlani Kurta regisztrációs scriptjét,tökéletesen meg van írva szóval kezdésnek tökéletes!KATT Bár bevallom nekem elégé más a stílusom,kicsit máshogy oldottam volna meg a dolgokat de így is jó. Szóval,hogyan is tehetjük meg azt a bármit,igaz? new Query[100]; Ezzel én lefuttattam egy lekérdezést,amivel kiválasztottam a players táblából azt a sort ahol a name oszlop értéke ember és a pass oszlop értéke lolxD24 Szóval,egyenlõre lássunk pár példát a lekérdezésekre: SELECT Cellák kiválasztására szolgál. Utána az oszlopokat kell írni, amikre kíváncsiak vagyunk. PL. SELECT neve,jelszava,regisztralt A csillag azt jelenti, hogy a sornak minden cellájára kíváncsiak vagyunk. SELECT * FROM Melyik táblá(k)ból kívánjuk kiválasztani az információt. Ha több táblából szeretnénk információt kiválasztani, azt így tehetjük meg: SELECT felhasznalok.neve,akciok.mai FROM felhasznalok,akciok WHERE Feltételt szabhatunk meg,használhatjuk még az AND és az OR utasítást is utána. Tehát pontosan behatárolhatjuk, hogy nekünk egy olyan sorból van szükségünk értékekre, ahol az az oszlop(ok) sorának az értéke x. Ez kicsit bonyolultan hangzik, nézzük csak: x az az érték amit keresünk. Ez legyen most egy felhasználónév. Egy bizonyos oszlopot figyelünk, jelen esetben a neve oszlopot ami a felhasznalok táblában helyezkedik el. SELECT felhasznalok.neve,akciok.mai FROM felhasznalok,akciok WHERE felhasznalok.neve = \'x\' INSERT INTO Egy sort szúrhatunk be egy táblába. Mindenképpen olvasd el a \"Biztonság\" bekezdést is, ha használod ezt a lekérdezést! __________Részletek INSERT INTO players (name,pass) VALUES (\'killer\',\'123\') A (name,pass) rész elhagyható,ez akkor kell,ha a tábla bizonyos részeibe akarunk beszúrni adatot. A VALUES utáni rész hogy mit is akarunk beszúrni,sorrendben. __________---------- UPDATE Ezzel frissíthetjük a táblánkat. __________Részletek UPDATE players SET name=\'ss\',pass=\'1\' WHERE name=\'ember\' Az UPDATE után jön a tábla neve,aztán a SET utasítás,mit akarunk mire változtatni,több adatot is frissíthetünk egyszerre ha vesszõvel ( , ) elválasztjuk õket,nem kell megint SET szót leírni. (UPDATE players SET oszlop=\'ertek\',oszlop=\'ertek\' WHERE oszlop=\'ertek\') __________---------- Beolvasás Nos,szerintem Kurta ezt pazarlóan oldotta meg. format(query, sizeof(query), \"SELECT * FROM `players` WHERE `name` = \'%s\'\", pName(playerid)); Én ezt úgy írnám,hogy az AND utasítás segítségével megnézem,hogy a jelszava is az-e amit beírt, és nem kell az egész sort lekérdezni, úgy sem használja fel az információkat. Miután megírtuk a lekérdezésünket, futtatnunk kell:
Tehát, mûködõ MySQL futtatás: (Csatlakozás után!)
Ha nem várunk vissza adatot (tehát nem a SELECT utasítást használtuk) akkor a mysql_query függvény utáni dolgokat elhagyhatjuk. Ne feledjük, hogy a karakterláncok amikben az utasítást és az eredményt tároljuk, bõven lehet nagyobb 128 karakternél, tehát ne ragaszkodjunk ehez a normához, inkább több legyen mint kevesebb, mert hibás/csonk eredményeket fogsz kapni. Hogyan írjuk át a fájl mentõs rendszerünket MySQL-ra? VAGY Hogyan készítsünk adatbázist? Ha házi szerver akkor nem éri meg a dolog, és hostingoknál is csak ott, ahol adnak (ingyenesen) egy MySQL adatbázist a szervered mellé phpMyAdmin rendszerrel, különben nincsen értelme, ha ingyenes adatbáziskezelõ honlapon regisztrálsz magadnak egy MySql adatbázist, az szerintem nagyon lassú lesz. Ha a szerver hostingos és a körülmények adottak, akkor egyszerûen kérjünk/aktiváljunk magunknak egy adatbázist,felhasználóval. (Van ahol lehet webadminban, de lehet hogy az ügyfélszolgálattal kell beszélj.) phpMyAdminba belépve válasszuk ki az adatbázisunkat, hozzunk létre egy annyi oszlopú táblát ahány infóra kíváncsiak vagyunk (ölések,halálok,név,jelszó,pénz stb.) és mentsük el. A phpMyAdmin ezeket az infókat fogja kérni: Mezõ -> Ide az oszlop nevét írd,pl. money,name,kills stb.. Ékezetet kerüld. Típus -> Ha amit el akarsz tárolni szám (ölések,pénz,halálok) akkor INT típust adj meg, ha karakterlánc (név,jelszó) akkor VARCHAR típusú mezõt. Hossz/Érték -> Ha a mezõ INT típusú,akkor elég 11, ha karakterlánc akkor olyan hosszú legyen amekkora karakterláncot tárolni akarsz. A maximum 255. Alapértelmezett -> Ezt ne bántsuk Illesztés -> Ha a mezõ VARCHAR típusú,akkor válasszuk ki: utf8_hungarian_ci A többi mezõt hagyjuk üresen. Még ami kellhet nekünk,az az auto_increment. Ha ez be van pipálva, (csak INT mezõknél!) minden sor beszúrásánál az értéke egyel növekedni fog. Tehát ez egy automatikus mezõ. Ha pl. be akarunk szúrni egy olyan táblába sort amiben van auto_increment és így néz ki a felépítés: id név jelszó Akkor azt így tehetjük meg: INSERT INTO tabla VALUES(NULL,\'neve\',\'jelszava\') Az id (aminek auto_increment be van állítva) NULL értéket kap. Ha utólag akarunk auto_incrementet beállítani akkor az Index mezõt PRIMARY-ra kell álltani. Egy táblában egy auto increment lehet. Ha minden kész kattintsunk a Mentés gombra. Ezzel kész a táblánk. Ezek után a scriptet kell megírni a fent leírtak alapján. Biztonság Ez a része kimaradt elég sokáig a leírásból, amiért elnézést kérek, de igazából kiment a fejembõl. Vegyünk egy példát: MySql rendszert használsz, a név/jelszó párost egyéb információkkal az users táblában tárolod el amikor a felhasználó regisztrál. A lekérdezés így néz ki (példa, neked nyilván más, de a lényeg ugyan az) INSERT INTO users VALUES(NULL,\'neve\',\'jelszavam\'); A neve nyilván az lesz amivel felmegy a szerverre, úgyhogy nem hiszem hogy ez tudna problémát jelenteni, mert szerintem a SA:MP kliens nem enged speciális karaktereket a névbe írni de ebben nem vagyok biztos. ( \",\',/, stb... ) A lényeg: A jelszó mezõt a felhasználó írja be. De mi történik, ha a kedves felhasználó ezt adja meg jelszónak: jelszavam\');DELETE FROM users WHERE (1=1 Amennyiben ezt írja be a jelszó mezõbe, akkor a lekérdezés így fog módosulni: INSERT INTO users VALUES(NULL,\'neve\',\'jelszavam\');DEL *** users WHERE (1=1); Figyelem! Ez a lekérdezés NEM mûködõképes, kizárólag azért, mert nem szándékozom mûködõ, ártó kóddal ellátni a vicces kedvû egyéneket, de a szituáció kedvéért odakapartam valamit. Ezzel kitörölte a felhasználóink tábláját. De akár az egész adatbázist is kitörölhette volna, vagy megváltoztathatja a jelszót stb.... Ezt úgy nevezik MySql injekció. (Találó név) \"De mi van ha én titkosítom a jelszavakat?\" Akkor ez nem jelenthet veszélyt, viszont pl. ha bekérsz E-Mail címet is, akkor máris áldozat lehetsz. Lássuk mit tehetünk ellene. Minden kívülrõl jövõ információt SZÛRNI KELL. Elégé meg vagyok döbbenve hogy ez sokaknak nem egyértelmû, pl. MSN/TS-en is kaptam már kérdést, hogy \"ez-az a kód miért nem jó\" (PHP nyelven) és miután az illetõ bemásolta a kódot (nevet nem írok) láttam hogy nem szûri az adatokat. PHP-ben ez így néz ki: $neve = $_POST[\'neve\']; Nem szándékozom php leírást írni, de ez idevág, és akik pl. UCP-t írnak, azoknak leírnám, hogy ILYET SOHA,SOHA nem csinálunk. Minden _POST, _GET és _COOKIE szuperglobális tömbökbõl érkezõ adatot szûrnünk kell. Ez a minimum: $neve = addslashes(trim($_POST[\'neve\']) addslashes - Azadbázisra ártó jelek levédése ( elé tesz egy \\ jelet, ettõl elveszíti utasítás értékét és sima karakter lesz ) trim - A karakterlánc elõtti és mögötti fehérköz karakterek (szóközök,tabok,stb) eltávolítása. Ennyit a php-ról. Visszatérve a MySql-hoz, úgy tudom itt nem kapunk addslashes függvényt, de kapunk egy ilyet: mysql_real_escape_string ( Ez amúgy php-ben is elérhetõ ) Tehát, mielõtt beszúrnánk egy kívülrõl jövõ adatot az adatbázisunkba (Név,E-Mail, stb) lássuk el az értékeket levédéssel, így: Figyelem! Ha a lekérdezést a mysql_format függvénnyel formázod meg,akkor ez elvileg nem szükséges, mert az elvégzi helyettünk. De ha nem: ( Forrás: kurta regisztrációs szkriptje ) szEscape[32]; A biztonságos érték a szEscape változóban van, ezt szúrjuk be MySql-ba. Tehát akik a kurta féle rendszert használják nem kell féljenek ettõl a kis kellemetlenségtõl. Köszönöm. A leírást sok mindennel kiegészítettem, remélem mindenki hasznosítani tudja. Kérdéseket ide várom! 2854
Tanuljunk PAWN nyelvet / [Scripting Eszköz] Streamer Plugin v2.5.2 [Object Streamer]« Dátum: 2011. január 15. - 16:54:29 »
Segítségével (majdnem) végtelen menyiségû objectet lehet berakni a módba.
Leírást megtekintheted itt. 2855
Tanuljunk PAWN nyelvet / [Információk] A fórumrész / Szabályzat / Scriptelési tanácsok« Dátum: 2011. január 15. - 16:47:04 »
Üdvözöllek!Ez a fórumrész fõleg a kezdõk számára,az alapvetõ dolgokat bemutató leírásokról szól.
Ide kizárólag Globális moderátor és admin nyithat témát,vagy helyezhet át.Csak a minõségi leírások kerülnek ide. Szabályzat ugyanaz mint a Leírások/Útmutatók fórumrészben. Scriptelési tanácsok: Ebben a fórumrészben érdemes a kiemelt témákban található leírásokat hasznosítani,mivel a témák nem véletlenül vannak kiemelve,ezek a legjobb scriptelési segédletek. Az alfórumban az eljárásokról találtok információkat. 2856
SA-MP: Szerverfejlesztés / eHostName« Dátum: 2011. január 15. - 16:28:34 »Idézetet írta: straY\' date=1295096777\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"1129\" data-ipsquote-contentclass=\"forums_Topic 2010.Március.29.. Kicsit bump voltÁh,nemszámít... :shy: 2857
Idézetet írta: Attila date=1295103412\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"5356\" data-ipsquote-contentclass=\"forums_Topic ez a v.i.p õszintén mire jó?Egyenlõre annyi,hogy van saját fórumrészük,de még kitalálunk valamit.Ez ilyen ösztönzés féleség. 2858
Leírások/Útmutatók / [TuT] HEX szinkód SAMP szinkódba« Dátum: 2011. január 15. - 13:45:27 »
Az eredeti témában leírja,hogy ez a módszer nemjó.
(A link is rossz.) 2859
Törölt RP Szerverek / Dream World Role Play« Dátum: 2011. január 15. - 13:06:36 »Idézetet írta: BeNiBoY date=1295078917\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"5361\" data-ipsquote-contentclass=\"forums_Topic olvasd el a szabályzatot, csak 15 hozzászólás után nyithatsz a szerverednek témát -.-\"Ezt a szabályzatot megszüntettük. A téma maradhat. 2860
A VIP jog: Nagyon fontos személy (Very Important Person)
Ezeket a tagokat a többi VIP ajálja be,de a Team hagya jóvá. Mostantól ide lesznek kiírva az új VIP-k. Fontos: VIP-t a fórumon az aktív,régebbi és tisztelettudó tagok kaplyák,(fõleg) szóval tessék igyekezni. Kezdem is: Új VIP-t köszönthetünk , kinek neve: StaR 2861
Törölt RP Szerverek / [HUN]Littletown RPG« Dátum: 2011. január 14. - 21:43:12 »
Na akkor leírom a történetemet amíg most fentvoltam:
Felmentem a szeróra,megcisnáltam a regizõs cuccot,aztán spawnoltam.Egybõl írtam a reportot,mert LTben spawnoltam MG helyett.(Igen azt álítottam be) Hát egyszerre ~5 válasz is jött,aminek örültem,segítettek is.Aztán elmentem a boltba,ahol vettem pár cuccot.Maradt 380$-om.Mikor kijöttem,jött 2 fekete kocsi elég gyorsan,elém vágott a járdán,nem sokkal utánuk egy rendõr,azi si a járdán de nem üldözõ tempóban,3X lassaban ment peddig tuti látta õket,a szirénályát sem láttam,de azért elment melletem 3 centire a járdán xD.Aztán relogoltam (hogy MG-be kerüljek végre.) Sikerült is,elmentem a postára felvenni a munkát,egybõl írtam egy reportot hogy minek Jogsi bicajra,és hol van az autós suli.Erre is egybõl 3 választ kaptam,rendben,eközben 2.-szor csapott el egy postás amíg ott álltam a járdán (Bicóval).Ezt is reportoltam,egy válasz rögtön jött,hogy látomd Chuck,ezért kell nekik is jogsi,de még ez elõtt a postásokra szoltak,be is láttam,hogy nem hülyeség.Ezek után,hívtam egy taxit,ami meg is jött nemsokára,és rájöttem hogy bekapcsolva maradt a laptopom és nem tudok beszélni xD ezt is reportoltam,hogy nem tudom kikapcsolni,rögtön jött erre is több válasz,rendben,a taxis elvitt az autós suliba,közben beszélgettünk,h \"Mióta vagyok a városban?\" stb,jó fej volt a taxis,azt mondta hogy most az egyszer meghívott,ennek is örültem mert le voltam égve. Ezek után megpróbáltam vizsgázni,szembesültem azzal,hogy nem tudok ert 500$,nekem 380$-om volt.Ezt is reportoltam,hogy hogyan dolgozzak kocsi nélkül,kaptam is tippeket,ezek után visszamentem a vizsgázóra,de elöbb el akartam menni a rendõrség melleti térképhez,eközben találkoztam StaR-al . Köszönt is,felismert,de én nem tudtam válaszolni mert naívan azt hittem,hogy az OOC chat parancsa /ooc vagy /o ,de nem,késöbb tudtam meg /help-bõl,hogy /b. Ezután visszamentem a suliba,és ezek után nem csináltam semmit xD ,mivel a kresszel szenvedtem,ami régen elsõre sikerült,most kb, 17X próbáltam meg,mindig vagy 3/5 vagy 2/5 volt az eredményem,valaki meg kérdezte OOC hogy hogy megy,még az elsõ alkalomal,naívan gondoltam hogy jól megy és írtam neki h jól.Najó,ott tartottam h akk felírom h mi volt már és mi nem,de amikor elkezdtem volna jött egy üzi h kickelt az anti afk (Vizsga közben ugye csak parancsokat használtam nem mozogtam.) Összeségében az adminok segítõkészek voltak,a szerveren tényleg van pár nonos,de azért nem volt tûrhetetlen,sõt. E: Ejj most meg olvasom ezeket a hsz-eket,ésszel emberek.... 2862
Törölt RP Szerverek / [HUN]Littletown RPG« Dátum: 2011. január 14. - 20:25:39 »
Ez korrekt ellenérv,döntöttem,MOST felnézek.
2864
Fórum Archívum (Témák/Fórumok) / Dream World Rola Play« Dátum: 2011. január 14. - 20:14:16 »
A téma szabálysértõ,popike +10% warn.
(Nézzétek hol van.) 2865
Tanuljunk PAWN nyelvet / [ Leírás ] Dialógusok / Párbeszédpanelek« Dátum: 2011. január 14. - 19:38:44 »Idézetet írta: ScreaM date=1295030122\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"5350\" data-ipsquote-contentclass=\"forums_Topic Szép lett, bár én már írtam egy ilyent. \ Nincs az arhívumban (In Team Only),anno ZeRo is írt egyet,azthiszem az a bizonyos zsobo ügy miatt lett törölve. |