Skocz do zawartości
  • Chmurka
  • Boróweczka
  • Jabłuszko
  • Limonka
  • Czekoladka
  • Węgielek
Zaloguj się, aby obserwować  
Brum Brum

[CS:GO] Kento rankme Rangi

Polecane posty

Opis: Dodaje rangi csowe pod tabelę od danej ilości pkt.

Kod:

Spoiler

#include <sdktools>
#include <sdkhooks>
#include <cstrike>
#include <clientprefs>
#include <kento_rankme/rankme>

#define MAX_RANKS 19

ConVar g_RankPoints[MAX_RANKS];
Handle g_rank;

char RanksName[][] = 
{
	"Unranked", 
	"Silver I", 
	"Silver II", 
	"Silver III", 
	"Silver IV", 
	"Silver Elite", 
	"Silver Elite Master", 
	"Gold Nova 1", 
	"Gold Nova 2", 
	"Gold Nova 3", 
	"Gold Nova Master", 
	"Master Guardian 1", 
	"Master Guardian 2", 
	"Master Guardian Elite", 
	"Distinguished Master Guardian", 
	"Legendary Eagle", 
	"Legendary Eagle Master", 
	"Supreme Master First Class", 
	"The Global Elite"
};

int Ranga[MAXPLAYERS + 1];
int StaraRanga[MAXPLAYERS + 1];
int RankPoints[MAX_RANKS];
int offset_rank;

public Plugin myinfo = 
{
	name = "ADEPT --> Level Ranks (Kento RankMe)", 
	description = "Autorski Plugin StudioADEPT.net", 
	author = "Brum Brum", 
	version = "1.0", 
	url = "http://www.StudioADEPT.net/forum", 
};

public void OnPluginStart()
{
	HookEventEx("player_death", Rank_Hooks);
	HookEventEx("bomb_planted", Rank_Hooks);
	HookEventEx("bomb_defused", Rank_Hooks);
	HookEventEx("bomb_exploded", Rank_Hooks);
	HookEventEx("bomb_dropped", Rank_Hooks);
	HookEventEx("bomb_pickup", Rank_Hooks);
	HookEventEx("hostage_rescued", Rank_Hooks);
	HookEventEx("vip_killed", Rank_Hooks);
	HookEventEx("vip_escaped", Rank_Hooks);
	HookEventEx("round_end", Rank_Hooks);
	HookEventEx("round_start", Rank_Hooks);
	HookEventEx("round_mvp", Rank_Hooks);
	g_rank = RegClientCookie("sm_ranga", "ranga", CookieAccess_Protected);
	g_RankPoints[0] = CreateConVar("sm_levelrankpoints_unranked", "1", "Ilość pkt za silvera");
	g_RankPoints[1] = CreateConVar("sm_levelrankpoints_silver", "1075", "Ilość pkt za silvera");
	g_RankPoints[2] = CreateConVar("sm_levelrankpoints_silver2", "1150", "Ilość pkt za silvera2");
	g_RankPoints[3] = CreateConVar("sm_levelrankpoints_silver3", "1225", "Ilość pkt za silvera3");
	g_RankPoints[4] = CreateConVar("sm_levelrankpoints_silver4", "1300", "Ilość pkt za silvera4");
	g_RankPoints[5] = CreateConVar("sm_levelrankpoints_silverelite", "1375", "Ilość pkt za silverelite");
	g_RankPoints[6] = CreateConVar("sm_levelrankpoints_silverme", "1450", "Ilość pkt za silverelitemaster");
	g_RankPoints[7] = CreateConVar("sm_levelrankpoints_gold", "1525", "Ilość pkt za gold");
	g_RankPoints[8] = CreateConVar("sm_levelrankpoints_gold2", "1600", "Ilość pkt za gold2");
	g_RankPoints[9] = CreateConVar("sm_levelrankpoints_gold3", "1675", "Ilość pkt za gold3");
	g_RankPoints[10] = CreateConVar("sm_levelrankpoints_gold4", "1750", "Ilość pkt za gold4");
	g_RankPoints[11] = CreateConVar("sm_levelrankpoints_mg", "1825", "Ilość pkt za mg");
	g_RankPoints[12] = CreateConVar("sm_levelrankpoints_mg2", "1900", "Ilość pkt za mg2");
	g_RankPoints[13] = CreateConVar("sm_levelrankpoints_mge", "1975", "Ilość pkt za mge");
	g_RankPoints[14] = CreateConVar("sm_levelrankpoints_dmg", "2050", "Ilość pkt za dmg");
	g_RankPoints[15] = CreateConVar("sm_levelrankpoints_le", "2125", "Ilość pkt za le");
	g_RankPoints[16] = CreateConVar("sm_levelrankpoints_lem", "2200", "Ilość pkt za lem");
	g_RankPoints[17] = CreateConVar("sm_levelrankpoints_supreme", "2275", "Ilość pkt za supreme");
	g_RankPoints[18] = CreateConVar("sm_levelrankpoints_global", "2350", "Ilość pkt za global");
	AutoExecConfig(true, "kento_rankme_ranks");
	RegConsoleCmd("sm_ranga", CMD_Ranga);
	RegConsoleCmd("sm_rangi", CMD_Ranga);
}

public void OnClientCookiesCached(int client)
{
	char value[11];
	GetClientCookie(client, g_rank, value, sizeof(value));
	Ranga[client] = StringToInt(value);
}

public void OnClientDisconnect(int client)
{
	if (AreClientCookiesCached(client))
	{
		char value[11];
		Format(value, sizeof(value), "%d", Ranga[client]);
		SetClientCookie(client, g_rank, value);
	}
	Ranga[client] = 0;
}

public void OnMapStart()
{
	offset_rank = FindSendPropInfo("CCSPlayerResource", "m_iCompetitiveRanking");
	SDKHook(FindEntityByClassname(MaxClients + 1, "cs_player_manager"), SDKHook_ThinkPost, Hook_OnThinkPost);
}

public Action Rank_Hooks(Event event, const char[] name, bool dontBroadcast) {
	int client = GetClientOfUserId(event.GetInt("userid"));
	int attacker = GetClientOfUserId(event.GetInt("attacker"));
	CheckRanks(client);
	CheckRanks(attacker);
}

public void OnConfigsExecuted()
{
	for (int i = 0; i < MAX_RANKS; i++)
	{
		RankPoints[i] = g_RankPoints[i].IntValue;
	}
}

public Action CMD_Ranga(int client, int args)
{
	char pkt[32], nextrank[64], nextrankstring[64];
	Format(pkt, sizeof(pkt), "Aktualnie masz %d punktów", RankMe_GetPoints(client));
	if (Ranga[client] == 18)
	{
		Format(nextrank, sizeof(nextrank), "To już jest ostatnia ranga. Gratulujemy!");
	}
	else
	{
		Format(nextrank, sizeof(nextrank), "Do następnej rangi brakuje Ci %d punktów", RankPoints[Ranga[client] + 1] - RankMe_GetPoints(client));
		Format(nextrankstring, sizeof(nextrankstring), "Następna ranga %s", RanksName[Ranga[client] + 1]);
	}
	Menu menu = new Menu(Menu_Handler);
	menu.SetTitle("ADEPT -> Level Ranks");
	menu.AddItem("", pkt, ITEMDRAW_DISABLED);
	menu.AddItem("", nextrank, ITEMDRAW_DISABLED);
	menu.AddItem("", nextrankstring, ITEMDRAW_DISABLED);
	menu.AddItem("rangi", "Lista Rang");
	menu.ExitButton = true;
	menu.Display(client, 60);
}

public int Menu_Handler(Menu menu, MenuAction action, int client, int itemNum)
{
	if (client == 0)return;
	char info[32];
	GetMenuItem(menu, itemNum, info, sizeof(info));
	if (!strcmp(info, "rangi", true))
	{
		if (IsValidClient(client))
		{
			Ranks(client);
		}
	}
	if (action == MenuAction_End)
	{
		delete menu;
	}
}

void Ranks(int client)
{
	Menu menu = new Menu(EmptyHandler);
	menu.SetTitle("ADEPT -> Level Ranks");
	for (int i = 1; i < MAX_RANKS; i++)
	{
		char buffer[64];
		Format(buffer, sizeof(buffer), "%s %d", RanksName[i], RankPoints[i]);
		menu.AddItem("", buffer, ITEMDRAW_DISABLED);
	}
	menu.ExitButton = true;
	menu.Display(client, 60);
}

void CheckRanks(int client)
{
	if (IsValidClient(client))
	{
		StaraRanga[client] = Ranga[client];
		
		if (RankMe_GetPoints(client) >= RankPoints[0] && RankMe_GetPoints(client) < RankPoints[1])
		{
			Ranga[client] = 0;
		}
		if (RankMe_GetPoints(client) >= RankPoints[1] && RankMe_GetPoints(client) < RankPoints[2])
		{
			Ranga[client] = 1;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[2] && RankMe_GetPoints(client) < RankPoints[3])
		{
			Ranga[client] = 2;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[3] && RankMe_GetPoints(client) < RankPoints[4])
		{
			Ranga[client] = 3;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[4] && RankMe_GetPoints(client) < RankPoints[5])
		{
			Ranga[client] = 4;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[5] && RankMe_GetPoints(client) < RankPoints[6])
		{
			Ranga[client] = 5;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[6] && RankMe_GetPoints(client) < RankPoints[7])
		{
			Ranga[client] = 6;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[7] && RankMe_GetPoints(client) < RankPoints[8])
		{
			Ranga[client] = 7;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[8] && RankMe_GetPoints(client) < RankPoints[9])
		{
			Ranga[client] = 8;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[9] && RankMe_GetPoints(client) < RankPoints[10])
		{
			Ranga[client] = 9;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[10] && RankMe_GetPoints(client) < RankPoints[11])
		{
			Ranga[client] = 10;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[11] && RankMe_GetPoints(client) < RankPoints[12])
		{
			Ranga[client] = 11;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[12] && RankMe_GetPoints(client) < RankPoints[13])
		{
			Ranga[client] = 12;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[13] && RankMe_GetPoints(client) < RankPoints[14])
		{
			Ranga[client] = 13;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[14] && RankMe_GetPoints(client) < RankPoints[15])
		{
			Ranga[client] = 14;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[15] && RankMe_GetPoints(client) < RankPoints[16])
		{
			Ranga[client] = 15;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[16] && RankMe_GetPoints(client) < RankPoints[17])
		{
			Ranga[client] = 16;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[17] && RankMe_GetPoints(client) < RankPoints[18])
		{
			Ranga[client] = 17;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[18])
		{
			Ranga[client] = 18;
		}
		if (Ranga[client] > StaraRanga[client])
		{
			SetHudTextParams(-1.0, 0.125, 8.0, 255, 153, 0, 255, 0, 0.25, 1.5, 0.5);
			for (int i = 1; i < MaxClients; i++)
			{
				if (IsValidClient(i))
				{
					ShowHudText(i, -1, "Właśnie %N awansował na\n%s", client, RanksName[Ranga[client]]);
				}
			}
		}
		else if (Ranga[client] < StaraRanga[client])
		{
			SetHudTextParams(-1.0, 0.125, 8.0, 255, 153, 0, 255, 0, 0.25, 1.5, 0.5);
			for (int i = 1; i < MaxClients; i++)
			{
				if (IsValidClient(i))
				{
					ShowHudText(i, -1, "Właśnie %N spadł z %s do\n%s", client, RanksName[Ranga[client] + 1], RanksName[Ranga[client]]);
				}
			}
		}
	}
}

public int EmptyHandler(Menu menu, MenuAction action, int client, int item)
{
}

public void Hook_OnThinkPost(int iEnt)
{
	SetEntDataArray(iEnt, offset_rank, Ranga, MAXPLAYERS);
	StartMessageAll("ServerRankRevealAll");
	EndMessage();
}

public bool IsValidClient(int client)
{
	if (!(1 <= client <= MaxClients) || !IsClientInGame(client) || !IsClientConnected(client) || IsFakeClient(client) || IsClientSourceTV(client))
		return false;
	
	return true;
} 

 

 

Download:

kento_rankme_ranks.sp
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

 

 

  • Lubię to! 2
  • Kocham to! 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dosyć nieoptymalne rozwiązanie, można to napisać 5 razy krócej, ale jeżeli działa to masz + za wstawkę.

Z tego co pamiętam @plx211 masz coś takiego bądź podobnego z wykorzystaniem rankme od kento bądź zwykłego rankme.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
4 godziny temu, Mesharsky napisał:

Dosyć nieoptymalne rozwiązanie, można to napisać 5 razy krócej, ale jeżeli działa to masz + za wstawkę.

Z tego co pamiętam @plx211 masz coś takiego bądź podobnego z wykorzystaniem rankme od kento bądź zwykłego rankme.

"Nieoptymalne" Chodzi Ci o wszystko z Hook_OnThinkPost? Jeżeli tak to nie wiem jak mogę to zrobić, poradziłbyś coś?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
1 godzinę temu, Brum Brum napisał:

"Nieoptymalne" Chodzi Ci o wszystko z Hook_OnThinkPost? Jeżeli tak to nie wiem jak mogę to zrobić, poradziłbyś coś?

Hooki, sposób wczytywanie pkt, sposób ich aktualizacji.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

 

public void Hook_OnThinkPost(int iEnt)

jak już robisz taką ścianę ifów to proszę zamień to na fora z makrodefinicją. myśl o sobie i osobach to edytujących.

 

rangę aktualizujesz już w tym swoim checkRanks czy jakoś tak więc nie musisz w innych miejscach tego robić 😕 

 

staraj się nie pisać cyferek w kodzie - napisz sobie #define MAX_RANKS 19 i używaj tego 😄 (sam tak kiedyś nie robiłem i teraz jak zaglądam do kodu to cyfra nic nie znaczy, a w słowach jest wszystko pięknie opisane xD) (chyba że robisz jako zlecenie to pisz jak Ci wygodnie 😄

 

a co do hooków (nie chce mi się analizować całego kodu) możesz wszystko w jednym robić jako checkowanie 

a najpiękniej by było jakbyś do rankme dodał forward wysyłający info że punkty się zmieniły xd 

 

  • Lubię to! 3

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Jak już chcesz hookować wszystkie eventy to wystarczy zrobić tak:

 

public void OnPluginStart()
{
	HookEventEx("player_death", Rank_Hooks);
	HookEventEx("bomb_planted", Rank_Hooks);
	HookEventEx("bomb_defused", Rank_Hooks);
	HookEventEx("bomb_exploded", Rank_Hooks);
	HookEventEx("bomb_dropped", Rank_Hooks);
	HookEventEx("bomb_pickup", Rank_Hooks);
	HookEventEx("hostage_rescued", Rank_Hooks);
	HookEventEx("vip_killed", Rank_Hooks);
	HookEventEx("vip_escaped", Rank_Hooks);
	HookEventEx("round_end", Rank_Hooks);
	HookEventEx("round_start", Rank_Hooks);
	HookEventEx("round_mvp", Rank_Hooks);
}

public Action Rank_Hooks(Event event, const char[] name, bool dontBroadcast)
{
	int client = GetClientOfUserId(event.GetInt("userid"));
	CheckRanks(client);
}

 

  • Lubię to! 2

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

@Update 
Lepiej hookowane eventy

Poprawiono sprawdzanie rangi (Nie wiedziałem jak zrobić to forem więc zostawiłem ifami)

Zapisywanie rangi w cookisach (Co zmianę mapy pisało, że dany gracz awansował na daną rangę)

Kod:

Spoiler

#include <sdktools>
#include <sdkhooks>
#include <cstrike>
#include <clientprefs>
#include <kento_rankme/rankme>

#define MAX_RANKS 19

ConVar g_RankPoints[MAX_RANKS];
Handle g_rank;

char RanksName[][] = 
{
	"Unranked", 
	"Silver I", 
	"Silver II", 
	"Silver III", 
	"Silver IV", 
	"Silver Elite", 
	"Silver Elite Master", 
	"Gold Nova 1", 
	"Gold Nova 2", 
	"Gold Nova 3", 
	"Gold Nova Master", 
	"Master Guardian 1", 
	"Master Guardian 2", 
	"Master Guardian Elite", 
	"Distinguished Master Guardian", 
	"Legendary Eagle", 
	"Legendary Eagle Master", 
	"Supreme Master First Class", 
	"The Global Elite"
};

int Ranga[MAXPLAYERS + 1];
int StaraRanga[MAXPLAYERS + 1];
int RankPoints[MAX_RANKS];
int offset_rank;

public Plugin myinfo = 
{
	name = "ADEPT --> Level Ranks (Kento RankMe)", 
	description = "Autorski Plugin StudioADEPT.net", 
	author = "Brum Brum", 
	version = "1.0", 
	url = "http://www.StudioADEPT.net/forum", 
};

public void OnPluginStart()
{
	HookEventEx("player_death", Rank_Hooks);
	HookEventEx("bomb_planted", Rank_Hooks);
	HookEventEx("bomb_defused", Rank_Hooks);
	HookEventEx("bomb_exploded", Rank_Hooks);
	HookEventEx("bomb_dropped", Rank_Hooks);
	HookEventEx("bomb_pickup", Rank_Hooks);
	HookEventEx("hostage_rescued", Rank_Hooks);
	HookEventEx("vip_killed", Rank_Hooks);
	HookEventEx("vip_escaped", Rank_Hooks);
	HookEventEx("round_end", Rank_Hooks);
	HookEventEx("round_start", Rank_Hooks);
	HookEventEx("round_mvp", Rank_Hooks);
	g_rank = RegClientCookie("sm_ranga", "ranga", CookieAccess_Protected);
	g_RankPoints[0] = CreateConVar("sm_levelrankpoints_unranked", "1", "Ilość pkt za silvera");
	g_RankPoints[1] = CreateConVar("sm_levelrankpoints_silver", "1075", "Ilość pkt za silvera");
	g_RankPoints[2] = CreateConVar("sm_levelrankpoints_silver2", "1150", "Ilość pkt za silvera2");
	g_RankPoints[3] = CreateConVar("sm_levelrankpoints_silver3", "1225", "Ilość pkt za silvera3");
	g_RankPoints[4] = CreateConVar("sm_levelrankpoints_silver4", "1300", "Ilość pkt za silvera4");
	g_RankPoints[5] = CreateConVar("sm_levelrankpoints_silverelite", "1375", "Ilość pkt za silverelite");
	g_RankPoints[6] = CreateConVar("sm_levelrankpoints_silverme", "1450", "Ilość pkt za silverelitemaster");
	g_RankPoints[7] = CreateConVar("sm_levelrankpoints_gold", "1525", "Ilość pkt za gold");
	g_RankPoints[8] = CreateConVar("sm_levelrankpoints_gold2", "1600", "Ilość pkt za gold2");
	g_RankPoints[9] = CreateConVar("sm_levelrankpoints_gold3", "1675", "Ilość pkt za gold3");
	g_RankPoints[10] = CreateConVar("sm_levelrankpoints_gold4", "1750", "Ilość pkt za gold4");
	g_RankPoints[11] = CreateConVar("sm_levelrankpoints_mg", "1825", "Ilość pkt za mg");
	g_RankPoints[12] = CreateConVar("sm_levelrankpoints_mg2", "1900", "Ilość pkt za mg2");
	g_RankPoints[13] = CreateConVar("sm_levelrankpoints_mge", "1975", "Ilość pkt za mge");
	g_RankPoints[14] = CreateConVar("sm_levelrankpoints_dmg", "2050", "Ilość pkt za dmg");
	g_RankPoints[15] = CreateConVar("sm_levelrankpoints_le", "2125", "Ilość pkt za le");
	g_RankPoints[16] = CreateConVar("sm_levelrankpoints_lem", "2200", "Ilość pkt za lem");
	g_RankPoints[17] = CreateConVar("sm_levelrankpoints_supreme", "2275", "Ilość pkt za supreme");
	g_RankPoints[18] = CreateConVar("sm_levelrankpoints_global", "2350", "Ilość pkt za global");
	AutoExecConfig(true, "kento_rankme_ranks");
	RegConsoleCmd("sm_ranga", CMD_Ranga);
	RegConsoleCmd("sm_rangi", CMD_Ranga);
}

public void OnClientCookiesCached(int client)
{
	char value[11];
	GetClientCookie(client, g_rank, value, sizeof(value));
	Ranga[client] = StringToInt(value);
}

public void OnClientDisconnect(int client)
{
	if (AreClientCookiesCached(client))
	{
		char value[11];
		Format(value, sizeof(value), "%d", Ranga[client]);
		SetClientCookie(client, g_rank, value);
	}
	Ranga[client] = 0;
}

public void OnMapStart()
{
	offset_rank = FindSendPropInfo("CCSPlayerResource", "m_iCompetitiveRanking");
	SDKHook(FindEntityByClassname(MaxClients + 1, "cs_player_manager"), SDKHook_ThinkPost, Hook_OnThinkPost);
}

public Action Rank_Hooks(Event event, const char[] name, bool dontBroadcast) {
	int client = GetClientOfUserId(event.GetInt("userid"));
	int attacker = GetClientOfUserId(event.GetInt("attacker"));
	CheckRanks(client);
	CheckRanks(attacker);
}

public void OnConfigsExecuted()
{
	for (int i = 0; i < MAX_RANKS; i++)
	{
		RankPoints[i] = g_RankPoints[i].IntValue;
	}
}

public Action CMD_Ranga(int client, int args)
{
	char pkt[32], nextrank[64], nextrankstring[64];
	Format(pkt, sizeof(pkt), "Aktualnie masz %d punktów", RankMe_GetPoints(client));
	if (Ranga[client] == 18)
	{
		Format(nextrank, sizeof(nextrank), "To już jest ostatnia ranga. Gratulujemy!");
	}
	else
	{
		Format(nextrank, sizeof(nextrank), "Do następnej rangi brakuje Ci %d punktów", RankPoints[Ranga[client] + 1] - RankMe_GetPoints(client));
		Format(nextrankstring, sizeof(nextrankstring), "Następna ranga %s", RanksName[Ranga[client] + 1]);
	}
	Menu menu = new Menu(Menu_Handler);
	menu.SetTitle("ADEPT -> Level Ranks");
	menu.AddItem("", pkt, ITEMDRAW_DISABLED);
	menu.AddItem("", nextrank, ITEMDRAW_DISABLED);
	menu.AddItem("", nextrankstring, ITEMDRAW_DISABLED);
	menu.AddItem("rangi", "Lista Rang");
	menu.ExitButton = true;
	menu.Display(client, 60);
}

public int Menu_Handler(Menu menu, MenuAction action, int client, int itemNum)
{
	if (client == 0)return;
	char info[32];
	GetMenuItem(menu, itemNum, info, sizeof(info));
	if (!strcmp(info, "rangi", true))
	{
		if (IsValidClient(client))
		{
			Ranks(client);
		}
	}
	if (action == MenuAction_End)
	{
		delete menu;
	}
}

void Ranks(int client)
{
	Menu menu = new Menu(EmptyHandler);
	menu.SetTitle("ADEPT -> Level Ranks");
	for (int i = 1; i < MAX_RANKS; i++)
	{
		char buffer[64];
		Format(buffer, sizeof(buffer), "%s %d", RanksName[i], RankPoints[i]);
		menu.AddItem("", buffer, ITEMDRAW_DISABLED);
	}
	menu.ExitButton = true;
	menu.Display(client, 60);
}

void CheckRanks(int client)
{
	if (IsValidClient(client))
	{
		StaraRanga[client] = Ranga[client];
		
		if (RankMe_GetPoints(client) >= RankPoints[0] && RankMe_GetPoints(client) < RankPoints[1])
		{
			Ranga[client] = 0;
		}
		if (RankMe_GetPoints(client) >= RankPoints[1] && RankMe_GetPoints(client) < RankPoints[2])
		{
			Ranga[client] = 1;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[2] && RankMe_GetPoints(client) < RankPoints[3])
		{
			Ranga[client] = 2;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[3] && RankMe_GetPoints(client) < RankPoints[4])
		{
			Ranga[client] = 3;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[4] && RankMe_GetPoints(client) < RankPoints[5])
		{
			Ranga[client] = 4;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[5] && RankMe_GetPoints(client) < RankPoints[6])
		{
			Ranga[client] = 5;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[6] && RankMe_GetPoints(client) < RankPoints[7])
		{
			Ranga[client] = 6;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[7] && RankMe_GetPoints(client) < RankPoints[8])
		{
			Ranga[client] = 7;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[8] && RankMe_GetPoints(client) < RankPoints[9])
		{
			Ranga[client] = 8;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[9] && RankMe_GetPoints(client) < RankPoints[10])
		{
			Ranga[client] = 9;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[10] && RankMe_GetPoints(client) < RankPoints[11])
		{
			Ranga[client] = 10;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[11] && RankMe_GetPoints(client) < RankPoints[12])
		{
			Ranga[client] = 11;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[12] && RankMe_GetPoints(client) < RankPoints[13])
		{
			Ranga[client] = 12;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[13] && RankMe_GetPoints(client) < RankPoints[14])
		{
			Ranga[client] = 13;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[14] && RankMe_GetPoints(client) < RankPoints[15])
		{
			Ranga[client] = 14;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[15] && RankMe_GetPoints(client) < RankPoints[16])
		{
			Ranga[client] = 15;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[16] && RankMe_GetPoints(client) < RankPoints[17])
		{
			Ranga[client] = 16;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[17] && RankMe_GetPoints(client) < RankPoints[18])
		{
			Ranga[client] = 17;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[18])
		{
			Ranga[client] = 18;
		}
		if (Ranga[client] > StaraRanga[client])
		{
			SetHudTextParams(-1.0, 0.125, 8.0, 255, 153, 0, 255, 0, 0.25, 1.5, 0.5);
			for (int i = 1; i < MaxClients; i++)
			{
				if (IsValidClient(i))
				{
					ShowHudText(i, -1, "Właśnie %N awansował na\n%s", client, RanksName[Ranga[client]]);
				}
			}
		}
		else if (Ranga[client] < StaraRanga[client])
		{
			SetHudTextParams(-1.0, 0.125, 8.0, 255, 153, 0, 255, 0, 0.25, 1.5, 0.5);
			for (int i = 1; i < MaxClients; i++)
			{
				if (IsValidClient(i))
				{
					ShowHudText(i, -1, "Właśnie %N spadł z %s do\n%s", client, RanksName[Ranga[client] + 1], RanksName[Ranga[client]]);
				}
			}
		}
	}
}

public int EmptyHandler(Menu menu, MenuAction action, int client, int item)
{
}

public void Hook_OnThinkPost(int iEnt)
{
	SetEntDataArray(iEnt, offset_rank, Ranga, MAXPLAYERS);
	StartMessageAll("ServerRankRevealAll");
	EndMessage();
}

public bool IsValidClient(int client)
{
	if (!(1 <= client <= MaxClients) || !IsClientInGame(client) || !IsClientConnected(client) || IsFakeClient(client) || IsClientSourceTV(client))
		return false;
	
	return true;
} 

 

 

kento_rankme_ranks.smx
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

kento_rankme_ranks.sp
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

  • Dobry pomysł! 1
Przez MAGNET,

Zaktualizowałem 1 post

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
13 godzin temu, Brum Brum napisał:

@Update 
Lepiej hookowane eventy

Poprawiono sprawdzanie rangi (Nie wiedziałem jak zrobić to forem więc zostawiłem ifami)

Zapisywanie rangi w cookisach (Co zmianę mapy pisało, że dany gracz awansował na daną rangę)

Kod:

 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Odkryj ukrytą treść


#include <sdktools>
#include <sdkhooks>
#include <cstrike>
#include <clientprefs>
#include <kento_rankme/rankme>

#define MAX_RANKS 19

ConVar g_RankPoints[MAX_RANKS];
Handle g_rank;

char RanksName[][] = 
{
	"Unranked", 
	"Silver I", 
	"Silver II", 
	"Silver III", 
	"Silver IV", 
	"Silver Elite", 
	"Silver Elite Master", 
	"Gold Nova 1", 
	"Gold Nova 2", 
	"Gold Nova 3", 
	"Gold Nova Master", 
	"Master Guardian 1", 
	"Master Guardian 2", 
	"Master Guardian Elite", 
	"Distinguished Master Guardian", 
	"Legendary Eagle", 
	"Legendary Eagle Master", 
	"Supreme Master First Class", 
	"The Global Elite"
};

int Ranga[MAXPLAYERS + 1];
int StaraRanga[MAXPLAYERS + 1];
int RankPoints[MAX_RANKS];
int offset_rank;

public Plugin myinfo = 
{
	name = "ADEPT --> Level Ranks (Kento RankMe)", 
	description = "Autorski Plugin StudioADEPT.net", 
	author = "Brum Brum", 
	version = "1.0", 
	url = "http://www.StudioADEPT.net/forum", 
};

public void OnPluginStart()
{
	HookEventEx("player_death", Rank_Hooks);
	HookEventEx("bomb_planted", Rank_Hooks);
	HookEventEx("bomb_defused", Rank_Hooks);
	HookEventEx("bomb_exploded", Rank_Hooks);
	HookEventEx("bomb_dropped", Rank_Hooks);
	HookEventEx("bomb_pickup", Rank_Hooks);
	HookEventEx("hostage_rescued", Rank_Hooks);
	HookEventEx("vip_killed", Rank_Hooks);
	HookEventEx("vip_escaped", Rank_Hooks);
	HookEventEx("round_end", Rank_Hooks);
	HookEventEx("round_start", Rank_Hooks);
	HookEventEx("round_mvp", Rank_Hooks);
	g_rank = RegClientCookie("sm_ranga", "ranga", CookieAccess_Protected);
	g_RankPoints[0] = CreateConVar("sm_levelrankpoints_unranked", "1", "Ilość pkt za silvera");
	g_RankPoints[1] = CreateConVar("sm_levelrankpoints_silver", "1075", "Ilość pkt za silvera");
	g_RankPoints[2] = CreateConVar("sm_levelrankpoints_silver2", "1150", "Ilość pkt za silvera2");
	g_RankPoints[3] = CreateConVar("sm_levelrankpoints_silver3", "1225", "Ilość pkt za silvera3");
	g_RankPoints[4] = CreateConVar("sm_levelrankpoints_silver4", "1300", "Ilość pkt za silvera4");
	g_RankPoints[5] = CreateConVar("sm_levelrankpoints_silverelite", "1375", "Ilość pkt za silverelite");
	g_RankPoints[6] = CreateConVar("sm_levelrankpoints_silverme", "1450", "Ilość pkt za silverelitemaster");
	g_RankPoints[7] = CreateConVar("sm_levelrankpoints_gold", "1525", "Ilość pkt za gold");
	g_RankPoints[8] = CreateConVar("sm_levelrankpoints_gold2", "1600", "Ilość pkt za gold2");
	g_RankPoints[9] = CreateConVar("sm_levelrankpoints_gold3", "1675", "Ilość pkt za gold3");
	g_RankPoints[10] = CreateConVar("sm_levelrankpoints_gold4", "1750", "Ilość pkt za gold4");
	g_RankPoints[11] = CreateConVar("sm_levelrankpoints_mg", "1825", "Ilość pkt za mg");
	g_RankPoints[12] = CreateConVar("sm_levelrankpoints_mg2", "1900", "Ilość pkt za mg2");
	g_RankPoints[13] = CreateConVar("sm_levelrankpoints_mge", "1975", "Ilość pkt za mge");
	g_RankPoints[14] = CreateConVar("sm_levelrankpoints_dmg", "2050", "Ilość pkt za dmg");
	g_RankPoints[15] = CreateConVar("sm_levelrankpoints_le", "2125", "Ilość pkt za le");
	g_RankPoints[16] = CreateConVar("sm_levelrankpoints_lem", "2200", "Ilość pkt za lem");
	g_RankPoints[17] = CreateConVar("sm_levelrankpoints_supreme", "2275", "Ilość pkt za supreme");
	g_RankPoints[18] = CreateConVar("sm_levelrankpoints_global", "2350", "Ilość pkt za global");
	AutoExecConfig(true, "kento_rankme_ranks");
	RegConsoleCmd("sm_ranga", CMD_Ranga);
	RegConsoleCmd("sm_rangi", CMD_Ranga);
}

public void OnClientCookiesCached(int client)
{
	char value[11];
	GetClientCookie(client, g_rank, value, sizeof(value));
	Ranga[client] = StringToInt(value);
}

public void OnClientDisconnect(int client)
{
	if (AreClientCookiesCached(client))
	{
		char value[11];
		Format(value, sizeof(value), "%d", Ranga[client]);
		SetClientCookie(client, g_rank, value);
	}
	Ranga[client] = 0;
}

public void OnMapStart()
{
	offset_rank = FindSendPropInfo("CCSPlayerResource", "m_iCompetitiveRanking");
	SDKHook(FindEntityByClassname(MaxClients + 1, "cs_player_manager"), SDKHook_ThinkPost, Hook_OnThinkPost);
}

public Action Rank_Hooks(Event event, const char[] name, bool dontBroadcast) {
	int client = GetClientOfUserId(event.GetInt("userid"));
	int attacker = GetClientOfUserId(event.GetInt("attacker"));
	CheckRanks(client);
	CheckRanks(attacker);
}

public void OnConfigsExecuted()
{
	for (int i = 0; i < MAX_RANKS; i++)
	{
		RankPoints[i] = g_RankPoints[i].IntValue;
	}
}

public Action CMD_Ranga(int client, int args)
{
	char pkt[32], nextrank[64], nextrankstring[64];
	Format(pkt, sizeof(pkt), "Aktualnie masz %d punktów", RankMe_GetPoints(client));
	if (Ranga[client] == 18)
	{
		Format(nextrank, sizeof(nextrank), "To już jest ostatnia ranga. Gratulujemy!");
	}
	else
	{
		Format(nextrank, sizeof(nextrank), "Do następnej rangi brakuje Ci %d punktów", RankPoints[Ranga[client] + 1] - RankMe_GetPoints(client));
		Format(nextrankstring, sizeof(nextrankstring), "Następna ranga %s", RanksName[Ranga[client] + 1]);
	}
	Menu menu = new Menu(Menu_Handler);
	menu.SetTitle("ADEPT -> Level Ranks");
	menu.AddItem("", pkt, ITEMDRAW_DISABLED);
	menu.AddItem("", nextrank, ITEMDRAW_DISABLED);
	menu.AddItem("", nextrankstring, ITEMDRAW_DISABLED);
	menu.AddItem("rangi", "Lista Rang");
	menu.ExitButton = true;
	menu.Display(client, 60);
}

public int Menu_Handler(Menu menu, MenuAction action, int client, int itemNum)
{
	if (client == 0)return;
	char info[32];
	GetMenuItem(menu, itemNum, info, sizeof(info));
	if (!strcmp(info, "rangi", true))
	{
		if (IsValidClient(client))
		{
			Ranks(client);
		}
	}
	if (action == MenuAction_End)
	{
		delete menu;
	}
}

