Witam, czy dałoby radę napisać funkcję, dzięki której gracz w przypadku, gdy naciśnie W / S / A lub D dwukrotnie w ciągu 0.5 sekundy to zostanie lekko wyrzucony ( nadana zostanie mu prędkość, np 300? ) w tą stronę, za którą odpowiada klawisz?
Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Guest Message by DevFuse
Double WSAD
Temat rozp.
^Grzyboo
, 19.08.2011 16:20
5 odpowiedzi w tym temacie
#1
Napisano 19.08.2011 16:20
#2
Napisano 19.08.2011 16:35
Raczej się nie da, choć mogę się mylić.
#3
Napisano 19.08.2011 16:40
Prethink + hallife_time ew. task?
#edit
do tego użycie cmdstart z fakemeta i zmiennej (może dwóch) pomocniczych. W sumie to teoria dlatego nie wiem jakby to wyszło w praktyce, ale co prawda z get_user_button bez odpowiedniego pomysłu wystarczyłoby trzymać ten klawisz.
#edit
do tego użycie cmdstart z fakemeta i zmiennej (może dwóch) pomocniczych. W sumie to teoria dlatego nie wiem jakby to wyszło w praktyce, ale co prawda z get_user_button bez odpowiedniego pomysłu wystarczyłoby trzymać ten klawisz.
Użytkownik Dawedov edytował ten post 19.08.2011 16:43
Nie pomagam na PW, tylko na forum.
#4
Napisano 19.08.2011 18:14
Tak można wykryć podwójny klik
#include <amxmodx> #include <amxmisc> #include <fakemeta> #define PLUGIN "Moving key TAP" #define VERSION "1.0" #define AUTHOR "R3X" //cbase/player.inc #define m_afButtonPressed 246 //(int) #define m_afButtonReleased 247 //(int) #define INTERVAL_OF_USE 1.0 enum TapKeys{ KEY_W, KEY_S, KEY_A, KEY_D }; new const giBits[TapKeys] = { IN_FORWARD, IN_BACK, IN_MOVELEFT, IN_MOVERIGHT }; new const gszLabels[TapKeys][] = { "w przod", "w tyl", "w lewo", "w prawo" }; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_forward(FM_PlayerPreThink, "fwPlayerPreThink", 1); } public fwPlayerPreThink(id){ static Float:gfLastPressed[33][TapKeys]; //last press static Float:gfLastQuickPress[33][TapKeys]; //last quickpress static giLastQuick[33][TapKeys]; //last was quick (1 or 0) ? //Timestamp of last tap static Float:gfLastTap[33]; //Pressed and release bitsums static pressed, released; pressed = get_pdata_int(id, m_afButtonPressed); released = get_pdata_int(id, m_afButtonReleased); new Float:fNow = get_gametime(); new Float:fLast; //Check all keys new iFlags; for(new i=0; i < sizeof(giBits); i++){ iFlags = giBits[TapKeys:i]; //Set press timestamp and exec press after Quick press if(pressed&iFlags){ fLast = gfLastQuickPress[id][TapKeys:i]; gfLastPressed[id][TapKeys:i] = fNow; //Last Quick press in last 0.3s if((fNow-fLast) < 0.3 && giLastQuick[id][TapKeys:i]){ if((fNow - Float:gfLastTap[id]) > INTERVAL_OF_USE){ gfLastTap[id] = fNow; giLastQuick[id][TapKeys:i] = 0; doubleTap(id, TapKeys:i); break; } } } //Mark Quick press if(released&iFlags){ //Quick press when press->release sequence made in 0.2s if((fNow - Float:gfLastPressed[id][TapKeys:i]) < 0.2){ giLastQuick[id][TapKeys:i] = 1; gfLastQuickPress[id][TapKeys:i] = gfLastPressed[id][TapKeys:i]; } else giLastQuick[id][TapKeys:i] = 0; gfLastPressed[id][TapKeys:i] = 0.0; } } } doubleTap(id, TapKeys:key){ client_print(id, print_chat, "Zryw %s", gszLabels[key]); }
#5
Napisano 19.08.2011 18:54
Dziękuje, nie mam serwera testowego aktualnie, ale wierzę że będzie działało
Serdeczne dzięki jeszcze raz.
Serdeczne dzięki jeszcze raz.
#6
Napisano 19.08.2011 19:02
Wiadomość wygenerowana automatycznie
Ten temat został zamknięty przez moderatora.
Powód: Wyjaśnione
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL
Ten temat został zamknięty przez moderatora.
Powód: Wyjaśnione
Jeśli się z tym nie zgadzasz, raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.
Z pozdrowieniami,
Zespół AMXX.PL
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych