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] Odliczanie czasu do końca rundy + wiadomość w chat - problem


Najlepsza odpowiedź VertekS, 28.05.2014 17:25

remove_taskset_task z własnym id taska (parametr 3).

Ponad plugin_init używasz dyrektywy preprocesora #define (będzie to ID taska, ważne aby było wyższe niż 32, żeby uniknąć błędów):

#define task_odliczanie 667

Przy ustawianiu taska:

set_task(1.0, "odliczanie", task_odliczanie,_,_,"b");

Następnie, jeśli zostało 11 sekund do końca rundy, to usuń task:

public odliczanie()
{
    new g_czas =  floatround(g_licznik - get_gametime(), floatround_floor);
    if(g_czas == 11)
    {
        for(new i = 1; i < maxPlayers; i++)
        {
            if(is_user_connected(i) && cs_get_user_team(i) == CS_TEAM_T)
            {    
                client_print(i,print_chat, "Czas")
                remove_task(task_odliczanie)
            }
        }
    }
}
Przejdź do postu


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

#1 Scorpion Flail

    Wszechobecny

  • Użytkownik

Reputacja: 129
Zaawansowany

  • Postów:489
  • GG:
  • Steam:steam
Offline

Napisano 28.05.2014 16:33

Witam.

Chcę zrobić by X czasu przed końcem rundy pojawiła się dana wiadomość w chat.

Dlatego zrobiłem tak:

 

W nowej rundzie (event HLTV):

set_task(1.0, "odliczanie",_,_,_,"b");

Następnie (11 sec przed końcem):

public odliczanie()
{
    new g_czas =  floatround(g_licznik - get_gametime(), floatround_floor);
    if(g_czas == 11)
    {
        for(new i = 1; i < maxPlayers; i++)
        {
            if(is_user_connected(i) && cs_get_user_team(i) == CS_TEAM_T)
            {    
                client_print(i,print_chat, "Czas")

            }
        }
    }
}

Odliczanie czasu oraz pokazywanie wiadomości działa, jednak przez taska powtarzającego, wiadomość w chat wyświetla się 2-3 razy.

Jak zrobić by wyświetlała się tylko raz?


  • +
  • -
  • 0

#2 DaanD

    Życzliwy

  • Zbanowany

Reputacja: 2
Nowy

  • Postów:30
  • Lokalizacja:Warszawa
Offline

Napisano 28.05.2014 17:03

hmm zrób poprostu set_task i dźwięk.

 

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Sound on finish rund"
#define VERSION "1.0"
#define AUTHOR "Mentos"

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
}

public plugin_precache()
{
    precache_sound("koniec/10.mp3")
    precache_sound("koniec/9.mp3")
    precache_sound("koniec/8.mp3")
    precache_sound("koniec/7.mp3")
    precache_sound("koniec/6.mp3")
    precache_sound("koniec/5.mp3")
    precache_sound("koniec/4.mp3")
    precache_sound("koniec/3.mp3")
    precache_sound("koniec/2.mp3")
    precache_sound("koniec/1.mp3")
}

public event_round_start()
{
    set_task(120.0, "countdown")
}

public countdown()
{
    set_task(1.0, "one")
    set_task(2.0, "two")
    set_task(3.0, "three")
    set_task(4.0, "four")
    set_task(5.0, "five")
}

public five()
{
    client_cmd(0, "spk koniec/5")
}

public four()
{
    client_cmd(0, "spk koniec/4")
}

public three()
{
    client_cmd(0, "spk koniec/3")
}

public two()
{
    client_cmd(0, "spk koniec/2")
}

public one()
{
    client_cmd(0, "spk koniec/1")
}


#3 VertekS

    Zaawansowany

  • Użytkownik

Reputacja: 48
Pomocny

  • Postów:80
  • Lokalizacja:amxxpc.exe
Offline

Napisano 28.05.2014 17:25   Najlepsza odpowiedź

remove_taskset_task z własnym id taska (parametr 3).

Ponad plugin_init używasz dyrektywy preprocesora #define (będzie to ID taska, ważne aby było wyższe niż 32, żeby uniknąć błędów):

#define task_odliczanie 667

Przy ustawianiu taska:

set_task(1.0, "odliczanie", task_odliczanie,_,_,"b");

Następnie, jeśli zostało 11 sekund do końca rundy, to usuń task:

public odliczanie()
{
    new g_czas =  floatround(g_licznik - get_gametime(), floatround_floor);
    if(g_czas == 11)
    {
        for(new i = 1; i < maxPlayers; i++)
        {
            if(is_user_connected(i) && cs_get_user_team(i) == CS_TEAM_T)
            {    
                client_print(i,print_chat, "Czas")
                remove_task(task_odliczanie)
            }
        }
    }
}

  • +
  • -
  • 1




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

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