[SOURCE]Protección contra los nombres inapropriados
2 participantes
Página 1 de 1.
[SOURCE]Protección contra los nombres inapropriados
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
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
Re: [SOURCE]Protección contra los nombres inapropriados
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.
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.