GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: spearox - 2012. Március 06. - 22:07:51

Cím: Ütés letiltása
Írta: spearox - 2012. Március 06. - 22:07:51
Sziasztok, azzal a kérdéssel fordulnék hozzátok, hogy hogyan tudom azt megoldani amikor egy játékos ütni próbál akkor egybõl legyen vége az ütésnek és ne tudja megütni a másikat?
Elõre is köszi
Cím: Ütés letiltása
Írta: ChuckNorris - 2012. Március 07. - 07:16:00
Valami ilyesmit próbálj meg: (nem teszteltem)
[pawn]// Ezzel nézem meg,hogy a játékos mikor nyom le egy billentyût
#define PRESSED(%0) \\
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if (PRESSED(KEY_FIRE) && GetPlayerWeapon(playerid) == 0 && !IsPlayerInAnyVehicle(playerid))
{ //Ütés/Lövés gomb,nincs fegyvere és nincs jármûben
   ClearAnimations(playerid);//Animáció megállítása
}
return 1;
}[/pawn]
Nem vagyok biztos a mûködésében.
Cím: Ütés letiltása
Írta: spearox - 2012. Március 07. - 07:49:12
Köszi szépen, sikerült.
De ha nem lenne nagy gond megkérhetném, hogy a definos részt elmagyaráznád mert ugye most tanulom a pawn-t és azt a részt nem értem :)
Cím: Ütés letiltása
Írta: ChuckNorris - 2012. Március 07. - 14:57:31
Hogyne.
Tehát, az OnPlayerKeySate függvény egy kicsit rendhagyó a többihez képest.
( Wiki: http://wiki.sa-mp.com/wiki/OnPlayerKeyStateChange )
Paraméterei a játékos ID és a leütött billentyûk.
Tehát, normális esetben így ellenõriznéd le hogy egy játékos lenyomott egy gombot:
[pawn]if (newkeys == KEY_FIRE)[/pawn]
Csakhogy ez hibás. Ehelyett így kell:
[pawn]if (newkeys & KEY_FIRE)[/pawn]
Ez pedig még nem teljes.
A definíció és használata:
[pawn]#define PRESSED(%0) \\
(((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
if (PRESSED(KEY_FIRE))
//stb[/pawn]
Tulajdonképpen egyenértékû ezzel:
[pawn]if ( ((newkeys & (KEY_FIRE)) == (KEY_FIRE)) && ((oldkeys & (KEY_FIRE)) != (KEY_FIRE)) )[/pawn]
Tehát a billentyû amit lenyomott a tüzelésé,
(newkeys & (KEY_FIRE)) == (KEY_FIRE)
de az elõzõleg lenyomott gomb nem a tüzelés
(oldkeys & (KEY_FIRE)) != (KEY_FIRE)
A wikin vannak további ellenõrzési módok (lenyomva tartja,felengedi stb..)
Cím: Ütés letiltása
Írta: spearox - 2012. Március 07. - 15:03:11
Köszi szépen már így világos :D
Cím: Ütés letiltása
Írta: kadaradam - 2012. Március 07. - 18:32:19
[mod]A problémád megoldódott, ezért a témát zárom.[/mod]