←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Problem z hudem i sprite'ami

  • +
  • -
SopeleQ1337 - zdjęcie SopeleQ1337 07.06.2017

Witam.
Mam pewien problem z hudem, ponieważ chciałbym aby wyświetlał się on podczas gry, czyli jak jesteśmy żywi, oraz jak umrzemy, czyli żebyśmy widzieli nick, rangę etc. innych osób. Pierwsza część działa, natomiast hud, który ma być wyświetlany po śmierci niestety nie działa. Wyskakują mi błędy w kompilacji i nie wiem jak je naprawić. 
Jakby ktoś mógł jeszcze tylko dodać ścieżki do sprite'ów, tzn. jeżeli ktoś ma range silver 1 w hudzie, to nad jego głową jest sprite silver1, itd. Wystarczy mi sprite dla jednej rangi, zresztą sobie poradzę.
Będę bardzo wdzięczny za wszelką pomoc!  ;)
Plugin w załączniku.

Załączone pliki

Odpowiedz

  • +
  • -
d0naciak - zdjęcie d0naciak 07.06.2017

Wywal to i sprawdź

 
public client_PreThink(id)
{
    if(!is_user_alive(id))
{
set_hudmessage(0, 64, 128, 0.01, 0.22)
ShowSyncHudMsg(id, sync, "^n| Forum: Frag-Armia.pl |^n| Nick: %s |^n| Ranga: %s |^n| Zabojstwa: %d |^n| K/D ratio: %0.2f% |^n| VIP: %s |", name , rangi[ranga[id]][1], stats[0], kdratio[id], get_user_flags(id) & VIP_FLAG ? "Tak" : "Nie")
}
}
Odpowiedz

  • +
  • -
SopeleQ1337 - zdjęcie SopeleQ1337 07.06.2017

Hud się wyświetla, ale co to ma za sens, skoro po przejściu na innego gracza mam cały czas swój. Powinno być tak, że przechodząc na innego gracza, widzimy jego rangę, nick, k/d ratio etc.

Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 08.06.2017

Aby rozwiązać ten problem musisz rozważyć 2 przypadki.
1. Gracz obserwujący żyje {chyba oksymoron xD} (wtedy widzi swoje statystyki) - to już posiadasz
2. Gracz obserwujący nie żyje ( wtedy widzi statystyki osoby obserwowanej - identyfikator pev(id, pev_iuser2) ) - to też, z tego co widzę posiadasz, lecz w błędnej formule.

W funkcji wyświetlającej hud musisz sprawdzić, czy gracz jest żywy i w zależności od tego, wyświetlać mu statystyki własne lub innego gracza.

Jednak cały problem tkwi w zmiennej 'id'. Zauważ, że sprytnie zmieniasz ją na początku funkcji na wspomnianą pev(id, pev_iuser2), lecz jak widzisz, pod koniec funkcji używasz tego samego, zmienionego 'id' do wyświetlania HUD'u. Wniosek? Gdy ty nie żyjesz i obserwujesz gracza, to napis zamiast Tobie, wyświetla się podwójnie temu właśnie graczowi ;)

Odseparuj zmienną 'id' do obliczeń, a może raczej ją sklonuj i modyfikuj, podczas gdy oryginalną zastosuj do wyświetlania HUD'a.
Odpowiedz

  • +
  • -
SopeleQ1337 - zdjęcie SopeleQ1337 08.06.2017

_McHappy, napisałeś to takim profesjonalnym językiem, że mnie (jako osobie nie tak bardzo zaawansowanej) jest cholernie trudno to zrozumieć :D
Jakbyś mógł pokazać mi, jak wykonać te czynności na podstawie mojego sma, byłbym Ci bardzo wdzięczny! ;) 
Ps. Oczywiście punkt reputacji przyznałem, ponieważ rozwiązanie napisałeś, ale ja sam nie wiem jak się do niego ustosunkować :c

Odpowiedz

  • +
  • -
Yellon - zdjęcie Yellon 14.06.2017

Trzymaj dodałem ci sprite i naprawiłem hud. Tylko zmień scieżki do sprite bo dałem przykładowe. I jak coś to nie testowałem ale raczej powinno być okej.

Załączone pliki

Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 14.06.2017

Ciało funkcji rank():

