←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Prefixy po aktualizacji

  • +
  • -
Ogen Dogen - zdjęcie Ogen Dogen 11.07.2017

Witam. Jak zapewne wszyscy zauważyli, po wczorajszej aktualizacji nie działają poprawnie prefixy przed nickami. Niezależnie od wersji serwera.

Do tej pory korzystałem z kodu DarkGL https://amxx.pl/topi...-przed-nickiem/

Wiadomo już może jak rozwiązać problem ? :)

Odpowiedz

  • +
  • -
tytusek - zdjęcie tytusek 11.07.2017

ruskie jakieś łatki w własnym colorchacie robili wiec pewnie tam problem :V

Odpowiedz

  • +
  • -
NEQU# - zdjęcie NEQU# 11.07.2017

Działać działa po wywaleniu 1 rzeczy, ale jest problem z kolorami. Próbowałem na różne sposoby, jednak za każdym razem nick pozostaje w kolorze poprzedniej informacji(wyjątek pisząć na say_team, wtedy wszystko działa tak jak powinno)

 

edit. Kiedy gracz jest martwy też wszystko działa.


Użytkownik NEQU# edytował ten post 11.07.2017 18:29
Odpowiedz

  • +
  • -
Ogen Dogen - zdjęcie Ogen Dogen 11.07.2017

ruskie jakieś łatki w własnym colorchacie robili wiec pewnie tam problem :V

Z tego co widzę to całkowicie ignoruje ^x01 (kolor żółty)

Odpowiedz

  • +
  • -
Toldi - zdjęcie Toldi 11.07.2017

Nie wiem czy to też przez te aktualizację ale amxx na New Game przestał mi działać chociaż przed aktualizacją działał bezbłędnie. Nawet wgranie go na nowo nie pomogło (wcześniej zawsze pomagało). Tak w ogóle ludzie ode mnie z forum skarżą się na ten sam problem że zamiast nicku mają "s1" a zamiast wiadomości "s2".

Odpowiedz

  • +
  • -
NEQU# - zdjęcie NEQU# 11.07.2017

 

ruskie jakieś łatki w własnym colorchacie robili wiec pewnie tam problem :V

Z tego co widzę to całkowicie ignoruje ^x01 (kolor żółty)

 

Nie do końca.

 

Mi w ten sposób działa tak jak powinien. Mały wyjątek kolor nicku.. działa jedynie gdy jesteś martwy lub piszesz na say_team może ktoś coś wymyśli.

public handleSayText(msgId,msgDest,msgEnt){
	new id = get_msg_arg_int(1);
	
	if(!is_user_connected(id))      return PLUGIN_CONTINUE;
	
	new szTmp[256],szTmp2[256];
	get_msg_arg_string(2,szTmp, charsmax( szTmp ) )
	
	new szPrefix[64]
	
	if(zp_class_nemesis_get(id))
		formatex(szPrefix,charsmax( szPrefix ),"^x04[Nemesis - %d]^x01",PlayerLevel[id])
	else if(zp_class_assassin_get(id))
		formatex(szPrefix,charsmax( szPrefix ),"^x04[Assassin - %d]^x01",PlayerLevel[id])
	else if(zp_class_survivor_get(id))
		formatex(szPrefix,charsmax( szPrefix ),"^x04[Survivor - %d]^x01",PlayerLevel[id])
	else if(zp_class_sniper_get(id))
		formatex(szPrefix,charsmax( szPrefix ),"^x04[Sniper - %d]^x01",PlayerLevel[id])
	else if(zp_core_is_zombie(id))
		formatex(szPrefix,charsmax( szPrefix ),"^x04[Zombie - %d]^x01",PlayerLevel[id])
	else
		formatex(szPrefix,charsmax( szPrefix ),"^x04[Czlowiek - %d]^x01",PlayerLevel[id])
	
	
	add(szTmp2,charsmax(szTmp2),szPrefix);
	add(szTmp2,charsmax(szTmp2),szTmp);
	
	set_msg_arg_string(2,szTmp2);
	
	return PLUGIN_CONTINUE;
}


Użytkownik NEQU# edytował ten post 11.07.2017 19:04
Odpowiedz

  • +
  • -
Ogen Dogen - zdjęcie Ogen Dogen 11.07.2017

 

 

ruskie jakieś łatki w własnym colorchacie robili wiec pewnie tam problem :V

Z tego co widzę to całkowicie ignoruje ^x01 (kolor żółty)

 

Nie do końca.

 

Mi w ten sposób działa tak jak powinien. Mały wyjątek kolor nicku.. działa jedynie gdy jesteś martwy lub piszesz na say_team może ktoś coś wymyśli.

