Esse foi um pedido desses dias
Vai ajudar mta gente
Parabens Oneshot .
Por Oneshot, 12 de jan. de 2013 em Linguagens de Programação
info
Grupo: Visconde
Registrado: 13/10/11
Posts: 411
Reputação: +65

Esse foi um pedido desses dias
Vai ajudar mta gente
Parabens Oneshot .
info
Grupo: Herói
Registrado: 22/04/11
Posts: 2.5k
Reputação: +293
Gênero: Masculino
Char no Tibia: Thyn Zare

Cara, parabéns, incrível!
Reputado e Postado no Portal e no Facebook =)
muuito bom, sera q funciona na versoes 981? e teria diferença entre citys premium e free?
info
Grupo: Conde
Registrado: 30/11/11
Posts: 696
Reputação: +71
Gênero: Masculino
Char no Tibia: treinador de lobo

Era o que faltava no account manager, vai da um RPG a mais no servidor parabéns cara ![]()
Este é o problema, não existe uma função nos headers para diferir entre uma cidade premium e uma cidade free. Mas irei desenvolver algo assim que puder sobre isso.
Abraços.
aaah entendi, entao ele vai dar a opção de TODAS as citys? e se for o caso, teria como fazer uma modificação de blocked ids? ai no caso usar em um global
Vou fazer algo sobre as cidades premium assim que eu puder.
Abraços.
Editado Janeiro 12 por Oneshot
de booa, qnd eu voltar pra casa irei testar seu codigo, valeu!
info
Grupo: Cavaleiro
Registrado: 04/06/12
Posts: 188
Reputação: +22
Char no Tibia: Muleke do Sangue

Uma vez eu fiz assim:
Eu deixei o acc manager pro player nascer num lugar que n tinha nada so umas decoraçoes,e dai eu eu coloquei os tps das cidades so que foi uma ideia inutil,porque n deu certo oque eu queria faze mas enfim,mt bom cara adorei.
info
Grupo: Artesão
Registrado: 03/04/09
Posts: 149
Reputação: +6
Char no Tibia: Hiporion

Té q fim achei kkk Obrigado man ajudou bastante aqui :]
info
Grupo: Marquês
Registrado: 29/10/11
Posts: 1.2k
Reputação: +134
Gênero: Masculino

Muito bom,parabéns pelo código Oneshot.
Continue assim...
info
Grupo: Campones
Registrado: 18/05/13
Posts: 70
Reputação: +9

Se eu trocar as falas de inglês, para o português, dá algum problema?
info
Grupo: Marquês
Registrado: 29/10/11
Posts: 1.2k
Reputação: +134
Gênero: Masculino

