Skocz do zawartości
szogun

[ROZWIĄZANE] Rozdawane punkty kento rankme

Rekomendowane odpowiedzi

To znów ja, mam teraz problem z kolejnym pluginem którym jest to kento rankme, mianowicie chodzi o rozdawane punkty. Pod koniec meczu cała drużyna za wygrany mecz powinna dostać np. 100 pkt lecz zamiast tego ma je odejmowane, i na odwrót jak dana drużyna przegra ma dodawane pkt a nie zabierane. I jeszcze jeden problem jest z zapisem wygranych meczy sytuacja jest taka sama.

Link do pluginu - https://github.com/rogeraabbccdd/Kento-Rankme/blob/master/gameserver/scripting/kento_rankme.sp
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

 

Najprawdopodobniej problem występuje gdzieś w public Action:Event_WinPanelMatch

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak masz ustawione cvary odpowiadające za punkty za przegraną/wygraną?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Spoiler

public Action:Event_WinPanelMatch(Handle:event, const String:name[], bool:dontBroadcast) {
	if(CS_GetTeamScore(CT) > CS_GetTeamScore(TR))
	{
		for(new i=1;i<=MaxClients;i++)
		{
			if(IsClientInGame(i))
			{
				if(!hidechat[i])
				{
					CPrintToChat(i, "%T", "CT_Win", i, g_PointsMatchWin);
					CPrintToChat(i, "%T", "TR_Lose", i, g_PointsMatchLose);
				}
				
				if(GetClientTeam(i) == TR)
				{
					g_aStats[i][MATCH_LOSE]++;
					g_aStats[i][SCORE] -= g_PointsMatchLose;
				}
				else if (GetClientTeam(i) == CT)
				{
					g_aStats[i][MATCH_WIN]++;
					g_aStats[i][SCORE] += g_PointsMatchWin;
				}
			}
		}
	}
	
	else if(CS_GetTeamScore(CT) == CS_GetTeamScore(TR))
	{
		for(new i=1;i<=MaxClients;i++)
		{
			if (IsClientInGame(i) && (GetClientTeam(i) == TR || GetClientTeam(i) == CT))
			{
				g_aStats[i][MATCH_DRAW]++;
				g_aStats[i][SCORE] += g_PointsMatchDraw;
				
				if(!hidechat[i])	CPrintToChat(i, "%T", "Draw", i, g_PointsMatchDraw);
			}
		}
	}
	
	else if(CS_GetTeamScore(CT) < CS_GetTeamScore(TR))
	{
		for(new i=1;i<=MaxClients;i++)
		{
			if(IsClientInGame(i))
			{
				if(!hidechat[i])
				{
					CPrintToChat(i, "%s %T", MSG, "TR_Win", i, g_PointsMatchWin);
					CPrintToChat(i, "%s %T", MSG, "CT_Lose", i, g_PointsMatchLose);
				}
				
				if(GetClientTeam(i) == TR)
				{
					g_aStats[i][MATCH_LOSE]++;
					g_aStats[i][SCORE] -= g_PointsMatchLose;
				}
				else if (GetClientTeam(i) == CT)
				{
					g_aStats[i][MATCH_WIN]++;
					g_aStats[i][SCORE] += g_PointsMatchWin;
				}
			}
		}
	}
}

 

Jak widać w kodzie nieważne czy TT wygra czy CT wygra rezultat jest taki sam. Wystarczy w linii 2692 zamienić TR na CT a w linii 2697 zamienić CT na TR.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

szogun to jest jakiś łapacz baboli w pluginach innych osób xD

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeszcze nie sprawdzałem, poczekaj chwilę jak coś to zgłoszę wątek ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tak nie do końca rozwiązane bo teraz jak dojdzie do zmiany stron drużyn problem powraca

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie do końca rozumiem, czy po wprowadzeniu poprawek, skompilowaniu pluginu, wgraniu go na serwer i restarcie serwera problem występuje tylko gdy drużyny zamienią się miejscami?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
31 minut temu, Vasto_Lorde napisał:

Nie do końca rozumiem, czy po wprowadzeniu poprawek, skompilowaniu pluginu, wgraniu go na serwer i restarcie serwera problem występuje tylko gdy drużyny zamienią się miejscami?

Dokladnie tak

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ktoś jakiś pomysł jak to ogarnąć bo moje pomysły zakończyły nie powodzeniem

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Czyli rozumiem, że po rundzie w której zaszła zmiana stron plugin działa poprawnie?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach


Czekaj. Plugin działa prawidłowo w momencie tylko gdy drużyn nie zamieniają się miejscami. Moze taki mini schemat

TT jak pozostanie w TT za wygrany czy przegrany mecz ma poprawnie dodane punkty i statystyki wygranych meczy.

TT jak zostanie przeniesione do CT po upływie 15 rund i wygra mecz ma odejmowane np.30pkt oraz dostaje ten mecz jako przegrany

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nadal nie rozumiem mechaniki zmiany drużyn. Jeśli zmiana zachodzi tylko i wyłącznie na ostatniej rundzie może warto by wyłączyć zmianę drużyn w ogóle. Można też zapisać w połowie meczu / na początku kto jest w jakiej drużynie i na tej podstawie przydzielać punkty.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

To już raczej nie dla mnie, ale nie wiem czy tak łatwo będzie gdy teambalance przeniesie kogoś innego do innego teamu

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jest to standardowe ustawienie z gry , wymuszano komendą.

Edytowane przez szogun

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

mp_halftime "1"

Tak to zamienia gdy to jest wyłączone pkt są przyznawane prawidłowo

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Spoiler

 


