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] Task - problem z wyświetlaniem wiadomosci


Najlepsza odpowiedź sebul, 08.07.2013 00:00

1. Nigdy nie wczytuj cvarów w plugin_init.

2. Nigdy nie wczytuj wartości cvara w środku pętli, jeśli można to zrobić przed nią.

3. Pętla po graczach w plugin_init? A w życiu... właśnie też na początku nie miało prawa to działać, bo sprawdzałeś, czy gracz był na serwerze.

4. Zawsze staraj się pisać jak najkrótszy kod.

5.

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <ColorChat>

#define PLUGIN "Rate'y + HUDMSG"
#define VERSION "2.0"
#define AUTHOR "Filip / `NN"

new const prefix[] = "[RSF]";

new pcvar_rate;
new pcvar_cmdbackup;
new pcvar_cmdrate;
new pcvar_updaterate;
new pcvar_interp;

new pcvar_hud_show;
new pcvar_hud_showtype;
new pcvar_hud_time;

new hudhandle;

public plugin_init(){
    register_plugin(PLUGIN, VERSION, AUTHOR)
    RegisterHam(Ham_Spawn, "player", "raty", 1);
    
    register_dictionary("rsf.txt")
    
    pcvar_rate = register_cvar("rsf_rate", "25000")
    pcvar_cmdbackup = register_cvar("rsf_cmdbackup", "2")
    pcvar_cmdrate = register_cvar("rsf_cmdrate", "101")
    pcvar_updaterate = register_cvar("rsf_updaterate", "101")
    pcvar_interp = register_cvar("rsf_interp", "0.01")
    
    pcvar_hud_show = register_cvar("rsf_hud_show", "1")
    pcvar_hud_showtype = register_cvar("rsf_hud_showtype", "0")
    pcvar_hud_time = register_cvar("rsf_hud_time", "120.0")
    
    hudhandle = CreateHudSyncObj();
}

public plugin_cfg(){
    new cfgDir[64]
    get_configsdir(cfgDir, 63)
    server_cmd("exec %s/rsf.cfg", cfgDir)
}

public raty(id){
    if(!is_user_connected(id)) return;
    
    client_cmd(id, "rate %d", get_pcvar_num(pcvar_rate))
    client_cmd(id, "cl_cmdbackup %d", get_pcvar_num(pcvar_cmdbackup))
    client_cmd(id, "cl_cmdrate %d", get_pcvar_num(pcvar_cmdrate))
    client_cmd(id, "cl_updaterate %d",get_pcvar_num(pcvar_updaterate))
    client_cmd(id, "ex_interp ^"%.2f^"", get_pcvar_float(pcvar_interp)+0.0001)
    
    if(get_pcvar_num(pcvar_hud_show) == 1) {
        new Float:ttime = get_pcvar_float(pcvar_hud_time);
        if(ttime > 0) {
            if(!task_exists(id)) set_task(ttime, "hudmsg", id, _, _, "b")
        }
        else {
            hudmsg(id);
        }
    }
}

public hudmsg(id){
    if(!is_user_connected(id)) {
        remove_task(id);
        return;
    }
    
    new htype = get_pcvar_num(pcvar_hud_showtype);
    if(htype != 1){
        set_hudmessage(255, 100, 10, 0.1, 0.7, 0, 6.0, 9.0, 0.0, 0.0, random_num(1,4))
        ShowSyncHudMsg(id, hudhandle, "%L", LANG_PLAYER, "RSF_INFO")
    }
    if(htype)
        ColorChat(id, GREEN, "%s ^x01%L", prefix, LANG_PLAYER, "RSF_INFO")
}

Coś takiego chyba się nada.

Przejdź do postu


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

#1 Filip1512

    Wszechmogący

  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 07.07.2013 15:55

Cześć,

jak to dość często bywa u mnie, po raz kolejny mam problem z taskami (już nawet nie wiem, który raz :P).

Wyświetlanie wiadomości w hudzie/czacie nie działa, jesli cvar "rsf_hud_time" jest ustawiony na inną wartość niż "0". Cały czas kombinuje w sma, więc kod się cały czas zmienia, ale na obecną chwilę mam już tak:

 

Spoiler

  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#2 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 07.07.2013 16:07

Łap

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <ColorChat>

#define PLUGIN "Rate'y + HUDMSG"
#define VERSION "2.0"
#define AUTHOR "Filip / `NN"
#define TaskHud 781232

new maxplayers;

new prefix[] = "[RSF]";

new pcvar_rate;
new pcvar_cmdbackup;
new pcvar_cmdrate;
new pcvar_updaterate;
new pcvar_interp;

new pcvar_hud_show;
new pcvar_hud_showtype;
new pcvar_hud_time;

