Ir para conteúdo
  • Cadastre-se

Programa%C3%A7%C3%A3o [C++] function onLoginCharacter(cid, ERROR_TEXT)


Posts Recomendados

Salve Galera, primeiramente eu tentei postar o script na área certa porem o Button de "Criar Novo Tópico"  está desativado, então vou postar aqui mesmo e depois um moderador move.
Se colocarem aquele aviso tosco de "Presta atenção da proxima vez" não posto mais nada relacionado a Source.

Vamos ao que interessa, olhando pela interneti achei um codigo muito interessante.
 

"onLoginCharacter" porém no topico o código estava incompleto e eu tive que termina-lo. Não sei se posso Postar mais como eu modifiquei tenho diretos :D e como o proprio nome diz Open Source, não é justo eu guarda esse maravilhoso script só pra mim.

Estou estudando C++ e adoro fazer modificações direto da Source e sem mais ....

 

Vamos a protocolgame.cpp e localize isto:

player->setID();
		if(!IOLoginData::getInstance()->loadPlayer(player, name, true))
		{
			disconnectClient(0x14, "Your character could not be loaded.");
			return false;
		}

Embaixo coloque:
 

std::string text = g_creatureEvents->loginCharacter(player);
std::string str ("NO_ERROR");
std::size_t found = text.find(str);
  if (found==std::string::npos)
  {            
	disconnectClient(0x14, text.c_str());                                      
	return false;
  }

Depois vá creatureevents.cpp e procure:

void CreatureEvent::copyEvent(CreatureEvent* creatureEvent)

Abaixo dessa Function Adicione :
 

std::string CreatureEvents::loginCharacter(Player* player)
{
bool result = true;
lua_State* L = m_interface.getState();
std::string text;
std::cout << text << std::endl;
for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it)
{
if((*it)->getEventType() == CREATURE_EVENT_LOGINCHARACTER  && !(*it)->executeLoginCharacter(player))
result = false;
}
text = m_interface.getGlobalString(L, "ERROR_TEXT");
if (result) {
          text = "NO_ERROR";
}

return text;
}

Depois procure:

uint32_t CreatureEvent::executeKill

Abaixo dessa Function Adicione :

uint32_t CreatureEvent::executeLoginCharacter(Player* player)
{
//onLoginCharacter(cid)
if(m_interface->reserveEnv())
{
                                
ScriptEnviroment* env = m_interface->getEnv();
if(m_scripted == EVENT_SCRIPT_BUFFER)
{
std::stringstream scriptstream;
scriptstream << "local cid = " << env->addThing(player) << std::endl;
scriptstream << "ERROR_TEXT = " << "LOGIN BLOCKED" << std::endl;


scriptstream << m_scriptData;
bool result = true;
if(m_interface->loadBuffer(scriptstream.str()))
{
lua_State* L = m_interface->getState();
result = m_interface->getGlobalBool(L, "_result", true);
}


m_interface->releaseEnv();
return result;
}
else
{
#ifdef __DEBUG_LUASCRIPTS__
char desc[35];
sprintf(desc, "%s", player->getName().c_str());
env->setEventDesc(desc);
#endif


env->setScriptId(m_scriptId, m_interface);


lua_State* L = m_interface->getState();
m_interface->pushFunction(m_scriptId);


lua_pushnumber(L, env->addThing(player));
lua_pushstring(L, "LOGIN BLOCKED");


bool result = m_interface->callFunction(2);
m_interface->releaseEnv();
return result;
}
}
else
{
std::cout << "[Error - CreatureEvent::executeTextEdit] Call stack overflow." << std::endl;
return 0;
}
}

Procure:
 

else if(type == "kill")
		_type = CREATURE_EVENT_KILL;

Adicione Abaixo:

else if(type == "logincharacter")
		_type = CREATURE_EVENT_LOGINCHARACTER;

Procure:

case CREATURE_EVENT_KILL:
			return "onKill";

Adicione Abaixo:

case CREATURE_EVENT_LOGINCHARACTER:
			return "onLoginCharacter";

Procure:

case CREATURE_EVENT_KILL:
			return "cid, target, damage, flags, war";

Adicione Abaixo:

case CREATURE_EVENT_LOGINCHARACTER:
			return "cid";

Vá em creatureevents.h e procure:

CREATURE_EVENT_LOGIN,

Adicione Abaixo:

CREATURE_EVENT_LOGINCHARACTER,

Procure:

bool playerLogin(Player* player);

Embaixo coloque:

std::string loginCharacter(Player* player);

Procure:

uint32_t executeCombat(

Embaixo coloque:

uint32_t executeLoginCharacter(Player* player);

Prontinho o Sistema ta Instalado.

 

Um Exemplo de como usar é um Anti-MC

ERROR_TEXT = "MULTI MC DETECTED"

function onLoginCharacter(cid, ERROR_TEXT)
local tid = getPlayersOnline(cid)
for i=1, #tid do
if getPlayerIp(cid) == getPlayerIp(tid[i]) then
return false
end
end


return true
end

XML :

<event type="logincharacter" name="LoginCharacter" event="script" value="LoginCharacter.lua"/>

Login.lua

registerCreatureEvent(cid, "LoginCharacter")

Prontinho bom profeito e Boa Noite <3

 

Creditos ?

Caotic / Emerson Henrique :D

Editado por Emersonssss (veja o histórico de edições)

Skype : emersonaaron Se Te ajudei não me REP+ isso não muda nada! kkkkkkkkkkkk

Link para o post
Compartilhar em outros sites

A diferença dela para a função onLogin seria que poderia mandar uma mensagem pro client de erro?



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites

A diferença dela para a função onLogin seria que poderia mandar uma mensagem pro client de erro?

Yeah :D

Skype : emersonaaron Se Te ajudei não me REP+ isso não muda nada! kkkkkkkkkkkk

Link para o post
Compartilhar em outros sites

Muito boa brother.

Rep+ merecido.

Gosta do meu trabalho?

Curta e siga a página do meu projeto de 2016 e 2017 (Lab Z Games) que trará vários servidores OTServs.

 

Atenciosamente,
Adriano Swatt'

 

Para ver meus tutoriais acesse meu perfil.

 

cbCyOSZ.png

Link para o post
Compartilhar em outros sites

Bom.. não era necessário todo essa função. Eu faria apenas uma função para enviar o erro para o client, como por exemplo:

doSendErrorToClient(cid, errorString)

 

Eu acho que ficaria mais fácil, porém é só o meu modo de fazer, mas eu gostei dos seus códigos e como você disse que está aprendendo, estão excelentes. Parabéns.

Tony Araújo  ;D 

 

Link para o post
Compartilhar em outros sites
  • 3 weeks later...

Oq esta função faz?

"O sucesso é uma consequência e não um objetivo. A persistência é o caminho do êxito".
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo