Skocz do zawartości

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.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Double WSAD


  • Zamknięty Temat jest zamknięty
5 odpowiedzi w tym temacie

#1 ^Grzyboo

    Wszechobecny

  • Użytkownik

Reputacja: 246
Wszechwidzący

  • Postów:461
  • Imię:Grzyboo
  • Lokalizacja:Tak
Offline

Napisano 19.08.2011 16:20

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?
  • +
  • -
  • 1

#2 sharkowy

    Lokalna anomalia sejsmiczna o nieustalonej genezie.

  • Przyjaciel

Reputacja: 113
Zaawansowany

  • Postów:1 981
Offline

Napisano 19.08.2011 16:35

Raczej się nie da, choć mogę się mylić.
  • +
  • -
  • 0

#3 Dwdov

    Profesjonalista

  • Zbanowany

Reputacja: 59
Pomocny

  • Postów:172
  • Imię:Dawid
  • Lokalizacja:Jawor
Offline

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.

Użytkownik Dawedov edytował ten post 19.08.2011 16:43

Nie pomagam na PW, tylko na forum.


#4 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

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]);
}

  • +
  • -
  • 1

#5 ^Grzyboo

    Wszechobecny

  • Autor tematu
  • Użytkownik

Reputacja: 246
Wszechwidzący

  • Postów:461
  • Imię:Grzyboo
  • Lokalizacja:Tak
Offline

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.
  • +
  • -
  • 0

#6 Adminek AMXX.PL

    Admin :)

  • Bot

Reputacja: 156
Profesjonalista

  • Postów:7 492
  • Lokalizacja:AMXX.PL
Offline

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, Dołączona grafika 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