public plugin_init(){
    register_plugin(PLUGIN, VERSION, AUTHOR)
    RegisterHam(Ham_Spawn, "player", "raty", 1);
    
    register_dictionary("rsf.txt")
    
    pcvar_rate = register_cvar("rsf_rate", "25000")
    pcvar_cmdbackup = register_cvar("rsf_cmdbackup", "2")
    pcvar_cmdrate = register_cvar("rsf_cmdrate", "101")
    pcvar_updaterate = register_cvar("rsf_updaterate", "101")
    pcvar_interp = register_cvar("rsf_interp", "0.01")
    
    pcvar_hud_show = register_cvar("rsf_hud_show", "1")
    pcvar_hud_showtype = register_cvar("rsf_hud_showtype", "0")
    pcvar_hud_time = register_cvar("rsf_hud_time", "120.0")
    
    maxplayers = get_maxplayers()
    
    for(new id=0; id<=maxplayers; id++)
        if(get_pcvar_float(pcvar_hud_time) > 0 && get_pcvar_num(pcvar_hud_show) == 1)
            set_task(get_pcvar_float(pcvar_hud_time), "hudmsg", id+TaskHud, _, _, "b") // Lepiej uważaj z id w task`ach
}

/*
public plugin_cfg(){
    new cfgDir[64]
    get_configsdir(cfgDir, 63)
    server_cmd("exec %s/rsf.cfg", cfgDir)
}*/
//Po co ci to ?


public raty(id){
    client_cmd(id, "rate %d", get_pcvar_num(pcvar_rate))
    client_cmd(id, "cl_cmdbackup %d", get_pcvar_num(pcvar_cmdbackup))
    client_cmd(id, "cl_cmdrate %d", get_pcvar_num(pcvar_cmdrate))
    client_cmd(id, "cl_updaterate %d",get_pcvar_num(pcvar_updaterate))
    client_cmd(id, "ex_interp ^"%f^"", get_pcvar_float(pcvar_interp))
    if(get_pcvar_num(pcvar_hud_show) == 1 && get_pcvar_float(pcvar_hud_time) == 0)	hudmsg(id);
}


public hudmsg(idt){

	new id = idt-TaskHud 
	if(!is_user_connected(id)) return 0; // Inaczej dla graczy których niema na serwerze też się to wykona
	if(get_pcvar_num(pcvar_hud_showtype) == 0)
	{
		set_hudmessage(255, 100, 10, 0.1, 0.7, 0, 6.0, 9.0, 0.0, 0.0, random_num(1,4))
		ShowSyncHudMsg(id, CreateHudSyncObj(), "%L", LANG_PLAYER, "RSF_INFO")
	}
	else if(get_pcvar_num(pcvar_hud_showtype) == 1)	ColorChat(id, GREEN, "%s ^x01%L", prefix, LANG_PLAYER, "RSF_INFO")
	else //Dlaczego bez sprawdzania czy typ msg jest 2 bo jak by ktoś w cvar`ze wybrał inną liczbę to by się wogóle nie pokazało
	{
		set_hudmessage(255, 100, 10, 0.1, 0.7, 0, 6.0, 9.0, 0.0, 0.0, random_num(1,4))
		ShowSyncHudMsg(id, CreateHudSyncObj(), "%L", LANG_PLAYER, "RSF_INFO")
		ColorChat(id, GREEN, "%s ^x01%L", prefix, LANG_PLAYER, "RSF_INFO")
	}
	return 0;
}

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

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 07.07.2013 16:27

Konstrukcje z TaskHud dodawanie i odejmowanie całkowicie nie potrzebne usuń je


  • +
  • -
  • 2

#4 BlackPerfum

    Pseudo interakcja??

  • Power User

Reputacja: 459
Wszechobecny

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

Napisano 07.07.2013 16:36

Nic się nie stanie jak użyje id gracza ??

Nigdy w pluginie nie widziałem aby w tasku było id gracza tzn. bynajmniej nie sprawdzałem czy może być.


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

#5 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 07.07.2013 16:43

@Black - ja już nie raz używałem id w tasku i działało.

/*
public plugin_cfg(){
new cfgDir[64]
get_configsdir(cfgDir, 63)
server_cmd("exec %s/rsf.cfg", cfgDir)
}*/
//Po co ci to ?

Bo cvary są czytane z oddzielnego pliku, nie z amxx.cfg.

 

 

 

Czyli tak?

 

Spoiler

  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#6 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 555
Godlike

  • Postów:11 980
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 07.07.2013 16:57

Nic się nie stanie jak użyje id gracza ??

 

Nie nic sie nie stanie


  • +
  • -
  • 0

#7 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 07.07.2013 17:20

Dziwne,  bo dopiero z id + task hudem działa, a bez niego nie...

 