public handleSayText(msgId,msgDest,msgEnt){
	new id = get_msg_arg_int(1);
	
	if(!is_user_connected(id))      return PLUGIN_CONTINUE;
	
	new szTmp[256],szTmp2[256];
	get_msg_arg_string(2,szTmp, charsmax( szTmp ) )
	
	new szPrefix[64]
	
	if(zp_class_nemesis_get(id))
		formatex(szPrefix,charsmax( szPrefix ),"^x04[Nemesis - %d]^x01",PlayerLevel[id])
	else if(zp_class_assassin_get(id))
		formatex(szPrefix,charsmax( szPrefix ),"^x04[Assassin - %d]^x01",PlayerLevel[id])
	else if(zp_class_survivor_get(id))
		formatex(szPrefix,charsmax( szPrefix ),"^x04[Survivor - %d]^x01",PlayerLevel[id])
	else if(zp_class_sniper_get(id))
		formatex(szPrefix,charsmax( szPrefix ),"^x04[Sniper - %d]^x01",PlayerLevel[id])
	else if(zp_core_is_zombie(id))
		formatex(szPrefix,charsmax( szPrefix ),"^x04[Zombie - %d]^x01",PlayerLevel[id])
	else
		formatex(szPrefix,charsmax( szPrefix ),"^x04[Czlowiek - %d]^x01",PlayerLevel[id])
	
	
	add(szTmp2,charsmax(szTmp2),szPrefix);
	add(szTmp2,charsmax(szTmp2),szTmp);
	
	set_msg_arg_string(2,szTmp2);
	
	return PLUGIN_CONTINUE;
}

 

Na rozwiązanie ad hoc się nada ;)

 

//edit Jednak problem pojawia się gdy użyjemy trzeciego koloru w stringu, a nie konkretnie żółtego.

Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 11.07.2017

Nie działa i raczej nie będzie działało ( przy zastosowaniu podobnej metody ).

Rozchodzi się o problem pobrania 'podstringów' ze stringa, którym jest wiadomość.

 

Zaczerpnięta z Internetu lista wiadomości na czacie powinna trochę rozjaśnić o czym mowa:

"Game_radio"               " %s1 (RADIO): %s2"
"Cstrike_Chat_CT"            " (Counter-Terrorist) %s1 :  %s2"
"Cstrike_Chat_T"            " (Terrorist) %s1 :  %s2"
"Cstrike_Chat_CT_Dead"            " *DEAD*(Counter-Terrorist) %s1 :  %s2"
"Cstrike_Chat_T_Dead"            " *DEAD*(Terrorist) %s1 :  %s2"
"Cstrike_Chat_Spec"            " (Spectator) %s1 :  %s2"
"Cstrike_Chat_All"            " %s1 :  %s2"
"Cstrike_Chat_AllDead"            " *DEAD* %s1 :  %s2"
"Cstrike_Chat_AllSpec"            " *SPEC* %s1 :  %s2"
"Cstrike_Name_Change"            " * %s1 changed name to %s2"

Jak widać, powyżej jest dosyć znajoma forma formatu stringa zawarta w pluginie Dark'a.

Problem dotyczy znaków formatu '%s1' i '%s2' co oznacza kolejno nick oraz treść wiadomości - tego się już chyba wszyscy domyślili.

 

