Postado Março 2, 2015 10 anos 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 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 Editado Março 2, 2015 10 anos por Emersonssss (veja o histórico de edições) Skype : emersonaaron Se Te ajudei não me REP+ isso não muda nada! kkkkkkkkkkkk
Postado Março 2, 2015 10 anos A diferença dela para a função onLogin seria que poderia mandar uma mensagem pro client de erro?
Postado Março 2, 2015 10 anos Autor A diferença dela para a função onLogin seria que poderia mandar uma mensagem pro client de erro? Yeah Skype : emersonaaron Se Te ajudei não me REP+ isso não muda nada! kkkkkkkkkkkk
Postado Março 2, 2015 10 anos 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.
Postado Março 2, 2015 10 anos 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
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.