public rank(param[])
{
	static id, stats[8], body[8], iTarget;
	
	id = param[0]; //id obserwatora
	iTarget = ( is_user_alive(id) ? id : pev(id, pev_iuser2) ); //obserwator żyje? TAK: obliczenia dla obserwatora (czyli gracza). NIE: obliczenia dla obserwowanego gracza
	
	if(!iTarget) //jeżeli gracz nie  obserwuje nikogo (free cam itp) - dajemy spokój
		return PLUGIN_CONTINUE;
	
	get_user_stats(iTarget, stats, body)		
	
	static Float:kdratio[33]
	kdratio[iTarget] = float(stats[0]) / float(stats[1])

	if((kdratio[iTarget] >= liczby[ranga[iTarget]]) && (stats[0] >= rangi[ranga[iTarget]][0]) && ranga[iTarget] < limit)
		ranga[iTarget]++
		
	else if(kdratio[iTarget] < liczby[ranga[iTarget]] || stats[0] < rangi[ranga[iTarget]][0])
	{
		if(ranga[iTarget] > limit_min)
			ranga[iTarget]--
	}
		
	static name[33]
	get_user_name(iTarget,name,32)
	cvar = get_cvar_num("rangi_kolor")
	switch(cvar)
	{
		case 0:
		{
			set_hudmessage(255, 255, 255, 0.01, 0.22)
			ShowSyncHudMsg(id, sync, "[Nick: %s]^n[Ranga: %s]^n[Zabojstwa: %d/%d]^n[K/d ratio %0.2f%]", name , rangi[ranga[iTarget]][1], stats[0], rangi[ranga[iTarget]][0], kdratio[iTarget])
		}
		case 1:
		{
			set_hudmessage(255, 0, 0, 0.01, 0.22)
			ShowSyncHudMsg(id, sync, "[Nick: %s]^n[Ranga: %s]^n[Zabojstwa: %d/%d]^n[K/d ratio %0.2f%]", name , rangi[ranga[iTarget]][1], stats[0], rangi[ranga[iTarget]][0], kdratio[iTarget])
		}
		case 2:
		{
			set_hudmessage(0, 255, 0, 0.01, 0.22)
			ShowSyncHudMsg(id, sync, "[Nick: %s]^n[Ranga: %s]^n[Zabojstwa: %d/%d]^n[K/d ratio %0.2f%]", name , rangi[ranga[iTarget]][1], stats[0], rangi[ranga[iTarget]][0], kdratio[iTarget])	
		}
		case 3:
		{
			set_hudmessage(0, 64, 128, 0.01, 0.22)
			ShowSyncHudMsg(id, sync, "^n| Forum: Frag-Armia.pl |^n| Nick: %s |^n| Ranga: %s |^n| Zabojstwa: %d |^n| K/D ratio: %0.2f% |^n| VIP: %s |", name , rangi[ranga[iTarget]][1], stats[0], kdratio[iTarget], get_user_flags(iTarget) & VIP_FLAG ? "Tak" : "Nie")
		}
	}
	
	return PLUGIN_CONTINUE;
}

Poanalizuj, potestuj, popytaj etcetera...


Użytkownik _McHappy edytował ten post 14.06.2017 11:49
Odpowiedz

  • +
  • -
TWZ - zdjęcie TWZ 14.06.2017

@Yellon nadal rangi się tzw. buguja (zmieniają się)

Odpowiedz

  • +
  • -
_McHappy - zdjęcie _McHappy 14.06.2017

Ponieważ ten algorytm wyliczania rang jest kompletnie nieoptymalny oraz bezsensowny...
Ale to już temat na odrębny wątek.
Odpowiedz

  • +
  • -
Yellon - zdjęcie Yellon 14.06.2017

No ja skopiowałem to z tych twoich rang nawet nie zwracałem na to uwagi tylko zająłem się hudem i sprite
A tak ogólnie to jak one ci się dokładnie zmieniają ?

Sprawdz może to bd działać.

Załączone pliki


Użytkownik Yellon edytował ten post 14.06.2017 18:44
Odpowiedz

  • +
  • -
d0naciak - zdjęcie d0naciak 14.06.2017

To że plugin jest w cholerę nieoptymalny swoją drogą, ale nie działa m.in. dlatego że po 1. get_user_stats z tego co mi wiadomo nie zmienia na bieżąco fragów w rankingu, tylko co rundę jak nie lepiej (sam nie wiem dokładnie, raz próbowałem zmieniać wczytywać co zabójstwo i lipa). Druga sprawa to sprawdzanie czy awansował - nie klej się kupy, przeanalizuj dokładnie: 

 

@edit i **** w pizde strzelił, napisałem już chyba można to nazwać referatem pod [.code] co tutaj jest źle, a było po prostu o czym pisać, to mi się usunęło, poprawcie to w końcu xD

To co napisałem wyżej to tylko garstka błędów w tym pluginie, ale one pierwsze rzucają mi się w oczy.

@edit2 nawet ta wersja z while nie zadziała, to else działa tak: nie możesz awansować? spadek  :giggle:

if((kdratio[target] >= liczby[ranga[target]]) && (stats[0] >= rangi[ranga[target]][0]) && ranga[target] < limit)
ranga[target]++
 
else if(kdratio[target] < liczby[ranga[target]] || stats[0] < rangi[ranga[target]][0])
{
if(ranga[target] > limit_min)
ranga[target]--
}
Odpowiedz

  • +
  • -
SopeleQ1337 - zdjęcie SopeleQ1337 15.06.2017

Oke jakoś to ogarnę. Wszyscy dostają po plusie i można zamknąć temat :D

Odpowiedz