Update 10.82 ![]()




Por Qwizer, 14 de abr. de 2015 em 11.X
info
Grupo: Campones
Registrado: 29/10/13
Posts: 19
Reputação: +2

Update 10.82 ![]()




info
Grupo: Campones
Registrado: 05/07/15
Posts: 80
Reputação: +1

Nicolas, vc pode me passa o servidor 10.82 ? por favor man estou precisando muito
info
Grupo: Campones
Registrado: 29/10/13
Posts: 19
Reputação: +2

Nicolas, vc pode me passa o servidor 10.82 ? por favor man estou precisando muito
Muda protocollogin.cpp por esse:
/**
* The Forgotten Server - a free and open-source MMORPG server emulator
* Copyright (C) 2014 Mark Samman <mark.samman@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "otpch.h"
#include "protocollogin.h"
#include "outputmessage.h"
#include "connection.h"
#include "rsa.h"
#include "configmanager.h"
#include "tools.h"
#include "iologindata.h"
#include "ban.h"
#include "game.h"
extern ConfigManager g_config;
extern Game g_game;
#ifdef ENABLE_SERVER_DIAGNOSTIC
uint32_t ProtocolLogin::protocolLoginCount = 0;
#endif
void ProtocolLogin::disconnectClient(uint8_t error, const char* message)
{
OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false);
if (output) {
output->AddByte(error);
output->AddString(message);
OutputMessagePool::getInstance()->send(output);
}
getConnection()->closeConnection();
}
bool ProtocolLogin::parseFirstPacket(NetworkMessage& msg)
{
if (g_game.getGameState() == GAME_STATE_SHUTDOWN) {
getConnection()->closeConnection();
return false;
}
uint32_t clientip = getConnection()->getIP();
/*uint16_t clientos = */
msg.get<uint16_t>();
uint16_t version = msg.get<uint16_t>();
if (version >= 971) {
msg.SkipBytes(17);
}
else {
msg.SkipBytes(12);
}
/*
* Skipped bytes:
* 4 bytes: protocolVersion (only 971+)
* 12 bytes: dat, spr, pic signatures (4 bytes each)
* 1 byte: 0 (only 971+)
*/
if (version <= 760) {
disconnectClient(0x0A, "Only clients with protocol " CLIENT_VERSION_STR " allowed!");
return false;
}
if (!RSA_decrypt(msg)) {
getConnection()->closeConnection();
return false;
}
uint32_t key[4];
key[0] = msg.get<uint32_t>();
key[1] = msg.get<uint32_t>();
key[2] = msg.get<uint32_t>();
key[3] = msg.get<uint32_t>();
enableXTEAEncryption();
setXTEAKey(key);
std::string accountName = msg.GetString();
std::string password = msg.GetString();
if (version < CLIENT_VERSION_MIN || version > CLIENT_VERSION_MAX) {
if (version >= 1076)
disconnectClient(0x0B, "Only clients with protocol " CLIENT_VERSION_STR " allowed!");
else
disconnectClient(0x0A, "Only clients with protocol " CLIENT_VERSION_STR " allowed!");
return false;
}
if (g_game.getGameState() == GAME_STATE_STARTUP) {
disconnectClient(0x0B, "Gameworld is starting up. Please wait.");
return false;
}
if (g_game.getGameState() == GAME_STATE_MAINTAIN) {
disconnectClient(0x0B, "Gameworld is under maintenance. Please re-connect in a while.");
return false;
}
BanInfo banInfo;
if (IOBan::isIpBanned(clientip, banInfo)) {
if (banInfo.reason.empty()) {
banInfo.reason = "(none)";
}
std::ostringstream ss;
ss << "Your IP has been banned until " << formatDateShort(banInfo.expiresAt) << " by " << banInfo.bannedBy << ".\n\nReason specified:\n" << banInfo.reason;
disconnectClient(0x0B, ss.str().c_str());
return false;
}
//IF THE PASSWORD FIELDS AND ACCOUNT FIELD ARE EMPTY THEN THE USER WAN'T TO USE CAST SYSTEM
bool cast_login = false;
if ((accountName.empty() && password.empty()) || (accountName.empty() && !password.empty()))
{
cast_login = true;
}
if (!cast_login && accountName.empty()) {
disconnectClient(0x0B, "Invalid account name.");
return false;
}
Account account;
if (!cast_login && !IOLoginData::loginserverAuthentication(accountName, password, account)) {
disconnectClient(0x0B, "Account name or password is not correct.");
return false;
}mounts.xml
OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false);
if (output) {
//Update premium days
g_game.updatePremium(account);
//Add MOTD
output->AddByte(0x14);
std::ostringstream ss;
ss << g_game.getMotdNum() << "\n" << g_config.getString(ConfigManager::MOTD);
output->AddString(ss.str());
//SessionKey
if (!cast_login) {
output->AddByte(0x28);
output->AddString(accountName + "\n" + password);
}
//Add char list
output->AddByte(0x64);
if (cast_login)
{
int cz = 0;
std::vector<std::string> names;
std::vector<uint32_t> counts;
cast_login = false;
uint8_t size = 0;
g_game.lockPlayers();
for (const auto& it : g_game.getPlayers())
{
if (it.second->cast.isCasting && (it.second->cast.password == "" || it.second->cast.password == password))
{
names.push_back(it.second->getName());
counts.push_back(it.second->getCastViewerCount());
it.second->getCastViewerCount();
cast_login = true;
size++;
}
}
g_game.unlockPlayers();
if (cast_login)
{
output->AddByte(size); // number of worlds
for (auto it = counts.begin(); it != counts.end(); it++)
{
output->AddByte(cz); // world id
std::ostringstream os;
os << (*it);
output->AddString(os.str() + std::string(" viewers"));
output->AddString(g_config.getString(ConfigManager::IP));
output->add<uint16_t>(g_config.getNumber(ConfigManager::GAME_PORT));
output->AddByte(0);
cz++;
}
output->AddByte((uint8_t)cz);
int world = 0;
for (auto it : names)
{
output->AddByte(world);
output->AddString(it);
world++;
}
}
}
if (!cast_login)
{
output->AddByte(1); // number of worlds
output->AddByte(0); // world id
output->AddString(g_config.getString(ConfigManager::SERVER_NAME));
output->AddString(g_config.getString(ConfigManager::IP));
output->add<uint16_t>(g_config.getNumber(ConfigManager::GAME_PORT));
output->AddByte(0);
output->AddByte((uint8_t)account.charList.size());
for (const std::string& characterName : account.charList) {
output->AddByte(0);
output->AddString(characterName);
}
}
// Add premium days
if (version >= 1080) {
if (version >= 1082)
output->AddByte(0);
output->AddByte(g_config.getBoolean(ConfigManager::FREE_PREMIUM) || account.premiumDays > 0);
output->add<uint32_t>(g_config.getBoolean(ConfigManager::FREE_PREMIUM) ? 0 : (time(nullptr) + (account.premiumDays * 86400)));
} else {
output->add<uint16_t>(g_config.getBoolean(ConfigManager::FREE_PREMIUM) ? 0xFFFF : account.premiumDays);
}
OutputMessagePool::getInstance()->send(output);
}
getConnection()->closeConnection();
return true;
}
void ProtocolLogin::onRecvFirstMessage(NetworkMessage& msg)
{
parseFirstPacket(msg);
}
Muda definitions.h
#define CLIENT_VERSION_STR "10.82"
Add outfits.xml
<!-- Mulher outfits --> <outfit type="0" looktype="759" name="Não tem nome" premium="1" unlocked="1" enabled="1" /> <!-- Homem outfits --> <outfit type="1" looktype="760" name="Nao tem nome" premium="1" unlocked="1" enabled="1" />
Add mounts.xml
<mount id="84" clientid="761" name="Teste1" speed="10" premium="yes" />
<mount id="85" clientid="762" name="Teste2" speed="10" premium="yes" />
<mount id="86" clientid="763" name="Teste3" speed="10" premium="yes" />
Pronto! ![]()
info
Grupo: Marquês
Registrado: 03/02/13
Posts: 1.2k
Reputação: +254
Gênero: Masculino
Char no Tibia: Partiu Baladinha

Update 10.82
Poderia passar os looktype?
info
Grupo: Campones
Registrado: 05/07/15
Posts: 80
Reputação: +1

Muda protocollogin.cpp por esse:
/** * The Forgotten Server - a free and open-source MMORPG server emulator * Copyright (C) 2014 Mark Samman <mark.samman@gmail.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "otpch.h" #include "protocollogin.h" #include "outputmessage.h" #include "connection.h" #include "rsa.h" #include "configmanager.h" #include "tools.h" #include "iologindata.h" #include "ban.h" #include "game.h" extern ConfigManager g_config; extern Game g_game; #ifdef ENABLE_SERVER_DIAGNOSTIC uint32_t ProtocolLogin::protocolLoginCount = 0; #endif void ProtocolLogin::disconnectClient(uint8_t error, const char* message) { OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false); if (output) { output->AddByte(error); output->AddString(message); OutputMessagePool::getInstance()->send(output); } getConnection()->closeConnection(); } bool ProtocolLogin::parseFirstPacket(NetworkMessage& msg) { if (g_game.getGameState() == GAME_STATE_SHUTDOWN) { getConnection()->closeConnection(); return false; } uint32_t clientip = getConnection()->getIP(); /*uint16_t clientos = */ msg.get<uint16_t>(); uint16_t version = msg.get<uint16_t>(); if (version >= 971) { msg.SkipBytes(17); } else { msg.SkipBytes(12); } /* * Skipped bytes: * 4 bytes: protocolVersion (only 971+) * 12 bytes: dat, spr, pic signatures (4 bytes each) * 1 byte: 0 (only 971+) */ if (version <= 760) { disconnectClient(0x0A, "Only clients with protocol " CLIENT_VERSION_STR " allowed!"); return false; } if (!RSA_decrypt(msg)) { getConnection()->closeConnection(); return false; } uint32_t key[4]; key[0] = msg.get<uint32_t>(); key[1] = msg.get<uint32_t>(); key[2] = msg.get<uint32_t>(); key[3] = msg.get<uint32_t>(); enableXTEAEncryption(); setXTEAKey(key); std::string accountName = msg.GetString(); std::string password = msg.GetString(); if (version < CLIENT_VERSION_MIN || version > CLIENT_VERSION_MAX) { if (version >= 1076) disconnectClient(0x0B, "Only clients with protocol " CLIENT_VERSION_STR " allowed!"); else disconnectClient(0x0A, "Only clients with protocol " CLIENT_VERSION_STR " allowed!"); return false; } if (g_game.getGameState() == GAME_STATE_STARTUP) { disconnectClient(0x0B, "Gameworld is starting up. Please wait."); return false; } if (g_game.getGameState() == GAME_STATE_MAINTAIN) { disconnectClient(0x0B, "Gameworld is under maintenance. Please re-connect in a while."); return false; } BanInfo banInfo; if (IOBan::isIpBanned(clientip, banInfo)) { if (banInfo.reason.empty()) { banInfo.reason = "(none)"; } std::ostringstream ss; ss << "Your IP has been banned until " << formatDateShort(banInfo.expiresAt) << " by " << banInfo.bannedBy << ".\n\nReason specified:\n" << banInfo.reason; disconnectClient(0x0B, ss.str().c_str()); return false; } //IF THE PASSWORD FIELDS AND ACCOUNT FIELD ARE EMPTY THEN THE USER WAN'T TO USE CAST SYSTEM bool cast_login = false; if ((accountName.empty() && password.empty()) || (accountName.empty() && !password.empty())) { cast_login = true; } if (!cast_login && accountName.empty()) { disconnectClient(0x0B, "Invalid account name."); return false; } Account account; if (!cast_login && !IOLoginData::loginserverAuthentication(accountName, password, account)) { disconnectClient(0x0B, "Account name or password is not correct."); return false; }mounts.xml OutputMessage_ptr output = OutputMessagePool::getInstance()->getOutputMessage(this, false); if (output) { //Update premium days g_game.updatePremium(account); //Add MOTD output->AddByte(0x14); std::ostringstream ss; ss << g_game.getMotdNum() << "\n" << g_config.getString(ConfigManager::MOTD); output->AddString(ss.str()); //SessionKey if (!cast_login) { output->AddByte(0x28); output->AddString(accountName + "\n" + password); } //Add char list output->AddByte(0x64); if (cast_login) { int cz = 0; std::vector<std::string> names; std::vector<uint32_t> counts; cast_login = false; uint8_t size = 0; g_game.lockPlayers(); for (const auto& it : g_game.getPlayers()) { if (it.second->cast.isCasting && (it.second->cast.password == "" || it.second->cast.password == password)) { names.push_back(it.second->getName()); counts.push_back(it.second->getCastViewerCount()); it.second->getCastViewerCount(); cast_login = true; size++; } } g_game.unlockPlayers(); if (cast_login) { output->AddByte(size); // number of worlds for (auto it = counts.begin(); it != counts.end(); it++) { output->AddByte(cz); // world id std::ostringstream os; os << (*it); output->AddString(os.str() + std::string(" viewers")); output->AddString(g_config.getString(ConfigManager::IP)); output->add<uint16_t>(g_config.getNumber(ConfigManager::GAME_PORT)); output->AddByte(0); cz++; } output->AddByte((uint8_t)cz); int world = 0; for (auto it : names) { output->AddByte(world); output->AddString(it); world++; } } } if (!cast_login) { output->AddByte(1); // number of worlds output->AddByte(0); // world id output->AddString(g_config.getString(ConfigManager::SERVER_NAME)); output->AddString(g_config.getString(ConfigManager::IP)); output->add<uint16_t>(g_config.getNumber(ConfigManager::GAME_PORT)); output->AddByte(0); output->AddByte((uint8_t)account.charList.size()); for (const std::string& characterName : account.charList) { output->AddByte(0); output->AddString(characterName); } } // Add premium days if (version >= 1080) { if (version >= 1082) output->AddByte(0); output->AddByte(g_config.getBoolean(ConfigManager::FREE_PREMIUM) || account.premiumDays > 0); output->add<uint32_t>(g_config.getBoolean(ConfigManager::FREE_PREMIUM) ? 0 : (time(nullptr) + (account.premiumDays * 86400))); } else { output->add<uint16_t>(g_config.getBoolean(ConfigManager::FREE_PREMIUM) ? 0xFFFF : account.premiumDays); } OutputMessagePool::getInstance()->send(output); } getConnection()->closeConnection(); return true; } void ProtocolLogin::onRecvFirstMessage(NetworkMessage& msg) { parseFirstPacket(msg); }Muda definitions.h
#define CLIENT_VERSION_STR "10.82"Add outfits.xml
<!-- Mulher outfits --> <outfit type="0" looktype="759" name="Não tem nome" premium="1" unlocked="1" enabled="1" /> <!-- Homem outfits --> <outfit type="1" looktype="760" name="Nao tem nome" premium="1" unlocked="1" enabled="1" />Add mounts.xml
<mount id="84" clientid="761" name="Teste1" speed="10" premium="yes" /> <mount id="85" clientid="762" name="Teste2" speed="10" premium="yes" /> <mount id="86" clientid="763" name="Teste3" speed="10" premium="yes" />Pronto!
Muito obrigado Nicolas, vlw msm man ah vc tem tfs 1.2 10.82 para windows 64 bits ??
info
Grupo: Campones
Registrado: 29/10/13
Posts: 19
Reputação: +2

Poderia passar os looktype?
outfits.xml
<!-- Mulher outfits --> <outfit type="0" looktype="759" name="Não tem nome" premium="1" unlocked="1" enabled="1" /> <!-- Homem outfits --> <outfit type="1" looktype="760" name="Nao tem nome" premium="1" unlocked="1" enabled="1" />
mounts.xml
<mount id="84" clientid="761" name="Teste1" speed="10" premium="yes" />
<mount id="85" clientid="762" name="Teste2" speed="10" premium="yes" />
<mount id="86" clientid="763" name="Teste3" speed="10" premium="yes" />
info
Grupo: Marquês
Registrado: 03/02/13
Posts: 1.2k
Reputação: +254
Gênero: Masculino
Char no Tibia: Partiu Baladinha

outfits.xml
<!-- Mulher outfits --> <outfit type="0" looktype="759" name="Não tem nome" premium="1" unlocked="1" enabled="1" /> <!-- Homem outfits --> <outfit type="1" looktype="760" name="Nao tem nome" premium="1" unlocked="1" enabled="1" />mounts.xml
<mount id="84" clientid="761" name="Teste1" speed="10" premium="yes" /> <mount id="85" clientid="762" name="Teste2" speed="10" premium="yes" /> <mount id="86" clientid="763" name="Teste3" speed="10" premium="yes" />
Aqui tá muito doido... a mount foi normal, mas as outfits não vão nem com macumba.
info
Grupo: Campones
Registrado: 05/07/15
Posts: 80
Reputação: +1

