Ir para conteúdo

Featured Replies

Postado

Salvar Mapa in-game!

 

Informações

Nome: Salvar mapa in-game!
Versão: 1.0
Código: capaverde
Testado em: theforgottenserver 0.2rc9

Descrição

Toda vez que você abrir o executável de seu servidor, ele mudará automatica o ip no config.lua. Para isso ele usa o arquivo getip.js, que funciona como um detector que diz qual ip da máquina!

 

Como usa isso?

Só colocar saveMap() em algum script, mas olha que vai lagar.
Dá pra facilmente criar um npc que salva o mapa de x em x horas, e se você for reiniciar o server por algum motivo é só kickar todo mundo e usar uma talkaction que salve. 

 

Tutorial

luascript.h, procure por:

	static int32_t luaSaveMap(lua_State* L);

luascript.cpp, dentro de registerFunctions():

	//saveMap()
	lua_register(m_luaState, "saveMap", LuaScriptInterface::luaSaveMap);

luascript.cpp:

int32_t LuaScriptInterface::luaSaveMap(lua_State* L)
{
    //saveMap()
    g_game.saveMapzord();
}

game.h(public):

        void saveMapzord(){map->saveMapzord();}

map.h, embaixo de bool saveMap();:

bool saveMapzord();

map.cpp:

bool Map::saveMapzord()
{
	IOMap* loader = new IOMap();
	bool saved = false;

	for(uint32_t tries = 0; tries < 3; tries++)
	{
		if(loader->saveMap(this, "eai.otbm", false))
		{
			saved = true;
			break;
		}
	}
		
	return saved;
	
}

iomap.h:

bool saveMap(Map* map, const std::string& identifier, bool showdialog);

iomap.cpp:

Mostrar conteúdo oculto

 

item.h, public da class Item:

//map-saving
		virtual bool serializeItemNode_OTBM(FileLoader& f) const;
		// Will write this item to the stream supplied in the argument
		virtual void serializeItemCompact_OTBM(FileLoader& f) const;
		virtual void serializeItemAttributes_OTBM(FileLoader& f) const;

item.h, public da class ItemAttributes:

virtual bool isComplex() const {return (15 & m_attributes) != 0;}

item.cpp:

Mostrar conteúdo oculto

 

fileloader.cpp:
troque as funções addU8 e addU16 por essas (ou o mapa gerado vai tá corrompido): 

bool FileLoader::addU8(uint8_t u8) {
	writeData(&u8, sizeof(u8), true);  //unescape=true, or else some FEsomething itemid might be recognized as the start of a node
	return m_lastError == ERROR_NONE;
}

bool FileLoader::addU16(uint16_t u16) {
	writeData(reinterpret_cast<uint8_t*>(&u16), sizeof(u16), true);
	return m_lastError == ERROR_NONE;
}

 

  • 2 months later...
  • 1 year later...

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.7k

Informação Importante

Confirmação de Termo