World Servers
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

[SOURCE]Protección contra los nombres inapropriados

2 participantes

Ir abajo

[SOURCE]Protección contra los nombres inapropriados Empty [SOURCE]Protección contra los nombres inapropriados

Mensaje por The_Grox.- 2013-03-04, 22:14

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.

Create.h:
--------------------------------------------------------------------------------------------
#pragma once

namespace Programador
{
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:
--------------------------------------------------------------------------------------------
#include "Create.h"

namespace Programador
{
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:
--------------------------------------------------------------------------------------------
Hook((DWORD)&Programador::Create::Character, 0x401B8B);
Hook((DWORD)&Programador::Create::Guild, 0x4017DF);
--------------------------------------------------------------------------------------------

Defines:
--------------------------------------------------------------------------------------------
#define ServerCreateCharacter ((void(*)(Programador:PMSG_CHARCREATE*, DWORD)) 0x417420)
#define ServerCharacterFailSend ((void(*)(DWORD, char*)) 0x410A50)
#define ServerCreateGuild
--------------------------------------------------------------------------------------------

Creditos : Programador
The_Grox.-
The_Grox.-
Level V
Level V

Usuario Registrado Masculino Argentina Trofeo de Plata Estrella de Oro : Nivel 12º No tienes ninguna Advertencia
La vuelta esperada
Mensajes : 700
Cash Point : 24562
Prestigio : 350
Registro : 19/11/2010
Localización : Goya, Corrientes
Edad : 29

http://www.world-servers.org/

Volver arriba Ir abajo

[SOURCE]Protección contra los nombres inapropriados Empty Re: [SOURCE]Protección contra los nombres inapropriados

Mensaje por Netbios 2013-03-07, 11:59

Hay scripts sql para el tema del crash del gs en la creacion de clanes y ExDB fixeadas, para la creacion de personajes con nombres inapropiados tambien hay triggers, creo que es la solucion mas facil para eso. Cuando pueda los posteo.
Netbios
Netbios
Miembro
Miembro

Usuario Registrado Masculino Argentina No tienes ningun Trofeo No tienes ningun Premio No tienes ninguna Advertencia
Netbios
Mensajes : 18
Cash Point : 21455
Prestigio : 10
Registro : 07/03/2013
Localización : Magdalena
Edad : 32

http://www.muparatodos.com

Volver arriba Ir abajo

Volver arriba


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