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

hook +use


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
12 odpowiedzi w tym temacie

#1 grankee

    Godlike

  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

Napisano 23.11.2015 22:53

No więc czy da się zhookować naciśnięcie +use nie sprawdzając tego w każdej game frame?


  • +
  • -
  • 0

#2 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 23.11.2015 23:15

Przypadkiem przypomniało mi się to:
https://wiki.alliedm...d_.2Battack.3FF

Jutro wrzucę jeszcze inne sposoby ;)
  • +
  • -
  • 0

#3 Linux'

    Pan Pomocny

  • Power User

Reputacja: 549
Wszechwiedzący

  • Postów:1 501
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:AmxMod i SourceMod
Offline

Napisano 24.11.2015 10:33

Jeszcze mozna sprobowac wykryc uzycie za pomoca dzwieku.
  • +
  • -
  • 0

b35020692_qesnxqa.png


#4 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

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

  • +
  • -
  • 1

#5 grankee

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

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 :)


  • +
  • -
  • 0

#6 mastah7991

    Wszechpomocny

  • Użytkownik

Reputacja: 154
Profesjonalista

  • Postów:388
  • Lokalizacja:Polska
Offline

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 

 

  • +
  • -
  • 0

#7 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 24.11.2015 17:53

+use (i innetypu +attack2) sa kompresowane do 1 zmiennej 4bajtowej (32 klawisze mozna tak w malej paczce). Dlatego @mastash to nie zadziała.

Wracajać do "callback'a" mogli byśmy stworzyć /biblioteke oparty na methodmap umilajacy pisanie skryptow ;)
  • +
  • -
  • 0

#8 grankee

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

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


  • +
  • -
  • 0

#9 Linux'

    Pan Pomocny

  • Power User

Reputacja: 549
Wszechwiedzący

  • Postów:1 501
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:AmxMod i SourceMod
Offline

Napisano 24.11.2015 18:45

To tak jak mowie, tylko emitsound. Optymalniejszej opcji nie ma, poniewaz nie ma zamiennika cmdstart :(


  • +
  • -
  • 0

b35020692_qesnxqa.png


#10 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 24.11.2015 18:53

@linux zobacz na ten 1 kod co dałem :)
  • +
  • -
  • 0

#11 grankee

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

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

  • +
  • -
  • 0

#12 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 24.11.2015 21:16

Poniewaz nie każdy dzieli kod na pliki :)

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

#13 grankee

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 517
Wszechwiedzący

  • Postów:1 500
  • Lokalizacja:Radom
Offline

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 :)


  • +
  • -
  • 0




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych