Ir para conteúdo
Entre para seguir isso  
Zero

Teleport Record - Simple Age OTServ

Recommended Posts

Zero    0
Zero

Olá galera, esse é mais um código do Simple Age OTServ que eu desenvolvi.

 

Esse código foi idealizado por Vufusuf.

 

Esses três comandos para GameMasters são bastante úteis, pois lembrar das coordenadas é complicado. Não está entendendo? Vou resumir:

Você está no local que você quer gravar as coordenadas. Você dá o comando /recordpos nome_do_registro, exemplo: /recordpos OrcFortress.

Feito isso o registro de teleporte estará salvo, e sempre que quiser basta utilizar o comando /tpos OrcFortress para ir até a coordenada registrada.

Agora ainda temos o /delpos para deletar registros.

 

Sem mais, vamos ao código.

 

Em commands.h, adicione as funções junto as demais:

	bool recordPosition(Creature *creature, const std::string& cmd, const std::string& param);

bool teleportToRecordedPosition(Creature *creature, const std::string& cmd, const std::string& param);

bool deleteTeleportRecord(Creature *creature, const std::string& cmd, const std::string& param);

 

Em commands.cpp, adicione as funções:

bool Commands::deleteTeleportRecord(Creature *creature, const std::string& cmd, const std::string& param){

    std::stringstream spath;

    spath << g_config.getString(ConfigManager::DATA_DIRECTORY) << "teleport\\" << param << ".txt";

    if(fileExists(spath.str().c_str())){

        remove(spath.str().c_str());

        std::string sret = "Registro " + param + " apagado.";

        creature->getPlayer()->sendTextMessage(MSG_STATUS_SMALL, sret);

        creature->getPlayer()->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, sret);

        return true;

    }

    else{

        std::string sret = "Registro " + param + " não encontrado.";

        creature->getPlayer()->sendTextMessage(MSG_STATUS_SMALL, sret);

        creature->getPlayer()->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, sret);

        return false;

    }

}



bool Commands::recordPosition(Creature *creature, const std::string& cmd, const std::string& param){

   std::stringstream spath;

   spath << g_config.getString(ConfigManager::DATA_DIRECTORY) << "teleport\\" << param << ".txt";

   if(fileExists(spath.str().c_str())){

       std::string sret = "Registro " + param + " já existe.";

       creature->getPlayer()->sendTextMessage(MSG_STATUS_SMALL, sret);

       creature->getPlayer()->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, sret);

       return false;

   }

   std::ofstream recordposFile(spath.str().c_str(), std::ios_base::out);

   recordposFile << creature->getPosition().x << "," << creature->getPosition().y << "," << creature->getPosition().z;

   recordposFile.close();

   std::stringstream sret;

   sret << "Posição " << param << " registrada.";

   creature->getPlayer()->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, sret.str().c_str());

   return true;

}



bool Commands::teleportToRecordedPosition(Creature *creature, const std::string& cmd, const std::string& param){

   if(!creature->getPlayer())

       return false;

   std::string s;

   char c;

   std::stringstream spath;

   spath << g_config.getString(ConfigManager::DATA_DIRECTORY) << "teleport\\" << param << ".txt";

   std::ifstream recordposFile(spath.str().c_str(), std::ios_base::in);

   if(!recordposFile){

       std::string sret = "Registro " + param + " não encontrado.";

       creature->getPlayer()->sendTextMessage(MSG_STATUS_SMALL, sret);

       creature->getPlayer()->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, sret);

       return false;

   }

   while(!recordposFile.eof()){

       recordposFile.get(c);

       if(!recordposFile.eof()){ s += c; };

   }

   recordposFile.close();

   

   boost::char_separator<char> sepc(",");

   tokenizer stokens(s, sepc);

   tokenizer::iterator sit = stokens.begin();

   Position tPos;

   tPos.x = atoi((*sit).c_str());

   sit++;

   tPos.y = atoi((*sit).c_str());

   sit++;

   tPos.z = atoi((*sit).c_str());

   Tile *tileToGo = game->getTile(tPos.x, tPos.y, tPos.z);

    

   if(!tileToGo || game->internalTeleport(creature, tileToGo->getTilePosition()) != RET_NOERROR){

        creature->getPlayer()->sendTextMessage(MSG_STATUS_SMALL, "Coordenada inválida");

        creature->getPlayer()->sendTextMessage(MSG_STATUS_CONSOLE_BLUE, "Coordenada inválida");

        return false;

   }

   else

       game->addMagicEffect(tileToGo->getTilePosition(), NM_ME_ENERGY_AREA);

   return true;

}

 

E no vetor de comandos adicione:

	{"/recordpos",&Commands::recordPosition},

{"/tpos",&Commands::teleportToRecordedPosition},

{"/delpos",&Commands::deleteTeleportRecord},

 

Para encerrarmos com o command.cpp, junto as diretivas #include. Caso ainda não exista uma igual a esta, adicione:

#include <fstream>

 

Em data\commands.xml adicione as linhas:

<command cmd="/tpos" access="3" />

<command cmd="/recordpos" access="3" />

<command cmd="/delpos" access="3" />

Altere o acesso para qual você quiser, por padrão 3 é para god, 2 para GameMasters e 1 para tutor.

 

Agora crie uma pasta chamada "teleport" dentro da pasta "data" do seu servidor. Os registros serão salvos em data\teleport\nome_do_registro.txt.

 

Testado e aprovado na SVN 24/02

 

Esse e diversos outros tópicos denunciam que você pode esperar muito do Simple Age OTServ.

 

Abraços!

Compartilhar este post


Link para o post
bruxo    0
bruxo

Pqp Zero, acho que esse é um dos melhores codes que eu já vi aqui o.O.

 

Acho que a única coisa que falta pra melhorar isso é que esses records vão para um log que você pode editar por lá, entendeu?

 

Mas mesmo assim esse code é MUITO BOM, valeu por liberar ^^.

Compartilhar este post


Link para o post
Zero    0
Zero

Muito bem lembrado bruxo, vou editar o tópico.

 

Esqueci de avisar que os registros vão para a pasta data\teleport. ^^

 

E é muito fácil editar os registros já que no arquivo só tem as coordenadas.

 

Exemplo, registro teste:

Originally posted by teste.txt

1777,1661,7

 

Abraços!

Compartilhar este post


Link para o post
Vufusuf    1
Vufusuf

Eita pipoco, dei a idéia agora poco tu ja fez.

Rapidin eim ^^

 

Só uma dúvida Zero.

Exemplo:

 

O Gm Vufusuf, da um "/recordpos DemonHell", Todos os Gms poderão dar "/tpos DemonHell"? ou cada GM tem sua lista de cordenatas gravadas?

Compartilhar este post


Link para o post
Zero    0
Zero

Programei para todos os GMs utilizarem os mesmos registros, mas é fácil de fazer registros privados.

 

Abraços!

Compartilhar este post


Link para o post
Jackson Zani    1
Jackson Zani

Ótimo code Zero!

Muito bom mesmo hehehe !

Abraços.

Compartilhar este post


Link para o post
Lordfire    110
Lordfire

caramba Zero

vc é, desculpe, FODAAAAA!

mo bom esse code

nao squeça qu tem que add no command.xml!

pelo mnos aqui nao pegou!

Compartilhar este post


Link para o post
Dr0p    0
Dr0p

Muito bom!

Como sempre Zero(Strider) fazendo ótimos codes, tanto pra VB quanto pra OT, é isso ae :D

Compartilhar este post


Link para o post
Zero    0
Zero

Obrigado galera, mas eu não fiz nada mais nada menos que codificar. Qualquer desenvolvedor faria isso, já ter essa idéia é algo mais difícil, por isso devemos parabenizar nosso amigo Vufusuf. ^^

 

Aqui funcionou sem adicionar no commands.xml, mas em todo caso adicionarei esse comentário ao tópico também.

 

Abraços!

Compartilhar este post


Link para o post
Sakz    0
Sakz

@Zero Um Dois...

 

eae cara...

 

meu deus como vc faz isso O.o

 

eu sempre quis isso na epoca q eu tinha meu ot x)

eu usava o /goto "algum monstro" ateh axa o lugar x)

 

vlw ae!

 

(funciona em todas versoes?)

 

flw

Compartilhar este post


Link para o post
DuDz    0
DuDz

Zero, inovando em cada um de seus codes! :D

 

Muito bom, mesmo. Vai facilitar bastante.

 

Podem esperar isso, e muito mais no SimpleAge OTServ, que vem aí pra revolucionar o mundo dos OTServ. ;)

 

Abraços,

 

//DuD

Compartilhar este post


Link para o post
Zero    0
Zero

Sanu, eu desenvolvi no SVN 24/02 que é um dos mais recentes SVNs e é para a versão 7.92 do Tibia Client, se funciona em outras versões com esse mesmo código, não estou apto a te dizer. Mas como eu não utilizei códigos restritos a versão 7.92 do Tibia Client, acho que deve funcionar em quase todas as SVNs. A menos que algum dos códigos antigos tenha sido modificado.

 

Abraços!

Compartilhar este post


Link para o post
Dr0p    0
Dr0p

Deu alguns erros:

 

commands.cpp: In member function `bool Commands::recordPosition(Creature*, const std::string&, const std::string&)':

commands.cpp:1698: error: variable `std::ofstream recordposFile' has initializer but incomplete type



commands.cpp: In member function `bool Commands::teleportToRecordedPosition(Creature*, const std::string&, const std::string&)':

commands.cpp:1712: error: variable `std::ifstream recordposFile' has initializer but incomplete type

Compartilhar este post


Link para o post
Zero    0
Zero

Obrigado por reportar Dr0p.

 

Havia me esquecido de avisa-los que se faz necessário a inclusão do header iostream.

 

Utilize:

#include <fstream>

 

Abraços!

Compartilhar este post


Link para o post
Arcavier    0
Arcavier

O.o

 

eu ja tinha compilado e deu certo antes de vc posta este include

 

EDIT

 

a pod cre acabei d conferi aki e ja estava incluido :)

Compartilhar este post


Link para o post
Dr0p    0
Dr0p

Aee, agora deu certinho =)

Adicionei no meu ot :B

Compartilhar este post


Link para o post
lews    0
lews

mto boa ideia!

 

soh uma dica: seria melhor q as posiçoes ficassem gravadas num unico arkivo xml na pasta data. ;)

Compartilhar este post


Link para o post
Zero    0
Zero

lews, pensei em colocar os registros em um unico arquivo sim. Mesmo que não fosse XML. Mas como também desenvolvi um comando para deletar registros achei mais fácil desenvolver dessa forma. Mas é provável que até o Simple Age sair já esteja programado melhor.

 

Acontece que no começo do projeto é meio corrido.

Compartilhar este post


Link para o post
Convidado be mine   
Convidado be mine

alguem me ajuda como eu faço pra axa comands.cpp esses negocios so novo me ajudem plx :? :?:

Compartilhar este post


Link para o post
Raphael Carnaúba    1
Raphael Carnaúba

Otimo code zero, eu ja fiz igual so que diferente é um Teleport List em XML :) feito pra nova SVN

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×