belo code kra, se for de sua autoria com certezamente merece meus parabens kra, codigo mt bom de boa utilizaçao
- Fórum
- OTServ
- Recursos
- Linguagens de Programação
- onLoginCharacter(name, ERROR_TEXT)
CA
onLoginCharacter(name, ERROR_TEXT)
Por caotic, 04 de mar. de 2014 em Linguagens de Programação
onlogincharacter
after onlogin
script
4
900
info
Grupo: Conde
Registrado: 20/09/12
Posts: 711
Reputação: +86
Char no Tibia: noé

04 de março de 2014 às 14:37
info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have

04 de março de 2014 às 16:05
belo code kra, se for de sua autoria com certezamente merece meus parabens kra, codigo mt bom de boa utilizaçao
Todos os codigos postados por min são de minha autoria




info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have
O evento onlogincharacter e um evento que executa quando o player escolhe seu caracter procedendo do onLogin assim antes mesmo do player entra in-game.
Você também pode enviar as mensagens de error que são pequenas janelas que exibem antes mesmo do player entrar.
Um exemplo seria a mensagem que alerta que a configuração do templo esta errada:
Vamos a protocolgame.cpp e localize isto:
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) { m_scriptId = creatureEvent->m_scriptId; m_interface = creatureEvent->m_interface; m_scripted = creatureEvent->m_scripted; m_isLoaded = creatureEvent->m_isLoaded; } void CreatureEvent::clearEvent() { m_scriptId = 0; m_interface = NULL; m_scripted = EVENT_SCRIPT_FALSE; m_isLoaded = false; }Seguidamente coloque abaixo:
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->second->getEventType() == CREATURE_EVENT_LOGINCHARACTER && !it->second->executeLoginCharacter(player)) result = false; } text = m_interface.getGlobalString(L, "ERROR_TEXT"); if (result) { text = "NO_ERROR"; } return text; }Depois procure:
uint32_t CreatureEvent::executeKill(Creature* creature, Creature* target, bool lastHit) { //onKill(cid, target, lastHit) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; scriptstream << "local target = " << env->addThing(target) << std::endl; scriptstream << "local lastHit = " << (lastHit ? "true" : "false") << 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__ std::stringstream desc; desc << creature->getName(); env->setEventDesc(desc.str()); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(creature)); lua_pushnumber(L, env->addThing(target)); lua_pushboolean(L, lastHit); bool result = m_interface->callFunction(3); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeKill] Call stack overflow." << std::endl; return 0; } }Adicione acima:
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; } }Vá em creatureevents.h e procure:
Embaixo coloque:
Continuando em creatureevents.h prouint32_t executeLoginCharacter(Player* player);cure:
Adicione embaixo:
Exemplo(Um script anti-mc multiplos clients) se dectado manda uma msg "MULTI MC DETECTED":
Editado Março 4 por caotic