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: 1
0 użytkowników, 1 gości, 0 anonimowych


Dodatki SourceMod



Temat jest zamknięty








