Merge remote-tracking branch 'remotes/origin/master' into web_interface

Conflicts:
	common/CMakeLists.txt
	common/eqemu_config.cpp
	common/eqemu_config.h
	common/shareddb.h
This commit is contained in:
Akkadius 2014-12-16 00:12:01 -06:00
commit fffe59c52e
55 changed files with 1216 additions and 6770 deletions

View File

@ -69,7 +69,6 @@ SET(common_sources
web_interface_utils.cpp
xml_parser.cpp
platform.cpp
patches/client62.cpp
patches/patches.cpp
patches/sod.cpp
patches/sof.cpp
@ -197,12 +196,6 @@ SET(common_headers
web_interface_utils.h
xml_parser.h
zone_numbers.h
platform.h
patches/Client62.h
patches/Client62_constants.h
patches/Client62_itemfields.h
patches/Client62_ops.h
patches/Client62_structs.h
patches/patches.h
patches/sod.h
patches/sod_constants.h
@ -256,11 +249,6 @@ SET(common_headers
)
SOURCE_GROUP(Patches FILES
patches/client62.h
patches/client62_itemfields.h
patches/client62_ops.h
patches/client62_constants.h
patches/client62_structs.h
patches/patches.h
patches/sod.h
patches/sod_itemfields.h
@ -296,7 +284,6 @@ SOURCE_GROUP(Patches FILES
patches/underfoot_ops.h
patches/underfoot_constants.h
patches/underfoot_structs.h
patches/client62.cpp
patches/patches.cpp
patches/sod.cpp
patches/sof.cpp

View File

@ -27,13 +27,10 @@ tremendously.
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <iomanip>
#include "emu_tcp_connection.h"
#include "emu_tcp_server.h"
#include "../common/servertalk.h"
#include "../common/packet_dump.h"
#ifdef FREEBSD //Timothy Whitman - January 7, 2003
#define MSG_NOSIGNAL 0

View File

@ -26,6 +26,7 @@
struct SPackSendQueue;
class EmuTCPServer;
class ServerPacket;
class EmuTCPConnection : public TCPConnection {
public:

View File

@ -548,7 +548,6 @@ uint16 EQLimits::InventoryMapSize(int16 map, uint32 version) {
},
{ // local[MapBank]
/*Unknown*/ NOT_USED,
/*62*/ Client62::consts::MAP_BANK_SIZE,
/*Titanium*/ Titanium::consts::MAP_BANK_SIZE,
/*SoF*/ EmuConstants::MAP_BANK_SIZE,
/*SoD*/ EmuConstants::MAP_BANK_SIZE,
@ -698,7 +697,6 @@ uint16 EQLimits::InventoryMapSize(int16 map, uint32 version) {
},
{ // local[MapCorpse]
/*Unknown*/ NOT_USED,
/*62*/ Client62::consts::MAP_CORPSE_SIZE,
/*Titanium*/ Titanium::consts::MAP_CORPSE_SIZE,
/*SoF*/ SoF::consts::MAP_CORPSE_SIZE,
/*SoD*/ SoD::consts::MAP_CORPSE_SIZE,
@ -728,7 +726,6 @@ uint16 EQLimits::InventoryMapSize(int16 map, uint32 version) {
},
{ // local[MapInspect]
/*Unknown*/ NOT_USED,
/*62*/ Client62::consts::MAP_INSPECT_SIZE,
/*Titanium*/ Titanium::consts::MAP_INSPECT_SIZE,
/*SoF*/ SoF::consts::MAP_INSPECT_SIZE,
/*SoD*/ SoD::consts::MAP_INSPECT_SIZE,
@ -1006,7 +1003,6 @@ uint64 EQLimits::CursorBitmask(uint32 version) {
bool EQLimits::AllowsEmptyBagInBag(uint32 version) {
static const bool local[_EmuClientCount] = {
/*Unknown*/ false,
/*62*/ Client62::limits::ALLOWS_EMPTY_BAG_IN_BAG,
/*Titanium*/ Titanium::limits::ALLOWS_EMPTY_BAG_IN_BAG,
/*SoF*/ SoF::limits::ALLOWS_EMPTY_BAG_IN_BAG,
/*SoD*/ SoD::limits::ALLOWS_EMPTY_BAG_IN_BAG,
@ -1027,8 +1023,6 @@ bool EQLimits::AllowsEmptyBagInBag(uint32 version) {
bool EQLimits::AllowsClickCastFromBag(uint32 version) {
static const bool local[_EmuClientCount] = {
/*Unknown*/ false,
/*62*/ Client62::limits::ALLOWS_CLICK_CAST_FROM_BAG,
/*Titanium*/ Titanium::limits::ALLOWS_CLICK_CAST_FROM_BAG,
/*SoF*/ SoF::limits::ALLOWS_CLICK_CAST_FROM_BAG,
/*SoD*/ SoD::limits::ALLOWS_CLICK_CAST_FROM_BAG,
/*Underfoot*/ Underfoot::limits::ALLOWS_CLICK_CAST_FROM_BAG,
@ -1088,7 +1082,6 @@ uint16 EQLimits::ItemContainerSize(uint32 version) {
bool EQLimits::CoinHasWeight(uint32 version) {
static const bool local[_EmuClientCount] = {
/*Unknown*/ true,
/*62*/ Client62::limits::COIN_HAS_WEIGHT,
/*Titanium*/ Titanium::limits::COIN_HAS_WEIGHT,
/*SoF*/ SoF::limits::COIN_HAS_WEIGHT,
/*SoD*/ SoD::limits::COIN_HAS_WEIGHT,

View File

@ -26,7 +26,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include "eq_constants.h"
#include "clientversions.h"
#include <string>
#include "../common/patches/client62_constants.h"
#include "../common/patches/titanium_constants.h"
#include "../common/patches/sof_constants.h"
#include "../common/patches/sod_constants.h"

View File

@ -15,18 +15,21 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "crc16.h"
#include "debug.h"
#include <stdio.h>
#include <iostream>
#include <iomanip>
#include "eq_packet.h"
#include "misc.h"
#include "op_codes.h"
#include "crc16.h"
#include "platform.h"
#include <iomanip>
#include <iostream>
#include <stdio.h>
#ifndef STATIC_OPCODE
#include "opcodemgr.h"
#endif
#include "packet_dump.h"
#include "packet_functions.h"
#include <cstdlib>

View File

@ -19,8 +19,6 @@
#define _EQPACKET_H
#include "base_packet.h"
#include "eq_stream_type.h"
#include "op_codes.h"
#include "platform.h"
#ifdef STATIC_OPCODE
@ -30,9 +28,6 @@
#include "emu_opcodes.h"
#endif
class EQStream;
class EQStreamPair;
class EQPacket : public BasePacket {
friend class EQStream;
public:

View File

@ -19,15 +19,12 @@
#include "debug.h"
#include "eq_packet.h"
#include "eq_stream.h"
#include "misc.h"
#include "mutex.h"
#include "op_codes.h"
#include "crc16.h"
#include "platform.h"
#include <string>
#include <iomanip>
#include <iostream>
#include <vector>
#include <algorithm>

View File

@ -1,22 +1,26 @@
#ifndef _EQSTREAM_H
#define _EQSTREAM_H
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <deque>
#ifndef WIN32
#include <netinet/in.h>
#endif
#include "eq_stream_type.h"
#include "../common/misc.h"
#include "../common/opcodemgr.h"
#include "../common/timer.h"
#include "eq_packet.h"
#include "eq_stream_intf.h"
#include "eq_stream_type.h"
#include "mutex.h"
#include "../common/opcodemgr.h"
#include "../common/misc.h"
#include "../common/condition.h"
#include "../common/timer.h"
class EQApplicationPacket;
class EQProtocolPacket;
#define FLAG_COMPRESSED 0x01
#define FLAG_ENCODED 0x04
@ -78,7 +82,6 @@ struct SessionStats {
#pragma pack()
class OpcodeManager;
class EQStreamPair;
class EQRawApplicationPacket;
class EQStream : public EQStreamInterface {

View File

@ -1,5 +1,6 @@
#include "debug.h"
#include "eq_stream_factory.h"
#ifdef _WINDOWS
#include <winsock.h>
#include <process.h>
@ -13,11 +14,11 @@
#include <netdb.h>
#include <pthread.h>
#endif
#include <fcntl.h>
#include <iostream>
#include <fcntl.h>
#include "op_codes.h"
#include "eq_stream.h"
#include "logsys.h"
ThreadReturnType EQStreamFactoryReaderLoop(void *eqfs)
{

View File

@ -4,11 +4,13 @@
#include <queue>
#include <map>
#include "../common/eq_stream.h"
#include "../common/condition.h"
#include "../common/timeoutmgr.h"
#include "../common/opcodemgr.h"
#include "../common/timer.h"
class EQStream;
class Timer;
class EQStreamFactory : private Timeoutable {
private:

View File

@ -4,13 +4,13 @@
#include "eq_stream.h"
#include "timer.h"
#include <vector>
#include <string>
#include <queue>
#define STREAM_IDENT_WAIT_MS 10000
class OpcodeManager;
class StructStrategy;
class EQStreamInterface;
class EQStreamIdentifier {
public:

View File

@ -1,4 +1,4 @@
/* EQEMu: Everquest Server Emulator
/* EQEMu: Everquest Server Emulator
Copyright (C) 2001-2006 EQEMu Development Team (http://eqemulator.net)
This program is free software; you can redistribute it and/or modify
@ -15,62 +15,65 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "../common/debug.h"
#include "eqemu_config.h"
#include "misc_functions.h"
#include <iostream>
#include <sstream>
std::string EQEmuConfig::ConfigFile = "eqemu_config.xml";
EQEmuConfig *EQEmuConfig::_config = nullptr;
void EQEmuConfig::do_world(TiXmlElement *ele) {
void EQEmuConfig::do_world(TiXmlElement *ele)
{
const char *text;
TiXmlElement * sub_ele;
text= ParseTextBlock(ele,"shortname");
if (text)
ShortName=text;
text = ParseTextBlock(ele,"longname");
if (text)
LongName=text;
text = ParseTextBlock(ele,"address",true);
if (text)
WorldAddress=text;
text = ParseTextBlock(ele,"localaddress",true);
if (text)
LocalAddress=text;
text = ParseTextBlock(ele,"maxclients",true);
if (text)
MaxClients=atoi(text);
text = ParseTextBlock(ele, "shortname");
if (text) {
ShortName = text;
}
text = ParseTextBlock(ele, "longname");
if (text) {
LongName = text;
}
text = ParseTextBlock(ele, "address", true);
if (text) {
WorldAddress = text;
}
text = ParseTextBlock(ele, "localaddress", true);
if (text) {
LocalAddress = text;
}
text = ParseTextBlock(ele, "maxclients", true);
if (text) {
MaxClients = atoi(text);
}
// Get the <key> element
text = ParseTextBlock(ele,"key",true);
if (text)
SharedKey=text;
text = ParseTextBlock(ele, "key", true);
if (text) {
SharedKey = text;
}
// Get the <loginserver> element
sub_ele = ele->FirstChildElement("loginserver");
if (sub_ele) {
text=ParseTextBlock(sub_ele,"host",true);
if (text)
LoginHost=text;
text=ParseTextBlock(sub_ele,"port",true);
if (text)
LoginPort=atoi(text);
text=ParseTextBlock(sub_ele,"account",true);
if (text)
LoginAccount=text;
text=ParseTextBlock(sub_ele,"password",true);
if (text)
LoginPassword=text;
text = ParseTextBlock(sub_ele, "host", true);
if (text) {
LoginHost = text;
}
text = ParseTextBlock(sub_ele, "port", true);
if (text) {
LoginPort = atoi(text);
}
text = ParseTextBlock(sub_ele, "account", true);
if (text) {
LoginAccount = text;
}
text = ParseTextBlock(sub_ele, "password", true);
if (text) {
LoginPassword = text;
}
} else {
char str[32];
do {
@ -78,358 +81,373 @@ void EQEmuConfig::do_world(TiXmlElement *ele) {
sub_ele = ele->FirstChildElement(str);
if (sub_ele) {
LoginConfig* loginconfig = new LoginConfig;
text=ParseTextBlock(sub_ele,"host",true);
if (text)
loginconfig->LoginHost=text;
text=ParseTextBlock(sub_ele,"port",true);
if (text)
loginconfig->LoginPort=atoi(text);
text=ParseTextBlock(sub_ele,"account",true);
if (text)
loginconfig->LoginAccount=text;
text=ParseTextBlock(sub_ele,"password",true);
if (text)
loginconfig->LoginPassword=text;
text = ParseTextBlock(sub_ele, "host", true);
if (text) {
loginconfig->LoginHost = text;
}
text = ParseTextBlock(sub_ele, "port", true);
if (text) {
loginconfig->LoginPort = atoi(text);
}
text = ParseTextBlock(sub_ele, "account", true);
if (text) {
loginconfig->LoginAccount = text;
}
text = ParseTextBlock(sub_ele, "password", true);
if (text) {
loginconfig->LoginPassword = text;
}
loginlist.Insert(loginconfig);
}
} while(sub_ele);
} while (sub_ele);
}
// Check for locked
sub_ele = ele->FirstChildElement("locked");
if (sub_ele != nullptr)
Locked=true;
if (sub_ele != nullptr) {
Locked = true;
}
// Get the <tcp> element
sub_ele = ele->FirstChildElement("tcp");
if(sub_ele != nullptr) {
if (sub_ele != nullptr) {
text = sub_ele->Attribute("ip");
if (text)
WorldIP=text;
if (text) {
WorldIP = text;
}
text = sub_ele->Attribute("port");
if (text)
WorldTCPPort=atoi(text);
if (text) {
WorldTCPPort = atoi(text);
}
text = sub_ele->Attribute("telnet");
if (text && !strcasecmp(text,"enabled"))
TelnetEnabled=true;
if (text && !strcasecmp(text, "enabled")) {
TelnetEnabled = true;
}
}
// Get the <http> element
sub_ele = ele->FirstChildElement("http");
if(sub_ele != nullptr) {
if (sub_ele != nullptr) {
// text = sub_ele->Attribute("ip");
// if (text)
// WorldIP=text;
text = sub_ele->Attribute("mimefile");
if (text)
WorldHTTPMimeFile=text;
if (text) {
WorldHTTPMimeFile = text;
}
text = sub_ele->Attribute("port");
if (text)
WorldHTTPPort=atoi(text);
if (text) {
WorldHTTPPort = atoi(text);
}
text = sub_ele->Attribute("enabled");
if (text && !strcasecmp(text,"true"))
WorldHTTPEnabled=true;
if (text && !strcasecmp(text, "true")) {
WorldHTTPEnabled = true;
}
}
}
void EQEmuConfig::do_chatserver(TiXmlElement *ele) {
void EQEmuConfig::do_chatserver(TiXmlElement *ele)
{
const char *text;
text=ParseTextBlock(ele,"host",true);
if (text)
ChatHost=text;
text=ParseTextBlock(ele,"port",true);
if (text)
ChatPort=atoi(text);
}
void EQEmuConfig::do_mailserver(TiXmlElement *ele) {
const char *text;
text=ParseTextBlock(ele,"host",true);
if (text)
MailHost=text;
text=ParseTextBlock(ele,"port",true);
if (text)
MailPort=atoi(text);
}
void EQEmuConfig::do_database(TiXmlElement *ele) {
const char *text;
text=ParseTextBlock(ele,"host",true);
if (text)
DatabaseHost=text;
text=ParseTextBlock(ele,"port",true);
if (text)
DatabasePort=atoi(text);
text=ParseTextBlock(ele,"username",true);
if (text)
DatabaseUsername=text;
text=ParseTextBlock(ele,"password",true);
if (text)
DatabasePassword=text;
text=ParseTextBlock(ele,"db",true);
if (text)
DatabaseDB=text;
}
void EQEmuConfig::do_qsdatabase(TiXmlElement *ele) {
const char *text;
text=ParseTextBlock(ele,"host",true);
if (text)
QSDatabaseHost=text;
text=ParseTextBlock(ele,"port",true);
if (text)
QSDatabasePort=atoi(text);
text=ParseTextBlock(ele,"username",true);
if (text)
QSDatabaseUsername=text;
text=ParseTextBlock(ele,"password",true);
if (text)
QSDatabasePassword=text;
text=ParseTextBlock(ele,"db",true);
if (text)
QSDatabaseDB=text;
}
void EQEmuConfig::do_web_interface(TiXmlElement *ele) {
const char *text;
text = ParseTextBlock(ele, "host", true);
if (text) {
ChatHost = text;
}
text = ParseTextBlock(ele, "port", true);
if (text)
WebInterfacePort = atoi(text);
text = ParseTextBlock(ele, "cert", true);
if (text)
WebInterfaceCert = text;
text = ParseTextBlock(ele, "priv_key", true);
if (text)
WebInterfacePrivKey = text;
TiXmlElement *sub_ele = ele->FirstChildElement("ssl");
if (sub_ele != nullptr) {
WebInterfaceUseSSL = true;
if (text) {
ChatPort = atoi(text);
}
}
void EQEmuConfig::do_zones(TiXmlElement *ele) {
void EQEmuConfig::do_mailserver(TiXmlElement *ele)
{
const char *text;
text = ParseTextBlock(ele, "host", true);
if (text) {
MailHost = text;
}
text = ParseTextBlock(ele, "port", true);
if (text) {
MailPort = atoi(text);
}
}
void EQEmuConfig::do_database(TiXmlElement *ele)
{
const char *text;
text = ParseTextBlock(ele, "host", true);
if (text) {
DatabaseHost = text;
}
text = ParseTextBlock(ele, "port", true);
if (text) {
DatabasePort = atoi(text);
}
text = ParseTextBlock(ele, "username", true);
if (text) {
DatabaseUsername = text;
}
text = ParseTextBlock(ele, "password", true);
if (text) {
DatabasePassword = text;
}
text = ParseTextBlock(ele, "db", true);
if (text) {
DatabaseDB = text;
}
}
void EQEmuConfig::do_qsdatabase(TiXmlElement *ele)
{
const char *text;
text = ParseTextBlock(ele, "host", true);
if (text) {
QSDatabaseHost = text;
}
text = ParseTextBlock(ele, "port", true);
if (text) {
QSDatabasePort = atoi(text);
}
text = ParseTextBlock(ele, "username", true);
if (text) {
QSDatabaseUsername = text;
}
text = ParseTextBlock(ele, "password", true);
if (text) {
QSDatabasePassword = text;
}
text = ParseTextBlock(ele, "db", true);
if (text) {
QSDatabaseDB = text;
}
}
void EQEmuConfig::do_zones(TiXmlElement *ele)
{
const char *text;
TiXmlElement *sub_ele;
// TiXmlNode *node,*sub_node;
text=ParseTextBlock(ele,"defaultstatus",true);
if (text)
DefaultStatus=atoi(text);
text = ParseTextBlock(ele, "defaultstatus", true);
if (text) {
DefaultStatus = atoi(text);
}
// Get the <ports> element
sub_ele = ele->FirstChildElement("ports");
if(sub_ele != nullptr) {
if (sub_ele != nullptr) {
text = sub_ele->Attribute("low");
if (text)
ZonePortLow=atoi(text);;
if (text) {
ZonePortLow = atoi(text);
};
text = sub_ele->Attribute("high");
if (text)
ZonePortHigh=atoi(text);
if (text) {
ZonePortHigh = atoi(text);
}
}
}
void EQEmuConfig::do_files(TiXmlElement *ele) {
void EQEmuConfig::do_files(TiXmlElement *ele)
{
const char *text;
text=ParseTextBlock(ele,"spells",true);
if (text)
SpellsFile=text;
text=ParseTextBlock(ele,"opcodes",true);
if (text)
OpCodesFile=text;
text=ParseTextBlock(ele,"logsettings",true);
if (text)
LogSettingsFile=text;
text=ParseTextBlock(ele,"eqtime",true);
if (text)
EQTimeFile=text;
text = ParseTextBlock(ele, "spells", true);
if (text) {
SpellsFile = text;
}
text = ParseTextBlock(ele, "opcodes", true);
if (text) {
OpCodesFile = text;
}
text = ParseTextBlock(ele, "logsettings", true);
if (text) {
LogSettingsFile = text;
}
text = ParseTextBlock(ele, "eqtime", true);
if (text) {
EQTimeFile = text;
}
}
void EQEmuConfig::do_directories(TiXmlElement *ele) {
void EQEmuConfig::do_directories(TiXmlElement *ele)
{
const char *text;
text=ParseTextBlock(ele,"maps",true);
if (text)
MapDir=text;
text=ParseTextBlock(ele,"quests",true);
if (text)
QuestDir=text;
text=ParseTextBlock(ele,"plugins",true);
if (text)
PluginDir=text;
text = ParseTextBlock(ele, "maps", true);
if (text) {
MapDir = text;
}
text = ParseTextBlock(ele, "quests", true);
if (text) {
QuestDir = text;
}
text = ParseTextBlock(ele, "plugins", true);
if (text) {
PluginDir = text;
}
}
void EQEmuConfig::do_launcher(TiXmlElement *ele) {
void EQEmuConfig::do_launcher(TiXmlElement *ele)
{
const char *text;
TiXmlElement *sub_ele;
text=ParseTextBlock(ele,"logprefix",true);
if (text)
text = ParseTextBlock(ele, "logprefix", true);
if (text) {
LogPrefix = text;
text=ParseTextBlock(ele,"logsuffix",true);
if (text)
}
text = ParseTextBlock(ele, "logsuffix", true);
if (text) {
LogSuffix = text;
}
// Get the <exe> element
text = ParseTextBlock(ele,"exe",true);
if (text)
text = ParseTextBlock(ele, "exe", true);
if (text) {
ZoneExe = text;
}
// Get the <timers> element
sub_ele = ele->FirstChildElement("timers");
if(sub_ele != nullptr) {
if (sub_ele != nullptr) {
text = sub_ele->Attribute("restart");
if (text)
if (text) {
RestartWait = atoi(text);
}
text = sub_ele->Attribute("reterminate");
if (text)
if (text) {
TerminateWait = atoi(text);
}
text = sub_ele->Attribute("initial");
if (text)
if (text) {
InitialBootWait = atoi(text);
}
text = sub_ele->Attribute("interval");
if (text)
if (text) {
ZoneBootInterval = atoi(text);
}
}
}
std::string EQEmuConfig::GetByName(const std::string &var_name) const {
if(var_name == "ShortName")
return(ShortName);
if(var_name == "LongName")
return(LongName);
if(var_name == "WorldAddress")
return(WorldAddress);
if(var_name == "LoginHost")
return(LoginHost);
if(var_name == "LoginAccount")
return(LoginAccount);
if(var_name == "LoginPassword")
return(LoginPassword);
if(var_name == "LoginPort")
return(itoa(LoginPort));
if(var_name == "Locked")
return(Locked?"true":"false");
if(var_name == "WorldTCPPort")
return(itoa(WorldTCPPort));
if(var_name == "WorldIP")
return(WorldIP);
if(var_name == "TelnetEnabled")
return(TelnetEnabled?"true":"false");
if(var_name == "WorldHTTPPort")
return(itoa(WorldHTTPPort));
if(var_name == "WorldHTTPMimeFile")
return(WorldHTTPMimeFile);
if(var_name == "WorldHTTPEnabled")
return(WorldHTTPEnabled?"true":"false");
if(var_name == "ChatHost")
return(ChatHost);
if(var_name == "ChatPort")
return(itoa(ChatPort));
if(var_name == "MailHost")
return(MailHost);
if(var_name == "MailPort")
return(itoa(MailPort));
if(var_name == "DatabaseHost")
return(DatabaseHost);
if(var_name == "DatabaseUsername")
return(DatabaseUsername);
if(var_name == "DatabasePassword")
return(DatabasePassword);
if(var_name == "DatabaseDB")
return(DatabaseDB);
if(var_name == "DatabasePort")
return(itoa(DatabasePort));
if(var_name == "QSDatabaseHost")
return(QSDatabaseHost);
if(var_name == "QSDatabaseUsername")
return(QSDatabaseUsername);
if(var_name == "QSDatabasePassword")
return(QSDatabasePassword);
if(var_name == "QSDatabaseDB")
return(QSDatabaseDB);
if(var_name == "QSDatabasePort")
return(itoa(QSDatabasePort));
if (var_name == "WebInterfacePort")
return(itoa(WebInterfacePort));
if (var_name == "WebInterfaceUseSSL")
return(itoa(WebInterfaceUseSSL));
if (var_name == "WebInterfaceCert")
return(WebInterfaceCert);
if (var_name == "WebInterfacePrivKey")
return(WebInterfacePrivKey);
if(var_name == "SpellsFile")
return(SpellsFile);
if(var_name == "OpCodesFile")
return(OpCodesFile);
if(var_name == "EQTimeFile")
return(EQTimeFile);
if(var_name == "LogSettingsFile")
return(LogSettingsFile);
if(var_name == "MapDir")
return(MapDir);
if(var_name == "QuestDir")
return(QuestDir);
if(var_name == "PluginDir")
return(PluginDir);
if(var_name == "LogPrefix")
return(LogPrefix);
if(var_name == "LogSuffix")
return(LogSuffix);
if(var_name == "ZoneExe")
return(ZoneExe);
if(var_name == "ZonePortLow")
return(itoa(ZonePortLow));
if(var_name == "ZonePortHigh")
return(itoa(ZonePortHigh));
if(var_name == "DefaultStatus")
return(itoa(DefaultStatus));
std::string EQEmuConfig::GetByName(const std::string &var_name) const
{
if (var_name == "ShortName") {
return (ShortName);
}
if (var_name == "LongName") {
return (LongName);
}
if (var_name == "WorldAddress") {
return (WorldAddress);
}
if (var_name == "LoginHost") {
return (LoginHost);
}
if (var_name == "LoginAccount") {
return (LoginAccount);
}
if (var_name == "LoginPassword") {
return (LoginPassword);
}
if (var_name == "LoginPort") {
return (itoa(LoginPort));
}
if (var_name == "Locked") {
return (Locked ? "true" : "false");
}
if (var_name == "WorldTCPPort") {
return (itoa(WorldTCPPort));
}
if (var_name == "WorldIP") {
return (WorldIP);
}
if (var_name == "TelnetEnabled") {
return (TelnetEnabled ? "true" : "false");
}
if (var_name == "WorldHTTPPort") {
return (itoa(WorldHTTPPort));
}
if (var_name == "WorldHTTPMimeFile") {
return (WorldHTTPMimeFile);
}
if (var_name == "WorldHTTPEnabled") {
return (WorldHTTPEnabled ? "true" : "false");
}
if (var_name == "ChatHost") {
return (ChatHost);
}
if (var_name == "ChatPort") {
return (itoa(ChatPort));
}
if (var_name == "MailHost") {
return (MailHost);
}
if (var_name == "MailPort") {
return (itoa(MailPort));
}
if (var_name == "DatabaseHost") {
return (DatabaseHost);
}
if (var_name == "DatabaseUsername") {
return (DatabaseUsername);
}
if (var_name == "DatabasePassword") {
return (DatabasePassword);
}
if (var_name == "DatabaseDB") {
return (DatabaseDB);
}
if (var_name == "DatabasePort") {
return (itoa(DatabasePort));
}
if (var_name == "QSDatabaseHost") {
return (QSDatabaseHost);
}
if (var_name == "QSDatabaseUsername") {
return (QSDatabaseUsername);
}
if (var_name == "QSDatabasePassword") {
return (QSDatabasePassword);
}
if (var_name == "QSDatabaseDB") {
return (QSDatabaseDB);
}
if (var_name == "QSDatabasePort") {
return (itoa(QSDatabasePort));
}
if (var_name == "SpellsFile") {
return (SpellsFile);
}
if (var_name == "OpCodesFile") {
return (OpCodesFile);
}
if (var_name == "EQTimeFile") {
return (EQTimeFile);
}
if (var_name == "LogSettingsFile") {
return (LogSettingsFile);
}
if (var_name == "MapDir") {
return (MapDir);
}
if (var_name == "QuestDir") {
return (QuestDir);
}
if (var_name == "PluginDir") {
return (PluginDir);
}
if (var_name == "LogPrefix") {
return (LogPrefix);
}
if (var_name == "LogSuffix") {
return (LogSuffix);
}
if (var_name == "ZoneExe") {
return (ZoneExe);
}
if (var_name == "ZonePortLow") {
return (itoa(ZonePortLow));
}
if (var_name == "ZonePortHigh") {
return (itoa(ZonePortHigh));
}
if (var_name == "DefaultStatus") {
return (itoa(DefaultStatus));
}
// if(var_name == "DynamicCount")
// return(itoa(DynamicCount));
return("");
return ("");
}
void EQEmuConfig::Dump() const

View File

@ -1,4 +1,4 @@
/* EQEMu: Everquest Server Emulator
/* EQEMu: Everquest Server Emulator
Copyright (C) 2001-2006 EQEMu Development Team (http://eqemulator.net)
This program is free software; you can redistribute it and/or modify
@ -28,210 +28,190 @@ struct LoginConfig {
uint16 LoginPort;
};
class EQEmuConfig : public XMLParser {
public:
virtual std::string GetByName(const std::string &var_name) const;
class EQEmuConfig : public XMLParser
{
public:
virtual std::string GetByName(const std::string &var_name) const;
// From <world/>
std::string ShortName;
std::string LongName;
std::string WorldAddress;
std::string LocalAddress;
std::string LoginHost;
std::string LoginAccount;
std::string LoginPassword;
uint16 LoginPort;
uint32 LoginCount;
LinkedList<LoginConfig*> loginlist;
bool Locked;
uint16 WorldTCPPort;
std::string WorldIP;
bool TelnetEnabled;
int32 MaxClients;
bool WorldHTTPEnabled;
uint16 WorldHTTPPort;
std::string WorldHTTPMimeFile;
std::string SharedKey;
// From <world/>
std::string ShortName;
std::string LongName;
std::string WorldAddress;
std::string LocalAddress;
std::string LoginHost;
std::string LoginAccount;
std::string LoginPassword;
uint16 LoginPort;
uint32 LoginCount;
LinkedList<LoginConfig*> loginlist;
bool Locked;
uint16 WorldTCPPort;
std::string WorldIP;
bool TelnetEnabled;
int32 MaxClients;
bool WorldHTTPEnabled;
uint16 WorldHTTPPort;
std::string WorldHTTPMimeFile;
std::string SharedKey;
// From <chatserver/>
std::string ChatHost;
uint16 ChatPort;
// From <chatserver/>
std::string ChatHost;
uint16 ChatPort;
// From <mailserver/>
std::string MailHost;
uint16 MailPort;
// From <mailserver/>
std::string MailHost;
uint16 MailPort;
// From <database/>
std::string DatabaseHost;
std::string DatabaseUsername;
std::string DatabasePassword;
std::string DatabaseDB;
uint16 DatabasePort;
// From <database/>
std::string DatabaseHost;
std::string DatabaseUsername;
std::string DatabasePassword;
std::string DatabaseDB;
uint16 DatabasePort;
// From <qsdatabase> // QueryServ
std::string QSDatabaseHost;
std::string QSDatabaseUsername;
std::string QSDatabasePassword;
std::string QSDatabaseDB;
uint16 QSDatabasePort;
// From <qsdatabase> // QueryServ
std::string QSDatabaseHost;
std::string QSDatabaseUsername;
std::string QSDatabasePassword;
std::string QSDatabaseDB;
uint16 QSDatabasePort;
// from <web_interface>
uint16 WebInterfacePort;
bool WebInterfaceUseSSL;
std::string WebInterfaceCert;
std::string WebInterfacePrivKey;
// From <files/>
std::string SpellsFile;
std::string OpCodesFile;
std::string EQTimeFile;
std::string LogSettingsFile;
// From <files/>
std::string SpellsFile;
std::string OpCodesFile;
std::string EQTimeFile;
std::string LogSettingsFile;
// From <directories/>
std::string MapDir;
std::string QuestDir;
std::string PluginDir;
// From <directories/>
std::string MapDir;
std::string QuestDir;
std::string PluginDir;
// From <launcher/>
std::string LogPrefix;
std::string LogSuffix;
std::string ZoneExe;
uint32 RestartWait;
uint32 TerminateWait;
uint32 InitialBootWait;
uint32 ZoneBootInterval;
// From <launcher/>
std::string LogPrefix;
std::string LogSuffix;
std::string ZoneExe;
uint32 RestartWait;
uint32 TerminateWait;
uint32 InitialBootWait;
uint32 ZoneBootInterval;
// From <zones/>
uint16 ZonePortLow;
uint16 ZonePortHigh;
uint8 DefaultStatus;
// From <zones/>
uint16 ZonePortLow;
uint16 ZonePortHigh;
uint8 DefaultStatus;
// uint16 DynamicCount;
// map<string,uint16> StaticZones;
protected:
protected:
static EQEmuConfig *_config;
static EQEmuConfig *_config;
static std::string ConfigFile;
static std::string ConfigFile;
#define ELEMENT(name) \
void do_##name(TiXmlElement *ele);
#include "eqemu_config_elements.h"
#include "eqemu_config_elements.h"
EQEmuConfig() {
// import the needed handler prototypes
EQEmuConfig()
{
// import the needed handler prototypes
#define ELEMENT(name) \
Handlers[#name]=(ElementHandler)&EQEmuConfig::do_##name;
#include "eqemu_config_elements.h"
Handlers[#name]=(ElementHandler)&EQEmuConfig::do_##name;
#include "eqemu_config_elements.h"
// Set sane defaults
// Login server
LoginHost = "eqemulator.net";
LoginPort = 5998;
// World
Locked = false;
WorldTCPPort = 9000;
TelnetEnabled = false;
WorldHTTPEnabled = false;
WorldHTTPPort = 9080;
WorldHTTPMimeFile = "mime.types";
SharedKey = ""; //blank disables authentication
// Mail
ChatHost = "eqchat.eqemulator.net";
ChatPort = 7778;
// Mail
MailHost = "eqmail.eqemulator.net";
MailPort = 7779;
// Mysql
DatabaseHost = "localhost";
DatabasePort = 3306;
DatabaseUsername = "eq";
DatabasePassword = "eq";
DatabaseDB = "eq";
// QueryServ Database
QSDatabaseHost = "localhost";
QSDatabasePort = 3306;
QSDatabaseUsername = "eq";
QSDatabasePassword = "eq";
QSDatabaseDB = "eq";
// Files
SpellsFile = "spells_us.txt";
OpCodesFile = "opcodes.conf";
EQTimeFile = "eqtime.cfg";
LogSettingsFile = "log.ini";
// Dirs
MapDir = "Maps";
QuestDir = "quests";
PluginDir = "plugins";
// Launcher
LogPrefix = "logs/zone-";
LogSuffix = ".log";
RestartWait = 10000; //milliseconds
TerminateWait = 10000; //milliseconds
InitialBootWait = 20000; //milliseconds
ZoneBootInterval = 2000; //milliseconds
#ifdef WIN32
ZoneExe = "zone.exe";
#else
ZoneExe = "./zone";
#endif
// Zones
ZonePortLow = 7000;
ZonePortHigh = 7999;
DefaultStatus = 0;
// For where zones need to connect to.
WorldIP = "127.0.0.1";
// Dynamics to start
//DynamicCount=5;
MaxClients = -1;
LoginCount = 0;
}
virtual ~EQEmuConfig() {}
// Set sane defaults
public:
// Login server
LoginHost="eqemulator.net";
LoginPort=5998;
// Produce a const singleton
static const EQEmuConfig *get()
{
if (_config == nullptr) {
LoadConfig();
}
return (_config);
}
// World
Locked=false;
WorldTCPPort=9000;
TelnetEnabled=false;
WorldHTTPEnabled=false;
WorldHTTPPort=9080;
WorldHTTPMimeFile="mime.types";
SharedKey = ""; //blank disables authentication
// Allow the use to set the conf file to be used.
static void SetConfigFile(std::string file)
{
EQEmuConfig::ConfigFile = file;
}
// Mail
ChatHost="eqchat.eqemulator.net";
ChatPort=7778;
// Mail
MailHost="eqmail.eqemulator.net";
MailPort=7779;
// Mysql
DatabaseHost="localhost";
DatabasePort=3306;
DatabaseUsername="eq";
DatabasePassword="eq";
DatabaseDB="eq";
// QueryServ Database
QSDatabaseHost="localhost";
QSDatabasePort=3306;
QSDatabaseUsername="eq";
QSDatabasePassword="eq";
QSDatabaseDB="eq";
// web_interface
WebInterfacePort = 9081;
WebInterfaceUseSSL = false;
WebInterfaceCert = "";
WebInterfacePrivKey = "";
// Files
SpellsFile="spells_us.txt";
OpCodesFile="opcodes.conf";
EQTimeFile="eqtime.cfg";
LogSettingsFile="log.ini";
// Dirs
MapDir="Maps";
QuestDir="quests";
PluginDir="plugins";
// Launcher
LogPrefix = "logs/zone-";
LogSuffix = ".log";
RestartWait = 10000; //milliseconds
TerminateWait = 10000; //milliseconds
InitialBootWait = 20000; //milliseconds
ZoneBootInterval = 2000; //milliseconds
#ifdef WIN32
ZoneExe = "zone.exe";
#else
ZoneExe = "./zone";
#endif
// Zones
ZonePortLow=7000;
ZonePortHigh=7999;
DefaultStatus=0;
// For where zones need to connect to.
WorldIP="127.0.0.1";
// Dynamics to start
//DynamicCount=5;
MaxClients=-1;
LoginCount=0;
}
virtual ~EQEmuConfig() {}
public:
// Produce a const singleton
static const EQEmuConfig *get() {
if (_config == nullptr)
LoadConfig();
return(_config);
}
// Allow the use to set the conf file to be used.
static void SetConfigFile(std::string file) { EQEmuConfig::ConfigFile = file; }
// Load the config
static bool LoadConfig() {
if (_config != nullptr)
delete _config;
_config=new EQEmuConfig;
return _config->ParseFile(EQEmuConfig::ConfigFile.c_str(),"server");
}
// Load the config
static bool LoadConfig()
{
if (_config != nullptr) {
delete _config;
}
_config = new EQEmuConfig;
return _config->ParseFile(EQEmuConfig::ConfigFile.c_str(), "server");
}
void Dump() const;
};

View File

@ -1,4 +1,4 @@
/* EQEMu: Everquest Server Emulator
/* EQEMu: Everquest Server Emulator
Copyright (C) 2001-2002 EQEMu Development Team (http://eqemu.org)
This program is free software; you can redistribute it and/or modify
@ -15,34 +15,35 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "debug.h"
#include "faction.h"
#include "races.h"
const char *FactionValueToString(FACTION_VALUE fv) {
switch(fv) {
case FACTION_ALLY:
return("Ally");
case FACTION_WARMLY:
return("Warmly");
case FACTION_KINDLY:
return("Kindly");
case FACTION_AMIABLE:
return("Amiable");
case FACTION_INDIFFERENT:
return("Indifferent");
case FACTION_APPREHENSIVE:
return("Apprehensive");
case FACTION_DUBIOUS:
return("Dubious");
case FACTION_THREATENLY:
return("Threatenly");
case FACTION_SCOWLS:
return("Scowls, ready to attack.");
default:
break;
const char *FactionValueToString(FACTION_VALUE fv)
{
switch (fv) {
case FACTION_ALLY:
return ("Ally");
case FACTION_WARMLY:
return ("Warmly");
case FACTION_KINDLY:
return ("Kindly");
case FACTION_AMIABLE:
return ("Amiable");
case FACTION_INDIFFERENT:
return ("Indifferent");
case FACTION_APPREHENSIVE:
return ("Apprehensive");
case FACTION_DUBIOUS:
return ("Dubious");
case FACTION_THREATENLY:
return ("Threatenly");
case FACTION_SCOWLS:
return ("Scowls, ready to attack.");
default:
break;
}
return("Unknown Faction Con");
return ("Unknown Faction Con");
}
@ -55,35 +56,56 @@ const char *FactionValueToString(FACTION_VALUE fv) {
FACTION_VALUE CalculateFaction(FactionMods* fm, int32 tmpCharacter_value)
{
int32 character_value = tmpCharacter_value;
if (fm)
if (fm) {
character_value += fm->base + fm->class_mod + fm->race_mod + fm->deity_mod;
if(character_value >= 1101) return FACTION_ALLY;
if(character_value >= 701 && character_value <= 1100) return FACTION_WARMLY;
if(character_value >= 401 && character_value <= 700) return FACTION_KINDLY;
if(character_value >= 101 && character_value <= 400) return FACTION_AMIABLE;
if(character_value >= 0 && character_value <= 100) return FACTION_INDIFFERENT;
if(character_value >= -100 && character_value <= -1) return FACTION_APPREHENSIVE;
if(character_value >= -700 && character_value <= -101) return FACTION_DUBIOUS;
if(character_value >= -999 && character_value <= -701) return FACTION_THREATENLY;
if(character_value <= -1000) return FACTION_SCOWLS;
}
if (character_value >= 1101) {
return FACTION_ALLY;
}
if (character_value >= 701 && character_value <= 1100) {
return FACTION_WARMLY;
}
if (character_value >= 401 && character_value <= 700) {
return FACTION_KINDLY;
}
if (character_value >= 101 && character_value <= 400) {
return FACTION_AMIABLE;
}
if (character_value >= 0 && character_value <= 100) {
return FACTION_INDIFFERENT;
}
if (character_value >= -100 && character_value <= -1) {
return FACTION_APPREHENSIVE;
}
if (character_value >= -700 && character_value <= -101) {
return FACTION_DUBIOUS;
}
if (character_value >= -999 && character_value <= -701) {
return FACTION_THREATENLY;
}
if (character_value <= -1000) {
return FACTION_SCOWLS;
}
return FACTION_INDIFFERENT;
}
// this function should check if some races have more than one race define
bool IsOfEqualRace(int r1, int r2)
{
if (r1 == r2)
if (r1 == r2) {
return true;
}
// TODO: add more values
switch(r1)
{
case DARK_ELF:
if (r2 == 77)
return true;
break;
case BARBARIAN:
if (r2 == 90)
return true;
switch (r1) {
case DARK_ELF:
if (r2 == 77) {
return true;
}
break;
case BARBARIAN:
if (r2 == 90) {
return true;
}
}
return false;
}
@ -91,50 +113,55 @@ bool IsOfEqualRace(int r1, int r2)
// trolls endure ogres, dark elves, ...
bool IsOfIndiffRace(int r1, int r2)
{
if (r1 == r2)
if (r1 == r2) {
return true;
}
// TODO: add more values
switch(r1)
{
case DARK_ELF:
case OGRE:
case TROLL:
if (r2 == OGRE || r2 == TROLL || r2 == DARK_ELF)
switch (r1) {
case DARK_ELF:
case OGRE:
case TROLL:
if (r2 == OGRE || r2 == TROLL || r2 == DARK_ELF) {
return true;
}
break;
case HUMAN:
case BARBARIAN:
case HALF_ELF:
case GNOME:
case HALFLING:
case WOOD_ELF:
if (r2 == HUMAN ||
r2 == BARBARIAN ||
r2 == ERUDITE ||
r2 == HALF_ELF ||
r2 == GNOME ||
r2 == HALFLING ||
r2 == DWARF ||
r2 == HIGH_ELF ||
r2 == WOOD_ELF) {
return true;
}
break;
case ERUDITE:
if (r2 == HUMAN || r2 == HALF_ELF) {
return true;
}
break;
case DWARF:
if (r2 == HALFLING || r2 == GNOME) {
return true;
}
break;
case HIGH_ELF:
if (r2 == WOOD_ELF) {
return true;
}
break;
case VAHSHIR:
return true;
break;
case HUMAN:
case BARBARIAN:
case HALF_ELF:
case GNOME:
case HALFLING:
case WOOD_ELF:
if (r2 == HUMAN ||
r2 == BARBARIAN ||
r2 == ERUDITE ||
r2 == HALF_ELF ||
r2 == GNOME ||
r2 == HALFLING ||
r2 == DWARF ||
r2 == HIGH_ELF ||
r2 == WOOD_ELF)
return true;
break;
case ERUDITE:
if (r2 == HUMAN || r2 == HALF_ELF)
return true;
break;
case DWARF:
if (r2 == HALFLING || r2 == GNOME)
return true;
break;
case HIGH_ELF:
if (r2 == WOOD_ELF)
return true;
break;
case VAHSHIR:
return true;
case IKSAR:
return false;
case IKSAR:
return false;
}
return false;
}

View File

@ -16,7 +16,6 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "debug.h"
#include "guild_base.h"
#include "database.h"
#include "logsys.h"

View File

@ -8,141 +8,148 @@
class Database;
class CharGuildInfo {
public:
//fields from `characer_`
uint32 char_id;
std::string char_name;
uint8 class_;
uint16 level;
uint32 time_last_on;
uint32 zone_id;
class CharGuildInfo
{
public:
//fields from `characer_`
uint32 char_id;
std::string char_name;
uint8 class_;
uint16 level;
uint32 time_last_on;
uint32 zone_id;
//fields from `guild_members`
uint32 guild_id;
uint8 rank;
bool tribute_enable;
uint32 total_tribute;
uint32 last_tribute; //timestamp
bool banker;
bool alt;
std::string public_note;
//fields from `guild_members`
uint32 guild_id;
uint8 rank;
bool tribute_enable;
uint32 total_tribute;
uint32 last_tribute; //timestamp
bool banker;
bool alt;
std::string public_note;
};
//this object holds guild functionality shared between world and zone.
class BaseGuildManager {
public:
BaseGuildManager();
virtual ~BaseGuildManager();
class BaseGuildManager
{
public:
BaseGuildManager();
virtual ~BaseGuildManager();
//this must be called before doing anything else with this object
void SetDatabase(Database *db) { m_db = db; }
//this must be called before doing anything else with this object
void SetDatabase(Database *db)
{
m_db = db;
}
bool LoadGuilds();
bool RefreshGuild(uint32 guild_id);
bool LoadGuilds();
bool RefreshGuild(uint32 guild_id);
//guild edit actions.
uint32 CreateGuild(const char* name, uint32 leader_char_id);
bool DeleteGuild(uint32 guild_id);
bool RenameGuild(uint32 guild_id, const char* name);
bool SetGuildMOTD(uint32 guild_id, const char* motd, const char *setter);
bool SetGuildURL(uint32 GuildID, const char* URL);
bool SetGuildChannel(uint32 GuildID, const char* Channel);
//guild edit actions.
uint32 CreateGuild(const char* name, uint32 leader_char_id);
bool DeleteGuild(uint32 guild_id);
bool RenameGuild(uint32 guild_id, const char* name);
bool SetGuildMOTD(uint32 guild_id, const char* motd, const char *setter);
bool SetGuildURL(uint32 GuildID, const char* URL);
bool SetGuildChannel(uint32 GuildID, const char* Channel);
//character edit actions
bool SetGuildLeader(uint32 guild_id, uint32 leader_char_id);
bool SetGuild(uint32 charid, uint32 guild_id, uint8 rank);
bool SetGuildRank(uint32 charid, uint8 rank);
bool SetBankerFlag(uint32 charid, bool is_banker);
bool ForceRankUpdate(uint32 charid);
bool GetAltFlag(uint32 CharID);
bool SetAltFlag(uint32 charid, bool is_alt);
bool GetBankerFlag(uint32 CharID);
bool SetTributeFlag(uint32 charid, bool enabled);
bool SetPublicNote(uint32 charid, const char *note);
//character edit actions
bool SetGuildLeader(uint32 guild_id, uint32 leader_char_id);
bool SetGuild(uint32 charid, uint32 guild_id, uint8 rank);
bool SetGuildRank(uint32 charid, uint8 rank);
bool SetBankerFlag(uint32 charid, bool is_banker);
bool ForceRankUpdate(uint32 charid);
bool GetAltFlag(uint32 CharID);
bool SetAltFlag(uint32 charid, bool is_alt);
bool GetBankerFlag(uint32 CharID);
bool SetTributeFlag(uint32 charid, bool enabled);
bool SetPublicNote(uint32 charid, const char *note);
//queries
bool GetCharInfo(const char *char_name, CharGuildInfo &into);
bool GetCharInfo(uint32 char_id, CharGuildInfo &into);
bool GetEntireGuild(uint32 guild_id, std::vector<CharGuildInfo *> &members); //caller is responsible for deleting each pointer in the resulting vector.
bool GuildExists(uint32 guild_id) const;
bool GetGuildMOTD(uint32 guild_id, char *motd_buffer, char *setter_buffer) const;
bool GetGuildURL(uint32 GuildID, char *URLBuffer) const;
bool GetGuildChannel(uint32 GuildID, char *ChannelBuffer) const;
const char *GetRankName(uint32 guild_id, uint8 rank) const;
const char *GetGuildName(uint32 guild_id) const;
bool GetGuildNameByID(uint32 guild_id, std::string &into) const;
uint32 GetGuildIDByName(const char *GuildName);
bool IsGuildLeader(uint32 guild_id, uint32 char_id) const;
uint8 GetDisplayedRank(uint32 guild_id, uint8 rank, uint32 char_id) const;
bool CheckGMStatus(uint32 guild_id, uint8 status) const;
bool CheckPermission(uint32 guild_id, uint8 rank, GuildAction act) const;
//queries
bool GetCharInfo(const char *char_name, CharGuildInfo &into);
bool GetCharInfo(uint32 char_id, CharGuildInfo &into);
bool GetEntireGuild(uint32 guild_id, std::vector<CharGuildInfo *> &members); //caller is responsible for deleting each pointer in the resulting vector.
bool GuildExists(uint32 guild_id) const;
bool GetGuildMOTD(uint32 guild_id, char *motd_buffer, char *setter_buffer) const;
bool GetGuildURL(uint32 GuildID, char *URLBuffer) const;
bool GetGuildChannel(uint32 GuildID, char *ChannelBuffer) const;
const char *GetRankName(uint32 guild_id, uint8 rank) const;
const char *GetGuildName(uint32 guild_id) const;
bool GetGuildNameByID(uint32 guild_id, std::string &into) const;
uint32 GetGuildIDByName(const char *GuildName);
bool IsGuildLeader(uint32 guild_id, uint32 char_id) const;
uint8 GetDisplayedRank(uint32 guild_id, uint8 rank, uint32 char_id) const;
bool CheckGMStatus(uint32 guild_id, uint8 status) const;
bool CheckPermission(uint32 guild_id, uint8 rank, GuildAction act) const;
// uint32 Getguild_id(uint32 eqid);
uint32 FindGuildByLeader(uint32 leader) const;
uint32 FindGuildByLeader(uint32 leader) const;
// void GetGuildMembers(uint32 guild_id,GuildMember_Struct* gms);
uint32 NumberInGuild(uint32 guild_id);
uint32 NumberInGuild(uint32 guild_id);
// bool GetGuildRanks(uint32 guildeqid, GuildRanks_Struct* gr);
// bool EditGuild(uint32 guild_id, uint8 ranknum, GuildRankLevel_Struct* grl);
uint8 *MakeGuildList(const char *head_name, uint32 &length) const; //make a guild list packet, returns ownership of the buffer.
uint8 *MakeGuildList(const char *head_name, uint32 &length) const; //make a guild list packet, returns ownership of the buffer.
static const char *const GuildActionNames[_MaxGuildAction];
uint32 DoesAccountContainAGuildLeader(uint32 AccountID);
static const char *const GuildActionNames[_MaxGuildAction];
uint32 DoesAccountContainAGuildLeader(uint32 AccountID);
protected:
//the methods which must be defined by base classes.
virtual void SendGuildRefresh(uint32 guild_id, bool name, bool motd, bool rank, bool relation) = 0;
virtual void SendCharRefresh(uint32 old_guild_id, uint32 guild_id, uint32 charid) = 0;
virtual void SendRankUpdate(uint32 CharID) = 0;
virtual void SendGuildDelete(uint32 guild_id) = 0;
protected:
//the methods which must be defined by base classes.
virtual void SendGuildRefresh(uint32 guild_id, bool name, bool motd, bool rank, bool relation) = 0;
virtual void SendCharRefresh(uint32 old_guild_id, uint32 guild_id, uint32 charid) = 0;
virtual void SendRankUpdate(uint32 CharID) = 0;
virtual void SendGuildDelete(uint32 guild_id) = 0;
uint32 DBCreateGuild(const char* name, uint32 leader_char_id);
bool DBDeleteGuild(uint32 guild_id);
bool DBRenameGuild(uint32 guild_id, const char* name);
bool DBSetGuildLeader(uint32 guild_id, uint32 leader_char_id);
bool DBSetGuildMOTD(uint32 guild_id, const char* motd, const char *setter);
bool DBSetGuildURL(uint32 GuildID, const char* URL);
bool DBSetGuildChannel(uint32 GuildID, const char* Channel);
bool DBSetGuild(uint32 charid, uint32 guild_id, uint8 rank);
bool DBSetGuildRank(uint32 charid, uint8 rank);
bool DBSetBankerFlag(uint32 charid, bool is_banker);
bool DBSetAltFlag(uint32 charid, bool is_alt);
bool DBSetTributeFlag(uint32 charid, bool enabled);
bool DBSetPublicNote(uint32 charid, const char *note);
bool QueryWithLogging(std::string query, const char *errmsg);
uint32 DBCreateGuild(const char* name, uint32 leader_char_id);
bool DBDeleteGuild(uint32 guild_id);
bool DBRenameGuild(uint32 guild_id, const char* name);
bool DBSetGuildLeader(uint32 guild_id, uint32 leader_char_id);
bool DBSetGuildMOTD(uint32 guild_id, const char* motd, const char *setter);
bool DBSetGuildURL(uint32 GuildID, const char* URL);
bool DBSetGuildChannel(uint32 GuildID, const char* Channel);
bool DBSetGuild(uint32 charid, uint32 guild_id, uint8 rank);
bool DBSetGuildRank(uint32 charid, uint8 rank);
bool DBSetBankerFlag(uint32 charid, bool is_banker);
bool DBSetAltFlag(uint32 charid, bool is_alt);
bool DBSetTributeFlag(uint32 charid, bool enabled);
bool DBSetPublicNote(uint32 charid, const char *note);
bool QueryWithLogging(std::string query, const char *errmsg);
// void DBSetPublicNote(uint32 guild_id,char* charname, char* note);
bool LocalDeleteGuild(uint32 guild_id);
bool LocalDeleteGuild(uint32 guild_id);
class RankInfo {
public:
RankInfo();
std::string name;
bool permissions[_MaxGuildAction];
};
class GuildInfo {
public:
GuildInfo();
std::string name;
std::string motd;
std::string motd_setter;
std::string url;
std::string channel;
class RankInfo
{
public:
RankInfo();
std::string name;
bool permissions[_MaxGuildAction];
};
class GuildInfo
{
public:
GuildInfo();
std::string name;
std::string motd;
std::string motd_setter;
std::string url;
std::string channel;
uint32 leader_char_id;
uint8 minstatus;
//tribute is not in here on purpose, since it is only valid in world!
RankInfo ranks[GUILD_MAX_RANK+1];
};
uint32 leader_char_id;
uint8 minstatus;
//tribute is not in here on purpose, since it is only valid in world!
RankInfo ranks[GUILD_MAX_RANK + 1];
};
std::map<uint32, GuildInfo *> m_guilds; //we own the pointers in this map
void ClearGuilds(); //clears internal structure
std::map<uint32, GuildInfo *> m_guilds; //we own the pointers in this map
void ClearGuilds(); //clears internal structure
Database *m_db; //we do not own this
Database *m_db; //we do not own this
bool _StoreGuildDB(uint32 guild_id);
GuildInfo *_CreateGuild(uint32 guild_id, const char *guild_name, uint32 account_id, uint8 minstatus, const char *guild_motd, const char *motd_setter, const char *Channel, const char *URL);
uint32 _GetFreeGuildID();
bool _StoreGuildDB(uint32 guild_id);
GuildInfo *_CreateGuild(uint32 guild_id, const char *guild_name, uint32 account_id, uint8 minstatus, const char *guild_motd, const char *motd_setter, const char *Channel, const char *URL);
uint32 _GetFreeGuildID();
};

View File

@ -15,6 +15,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "../common/debug.h"
#include "misc_functions.h"
#include "guilds.h"

View File

@ -16,19 +16,16 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "debug.h"
#include "string_util.h"
#include "item.h"
#include "database.h"
#include "misc.h"
#include "races.h"
#include "shareddb.h"
#include "classes.h"
#include "debug.h"
#include "item.h"
#include "races.h"
#include "rulesys.h"
#include "shareddb.h"
#include "string_util.h"
#include <limits.h>
#include <sstream>
#include <iostream>
std::list<ItemInst*> dirty_inst;

View File

@ -23,21 +23,16 @@
#ifndef __ITEM_H
#define __ITEM_H
class ItemInst; // Item belonging to a client (contains info on item, dye, augments, charges, etc)
class ItemInstQueue; // Queue of ItemInst objects (i.e., cursor)
class Inventory; // Character inventory
class ItemParse; // Parses item packets
class EvolveInfo; // Stores information about an evolving item family
#include <string>
#include <vector>
#include <map>
#include <list>
#include "../common/eq_packet_structs.h"
#include "../common/eq_constants.h"
#include "../common/item_struct.h"
#include "../common/timer.h"
#include <list>
#include <map>
// Helper typedefs
typedef std::list<ItemInst*>::const_iterator iter_queue;
typedef std::map<int16, ItemInst*>::const_iterator iter_inst;

View File

@ -16,13 +16,14 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "logsys.h"
#include "debug.h"
#include "eq_packet.h"
#include "logsys.h"
#include "misc.h"
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include "misc.h"
#include "eq_packet.h"
#define LOG_CATEGORY(category) #category ,

View File

@ -9,13 +9,14 @@
#include <map>
#include <iostream>
#include <zlib.h>
#ifndef WIN32
#include <sys/time.h>
#endif
#include <time.h>
#include "misc.h"
#include "types.h"
#include <cstdlib>
#include <cstring>
#define ENC(c) (((c) & 0x3f) + ' ')

View File

@ -15,11 +15,13 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "../common/debug.h"
#include "misc_functions.h"
#include <string.h>
#include <time.h>
#include <math.h>
#ifndef WIN32
#include <netinet/in.h>
#include <sys/socket.h>

View File

@ -19,8 +19,6 @@
#define MISCFUNCTIONS_H
#include "types.h"
#include <stdio.h>
#include <ctype.h>
#include <string>
#include <time.h>

View File

@ -9,9 +9,6 @@
#include <mysql.h>
#include "types.h"
#include "mysql_request_row.h"
#include <string>
#include <string.h>
#include <limits.h>
class MySQLRequestResult {
private:

View File

@ -6,302 +6,302 @@ std::map<unsigned long, std::string> opcode_map;
std::string get_opcode_name(unsigned long opcode)
{
std::map<unsigned long, std::string>::iterator itr;;
return (itr=opcode_map.find(opcode))!=opcode_map.end() ? itr->second : "OP_Unknown";
std::map<unsigned long, std::string>::iterator itr;;
return (itr = opcode_map.find(opcode)) != opcode_map.end() ? itr->second : "OP_Unknown";
}
void load_opcode_names()
{
opcode_map[0x0176]="LiveOP_Heartbeat";
opcode_map[0x02d7]="LiveOP_ReloadUI";
opcode_map[0x01eb]="LiveOP_IncreaseStats";
opcode_map[0x0134]="LiveOP_ApproveZone";
opcode_map[0x01d5]="LiveOP_Dye";
opcode_map[0x0168]="LiveOP_Stamina";
opcode_map[0x014d]="LiveOP_ControlBoat";
opcode_map[0x003e]="LiveOP_MobUpdate";
opcode_map[0x0027]="LiveOP_ClientUpdate";
opcode_map[0x0024]="LiveOP_ChannelMessage";
opcode_map[0x01d7]="LiveOP_SimpleMessage";
opcode_map[0x01d8]="LiveOP_FormattedMessage";
opcode_map[0x01c6]="LiveOP_TGB";
opcode_map[0x0285]="LiveOP_TestBuff";
opcode_map[0x012d]="LiveOP_Bind_Wound";
opcode_map[0x01ab]="LiveOP_Charm";
opcode_map[0x014c]="LiveOP_Begging";
opcode_map[0x0152]="LiveOP_MoveCoin";
opcode_map[0x0292]="LiveOP_SpawnDoor";
opcode_map[0x009d]="LiveOP_Sneak";
opcode_map[0x0079]="LiveOP_ExpUpdate";
opcode_map[0x027d]="LiveOP_DumpName";
opcode_map[0x01ea]="LiveOP_RespondAA";
opcode_map[0x01c9]="LiveOP_SendAAStats";
opcode_map[0x0366]="LiveOP_SendAATable";
opcode_map[0x01e9]="LiveOP_AAAction";
opcode_map[0x00bb]="LiveOP_BoardBoat";
opcode_map[0x00bc]="LiveOP_LeaveBoat";
opcode_map[0x02b8]="LiveOP_AdventureInfoRequest";
opcode_map[0x02b9]="LiveOP_AdventureInfo";
opcode_map[0x02a6]="LiveOP_AdventureRequest";
opcode_map[0x02a8]="LiveOP_AdventureDetails";
opcode_map[0x02a9]="LiveOP_LDoNButton";
opcode_map[0x02ba]="LiveOP_AdventureData";
opcode_map[0x02c9]="LiveOP_AdventureFinish";
opcode_map[0x02c6]="LiveOP_LeaveAdventure";
opcode_map[0x02ce]="LiveOP_AdventureUpdate";
opcode_map[0x002b]="LiveOP_SendExpZonein";
opcode_map[0x01e4]="LiveOP_ZoneInSendName";
opcode_map[0x01bf]="LiveOP_GuildLeader";
opcode_map[0x009a]="LiveOP_GuildPeace";
opcode_map[0x0132]="LiveOP_GuildRemove";
opcode_map[0x0059]="LiveOP_GuildMemberList";
opcode_map[0x026e]="LiveOP_GuildMemberUpdate";
opcode_map[0x0130]="LiveOP_GuildInvite";
opcode_map[0x01c0]="LiveOP_GuildMOTD";
opcode_map[0x003c]="LiveOP_GuildPublicNote";
opcode_map[0x027e]="LiveOP_GetGuildMOTD";
opcode_map[0x0277]="LiveOP_GuildDemote";
opcode_map[0x0131]="LiveOP_GuildInviteAccept";
opcode_map[0x00a4]="LiveOP_GuildWar";
opcode_map[0x0133]="LiveOP_GuildDelete";
opcode_map[0x0233]="LiveOP_GuildManageRemove";
opcode_map[0x022d]="LiveOP_GuildManageAdd";
opcode_map[0x0039]="LiveOP_GuildManageStatus";
opcode_map[0x01e8]="LiveOP_Trader";
opcode_map[0x01e7]="LiveOP_Bazaar";
opcode_map[0x01c4]="LiveOP_BecomeTrader";
opcode_map[0x01f4]="LiveOP_BazaarInspect";
opcode_map[0x006e]="LiveOP_TraderItemUpdate";
opcode_map[0x017c]="LiveOP_TraderDelItem";
opcode_map[0x01eb]="LiveOP_TraderShop";
opcode_map[0x01ca]="LiveOP_TraderBuy";
opcode_map[0x01ac]="LiveOP_PetCommands";
opcode_map[0x0042]="LiveOP_TradeSkillCombine";
opcode_map[0x02e5]="LiveOP_AugmentItem";
opcode_map[0x0367]="LiveOP_ItemName";
opcode_map[0x02cd]="LiveOP_ShopItem";
opcode_map[0x0065]="LiveOP_ShopPlayerBuy";
opcode_map[0x006a]="LiveOP_ShopPlayerSell";
opcode_map[0x006d]="LiveOP_ShopDelItem";
opcode_map[0x0f6d]="LiveOP_ShopEndConfirm";
opcode_map[0x00f7]="LiveOP_ShopRequest";
opcode_map[0x006c]="LiveOP_ShopEnd";
opcode_map[0x02d1]="LiveOP_AdventureMerchantRequest";
opcode_map[0x02d2]="LiveOP_AdventureMerchantResponse";
opcode_map[0x02d3]="LiveOP_AdventureMerchantPurchase";
opcode_map[0x02e3]="LiveOP_AdventurePointsUpdate";
opcode_map[0x0270]="LiveOP_LFGCommand";
opcode_map[0x01d0]="LiveOP_LFGAppearance";
opcode_map[0x01b5]="LiveOP_MoneyUpdate";
opcode_map[0x0721]="LiveOP_GroupDelete";
opcode_map[0x0272]="LiveOP_GroupAcknowledge";
opcode_map[0x024a]="LiveOP_GroupUpdate";
opcode_map[0x025f]="LiveOP_GroupInvite";
opcode_map[0x00ff]="LiveOP_GroupDisband";
opcode_map[0x00d5]="LiveOP_GroupInvite2";
opcode_map[0x025e]="LiveOP_GroupFollow";
opcode_map[0x00d7]="LiveOP_GroupFollow2";
opcode_map[0x00d6]="LiveOP_GroupCancelInvite";
opcode_map[0x0156]="LiveOP_Split";
opcode_map[0x00d8]="LiveOP_Jump";
opcode_map[0x01d6]="LiveOP_ConsiderCorpse";
opcode_map[0x0064]="LiveOP_SkillUpdate";
opcode_map[0x0178]="LiveOP_GMEndTrainingResponse";
opcode_map[0x013c]="LiveOP_GMEndTraining";
opcode_map[0x0175]="LiveOP_GMTrainSkill";
opcode_map[0x013b]="LiveOP_GMTraining";
opcode_map[0x017b]="LiveOP_ConsumeAmmo";
opcode_map[0x0171]="LiveOP_CombatAbility";
opcode_map[0x009c]="LiveOP_TrackUnknown";
opcode_map[0x0234]="LiveOP_TrackTarget";
opcode_map[0x0286]="LiveOP_Track";
opcode_map[0x0297]="LiveOP_ReadBook";
opcode_map[0x001f]="LiveOP_ItemLinkClick";
opcode_map[0x01f4]="LiveOP_ItemLinkResponse";
opcode_map[0x01d9]="LiveOP_ItemLinkText";
opcode_map[0x0a41]="LiveOP_RezzRequest";
opcode_map[0x00e5]="LiveOP_RezzAnswer";
opcode_map[0x019b]="LiveOP_RezzComplete";
opcode_map[0x0128]="LiveOP_MoveDoor";
opcode_map[0x0127]="LiveOP_ClickDoor";
opcode_map[0x0247]="LiveOP_SendZonepoints";
opcode_map[0x008c]="LiveOP_SetRunMode";
opcode_map[0x0248]="LiveOP_InspectRequest";
opcode_map[0x0249]="LiveOP_InspectAnswer";
opcode_map[0x0187]="LiveOP_SenseTraps";
opcode_map[0x018e]="LiveOP_DisarmTraps";
opcode_map[0x01bc]="LiveOP_Assist";
opcode_map[0x0240]="LiveOP_PickPocket";
opcode_map[0x0119]="LiveOP_LootRequest";
opcode_map[0x011a]="LiveOP_EndLootRequest";
opcode_map[0x011b]="LiveOP_MoneyOnCorpse";
opcode_map[0x0179]="LiveOP_LootComplete";
opcode_map[0x013f]="LiveOP_LootItem";
opcode_map[0x0151]="LiveOP_MoveItem";
opcode_map[0x0056]="LiveOP_WhoAllRequest";
opcode_map[0x0229]="LiveOP_WhoAllResponse";
opcode_map[0x0167]="LiveOP_Consume";
opcode_map[0x0172]="LiveOP_AutoAttack";
opcode_map[0x0186]="LiveOP_AutoAttack2";
opcode_map[0x0173]="LiveOP_TargetMouse";
opcode_map[0x01ba]="LiveOP_TargetCommand";
opcode_map[0x01d8]="LiveOP_TargetReject";
opcode_map[0x009e]="LiveOP_Hide";
opcode_map[0x012e]="LiveOP_Forage";
opcode_map[0x0077]="LiveOP_Fishing";
opcode_map[0x0246]="LiveOP_Bug";
opcode_map[0x00f2]="LiveOP_Emote";
opcode_map[0x0140]="LiveOP_EmoteAnim";
opcode_map[0x015c]="LiveOP_Consider";
opcode_map[0x01cb]="LiveOP_FaceChange";
opcode_map[0x0197]="LiveOP_RandomReq";
opcode_map[0x0087]="LiveOP_RandomReply";
opcode_map[0x01c3]="LiveOP_Camp";
opcode_map[0x0192]="LiveOP_YellForHelp";
opcode_map[0x00ef]="LiveOP_SafePoint";
opcode_map[0x0157]="LiveOP_Buff";
opcode_map[0x00c0]="LiveOP_ColoredText";
opcode_map[0x0440]="LiveOP_MultiLineMsg";
opcode_map[0x021c]="LiveOP_SpecialMesg";
opcode_map[0x0013]="LiveOP_Consent";
opcode_map[0x029d]="LiveOP_ConsentResponse";
opcode_map[0x02d4]="LiveOP_Deny";
opcode_map[0x016c]="LiveOP_Stun";
opcode_map[0x0021]="LiveOP_BeginCast";
opcode_map[0x00be]="LiveOP_CastSpell";
opcode_map[0x01a8]="LiveOP_InterruptCast";
opcode_map[0x0105]="LiveOP_Death";
opcode_map[0x023f]="LiveOP_FeignDeath";
opcode_map[0x012b]="LiveOP_Illusion";
opcode_map[0x0078]="LiveOP_LevelUpdate";
opcode_map[0x0371]="LiveOP_LevelAppearance";
opcode_map[0x00c2]="LiveOP_MemorizeSpell";
opcode_map[0x0244]="LiveOP_HPUpdate";
opcode_map[0x022e]="LiveOP_SendHPTarget";
opcode_map[0x007d]="LiveOP_Mend";
opcode_map[0x0160]="LiveOP_Taunt";
opcode_map[0x0199]="LiveOP_GMDelCorpse";
opcode_map[0x0047]="LiveOP_GMFind";
opcode_map[0x0020]="LiveOP_GMServers";
opcode_map[0x010b]="LiveOP_GMGoto";
opcode_map[0x028c]="LiveOP_GMSummon";
opcode_map[0x010a]="LiveOP_GMKick";
opcode_map[0x0109]="LiveOP_GMKill";
opcode_map[0x0b40]="LiveOP_GMNameChange";
opcode_map[0x00a3]="LiveOP_GMLastName";
opcode_map[0x01b3]="LiveOP_GMToggle";
opcode_map[0x028f]="LiveOP_GMEmoteZone";
opcode_map[0x0074]="LiveOP_GMBecomeNPC";
opcode_map[0x00de]="LiveOP_GMHideMe";
opcode_map[0x0184]="LiveOP_GMZoneRequest";
opcode_map[0x0239]="LiveOP_GMZoneRequest2";
opcode_map[0x0068]="LiveOP_Petition";
opcode_map[0x0085]="LiveOP_PetitionRefresh";
opcode_map[0x01ee]="LiveOP_PDeletePetition";
opcode_map[0x0092]="LiveOP_PetitionBug";
opcode_map[0x0069]="LiveOP_PetitionUpdate";
opcode_map[0x0076]="LiveOP_PetitionCheckout";
opcode_map[0x0056]="LiveOP_PetitionCheckout2";
opcode_map[0x0091]="LiveOP_PetitionDelete";
opcode_map[0x02b4]="LiveOP_PetitionResolve";
opcode_map[0x007e]="LiveOP_PetitionCheckIn";
opcode_map[0x0090]="LiveOP_PetitionUnCheckout";
opcode_map[0x01ec]="LiveOP_PetitionQue";
opcode_map[0x01bb]="LiveOP_SetServerFilter";
opcode_map[0x0218]="LiveOP_NewSpawn";
opcode_map[0x0140]="LiveOP_Animation";
opcode_map[0x0142]="LiveOP_ZoneChange";
opcode_map[0x00f3]="LiveOP_DeleteSpawn";
opcode_map[0x0265]="LiveOP_CrashDump";
opcode_map[0x00e8]="LiveOP_EnvDamage";
opcode_map[0x0101]="LiveOP_Action";
opcode_map[0x00e2]="LiveOP_Damage";
opcode_map[0x00bf]="LiveOP_ManaChange";
opcode_map[0x027c]="LiveOP_ClientError";
opcode_map[0x00fb]="LiveOP_Save";
opcode_map[0x0316]="LiveOP_LocInfo";
opcode_map[0x0188]="LiveOP_Surname";
opcode_map[0x018f]="LiveOP_SwapSpell";
opcode_map[0x01db]="LiveOP_DeleteSpell";
opcode_map[0x029f]="LiveOP_CloseContainer";
opcode_map[0x029f]="LiveOP_ClickObjectAck";
opcode_map[0x00fa]="LiveOP_CreateObject";
opcode_map[0x00f9]="LiveOP_ClickObject";
opcode_map[0x01c1]="LiveOP_ClearObject";
opcode_map[0x0265]="LiveOP_ZoneUnavail";
opcode_map[0x02e0]="LiveOP_ItemPacket";
opcode_map[0x029a]="LiveOP_TradeRequest";
opcode_map[0x0037]="LiveOP_TradeRequestAck";
opcode_map[0x002d]="LiveOP_TradeAcceptClick";
opcode_map[0x0162]="LiveOP_TradeMoneyUpdate";
opcode_map[0x0036]="LiveOP_TradeCoins";
opcode_map[0x002e]="LiveOP_CancelTrade";
opcode_map[0x002f]="LiveOP_FinishTrade";
opcode_map[0x00a1]="LiveOP_SaveOnZoneReq";
opcode_map[0x0185]="LiveOP_Logout";
opcode_map[0x0298]="LiveOP_RequestDuel";
opcode_map[0x0a5d]="LiveOP_DuelResponse";
opcode_map[0x016e]="LiveOP_DuelResponse2";
opcode_map[0x007c]="LiveOP_InstillDoubt";
opcode_map[0x00ac]="LiveOP_SafeFallSuccess";
opcode_map[0x02fb]="LiveOP_DisciplineUpdate";
opcode_map[0x02f2]="LiveOP_TributeUpdate";
opcode_map[0x02f3]="LiveOP_TributeItem";
opcode_map[0x02f4]="LiveOP_TributePointUpdate";
opcode_map[0x02f5]="LiveOP_SendTributes";
opcode_map[0x02f6]="LiveOP_TributeInfo";
opcode_map[0x02f7]="LiveOP_SelectTribute";
opcode_map[0x02f8]="LiveOP_TributeTimer";
opcode_map[0x02f9]="LiveOP_StartTribute";
opcode_map[0x02fa]="LiveOP_TributeNPC";
opcode_map[0x02fe]="LiveOP_TributeMoney";
opcode_map[0x0364]="LiveOP_TributeToggle";
opcode_map[0x0322]="LiveOP_RecipesFavorite";
opcode_map[0x01f9]="LiveOP_RecipesSearch";
opcode_map[0x01fa]="LiveOP_RecipeReply";
opcode_map[0x01fb]="LiveOP_RecipeDetails";
opcode_map[0x01fc]="LiveOP_RecipeAutoCombine";
opcode_map[0x02db]="LiveOP_FindPersonRequest";
opcode_map[0x02dc]="LiveOP_FindPersonReply";
opcode_map[0x01dd]="LiveOP_Shielding";
opcode_map[0x0198]="LiveOP_SetDataRate";
opcode_map[0x023b]="LiveOP_ZoneEntry";
opcode_map[0x006b]="LiveOP_PlayerProfile";
opcode_map[0x0291]="LiveOP_CharInventory";
opcode_map[0x0170]="LiveOP_ZoneSpawns";
opcode_map[0x0026]="LiveOP_TimeOfDay";
opcode_map[0x015b]="LiveOP_Weather";
opcode_map[0x00ec]="LiveOP_ReqNewZone";
opcode_map[0x00eb]="LiveOP_NewZone";
opcode_map[0x00fd]="LiveOP_ReqClientSpawn";
opcode_map[0x012F]="LiveOP_SpawnAppearance";
opcode_map[0x0086]="LiveOP_ClientReady";
opcode_map[0x0086]="LiveOP_ZoneComplete";
opcode_map[0x02db]="LiveOP_LoginComplete";
opcode_map[0x0195]="LiveOP_ApproveWorld";
opcode_map[0x035f]="LiveOP_LogServer";
opcode_map[0x01b2]="LiveOP_MOTD";
opcode_map[0x0251]="LiveOP_SendLoginInfo";
opcode_map[0x00ea]="LiveOP_DeleteCharacter";
opcode_map[0x0102]="LiveOP_SendCharInfo";
opcode_map[0x00e1]="LiveOP_ExpansionInfo";
opcode_map[0x0104]="LiveOP_CharacterCreate";
opcode_map[0x02ab]="LiveOP_RandomNameGenerator";
opcode_map[0x005d]="LiveOP_GuildsList";
opcode_map[0x0125]="LiveOP_ApproveName";
opcode_map[0x0261]="LiveOP_EnterWorld";
opcode_map[0x015a]="LiveOP_World_Client_CRC1";
opcode_map[0x015e]="LiveOP_World_Client_CRC2";
opcode_map[0x0269]="LiveOP_SetChatServer";
opcode_map[0x0264]="LiveOP_ZoneServerInfo";
opcode_map[0x0017]="LiveOP_AckPacket";
opcode_map[0x012c]="LiveOP_WearChange";
opcode_map[0x1FA1]="LiveOP_WorldObjectsSent";
opcode_map[0x39C4]="LiveOP_BlockedBuffs";
opcode_map[0x4656]="LiveOP_SpawnPositionUpdate";
opcode_map[0x4b61]="LiveOP_ManaUpdate";
opcode_map[0x02d6]="LiveOP_EnduranceUpdate";
opcode_map[0x2ac1]="LiveOP_MobManaUpdate";
opcode_map[0x6c5f]="LiveOP_MobEnduranceUpdate";
opcode_map[0x73a8]="LiveOP_SendMaxCharacters";
opcode_map[0x0176] = "LiveOP_Heartbeat";
opcode_map[0x02d7] = "LiveOP_ReloadUI";
opcode_map[0x01eb] = "LiveOP_IncreaseStats";
opcode_map[0x0134] = "LiveOP_ApproveZone";
opcode_map[0x01d5] = "LiveOP_Dye";
opcode_map[0x0168] = "LiveOP_Stamina";
opcode_map[0x014d] = "LiveOP_ControlBoat";
opcode_map[0x003e] = "LiveOP_MobUpdate";
opcode_map[0x0027] = "LiveOP_ClientUpdate";
opcode_map[0x0024] = "LiveOP_ChannelMessage";
opcode_map[0x01d7] = "LiveOP_SimpleMessage";
opcode_map[0x01d8] = "LiveOP_FormattedMessage";
opcode_map[0x01c6] = "LiveOP_TGB";
opcode_map[0x0285] = "LiveOP_TestBuff";
opcode_map[0x012d] = "LiveOP_Bind_Wound";
opcode_map[0x01ab] = "LiveOP_Charm";
opcode_map[0x014c] = "LiveOP_Begging";
opcode_map[0x0152] = "LiveOP_MoveCoin";
opcode_map[0x0292] = "LiveOP_SpawnDoor";
opcode_map[0x009d] = "LiveOP_Sneak";
opcode_map[0x0079] = "LiveOP_ExpUpdate";
opcode_map[0x027d] = "LiveOP_DumpName";
opcode_map[0x01ea] = "LiveOP_RespondAA";
opcode_map[0x01c9] = "LiveOP_SendAAStats";
opcode_map[0x0366] = "LiveOP_SendAATable";
opcode_map[0x01e9] = "LiveOP_AAAction";
opcode_map[0x00bb] = "LiveOP_BoardBoat";
opcode_map[0x00bc] = "LiveOP_LeaveBoat";
opcode_map[0x02b8] = "LiveOP_AdventureInfoRequest";
opcode_map[0x02b9] = "LiveOP_AdventureInfo";
opcode_map[0x02a6] = "LiveOP_AdventureRequest";
opcode_map[0x02a8] = "LiveOP_AdventureDetails";
opcode_map[0x02a9] = "LiveOP_LDoNButton";
opcode_map[0x02ba] = "LiveOP_AdventureData";
opcode_map[0x02c9] = "LiveOP_AdventureFinish";
opcode_map[0x02c6] = "LiveOP_LeaveAdventure";
opcode_map[0x02ce] = "LiveOP_AdventureUpdate";
opcode_map[0x002b] = "LiveOP_SendExpZonein";
opcode_map[0x01e4] = "LiveOP_ZoneInSendName";
opcode_map[0x01bf] = "LiveOP_GuildLeader";
opcode_map[0x009a] = "LiveOP_GuildPeace";
opcode_map[0x0132] = "LiveOP_GuildRemove";
opcode_map[0x0059] = "LiveOP_GuildMemberList";
opcode_map[0x026e] = "LiveOP_GuildMemberUpdate";
opcode_map[0x0130] = "LiveOP_GuildInvite";
opcode_map[0x01c0] = "LiveOP_GuildMOTD";
opcode_map[0x003c] = "LiveOP_GuildPublicNote";
opcode_map[0x027e] = "LiveOP_GetGuildMOTD";
opcode_map[0x0277] = "LiveOP_GuildDemote";
opcode_map[0x0131] = "LiveOP_GuildInviteAccept";
opcode_map[0x00a4] = "LiveOP_GuildWar";
opcode_map[0x0133] = "LiveOP_GuildDelete";
opcode_map[0x0233] = "LiveOP_GuildManageRemove";
opcode_map[0x022d] = "LiveOP_GuildManageAdd";
opcode_map[0x0039] = "LiveOP_GuildManageStatus";
opcode_map[0x01e8] = "LiveOP_Trader";
opcode_map[0x01e7] = "LiveOP_Bazaar";
opcode_map[0x01c4] = "LiveOP_BecomeTrader";
opcode_map[0x01f4] = "LiveOP_BazaarInspect";
opcode_map[0x006e] = "LiveOP_TraderItemUpdate";
opcode_map[0x017c] = "LiveOP_TraderDelItem";
opcode_map[0x01eb] = "LiveOP_TraderShop";
opcode_map[0x01ca] = "LiveOP_TraderBuy";
opcode_map[0x01ac] = "LiveOP_PetCommands";
opcode_map[0x0042] = "LiveOP_TradeSkillCombine";
opcode_map[0x02e5] = "LiveOP_AugmentItem";
opcode_map[0x0367] = "LiveOP_ItemName";
opcode_map[0x02cd] = "LiveOP_ShopItem";
opcode_map[0x0065] = "LiveOP_ShopPlayerBuy";
opcode_map[0x006a] = "LiveOP_ShopPlayerSell";
opcode_map[0x006d] = "LiveOP_ShopDelItem";
opcode_map[0x0f6d] = "LiveOP_ShopEndConfirm";
opcode_map[0x00f7] = "LiveOP_ShopRequest";
opcode_map[0x006c] = "LiveOP_ShopEnd";
opcode_map[0x02d1] = "LiveOP_AdventureMerchantRequest";
opcode_map[0x02d2] = "LiveOP_AdventureMerchantResponse";
opcode_map[0x02d3] = "LiveOP_AdventureMerchantPurchase";
opcode_map[0x02e3] = "LiveOP_AdventurePointsUpdate";
opcode_map[0x0270] = "LiveOP_LFGCommand";
opcode_map[0x01d0] = "LiveOP_LFGAppearance";
opcode_map[0x01b5] = "LiveOP_MoneyUpdate";
opcode_map[0x0721] = "LiveOP_GroupDelete";
opcode_map[0x0272] = "LiveOP_GroupAcknowledge";
opcode_map[0x024a] = "LiveOP_GroupUpdate";
opcode_map[0x025f] = "LiveOP_GroupInvite";
opcode_map[0x00ff] = "LiveOP_GroupDisband";
opcode_map[0x00d5] = "LiveOP_GroupInvite2";
opcode_map[0x025e] = "LiveOP_GroupFollow";
opcode_map[0x00d7] = "LiveOP_GroupFollow2";
opcode_map[0x00d6] = "LiveOP_GroupCancelInvite";
opcode_map[0x0156] = "LiveOP_Split";
opcode_map[0x00d8] = "LiveOP_Jump";
opcode_map[0x01d6] = "LiveOP_ConsiderCorpse";
opcode_map[0x0064] = "LiveOP_SkillUpdate";
opcode_map[0x0178] = "LiveOP_GMEndTrainingResponse";
opcode_map[0x013c] = "LiveOP_GMEndTraining";
opcode_map[0x0175] = "LiveOP_GMTrainSkill";
opcode_map[0x013b] = "LiveOP_GMTraining";
opcode_map[0x017b] = "LiveOP_ConsumeAmmo";
opcode_map[0x0171] = "LiveOP_CombatAbility";
opcode_map[0x009c] = "LiveOP_TrackUnknown";
opcode_map[0x0234] = "LiveOP_TrackTarget";
opcode_map[0x0286] = "LiveOP_Track";
opcode_map[0x0297] = "LiveOP_ReadBook";
opcode_map[0x001f] = "LiveOP_ItemLinkClick";
opcode_map[0x01f4] = "LiveOP_ItemLinkResponse";
opcode_map[0x01d9] = "LiveOP_ItemLinkText";
opcode_map[0x0a41] = "LiveOP_RezzRequest";
opcode_map[0x00e5] = "LiveOP_RezzAnswer";
opcode_map[0x019b] = "LiveOP_RezzComplete";
opcode_map[0x0128] = "LiveOP_MoveDoor";
opcode_map[0x0127] = "LiveOP_ClickDoor";
opcode_map[0x0247] = "LiveOP_SendZonepoints";
opcode_map[0x008c] = "LiveOP_SetRunMode";
opcode_map[0x0248] = "LiveOP_InspectRequest";
opcode_map[0x0249] = "LiveOP_InspectAnswer";
opcode_map[0x0187] = "LiveOP_SenseTraps";
opcode_map[0x018e] = "LiveOP_DisarmTraps";
opcode_map[0x01bc] = "LiveOP_Assist";
opcode_map[0x0240] = "LiveOP_PickPocket";
opcode_map[0x0119] = "LiveOP_LootRequest";
opcode_map[0x011a] = "LiveOP_EndLootRequest";
opcode_map[0x011b] = "LiveOP_MoneyOnCorpse";
opcode_map[0x0179] = "LiveOP_LootComplete";
opcode_map[0x013f] = "LiveOP_LootItem";
opcode_map[0x0151] = "LiveOP_MoveItem";
opcode_map[0x0056] = "LiveOP_WhoAllRequest";
opcode_map[0x0229] = "LiveOP_WhoAllResponse";
opcode_map[0x0167] = "LiveOP_Consume";
opcode_map[0x0172] = "LiveOP_AutoAttack";
opcode_map[0x0186] = "LiveOP_AutoAttack2";
opcode_map[0x0173] = "LiveOP_TargetMouse";
opcode_map[0x01ba] = "LiveOP_TargetCommand";
opcode_map[0x01d8] = "LiveOP_TargetReject";
opcode_map[0x009e] = "LiveOP_Hide";
opcode_map[0x012e] = "LiveOP_Forage";
opcode_map[0x0077] = "LiveOP_Fishing";
opcode_map[0x0246] = "LiveOP_Bug";
opcode_map[0x00f2] = "LiveOP_Emote";
opcode_map[0x0140] = "LiveOP_EmoteAnim";
opcode_map[0x015c] = "LiveOP_Consider";
opcode_map[0x01cb] = "LiveOP_FaceChange";
opcode_map[0x0197] = "LiveOP_RandomReq";
opcode_map[0x0087] = "LiveOP_RandomReply";
opcode_map[0x01c3] = "LiveOP_Camp";
opcode_map[0x0192] = "LiveOP_YellForHelp";
opcode_map[0x00ef] = "LiveOP_SafePoint";
opcode_map[0x0157] = "LiveOP_Buff";
opcode_map[0x00c0] = "LiveOP_ColoredText";
opcode_map[0x0440] = "LiveOP_MultiLineMsg";
opcode_map[0x021c] = "LiveOP_SpecialMesg";
opcode_map[0x0013] = "LiveOP_Consent";
opcode_map[0x029d] = "LiveOP_ConsentResponse";
opcode_map[0x02d4] = "LiveOP_Deny";
opcode_map[0x016c] = "LiveOP_Stun";
opcode_map[0x0021] = "LiveOP_BeginCast";
opcode_map[0x00be] = "LiveOP_CastSpell";
opcode_map[0x01a8] = "LiveOP_InterruptCast";
opcode_map[0x0105] = "LiveOP_Death";
opcode_map[0x023f] = "LiveOP_FeignDeath";
opcode_map[0x012b] = "LiveOP_Illusion";
opcode_map[0x0078] = "LiveOP_LevelUpdate";
opcode_map[0x0371] = "LiveOP_LevelAppearance";
opcode_map[0x00c2] = "LiveOP_MemorizeSpell";
opcode_map[0x0244] = "LiveOP_HPUpdate";
opcode_map[0x022e] = "LiveOP_SendHPTarget";
opcode_map[0x007d] = "LiveOP_Mend";
opcode_map[0x0160] = "LiveOP_Taunt";
opcode_map[0x0199] = "LiveOP_GMDelCorpse";
opcode_map[0x0047] = "LiveOP_GMFind";
opcode_map[0x0020] = "LiveOP_GMServers";
opcode_map[0x010b] = "LiveOP_GMGoto";
opcode_map[0x028c] = "LiveOP_GMSummon";
opcode_map[0x010a] = "LiveOP_GMKick";
opcode_map[0x0109] = "LiveOP_GMKill";
opcode_map[0x0b40] = "LiveOP_GMNameChange";
opcode_map[0x00a3] = "LiveOP_GMLastName";
opcode_map[0x01b3] = "LiveOP_GMToggle";
opcode_map[0x028f] = "LiveOP_GMEmoteZone";
opcode_map[0x0074] = "LiveOP_GMBecomeNPC";
opcode_map[0x00de] = "LiveOP_GMHideMe";
opcode_map[0x0184] = "LiveOP_GMZoneRequest";
opcode_map[0x0239] = "LiveOP_GMZoneRequest2";
opcode_map[0x0068] = "LiveOP_Petition";
opcode_map[0x0085] = "LiveOP_PetitionRefresh";
opcode_map[0x01ee] = "LiveOP_PDeletePetition";
opcode_map[0x0092] = "LiveOP_PetitionBug";
opcode_map[0x0069] = "LiveOP_PetitionUpdate";
opcode_map[0x0076] = "LiveOP_PetitionCheckout";
opcode_map[0x0056] = "LiveOP_PetitionCheckout2";
opcode_map[0x0091] = "LiveOP_PetitionDelete";
opcode_map[0x02b4] = "LiveOP_PetitionResolve";
opcode_map[0x007e] = "LiveOP_PetitionCheckIn";
opcode_map[0x0090] = "LiveOP_PetitionUnCheckout";
opcode_map[0x01ec] = "LiveOP_PetitionQue";
opcode_map[0x01bb] = "LiveOP_SetServerFilter";
opcode_map[0x0218] = "LiveOP_NewSpawn";
opcode_map[0x0140] = "LiveOP_Animation";
opcode_map[0x0142] = "LiveOP_ZoneChange";
opcode_map[0x00f3] = "LiveOP_DeleteSpawn";
opcode_map[0x0265] = "LiveOP_CrashDump";
opcode_map[0x00e8] = "LiveOP_EnvDamage";
opcode_map[0x0101] = "LiveOP_Action";
opcode_map[0x00e2] = "LiveOP_Damage";
opcode_map[0x00bf] = "LiveOP_ManaChange";
opcode_map[0x027c] = "LiveOP_ClientError";
opcode_map[0x00fb] = "LiveOP_Save";
opcode_map[0x0316] = "LiveOP_LocInfo";
opcode_map[0x0188] = "LiveOP_Surname";
opcode_map[0x018f] = "LiveOP_SwapSpell";
opcode_map[0x01db] = "LiveOP_DeleteSpell";
opcode_map[0x029f] = "LiveOP_CloseContainer";
opcode_map[0x029f] = "LiveOP_ClickObjectAck";
opcode_map[0x00fa] = "LiveOP_CreateObject";
opcode_map[0x00f9] = "LiveOP_ClickObject";
opcode_map[0x01c1] = "LiveOP_ClearObject";
opcode_map[0x0265] = "LiveOP_ZoneUnavail";
opcode_map[0x02e0] = "LiveOP_ItemPacket";
opcode_map[0x029a] = "LiveOP_TradeRequest";
opcode_map[0x0037] = "LiveOP_TradeRequestAck";
opcode_map[0x002d] = "LiveOP_TradeAcceptClick";
opcode_map[0x0162] = "LiveOP_TradeMoneyUpdate";
opcode_map[0x0036] = "LiveOP_TradeCoins";
opcode_map[0x002e] = "LiveOP_CancelTrade";
opcode_map[0x002f] = "LiveOP_FinishTrade";
opcode_map[0x00a1] = "LiveOP_SaveOnZoneReq";
opcode_map[0x0185] = "LiveOP_Logout";
opcode_map[0x0298] = "LiveOP_RequestDuel";
opcode_map[0x0a5d] = "LiveOP_DuelResponse";
opcode_map[0x016e] = "LiveOP_DuelResponse2";
opcode_map[0x007c] = "LiveOP_InstillDoubt";
opcode_map[0x00ac] = "LiveOP_SafeFallSuccess";
opcode_map[0x02fb] = "LiveOP_DisciplineUpdate";
opcode_map[0x02f2] = "LiveOP_TributeUpdate";
opcode_map[0x02f3] = "LiveOP_TributeItem";
opcode_map[0x02f4] = "LiveOP_TributePointUpdate";
opcode_map[0x02f5] = "LiveOP_SendTributes";
opcode_map[0x02f6] = "LiveOP_TributeInfo";
opcode_map[0x02f7] = "LiveOP_SelectTribute";
opcode_map[0x02f8] = "LiveOP_TributeTimer";
opcode_map[0x02f9] = "LiveOP_StartTribute";
opcode_map[0x02fa] = "LiveOP_TributeNPC";
opcode_map[0x02fe] = "LiveOP_TributeMoney";
opcode_map[0x0364] = "LiveOP_TributeToggle";
opcode_map[0x0322] = "LiveOP_RecipesFavorite";
opcode_map[0x01f9] = "LiveOP_RecipesSearch";
opcode_map[0x01fa] = "LiveOP_RecipeReply";
opcode_map[0x01fb] = "LiveOP_RecipeDetails";
opcode_map[0x01fc] = "LiveOP_RecipeAutoCombine";
opcode_map[0x02db] = "LiveOP_FindPersonRequest";
opcode_map[0x02dc] = "LiveOP_FindPersonReply";
opcode_map[0x01dd] = "LiveOP_Shielding";
opcode_map[0x0198] = "LiveOP_SetDataRate";
opcode_map[0x023b] = "LiveOP_ZoneEntry";
opcode_map[0x006b] = "LiveOP_PlayerProfile";
opcode_map[0x0291] = "LiveOP_CharInventory";
opcode_map[0x0170] = "LiveOP_ZoneSpawns";
opcode_map[0x0026] = "LiveOP_TimeOfDay";
opcode_map[0x015b] = "LiveOP_Weather";
opcode_map[0x00ec] = "LiveOP_ReqNewZone";
opcode_map[0x00eb] = "LiveOP_NewZone";
opcode_map[0x00fd] = "LiveOP_ReqClientSpawn";
opcode_map[0x012F] = "LiveOP_SpawnAppearance";
opcode_map[0x0086] = "LiveOP_ClientReady";
opcode_map[0x0086] = "LiveOP_ZoneComplete";
opcode_map[0x02db] = "LiveOP_LoginComplete";
opcode_map[0x0195] = "LiveOP_ApproveWorld";
opcode_map[0x035f] = "LiveOP_LogServer";
opcode_map[0x01b2] = "LiveOP_MOTD";
opcode_map[0x0251] = "LiveOP_SendLoginInfo";
opcode_map[0x00ea] = "LiveOP_DeleteCharacter";
opcode_map[0x0102] = "LiveOP_SendCharInfo";
opcode_map[0x00e1] = "LiveOP_ExpansionInfo";
opcode_map[0x0104] = "LiveOP_CharacterCreate";
opcode_map[0x02ab] = "LiveOP_RandomNameGenerator";
opcode_map[0x005d] = "LiveOP_GuildsList";
opcode_map[0x0125] = "LiveOP_ApproveName";
opcode_map[0x0261] = "LiveOP_EnterWorld";
opcode_map[0x015a] = "LiveOP_World_Client_CRC1";
opcode_map[0x015e] = "LiveOP_World_Client_CRC2";
opcode_map[0x0269] = "LiveOP_SetChatServer";
opcode_map[0x0264] = "LiveOP_ZoneServerInfo";
opcode_map[0x0017] = "LiveOP_AckPacket";
opcode_map[0x012c] = "LiveOP_WearChange";
opcode_map[0x1FA1] = "LiveOP_WorldObjectsSent";
opcode_map[0x39C4] = "LiveOP_BlockedBuffs";
opcode_map[0x4656] = "LiveOP_SpawnPositionUpdate";
opcode_map[0x4b61] = "LiveOP_ManaUpdate";
opcode_map[0x02d6] = "LiveOP_EnduranceUpdate";
opcode_map[0x2ac1] = "LiveOP_MobManaUpdate";
opcode_map[0x6c5f] = "LiveOP_MobEnduranceUpdate";
opcode_map[0x73a8] = "LiveOP_SendMaxCharacters";
}

View File

@ -15,15 +15,13 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "debug.h"
#include <stdio.h>
#include "opcodemgr.h"
#include "debug.h"
#include "emu_opcodes.h"
#include <cstdlib>
#include <cstring>
#include "emu_opcodes.h"
#include "opcodemgr.h"
#include <cstring>
#include <map>
#include <stdio.h>
#include <string>
OpcodeManager::OpcodeManager() {

View File

@ -15,13 +15,12 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "../common/debug.h"
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include "packet_dump.h"
#include "eq_packet.h"
#include "../common/servertalk.h"
void DumpPacketAscii(const uchar* buf, uint32 size, uint32 cols, uint32 skip) {

View File

@ -15,16 +15,18 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <fstream>
#include <iostream>
#include <iomanip>
#include "../common/debug.h"
#include <fstream>
#include <iomanip>
#include <iostream>
#include <stdio.h>
//#ifdef _CRTDBG_MAP_ALLOC
// #undef new
// #define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
//#endif
#include <time.h>
#include <string.h>
#ifdef _WINDOWS

File diff suppressed because it is too large Load Diff

View File

@ -1,37 +0,0 @@
#ifndef CLIENT62_H_
#define CLIENT62_H_
#include "../struct_strategy.h"
#include "../item.h"
class EQStreamIdentifier;
namespace Client62 {
//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 EQClientVersion ClientVersion() const;
//magic macro to declare our opcode processors
#include "ss_declare.h"
#include "client62_ops.h"
};
};
#endif /*CLIENT62_H_*/

View File

@ -1,212 +0,0 @@
/*
EQEMu: Everquest Server Emulator
Copyright (C) 2001-2014 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 CLIENT62_CONSTANTS_H_
#define CLIENT62_CONSTANTS_H_
#include "../types.h"
namespace Client62 {
namespace maps {
typedef enum : int16 {
// this needs work to match actual client equivilents
MapPossessions = 0,
MapBank,
MapSharedBank,
MapTrade,
MapWorld,
MapLimbo,
MapTribute,
MapTrophyTribute,
MapGuildTribute,
MapMerchant,
MapDeleted,
MapCorpse,
MapBazaar,
MapInspect,
MapRealEstate,
MapViewMODPC,
MapViewMODBank,
MapViewMODSharedBank,
MapViewMODLimbo,
MapAltStorage,
MapArchived,
MapMail,
MapGuildTrophyTribute,
MapOther,
_MapCount
} InventoryMaps;
}
namespace slots {
typedef enum : int16 {
MainCharm = 0,
MainEar1,
MainHead,
MainFace,
MainEar2,
MainNeck,
MainShoulders,
MainArms,
MainBack,
MainWrist1,
MainWrist2,
MainRange,
MainHands,
MainPrimary,
MainSecondary,
MainFinger1,
MainFinger2,
MainChest,
MainLegs,
MainFeet,
MainWaist,
MainAmmo,
MainGeneral1,
MainGeneral2,
MainGeneral3,
MainGeneral4,
MainGeneral5,
MainGeneral6,
MainGeneral7,
MainGeneral8,
MainCursor,
_MainCount,
_MainEquipmentBegin = MainCharm,
_MainEquipmentEnd = MainAmmo,
_MainEquipmentCount = (_MainEquipmentEnd - _MainEquipmentBegin + 1),
_MainGeneralBegin = MainGeneral1,
_MainGeneralEnd = MainGeneral8,
_MainGeneralCount = (_MainGeneralEnd - _MainGeneralBegin + 1)
} EquipmentSlots;
}
namespace consts {
static const uint16 MAP_POSSESSIONS_SIZE = slots::_MainCount;
static const uint16 MAP_BANK_SIZE = 16;
static const uint16 MAP_SHARED_BANK_SIZE = 2;
static const uint16 MAP_TRADE_SIZE = 8;
static const uint16 MAP_WORLD_SIZE = 10;
static const uint16 MAP_LIMBO_SIZE = 36;
static const uint16 MAP_TRIBUTE_SIZE = 0; //?
static const uint16 MAP_TROPHY_TRIBUTE_SIZE = 0;
static const uint16 MAP_GUILD_TRIBUTE_SIZE = 0;
static const uint16 MAP_MERCHANT_SIZE = 0;
static const uint16 MAP_DELETED_SIZE = 0;
static const uint16 MAP_CORPSE_SIZE = slots::_MainCount;
static const uint16 MAP_BAZAAR_SIZE = 80;
static const uint16 MAP_INSPECT_SIZE = slots::_MainEquipmentCount;
static const uint16 MAP_REAL_ESTATE_SIZE = 0;
static const uint16 MAP_VIEW_MOD_PC_SIZE = MAP_POSSESSIONS_SIZE;
static const uint16 MAP_VIEW_MOD_BANK_SIZE = MAP_BANK_SIZE;
static const uint16 MAP_VIEW_MOD_SHARED_BANK_SIZE = MAP_SHARED_BANK_SIZE;
static const uint16 MAP_VIEW_MOD_LIMBO_SIZE = MAP_LIMBO_SIZE;
static const uint16 MAP_ALT_STORAGE_SIZE = 0;
static const uint16 MAP_ARCHIVED_SIZE = 0;
static const uint16 MAP_MAIL_SIZE = 0;
static const uint16 MAP_GUILD_TROPHY_TRIBUTE_SIZE = 0;
static const uint16 MAP_KRONO_SIZE = NOT_USED;
static const uint16 MAP_OTHER_SIZE = 0;
static const int16 EQUIPMENT_BEGIN = slots::MainCharm;
static const int16 EQUIPMENT_END = slots::MainAmmo;
static const uint16 EQUIPMENT_SIZE = slots::_MainEquipmentCount;
static const int16 GENERAL_BEGIN = slots::MainGeneral1;
static const int16 GENERAL_END = slots::MainGeneral8;
static const uint16 GENERAL_SIZE = slots::_MainGeneralCount;
static const int16 GENERAL_BAGS_BEGIN = 251;
static const int16 GENERAL_BAGS_END_OFFSET = 79;
static const int16 GENERAL_BAGS_END = GENERAL_BAGS_BEGIN + GENERAL_BAGS_END_OFFSET;
static const int16 CURSOR = slots::MainCursor;
static const int16 CURSOR_BAG_BEGIN = 331;
static const int16 CURSOR_BAG_END_OFFSET = 9;
static const int16 CURSOR_BAG_END = CURSOR_BAG_BEGIN + CURSOR_BAG_END_OFFSET;
static const int16 BANK_BEGIN = 2000;
static const int16 BANK_END = 2015;
static const int16 BANK_BAGS_BEGIN = 2031;
static const int16 BANK_BAGS_END_OFFSET = 159;
static const int16 BANK_BAGS_END = BANK_BAGS_BEGIN + BANK_BAGS_END_OFFSET;
static const int16 SHARED_BANK_BEGIN = 2500;
static const int16 SHARED_BANK_END = 2501;
static const int16 SHARED_BANK_BAGS_BEGIN = 2531;
static const int16 SHARED_BANK_BAGS_END_OFFSET = 19;
static const int16 SHARED_BANK_BAGS_END = SHARED_BANK_BAGS_BEGIN + SHARED_BANK_BAGS_END_OFFSET;
static const int16 TRADE_BEGIN = 3000;
static const int16 TRADE_END = 3007;
static const int16 TRADE_NPC_END = 3003;
static const int16 TRADE_BAGS_BEGIN = 3031;
static const int16 TRADE_BAGS_END_OFFSET = 79;
static const int16 TRADE_BAGS_END = TRADE_BAGS_BEGIN + TRADE_BAGS_END_OFFSET;
static const int16 WORLD_BEGIN = 4000;
static const int16 WORLD_END = 4009;
static const int16 TRIBUTE_BEGIN = 400;
static const int16 TRIBUTE_END = 404;
static const int16 CORPSE_BEGIN = slots::MainGeneral1;
static const int16 CORPSE_END = slots::MainGeneral1 + slots::MainCursor;
static const uint16 ITEM_COMMON_SIZE = 5;
static const uint16 ITEM_CONTAINER_SIZE = 10;
static const uint32 BANDOLIERS_COUNT = 4; // count = number of bandolier instances
static const uint32 BANDOLIER_SIZE = 4; // size = number of equipment slots in bandolier instance
static const uint32 POTION_BELT_SIZE = 4;
}
namespace limits {
static const bool ALLOWS_EMPTY_BAG_IN_BAG = false;
static const bool ALLOWS_CLICK_CAST_FROM_BAG = false;
static const bool COIN_HAS_WEIGHT = true;
}
}; //end namespace Client62
#endif /*CLIENT62_CONSTANTS_H_*/
/*
Client62 Notes:
** Integer-based inventory **
ok Possessions: 0 - 30 (Corpse: 22 - 52 [Offset 22])
ok [Equipment: 0 - 21]
ok [General: 22 - 29]
ok [Cursor: 30]
ok General Bags: 251 - 330
ok Cursor Bags: 331 - 340
ok Bank: 2000 - 2015
ok Bank Bags: 2031 - 2190
ok Shared Bank: 2500 - 2501
ok Shared Bank Bags: 2531 - 2550
Trade: 3000 - 3007
(Trade Bags: 3031 - 3110 -- server values)
World: 4000 - 4009
*/

View File

@ -1,166 +0,0 @@
/*
These fields must be in the order of how they are serialized!
*/
/* 000 */ //I(ItemClass) Leave this one off on purpose
/* 001 */ S(Name)
/* 002 */ S(Lore)
/* 003 */ S(IDFile)
/* 004 */ I(ID)
/* 005 */ I(Weight)
/* 006 */ I(NoRent)
/* 007 */ I(NoDrop)
/* 008 */ I(Size)
/* 009 */ I(Slots)
/* 010 */ I(Price)
/* 011 */ I(Icon)
/* 012 */ C("0")
/* 013 */ C("0")
/* 014 */ I(BenefitFlag)
/* 015 */ I(Tradeskills)
/* 016 */ I(CR)
/* 017 */ I(DR)
/* 018 */ I(PR)
/* 019 */ I(MR)
/* 020 */ I(FR)
/* 021 */ I(AStr)
/* 022 */ I(ASta)
/* 023 */ I(AAgi)
/* 024 */ I(ADex)
/* 025 */ I(ACha)
/* 026 */ I(AInt)
/* 027 */ I(AWis)
/* 028 */ I(HP)
/* 029 */ I(Mana)
/* 030 */ I(AC)
/* 031 */ I(Deity)
/* 032 */ C("0")
/* 033 */ I(SkillModValue)
/* 034 */ I(SkillModType)
/* 035 */ I(BaneDmgRace)
/* 036 */ I(BaneDmgAmt)
/* 037 */ I(BaneDmgBody)
/* 038 */ I(Magic)
/* 039 */ I(CastTime_)
/* 040 */ I(ReqLevel)
/* 041 */ I(BardType)
/* 042 */ I(BardValue)
/* 043 */ I(Light)
/* 044 */ I(Delay)
/* 045 */ I(RecLevel)
/* 046 */ I(RecSkill)
/* 047 */ I(ElemDmgType)
/* 048 */ I(ElemDmgAmt)
/* 049 */ I(Range)
/* 050 */ I(Damage)
/* 051 */ I(Color)
/* 052 */ I(Classes)
/* 053 */ I(Races)
/* 054 */ C("0")
/* 055 */ I(MaxCharges)
/* 056 */ I(ItemType)
/* 057 */ I(Material)
/* 058 */ F(SellRate)
/* 059 */ C("0")
/* 060 */ I(CastTime_)
/* 061 */ C("0")
/* 062 */ I(ProcRate)
/* 063 */ I(CombatEffects)
/* 064 */ I(Shielding)
/* 065 */ I(StunResist)
/* 066 */ I(StrikeThrough)
/* 067 */ I(ExtraDmgSkill)
/* 068 */ I(ExtraDmgAmt)
/* 069 */ I(SpellShield)
/* 070 */ I(Avoidance)
/* 071 */ I(Accuracy)
/* 072 */ I(CharmFileID)
/* 073 */ I(FactionMod1)
/* 074 */ I(FactionMod2)
/* 075 */ I(FactionMod3)
/* 076 */ I(FactionMod4)
/* 077 */ I(FactionAmt1)
/* 078 */ I(FactionAmt2)
/* 079 */ I(FactionAmt3)
/* 080 */ I(FactionAmt4)
/* 081 */ S(CharmFile)
/* 082 */ I(AugType)
/* 083 */ I(AugSlotType[0])
/* 084 */ I(AugSlotType[1])
/* 085 */ I(AugSlotType[2])
/* 086 */ I(AugSlotType[3])
/* 087 */ I(AugSlotType[4])
/* 088 */ I(LDoNTheme)
/* 089 */ I(LDoNPrice)
/* 090 */ I(LDoNSold)
/* 091 */ I(BagType)
/* 092 */ I(BagSlots)
/* 093 */ I(BagSize)
/* 094 */ I(BagWR)
/* 095 */ I(Book)
/* 096 */ I(BookType)
/* 097 */ S(Filename)
/* 098 */ I(BaneDmgRaceAmt)
/* 099 */ I(AugRestrict)
/* 100 */ I(LoreFlag)
/* 101 */ I(PendingLoreFlag)
/* 102 */ I(ArtifactFlag)
/* 103 */ I(SummonedFlag)
/* 104 */ I(Favor)
/* 105 */ I(FVNoDrop)
/* 106 */ I(Endur)
/* 107 */ I(DotShielding)
/* 108 */ I(Attack)
/* 109 */ I(Regen)
/* 110 */ I(ManaRegen)
/* 111 */ I(Haste)
/* 112 */ I(DamageShield)
/* 113 */ I(RecastDelay)
/* 114 */ I(RecastType)
/* 115 */ I(GuildFavor)
/* 116 */ I(AugDistiller)
/* 117 */ C("0")
/* 118 */ C("0")
/* 119 */ I(Attuneable)
/* 120 */ I(NoPet)
/* 121 */ C("0")
/* 122 */ I(PointType)
/* 123 */ I(PotionBelt)
/* 124 */ I(PotionBeltSlots)
/* 125 */ I(StackSize)
/* 126 */ I(Click.Effect)
/* 127 */ I(Click.Type)
/* 128 */ I(Click.Level2)
/* 129 */ I(Click.Level)
/* 130 */ C("0")
/* 131 */ I(Proc.Effect)
/* 132 */ I(Proc.Type)
/* 133 */ I(Proc.Level2)
/* 134 */ I(Proc.Level)
/* 135 */ C("0")
/* 136 */ I(Worn.Effect)
/* 137 */ I(Worn.Type)
/* 138 */ I(Worn.Level2)
/* 139 */ I(Worn.Level)
/* 140 */ C("0")
/* 141 */ I(Focus.Effect)
/* 142 */ I(Focus.Type)
/* 143 */ I(Focus.Level2)
/* 144 */ I(Focus.Level)
/* 145 */ C("0")
/* 146 */ I(Scroll.Effect)
/* 147 */ I(Scroll.Type)
/* 148 */ I(Scroll.Level2)
/* 149 */ I(Scroll.Level)
/* 150 */ C("0")
#undef I
#undef C
#undef S
#undef F

View File

@ -1,54 +0,0 @@
// out-going packets that require an ENCODE translation:
E(OP_Action)
E(OP_AdventureMerchantSell)
E(OP_ApplyPoison)
E(OP_BazaarSearch)
E(OP_BecomeTrader)
E(OP_CharInventory)
E(OP_DeleteCharge)
E(OP_DeleteItem)
E(OP_DeleteSpawn)
E(OP_GuildMemberLevelUpdate)
E(OP_GuildMemberList)
E(OP_Illusion)
E(OP_ItemLinkResponse)
E(OP_ItemPacket)
E(OP_LeadershipExpUpdate)
E(OP_LootItem)
E(OP_MoveItem)
E(OP_NewSpawn)
E(OP_OnLevelMessage)
E(OP_PetBuffWindow)
E(OP_PlayerProfile)
E(OP_ReadBook)
E(OP_RespondAA)
E(OP_SendAATable)
E(OP_SendCharInfo)
E(OP_ShopPlayerSell)
E(OP_Track)
E(OP_TributeItem)
E(OP_WearChange)
E(OP_ZoneEntry)
E(OP_ZoneServerReady)
E(OP_ZoneSpawns)
// incoming packets that require a DECODE translation:
D(OP_AdventureMerchantSell)
D(OP_ApplyPoison)
D(OP_AugmentItem)
D(OP_CastSpell)
D(OP_CharacterCreate)
D(OP_Consume)
D(OP_DeleteItem)
D(OP_FaceChange)
D(OP_ItemLinkClick)
D(OP_LootItem)
D(OP_MoveItem)
D(OP_ReadBook)
D(OP_SetServerFilter)
D(OP_ShopPlayerSell)
D(OP_TradeSkillCombine)
D(OP_TributeItem)
D(OP_WearChange)
D(OP_WhoAllRequest)
#undef E
#undef D

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,6 @@
#include "../debug.h"
#include "patches.h"
#include "client62.h"
#include "titanium.h"
#include "underfoot.h"
#include "sof.h"
@ -11,7 +10,6 @@
#include "rof2.h"
void RegisterAllPatches(EQStreamIdentifier &into) {
Client62::Register(into);
Titanium::Register(into);
SoF::Register(into);
SoD::Register(into);
@ -21,7 +19,6 @@ void RegisterAllPatches(EQStreamIdentifier &into) {
}
void ReloadAllPatches() {
Client62::Reload();
Titanium::Reload();
SoF::Reload();
SoD::Reload();

View File

@ -15,15 +15,13 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "debug.h"
#include "timer.h"
#include "ptimer.h"
#include "database.h"
#include "string_util.h"
#include <stdio.h>
#include <cstdlib>
#include <cstring>
#ifdef _WINDOWS
#include <windows.h>

View File

@ -15,8 +15,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "../common/debug.h"
#include "../common/eq_packet_structs.h"
#include "../common/races.h"
const char* GetRaceName(uint16 race) {

View File

@ -15,10 +15,9 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "debug.h"
#include "rdtsc.h"
#include "types.h"
#include <stdio.h>
#ifdef _WINDOWS
#include <sys/timeb.h>

View File

@ -1,24 +1,19 @@
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include "shareddb.h"
#include "mysql.h"
#include "item.h"
#include "classes.h"
#include "rulesys.h"
#include "seperator.h"
#include "string_util.h"
#include "eq_packet_structs.h"
#include "guilds.h"
#include "extprofile.h"
#include "memory_mapped_file.h"
#include "ipc_mutex.h"
#include "eqemu_exception.h"
#include "loottable.h"
#include "faction.h"
#include "features.h"
#include "ipc_mutex.h"
#include "item.h"
#include "loottable.h"
#include "memory_mapped_file.h"
#include "mysql.h"
#include "rulesys.h"
#include "shareddb.h"
#include "string_util.h"
SharedDatabase::SharedDatabase()
: Database(), skill_caps_mmf(nullptr), items_mmf(nullptr), items_hash(nullptr), faction_mmf(nullptr), faction_hash(nullptr),

View File

@ -6,131 +6,134 @@
#include "database.h"
#include "skills.h"
#include "spdat.h"
#include "item.h"
#include "base_data.h"
#include "fixed_memory_hash_set.h"
#include "fixed_memory_variable_hash_set.h"
#include <list>
class EvolveInfo;
class Inventory;
class ItemInst;
struct BaseDataStruct;
struct InspectMessage_Struct;
struct PlayerProfile_Struct;
struct SPDat_Spell_Struct;
struct Item_Struct;
struct NPCFactionList;
struct Faction;
struct LootTable_Struct;
struct LootDrop_Struct;
namespace EQEmu {
namespace EQEmu
{
class MemoryMappedFile;
}
/*
* This object is inherited by world and zone's DB object,
* and is mainly here to facilitate shared memory, and other
* things which only world and zone need.
*/
class SharedDatabase : public Database {
public:
SharedDatabase();
SharedDatabase(const char* host, const char* user, const char* passwd, const char* database,uint32 port);
virtual ~SharedDatabase();
This object is inherited by world and zone's DB object,
and is mainly here to facilitate shared memory, and other
things which only world and zone need.
*/
class SharedDatabase : public Database
{
public:
SharedDatabase();
SharedDatabase(const char* host, const char* user, const char* passwd, const char* database, uint32 port);
virtual ~SharedDatabase();
/*
* General Character Related Stuff
*/
bool SetGMSpeed(uint32 account_id, uint8 gmspeed);
uint8 GetGMSpeed(uint32 account_id);
bool SetHideMe(uint32 account_id, uint8 hideme);
int32 DeleteStalePlayerCorpses();
void LoadCharacterInspectMessage(uint32 character_id, InspectMessage_Struct* message);
void SaveCharacterInspectMessage(uint32 character_id, const InspectMessage_Struct* message);
void GetBotInspectMessage(uint32 botid, InspectMessage_Struct* message);
void SetBotInspectMessage(uint32 botid, const InspectMessage_Struct* message);
bool GetCommandSettings(std::map<std::string,uint8> &commands);
uint32 GetTotalTimeEntitledOnAccount(uint32 AccountID);
/*
General Character Related Stuff
*/
bool SetGMSpeed(uint32 account_id, uint8 gmspeed);
uint8 GetGMSpeed(uint32 account_id);
bool SetHideMe(uint32 account_id, uint8 hideme);
int32 DeleteStalePlayerCorpses();
void LoadCharacterInspectMessage(uint32 character_id, InspectMessage_Struct* message);
void SaveCharacterInspectMessage(uint32 character_id, const InspectMessage_Struct* message);
void GetBotInspectMessage(uint32 botid, InspectMessage_Struct* message);
void SetBotInspectMessage(uint32 botid, const InspectMessage_Struct* message);
bool GetCommandSettings(std::map<std::string, uint8> &commands);
uint32 GetTotalTimeEntitledOnAccount(uint32 AccountID);
/*
* Character Inventory
*/
bool SaveCursor(uint32 char_id, std::list<ItemInst*>::const_iterator &start, std::list<ItemInst*>::const_iterator &end);
bool SaveInventory(uint32 char_id, const ItemInst* inst, int16 slot_id);
bool DeleteSharedBankSlot(uint32 char_id, int16 slot_id);
bool DeleteInventorySlot(uint32 char_id, int16 slot_id);
bool UpdateInventorySlot(uint32 char_id, const ItemInst* inst, int16 slot_id);
bool UpdateSharedBankSlot(uint32 char_id, const ItemInst* inst, int16 slot_id);
bool VerifyInventory(uint32 account_id, int16 slot_id, const ItemInst* inst);
bool GetSharedBank(uint32 id, Inventory* inv, bool is_charid);
int32 GetSharedPlatinum(uint32 account_id);
bool SetSharedPlatinum(uint32 account_id, int32 amount_to_add);
bool GetInventory(uint32 char_id, Inventory* inv);
bool GetInventory(uint32 account_id, char* name, Inventory* inv);
bool SetStartingItems(PlayerProfile_Struct* pp, Inventory* inv, uint32 si_race, uint32 si_class, uint32 si_deity, uint32 si_current_zone, char* si_name, int admin);
/*
Character Inventory
*/
bool SaveCursor(uint32 char_id, std::list<ItemInst*>::const_iterator &start, std::list<ItemInst*>::const_iterator &end);
bool SaveInventory(uint32 char_id, const ItemInst* inst, int16 slot_id);
bool DeleteSharedBankSlot(uint32 char_id, int16 slot_id);
bool DeleteInventorySlot(uint32 char_id, int16 slot_id);
bool UpdateInventorySlot(uint32 char_id, const ItemInst* inst, int16 slot_id);
bool UpdateSharedBankSlot(uint32 char_id, const ItemInst* inst, int16 slot_id);
bool VerifyInventory(uint32 account_id, int16 slot_id, const ItemInst* inst);
bool GetSharedBank(uint32 id, Inventory* inv, bool is_charid);
int32 GetSharedPlatinum(uint32 account_id);
bool SetSharedPlatinum(uint32 account_id, int32 amount_to_add);
bool GetInventory(uint32 char_id, Inventory* inv);
bool GetInventory(uint32 account_id, char* name, Inventory* inv);
bool SetStartingItems(PlayerProfile_Struct* pp, Inventory* inv, uint32 si_race, uint32 si_class, uint32 si_deity, uint32 si_current_zone, char* si_name, int admin);
std::string GetBook(const char *txtfile);
std::string GetBook(const char *txtfile);
/*
* Item Methods
*/
ItemInst* CreateItem(uint32 item_id, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0);
ItemInst* CreateItem(const Item_Struct* item, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0);
ItemInst* CreateBaseItem(const Item_Struct* item, int16 charges=0);
/*
Item Methods
*/
ItemInst* CreateItem(uint32 item_id, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0);
ItemInst* CreateItem(const Item_Struct* item, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, uint8 attuned = 0);
ItemInst* CreateBaseItem(const Item_Struct* item, int16 charges = 0);
// Web Token Verification
bool VerifyToken(std::string token, int& status);
/*
* Shared Memory crap
*/
/*
Shared Memory crap
*/
//items
void GetItemsCount(int32 &item_count, uint32 &max_id);
void LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id);
bool LoadItems();
const Item_Struct* IterateItems(uint32* id);
const Item_Struct* GetItem(uint32 id);
const EvolveInfo* GetEvolveInfo(uint32 loregroup);
//items
void GetItemsCount(int32 &item_count, uint32 &max_id);
void LoadItems(void *data, uint32 size, int32 items, uint32 max_item_id);
bool LoadItems();
const Item_Struct* IterateItems(uint32* id);
const Item_Struct* GetItem(uint32 id);
const EvolveInfo* GetEvolveInfo(uint32 loregroup);
//faction lists
void GetFactionListInfo(uint32 &list_count, uint32 &max_lists);
const NPCFactionList* GetNPCFactionEntry(uint32 id);
void LoadNPCFactionLists(void *data, uint32 size, uint32 list_count, uint32 max_lists);
bool LoadNPCFactionLists();
//faction lists
void GetFactionListInfo(uint32 &list_count, uint32 &max_lists);
const NPCFactionList* GetNPCFactionEntry(uint32 id);
void LoadNPCFactionLists(void *data, uint32 size, uint32 list_count, uint32 max_lists);
bool LoadNPCFactionLists();
//loot
void GetLootTableInfo(uint32 &loot_table_count, uint32 &max_loot_table, uint32 &loot_table_entries);
void GetLootDropInfo(uint32 &loot_drop_count, uint32 &max_loot_drop, uint32 &loot_drop_entries);
void LoadLootTables(void *data, uint32 size);
void LoadLootDrops(void *data, uint32 size);
bool LoadLoot();
const LootTable_Struct* GetLootTable(uint32 loottable_id);
const LootDrop_Struct* GetLootDrop(uint32 lootdrop_id);
//loot
void GetLootTableInfo(uint32 &loot_table_count, uint32 &max_loot_table, uint32 &loot_table_entries);
void GetLootDropInfo(uint32 &loot_drop_count, uint32 &max_loot_drop, uint32 &loot_drop_entries);
void LoadLootTables(void *data, uint32 size);
void LoadLootDrops(void *data, uint32 size);
bool LoadLoot();
const LootTable_Struct* GetLootTable(uint32 loottable_id);
const LootDrop_Struct* GetLootDrop(uint32 lootdrop_id);
void LoadSkillCaps(void *data);
bool LoadSkillCaps();
uint16 GetSkillCap(uint8 Class_, SkillUseTypes Skill, uint8 Level);
uint8 GetTrainLevel(uint8 Class_, SkillUseTypes Skill, uint8 Level);
void LoadSkillCaps(void *data);
bool LoadSkillCaps();
uint16 GetSkillCap(uint8 Class_, SkillUseTypes Skill, uint8 Level);
uint8 GetTrainLevel(uint8 Class_, SkillUseTypes Skill, uint8 Level);
int GetMaxSpellID();
void LoadSpells(void *data, int max_spells);
void LoadDamageShieldTypes(SPDat_Spell_Struct* sp, int32 iMaxSpellID);
int GetMaxSpellID();
void LoadSpells(void *data, int max_spells);
void LoadDamageShieldTypes(SPDat_Spell_Struct* sp, int32 iMaxSpellID);
int GetMaxBaseDataLevel();
bool LoadBaseData();
void LoadBaseData(void *data, int max_level);
const BaseDataStruct* GetBaseData(int lvl, int cl);
int GetMaxBaseDataLevel();
bool LoadBaseData();
void LoadBaseData(void *data, int max_level);
const BaseDataStruct* GetBaseData(int lvl, int cl);
protected:
protected:
EQEmu::MemoryMappedFile *skill_caps_mmf;
EQEmu::MemoryMappedFile *items_mmf;
EQEmu::FixedMemoryHashSet<Item_Struct> *items_hash;
EQEmu::MemoryMappedFile *faction_mmf;
EQEmu::FixedMemoryHashSet<NPCFactionList> *faction_hash;
EQEmu::MemoryMappedFile *loot_table_mmf;
EQEmu::FixedMemoryVariableHashSet<LootTable_Struct> *loot_table_hash;
EQEmu::MemoryMappedFile *loot_drop_mmf;
EQEmu::FixedMemoryVariableHashSet<LootDrop_Struct> *loot_drop_hash;
EQEmu::MemoryMappedFile *base_data_mmf;
EQEmu::MemoryMappedFile *skill_caps_mmf;
EQEmu::MemoryMappedFile *items_mmf;
EQEmu::FixedMemoryHashSet<Item_Struct> *items_hash;
EQEmu::MemoryMappedFile *faction_mmf;
EQEmu::FixedMemoryHashSet<NPCFactionList> *faction_hash;
EQEmu::MemoryMappedFile *loot_table_mmf;
EQEmu::FixedMemoryVariableHashSet<LootTable_Struct> *loot_table_hash;
EQEmu::MemoryMappedFile *loot_drop_mmf;
EQEmu::FixedMemoryVariableHashSet<LootDrop_Struct> *loot_drop_hash;
EQEmu::MemoryMappedFile *base_data_mmf;
};
#endif /*SHAREDDB_H_*/

View File

@ -15,6 +15,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "types.h"
#include "skills.h"

View File

@ -70,15 +70,12 @@
*/
#include "debug.h"
#include "spdat.h"
#include "packet_dump.h"
#include "moremath.h"
#include "item.h"
#include "skills.h"
#include "bodytypes.h"
#include "../common/logsys.h"
#include "../common/logtypes.h"
#include "classes.h"
#include <math.h>
#include "spdat.h"
#ifndef WIN32
#include <stdlib.h>
#include "unix.h"

View File

@ -16,9 +16,6 @@
#include "string_util.h"
#include <cstring> // for strncpy
#include <stdexcept>
#ifdef _WINDOWS
#include <windows.h>

View File

@ -17,9 +17,10 @@
#define _STRINGUTIL_H_
#include <sstream>
#include <string.h>
#include <vector>
#include <cstdarg>
#include <string.h>
#include "types.h"

View File

@ -15,17 +15,14 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "../common/debug.h"
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <iomanip>
#include "tcp_connection.h"
#include "../common/servertalk.h"
#include "../common/timer.h"
#include "../common/packet_dump.h"
#ifdef FREEBSD //Timothy Whitman - January 7, 2003
#define MSG_NOSIGNAL 0

View File

@ -48,8 +48,6 @@
#include "queue.h"
#include "misc_functions.h"
class BaseTCPServer;
class ServerPacket;
#define TCPConnection_ErrorBufferSize 1024
#define MaxTCPReceiveBuffferSize 524288

View File

@ -1,5 +1,6 @@
#include "debug.h"
#include "tcp_server.h"
#include <stdio.h>
#include <cstdlib>
#include <cstring>

View File

@ -15,7 +15,8 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "../common/debug.h"
// Disgrace: for windows compile
#ifndef WIN32
#include <sys/time.h>
@ -23,8 +24,6 @@
#include <sys/timeb.h>
#endif
#include <iostream>
#include "timer.h"
uint32 current_time = 0;

View File

@ -17,18 +17,11 @@
*/
#include "../common/debug.h"
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <iomanip>
#include <time.h>
#include <stdlib.h>
#include <stdarg.h>
#include "worldconn.h"
#include "eqemu_config.h"
#include "md5.h"
#include "database.h"
#include "servertalk.h"
WorldConnection::WorldConnection(EmuTCPConnection::ePacketMode mode, const char *password)

View File

@ -1,539 +0,0 @@
#ShowEQ Import Notes:
# ZERO THE FILE first
# sed 's/0x[0-9a-fA-F]{4}/0x0000/g'
#Unknown Mapping:
#OP_Action2 -> OP_Damage
#OP_EnvDamage -> OP_Damage ---> might have been a one time mistake
#Name Differences:
#OP_CancelInvite -> OP_GroupCancelInvite
#OP_GMFind -> OP_FindPersonRequest
OP_Unknown=0x0000
OP_ExploreUnknown=0x0292 #used for unknown explorer
#world packets
OP_ApproveWorld=0x41b1 # ShowEQ 06/29/05
OP_LogServer=0x4668 # EQEmu 06/29/05
OP_MOTD=0x7fea # EQEmu 06/29/05
OP_SendLoginInfo=0x2792 # EQEmu 06/29/05
OP_DeleteCharacter=0x0920 # ShowEQ 06/29/05
OP_SendCharInfo=0x732c # EQEmu 06/29/05
OP_ExpansionInfo=0x5c78 # EQEmu 06/29/05
OP_CharacterCreate=0x6160 # EQEmu 06/29/05
OP_RandomNameGenerator=0x23d4 # ShowEQ 06/29/05
OP_GuildsList=0x6957 # ShowEQ 06/29/05
OP_ApproveName=0x46b1 # EQEmu 06/29/05
OP_EnterWorld=0x7262 # EQEmu 06/29/05
OP_PostEnterWorld=0x0df0 # EQEmu 06/29/05
OP_World_Client_CRC1=0x254d # ShowEQ 06/29/05
OP_World_Client_CRC2=0x16c9 # ShowEQ 06/29/05
OP_SetChatServer=0x6238 # EQEmu 06/29/05
OP_SetChatServer2=0x6536 # EQEmu 06/29/05
OP_ZoneServerInfo=0x407c # EQEmu 06/29/05
OP_WorldComplete=0x509d # EQEmu 06/29/05
OP_WorldClientReady=0x5e99 # EQEmu 06/29/05 (Guess - Doodman)
OP_WorldUnknown001=0x7510 # EQEmu 06/29/05 (New to 6/29)
OP_SendSystemStats=0x681b # anonymous system stats reporting
OP_WorldLogout=0x7186
OP_ZoneUnavail=0x6d95
OP_WorldLevelTooHigh=0x583b # world->client. Cancels zone in.
OP_CharInacessable=0x28aa # world->client. Cancels zone in.
#OP_InvalidLoginPassword=0x52A4
#Zone in opcodes
OP_ZoneEntry=0x2ec9 # ShowEQ 06/29/05
OP_ZoneInUnknown=0x0000
OP_AckPacket=0x7752 # ShowEQ 06/29/05
OP_NewZone=0x7ac5 # ShowEQ 06/29/05
OP_ReqClientSpawn=0x0e76 # ShowEQ 06/29/05
OP_ZoneSpawns=0x5ee8 # ShowEQ 06/29/05
OP_CharInventory=0x15ff # EQEmu 06/29/05
OP_SetServerFilter=0x7709 # ShowEQ 06/29/05
OP_LockoutTimerInfo=0x7c12 # EQEmu 06/29/05
OP_SendZonepoints=0x775d # EQEmu 06/29/05
OP_SpawnDoor=0x4c24 # ShowEQ 06/29/05
OP_ReqNewZone=0x47c9 # ShowEQ 06/29/05
OP_PlayerProfile=0x75df # ShowEQ 06/29/05
OP_TimeOfDay=0x1580 # ShowEQ 06/29/05
OP_SendAATable=0x367d # ShowEQ 06/29/05
OP_ZoneServerReady=0x0000 #dosent exist in this version
OP_Logout=0x0701 # EQEmu 06/29/05
OP_LogoutReply=0x48c2 # ShowEQ 06/29/05 (OP_Logout)
OP_PreLogoutReply=0x711e #0 len packet sent during logout/zoning
OP_LevelUpdate=0x6d44 # ShowEQ 06/29/05
OP_MobUpdate=0x0000
OP_Stamina=0x74ab # ShowEQ 06/29/05
#Petition Opcodes
OP_PetitionSearch=0x2aec #search term for petition
OP_PetitionSearchResults=0x2aec #(list of?) matches from search
OP_PetitionSearchText=0x0000 #text results of search
OP_Petition=0x251f #0x73cb
OP_PetitionUpdate=0x3813 #guess
OP_PetitionCheckout=0x0000
OP_PetitionCheckIn=0x0000
OP_PetitionQue=0x0000
OP_PetitionUnCheckout=0x0000
OP_PetitionDelete=0x0000
OP_DeletePetition=0x0000
OP_PetitionResolve=0x6ea9 #0x688f # ShowEQ 5/11/05
OP_PDeletePetition=0x0000
OP_PetitionBug=0x0000
OP_PetitionRefresh=0x0000
OP_PetitionCheckout2=0x0000
OP_PetitionViewPetition=0x0000
#Guild Opcodes
OP_ZoneGuildList=0x68AC
OP_GuildMemberList=0x147d # ShowEQ 06/29/05
OP_GuildMemberUpdate=0x4cc7 # ShowEQ 06/29/05
OP_GuildMemberLevelUpdate=0x0000 #dosent exist in this version.
OP_GuildRemove=0x6cce # EQEmu - Doodman (found 8/26/05
OP_GuildPeace=0x0e37 # EQEmu - Doodman (found 8/26/05
OP_GuildWar=0x186d # EQEmu - Doodman (found 8/26/05
OP_GuildLeader=0x1ef1 # EQEmu - Doodman (found 8/26/05)
OP_GuildDemote=0x1f46 # EQEmu - Doodman (found 8/26/05)
OP_GuildMOTD=0x21ed # ShowEQ 06/29/05
OP_SetGuildMOTD=0x475a # EQEmu - Doodman (found 8/26/05)
OP_GetGuildsList=0x7fec # ShowEQ 06/29/05
OP_GuildInvite=0x61d0 # EQEmu - Doodman (found 8/26/05)
OP_GuildPublicNote=0x17a2 # EQEmu - Doodman (found 8/26/05)
OP_GuildDelete=0x5a4d # EQEmu - Doodman (found 8/26/05
OP_GuildInviteAccept=0x0179 # EQEmu - Doodman (found 8/26/05)
OP_GetGuildMOTD=0x3246
OP_GetGuildMOTDReply=0x5B14
OP_GuildManageBanker=0x3d1e
OP_GuildBank=0x0000
#guild opcodes: 549F (clear guild?), 0x0695, 0x0AC0, 0x1864, 0x32cf, 0x4cc7,
# 0x461A, 0x6966, 0x7085
#GM/guide opcodes
OP_GMServers=0x3387 #/servers
OP_GMBecomeNPC=0x7864 #/becomenpc
OP_GMZoneRequest=0x61ff #/zone
OP_GMSearchCorpse=0x7f3e #/searchcorpse
OP_GMHideMe=0x0581 #/hideme
OP_GMGoto=0x69c8 #/goto
OP_GMDelCorpse=0x727a #/delcorpse
OP_GMApproval=0x0000
OP_GMToggle=0x5ce2 #/toggle
OP_GMZoneRequest2=0x0000
OP_GMSummon=0x3383 #/summon
OP_GMEmoteZone=0x3905 #/emotezone
OP_GMFind=0x5e6a #/find
OP_GMKick=0x1cee #/kick
OP_GMNameChange=0x0000
OP_SafePoint=0x0000
OP_Bind_Wound=0x4796
OP_GMTraining=0x613d
OP_GMEndTraining=0x181c
OP_GMTrainSkill=0x3838
OP_GMEndTrainingResponse=0x0a94
OP_Animation=0x0b71 # EQEmu 06/29/05
OP_Taunt=0x5306
OP_Stun=0x7DCF
OP_MoneyUpdate=0x425c
OP_SendAAStats=0x5966 # EQEmu 06/29/05
OP_SendExpZonein=0x0587 # ShowEQ 06/29/05
OP_RespondAA=0x35e8
OP_UpdateAA=0x0000
OP_IncreaseStats=0x0000
OP_ReadBook=0x1496
OP_CombatAbility=0x5e55
OP_Dye=0x773f # ShowEQ 06/29/05
OP_Consume=0x7a83 # ShowEQ 06/29/05
OP_Begging=0x2c81 # ShowEQ 06/29/05
OP_InspectRequest=0x2403
OP_Action2=0x0000 # ShowEQ 06/29/05
OP_BeginCast=0x3990 # ShowEQ 06/29/05
OP_WhoAllRequest=0x5cdd # ShowEQ 06/29/05
OP_ColoredText=0x4bc6 # ShowEQ 06/29/05
OP_Consent=0x1081 # ShowEQ 06/29/05
OP_LFGCommand=0x022f # ShowEQ 06/29/05
OP_LFGGetMatchesRequest=0x6f82 # ShowEQ 06/29/05
OP_LFGAppearance=0x024d
OP_LFGResponse=0x1fe1 # ShowEQ 5/11/05
OP_LFGGetMatchesResponse=0x06c5 # ShowEQ 06/29/05
OP_LootItem=0x2acf # ShowEQ 06/29/05
OP_Bug=0x3eba # ShowEQ 06/29/05
OP_BoardBoat=0x67c9 # ShowEQ 06/29/05
OP_Save=0x6d9b # ShowEQ 06/29/05
OP_Camp=0x2844 # ShowEQ 06/29/05
OP_EndLootRequest=0x7fe4 # ShowEQ 06/29/05
OP_LoadSpellSet=0x403e # ShowEQ 06/29/05
OP_AutoAttack=0x6c47 # ShowEQ 06/29/05
OP_AutoFire=0x6c53
OP_Consider=0x2717 # ShowEQ 06/29/05
OP_Emote=0x55bc # ShowEQ 06/29/05
OP_PetCommands=0x58b2 # ShowEQ 06/29/05
OP_PetBuffWindow=0x4e31
OP_SpawnAppearance=0x18b7 # ShowEQ 06/29/05
OP_DeleteSpawn=0x1a64 # ShowEQ 06/29/05
OP_FormattedMessage=0x42cd # ShowEQ 06/29/05
OP_WhoAllResponse=0x6686 # ShowEQ 06/29/05
OP_AutoAttack2=0x0fa6 # ShowEQ 06/29/05
OP_SetRunMode=0x0342 # ShowEQ 06/29/05
OP_SimpleMessage=0x5a48 # ShowEQ 06/29/05
OP_SaveOnZoneReq=0x2baf # ShowEQ 06/29/05
OP_MoveDoor=0x0ef7 # ShowEQ 06/29/05
OP_SenseHeading=0x5666 # ShowEQ 06/29/05
OP_Buff=0x33dc # ShowEQ 06/29/05
OP_LootComplete=0x20b2 # ShowEQ 06/29/05
OP_EnvDamage=0x0990
OP_Split=0x6a53 # ShowEQ 06/29/05
OP_Surname=0x48fe # ShowEQ 06/29/05
OP_ClearSurname=0x0000
OP_MoveItem=0x7657 # ShowEQ 06/29/05
OP_FaceChange=0x763b # ShowEQ 06/29/05
OP_ItemPacket=0x3397 # ShowEQ 06/29/05
OP_ItemLinkResponse=0x1d43 # ShowEQ 06/29/05
OP_ClientReady=0x5e20 # ShowEQ 06/29/05
OP_ZoneChange=0x60ef # ShowEQ 06/29/05
OP_MemorizeSpell=0x05ac # ShowEQ 06/29/05
OP_ItemLinkClick=0x53e5 # ShowEQ 06/29/05
OP_SwapSpell=0x36b2 # ShowEQ 06/29/05
OP_Forage=0x7c32 # ShowEQ 06/29/05
OP_ConsentResponse=0x6380 # ShowEQ 06/29/05
OP_BazaarSearch=0x524e # ShowEQ 06/29/05
OP_NewSpawn=0x4f11 # ShowEQ 06/29/05
OP_WearChange=0x601d # ShowEQ 06/29/05
OP_Action=0x4513 # ShowEQ 06/29/05
OP_SpecialMesg=0x5ef7 # ShowEQ 06/29/05
OP_Bazaar=0x0000
OP_LeaveBoat=0x7187 # ShowEQ 06/29/05
OP_Weather=0x65ca # ShowEQ 06/29/05
OP_LFPGetMatchesRequest=0x45d0 # ShowEQ 06/29/05
OP_Illusion=0x7441 # ShowEQ 06/29/05
OP_TargetMouse=0x2274 # ShowEQ 06/29/05
OP_InspectAnswer=0x2dd6 # ShowEQ 06/29/05
OP_GMKill=0x692c # ShowEQ 06/29/05
OP_MoneyOnCorpse=0x2fca # ShowEQ 06/29/05
OP_ClickDoor=0x700d # ShowEQ 06/29/05
OP_LootRequest=0x2316 # ShowEQ 06/29/05
OP_YellForHelp=0x2e20 # ShowEQ 06/29/05
OP_ManaChange=0x0b2d # ShowEQ 06/29/05
OP_ConsentDeny=0x4e8c # ShowEQ 06/29/05
OP_LFPCommand=0x35a6 # ShowEQ 06/29/05
OP_RandomReply=0x6cd5 # ShowEQ 06/29/05
OP_DenyResponse=0x7c66 # ShowEQ 06/29/05
OP_ConsiderCorpse=0x673c # ShowEQ 06/29/05
OP_CorpseDrag=0x50c0 #
OP_CorpseDrop=0x7c7c #
OP_ConfirmDelete=0x28f2 # ShowEQ 06/29/05
OP_MobHealth=0x3d2d # ShowEQ 06/29/05
OP_SkillUpdate=0x6a93 # ShowEQ 06/29/05
OP_RandomReq=0x21e0 # ShowEQ 06/29/05
OP_CastSpell=0x4839 # ShowEQ 06/29/05
OP_ClientUpdate=0x14cb # ShowEQ 06/29/05
OP_MobUpdate=0x0000 #not used anymore, here for backwards compat
OP_Report=0x0375 # ShowEQ 06/29/05
OP_GroundSpawn=0x736b # ShowEQ 06/29/05
OP_TargetCommand=0x6563 #0x0dfe # ShowEQ 06/29/05
OP_TargetHoTT=0x3ef6
OP_LFPGetMatchesResponse=0x63fe # ShowEQ 06/29/05
OP_Jump=0x4dbc # ShowEQ 06/29/05
OP_ExpUpdate=0x5ecd # ShowEQ 06/29/05
OP_AAAction=0x3af4 # ShowEQ 06/29/05
OP_Death=0x5188 # ShowEQ 06/29/05
OP_BecomeCorpse=0x128c
OP_GMLastName=0x0c81 # ShowEQ 06/29/05
OP_InitialMobHealth=0x2ecc # ShowEQ 06/29/05
OP_Mend=0x14ef # ShowEQ 06/29/05
OP_MendHPUpdate=0x1ffa # ShowEQ 5/11/05
OP_Feedback=0x224d # ShowEQ 06/29/05
OP_TGB=0x5e51 # ShowEQ 06/29/05
OP_InterruptCast=0x0db3
OP_Damage=0x1848 # ShowEQ 06/29/05 (OP_Action2)
OP_ChannelMessage=0x1004 # ShowEQ 06/29/05 (OP_CommonMessage)
OP_LevelAppearance=0x358e
OP_MultiLineMsg=0x0000
OP_Charm=0x10a1
OP_DeleteSpell=0x3fe6
OP_ApproveZone=0x0000
OP_Assist=0x5D02
OP_AugmentItem=0x539b
OP_BazaarInspect=0x0000
OP_AAExpUpdate=0x6dd8 # ShowEQ 06/29/05
OP_ClientError=0x0000
OP_DeleteItem=0x1c4a
OP_DeleteCharge=0x0841
OP_ControlBoat=0x0000
OP_DumpName=0x0000
OP_FeignDeath=0x2ad8
OP_Fishing=0x0b36
OP_Heartbeat=0x0000
OP_InstillDoubt=0x389e
OP_ItemName=0x0000
OP_LDoNButton=0x0000
OP_LDoNOpen=0x083b
OP_MoveCoin=0x1dd9
OP_ReloadUI=0x0000
OP_ZonePlayerToBind=0x385e # FNW Discovered on Feb 9, 2007
OP_Translocate=0x78c1
OP_Sacrifice=0x5f62
OP_ApplyPoison=0x4298
#bazaar trader stuff stuff:
#become and buy from
#Server->Client: [ Opcode: OP_Unknown (0x2403) Size: 8 ]
# 0: 46 01 00 00 39 01 00 00 | F...9...
OP_TraderDelItem=0x0da9
OP_BecomeTrader=0x66f9
OP_TraderShop=0x19d8
OP_TraderItemUpdate=0x0000
OP_Trader=0x0681
OP_ShopItem=0x0000
OP_TraderBuy=0x0f8e # ShowEQ 06/29/05
OP_Barter=0x7460
#pc/npc trading
OP_TradeRequest=0x372f # ShowEQ 06/29/05
OP_TradeAcceptClick=0x0065 # ShowEQ 06/29/05
OP_TradeRequestAck=0x4048 # ShowEQ 06/29/05
OP_TradeCoins=0x34c1
OP_FinishTrade=0x6014
OP_CancelTrade=0x2dc1 # ShowEQ 06/29/05
OP_TradeMoneyUpdate=0x3e63 #not sure
#merchant crap
OP_ShopPlayerSell=0x0e13 # ShowEQ 06/29/05
OP_ShopEnd=0x7e03 # ShowEQ 06/29/05
OP_ShopEndConfirm=0x0000
OP_ShopPlayerBuy=0x221e
OP_ShopRequest=0x3c4b # ShowEQ 06/29/05
OP_ShopDelItem=0x0000 #0x0da9 maybe, 16 bytes though
#tradeskill stuff:
OP_ClickObject=0x0f47 # ShowEQ 06/29/05
OP_ClickObjectAction=0x6937 # EQEMu 06/29/05
OP_RecipeDetails=0x0353 # EQEMu 06/29/05
OP_RecipesFavorite=0x23f0
OP_RecipesSearch=0x31f8 # EQEmu 06/29/05
OP_RecipeReply=0x4ea2 # EQEmu 06/29/05
OP_RecipeAutoCombine=0x7822
OP_TradeSkillCombine=0x0b40 # ShowEQ 06/29/05
OP_RequestDuel=0x28e1
OP_DuelResponse=0x2e78
OP_DuelResponse2=0x3bad #when accepted
OP_RezzComplete=0x60fa
OP_RezzRequest=0x417a
OP_RezzAnswer=0x6219
OP_SafeFallSuccess=0x5309
OP_Shielding=0x0000
OP_TargetReject=0x0000
OP_TestBuff=0x0000
OP_Track=0x5205 # ShowEQ 06/29/05
OP_TrackTarget=0x71ae
OP_TrackUnknown=0x74e1 #size 0 right after OP_Track
#Tribute Packets:
OP_OpenGuildTributeMaster=0x60b6 #open guild tribute master window
OP_OpenTributeMaster=0x512e #open tribute master window
OP_OpenTributeReply=0x0000 #reply to open request
OP_SelectTribute=0x625d #clicking on a tribute, and text reply
OP_TributeItem=0x6f6c #donating an item
OP_TributeMoney=0x27b3 #donating money
OP_TributeNPC=0x0000 #seems to be missing now
OP_TributeToggle=0x2688 #activating/deactivating tribute
OP_TributeTimer=0x4665 #a 4 byte tier update, 10 minutes for seconds
OP_TributePointUpdate=0x6463 #16 byte point packet
OP_TributeUpdate=0x5639 # ShowEQ 06/29/05
OP_GuildTributeInfo=0x5e3d # EQEmu 06/29/05
OP_TributeInfo=0x152d # EQEmu 06/29/05
OP_SendGuildTributes=0x5e3a # request packet, 4 bytes
OP_SendTributes=0x067a # request packet, 4 bytes, migth be backwards
OP_CloseTributeMaster=0x7f25 #sent by client when they close window
#Adventure packets:
OP_LeaveAdventure=0x0c0d
OP_AdventureFinish=0x3906
OP_AdventureInfoRequest=0x2aaf #right click adventure recruiter
OP_AdventureInfo=0x1db5 #text reply to right click
OP_AdventureRequest=0x43fd
OP_AdventureDetails=0x3f26
OP_AdventureData=0x0677
OP_AdventureUpdate=0x64ac
OP_AdventureMerchantRequest=0x0950
OP_AdventureMerchantResponse=0x4416
OP_AdventureMerchantPurchase=0x413d
OP_AdventureMerchantSell=0x0097
OP_AdventurePointsUpdate=0x420a #not sure, followed purchase
OP_AdventureStatsRequest=0x5fc7
OP_AdventureStatsReply=0x56cd
OP_AdventureLeaderboardRequest=0x230a
OP_AdventureLeaderboardReply=0x0d0f
# request stats: 0x5fc7, reply 0x56cd
# request leaderboard: 0x230a, reply 0x0d0f
#Group Opcodes
OP_GroupDisband=0x4033 # ShowEQ 06/29/05
OP_GroupInvite=0x3853 # ShowEQ 06/29/05
OP_GroupFollow=0x1b48 # ShowEQ 06/29/05
OP_GroupUpdate=0x66ba # ShowEQ 06/29/05
OP_GroupAcknowledge=0x0797
OP_GroupCancelInvite=0x42c9 # ShowEQ 06/29/05
OP_GroupDelete=0x0000
OP_GroupFollow2=0x0000 #used with GroupInvite2
OP_GroupInvite2=0x1f27 #this is sometimes sent instead of OP_GroupInvite
OP_CancelInvite=0x0000
OP_RaidJoin=0x0000 # ShowEQ 06/29/05
OP_RaidInvite=0x1f21 # ShowEQ 06/29/05
OP_RaidUpdate=0x1974 # EQEmu 06/29/05
OP_ZoneComplete=0x0000
OP_ItemLinkText=0x0000
OP_ClearObject=0x8258
OP_DisciplineUpdate=0x7180
OP_DisciplineTimer=0x53df
OP_LocInfo=0x0000
OP_FindPersonRequest=0x3c41 # ShowEQ 06/29/05
OP_FindPersonReply=0x5711
OP_ForceFindPerson=0x0000
OP_LoginComplete=0x0000
OP_Sound=0x4a1d
#OP_Zone_MissingName01=0x0000 #remove on recompile
OP_MobRename=0x3230
OP_BankerChange=0x6a5b
#Rogue packets
OP_SenseTraps=0x24ab # ShowEQ 06/29/05
OP_PickPocket=0x4a2a
OP_DisarmTraps=0x0000
OP_Disarm=0x17d9
OP_Hide=0x6f64 # ShowEQ 06/29/05
OP_Sneak=0x4312 # ShowEQ 06/29/05
#Task packets
#task complete related: 0x54eb (24 bytes), 0x4c8c (8 bytes), 0x6a1d (4 bytes)
OP_TaskActivityComplete=0x54eb
OP_CompletedTasks=0x53c4 # ShowEQ 06/29/05
OP_TaskDescription=0x682d # ShowEQ 06/29/05
OP_TaskActivity=0x3ba8 # ShowEQ 06/29/05
OP_TaskMemberList=0x09b6 #not sure
OP_OpenNewTasksWindow=0x5e7c #combined with OP_AvaliableTask I think
OP_AvaliableTask=0x0000
OP_AcceptNewTask=0x207f
OP_TaskHistoryRequest=0x3274
OP_TaskHistoryReply=0x009c
OP_CancelTask=0x4c8c
OP_DeclineAllTasks=0x207f #not sure, 12 bytes
OP_RequestClientZoneChange=0x1235
OP_PurchaseLeadershipAA=0x07f1
OP_UpdateLeadershipAA=0x3eec
OP_LeadershipExpUpdate=0x7416
OP_LeadershipExpToggle=0x17bf
OP_GroupUpdateLeaderAA=0x4c3f
OP_MarkNPC=0x5b37
OP_ClearNPCMarks=0x1794
OP_DoGroupLeadershipAbility=0x4ffe
OP_DelegateAbility=0x56eb
#The following 4 Opcodes are for SoF only:
OP_FinishWindow=0x0000 #Trevius 03/15/09
OP_FinishWindow2=0x0000 #Trevius 03/15/09
OP_ItemVerifyRequest=0x0000 #Trevius 03/15/09
OP_ItemVerifyReply=0x0000 #Trevius 03/15/09
#discovered opcodes not yet used:
OP_CrashDump=0x6d5d
OP_PlayMP3=0x0000
OP_FriendsWho=0x41db
OP_MoveLogRequest=0x78e8 #gone I think
OP_MoveLogDisregard=0x0000 #gone I think
OP_ReclaimCrystals=0x12fd
OP_CrystalCountUpdate=0x0000
OP_DynamicWall=0x0000
OP_CustomTitles=0x2a28 # ShowEQ 06/29/05
OP_RequestTitles=0x5eba # EQEmu 06/29/05
OP_SendTitleList=0x3e89 # EQEmu 06/29/05
OP_SetTitle=0x1f22 # EQEmu 06/29/05
OP_SetTitleReply=0x5eab # EQEmu 06/29/05
OP_Bandolier=0x6f0c
OP_PotionBelt=0x0719
OP_OpenDiscordMerchant=0x0000 #8 bytes
OP_DiscordMerchantInventory=0x0000 #long item packet
OP_GiveMoney=0x56d4 #16 bytes, pp, gp, sp, cp.
OP_OnLevelMessage=0x1dde
OP_PopupResponse=0x3816
OP_RequestKnowledgeBase=0x7584
OP_KnowledgeBase=0x4a52
OP_PlayerUnderWorld=0x46d9
OP_PVPStats=0x5cc0
OP_PVPLeaderBoardRequest=0x61d2
OP_PVPLeaderBoardReply=0x1a59
OP_PVPLeaderBoardDetailsRequest=0x06a2
OP_PVPLeaderBoardDetailsReply=0x246a
OP_WeaponEquip1=0x6c5e
OP_WeaponEquip2=0x63da
OP_WeaponUnequip2=0x381d
OP_VoiceMacroIn=0x2866
OP_VoiceMacroOut=0x2ec6
#named unknowns, to make looking for real unknown easier
OP_AnnoyingZoneUnknown=0x0000 # EQEmu 06/29/05
OP_Some6ByteHPUpdate=0x0000 #seems to happen when you target group members
OP_SomeItemPacketMaybe=0x497c # EQEmu 06/29/05
OP_QueryResponseThing=0x6379
OP_FloatListThing=0x7510 # EQEmu 06/29/05
#Login opcodes
OP_SessionReady=0x0001
OP_Login=0x0002
OP_ServerListRequest=0x0004
OP_PlayEverquestRequest=0x000d
OP_PlayEverquestResponse=0x0021
OP_ChatMessage=0x0016
OP_LoginAccepted=0x0017
OP_ServerListResponse=0x0018
OP_Poll=0x0029
OP_EnterChat=0x000f
OP_PollResponse=0x0011
#raw opcodes
OP_RAWSessionRequest=0x0000
OP_RAWSessionResponse=0x0000
OP_RAWCombined=0x0000
OP_RAWSessionDisconnect=0x0000
OP_RAWKeepAlive=0x0000
OP_RAWSessionStatRequest=0x0000
OP_RAWSessionStatResponse=0x0000
OP_RAWPacket=0x0000
OP_RAWFragment=0x0000
OP_RAWOutOfOrderAck=0x0000
OP_RAWAck=0x0000
OP_RAWAppCombined=0x0000
OP_RAWOutOfSession=0x0000
#mail opcodes
OP_Command=0x0000
OP_MailboxHeader=0x0000
OP_MailHeader=0x0000
OP_MailBody=0x0000
OP_NewMail=0x0000
OP_SentConfirm=0x0000
#we need to document the differences between these packets to make identifying them easier
OP_MobHealth=0x3d2d # ShowEQ 06/29/05
OP_HPUpdate=0x217b # ShowEQ 06/29/05
OP_Some3ByteHPUpdate=0x0000 #initial HP update for mobs
OP_InitialHPUpdate=0x7ac2 # ShowEQ 06/29/05
#remove these
#junk
OP_0x0193=0x0000
OP_0x0347=0x0000
OP_ConsumeAmmo=0x0000
OP_EmoteAnim=0x0000
OP_Deny=0x0000
OP_SetDataRate=0x0000

View File

@ -314,7 +314,7 @@
9058|2014_11_26_InventoryTableUpdate.sql|SHOW COLUMNS FROM `inventory` LIKE 'ornamenticon'|empty|
9059|2014_12_01_mercs_table_update.sql|SHOW COLUMNS FROM `mercs` LIKE 'MercSize'|empty|
9060|2014_12_09_items_table_update.sql|SHOW COLUMNS FROM `items` LIKE 'herosforgemodel'|empty|
9061|2014_12_11_inventory_table_update.sql|SHOW COLUMNS FROM `inventory` LIKE 'ornament_hero_model'|empty|
9061|2014_12_13_inventory_table_update.sql|SHOW COLUMNS FROM `inventory` LIKE 'ornament_hero_model'|empty|
9062|2014_12_15_multiple_table_updates.sql|SHOW COLUMNS FROM `items` LIKE 'augslot6type'|empty|
# Upgrade conditions:

View File

@ -1296,7 +1296,6 @@ void ClientList::GetClients(const char *zone_name, std::vector<ClientListEntry *
void ClientList::SendClientVersionSummary(const char *Name)
{
uint32 Client62Count = 0;
uint32 ClientTitaniumCount = 0;
uint32 ClientSoFCount = 0;
uint32 ClientSoDCount = 0;
@ -1317,7 +1316,6 @@ void ClientList::SendClientVersionSummary(const char *Name)
{
case 1:
{
++Client62Count;
break;
}
case 2:
@ -1354,7 +1352,7 @@ void ClientList::SendClientVersionSummary(const char *Name)
}
zoneserver_list.SendEmoteMessage(Name, 0, 0, 13, "There are %i 6.2, %i Titanium, %i SoF, %i SoD, %i UF, %i RoF clients currently connected.",
Client62Count, ClientTitaniumCount, ClientSoFCount, ClientSoDCount, ClientUnderfootCount, ClientRoFCount);
zoneserver_list.SendEmoteMessage(Name, 0, 0, 13, "There are %i Titanium, %i SoF, %i SoD, %i UF, %i RoF clients currently connected.",
ClientTitaniumCount, ClientSoFCount, ClientSoDCount, ClientUnderfootCount, ClientRoFCount);
}

View File

@ -1759,7 +1759,6 @@ luabind::scope lua_register_client_version() {
.enum_("constants")
[
luabind::value("Unknown", static_cast<int>(EQClientUnknown)),
luabind::value("62", static_cast<int>(EQClient62)),
luabind::value("Titanium", static_cast<int>(EQClientTitanium)),
luabind::value("SoF", static_cast<int>(EQClientSoF)),
luabind::value("SoD", static_cast<int>(EQClientSoD)),

View File

@ -2773,13 +2773,6 @@ void TaskManager::SendActiveTaskDescription(Client *c, int TaskID, int SequenceN
if(strlen(Tasks[TaskID]->Reward) != 0) {
switch(c->GetClientVersion()) {
case EQClient62:
{
MakeAnyLenString(&RewardTmp, "%c%07i-00001-00001-00001-00001-000013E0ABA6B%s%c",
0x12, ItemID, Tasks[TaskID]->Reward,0x12);
break;
}
case EQClientTitanium:
{
MakeAnyLenString(&RewardTmp, "%c%06X000000000000000000000000000000014505DC2%s%c",
@ -2807,13 +2800,6 @@ void TaskManager::SendActiveTaskDescription(Client *c, int TaskID, int SequenceN
if(Item) {
switch(c->GetClientVersion()) {
case EQClient62:
{
MakeAnyLenString(&RewardTmp, "%c%07i-00001-00001-00001-00001-000013E0ABA6B%s%c",
0x12, ItemID, Item->Name,0x12);
break;
}
case EQClientTitanium:
{
MakeAnyLenString(&RewardTmp, "%c%06X000000000000000000000000000000014505DC2%s%c",