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] set_speak w fakemecie - jak zrobić?


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

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 19.05.2014 18:56

Witam.

Mam taki kawałek kodu:

set_speak(id, SPEAK_NORMAL)
entity_get_vector(i, EV_VEC_origin, my_origin)

Nie chcę używać engine (funa tez nie).

Czy można to zrobić jakoś inaczej? Np przez fakemete?


  • +
  • -
  • 0

#2 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 19.05.2014 19:14

To: 

set_speak(id, SPEAK_NORMAL)

Można zastąpić tym:

public plugin_init()
{
    register_forward(FM_Voice_SetClientListening, "Voice")
}

public Voice(odbiorca, nadawca, listen) 
{
    engfunc(EngFunc_SetClientListening, odbiorca, nadawca, /* tu dajesz czy ma slyszec*/ true);
    return FMRES_SUPERCEDE
    //odbiorca może == nadawca
}

A to:

entity_get_vector(i, EV_VEC_origin, my_origin)

Można tym:

public GetEntOrign(id,orign[])
{
    new Float:orignf
    pev(id,pev_orign,orignf)
    FVecIVec(orignf, orign)
}

  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#3 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 19.05.2014 19:21

Co do entity_get_vector to dzięki. Przetestuje :)

 

 

A co do set_speak to nie rozumiem.

Chcę ustawić SPEAK_NORMAL i SPEAK_LISTENALL

Jak to wykonać bo nie bardzo czaje ten sposób.


  • +
  • -
  • 0

#4 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 19.05.2014 19:34

A co do set_speak to nie rozumiem.
Chcę ustawić SPEAK_NORMAL i SPEAK_LISTENALL
Jak to wykonać bo nie bardzo czaje ten sposób.

To co ci pokazałem daje duże większe możliwości bo możesz zrobić by gracz a słyszał gracza b ale gracz c juz go może nie słyszeć xD

 

 

Jak dać graczu  SPEAK_NORMAL i SPEAK_LISTENALL ?? To zależy od cvaru serwera (chyba nwm nie pamiętam nie używam engine nigdy prawie) ale załóżmy iż tylko żywi słyszą tylko żywych a martwi słyszą wszystkich i chcemy to dać graczu o id 17.

public plugin_init()
{
    register_forward(FM_Voice_SetClientListening, "Voice")
}

public Voice(odbiorca, nadawca, listen) 
{
    if(odbiorca == nadawca) return FMRES_IGNORED;
    if(nadawca == 17)
    {
        engfunc(EngFunc_SetClientListening, odbiorca, nadawca,  true);
        return FMRES_SUPERCEDE
    }
    return FMRES_IGNORED;
}

To jest: SPEAK_LISTENALL

 

A to jest SPEAK_NORMAL :

public plugin_init()
{
    register_forward(FM_Voice_SetClientListening, "Voice")
}