Zastanawiam się, czy cała sprawa jest związana z tą częścią update (żródło http://steamcommunit...1455081754809):

Fixed crash when entering certain malformed strings into the game console. Thanks to Marshal Webb from BackConnect, Inc for reporting this.

Niby say korzysta z messagemode, ale nijak się ma do wyświetlania wiadomości...

 

Możnaby symulować ColorChatem wiadomości od graczy, jednak jeżeli ten też nie działa to na kolorek na czacie sobie trochę poczekamy...

Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 11.07.2017

Znaki specjalne są kompletnie ignorowane czy jakoś inaczej to działa ? Nie mam obecnie możliwości przetestować tego nigdzie

Odpowiedz

  • +
  • -
Ogen Dogen - zdjęcie Ogen Dogen 11.07.2017

Znaki specjalne są kompletnie ignorowane czy jakoś inaczej to działa ? Nie mam obecnie możliwości przetestować tego nigdzie

Z tego co teraz zaobserwowałem to tak:

- 2 kolory OK

- Przy 3 kolorach ignoruje ostatni kolor lub żółty (???) np.

 

^x04 ^x01 ^x04 daje cały tekst zielony

^x01 ^x04 ^x02 daje żółty i dalej tylko zielony

Odpowiedz

  • +
  • -
Informatyk.exe - zdjęcie Informatyk.exe 11.07.2017

Nie sprawdzałem dokładnie ale po usunięciu " ^x01" i pozostawieniu jedynie " %s1 : %s2"  w przypadku vipa wyświetla mi:

"[VIP] %s1 : %s2" .

public handleSayText(msgId,msgDest,msgEnt){
	new id = get_msg_arg_int(1);
	
	if(is_user_connected(id) && g_Vip[id]){
		new szTmp[256],szTmp2[256];
		get_msg_arg_string(2,szTmp, charsmax(szTmp))
		
		new szPrefix[64] = "[VIP]";
		
		if(!equal(szTmp,"#Cstrike_Chat_All")){
			add(szTmp2,charsmax(szTmp2),szPrefix);
			add(szTmp2,charsmax(szTmp2)," ");
			add(szTmp2,charsmax(szTmp2),szTmp);
		}
		else{
			add(szTmp2,charsmax(szTmp2),szPrefix);
			add(szTmp2,charsmax(szTmp2),"%s1 :  %s2");
		}
		set_msg_arg_string(2,szTmp2);
	}
	return PLUGIN_CONTINUE;
}
Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 11.07.2017

Znaki specjalne są kompletnie ignorowane czy jakoś inaczej to działa ?


Dokładnie (przykład kolegi wyżej).
Wschodni przyjaciele rozwiązują problem poprzez formatowanie wiadomości i wyswietlanie jej ColorChatem (ręcznie dobierając odbiorców itp).
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 12.07.2017

Argumenty są po prostu ignorowane napewno jest to związane z updatem czyżby istniał jakiś exploit wykorzystujący argumenty message i formatowania stringu o którym nie było wiadomo ;) albo zmienili to tylko o tak.

 

Metoda ColorChat może nie współgrać z niektórymi plugami przy metodzie modyfikowania message plugin był transparentny dla innych pluginów.

 

Pliki w kliencie steam również nie wyglądają na modyfikowane

"Game_radio"					"%s1 (RADIO): %s2"
"Cstrike_Chat_CT"				"(Counter-Terrorist) %s1 :  %s2"
"Cstrike_Chat_T"				"(Terrorist) %s1 :  %s2"
"Cstrike_Chat_CT_Dead"				"*DEAD*(Counter-Terrorist) %s1 :  %s2"
"Cstrike_Chat_T_Dead"				"*DEAD*(Terrorist) %s1 :  %s2"
"Cstrike_Chat_Spec"				"(Spectator) %s1 :  %s2"
"Cstrike_Chat_All"				"%s1 :  %s2"
"Cstrike_Chat_AllDead"				"*DEAD* %s1 :  %s2"
"Cstrike_Chat_AllSpec"				"*SPEC* %s1 :  %s2"
"Cstrike_Name_Change"				"* %s1 changed name to %s2"

PS. Nie spodziewałem się ze po 6 lat od publikacji trzeba będzie aktualizować kod :D

Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 12.07.2017

Szybkim rozwiązaniem będzie napisanie API chatu przechwytującego wiadomość i wywołującego forward z jej treścią. Dzięki temu można uzyskać pełną kompatybilność z innymi pluginami (po drobnych modyfikacjach). Ostatecznie, zmieniona w forwardzie wiadomość mogłaby być rozesłana poprzez ColorChat do odpowiednich graczy...
Odpowiedz

  • +
  • -
Informatyk.exe - zdjęcie Informatyk.exe 12.07.2017

Więc jak mi udało się osiągnąć sukces częściowo. 

Zastosowałem taki kod do SVIP'a:

 

public handleSayText(msgId,msgDest,msgEnt){
new id = get_msg_arg_int(1);


if(!is_user_connected(id))      return PLUGIN_CONTINUE;


new szTmp[256],szTmp2[256];
get_msg_arg_string(2,szTmp, charsmax( szTmp ) )


new szPrefix[64]


if(is_user_connected(id) && g_Vip[id])
formatex(szPrefix,charsmax( szPrefix ),"^x04[SVIP]^x03")
else
formatex(szPrefix,charsmax( szPrefix ),"^x04[GRACZ]^x03")

add(szTmp2,charsmax(szTmp2),szPrefix);
add(szTmp2,charsmax(szTmp2),szTmp);


set_msg_arg_string(2,szTmp2);


return PLUGIN_CONTINUE;
}

Minus był taki że nick i treść wiadomości miałem w kolorze teamu. 

Wiec odpaliłem cstrike_english i edytowałem go tak:

"Cstrike_Chat_All"				"[STX]%s1[SOH] :  %s2"

I wszystko śmiga, nie wiem jedynie jak to wymusić u innych graczy. 

 

Edit:.

Wstawiam screena jak ten plik wygląda dokładnie u mnie:

jjXvECH.png

 


Użytkownik Informatyk.exe edytował ten post 12.07.2017 09:59
Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 12.07.2017