Se eu trocar as falas de inglês, para o português, dá algum problema?
É bem provável que não, mas se der algum erro crie um tópico pedindo ajuda.
info
Grupo: Marquês
Registrado: 05/07/09
Posts: 1.3k
Reputação: +732
Account Manager
Adicionando "Escolha de Cidade"
Fala, minha galera do Éks.
Vocês sabem que é minoria servidores que possuem site, uma vez que quando queremos criar um servidor (mais por lazer), é meio que inviável hostear um site junto. Os account makers, assim como são chamados os sites de servidores, dão ao jogador a opção de escolher a cidade que ele vai morar.
Já o Account Manager, aquele sistema interno de administração da conta de um jogador, não possue uma opção de escolha de cidade, o que o deixa muito limitado. Principalmente para servidores derivados, onde é quase que necessário, que o jogador possa escolher sua cidade.
Pensando nisso, desenvolvi uma série de modificações que irão adicionar ao seu servidor, a opção de "escolher uma cidade" no sistema do Account Manager.
Instalação
Você precisa seguir todos os passos abaixo com atenção o bastante para não pular nenhum, senão poderá ocorrer algum erro na compilação.
Vale lembrar que não basta modificar os arquivos passados, você precisa re-compilar seu servidor e, após, substituir o executável.
Vamos começar.
No arquivo config.lua de seu servidor, procure por:
Apague, substituindo pelas linhas abaixo:
A partir daqui, você irá precisar das sources de seu servidor.
No arquivo configmanager.h e procure pelas seguintes linhas:
Substitua por:
Procure por:
Logo abaixo adicione:
No arquivo configmanager.cpp, procure por:
m_confNumber[sPAWNPOS_X] = getGlobalNumber("newPlayerSpawnPosX", 100); m_confNumber[sPAWNPOS_Y] = getGlobalNumber("newPlayerSpawnPosY", 100); m_confNumber[sPAWNPOS_Z] = getGlobalNumber("newPlayerSpawnPosZ", 7); m_confNumber[sPAWNTOWN_ID] = getGlobalNumber("newPlayerTownId", 1);Substitua por:
m_confNumber[DEFAULT_TOWN_ID] = getGlobalNumber("newPlayerDefaultTownId", 1);Procure por:
m_confBool[sTART_CHOOSEVOC] = getGlobalBool("newPlayerChooseVoc", false);Adicione logo abaixo:
m_confBool[sTART_CHOOSETOWN] = getGlobalBool("newPlayerChooseTown", true);No arquivo iologindata.h, procure por:
Substitua por:
No arquivo iologindata.cpp, procure por:
bool IOLoginData::createCharacter(uint32_t accountId, std::string characterName, int32_t vocationId, uint16_t sex) { if(playerExists(characterName)) return false; Vocation* vocation = Vocations::getInstance()->getVocation(vocationId); Vocation* rookVoc = Vocations::getInstance()->getVocation(0); uint16_t healthMax = 150, manaMax = 0, capMax = 400, lookType = 136; if(sex % 2) lookType = 128; uint32_t level = g_config.getNumber(ConfigManager::START_LEVEL), tmpLevel = std::min((uint32_t)7, (level - 1)); uint64_t exp = 0; if(level > 1) exp = Player::getExpForLevel(level); if(tmpLevel > 0) { healthMax += rookVoc->getGain(GAIN_HEALTH) * tmpLevel; manaMax += rookVoc->getGain(GAIN_MANA) * tmpLevel; capMax += rookVoc->getGainCap() * tmpLevel; if(level > 8) { tmpLevel = level - 8; healthMax += vocation->getGain(GAIN_HEALTH) * tmpLevel; manaMax += vocation->getGain(GAIN_MANA) * tmpLevel; capMax += vocation->getGainCap() * tmpLevel; } } Database* db = Database::getInstance(); DBQuery query; query << "INSERT INTO `players` (`id`, `name`, `world_id`, `group_id`, `account_id`, `level`, `vocation`, `health`, `healthmax`, `experience`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `lookaddons`, `maglevel`, `mana`, `manamax`, `manaspent`, `soul`, `town_id`, `posx`, `posy`, `posz`, `conditions`, `cap`, `sex`, `lastlogin`, `lastip`, `skull`, `skulltime`, `save`, `rank_id`, `guildnick`, `lastlogout`, `blessings`, `online`) VALUES (NULL, " << db->escapeString(characterName) << ", " << g_config.getNumber(ConfigManager::WORLD_ID) << ", 1, " << accountId << ", " << level << ", " << vocationId << ", " << healthMax << ", " << healthMax << ", " << exp << ", 68, 76, 78, 39, " << lookType << ", 0, " << g_config.getNumber(ConfigManager::START_MAGICLEVEL) << ", " << manaMax << ", " << manaMax << ", 0, 100, " << g_config.getNumber(ConfigManager::SPAWNTOWN_ID) << ", " << g_config.getNumber(ConfigManager::SPAWNPOS_X) << ", " << g_config.getNumber(ConfigManager::SPAWNPOS_Y) << ", " << g_config.getNumber(ConfigManager::SPAWNPOS_Z) << ", 0, " << capMax << ", " << sex << ", 0, 0, 0, 0, 1, 0, '', 0, 0, 0)"; return db->query(query.str()); }Substitua por:
bool IOLoginData::createCharacter(uint32_t accountId, std::string characterName, int32_t vocationId, uint16_t sex, uint32_t townId) { if(playerExists(characterName)) return false; Vocation* vocation = Vocations::getInstance()->getVocation(vocationId); Vocation* rookVoc = Vocations::getInstance()->getVocation(0); Town* town = Towns::getInstance()->getTown(townId); uint16_t healthMax = 150, manaMax = 0, capMax = 400, lookType = 136; if(sex % 2) lookType = 128; uint32_t level = g_config.getNumber(ConfigManager::START_LEVEL), tmpLevel = std::min((uint32_t)7, (level - 1)); uint64_t exp = 0; if(level > 1) exp = Player::getExpForLevel(level); if(tmpLevel > 0) { healthMax += rookVoc->getGain(GAIN_HEALTH) * tmpLevel; manaMax += rookVoc->getGain(GAIN_MANA) * tmpLevel; capMax += rookVoc->getGainCap() * tmpLevel; if(level > 8) { tmpLevel = level - 8; healthMax += vocation->getGain(GAIN_HEALTH) * tmpLevel; manaMax += vocation->getGain(GAIN_MANA) * tmpLevel; capMax += vocation->getGainCap() * tmpLevel; } } Database* db = Database::getInstance(); DBQuery query; query << "INSERT INTO `players` (`id`, `name`, `world_id`, `group_id`, `account_id`, `level`, `vocation`, `health`, `healthmax`, `experience`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `lookaddons`, `maglevel`, `mana`, `manamax`, `manaspent`, `soul`, `town_id`, `posx`, `posy`, `posz`, `conditions`, `cap`, `sex`, `lastlogin`, `lastip`, `skull`, `skulltime`, `save`, `rank_id`, `guildnick`, `lastlogout`, `blessings`, `online`) VALUES (NULL, " << db->escapeString(characterName) << ", " << g_config.getNumber(ConfigManager::WORLD_ID) << ", 1, " << accountId << ", " << level << ", " << vocationId << ", " << healthMax << ", " << healthMax << ", " << exp << ", 68, 76, 78, 39, " << lookType << ", 0, " << g_config.getNumber(ConfigManager::START_MAGICLEVEL) << ", " << manaMax << ", " << manaMax << ", 0, 100, " << townId << ", " << town->getPosition().x << ", " << town->getPosition().y << ", " << town->getPosition().z << ", 0, " << capMax << ", " << sex << ", 0, 0, 0, 0, 1, 0, '', 0, 0, 0)"; return db->query(query.str()); }No arquivo player.h, procure por:
Substitua por:
No arquivo player.cpp, procure por:
Adicione logo abaixo:
Procure por:
Muita atenção neste passo.
Você precisará substituir todo o conteúdo do case pelo conteúdo abaixo, ou seja:
Substitua isso:
case MANAGER_ACCOUNT: { ... }Por isso:
ZD3xYbg4[/pastebin]
Demonstração
Testado em The Forgotten Server 0.4 rev3884. Pode não funcionar em versões anteriores.
Editado Janeiro 14 por Oneshot