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

[ROZWIĄZANE] Rejestracja eventów takich jak: przeładowanie, wyrzucenie broni i inne


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

#1 Vasto_Lorde

    Wszechmogący

  • Power User

Reputacja: 256
Wszechwidzący

  • Postów:633
  • GG:
  • Steam:steam
  • Imię:Maćko
  • Lokalizacja:Poznań
Offline

Napisano 08.11.2014 12:26

Cześć. Ogólnie wprowadzając, tworzę mod, który wyklucza użycie broni palnej. I staram się znaleźć jak najwięcej sposobów na rejestracje "zachowań" gracza gdy gracz trzyma nóż (min przeładowanie, drop broni, atak, IN_USE, włączenie latarki, szprej). Właściwie pisząc ten temat sprawdzam trochę więcej źródeł niż wcześniej, więc pewnie sam znajdę niektóre odpowiedzi.

Napisałem kod:

#include <amxmodx>
#include <hamsandwich>
#include <engine>
 
public plugin_init(){
     register_plugin("Sprawdzenie przyciskow na nozu", "1.0", "Vasto_Lorde");
     
     RegisterHam(Ham_Weapon_Reload, "weapon_knife", "KnifeReload"); 
     RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "KnifePrimaryAttack"); //Dziala
     RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "KnifeSecondaryAttack"); //Dziala
     
     register_clcmd("drop", "KnifeDrop"); //Dziala
     register_clcmd("reload", "KnifeReload1");
     register_clcmd("+reload", "KnifeReload2");
     
     register_impulse(201, "KnifeSpray"); //Dziala
     register_impulse(100, "KnifeFlashlight"); //Dziala
}
public KnifeReload(ent){
     client_print(0, print_chat, "Weapon_Reload - %i", ent);
}
public KnifePrimaryAttack(ent){
     client_print(0, print_chat, "KnifePrimaryAttack - %i", ent);
}
public KnifeSecondaryAttack(ent){
     client_print(0, print_chat, "KnifeSecondaryAttack - %i", ent);
}
public KnifeDrop(id){
     if(get_user_weapon(id)==CSW_KNIFE)
          client_print(0, print_chat, "KnifeDrop - %i", id);
}
public KnifeReload1(id){
     if(get_user_weapon(id)==CSW_KNIFE)
          client_print(0, print_chat, "Weapon_Reload1 - %i", id);
}
public KnifeReload2(id){
     if(get_user_weapon(id)==CSW_KNIFE)
          client_print(0, print_chat, "Weapon_Reload2 - %i", id);
}
public KnifeSpray(id){
     if(get_user_weapon(id)==CSW_KNIFE)
          client_print(0, print_chat, "KnifeSpray - %i", id);
}
public KnifeFlashlight(id){
     if(get_user_weapon(id)==CSW_KNIFE)
          client_print(0, print_chat, "Flashlight - %i", id);
}
public client_PreThink(id){
     if(get_user_weapon(id)==CSW_KNIFE){
          new button=get_user_button(id);
          if(button&IN_RELOAD)
               client_print(0, print_chat, "cmdStartReload - %i", id);
          if(button&IN_USE)
               client_print(0, print_chat, "cmdStartUse - %i", id);
     }
}

 

Zaliczone mam przyciski: G(drop), F(latara), T(szprej). Ale nie podoba mi się moje rozwiązanie (innego nie znalazłem) z IN_USE i IN_RELOAD. Bo Ham_Weapon_Reload oraz register_clcmd nie działają. Think wykonuje się za dużo razy, gdy kliknę przycisk wiadomość pojawia się co najmniej dwukrotnie. Jest jakiś bardziej efektywny sposób na zarejestrowanie przeładowania na nożu i IN_USE(+use)?

 

PS. Jeśli ktoś byłby zainteresowany innymi przyciskami to kolejno Q, Z, X, C można zarejestrować przy użyciu register_clcmd dla komend: lastinv, radio1, radio2, radio3.


  • +
  • -
  • 1

#2 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 09.11.2014 21:19

1. Zamiast thinka możesz użyć FM_CmdStart lub Ham_ObjectCaps (przynajmniej dla IN_USE). FM_CmdStart będzie się wykonywać tylko, gdy gracz faktycznie "coś" robi. Ma jednak tą samą wadę, co think że coś może się wykonać wiele razy... Ale! To nie jest wcale taka wada, jeśli wiesz jak to działa :)

 

