mirror of
https://github.com/EQEmu/Server.git
synced 2026-03-31 10:22:32 +00:00
Initial
This commit is contained in:
parent
be42b73f5c
commit
a7c1c85f71
@ -111,6 +111,8 @@ SET(common_sources
|
|||||||
net/websocket_server.cpp
|
net/websocket_server.cpp
|
||||||
net/websocket_server_connection.cpp
|
net/websocket_server_connection.cpp
|
||||||
patches/patches.cpp
|
patches/patches.cpp
|
||||||
|
patches/larion.cpp
|
||||||
|
patches/larion_limits.cpp
|
||||||
patches/sod.cpp
|
patches/sod.cpp
|
||||||
patches/sod_limits.cpp
|
patches/sod_limits.cpp
|
||||||
patches/sof.cpp
|
patches/sof.cpp
|
||||||
@ -653,7 +655,11 @@ SET(common_headers
|
|||||||
net/websocket_server.h
|
net/websocket_server.h
|
||||||
net/websocket_server_connection.h
|
net/websocket_server_connection.h
|
||||||
patches/patches.h
|
patches/patches.h
|
||||||
patches/sod.h
|
patches/larion.h
|
||||||
|
patches/larion_limits.h
|
||||||
|
patches/larion_ops.h
|
||||||
|
patches/larion_structs.h
|
||||||
|
patches/sod.h
|
||||||
patches/sod_limits.h
|
patches/sod_limits.h
|
||||||
patches/sod_ops.h
|
patches/sod_ops.h
|
||||||
patches/sod_structs.h
|
patches/sod_structs.h
|
||||||
@ -739,6 +745,10 @@ SOURCE_GROUP(Net FILES
|
|||||||
|
|
||||||
SOURCE_GROUP(Patches FILES
|
SOURCE_GROUP(Patches FILES
|
||||||
patches/patches.h
|
patches/patches.h
|
||||||
|
patches/larion.h
|
||||||
|
patches/larion_limits.h
|
||||||
|
patches/larion_ops.h
|
||||||
|
patches/larion_structs.h
|
||||||
patches/sod.h
|
patches/sod.h
|
||||||
patches/sod_limits.h
|
patches/sod_limits.h
|
||||||
patches/sod_ops.h
|
patches/sod_ops.h
|
||||||
@ -767,6 +777,8 @@ SOURCE_GROUP(Patches FILES
|
|||||||
patches/uf_ops.h
|
patches/uf_ops.h
|
||||||
patches/uf_structs.h
|
patches/uf_structs.h
|
||||||
patches/patches.cpp
|
patches/patches.cpp
|
||||||
|
patches/larion.cpp
|
||||||
|
patches/larion_limits.cpp
|
||||||
patches/sod.cpp
|
patches/sod.cpp
|
||||||
patches/sod_limits.cpp
|
patches/sod_limits.cpp
|
||||||
patches/sof.cpp
|
patches/sof.cpp
|
||||||
|
|||||||
@ -36,7 +36,8 @@ namespace EQ
|
|||||||
SoD, // Build: 'Dec 19 2008 15:22:49'
|
SoD, // Build: 'Dec 19 2008 15:22:49'
|
||||||
UF, // Build: 'Jun 8 2010 16:44:32'
|
UF, // Build: 'Jun 8 2010 16:44:32'
|
||||||
RoF, // Build: 'Dec 10 2012 17:35:44'
|
RoF, // Build: 'Dec 10 2012 17:35:44'
|
||||||
RoF2 // Build: 'May 10 2013 23:30:08'
|
RoF2, // Build: 'May 10 2013 23:30:08'
|
||||||
|
Larion
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ClientVersionBitmask : uint32 {
|
enum ClientVersionBitmask : uint32 {
|
||||||
|
|||||||
129
common/patches/larion.cpp
Normal file
129
common/patches/larion.cpp
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
/* EQEMu: Everquest Server Emulator
|
||||||
|
|
||||||
|
Copyright (C) 2001-2016 EQEMu Development Team (http://eqemulator.net)
|
||||||
|
|
||||||
|
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; version 2 of the License.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY except by those people which sell it, which
|
||||||
|
are required to give you total support for your newly bought product;
|
||||||
|
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../global_define.h"
|
||||||
|
#include "../eqemu_config.h"
|
||||||
|
#include "../eqemu_logsys.h"
|
||||||
|
#include "larion.h"
|
||||||
|
#include "../opcodemgr.h"
|
||||||
|
|
||||||
|
#include "../eq_stream_ident.h"
|
||||||
|
#include "../crc32.h"
|
||||||
|
|
||||||
|
#include "../eq_packet_structs.h"
|
||||||
|
#include "../misc_functions.h"
|
||||||
|
#include "../strings.h"
|
||||||
|
#include "../inventory_profile.h"
|
||||||
|
#include "larion_structs.h"
|
||||||
|
#include "../rulesys.h"
|
||||||
|
#include "../path_manager.h"
|
||||||
|
#include "../classes.h"
|
||||||
|
#include "../races.h"
|
||||||
|
#include "../raid.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <numeric>
|
||||||
|
#include <cassert>
|
||||||
|
#include <cinttypes>
|
||||||
|
|
||||||
|
namespace Larion
|
||||||
|
{
|
||||||
|
static const char* name = "Larion";
|
||||||
|
static OpcodeManager* opcodes = nullptr;
|
||||||
|
static Strategy struct_strategy;
|
||||||
|
|
||||||
|
void Register(EQStreamIdentifier& into)
|
||||||
|
{
|
||||||
|
//create our opcode manager if we havent already
|
||||||
|
if (opcodes == nullptr) {
|
||||||
|
|
||||||
|
std::string opfile = fmt::format("{}/patch_{}.conf", path.GetPatchPath(), name);
|
||||||
|
|
||||||
|
//load up the opcode manager.
|
||||||
|
//TODO: figure out how to support shared memory with multiple patches...
|
||||||
|
opcodes = new RegularOpcodeManager();
|
||||||
|
if (!opcodes->LoadOpcodes(opfile.c_str())) {
|
||||||
|
LogNetcode("[OPCODES] Error loading opcodes file [{}]. Not registering patch [{}]", opfile.c_str(), name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//ok, now we have what we need to register.
|
||||||
|
|
||||||
|
EQStreamInterface::Signature signature;
|
||||||
|
std::string pname;
|
||||||
|
|
||||||
|
//register our world signature.
|
||||||
|
pname = std::string(name) + "_world";
|
||||||
|
signature.ignore_eq_opcode = 0;
|
||||||
|
signature.first_length = sizeof(structs::LoginInfo_Struct);
|
||||||
|
signature.first_eq_opcode = opcodes->EmuToEQ(OP_SendLoginInfo);
|
||||||
|
into.RegisterPatch(signature, pname.c_str(), &opcodes, &struct_strategy);
|
||||||
|
|
||||||
|
//register our zone signature.
|
||||||
|
pname = std::string(name) + "_zone";
|
||||||
|
signature.ignore_eq_opcode = opcodes->EmuToEQ(OP_AckPacket);
|
||||||
|
signature.first_length = sizeof(structs::ClientZoneEntry_Struct);
|
||||||
|
signature.first_eq_opcode = opcodes->EmuToEQ(OP_ZoneEntry);
|
||||||
|
into.RegisterPatch(signature, pname.c_str(), &opcodes, &struct_strategy);
|
||||||
|
LogNetcode("[StreamIdentify] Registered patch [{}]", name);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Reload()
|
||||||
|
{
|
||||||
|
//we have a big problem to solve here when we switch back to shared memory
|
||||||
|
//opcode managers because we need to change the manager pointer, which means
|
||||||
|
//we need to go to every stream and replace it's manager.
|
||||||
|
|
||||||
|
if (opcodes != nullptr) {
|
||||||
|
std::string opfile = fmt::format("{}/patch_{}.conf", path.GetPatchPath(), name);
|
||||||
|
if (!opcodes->ReloadOpcodes(opfile.c_str())) {
|
||||||
|
LogNetcode("[OPCODES] Error reloading opcodes file [{}] for patch [{}]", opfile.c_str(), name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
LogNetcode("[OPCODES] Reloaded opcodes for patch [{}]", name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Strategy::Strategy() : StructStrategy()
|
||||||
|
{
|
||||||
|
//all opcodes default to passthrough.
|
||||||
|
#include "ss_register.h"
|
||||||
|
#include "larion_ops.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string Strategy::Describe() const
|
||||||
|
{
|
||||||
|
std::string r;
|
||||||
|
r += "Patch ";
|
||||||
|
r += name;
|
||||||
|
return(r);
|
||||||
|
}
|
||||||
|
|
||||||
|
const EQ::versions::ClientVersion Strategy::ClientVersion() const
|
||||||
|
{
|
||||||
|
return EQ::versions::ClientVersion::Larion;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "ss_define.h"
|
||||||
|
|
||||||
|
// ENCODE methods
|
||||||
|
// DECODE methods
|
||||||
|
} /*Larion*/
|
||||||
55
common/patches/larion.h
Normal file
55
common/patches/larion.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/* EQEMu: Everquest Server Emulator
|
||||||
|
|
||||||
|
Copyright (C) 2001-2016 EQEMu Development Team (http://eqemulator.net)
|
||||||
|
|
||||||
|
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; version 2 of the License.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY except by those people which sell it, which
|
||||||
|
are required to give you total support for your newly bought product;
|
||||||
|
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef COMMON_LARION_H
|
||||||
|
#define COMMON_LARION_H
|
||||||
|
|
||||||
|
#include "../struct_strategy.h"
|
||||||
|
|
||||||
|
class EQStreamIdentifier;
|
||||||
|
|
||||||
|
namespace Larion
|
||||||
|
{
|
||||||
|
|
||||||
|
//these are the only public member of this namespace.
|
||||||
|
extern void Register(EQStreamIdentifier& into);
|
||||||
|
extern void Reload();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//you should not directly access anything below..
|
||||||
|
//I just dont feel like making a seperate header for it.
|
||||||
|
|
||||||
|
class Strategy : public StructStrategy {
|
||||||
|
public:
|
||||||
|
Strategy();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
virtual std::string Describe() const;
|
||||||
|
virtual const EQ::versions::ClientVersion ClientVersion() const;
|
||||||
|
|
||||||
|
//magic macro to declare our opcode processors
|
||||||
|
#include "ss_declare.h"
|
||||||
|
#include "larion_ops.h"
|
||||||
|
};
|
||||||
|
|
||||||
|
}; /*Larion*/
|
||||||
|
|
||||||
|
#endif /*COMMON_LARION_H*/
|
||||||
18
common/patches/larion_limits.cpp
Normal file
18
common/patches/larion_limits.cpp
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/* EQEMu: Everquest Server Emulator
|
||||||
|
|
||||||
|
Copyright (C) 2001-2016 EQEMu Development Team (http://eqemulator.net)
|
||||||
|
|
||||||
|
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; version 2 of the License.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY except by those people which sell it, which
|
||||||
|
are required to give you total support for your newly bought product;
|
||||||
|
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
31
common/patches/larion_limits.h
Normal file
31
common/patches/larion_limits.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/* EQEMu: Everquest Server Emulator
|
||||||
|
|
||||||
|
Copyright (C) 2001-2016 EQEMu Development Team (http://eqemulator.net)
|
||||||
|
|
||||||
|
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; version 2 of the License.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY except by those people which sell it, which
|
||||||
|
are required to give you total support for your newly bought product;
|
||||||
|
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef COMMON_LARION_LIMITS_H
|
||||||
|
#define COMMON_LARION_LIMITS_H
|
||||||
|
|
||||||
|
|
||||||
|
namespace Larion
|
||||||
|
{
|
||||||
|
|
||||||
|
// put constants here and #include appropriately
|
||||||
|
|
||||||
|
}; /* Larion */
|
||||||
|
|
||||||
|
#endif /*COMMON_LARION_LIMITS_H*/
|
||||||
6
common/patches/larion_ops.h
Normal file
6
common/patches/larion_ops.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
//list of packets we need to encode on the way out:
|
||||||
|
//list of packets we need to decode on the way in:
|
||||||
|
|
||||||
|
#undef E
|
||||||
|
#undef D
|
||||||
33
common/patches/larion_structs.h
Normal file
33
common/patches/larion_structs.h
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#ifndef LARION_STRUCTS_H_
|
||||||
|
#define LARION_STRUCTS_H_
|
||||||
|
|
||||||
|
namespace Larion {
|
||||||
|
namespace structs {
|
||||||
|
struct LoginInfo_Struct {
|
||||||
|
/*000*/ char login_info[64];
|
||||||
|
/*064*/ uint8 unknown064[124];
|
||||||
|
/*188*/ uint8 zoning; // 01 if zoning, 00 if not
|
||||||
|
/*189*/ uint8 unknown189[275];
|
||||||
|
/*488*/
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ClientZoneEntry_Struct {
|
||||||
|
/*00*/ uint32 unknown00; // ***Placeholder
|
||||||
|
/*04*/ char char_name[64]; // Player firstname [32]
|
||||||
|
/*68*/ uint32 unknown68;
|
||||||
|
/*72*/ uint32 unknown72;
|
||||||
|
};
|
||||||
|
}; //end namespace structs
|
||||||
|
}; //end namespace larion
|
||||||
|
|
||||||
|
#endif /*LARION_STRUCTS_H_*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -26,7 +26,7 @@
|
|||||||
#include "sod.h"
|
#include "sod.h"
|
||||||
#include "rof.h"
|
#include "rof.h"
|
||||||
#include "rof2.h"
|
#include "rof2.h"
|
||||||
|
#include "larion.h"
|
||||||
|
|
||||||
void RegisterAllPatches(EQStreamIdentifier &into)
|
void RegisterAllPatches(EQStreamIdentifier &into)
|
||||||
{
|
{
|
||||||
@ -36,6 +36,7 @@ void RegisterAllPatches(EQStreamIdentifier &into)
|
|||||||
UF::Register(into);
|
UF::Register(into);
|
||||||
RoF::Register(into);
|
RoF::Register(into);
|
||||||
RoF2::Register(into);
|
RoF2::Register(into);
|
||||||
|
Larion::Register(into);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ReloadAllPatches()
|
void ReloadAllPatches()
|
||||||
@ -46,4 +47,5 @@ void ReloadAllPatches()
|
|||||||
UF::Reload();
|
UF::Reload();
|
||||||
RoF::Reload();
|
RoF::Reload();
|
||||||
RoF2::Reload();
|
RoF2::Reload();
|
||||||
|
Larion::Reload();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user