Ir para conteúdo

Featured Replies

Postado

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

  • Respostas 5
  • Visualizações 892
  • Created
  • Última resposta

Top Posters In This Topic

Postado

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

Postado

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 

 

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo