antiblock
Cyphriun
  • Chatbox

    You don't have permission to chat.
    Load More
  • 0
@Metin2

Licença no client 40k ?

Question

Olá uma duvida há uma possibilidade de um client 40k de ter uma licença aonde o mesmo é expirado e pode fazer com que o client pare de funcionar ?

Share this post


Link to post
Share on other sites

4 answers to this question

  • 0

bom dia, client penso que não pelo menos nunca vi tal agora na source do game podes o fazer e tem já feito

licença da ymir 

Share this post


Link to post
Share on other sites
antiblock
Elveron
  • 0

podes fazer com que o cliente force a verificação da versão do game core e fazer com que o cliente feche em caso de diferenças

Share this post


Link to post
Share on other sites
  • 0

Por padrão já existe uma função em que verifique a versão do cliente com a versão do servidor, funciona por tempo, ou seja, se a data de execução for maior que a data limite que está configurada no servidor, o jogador será desconectado do servidor. Agora fica como queres verificar esta "chave" ou data de limite da versão / "licença".

/// 1. @ Server/Game/input_login.cpp
// Procura
	if (g_bCheckClientVersion)
	{
		[ ... ]
	}

// Altere tudo por (verificar por data limite)
	if (g_bCheckClientVersion)
	{
		sys_log(0, "VERSION CHECK %s %s", g_stClientVersion.c_str(), d->GetClientVersion());

		if (!d->GetClientVersion())
		{
			d->DelayedDisconnect(10);
		}
		else
		{
			if (d->GetClientVersion() >= g_stClientVersion)
			{
				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("Ŭ¶óÀ̾ðÆ® ¹öÀüÀÌ Æ²·Á ·Î±×¾Æ¿ô µË´Ï´Ù. Á¤»óÀûÀ¸·Î ÆÐÄ¡ ÈÄ Á¢¼ÓÇϼ¼¿ä."));
				d->DelayedDisconnect(0);
				LogManager::instance().HackLog("VERSION_CONFLICT", ch);

				sys_log(0, "VERSION : WRONG VERSION USER : account:%s name:%s hostName:%s server_version:%s client_version:%s",
					d->GetAccountTable().login,
					ch->GetName(),
					d->GetHostName(),
					g_stClientVersion.c_str(),
					d->GetClientVersion());
			}
		}
	}
	else
	{
		sys_log(0, "VERSION : NO CHECK");
	}

// Ou altere por (verificar um valor fixo)
	if (g_bCheckClientVersion)
	{
		sys_log(0, "VERSION CHECK %s %s", g_stClientVersion.c_str(), d->GetClientVersion());

		if (!d->GetClientVersion())
		{
			d->DelayedDisconnect(10);
		}
		else
		{
			if (0 != g_stClientVersion.compare(d->GetClientVersion()))
			{
				ch->ChatPacket(CHAT_TYPE_NOTICE, LC_TEXT("Ŭ¶óÀ̾ðÆ® ¹öÀüÀÌ Æ²·Á ·Î±×¾Æ¿ô µË´Ï´Ù. Á¤»óÀûÀ¸·Î ÆÐÄ¡ ÈÄ Á¢¼ÓÇϼ¼¿ä."));
				d->DelayedDisconnect(0);
				LogManager::instance().HackLog("VERSION_CONFLICT", ch);

				sys_log(0, "VERSION : WRONG VERSION USER : account:%s name:%s hostName:%s server_version:%s client_version:%s",
					d->GetAccountTable().login,
					ch->GetName(),
					d->GetHostName(),
					g_stClientVersion.c_str(),
					d->GetClientVersion());
			}
		}
	}
	else
	{
		sys_log(0, "VERSION : NO CHECK");
	}

Eis algumas coisas que tens que considerar também; no ficheiro Server/Game /config.cpp tens que ativar esta verificação e também tens que alterar a "chave" ou data limite da versão / "licença".

/// 1. @ Server/Game/config.cpp
// Procura e confirme, altere g_stClientVersion conforme as tuas preferências.
bool g_bCheckClientVersion = true; // true = verificar | false = não verificar
std::string g_stClientVersion = "1640998800"; // Sat Jan 01 2022 01:00:00 GMT+0000

Também podes criar um ficheiro "VERSION" junto a ficheiro "CONFIG" no diretório dos teus canais e adicionar o valor lá em vez de modificares o código fonte sempre que queres alterar a "chave" ou data limite da versão / "licença".

Para isso também deves confirmar que essa função seja chamada.

/// 1. @ Server/Game/config.cpp
// Procura
	LoadValidCRCList();
	LoadStateUserCount();

// Adiciona abaixo
	LoadClientVersion();

Finalmente na source do teu cliente terás que fazer algumas alterações também.

/// 1. @ Client/UserInterface/PythonNetworkPhaseGame.cpp
// Procura
		strncpy(kVersionPacket.timestamp, "1215955205", sizeof(kVersionPacket.timestamp) - 1); // # python time.time ¾ÕÀÚ¸®

// Altere para (verificar por data limite)
		strncpy(kVersionPacket.timestamp, static_cast<std::time_t>(std::time(0)), sizeof(kVersionPacket.timestamp) - 1);

// Ou altere para (verificar um valor fixo)
		strncpy(kVersionPacket.timestamp, "1234567890", sizeof(kVersionPacket.timestamp) - 1);

O que deves saber sobre essas alterações.
1. Nem todos os clientes em que toca o código fonte são iguais, por isso deves-te guiar pela semelhança do código.
2. Este método apenas desconecta o jogador após entrar no jogo caso haja conflito entre a "chave" ou data limite da versão / "licença".
3. Há melhores formas de verificares o que pretendes, este é apenas o mais semelhante à tua pergunta e o mais simples que já existe no código fonte.

Cumprimentos, Owsap.

Share this post


Link to post
Share on other sites
  • 0

Muito obg. essas resposta pode ajudar muito outras pessoas também !

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now