public Action:Event_WinPanelMatch(Handle:event, const String:name[], bool:dontBroadcast) 
{
	ConVar changeTeam = FindConVar("mp_halftime");

	if(CS_GetTeamScore(CS_TEAM_CT) > CS_GetTeamScore(CS_TEAM_T))
	{
		for(new i=1;i<=MaxClients;i++)
		{
			if(IsClientInGame(i))
			{
				if(!hidechat[i])
				{
					CPrintToChat(i, "%T", "CT_Win", i, g_PointsMatchWin);
					CPrintToChat(i, "%T", "TR_Lose", i, g_PointsMatchLose);
				}
				
				if(GetConVarInt(changeTeam) == 1 )
				{
					if(GetClientTeam(i) == CS_TEAM_CT)
					{
						g_aStats[i][MATCH_LOSE]++;
						g_aStats[i][SCORE] -= g_PointsMatchLose;
					}
					else if (GetClientTeam(i) == CS_TEAM_T)
					{
						g_aStats[i][MATCH_WIN]++;
						g_aStats[i][SCORE] += g_PointsMatchWin;
					}	

				}
				else
				{
					if(GetClientTeam(i) == CS_TEAM_T)
					{
						g_aStats[i][MATCH_LOSE]++;
						g_aStats[i][SCORE] -= g_PointsMatchLose;
					}
					else if (GetClientTeam(i) == CS_TEAM_CT)
					{
						g_aStats[i][MATCH_WIN]++;
						g_aStats[i][SCORE] += g_PointsMatchWin;
					}		
				}
				
			}
		}
	}
	
	else if(CS_GetTeamScore(CS_TEAM_CT) == CS_GetTeamScore(CS_TEAM_T))
	{
		for(new i=1;i<=MaxClients;i++)
		{
			if (IsClientInGame(i) && (GetClientTeam(i) == CS_TEAM_T || GetClientTeam(i) == CS_TEAM_CT))
			{
				g_aStats[i][MATCH_DRAW]++;
				g_aStats[i][SCORE] += g_PointsMatchDraw;
				
				if(!hidechat[i])	CPrintToChat(i, "%T", "Draw", i, g_PointsMatchDraw);
			}
		}
	}
	
	else 
	{
		for(new i=1;i<=MaxClients;i++)
		{
			if(IsClientInGame(i))
			{
				if(!hidechat[i])
				{
					CPrintToChat(i, "%s %T", MSG, "TR_Win", i, g_PointsMatchWin);
					CPrintToChat(i, "%s %T", MSG, "CT_Lose", i, g_PointsMatchLose);
				}
				
				if(GetConVarInt(changeTeam) == 1 )
				{
					if(GetClientTeam(i) == CS_TEAM_T)
					{
						g_aStats[i][MATCH_LOSE]++;
						g_aStats[i][SCORE] -= g_PointsMatchLose;
					}
					else if (GetClientTeam(i) == CS_TEAM_CT)
					{
						g_aStats[i][MATCH_WIN]++;
						g_aStats[i][SCORE] += g_PointsMatchWin;
					}		

				}
				else
				{
					if(GetClientTeam(i) == CS_TEAM_CT)
					{
						g_aStats[i][MATCH_LOSE]++;
						g_aStats[i][SCORE] -= g_PointsMatchLose;
					}
					else if (GetClientTeam(i) == CS_TEAM_T)
					{
						g_aStats[i][MATCH_WIN]++;
						g_aStats[i][SCORE] += g_PointsMatchWin;
					}		
				}
				
			}
		}
	}
}

 

 

srawdz to xD

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ktoś coś jakiś pomył, problem zgłoszony u autora ponad 2/3 miesiace temu i zero odzewu

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie widzę prostszych i bardziej optymalnych rozwiązań niż te:
A) Wyłącz plugin na dodawanie statystyk na koniec meczu/w połowie (bo plugin jest chyba skierowany do serwerów gdzie nie ma zmiany drużyn)
B) Wyłącz/zablokuj zmianę drużyn (i plugin do balansu drużyn)

Jedyna opcja która wpadła mi do głowy a jest ogólnie według mnie nieopłacalna do zrobienia to:
Wpisanie w to wykrywania kto w jakim czasie zmienił drużynę. Jeśli gracz zagrał 8 rund w CT i przeszedł do TT i zagrał tam 7 rund, to wtedy będzie mu dana wygrana jeśli wygra drużyna TT. Jest to natomiast łatwy do nadużycia system, gdyż wtedy gracz po zmianie drużyn może ginąc specjalnie w nowej drużynie by mieć łatwiejszą wygraną

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Obecnie mam już blokadę zmiany drużyn jak oraz autojoin, więc tutaj zbytnio tego nie przeskoczą, wyłączenie autobalansu to taki średni pomysł gdy jest blokada zmiany teamu.

 

19 godzin temu, Vasto_Lorde napisał:

 

Jedyna opcja która wpadła mi do głowy a jest ogólnie według mnie nieopłacalna do zrobienia to:
Wpisanie w to wykrywania kto w jakim czasie zmienił drużynę. Jeśli gracz zagrał 8 rund w CT i przeszedł do TT i zagrał tam 7 rund, to wtedy będzie mu dana wygrana jeśli wygra drużyna TT. Jest to natomiast łatwy do nadużycia system, gdyż wtedy gracz po zmianie drużyn może ginąc specjalnie w nowej drużynie by mieć łatwiejszą wygraną 

 

To już przerasta moją głowę nawet nie wiem jak do tergo się zabrać

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Watek do zamkniecia, autor w koncu po pol roku wydal poprawke

 

Fixed match end stats counting and points.

Przez MAGNET,

Nareszcie :D Wątek zamknięty

Przez Vasto_Lorde,

Załączam link do naprawionego pluginu na wszelki wypadek https://github.com/rogeraabbccdd/Kento-Rankme

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

×
×
  • Dodaj nową pozycję...