Otóż prócz sprawdzenia co gracz naciska poprzez get_user_button, możesz również sprawdzić co naciskaŁ przy poprzednim wywołaniu eventu, poprzez get_user_oldbutton lub po prostu cachując przyciski wewnątrz pluginu. W taki sposób: jeśli gracz nie naciskał poprzednio IN_USE, a teraz to robi, oznacza to ni mniej, ni więcej że zaczął naciskać. Więc w tym momencie możesz wywołać jakąś akcję. 


  • +
  • -
  • 2

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#3 Vasto_Lorde

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 256
Wszechwidzący

  • Postów:633
  • GG:
  • Steam:steam
  • Imię:Maćko
  • Lokalizacja:Poznań
Offline

Napisano 10.11.2014 13:34

Ja pier**le cały post w pizdu. Napisałem i połowa się wysłała. Trzeci raz od nowa:

 

Zrobiłem tak jak mówiłeś, wszystko jest w przyciski_noz2.

Wnioski: CmdStart wykonuje się zawsze, nawet jak nic nie robię. ObjectCaps wykonuje się ciągle gdy naciskam E. I nie da się tam użyć get_user_button & IN_USE && !get_user_oldbutton & IN_USE. 

 

Lepsze rozwiązanie według mnie jest w przyciski_noz3 zerżnięte z coda. EmitSound nie wykonuje się często. Jesli ktoś ma jakieś obiekcje co do używania tej funkcji, zapraszam do podzielenia się nimi w tym temacie. 

 

przyciski_noz4 to moja kompletna abstrakcja w poszukiwaniu rejestracji reloadu na nożu. Nie działa.

 

Ktoś ma jeszcze jakieś pomysły na ten przycisk R (prócz Thinku który był wymieniony wcześniej?)

Załączone pliki


  • +
  • -
  • 0

#4 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 10.11.2014 15:33

Na nożu reloada raczej inaczej się wykryć nie da, bo dalej jest już on odfiltrowany przez silnik gry (bo noża przecież nie przeładujesz).


  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#5 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 10.11.2014 15:55

U mnie takie cos dzialalo ok

 

public Fwd_CmdStart(id, uc_handle, seed){
    if(!is_user_alive(id)) return;
    
    new buttons=get_uc(uc_handle,UC_Buttons);
    
    new old_buttons=pev(id,pev_oldbuttons);
    
    if(buttons & IN_RELOAD){
        new ret;
        if(!(old_buttons & IN_RELOAD))
            ExecuteForward(fwd_r_click,ret,id);
        else ExecuteForward(fwd_r_press,ret,id);
    }
}

 

a do wykrywania IN_USE używałem Emit_Sounda ale w cmdstart tez mozna


  • +
  • -
  • 1
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#6 Vasto_Lorde

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 256
Wszechwidzący

  • Postów:633
  • GG:
  • Steam:steam
  • Imię:Maćko
  • Lokalizacja:Poznań
Offline

Napisano 10.11.2014 16:04

ExecuteForward(fwd_r_click,ret,id);
ExecuteForward(fwd_r_press,ret,id);

Z czym to się je?


  • +
  • -
  • 0

#7 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 10.11.2014 16:07

podmien to sobie na funkcje ktore maja sie wykonac po wcisnieciu przycisku i przy trzymaniu przycisku


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#8 Vasto_Lorde

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 256
Wszechwidzący

  • Postów:633
  • GG:
  • Steam:steam
  • Imię:Maćko
  • Lokalizacja:Poznań
Offline

Napisano 10.11.2014 16:18

A myślałem, że za tym jakaś magia się kryje.

W pierwszym moim poście jest wzmianka o client_PreThink i potem o CmdStart. Oczywiście ten sposób działa. Dzięki za pomoc. Można zamknąć, bo więcej się chyba nie wymyśli.


  • +
  • -
  • 0

#9 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

  • Postów:5 411
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:Ostrołęka
Offline

Napisano 11.11.2014 07:35

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Pomoc udzielona

Jeśli się z tym nie zgadzasz, report.png raportuj ten post, a moderator lub administrator rozpatrzy go ponownie.


Z pozdrowieniami,
Zespół AMXX.PL
  • +
  • -
  • 0

Posiadam TBM (inaczej PTB), które działa dużo lepiej niż zwykłe PTB, nawet na modach z lvlami. Zainteresowany? Proszę bardzo





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

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