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. 1096
Beszélgetés / Tudsz vagy nem tudsz?« Dátum: 2011. december 06. - 21:37:55 »\" post=\"199297\" timestamp=\"1323203651\"] 1097
Leírások/Útmutatók / [Leírás] Tippek és Trükkök (\'char\' tömbök, Bit-Flag és Egyéb)« Dátum: 2011. december 06. - 21:27:51 »
Eredeti témát Slice írta a hivatalos fórumon.
A további napok folyamán frissíteni fogom, mert még nincs benne minden, de a fõ rész az benne van. Fordítási hibák szerintem lehetnek, ezért elnézést! Több dolog egy statmentben Néhány helyen szükségünk van arra, hogy egy sorba több dolgot is lefuttassunk. Visszatérni több értékkel, stb. Ha visszatértsz több értékkel, akkor a return mindig az utolsó értékét fogja visszaadni. Ezt a következõ képpen tudjuk elvégezni: [pawn] stock KickEx( playerid, reason[ ] ) SendClientMessage( playerid, 0xC00000FF, \"Kickelve lettél!! Indok:\" ), SendClientMessage( playerid, 0xC00000FF, reason ), Kick( playerid ); // Két üzenet elküldése, azátn a játékos kirúgása stock DoStuff( playerid ) return DoFirstThing( playerid ), DoSecondThing( playerid ), DoThirdThing( playerid ), DoLastThing( playerid ); // DoStuff a DoLastThing értékével fog visszzatérni public OnPlayerRequestSpawn( playerid ) { if ( !IsPlayerLoggedIn( playerid ) ) return SendClientMessage( playerid, 0xC00000FF, \"Nem vagy bejelentkezve!\" ), 0; // Elküldjük az üzenetet és 0-val térünk vissza. return 1; } [/pawn] Egyszerû szám -> bool-ra konvertálása Néha vannak olyan helyzetek, hogy bool-ra kell konvertálni egy megadott számot. Ezt a következõ képpen teheted meg a legegyszerûbben: [pawn] new myInt = 50; new bool:myBool = !!myInt; [/pawn] Vagy akár mûködik egy funkcióval is: [pawn] new bool:bResult = !!mysql_query_ex(query), iCount; if(!bResult) return SendClientMessage(playerid, COLOR_RED, \"HIBA: Hibás lekérdezés!\"); [/pawn] De így is: [pawn] #define IsValidVehicle(%1) \\ (!!GetVehicleModel(%1)) [/pawn] Változó tag figyelmeztetés kiküszöbölése Ha egy elõtagos funckiónak/változónak akarod az értékét kiírni egy olyan funkcióban, ami nem támogatja azt a tagot, akkor a fordító figyelmeztetni fog, hogy itt valami nincs rendben. Itt nem csináltunk semmit se rosszul, csak ez így nem helyes. Ilyen esetben kell letörölni a tagot a funkció elõl, és minden jól fog mûködni! Példa: [pawn] new Text3D:t3dTest = Create3DTextLabel( .. ), Text:txTest = TextDrawCreate( .. ); printf( \"DEBUG: %d, %d\", _:t3dTest, _:txTest ); [/pawn] Egyébként ez a dolog szerintem nagyon is hasznos, fõleg a bit flagoknál. Vegyük azt, hogy van két változónk, két enum taggal. Ha az elsõ váltózónál valamit próbálunk állítani a második enumból, akkor figyelmeztetni fog, mivel az a másodikhoz tartozik és nem pedig az elsõhöz. Persze ha lehagyjuk a tagokat, akkor nemfog. De ilyenkor a bit flagnál nagy keveredések lehetnek, ezért érdemes ott az elõtagokat használni. \"Char-tömbök\" PAWN-ban van egy olyan lehetõség, hogy minden cellának egy bájtot foglal le. Ez a csomagolt string. A legtobb SA-MP függvények sajnos nem támogatják ezt és nagyon sokan még nem is hallottak róla. Egy 4bájtos tömbnek az értékei -2,147,483,648 és 2,147,483,647 között lehetnek. De ha neked nincs szükséged negatív értékekre és a megadott érték kisebb, mint 255, akkor miért is ne spóroljunk memóriát? Csomagolt stringekkel 0 és 255 között tárolhatunk számokat. ( Nincsenek negatív számok ) Itt is van róla egy példa: [pawn] new bool:g_IsPlayerSomething[MAX_PLAYERS]; // 500 cella * 4 bájt cellánként = 2000 bájt! <4 bájtos tömb> new bool:g_IsPlayerSomething[MAX_PLAYERS char]; // 500 bájt = .. 500 bytes! <Csomagolt string, itt egy cella egy bájt> [/pawn] Ha ezt a megoldást használod 50x a normál 4 bájtos tömbök helyett, akkor megspórolsz 75,000 bájtot (~73 kb). Vigyázz! Ezekhez a tömbökhöz kapcsos zárójeleket ( { } ) kell használnod a szögletes helyett. ( [ ] ), Példa: [pawn] public OnPlayerConnect( playerid ) { g_IsPlayerSomething{ playerid } = false; // ^ ^ } public OnPlayerSpawn( playerid ) { // v v if ( g_IsPlayerSomething{ playerid } ) { // .. } } [/pawn] Bitmûveletek (Bit-flag) Tudtad, hogy lehet 32 igaz/hamis értéket tárolni egy változóban? Ezzel nem csak memóriát takarítasz meg, hanem sokkal átláthatóbb lesz a kód. Ehhez egyáltalán nem kell megértened, hogy hogyan mûködik a kettes számrendszer, de ajánlott. Ha van 100 hamis/igaz (bool) változód játékosonként, akkor az 195KB memóriát foglal. Bár, ha 4 tömböt használsz ezzel a megoldással, akkor csak 8KB-ot fog használni. Az eredmény ugyanaz lesz, mintha rendes bool tömbökkel csinálnád, csak megspóroltál 187KB-ot.
1098
Fórum Archívum (Témák/Fórumok) / public OnPlayerKeyStateChange ( playerid, newkeys, oldkeys )« Dátum: 2011. december 06. - 17:22:04 »
Lefordítottam a többi részét is.
Itt elérhetitek. Olvassátok el többször, elsõre én sem értettem meg! Most nincs idõm ellenõrizni és még a bitmûveletes rész nincs kész. Azt még átkell totál olvasgatnom, mivel azt énse nagyon vágom és hülyeséget nem akarok írni. Amikor elkészül az egész, akkor beleszerkesztem ide az üzenetbe! 1099
Segítségkérés / MYSQL hiba miatt 100%-os CPU használat és szerver fagyás!« Dátum: 2011. december 06. - 15:44:09 »
Na nekem pont a többszálas lekérdezésekkel voltak ilyen problémák.
Én BlueG pluginját használom, abban nekem soha nem mûködött jól a többszálas lekérdezés :/ De nem tudom, hogy Ethan pluginjával mi a helyzet. 1100
Segítségkérés / Stop and Go + /admins (csak rconokat)« Dátum: 2011. december 05. - 21:23:00 »
Az OnPlayerCommandText-et lecserélted amit beírtam?
A végén pedig a return 0-t return success -ra lecserélted? 1101
Segítségkérés / 0.3d streamer 2.6 r26 nem megjelenõ pickupok« Dátum: 2011. december 05. - 17:28:44 »
Próbáld meg berakni a 0-s világba, vagy esetleg az Ex verziót használni és azzal a többibe.
Nekem is volt hasonló problémám, bár nem pickupokkal. 1102
Segítségkérés / Stop and Go + /admins (csak rconokat)« Dátum: 2011. december 05. - 17:17:18 »
Bocs, de nem fogom neked újraírni azt az egész módot.
Ott keverve van a szar a fossal, bocs hogy ezt mondom. A ZCMD-s parancsokat ne az OnPlayerCommand... alá rakd, hanem az globális névtérbe. ( Pl felé, csak ne bele a callback-ba ) 1103
Segítségkérés / Youtube lejátszó« Dátum: 2011. december 05. - 17:11:45 »
Esetleg?
strfind(data, \"\\\"h\\\"\", true); 1104
Segítségkérés / Stop and Go + /admins (csak rconokat)« Dátum: 2011. december 05. - 17:10:00 »
416.-sort bemásolnád nekem?
1105
Archívum / Az új Lokális Moderátorok« Dátum: 2011. december 05. - 13:43:57 »
Köszönöm szépen
Megpróbálok minél többet tenni a megadott fórumrészért! 1106
Függvények / StopAudioStreamForPlayer( playerid )« Dátum: 2011. december 04. - 21:55:22 »
StopAudioStreamForPlayer
Megállítja a jelenlegi audio streamet. Paraméterek: ( playerid ) playerid A játékos azonosítója, akinek meg akarod állítani a zenét. Visszatérés Ez az funkció nem kezeli a visszatéréseket. Példa: [pawn] public OnPlayerStateChange(playerid, newstate, oldstate) { // Ha a játékos kiszáll a kocsiból if(oldstate == PLAYER_STATE_DRIVER || oldstate == PLAYER_STATE_PASSENGER) { StopAudioStreamForPlayer(playerid); // Akkor megállítjuk neki a zenét } return 1; } [/pawn] Kapcsolódó függvények PlayAudioStreamForPlayer:Lejátszik egy audio streamot PlayerPlaySound: Lejátszik egy hangot a játékosnak. Eredeti téma: http://wiki.sa-mp.com/wiki/StopAudioStreamForPlayer Amúgy bocs a rendezésért, holnap szánok rá idõt és szépen mindent átfogom rendezni, hogy egyformák legyenek. 1107
Segítségkérés / 03d segítség« Dátum: 2011. december 04. - 19:57:04 »
Hát így nem sokat tudok segíteni, de ha sscanf-et használsz, akkor frissíts!
Innen tudod letölteni. 1108
Függvények / PlayAudioStreamForPlayer« Dátum: 2011. december 04. - 19:52:03 »
PlayAudioStreamForPlayer
Ezzel a funkcióval audiostream-ot tudsz lejátszani a játékosnak url cím alapján. A playerid & url paraméteren kívül az összes csak optionális paraméter. Megjegyzés: A zene csak akkor fog szólni, ha a rádió hangereje nincs levéve. Akinek lejátszik egy zenét, annak megjelenik a zene URL címe. Ezt az /audiomsg parancsal lehet kikapcsolni. Paraméterek: ( playerid, url[], Float:posX = 0.0, Float:posY = 0.0, Float:posZ = 0.0, Float:distance = 50.0, usepos = 0 ) playerid A játékos azonosítója, akinek le akarjuk játszani a zenét. url[] A zene elérési helye (url). Támogatott formátumok mp3 és ogg/vorbis. Float:PosX Az X kordináta, ahol a zene szóljon. Default 0.0. Ez csak akkor van hatásssal, ha az usepos 1-re van állítva. Float:PosY Az Y kordináta, ahol a zene szóljon. Default 0.0. Ez csak akkor van hatásssal, ha az usepos 1-re van állítva. Float:PosZ Az Z kordináta, ahol a zene szóljon. Default 0.0. Ez csak akkor van hatásssal, ha az usepos 1-re van állítva. Float:distance A távolság, hogy milyen messzirõl lehessen hallani a zenét. Ez csak akkor van hatásssal, ha az usepos 1-re van állítva. usepos Használja-e a 3D-s lejátszást. Ha ezt kikapcsolod, akkor mindig fog szólni a zene, nemcsak a megadott kordinátákon belül. Alapból kivan kapcsolva. Visszatérés Ez az funkció nem kezeli a visszatéréseket. Példa: [pawn] public OnPlayerCommandText(playerid, cmdtext[]) { if (strcmp(\"/play radio\", cmdtext, true) == 0) { PlayAudioStreamForPlayer(playerid, \"http://somafm.com/tags.pls\"); return 1; } if (strcmp(\"/radio in my pos\", cmdtext, true) == 0) { new Float:X, Float:Y, Float:Z, Float:Distance = 5.0; GetPlayerPos(playerid, X, Y, Z); PlayAudioStreamForPlayer(playerid, \"http://somafm.com/tags.pls\", X, Y, Z, Distance, 1); return 1; } return 0; }[/pawn] Kapcsolódó függvények StopAudioStreamForPlayer: Megállítja a jelenleg lejátszott zenét a játékosnak. PlayerPlaySound: Lejátszik egy hangot a játékosnak. Eredeti téma: http://wiki.sa-mp.com/wiki/PlayAudioStreamForPlayer 1109
Segítségkérés / 03d segítség« Dátum: 2011. december 04. - 19:43:31 »
Esetleg nem jó a parancs kezelõ rendszered?
Írd le, mivel parancskezelõt használsz! 1110
Segítségkérés / Stop and Go + /admins (csak rconokat)« Dátum: 2011. december 04. - 19:19:26 »
Nah, ez azért van, mivel valószínûleg nemjól használod a ZCMD-t.
OnPlayerCommandText-et cseréld le a következõre: OnPlayerCommandPerformed(playerid, cmdtext[], success) A legalján a return 0;-t pedig a következõre: return success; |