Nicolas, vc usar que gesior ? vc pode me passa ? estou precisando de um gesior pq o meu tá dando error na latestnews
@up
Editado Outubro 3 por marcio1234
info
Grupo: Campones
Registrado: 29/10/13
Posts: 19
Reputação: +2

Aqui tá muito doido... a mount foi normal, mas as outfits não vão nem com macumba.
Renicia o server pq as outfits não dar reload ![]()
Onde eu coloquei name="Nao tem nome" coloca um nome pra essas outfits o tibia normal ainda não deu nome pra essa outfits e mounts.
info
Grupo: Campones
Registrado: 24/09/15
Posts: 45
Reputação: +1

alguem pode me ajudar ( POR FAVORRR )
ou me arruma um website que funcione com o xampp pra essa verçao do OT ,
ou me ajuda no erro que ta dando na hora de abrir o localhost da esse erro
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\xampp\htdocs\config\config.php on line 4
ja mudei a linha, coloquei barra, tirei barra, inverti barra , nada resolveu esse erro.
Obs ; esse erro acontece na hora de configura a parte do apache (usando o website que vem com ele)
com a barra no final /
ele da esse erro:
Error occured!Error ID: #C-5
More info: ERROR: #C-5 : Class::ConfigPHP - Key passwordType doesn't exist.
File: C:\xampp\htdocs\classes/configphp.php Line: 96
File: C:\xampp\htdocs\system/load.database.php Line: 38
File: C:\xampp\htdocs/index.php Line: 21
Editado Outubro 3 por boyfrempss
info
Grupo: Marquês
Registrado: 03/02/13
Posts: 1.2k
Reputação: +254
Gênero: Masculino
Char no Tibia: Partiu Baladinha

Renicia o server pq as outfits não dar reload
Onde eu coloquei name="Nao tem nome" coloca um nome pra essas outfits o tibia normal ainda não deu nome pra essa outfits e mounts.
Tô ligado amigão, mas nem assim funciona.. tá estranho, rs.
info
Grupo: Campones
Registrado: 24/09/15
Posts: 45
Reputação: +1

consegui arrumar o website, o problema tava no config.lua tive que adicionar uma linha password "shai1" ...
outra duvida como acesso o admin painel do website, pois nao tenho a senha e nao sei como configura uma nova
info
Grupo: Campones
Registrado: 28/08/09
Posts: 2
Reputação: 0
Char no Tibia: Emperor Brand

A database ñ preciso atualizar né?
info
Grupo: Campones
Registrado: 24/09/15
Posts: 45
Reputação: +1
como eu faço pra instalar o site no xampp ?
esse otpainel eu precisso assina pra usar, gostaria de rodar esse servidor mais nao tenho website pra rodar ele no xampp? oque eu faço ?