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. 46
Fórum Archívum (Témák/Fórumok) / Re:YSF - 0.3d R2-800p Windows« Dátum: 2012. Január 22. - 18:24:01 »
Megpróbálhatom
A 0.2-es verzióban van, ha sikerül, megcsinálom azszerint. Amúgy Y_Less meg azért nem újítja, mivel ez szabályellenes. Benne van a SAMP Licenseben, hogy tilos hamis adatot küldeni a kliesnek és ezt pont azt csinálja. De engem aztán nagyon érdekel az a szabályzat.. 47
Hangszerek és előadók / MC Hawer és a Tekknõ« Dátum: 2012. Január 22. - 12:04:47 »
Gondolom errõl nemkell sokat írnom, mivel mindenki ismeri. The best Eddig 8 albumot adtak ki, itt van belõle pár szám. Most csinálják a 2011-es albumot, amit kb. tavasszal fognak kiadni. 2000 - Bye-bye lány 2001 - Táncolj cigánylány! 2002 - Mikor a vodka a fejembe szá 2003 - Kimegyek a temetöbe 2004 - Ma este mulatunk! 2005 - Állati nagy slágérég 2006 - Aki minket nem szeret 2007 - A börtön ablakában 48
Fórum Archívum (Témák/Fórumok) / Re:[Scripting Eszköz]A sscanf függvény [Paraméter Beolvasó]« Dátum: 2012. Január 10. - 16:33:03 »
Rengeteg helyen észreveszem, hogy a beírt ID-t IsPlayerConnected() el ellenõrzik le.
Ez pedig felesleges, mivel az sscanf-nél ha az \"u\" paramétert használod, akkor az automatikusan leellenõrzni, hogy a játékos csatlakozva-e van. Ha nincs, akkor 0xFFFF-el fog visszatérni = (65535 = INVALID_PLAYER_ID). Tehát elég lenne ennyit is csinálni: [pawn] if(sscanf(params, \"ui\", player1, score)) return SendClientMessage(playerid, COLOR_RED, \"HASZNÁLAT: /setscore <Játékos ID/Név> <Pont>\"); if(player1 == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, \"HIBA: Játékos nincs csatlakozva!\"); [/pawn] 49
Segítségkérés / Bath command linux alatt? Hova hogyan miképp?« Dátum: 2012. Január 04. - 20:08:21 »
Valaki letudná nekem írni, hogy linuxon hogy a fas-zomba tudom ezeket a parancsokat lefuttatni?
Lassan két órája ezzel baszakodok, és arra ne jöttem rá, hova a ... -ba kell beírni egy ... parancsot. Úgy, mint windowson pl: Windows Gomb + R ( Futtatás ) és ide beírod, h shutdown. Nade linuxon ezt hova kell? SA-MP Wiki-n a Putty-val kapcsolatba írt valamit, de az is kur.va nagy segítség, mivel annak is csak a forráskdját találtam a neten.. 50
Pluginok és Programok / YSF - kurta999\'s version« Dátum: 2011. December 18. - 21:19:15 »YSF - kurta999\'s version
Eredeti téma: http://forum.sa-mp.com/showthread.php?t=513499 Nem fogom nonstop itt is frissíteni a hozzászólást, úgyhogy ha az új dolgokra vagy kiváncsi, nézz be ide is. Sok frissítés után az angol fórumon rá kényszerültem, hogy nyissak a YSF-nek egy saját témát, hogy tudjam szerkeszteni a fõposztot. Névnek megtartom a YSF-et, mivel már mindenki ezt ismeri és énis megszoktam. A régi YSF-et itt érheted el. Dokumentációt a funkciókhoz megtalálod itt. Köszönet iFarbod-nak. Változtatások a régi YSF-he képest: - Támatogatja a következõ samp verziókat SA-MP 0.3z, 0.3z R2-2, 0.3z R3 és 0.3z R4 - 1000p verziókra nincs támogatás, de ha valakinek szüksége lenne rá, megcsinálom - Plugin akkor is befog töltõdni, ha ismeretlen a szerver verzió, csak a memória hacket használó funkciók nem fognak mûködni - Majdnem minden lehetséges dologhoz hozzáférsz a samp pool-okból, amikhez alapból nem volt lehetõséged - Hozzáadva a következõ eljárás OnPlayerEnterGangZone, OnPlayerLeaveGangZone - Játékos szinrkonizált adatai közül sok hasznos dolgot le tudsz kérni, amit alapból nem, pl sziréna be-e van kapcsolva, vonat sebesség, hydra reactor állása - Pluginba integrálva a Y_Less\'s Model Sizes függvénykönyvtár. - Újra hozzáadva a fájl funkciók - Javítva az AttachPlayerObjectToPlayer és hozzáadva az AttachPlayerObjectToObject - Javítva a GetWeaponName, és hozzáadva a követekzõk GetWeaponSlot, GetWeather. Frissítések R9 - Támogatja az újonnan megjelent 0.3z R4-et - Hozzáadva GetServerSettings - Hozzáadva IsPlayerSpawned - Hozzáadva IsPickupStreamedIn, Is3DTextLabelStreamedIn - Hozzáadva GetVehicleCab, IsVehicleOccupied, IsVehicleDead - Hozzáadva *HasVehicleBeenOccupied, *SetVehicleBeenOccupied - GetVehicleSpawnPos átnevezve GetVehicleSpawnInfo-ra - Javítva a laggok a szerverben, amit a YSF okozott - Javítva a GetPlayerColor(), már nem tér vissza 0-val, ha nem használtad a SetPlayerColor()-t - Scoreboard funckiók javítva linuxon Példák
Gravitáció állítása egy megadott játékosnak.
Egy meglévõ textdraw pozíciójának állítása egy sorral, nem kell újra létrehozni, csak felmutatni és át is van rakva. Ugye, hogy milyen egyszerû?
Lekéri, hogy mennyi idejde van a jármû lespawnolva és mennyi ideje nem ült benne senki. További példákért, nézd meg a YSF_examples.pwn-et. Telepítés: 1.) Le töltöd a legújabb kiadást, ki bontasz mindent a .rar fájlból a szervermappába. 2.) YSF-et belerakod a server.cfg-be Windows-on, \"plugins YSF.dll\"; Linux-on, \"plugins YSF.so\". 3.) YSF.inc-t belerakod a módba és újrafordítod. FONTOS, ha ezt kihagyod, crashelni fog. Mód tetejére be rakod a következõt #include <YSF> 4.) Mehet a szerver! Ha a plugin nem töltõdik be, szükséged lesz a Visual C++ Redistributable 2012 Update 4 x86-ra. http://www.microsoft.com/en-us/download/details.aspx?id=30679 Ha 64bites operáció rendszered van, akkor a 32bitest szintén fel kell raknod, mivel a samp server 32bites aplikáció és 32bites könyvtárakat igényel. Letöltés: https://github.com/kurta999/YSF/releases (Mindig a legújabb verzió) Jövõbeli tervek: - Per-player pickup rendszer - Load/Unload futás közben Új funckiók listája:
Köszönet Y_Less, OrMisicL, 0x688, Riddick94, Whitetiger, iFarbod, P3ti, Mellnik 51
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.
52
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. 53
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 54
Eljárások ( Callbackok ) / public OnPlayerClickMap( playerid, Float:fX, Float:fY, Float:fZ )« Dátum: 2011. November 26. - 22:42:16 »
OnPlayerClickMap
Ez az eljárás akkor hívódik meg, ha a játékos kijelöl egy pontot a térképen. Ha nem értenétek, akkor Jobb Egér Gomb-al rákattintott a térképre. Paraméterek: (playerid, Float:fX, Float:fY, Float:fZ) playerid - Annak a játékosnak az azonosítója, aki kijelölt magának egy pontot a térképen Float:fX - Az X kordináta, ahol a jel van. Float:fY - Az Y kordináta, ahol a jel van. Float:fZ - Az Z kordináta, ahol a jel van. Ez csak naggyából van kiszámítva. Teleportálásra \"NEM\" alkalmas Visszatérés Ez az eljárás nem kezeli a visszatéréseket. Példa: Elteleportáljuk oda a játékost, ahova kattintott a térképen. Jelen esetben jó lesz a Z kordináta, mivel a SetPlayerPosFindZ arra van, hogy megkeresse a legmagasabb pontot a megadott helyen. [pawn] public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ) { SetPlayerPosFindZ(playerid, fX, fY, fZ + 50); return 1; } [/pawn] Megjegyzés: A Z kordináta, amit az eljárás visszaad, az csak naggyából van. Szóval, ha pontos Z kordinátát szeretlen, akkor használd a MapAndreas plugint, vagy a SetPlayerPosFindZ-t. Ez a MapAndreas, amit itt belinkeltem, ez újabbik verzió. Van benne két lehetõség, egyik a nagyon pontos heightmap, amikor minden egyes X, Y kordinátához tartozik egy Z. Ez 72MB ramot igényel. A másik meg olyan, amikor csak minden harmadik X, Y kordinátához tartozik egy Z. Ez csak ~9MB ramot igényel. Én a másik módszert használom, ezis pontosan visszaadja a Z kordinátát és még a ramot se eszi annyira. Eredeti téma: http://wiki.sa-mp.com/wiki/OnPlayerClickMap 55
Eljárások ( Callbackok ) / public OnPlayerGiveDamage( playerid, damagedid, Float:amount, weaponid )« Dátum: 2011. November 26. - 22:31:16 »
OnPlayerGiveDamage
Ez az eljárás akkor hívódik meg, amikor egy játékos sérülést okoz egy másik játékosnak Paraméterek: ( playerid, issuerid, Float:amount, weaponid ) playerid - Annak a játékosnak az azonosítója, aki megsérült. damagedid - Annak a játékosnak az azonosítója, akinek sérülést okozott Float:amount - Az élet + páncél értéke egyben, amennyit sérült. weaponid - A fegyver azonosítója ( vagy a sérülés oka ), ami által megsérült. Ez ugyanúgy mûködik, mint az OnPlayerDeath-nál a reason. Visszatérés Ez az eljárás nem kezeli a visszatéréseket. Példa: [pawn] public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid) { if(damagedid != INVALID_PLAYER_ID) { new string[128], victim[MAX_PLAYER_NAME], attacker[MAX_PLAYER_NAME]; new weaponname[24]; GetPlayerName(playerid, attacker, sizeof (attacker)); GetPlayerName(damagedid, victim, sizeof (victim)); GetWeaponName(weaponid, weaponname, sizeof (weaponname)); format(string, sizeof(string), \"%s sérülést okozott ( %.0f ) %s nevû játékosnak, fegyver: %s\", attacker, amount, victim, weaponname); SendClientMessageToAll(0xFFFFFFFF, string); } return 1; } [/pawn] Megjegyzés: TakeDamage és GiveDamage nem egyezik teljesen, ez az eljárás azonnal meghívódik, ahogy egy játékos meglõ egy másik játékost. Tehát a másik játékosnak még le se ment az élete, de a GiveDamage már meghívódott. GiveDamage segítségével le tudod kérni, ha valaki sérülést okozott egy játékosnak, de a másik játékos nem vesztett semmit az életébõl. Tehát csak rálõtt, de nem ment le egyáltalán az élete. Ha a két játékos egy csapatban van, (SetPlayerTeam()-el egy csapatba vannak rakva) ez akkor is meghívódik, elõbb leírtam, hogy miért. Így mostmár nagyon könnyû azt megoldani, ha valaki rálõ a csapattársára, akkor kiírni neki, hogy ne lõdd a csapattársad! Ha azzal a játékossal akarsz foglalkozni, aki megsérült, akkor mindenképp a TakeDamage használata az ajánlott! Eredeti téma: http://wiki.sa-mp.com/wiki/OnPlayerGiveDamage 56
Általános / Interview with Kye« Dátum: 2011. Október 31. - 00:39:54 »
Ez már nagyon régi, de gondolom nyitok róla témát, mert szerintem nagyon sokan még nem is hallottak róla, vagy nem látták, mint ahogy énsem.
Angol, de szerintem megéri elolvasni, valamit csak megértetek belõle. http://gtapt.net/forum/index.php?topic=5747.0 57
Eljárások ( Callbackok ) / public OnPlayerTakeDamage( playerid, issuerid, Float:amount, weaponid )« Dátum: 2011. Szeptember 19. - 06:54:10 »
OnPlayerTakeDamage
Ez az eljárás akkor hívódik meg, ha valaki megsérül. Meglövök, vagy ha egyszerûen magasról leesik. Paraméterek: ( playerid, issuerid, Float:amount, weaponid ) playerid - Annak a játékosnak az azonosítója, aki megsérült. issuerid - Annak a játékosnak az azonosítója, aki által megsérült a játékos. Ha leesett valahonnan, akkor INVALID_PLAYER_ID. ( 65535 ) Float:amount - Az élet + páncél értéke egyben, amennyit sérült. weaponid - A fegyver azonosítója ( vagy a sérülés oka ), ami által megsérült. Ez ugyanúgy mûködik, mint az OnPlayerDeath-nál a reason. Visszatérés Ez az eljárás nem kezeli a visszatéréseket. Példa: Egy lövéstõl meghalsz! [pawn] public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid) { if(issuerid != INVALID_PLAYER_ID) { SetPlayerHealth(playerid, 0.0); } } [/pawn] Eredeti téma: http://wiki.sa-mp.com/wiki/OnPlayerTakeDamage 58
SA-MP: Szerverfejlesztés / Anti Mop« Dátum: 2011. Szeptember 18. - 21:52:20 »
Gondolom mindeki ismeri a híres repülõ seprû cleo scriptet.
A szerveremen már mindeki kezdte túlzásba vinni, és az agyamra ment. Ezért írtam rá egy scriptet, ami érzékeli ha repülsz a seprûvel és megöl. Ittvan a \'script\', foreach szükséges hozzá. [pawn] #include <a_samp> #define FILTERSCRIPT #include <foreach> new MopCheckTimer; public OnFilterScriptInit() { MopCheckTimer = SetTimer(\"CheckMop\", 1000, false); } public OnFilterScriptExit() { KillTimer(MopCheckTimer); } forward CheckMop(); public CheckMop() { foreach(Player, i) { if(GetPlayerState(i) == PLAYER_STATE_ONFOOT && GetPlayerAnimationIndex(i) == 1058) { SendClientMessage(i, -1, \"Nincs MOP!\"); SetPlayerHealth(i, 0); } } return 1; } [/pawn] Belerakod egy filterscriptbe, betöltöd és megy is! 59
SA-MP: Szerverfejlesztés / Instagib 0.3d« Dátum: 2011. Szeptember 18. - 18:13:46 »
Hali!
Gyorsan összedobtam egy kódot, aminek már jól kell mûködni, mint ahogy 0.3a elõtt ment. Csak 0.3d RC5-tõl mûködik! A lényege az, hogy ha valaki megsebez, akkor rögtön meghalsz. [pawn] public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid) { SetPlayerHealth(damagedid, 0.0); } [/pawn] 60
SA-MP: Szerverfejlesztés / pName - Extra gyors játékos név lekérése.« Dátum: 2011. Augusztus 27. - 21:36:41 »
Látom, hogy rengeteg ember használja ezt a pName funkciót, amivel mindig lekéri a nevét a játékosnak.
Csak itt az a probléma, hogy a GetPlayerName mindig lefut. Ezért megalkottam ezt a kódot, amiben csak EGYSZER fut le ez a függvény, és nempedig minden név lekérésénél. [pawn] new PlayerNames[sZERVER_SLOTOK_SZAMA_IRD_AT][MAX_PLAYER_NAME + 1]; // Minden játékoshoz tartozó cella, aminek a hossza 25 karakter #define pName(%1) \\ PlayerNames[%1] stock __pName__SetPlayerName(playerid, _name[]) { new retVal = SetPlayerName(playerid, _name); if(retVal > 0) { format(PlayerNames[playerid], MAX_PLAYER_NAME + 1, _name); } return retVal; } #if defined _ALS_SetPlayerName #undef SetPlayerName #else #define _ALS_SetPlayerName #endif #define SetPlayerName __pName__SetPlayerName // Használat: printf(\"ID 0 neve: %s\", pName(0)); public OnPlayerConnect(playerid) { // Ez a kód mindig lefelül szerepeljen! GetPlayerName(playerid, PlayerNames[playerid], MAX_PLAYER_NAME); // Belekérjük a játékos nevét a PlayerNames-nél a játékoshoz tartozó cellába. } public OnPlayerDisconnect(playerid, reason) { // Ez a kód itt mindig legalul szerepeljen! PlayerNames[playerid][0] = EOS; // EOS = End Of String, azaz nullázzuk } [/pawn] |