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. 811
SA-MP: verziók / SA-MP 0.3e client/server (Már megjelent)« Dátum: 2012. március 13. - 18:16:14 »
Nem tudom minek sz*rozzátok má ennyire, ahogy láttam, hogy 0.3e, rögtön tudtam, hogy \"akkora\" változás nem lesz
![]() Amúgy ezt próbáld le, nekem tetszik ![]()
Ha ezt a bugot javítanák még az RC-k során, akkor nagyon zsír lenne. 812
SA-MP: verziók / SA-MP 0.3e client/server (Már megjelent)« Dátum: 2012. március 13. - 17:47:39 »
Hát nem valami húde nagy dolog, de oké.
Ezek az új objectek szerintem még jól fognak jönni, meg azok a javítások, amiket a holding object-al csináltak. Ezt már régen megkellett volna. Még egy új bilincselt animációt is csináltak, szerintem ezt azért húzták ilyen sokáig. 813
Leírások/Útmutatók / [TuT] DM zóna létrehozása« Dátum: 2012. március 13. - 17:44:23 »
PVar az ilyen helyekre elmehet aludni.
Régen énis dicsértem, de ezután megváltozott a véleményem és Y_Less-nek igaza is van. 814
SA-MP: verziók / SA-MP 0.3e client/server (Már megjelent)« Dátum: 2012. március 12. - 19:27:57 »
YSF miatt, mert abban felhasznált dolgokat a SA:MP forráskódból. (Mivel fejlesztõ volt, csak kidobták)
815
Segítségkérés / Text label használata GVarnál.« Dátum: 2012. március 12. - 16:08:34 »
Példa:
[pawn]SetGVarInt(\"asd\", _:Create3DTextLabel(..), houseid);[/pawn] 816
Segítségkérés / sscanf2 hiba( "u" paraméter )« Dátum: 2012. március 12. - 15:16:57 »
A 2.5-ben ez hibás, mindegy milyen a szerver verzió, hülyeséggel fog visszatérni.
Én a 2.0-s verziókat ajánlom, amíg ezt a 2.5-re nem javítják. Abban pedig csak egy új funkció van, amit szerintem nem igen használtok. A régebbi (2.0) ráadásul kevesebb memóriát is foglal, mivel a ramból olvassa a játékos neveket és nempedig újra eltárolja és azt olvassa. (Aztis onnan olvassa, csak memória hackel olvssa ezeket XD) A hivatalos oldalról le tudod tölteni a 2.0-t R2 800/500p-re. 817
Segítségkérés / Mysql - Undefined Simbol« Dátum: 2012. március 11. - 20:40:09 »Idézetet írta: lackos888 date=1331494634\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"18335\" data-ipsquote-contentclass=\"forums_Topic jelszoi = szoveg; helyére format(jelszoi,sizeof(jelszoi),\"%s\",szoveg);Nem! A format az erre lassú. [pawn]strcat(jelszoi, szoveg);[/pawn] Esetleg próbáld meg a következõt: mysql_fetch_field_row(result,\"username\"); Ugyan az, mint a fenti (a fenti az makró, ezmeg a native funkció). Paraméterek ugyanazok, csak fordítva. 818
Eljárások ( Callbackok ) / public OnPlayerEditObject« Dátum: 2012. március 10. - 23:32:40 »
Szerintem az, amikor rámegy a Save gombra.
819
Eljárások ( Callbackok ) / public OnPlayerEditObject« Dátum: 2012. március 10. - 23:25:34 »
Bocs, de ez az eljárás akkor hívódik meg, amikor a játékos szerkeszti az objectot.
Tehát nemcsak akkor, amikor befejezi.
Tehát ha befejezi, vagy frissíti. (A frissítésre azt értem, amikor mozgassa/forgassa valamelyik tengelyen) Érdekes, a wiki-n se a legjobban van fordítva. 820
Eljárások ( Callbackok ) / public OnPlayerKeyStateChange ( playerid, newkeys, oldkeys )« Dátum: 2012. március 10. - 21:09:43 »
A \"KEY_JUMP\" így néz ki az a_samp.inc-ben:
Tehát az a 32. A 32 a bináris (kettes) számrendszerben így néz ki: 0b10000 Tizenhatos (hexadecimális) számrendszerben pedig így: 0x20 Olvass utána google-n, hogy számrendszerek, ezt nemfogom elmagyarázni az egészet az elejétõl. A bites részét azt leírhatom, bár elég részletesen szerintem le van írva a leírásba. Bitmûveletekrõl ittvan egy leírás, tervezem ezt is lefordítani: http://web.archive.org/web/20071118114428/http://forum.sa-mp.com/index.php?topic=8301.msg67577#msg67577 821
Segítségkérés / AttachObjectToPlayer leszedése« Dátum: 2012. március 10. - 16:10:30 »DestroyObject(iObjectID); Ez nem játékos object, tehét DestroyObejct()-kell. 822
Pluginok és Programok / YSF - kurta999\'s version« Dátum: 2012. március 10. - 15:08:01 »
Ezeket le tesztelem, kösz.
A console az nem lehet hibás, mivel az a mutatónak a címe és ha az rossz lenne, akkor a rule-k már mindjárt nem mennének. E: Nem volt hibás, csak te valószínûleg a sima R2-t használtad, én meg az R2-800p-t. Azért crashelt neked. Érdekes, a logprintf az ugyanaz, meg pár cím. De ezzel most megint csak fölösleges basza.kodni, jön a 0.3e és kezdhetjük elõlrõl. Majd ha az kijön, akkor újra elkezdtem ezt a SetPlayerGravity() javítását. 823
Fórum Archívum (Témák/Fórumok) / SA-MP Forráskód« Dátum: 2012. március 10. - 12:30:07 »Idézetet írta: 1ST_Chr date=1331363649\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"7610\" data-ipsquote-contentclass=\"forums_Topic Valamelyik témában láttam, hogy valaki azt írta, hogy Kalcor azért nem veszi be Y_Less-t mert akkor beégne, ha Y_Less meglátná a forráskódot...Y_Less régen fejlesztõ volt, szóval tuti, hogy az alapján készült. Fõleg a régi YSF, ami még 0.2x-re volt. Na az aztán kegyetlen, abba sokkal több dolog van, mint ebben. (SetPlayerSkinForPlayer(playerid, forplayer, skinid)) Y_Less szerintem meg olyan szinten van, hogy õ már az Assemly kódból kiszedi a dolgokat és forráskód se kell neki ![]() 824
Pluginok és Programok / YSF - kurta999\'s version« Dátum: 2012. március 10. - 12:27:53 »Idézetet írta: Hun_Norberto date=1331376976\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"14428\" data-ipsquote-contentclass=\"forums_Topic Ééés RemoveServerRule megoldható?SAMP forráskódban aztis megtaláltam, csak az nincs sehol használva, szóval azt elég problémás lesz megkeresni. Tegnap bele se kezdtem, mert a ModifyFlag az igen felbaszta az agyam, mert nem akart mûködni. 825
Eljárások ( Callbackok ) / public OnPlayerKeyStateChange ( playerid, newkeys, oldkeys )« Dátum: 2012. március 10. - 12:26:02 »
OnPlayerKeyStateChange
Ez az eljárás akkor hívódik meg, mikor a játékos lenyom vagy elenged egy \"speciális (Kivéve a Fel-Le, Jobbra-Balra)\" gombot. Ezeket a gombokat a GetPlayerKeys() segítségével tudjuk ellenõrizni. Paraméterek: ( playerid, newkeys, oldkeys ) playerid - Annak a játékosnak az azonosítója, aki megnyomta a gombot. newkeys - A változó, ami a játékos által lenyomott gombok bitjeit tárolja. oldkeys - A változó, amit azokat a biteket tárolja, amit a mostani gomb lenyomás elõtt tárolt. (Ha lenyomom az X betût, aztán Y-t, akkor amikor az Y-t lenyomta, akkor az X lesz az old keys) Visszatérés 1 - Megengedi az eljárásnak hogy meghívódjon a többi scriptben. Ez mindig meghívódik a játékmódban, tehát a 0 visszatérés csak a filterscripteket akadályozza. Információ Ez az eljárás akkor hívódik meg, amikor a játékos lenyom, vagy elenged egy speciális gombot. Csakhogy nem minden gomb tartozik ide, csak azok a gombok, amik használva vannak alapból a játékban. Például ha az \"A\" betût akarod ellenõrizni, akkor azt nem lehet vele, de viszont azt igen, amikor lenyomja a sprint gombot. Azt a gombot fogja sprint gombnak venni, ami a játékosnak be van állítva. Ha SPACE, akkor SPACE, ha H, akkor azt, stb.. Paraméterek A paraméterek az összes gomb száma, amit elengedtél, vagy amit épp lenyomtál. Ez az eljárás akkor hívódik meg, amikor valamilyen gomb státusz megváltozik. (Tehát ha lenyomtál egy gombot és azt elengetted, vagy csak simán lenyomtál egy gombot). Az információ, amit a paraméterek visszaadnak, az nem úgy van, mint a többi átlagos eljárásnál. Egy paraméterben adja vissza több gomb adatait. Ezt bitmûveletek segítségével tudjuk ellenõrizni. Minden gombnak megvan a saját bitje, és megnézzük, hogy a bit igaz-e, vagy hamis-e. Ha igaz, akkor levan nyomva, ellentétben nincs. Hogy NE ellenõrizd a gombot Ha le akarod ellenõrizni, hogy valaki lenyomta a lövés gombot, akkor azt nyilván valóan így csinálnád: [pawn]if (newkeys == KEY_FIRE)[/pawn] A kód mûködin fog, csak nem úgy, ahogy annak kéne. Próbálj meg legugolni és lenyomni a lövés gombot - a kód már nem is mûködik. Miért is? Mivel a newkeys nem egyenlõ a \"KEY_FIRE\"-vel, hanem \"KEY_FIRE\" kombinálva a \"KEY_CROUCH\"-al. Hogy ellenõrizd a gombot Most már tudjuk, hogy a változó két gomb adatait tartalmazza, ezért csak azt kéne megnézni, hogy az a gomb benne-e van, amit lenyomtunk. Erre a bit maszkolás a megoldás. Minden gombnak van saját bitje a változóban (Bár pár gombnak ugyanaz a bitje, de azok kocsiban vagy gyalog vannak. Szóval nemfog keveredni, mert nem kerülhetnek egyszerre bele a változóba.) Jelenleg csak egy bitet kell megnéznünk: [pawn]if (newkeys & KEY_FIRE)[/pawn] Az egy darab \'&\'-jel az a bitenkénti ÉS és nempedig a logikai ÉS. Ha leteszteled a kódot, akkor fog mûködni. Gugolás vagy futás közben, az lényegtelen, akkor fog menni, amikor le van nyomva a lövés gombod. Csakhogy ezzel van egy kis probléma: Ez a kód akkor fog mûködni, amikor le van nyomva a lövés gombod. Így jó is lenne, csakhogy mint elõbb leírtak miatt akkor is menni fog, ha a lövés gombod le van nyomva (Tartod az egéren a kezed) és közben te lenyomsz egy gombot. (Legugolsz, felállsz, sprintelsz, stb...) Hogy ellenõrizd ha lenyomják a gombot Itt jön használatba az \"oldkeys\" paraméter is. Elõször meg kell nézni, hogy a \"newkeys\"-ben benne-e van, és hogy NINCS-e az oldkeys-ben. Mivel ha benne lenne ott is, akkor valószínûleg eddig is levont neki nyomva és közben lenyomott egy másik gombot. A következõ kód megoldja ezt: [pawn]if ((newkeys & KEY_FIRE) && !(oldkeys & KEY_FIRE))[/pawn] Ez csak akkor fog meghívódni, amikor a KEY_FIRE megtalálható a \"newkeys\"-ben és nem pedig akkor, amikor ez le van nyomva és közben más gombokat nyomkálsz. Hogy ellenõrizd ha elengedik a gombot Ugyanaz a megoldás, mint a fentiben, csak fordítva. [pawn]if ((oldkeys & KEY_FIRE) && !(newkeys & KEY_FIRE))[/pawn] Hogy ellenõrizz több gombot Ha azt akarod ellenõrizni, hogy a játékos lenyomja a lövés és a gugolás gombot, akkor a következõ kód mûködni fog. [pawn]if ((newkeys & KEY_FIRE) && (newkeys & KEY_CROUCH))[/pawn] De ha azt akarod ellenõrizni, hogy elõször lenyomta a lövés gombot, aztán pedig a gugolást, akkor ez a kód NEM FOG mûködni! Csak akkor fog mûködni, ha EGYSZERRE nyomja le azt a két gombot. A következõ megoldás sem fog rendesen mûködni: [pawn]if ((newkeys & KEY_FIRE) && !(oldkeys & KEY_FIRE) && (newkeys & KEY_CROUCH) && !(oldkeys & KEY_CROUCH))[/pawn] Miért nem? Mivel az OnPlayerKeyStateChange minden egyes gomb lenyomásnál/elengedésnél hívódik meg. Tehát ha õ lenyomja a \"KEY_FIRE\"-t, akkor meghívódik az OnPlayerKeyStateChange a \"KEY_FIRE\"-vel a \"newkeys\"-ben és nem az \"oldkeys\"-ben. Ekkor ha lenyomja a \"KEY_CROUCH\"-ot, akkor OnPlayerKeyStateChange meghívódik a \"KEY_CROUCH\"-al és a \"KEY_FIRE\"-vel a \"newkeys\"-ben, de közben a \"KEY_FIRE\" benen van az \"oldkeys\"-ben. Tehát itt hülyeséget csinál ez a megoldás: \"!(oldkeys & KEY_FIRE)\". A megoldás nagyon egyszerû: [pawn]if ((newkeys & (KEY_FIRE | KEY_CROUCH)) == (KEY_FIRE | KEY_CROUCH) && (oldkeys & (KEY_FIRE | KEY_CROUCH)) != (KEY_FIRE | KEY_CROUCH))[/pawn] Ez a megoldás elsõ ránézésre nagyon komplikáltnak tûnik, pedig nem az. A kód azt csinálja, hogy ellenõrzi, hogy mind a két gomb benne-e van a \"newkeys\"-ben, de nincs-e az \"oldkeys\"-ben. Egyszerûsítés Gomb lenyomva tartása Definíció: [pawn] // HOLDING(keys) #define HOLDING(%0) \\ ((newkeys & (%0)) == (%0)) [/pawn] Egy gomb lenyomva tartása: [pawn]if (HOLDING( KEY_FIRE ))[/pawn] Több gomb lenyomva tartása: [pawn]if (HOLDING( KEY_FIRE | KEY_CROUCH ))[/pawn] Gomb lenyomása Definíció: // PRESSED(keys) [pawn]#define PRESSED(%0) \\ (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))[/pawn] Egy gomb lenyomása: [pawn]if (PRESSED( KEY_FIRE ))[/pawn] Több gomb lenyomása: [pawn]if (PRESSED( KEY_FIRE | KEY_CROUCH ))[/pawn] Gomb elengedése Definíció: [pawn]// RELEASED(keys) #define RELEASED(%0) \\ (((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))[/pawn] Egy gomb elengedése: [pawn]if (RELEASED( KEY_FIRE ))[/pawn] Több gomb elengedése: [pawn]if (RELEASED( KEY_FIRE | KEY_CROUCH ))[/pawn] Példák Nitró amikor lenyomja a lövés gombot [pawn] public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if (PRESSED(KEY_FIRE)) { if (IsPlayerInAnyVehicle(playerid)) { AddVehicleComponent(GetPlayerVehicleID(playerid), 1010); } } return 1; } [/pawn] Szuper ugrás [pawn] public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if (PRESSED(KEY_JUMP)) { new Float:x, Float:y, Float:z; GetPlayerPos(playerid, x, y, z); SetPlayerPos(playerid, x, y, z + 10.0); } return 1; } [/pawn] Halhatatlanság amíg az ENTER gombot nyomja [pawn] new Float:gPlayerHealth[MAX_PLAYERS]; #if !defined INFINITY #define INFINITY (Float:0x7F800000) #endif public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if (PRESSED(KEY_ACTION)) { // They just pressed the action key, save their // old health for restoration. GetPlayerHealth(playerid, gPlayerHealth[playerid]); SetPlayerHealth(playerid, INFINITY); } else if (RELEASED(KEY_ACTION)) { // They just let go of action - restore // their old health again. SetPlayerHealth(playerid, gPlayerHealth[playerid]); } return 1; } [/pawn] Magyarázat Nem kell aggódnod, hogy ezek a dolgok hogyan mennek végbe, végbe mennek és kész. HOLDING (Tartás) érzékeli, ha a játékos tartja a gombot. Tehát addig megy a holding, amíg azt a gombot el nem engeded. PRESSED érzékeli, ha csak simán lenyomtad a gombot. RELEASED érzékeli, ha elengedted a gombot. Ajánlott tovább olvasni, itt jön a lényeg: Bináris számrendszerben a KEY_SPRINT a következõ:
Tehát a 4. bit. Ha a 4. bit igaz, akkor benne van a KEY_SPRINT és ha ellenõrizni akarjuk, hogy benne-e van, akkor csak megkell nézni, hogy a KEY_SPRINT benne-e van. (newkeys & KEY_SPRINT) vagy (neweys & (1 << 3)) 0001 binárisan az egy, ha ezt eltoljuk 3-al balra, akkor a következõ lesz: 1000 ( ![]() ![]() KEY_SPRINT:
A KEY_JUMP pedig:
Ezek után a bitenkénti VAGY lefut és \"egyberakja\" õket. Jelen esetben ez lesz a kívánt érték, amiben lefutott a bitenkénti VAGY a két érték között.
Kapcsolódó eljárások OnPlayerStateChange: Ez az eljárás akkor hívódik meg, mikor a játékos megváltoztatja az állapotát. Kapcsolódó függvények GetPlayerKeys: Lekérdezi, hogy a játékos milyen gombot nyomott meg. Eredeti téma: http://wiki.sa-mp.com/wiki/OnPlayerKeyStateChange |