Edycja plików graczy nie wchodzi w grę.
 

Odpowiedz

  • +
  • -
Mavxvx - zdjęcie Mavxvx 12.07.2017

Napisze ktoś jak przerobić te prefixy żeby wszystko działało poprawnie?

http://darkgl.pl/201...w-say-cod-nowy/

 

również chcę się zapytać czy generator vipa amxx posiada już załatany ten błąd z prefix ?

Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 12.07.2017

@UP

Jeżeli można - niech ktoś podmieni kod wyżej i usunie ten post.

Poprawka na przekroczenie limitu 191 znaków:

public handleSayText(msgId,msgDest,msgEnt){	

    new id = get_msg_arg_int(1);
    
    if(!is_user_connected(id))      return PLUGIN_CONTINUE;
    
    new szTmp[192], szTmp2[192];
    get_msg_arg_string(2, szTmp, charsmax(szTmp));
    
    new szPrefix[64] = "^x04[Test]";
    
    if(!equal(szTmp,"#Cstrike_Chat_All")){
        add(szTmp2, charsmax(szTmp2), "^x01");
        add(szTmp2, charsmax(szTmp2), szPrefix);
        add(szTmp2, charsmax(szTmp2), " ");
        add(szTmp2, charsmax(szTmp2), szTmp);
    }
    else{
        new szPlayerName[64];
        get_user_name(id, szPlayerName, charsmax(szPlayerName));
        
        get_msg_arg_string(4, szTmp, charsmax(szTmp)); //4. argument zawiera treść wysłanej wiadomości
        set_msg_arg_string(4, ""); //Musimy go wyzerować, gdyż gra wykorzysta wiadomość podwójnie co może skutkować crash'em 191+ znaków.
    
        add(szTmp2, charsmax(szTmp2), "^x01");
        add(szTmp2, charsmax(szTmp2), szPrefix);
        add(szTmp2, charsmax(szTmp2), "^x03 ");
        add(szTmp2, charsmax(szTmp2), szPlayerName);
        add(szTmp2, charsmax(szTmp2), "^x01 :  ");
        add(szTmp2, charsmax(szTmp2), szTmp)
    }
    
    set_msg_arg_string(2, szTmp2);
    
    return PLUGIN_CONTINUE;
}

Użytkownik _McHappy edytował ten post 12.07.2017 14:29
Odpowiedz

  • +
  • -
Mavxvx - zdjęcie Mavxvx 12.07.2017

Kolego wyżej spróbowałbyś przerobić ten plugin? 

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <codmod>

#define PLUGIN "Prefixy COD"
#define VERSION "1.0"
#define AUTHOR "DarkGL"

new pCvarPrefixy;

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_message(get_user_msgid("SayText"),"handleSayText");
	
	pCvarPrefixy	=	register_cvar("cod_prefix","3");
}

public handleSayText(msgId,msgDest,msgEnt){
	new id = get_msg_arg_int(1);
	
	if(!is_user_connected(id))      return PLUGIN_CONTINUE;
	
	new szTmp[256],szTmp2[256],szTmp3[256];
	get_msg_arg_string(2,szTmp, charsmax( szTmp ) )
	
	new szPrefix[64]
	
	switch(get_pcvar_num(pCvarPrefixy)){
		case 1:{
			cod_get_class_name(cod_get_user_class(id),szTmp3,charsmax( szTmp3 ))
			formatex(szPrefix,charsmax( szPrefix ),"^x04[%s]",szTmp3);
		}
		case 2:{
			formatex(szPrefix,charsmax( szPrefix ),"^x04[%d]",cod_get_user_level(id));
		}
		case 3:{
			cod_get_class_name(cod_get_user_class(id),szTmp3,charsmax( szTmp3 ))
			formatex(szPrefix,charsmax( szPrefix ),"^x04[%s - %d]",szTmp3,cod_get_user_level(id));
		}
	}
	
	if(!equal(szTmp,"#Cstrike_Chat_All")){
		add(szTmp2,charsmax(szTmp2),szPrefix);
		add(szTmp2,charsmax(szTmp2)," ");
		add(szTmp2,charsmax(szTmp2),szTmp);
	}
	else{
		add(szTmp2,charsmax(szTmp2),szPrefix);
		add(szTmp2,charsmax(szTmp2),"^x03 %s1^x01 :  %s2");
	}
	
	set_msg_arg_string(2,szTmp2);
	
	return PLUGIN_CONTINUE;
}

Bardzo potrzebuję a nie potrafię

Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 12.07.2017

Jeżeli powyższy kod Ci działa - podmień na tę funkcję:

Spoiler

Użytkownik _McHappy edytował ten post 12.07.2017 14:37
Odpowiedz