←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Natyw zwraca tylko 1 literę


Best Answer Robiin 09.08.2019 17:07

Te twoje kolizje nazw to szok. Teraz powinno być dobrze:
 
Spoiler
Go to the full post

  • +
  • -
Komiks007's Photo Komiks007 09.08.2019

Cześć, jak mówi tytuł, natyw który zrobiłem przez plik inc, zwraca tylko jedną literę w innym pluginie. Chciałbym, żeby zwracał trzy litery zamiast jednej.

 

Kod jest taki:

Natyw:

public _g_nazwa_gildi(plugin, params)
{
	new id = get_param(1);
	static aData[ GangInfo ]

	if(g_iGang[id] > -1)
	{
		ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
		return aData[GangName]
	}

	return 0;
}

w inc:

/*
*	Zwraca litery nazwy gangu
*
*	id - indetyfikator klienta
*
*/
native g_nazwa_gildi(id)

i w pluginie, w którym chce żeby mi to zwróciło:

new szText[50 char]
new nazwa_gildi = g_nazwa_gildi(id)
formatex(szText, charsmax(szText), "%s", nazwa_gildi)
szPrefix = szText

Na czacie zwraca tylko literę 't' ponieważ gildia nazywa się 'test'

Mógłby ktoś pomóc? Dzięki.

Quote

  • +
  • -
DarkGL's Photo DarkGL 09.08.2019

https://amxx.pl/topic/20034-natywy/

Poczytaj o arraych teraz zwraca Ci jedną literą ponieważ tak naprawde zwracasz jedną wartość int :)
Quote

  • +
  • -
Robiin's Photo Robiin 09.08.2019

W amxxie nie możesz zwrócić więcej niż jednej wartości. Dlatego właśnie tworzymy osobną zmienną i robimy get_user_name(indeks, zmienna, charsmax(zmienna)) - przypisujemy nick gracza do 'zmienna' funkcją get_user_name i w ten sposób nie musimy nic zwracać.

 

Zamiast

return aData[GangName]

daj

set_string(2, aData[GangName], 32);

A w argumentach natywu zamiast

g_nazwa_gildi(id)

daj

g_nazwa_gildi(id, output[], outputSize);
Quote

  • +
  • -
Komiks007's Photo Komiks007 09.08.2019

 

W amxxie nie możesz zwrócić więcej niż jednej wartości. Dlatego właśnie tworzymy osobną zmienną i robimy get_user_name(indeks, zmienna, charsmax(zmienna)) - przypisujemy nick gracza do 'zmienna' funkcją get_user_name i w ten sposób nie musimy nic zwracać.

 

Zamiast

return aData[GangName]

daj

set_string(2, aData[GangName], 32);

A w argumentach natywu zamiast

g_nazwa_gildi(id)

daj

g_nazwa_gildi(id, output[], outputSize);

Coś źle robię najwidoczniej...

z 'test', wypisuje "est"

g_nazwa_gildi(id, "", 1)
Quote

  • +
  • -
Robiin's Photo Robiin 09.08.2019

Pokaż cały kod, nie dawaj nam okruchów.

Quote

  • +
  • -
Komiks007's Photo Komiks007 09.08.2019

Pokaż cały kod, nie dawaj nam okruchów.

public handleSayText(msgId,msgDest,msgEnt){	

	if(!is_user_connected(id))	  return PLUGIN_CONTINUE;
	
   	new szTmp[192], szTmp2[192];
   	//new szPrefix[64]
	get_msg_arg_string(2, szTmp, charsmax(szTmp));

	new szText[64 char]
	new nazwa_gildi = g_nazwa_gildi(id, "", 1)
	formatex(szText, sizeof(szText), "^x03|%s|", nazwa_gildi)
	
	if(!equal(szTmp,"#Cstrike_Chat_All")){
		add(szTmp2, charsmax(szTmp2), "^x01");
		add(szTmp2, charsmax(szTmp2), szText);
		//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));
		set_msg_arg_string(4, "");
	
		add(szTmp2, charsmax(szTmp2), "^x01");
		add(szTmp2, charsmax(szTmp2), szText);
		//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;
}

Nawet nie wyświetlają się '|' oraz kolor do tego. Wyświetla się samo 'est' przed nickiem.

Prefix działał normalnie.

Quote

  • +
  • -
Robiin's Photo Robiin 09.08.2019

Nie mam pojęcia skąd ten kod wytrzasnąłeś i dalczego był napisany w ten sposób, ale był zły.
 

Spoiler


Edited by aSiorr, 09.08.2019 16:26.
Quote

  • +
  • -
Komiks007's Photo Komiks007 09.08.2019

Nie mam pojęcia skąd ten kod wytrzasnąłeś i dalczego był napisany w ten sposób, ale był zły.
 

Spoiler

Zły? Z jakiegoś tematu to wytrzasnąłem żeby naprawić błąd s1: s2

 

No dobra, teraz w ogóle nie wyświetla nazwy gildii.

'|| Nick: Wiadomość'

Quote

  • +
  • -
Robiin's Photo Robiin 09.08.2019

A jak wygląda natyw?

Quote

  • +
  • -
Komiks007's Photo Komiks007 09.08.2019

A jak wygląda natyw?

Tak jak podałeś w wcześniejszym poście,

native g_nazwa_gildi(id, output[], outputSize);
	public _g_nazwa_gildi(plugin, params)
	{
		new id = get_param(1);
		static aData[ GangInfo ]

		if(g_iGang[id] > -1)
		{
			ArrayGetArray( g_aGangs, g_iGang[ id ], aData );
			set_string(2, aData[GangName], 32);
		}
	}
Quote

  • +
  • -
Robiin's Photo Robiin 09.08.2019

Spoiler

Quote

  • +
  • -
Komiks007's Photo Komiks007 09.08.2019

Spoiler

Coś jest nie tak,

teraz podwaja te '|'

|||| nick :  uwaga test
Quote

  • +
  • -
Best Answer Robiin's Photo Robiin 09.08.2019

Te twoje kolizje nazw to szok. Teraz powinno być dobrze:
 
Spoiler
Quote

  • +
  • -
Komiks007's Photo Komiks007 09.08.2019

Te twoje kolizje nazw to szok. Teraz powinno być dobrze:
 

Spoiler

 

Uwaga... działa!

Dzięki aSiorr za pomoc ;) Nagrodzę tym co mogę. Jeszcze raz dziękuje.

Quote