No więc czy da się zhookować naciśnięcie +use nie sprawdzając tego w każdej game frame?
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.
|

hook +use
#1
Napisano 23.11.2015 22:53
#2
Napisano 23.11.2015 23:15
https://wiki.alliedm...d_.2Battack.3FF
Jutro wrzucę jeszcze inne sposoby

#4
Napisano 24.11.2015 14:42
Pierwsze testowane, reszta nie
Wszystkie dadzą wynik:
start +use +use +use +use +use +use stop +use
Różnią się prawdopodobnie częstotliwością.
1) OnPlayerRunCmd
#include <sourcemod> bool useState[MAXPLAYERS+1] = {false, ...}; public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float[3] vel, float[3] angles, int &weapon) { if (buttons & IN_USE) { if (!useState[client]) { useState[client] = true; PrintToChat(client, "start +use"); } } else { if (useState[client]) { useState[client] = false; PrintToChat(client, "stop +use"); } } if (buttons & IN_USE) { PrintToChat(client, "+use"); } return Plugin_Continue; }
2) OnGameFrame
#include <sourcemod> bool useState[MAXPLAYERS+1] = {false, ...}; public void OnGameFrame() { for (int client = 1; client <= MaxClients; client++) { if (isValidClient(client)) { if (GetClientButtons(client) & IN_USE) { if (!useState[client]) { useState[client] = true; PrintToChat(client, "start +use"); } } else { if (useState[client]) { useState[client] = false; PrintToChat(client, "stop +use"); } } if (GetClientButtons(client) & IN_USE) { PrintToChat(client, "+use"); } } } } stock bool isValidClient(int client) { if (!( 1 <= client <= MaxClients ) || !IsClientInGame(client)) return false; return true; }
3) PreThink
#include <sourcemod> bool useState[MAXPLAYERS+1] = {false, ...}; public void OnClientPutInServer(int client) { SDKHook(client, SDKHook_PreThink, preThink); } public void OnClientDisconnect(int client) { SDKUnhook(client, SDKHook_PreThink, preThink); } public void preThink(int client) { if (GetClientButtons(client) & IN_USE) { if (!useState[client]) { useState[client] = true; PrintToChat(client, "start +use"); } } else { if (useState[client]) { useState[client] = false; PrintToChat(client, "stop +use"); } } if (GetClientButtons(client) & IN_USE) { PrintToChat(client, "+use"); } } stock bool isValidClient(int client) { if (!( 1 <= client <= MaxClients ) || !IsClientInGame(client)) return false; return true; }
Użytkownik plx211 edytował ten post 24.11.2015 14:44
#5
Napisano 24.11.2015 17:28
moznaby zrobic z tego stocka z callfuncem
anyway chodzilo mi o wykrycie +use bez potrzeby sprawdzania jego nacisniecia co ramke
#6
Napisano 24.11.2015 17:38
AddCommandListener(hook, "+use");
public Action:hook(client, const String:command[], argc) { }
jak ktoś może niech sprawdzi i da info
#7
Napisano 24.11.2015 17:53
Wracajać do "callback'a" mogli byśmy stworzyć /biblioteke oparty na methodmap umilajacy pisanie skryptow

#8
Napisano 24.11.2015 18:03
niby tak, ale hookowanie kilkudziesieciu faktów sprawdzajac co ramke nie bedzie optymalne do uzycia jesli ktos wykorzysta moze 25% z nich
#10
Napisano 24.11.2015 18:53

#11
Napisano 24.11.2015 19:47
Ja tam nie słyszę dźwięku kiedy wdusze klawisz, tzn nie z gry, a jedynie z klawiatury bo rozklekotana. Trzebaby zhookowac jakos emit sound. W amxx pamietam to dzialalo.
plx wiem ze to tylko przyklad i dyskusja o czyms innym, ale martwi mnie wszechobecny nawyk nadupcania zmiennych globalnych, w 70% przypadkow sa one niepotrzebne.
Czemu ludzie nie korzystają z dobrodziejstwa zmiennej statycznej?
Użytkownik grankee edytował ten post 24.11.2015 19:49
#12
Napisano 24.11.2015 21:16

Ja używam static gdy tylko robię to co wyżej napisałem.
Zbaczamy z tematu, nie da sie wychwycic use z dzwieku (chyba) w sm
#13
Napisano 25.11.2015 23:07
Poniewaz nie każdy dzieli kod na pliki
Ja używam static gdy tylko robię to co wyżej napisałem.
Złe podejście. Używasz zmiennej statycznej jak musisz, a jak nie to globalnej.
Powinno być odwrotnie
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych