Protección contra los nombres inapropriados

Ver el tema anterior Ver el tema siguiente Ir abajo

Protección contra los nombres inapropriados

Mensaje por browser el Dom Jun 03, 2012 9:01 pm

Esta función no permite que los personajes que se creen con personajes inadecuados, haciendo imposible la prohibición de un sitio y los comandos, pero no permite la creación de los gremios con los personajes inapropiados, lo que lleva a la caída del servidor.

Texto original:
Spoiler:
Essa função não permite que personagem sejam criados com caractéres inapropriados, tornando-os impossíveis de banir por comandos e site, como também, não permite a criação de guilds com caractéres inapropriados, levando a queda do servidor.

Protección:

Create.h:

Spoiler:
#pragma once

namespace Network
{
struct PMSG_CHARCREATE
{
PBMSG_HEAD h;
BYTE subcode;
char Name[10];
BYTE ClassSkin;
};

struct PMSG_GUILDINFOSAVE
{
PBMSG_HEAD h;
BYTE btGuildType;
char GuildName[8];
BYTE Mark[32];
};

class Create
{
public:
static bool checkString(std::string szString, std::string szPattern, bool szIgnoreSpace);
static void Character(PMSG_CHARCREATE* lpMsg, DWORD dwIndex);
static void Guild(DWORD dwIndex, PMSG_GUILDINFOSAVE* lpMsg);
};
}

Create.cpp:
Spoiler:
#include "Create.h"

namespace Network
{
bool Create::checkString(std::string szString, std::string szPattern, bool szIgnoreSpace)
{
DWORD dwCount = 0;
std::string szReg = "", szCharacter = "";

if(szPattern[0] != '[' || szPattern[(szPattern.length() - 1)] != ']')
{
return false;
}

for(int i = 1; i < (int)szPattern.length(); i++)
{
if(szPattern[i] == ']')
{
if(!szReg.empty())
{
szCharacter += szReg;
}

break;
}

if(!szPattern.compare(i, 3, "A-Z"))
{
szCharacter += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
i += 2;
}
else if(!szPattern.compare(i, 3, "a-z"))
{
szCharacter += "abcdefghijklmnopqrstuvwxyz";
i += 2;
}
else if(!szPattern.compare(i, 3, "0-9"))
{
szCharacter += "0123456789";
i += 2;
}
else
{
szReg += szPattern[i];
}
}

for(int n = 0; n < (int)szString.length(); n++)
{
if(szString[n] == ' ' && szIgnoreSpace)
{
dwCount++;
continue;
}

for(int y = 0; y < (int)szCharacter.length(); y++)
{
if(szString[n] == szCharacter[y])
{
dwCount++;
break;
}
}
}

if(dwCount == (DWORD)szString.length())
{
return true;
}

return false;
}

void Create::Character(PMSG_CHARCREATE* lpMsg, DWORD dwIndex)
{
if(checkString(lpMsg->Name, "[A-Za-z0-9_-]", false))
{
ServerCharacterFailSend(dwIndex, lpMsg->Name);
return;
}

ServerCreateCharacter(lpMsg, dwIndex);
}

void Create::Guild(DWORD dwIndex, PMSG_GUILDINFOSAVE* lpMsg)
{
if(checkString(lpMsg->GuildName, "[A-Za-z0-9_-]", false))
{
return;
}

ServerCreateGuild(dwIndex, lpMsg);
}
}

Hook:
Spoiler:
Hook((DWORD)&Network::Create::Character, 0x401B8B);
Hook((DWORD)&Network::Create::Guild, 0x4017DF);

Defines:
Spoiler:
#define ServerCreateCharacter ((void(*)(Network::PMSG_CHARCREATE*, DWORD)) 0x417420)
#define ServerCharacterFailSend ((void(*)(DWORD, char*)) 0x410A50)
#define ServerCreateGuild ((void(*)(DWORD, Network::PMSG_GUILDINFOSAVE*)) 0x4211B0)

Credits:

______________________________________________________________________________________________________________________________
:suspect:
No soy el mejor de todos pero algo soy :L
:suspect:

browser




Tread Creados 28

Corazones bardos 82
Fama 16
Fecha de inscripción : 03/06/2012

Ver perfil de usuario

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.