public Voice(odbiorca, nadawca, listen) 
{
    if(odbiorca == nadawca) return FMRES_IGNORED;
    if(nadawca == 17)
    {
        if(!is_user_alive(nadawca))
        {
            if(!is_user_alive(odbiorca))
            {
                engfunc(EngFunc_SetClientListening, odbiorca, nadawca,  true);
                return FMRES_SUPERCEDE
            }
        }
        else
        {
            engfunc(EngFunc_SetClientListening, odbiorca, nadawca,  true);
            return FMRES_SUPERCEDE
        }
    }
    return FMRES_IGNORED;

  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#5 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 19.05.2014 19:36

A jak to zrobić dla wszystkich?

Pętla?

I dalej nie rozumiem. Tu mamy tylko true/false

A w engine są 4 tryby.

 


  • +
  • -
  • 0

#6 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 19.05.2014 20:03

A jak to zrobić dla wszystkich?
Pętla?

To samo w sobie jest pewnym rodzajem pętli.

 

 

I dalej nie rozumiem. Tu mamy tylko true/false
A w engine są 4 tryby.

 

Dobra to zrób za pomocą engine aby gracz o id 1 słyszał gracza o id 2 ale gracz o id 3 go nie słyszał gracza o id 2 (wszyscy żywi i w tym samym team'ie)

 

Wytłumaczę ci coś:

Dajmy na to że gracz z id == 7 mowi coś 

register_forward(FM_Voice_SetClientListening, "Voice") // Rejestruje kiedy gracz mówi coś
public Voice(odbiorca, nadawca, listen) 
//Nadawca == 7 czyli id gracza ktory mowi
// Odbiorca to kolejni gracze (takze nadawca)
// listen - czy słyszy
// Wykonuje się kolejno u każdego gracza za każdym razem jak ktoś coś powie

  • +
  • -
  • 0
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#7 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 19.05.2014 20:42

Aha.
Czyli to jedzie po wszystkich graczach...

Chodzi mi o plugin dead_talk tylko ze na fakemete.
Rozjasniles mi juz dużo.
A jak zrobić żeby po smierci gracze mogli rozmawiac (Ci na spekcie+niezywi)
  • +
  • -
  • 0

#8 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 19.05.2014 21:07

public plugin_init()
{
    register_forward(FM_Voice_SetClientListening, "Voice")
}

public Voice(odbiorca, nadawca, listen) 
{
    if(odbiorca == nadawca) return FMRES_IGNORED;
    if(!is_user_alive(nadawca))
    {
        if(!is_user_alive(odbiorca))
        {
            engfunc(EngFunc_SetClientListening, odbiorca, nadawca,  true);
            return FMRES_SUPERCEDE
        }
    }
    else
    {
        engfunc(EngFunc_SetClientListening, odbiorca, nadawca,  true);
        return FMRES_SUPERCEDE
    }
    return FMRES_IGNORED;

Żywi słyszą tylko żywych a nieżywi wszystkich

Pasuje?


  • +
  • -
  • 1
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#9 Asiap

    Wszechpomocny

  • Girl

Reputacja: 171
Profesjonalista

  • Postów:323
  • Lokalizacja:Kętrzyn
Offline

Napisano 20.05.2014 00:19

to wyzej nie bedzie dzialac tak jak to opisales :D


  • +
  • -
  • 0

#10 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 20.05.2014 06:37

Dlaczego?

 

@BlackPerfum

 

Czy nie powinno być:

public Voice(odbiorca, nadawca, listen) 
{
    if(odbiorca == nadawca) return FMRES_IGNORED;
    if(!is_user_alive(nadawca))
    {
        if(!is_user_alive(odbiorca))
        {
            engfunc(EngFunc_SetClientListening, odbiorca, nadawca,  true);
            return FMRES_SUPERCEDE
        }
    }
    else
    {
        engfunc(EngFunc_SetClientListening, odbiorca, nadawca,  false); ////////////
        return FMRES_SUPERCEDE
    }
    return FMRES_IGNORED;
}

  • +
  • -
  • 0

#11 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 20.05.2014 07:27

to wyzej nie bedzie dzialac tak jak to opisales

A dlaczego by to? Pamiętajmy o tym:

załóżmy iż tylko żywi słyszą tylko żywych a martwi słyszą wszystkich

Bo to się cvarem/komendą (nwm czy to od pluginy czy serwera) ustawia

 

 

Czy nie powinno być:

Jesli chcesz żeby nikt nie słyszał gracza który żyje to możesz sobie tak ustawić.


  • +
  • -
  • 0
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#12 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 20.05.2014 07:50

Jedyny cvar jaki znam na głos to sv_alltalk - ustawia czy wszyscy słyszą wszystkich (martwi itd. CHYBA)


  • +
  • -
  • 0

#13 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 20.05.2014 08:26

Można tym sposobem co przedstawiłem zanegowac wszystko i sprawić by się mówiło jak się chce dlatego ja uważam że ten sposób jest jednym z najlepszych na zarządzanie rozmową między graczami


  • +
  • -
  • 0
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#14 Asiap

    Wszechpomocny

  • Girl

Reputacja: 171
Profesjonalista

  • Postów:323
  • Lokalizacja:Kętrzyn
Offline

Napisano 20.05.2014 15:31

jak zywi maja slyszec tylko zywych a martwi wszystkich to kod powinien wygladac tak

public Voice(odbiorca, nadawca) 
{
	if(odbiorca == nadawca) return FMRES_IGNORED;

	if(is_user_alive(odbiorca))
	{
		if(is_user_alive(nadawca))
		{
			engfunc(EngFunc_SetClientListening, odbiorca, nadawca,  true);
			return FMRES_SUPERCEDE
		}
		engfunc(EngFunc_SetClientListening, odbiorca, nadawca,  false);
		return FMRES_SUPERCEDE
	}
	return FMRES_IGNORED;
}

oraz oczywiscie musi byc wlaczony cvar sv_alltalk


  • +
  • -
  • 0

#15 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 20.05.2014 15:36

Zadam takie pytanie, dochodzące do tego tematu, czym można zroibć tak by mówiący słyszał siebie ?


Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#16 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 20.05.2014 16:00

Skoro każdy daje:

if(odbiorca == nadawca) return FMRES_IGNORED;

to bez tego to chyba raczej może siebie słyszeć


  • +
  • -
  • 1

#17 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

  • Postów:575
  • Lokalizacja:...
Offline

Napisano 20.05.2014 16:02

Ta

 

jak zywi maja slyszec tylko zywych a martwi wszystkich to kod powinien wygladac tak

Ależ oczywiście że tak. Zgadzam się z toba sposób który przedstawiłaś zadziała jeśli

 

wlaczony cvar sv_alltalk

A mój gdy on będzie wyłączony (nwm ile w nim jest opcji)

 

 

Kod uniwersalny (ignoruje cvary wszelkiej maści xD):

public Voice(odbiorca, nadawca, listen) 
{
    if(odbiorca == nadawca) return FMRES_IGNORED;
    if(!is_user_alive(nadawca))
    {
        if(!is_user_alive(odbiorca))
        {
            engfunc(EngFunc_SetClientListening, odbiorca, nadawca,  true);
            return FMRES_SUPERCEDE
        }
        engfunc(EngFunc_SetClientListening, odbiorca, nadawca,  false);
        return FMRES_SUPERCEDE
    }
    else
    {
        engfunc(EngFunc_SetClientListening, odbiorca, nadawca,  true);
        return FMRES_SUPERCEDE
    }
    return FMRES_IGNORED;
}

Zadam takie pytanie, dochodzące do tego tematu, czym można zroibć tak by mówiący słyszał siebie ?

Do tego jest:

voice_loopback "x"
// x - 1 słyszy siebie | 0 nie slyszy

ale jeśli skasujesz pierwszą linijkę kodu w mojej funkcji to podziała dokładnie tak samo


  • +
  • -
  • 2
Chcesz napisać do mnie na PW to:
Spoiler

Mój tok myślenia jest błędny? Wskaż mi błąd zmienie to!

Aktualnie bije limit 32 graczy (łącze serwery) ale nadal są lagi przy zbyt dużym przesyłu informacji Dołączona grafika
Gra się płynnie do 40~50 graczy potem łącze pada i zamiast biegać ludzie się teleportują Dołączona grafika

#18 GT Team

    Ten lepszy xD

  • Zbanowany

Reputacja: 321
Wszechpomocny

  • Postów:1 435
  • GG:
  • Imię:Tomasz i Grzegorz
  • Lokalizacja:Wojkowice
Offline

Napisano 20.05.2014 17:37

Skoro każdy daje:

if(odbiorca == nadawca) return FMRES_IGNORED;

to bez tego to chyba raczej może siebie słyszeć

 

Własnie zadałem pytanie ze względu na ten kod, wydawało mi się to surrealistyczne ;}

 

Dobrze, że chociąz stary hl engine na to pozwala :) Pozdrawiam


Nowa wersja Tower Defense 0.2 Alpha | Inne Mody -> Nowości

 


#19 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 20.05.2014 18:04

dzięki za pomoc.

Rozwiazane
  • +
  • -
  • 0

#20 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 27.05.2014 14:03

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




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

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