void Ranks(int client)
{
	Menu menu = new Menu(EmptyHandler);
	menu.SetTitle("ADEPT -> Level Ranks");
	for (int i = 1; i < MAX_RANKS; i++)
	{
		char buffer[64];
		Format(buffer, sizeof(buffer), "%s %d", RanksName[i], RankPoints[i]);
		menu.AddItem("", buffer, ITEMDRAW_DISABLED);
	}
	menu.ExitButton = true;
	menu.Display(client, 60);
}

void CheckRanks(int client)
{
	if (IsValidClient(client))
	{
		StaraRanga[client] = Ranga[client];
		
		if (RankMe_GetPoints(client) >= RankPoints[0] && RankMe_GetPoints(client) < RankPoints[1])
		{
			Ranga[client] = 0;
		}
		if (RankMe_GetPoints(client) >= RankPoints[1] && RankMe_GetPoints(client) < RankPoints[2])
		{
			Ranga[client] = 1;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[2] && RankMe_GetPoints(client) < RankPoints[3])
		{
			Ranga[client] = 2;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[3] && RankMe_GetPoints(client) < RankPoints[4])
		{
			Ranga[client] = 3;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[4] && RankMe_GetPoints(client) < RankPoints[5])
		{
			Ranga[client] = 4;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[5] && RankMe_GetPoints(client) < RankPoints[6])
		{
			Ranga[client] = 5;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[6] && RankMe_GetPoints(client) < RankPoints[7])
		{
			Ranga[client] = 6;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[7] && RankMe_GetPoints(client) < RankPoints[8])
		{
			Ranga[client] = 7;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[8] && RankMe_GetPoints(client) < RankPoints[9])
		{
			Ranga[client] = 8;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[9] && RankMe_GetPoints(client) < RankPoints[10])
		{
			Ranga[client] = 9;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[10] && RankMe_GetPoints(client) < RankPoints[11])
		{
			Ranga[client] = 10;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[11] && RankMe_GetPoints(client) < RankPoints[12])
		{
			Ranga[client] = 11;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[12] && RankMe_GetPoints(client) < RankPoints[13])
		{
			Ranga[client] = 12;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[13] && RankMe_GetPoints(client) < RankPoints[14])
		{
			Ranga[client] = 13;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[14] && RankMe_GetPoints(client) < RankPoints[15])
		{
			Ranga[client] = 14;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[15] && RankMe_GetPoints(client) < RankPoints[16])
		{
			Ranga[client] = 15;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[16] && RankMe_GetPoints(client) < RankPoints[17])
		{
			Ranga[client] = 16;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[17] && RankMe_GetPoints(client) < RankPoints[18])
		{
			Ranga[client] = 17;
		}
		else if (RankMe_GetPoints(client) >= RankPoints[18])
		{
			Ranga[client] = 18;
		}
		if (Ranga[client] > StaraRanga[client])
		{
			SetHudTextParams(-1.0, 0.125, 8.0, 255, 153, 0, 255, 0, 0.25, 1.5, 0.5);
			for (int i = 1; i < MaxClients; i++)
			{
				if (IsValidClient(i))
				{
					ShowHudText(i, -1, "Właśnie %N awansował na\n%s", client, RanksName[Ranga[client]]);
				}
			}
		}
		else if (Ranga[client] < StaraRanga[client])
		{
			SetHudTextParams(-1.0, 0.125, 8.0, 255, 153, 0, 255, 0, 0.25, 1.5, 0.5);
			for (int i = 1; i < MaxClients; i++)
			{
				if (IsValidClient(i))
				{
					ShowHudText(i, -1, "Właśnie %N spadł z %s do\n%s", client, RanksName[Ranga[client] + 1], RanksName[Ranga[client]]);
				}
			}
		}
	}
}

public int EmptyHandler(Menu menu, MenuAction action, int client, int item)
{
}

public void Hook_OnThinkPost(int iEnt)
{
	SetEntDataArray(iEnt, offset_rank, Ranga, MAXPLAYERS);
	StartMessageAll("ServerRankRevealAll");
	EndMessage();
}

public bool IsValidClient(int client)
{
	if (!(1 <= client <= MaxClients) || !IsClientInGame(client) || !IsClientConnected(client) || IsFakeClient(client) || IsClientSourceTV(client))
		return false;
	
	return true;
} 

 

 

kento_rankme_ranks.smx
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

kento_rankme_ranks.sp
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami!

Nie lepszy byłby zapis do mysqla?

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Napisano (edytowany)
for(int i = MAX_RANKS; i>=0; i--)
{
	if(clientPoints[client] >= rankNeed[i])
	{
		cientRank[client] = i;
		break;

	}
}

 

Edytowano przez mastah7991
błąd w kodzie ;(
  • Lubię to! 1
  • Kocham to! 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się
Zaloguj się, aby obserwować  

  • Kto przegląda   0 użytkowników

    Brak zalogowanych użytkowników przeglądających tę stronę.

×