Twój kod Black działa.

 

Dark - a Ty jak byś to zrobił?


  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#8 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 08.07.2013 00:00   Najlepsza odpowiedź

1. Nigdy nie wczytuj cvarów w plugin_init.

2. Nigdy nie wczytuj wartości cvara w środku pętli, jeśli można to zrobić przed nią.

3. Pętla po graczach w plugin_init? A w życiu... właśnie też na początku nie miało prawa to działać, bo sprawdzałeś, czy gracz był na serwerze.

4. Zawsze staraj się pisać jak najkrótszy kod.

5.

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <ColorChat>

#define PLUGIN "Rate'y + HUDMSG"
#define VERSION "2.0"
#define AUTHOR "Filip / `NN"

new const prefix[] = "[RSF]";

new pcvar_rate;
new pcvar_cmdbackup;
new pcvar_cmdrate;
new pcvar_updaterate;
new pcvar_interp;

new pcvar_hud_show;
new pcvar_hud_showtype;
new pcvar_hud_time;

new hudhandle;

public plugin_init(){
    register_plugin(PLUGIN, VERSION, AUTHOR)
    RegisterHam(Ham_Spawn, "player", "raty", 1);
    
    register_dictionary("rsf.txt")
    
    pcvar_rate = register_cvar("rsf_rate", "25000")
    pcvar_cmdbackup = register_cvar("rsf_cmdbackup", "2")
    pcvar_cmdrate = register_cvar("rsf_cmdrate", "101")
    pcvar_updaterate = register_cvar("rsf_updaterate", "101")
    pcvar_interp = register_cvar("rsf_interp", "0.01")
    
    pcvar_hud_show = register_cvar("rsf_hud_show", "1")
    pcvar_hud_showtype = register_cvar("rsf_hud_showtype", "0")
    pcvar_hud_time = register_cvar("rsf_hud_time", "120.0")
    
    hudhandle = CreateHudSyncObj();
}

public plugin_cfg(){
    new cfgDir[64]
    get_configsdir(cfgDir, 63)
    server_cmd("exec %s/rsf.cfg", cfgDir)
}

public raty(id){
    if(!is_user_connected(id)) return;
    
    client_cmd(id, "rate %d", get_pcvar_num(pcvar_rate))
    client_cmd(id, "cl_cmdbackup %d", get_pcvar_num(pcvar_cmdbackup))
    client_cmd(id, "cl_cmdrate %d", get_pcvar_num(pcvar_cmdrate))
    client_cmd(id, "cl_updaterate %d",get_pcvar_num(pcvar_updaterate))
    client_cmd(id, "ex_interp ^"%.2f^"", get_pcvar_float(pcvar_interp)+0.0001)
    
    if(get_pcvar_num(pcvar_hud_show) == 1) {
        new Float:ttime = get_pcvar_float(pcvar_hud_time);
        if(ttime > 0) {
            if(!task_exists(id)) set_task(ttime, "hudmsg", id, _, _, "b")
        }
        else {
            hudmsg(id);
        }
    }
}

public hudmsg(id){
    if(!is_user_connected(id)) {
        remove_task(id);
        return;
    }
    
    new htype = get_pcvar_num(pcvar_hud_showtype);
    if(htype != 1){
        set_hudmessage(255, 100, 10, 0.1, 0.7, 0, 6.0, 9.0, 0.0, 0.0, random_num(1,4))
        ShowSyncHudMsg(id, hudhandle, "%L", LANG_PLAYER, "RSF_INFO")
    }
    if(htype)
        ColorChat(id, GREEN, "%s ^x01%L", prefix, LANG_PLAYER, "RSF_INFO")
}

Coś takiego chyba się nada.


  • +
  • -
  • 1

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


#9 Filip1512

    Wszechmogący

  • Autor tematu
  • Power User

Reputacja: 137
Zaawansowany

  • Postów:641
  • Steam:steam
  • Imię:Filip
  • Lokalizacja:Poland
Offline

Napisano 08.07.2013 16:00

Dzięki wszystko działa i przy okazji kod jest teraz bardziej optymalny :)


sebul (08.07.2013 16:04):
I jeszcze jedno, w sumie ten warunek
if(ttime > 0)

można zamienić na
if(ttime > 10)

albo dać jeszcze większą liczbę, bo wyświetlać ten sam tekst częściej niż raz na 10 sekund nie ma najmniejszego sensu. Ty może będziesz o tym wiedział, ale ktoś inny może nie.

  • +
  • -
  • 0
Filip / `NN
Wymuszanie rate'ów co spawna - update v2.1!

#10 sebul

    Godlike

  • Przyjaciel

Reputacja: 2 035
Godlike

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

Napisano 08.07.2013 16:04

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