diff --git a/old/CRC16.cpp b/old/CRC16.cpp
new file mode 100644
index 0000000..f7b43ad
--- /dev/null
+++ b/old/CRC16.cpp
@@ -0,0 +1,328 @@
+/*
+ EQ2Emulator: Everquest II Server Emulator
+ Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net)
+
+ This file is part of EQ2Emulator.
+
+ EQ2Emulator is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ EQ2Emulator is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with EQ2Emulator. If not, see .
+*/
+#include
+
+unsigned long IntArray[]={
+0x00000000,
+0x77073096,
+0xEE0E612C,
+0x990951BA,
+0x076DC419,
+0x706AF48F,
+0xE963A535,
+0x9E6495A3,
+0x0EDB8832,
+0x79DCB8A4,
+0xE0D5E91E,
+0x97D2D988,
+0x09B64C2B,
+0x7EB17CBD,
+0xE7B82D07,
+0x90BF1D91,
+0x1DB71064,
+0x6AB020F2,
+0xF3B97148,
+0x84BE41DE,
+0x1ADAD47D,
+0x6DDDE4EB,
+0xF4D4B551,
+0x83D385C7,
+0x136C9856,
+0x646BA8C0,
+0xFD62F97A,
+0x8A65C9EC,
+0x14015C4F,
+0x63066CD9,
+0xFA0F3D63,
+0x8D080DF5,
+0x3B6E20C8,
+0x4C69105E,
+0xD56041E4,
+0xA2677172,
+0x3C03E4D1,
+0x4B04D447,
+0xD20D85FD,
+0xA50AB56B,
+0x35B5A8FA,
+0x42B2986C,
+0xDBBBC9D6,
+0xACBCF940,
+0x32D86CE3,
+0x45DF5C75,
+0xDCD60DCF,
+0xABD13D59,
+0x26D930AC,
+0x51DE003A,
+0xC8D75180,
+0xBFD06116,
+0x21B4F4B5,
+0x56B3C423,
+0xCFBA9599,
+0xB8BDA50F,
+0x2802B89E,
+0x5F058808,
+0xC60CD9B2,
+0xB10BE924,
+0x2F6F7C87,
+0x58684C11,
+0xC1611DAB,
+0xB6662D3D,
+0x76DC4190,
+0x01DB7106,
+0x98D220BC,
+0xEFD5102A,
+0x71B18589,
+0x06B6B51F,
+0x9FBFE4A5,
+0xE8B8D433,
+0x7807C9A2,
+0x0F00F934,
+0x9609A88E,
+0xE10E9818,
+0x7F6A0DBB,
+0x086D3D2D,
+0x91646C97,
+0xE6635C01,
+0x6B6B51F4,
+0x1C6C6162,
+0x856530D8,
+0xF262004E,
+0x6C0695ED,
+0x1B01A57B,
+0x8208F4C1,
+0xF50FC457,
+0x65B0D9C6,
+0x12B7E950,
+0x8BBEB8EA,
+0xFCB9887C,
+0x62DD1DDF,
+0x15DA2D49,
+0x8CD37CF3,
+0xFBD44C65,
+0x4DB26158,
+0x3AB551CE,
+0xA3BC0074,
+0xD4BB30E2,
+0x4ADFA541,
+0x3DD895D7,
+0xA4D1C46D,
+0xD3D6F4FB,
+0x4369E96A,
+0x346ED9FC,
+0xAD678846,
+0xDA60B8D0,
+0x44042D73,
+0x33031DE5,
+0xAA0A4C5F,
+0xDD0D7CC9,
+0x5005713C,
+0x270241AA,
+0xBE0B1010,
+0xC90C2086,
+0x5768B525,
+0x206F85B3,
+0xB966D409,
+0xCE61E49F,
+0x5EDEF90E,
+0x29D9C998,
+0xB0D09822,
+0xC7D7A8B4,
+0x59B33D17,
+0x2EB40D81,
+0xB7BD5C3B,
+0xC0BA6CAD,
+0xEDB88320,
+0x9ABFB3B6,
+0x03B6E20C,
+0x74B1D29A,
+0xEAD54739,
+0x9DD277AF,
+0x04DB2615,
+0x73DC1683,
+0xE3630B12,
+0x94643B84,
+0x0D6D6A3E,
+0x7A6A5AA8,
+0xE40ECF0B,
+0x9309FF9D,
+0x0A00AE27,
+0x7D079EB1,
+0xF00F9344,
+0x8708A3D2,
+0x1E01F268,
+0x6906C2FE,
+0xF762575D,
+0x806567CB,
+0x196C3671,
+0x6E6B06E7,
+0xFED41B76,
+0x89D32BE0,
+0x10DA7A5A,
+0x67DD4ACC,
+0xF9B9DF6F,
+0x8EBEEFF9,
+0x17B7BE43,
+0x60B08ED5,
+0xD6D6A3E8,
+0xA1D1937E,
+0x38D8C2C4,
+0x4FDFF252,
+0xD1BB67F1,
+0xA6BC5767,
+0x3FB506DD,
+0x48B2364B,
+0xD80D2BDA,
+0xAF0A1B4C,
+0x36034AF6,
+0x41047A60,
+0xDF60EFC3,
+0xA867DF55,
+0x316E8EEF,
+0x4669BE79,
+0xCB61B38C,
+0xBC66831A,
+0x256FD2A0,
+0x5268E236,
+0xCC0C7795,
+0xBB0B4703,
+0x220216B9,
+0x5505262F,
+0xC5BA3BBE,
+0xB2BD0B28,
+0x2BB45A92,
+0x5CB36A04,
+0xC2D7FFA7,
+0xB5D0CF31,
+0x2CD99E8B,
+0x5BDEAE1D,
+0x9B64C2B0,
+0xEC63F226,
+0x756AA39C,
+0x026D930A,
+0x9C0906A9,
+0xEB0E363F,
+0x72076785,
+0x05005713,
+0x95BF4A82,
+0xE2B87A14,
+0x7BB12BAE,
+0x0CB61B38,
+0x92D28E9B,
+0xE5D5BE0D,
+0x7CDCEFB7,
+0x0BDBDF21,
+0x86D3D2D4,
+0xF1D4E242,
+0x68DDB3F8,
+0x1FDA836E,
+0x81BE16CD,
+0xF6B9265B,
+0x6FB077E1,
+0x18B74777,
+0x88085AE6,
+0xFF0F6A70,
+0x66063BCA,
+0x11010B5C,
+0x8F659EFF,
+0xF862AE69,
+0x616BFFD3,
+0x166CCF45,
+0xA00AE278,
+0xD70DD2EE,
+0x4E048354,
+0x3903B3C2,
+0xA7672661,
+0xD06016F7,
+0x4969474D,
+0x3E6E77DB,
+0xAED16A4A,
+0xD9D65ADC,
+0x40DF0B66,
+0x37D83BF0,
+0xA9BCAE53,
+0xDEBB9EC5,
+0x47B2CF7F,
+0x30B5FFE9,
+0xBDBDF21C,
+0xCABAC28A,
+0x53B39330,
+0x24B4A3A6,
+0xBAD03605,
+0xCDD70693,
+0x54DE5729,
+0x23D967BF,
+0xB3667A2E,
+0xC4614AB8,
+0x5D681B02,
+0x2A6F2B94,
+0xB40BBE37,
+0xC30C8EA1,
+0x5A05DF1B,
+0x2D02EF8D,
+};
+
+unsigned long CRC16(const unsigned char *buf, int size, int key)
+{
+ unsigned long ecx = key; //mov ecx, [esp+arg_8]
+ unsigned long eax = ecx; //mov eax, ecx
+ unsigned long edi;
+
+ eax = ~ eax; //not eax
+ eax&=0xFF; //and eax, 0FFh
+ eax=IntArray[eax]; //mov eax, dword_0_10115D38[eax*4] IntArray
+ eax ^= 0x00FFFFFF; //xor eax, 0FFFFFFh
+ int edx = ecx; //mov edx, ecx
+ edx = edx >> 8; //sar edx, 8
+ edx = edx ^ eax; //xor edx, eax
+ eax = eax >> 8; //sar eax, 8
+ edx &= 0xFF; //and edx, 0FFh
+ eax &= 0x00FFFFFF; //and eax, 0FFFFFFh
+ eax ^= IntArray[edx]; //xor eax, dword_0_10115D38[edx*4]
+ edx = ecx; //mov edx, ecx
+ edx = edx >> 0x10; //sar edx, 10h
+ edx ^= eax; //xor edx, eax
+ eax = eax >> 8; //sar eax, 8
+ edx &= 0xFF; //and edx, 0FFh
+ int esi = IntArray[edx]; //mov esi, dword_0_10115D38[edx*4]
+ edx = size; //mov edx, [esp+4+arg_4]
+ eax &= 0x00FFFFFF; //and eax, 0FFFFFFh
+ eax ^= esi; //xor eax, esi
+ ecx = ecx >> 0x18; //sar ecx, 18h
+ ecx ^= eax; //xor ecx, eax
+ ecx &= 0xFF; //and ecx, 0FFh
+ esi = IntArray[ecx]; //mov esi, dword_0_10115D38[ecx*4]
+ ecx = (int)*buf; //mov ecx, [esp+4+arg_0]
+ eax = eax >> 8; //sar eax, 8
+ eax &= 0x00FFFFFF; //and eax, 0FFFFFFh
+ eax ^= esi; //xor eax, esi
+ for(int x = 0; x < size; x++)
+ { //eax is the crc, ecx is the current part of the buffer
+ int edx = 0; //xor edx, edx
+ edx = buf[x] & 0x00FF; //mov dl, [ecx]
+
+ edx ^= eax; //xor edx, eax
+ eax = eax >> 8; //sar eax, 8
+ edx &= 0xFF; //and edx, 0FFh
+ edi = IntArray[edx]; //mov edi, dword_0_10115D38[edx*4]
+ eax &= 0x00FFFFFF; //and eax, 0FFFFFFh
+ eax ^= edi; //xor eax, edi
+ }
+ return ~eax;
+}
diff --git a/old/CRC16.h b/old/CRC16.h
new file mode 100644
index 0000000..7aacd36
--- /dev/null
+++ b/old/CRC16.h
@@ -0,0 +1,25 @@
+/*
+ EQ2Emulator: Everquest II Server Emulator
+ Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net)
+
+ This file is part of EQ2Emulator.
+
+ EQ2Emulator is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ EQ2Emulator is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with EQ2Emulator. If not, see .
+*/
+#ifndef _CRC16_H
+#define _CRC16_H
+
+unsigned long CRC16(const unsigned char *buf, int size, int key);
+
+#endif
diff --git a/old/Common_Defines.h b/old/Common_Defines.h
new file mode 100644
index 0000000..4600d97
--- /dev/null
+++ b/old/Common_Defines.h
@@ -0,0 +1,32 @@
+/*
+ EQ2Emulator: Everquest II Server Emulator
+ Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net)
+
+ This file is part of EQ2Emulator.
+
+ EQ2Emulator is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ EQ2Emulator is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with EQ2Emulator. If not, see .
+*/
+#define BASEDIR "./"
+
+#ifndef DB_INI_FILE
+ #ifdef LOGIN
+ #define DB_INI_FILE BASEDIR "login_db.ini"
+ #else
+ #define DB_INI_FILE BASEDIR "world_db.ini"
+ #endif
+#endif
+
+#ifndef MAIN_CONFIG_FILE
+ #define MAIN_CONFIG_FILE BASEDIR "server_config.json"
+#endif
\ No newline at end of file
diff --git a/old/Condition.cpp b/old/Condition.cpp
new file mode 100644
index 0000000..348c90a
--- /dev/null
+++ b/old/Condition.cpp
@@ -0,0 +1,133 @@
+/*
+ EQ2Emulator: Everquest II Server Emulator
+ Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net)
+
+ This file is part of EQ2Emulator.
+
+ EQ2Emulator is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ EQ2Emulator is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with EQ2Emulator. If not, see .
+*/
+#include "debug.h"
+#include "Condition.h"
+
+#ifdef WIN32
+#else
+#include
+#include
+#include
+#endif
+
+#ifdef WIN32
+/*
+
+ Windows does not support condition variables by default.
+ So we use a simple hack of sleeping in wait() and doing
+ nothing anywhere else.
+
+ some possible places to look for ways to do this:
+ http://www.cs.wustl.edu/~schmidt/win32-cv-1.html
+
+ http://sources.redhat.com/pthreads-win32/
+ http://sources.redhat.com/cgi-bin/cvsweb.cgi/pthreads/pthread_cond_signal.c?rev=1.7&content-type=text/x-cvsweb-markup&cvsroot=pthreads-win32
+
+*/
+
+#define CONDITION_HACK_GRANULARITY 4
+
+
+Condition::Condition()
+{
+}
+
+void Condition::Signal()
+{
+}
+
+void Condition::SignalAll()
+{
+}
+
+void Condition::Wait()
+{
+ Sleep(CONDITION_HACK_GRANULARITY);
+}
+
+Condition::~Condition()
+{
+}
+
+
+#else //!WIN32
+
+Condition::Condition()
+{
+ pthread_cond_init(&cond,NULL);
+ pthread_mutex_init(&mutex,NULL);
+}
+
+void Condition::Signal()
+{
+ pthread_mutex_lock(&mutex);
+ pthread_cond_signal(&cond);
+ pthread_mutex_unlock(&mutex);
+}
+
+void Condition::SignalAll()
+{
+ pthread_mutex_lock(&mutex);
+ pthread_cond_broadcast(&cond);
+ pthread_mutex_unlock(&mutex);
+}
+
+void Condition::Wait()
+{
+ pthread_mutex_lock(&mutex);
+ pthread_cond_wait(&cond,&mutex);
+ pthread_mutex_unlock(&mutex);
+}
+
+/*
+I commented this specifically because I think it might be very
+difficult to write a windows counterpart to it, so I would like
+to discourage its use until we can confirm that it can be reasonably
+implemented on windows.
+
+bool Condition::TimedWait(unsigned long usec)
+{
+struct timeval now;
+struct timespec timeout;
+int retcode=0;
+ pthread_mutex_lock(&mutex);
+ gettimeofday(&now,NULL);
+ now.tv_usec+=usec;
+ timeout.tv_sec = now.tv_sec + (now.tv_usec/1000000);
+ timeout.tv_nsec = (now.tv_usec%1000000) *1000;
+ //cout << "now=" << now.tv_sec << "."<.
+*/
+#ifndef __CONDITION_H
+#define __CONDITION_H
+
+#ifndef WIN32
+#include
+#endif
+
+//Sombody, someday needs to figure out how to implement a condition
+//system on windows...
+
+
+class Condition {
+ private:
+#ifndef WIN32
+ pthread_cond_t cond;
+ pthread_mutex_t mutex;
+#endif
+ public:
+ Condition();
+ void Signal();
+ void SignalAll();
+ void Wait();
+// bool TimedWait(unsigned long usec);
+ ~Condition();
+};
+
+#endif
+
+
diff --git a/old/ConfigReader.cpp b/old/ConfigReader.cpp
new file mode 100644
index 0000000..6264d59
--- /dev/null
+++ b/old/ConfigReader.cpp
@@ -0,0 +1,304 @@
+/*
+ EQ2Emulator: Everquest II Server Emulator
+ Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net)
+
+ This file is part of EQ2Emulator.
+
+ EQ2Emulator is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ EQ2Emulator is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with EQ2Emulator. If not, see .
+*/
+#include "ConfigReader.h"
+#include "Log.h"
+
+ConfigReader::~ConfigReader(){
+ MStructs.lock();
+ DestroyStructs();
+ MStructs.unlock();
+}
+PacketStruct* ConfigReader::getStructByVersion(const char* name, int16 version){
+ PacketStruct* packet = 0;
+ PacketStruct* newpacket = 0;
+ MStructs.lock();
+ vector* struct_versions = structs[string(name)];
+ if(struct_versions){
+ vector::iterator iter;
+ for(iter = struct_versions->begin(); iter != struct_versions->end(); iter++){
+ packet = *iter;
+ if(packet && packet->GetVersion() == version){
+ newpacket = new PacketStruct(packet, version);
+ break;
+ }
+ }
+ }
+ MStructs.unlock();
+ if(!newpacket)
+ LogWrite(PACKET__ERROR, 0, "Packet", "Could not find struct named '%s' with version: %i", name, version);
+ return newpacket;
+}
+void ConfigReader::ReloadStructs(){
+ MStructs.lock();
+ DestroyStructs();
+ for(int32 i=0;i*>::iterator struct_iterator;
+ for(struct_iterator=structs.begin();struct_iterator!=structs.end();struct_iterator++) {
+ vector* versions = struct_iterator->second;
+ vector::iterator version_iter;
+ if(versions){
+ for(version_iter = versions->begin(); version_iter != versions->end(); version_iter++){
+ safe_delete(*version_iter);
+ }
+ }
+ safe_delete(versions);
+ }
+ structs.clear();
+}
+PacketStruct* ConfigReader::getStruct(const char* name, int16 version){
+ PacketStruct* latest_version = 0;
+ PacketStruct* new_latest_version = 0;
+ MStructs.lock();
+ vector* struct_versions = structs[string(name)];
+ if(struct_versions){
+ vector::iterator iter;
+ for(iter = struct_versions->begin(); iter != struct_versions->end(); iter++){
+ if((*iter)->GetVersion() <= version && (!latest_version || (*iter)->GetVersion() > latest_version->GetVersion()))
+ latest_version = *iter;
+ }
+ if (latest_version) {
+ // TODO: Need to revisit this, if we have a packet struct with a version of 1, but no opcodes, we still go to the else if statement
+ // which results in sending corrupt data to client
+ if (latest_version->GetOpcode() != OP_Unknown && (latest_version->GetOpcodeValue(version) == 0xFFFF || latest_version->GetOpcodeValue(version)==0xCDCD)) {
+ LogWrite(PACKET__ERROR, 0, "Packet", "Could not find valid opcode for Packet Struct '%s' and client version %d", latest_version->GetName(), version);
+ }
+ else if(strlen(latest_version->GetOpcodeType()) == 0 || latest_version->GetOpcode() != OP_Unknown)
+ new_latest_version = new PacketStruct(latest_version, version);
+ }
+
+ }
+ MStructs.unlock();
+ if(!new_latest_version && !latest_version)
+ LogWrite(PACKET__ERROR, 0, "Packet", "Could not find struct named '%s' with version: %i", name, version);
+ return new_latest_version;
+}
+int16 ConfigReader::GetStructVersion(const char* name, int16 version){
+ MStructs.lock();
+ vector* struct_versions = structs[string(name)];
+ int16 ret = 0;
+ if(struct_versions){
+ vector::iterator iter;
+ PacketStruct* latest_version = 0;
+ for(iter = struct_versions->begin(); iter != struct_versions->end(); iter++){
+ if(!latest_version || ( (*iter)->GetVersion() > latest_version->GetVersion() && (*iter)->GetVersion() <= version) )
+ latest_version = *iter;
+ }
+ if(latest_version)
+ ret = latest_version->GetVersion();
+ }
+ MStructs.unlock();
+ return ret;
+}
+void ConfigReader::addStruct(const char* name, int16 version, PacketStruct* new_struct){
+ string strname(name);
+ vector* struct_versions = structs[strname];
+ if(struct_versions)
+ struct_versions->push_back(new_struct);
+ else{
+ struct_versions = new vector;
+ struct_versions->push_back(new_struct);
+ structs[strname] = struct_versions;
+ }
+}
+bool ConfigReader::LoadFile(const char* name){
+ load_files.push_back(name);
+ return processXML_Elements(name);
+}
+bool ConfigReader::processXML_Elements(const char* fileName){
+ XMLNode xMainNode=XMLNode::openFileHelper(fileName,"EQ2Emulator");
+ if(xMainNode.isEmpty())
+ return false;
+ for(int i=0;iSetName(struct_name);
+ if(opcode_type)
+ new_struct->SetOpcodeType(opcode_type);
+ if(opcode_name){
+ if(!new_struct->SetOpcode(opcode_name)){
+ safe_delete(new_struct);
+ continue;
+ }
+ }
+ new_struct->SetVersion(version);
+ loadDataStruct(new_struct, xMainNode.getChildNode("Struct", i));
+ addStruct(struct_name, version, new_struct);
+ }
+ return true;
+}
+void ConfigReader::loadDataStruct(PacketStruct* packet, XMLNode parentNode, bool array_packet){
+ for(int x=0;xGetVersion());
+ if(substruct_packet){
+ vector::iterator itr;
+ vector* structs = substruct_packet->getStructs();
+ DataStruct* ds = 0;
+ int i = 0;
+ char tmp[12] = {0};
+ for(i=0;ibegin();itr!=structs->end();itr++) {
+ ds = *itr;
+ string new_name;
+ if(array_packet)
+ new_name = string(name).append("_").append(ds->GetStringName());
+ else
+ new_name = string(name).append("_").append(ds->GetStringName()).append("_").append(tmp);
+
+ DataStruct* ds2 = new DataStruct(new_name.c_str(), ds->GetType(),ds->GetLength(), ds->GetType2());
+
+ if(!array_packet && strlen(ds->GetArraySizeVariable()) > 1)
+ ds2->SetArraySizeVariable(string(name).append("_").append(ds->GetArraySizeVariable()).append("_").append(tmp).c_str());
+ ds2->SetOversized(ds->GetOversized());
+ ds2->SetOversizedByte(ds->GetOversizedByte());
+ ds2->SetDefaultValue(ds->GetDefaultValue());
+ ds2->SetMaxArraySize(ds->GetMaxArraySize());
+ ds2->SetIfSetVariable(ds->GetIfSetVariable() ? ds->GetIfSetVariable() : if_variable);
+ ds2->SetIfNotSetVariable(ds->GetIfSetVariable() ? ds->GetIfNotSetVariable() : if_not_variable);
+ ds2->SetIfNotEqualsVariable(ds->GetIfNotEqualsVariable());
+ ds2->SetIfFlagNotSetVariable(ds->GetIfFlagNotSetVariable());
+ ds2->SetIfFlagSetVariable(ds->GetIfFlagSetVariable());
+ ds2->SetIsOptional(ds->IsOptional());
+ ds2->AddIfSetVariable(if_variable); //add this if the modifier is on the piece that is including the substruct
+ ds2->AddIfNotSetVariable(if_not_variable); //add this if the modifier is on the piece that is including the substruct
+ packet->add(ds2);
+ }
+ }
+ if(!array_packet){
+ i--;
+ substruct_packet->renameSubstructArray(name, i);
+ //ds2->SetArraySizeVariable((char*)string(name).append("_").append(ds->GetArraySizeVariable()).append("_").append(tmp).c_str());
+ packet->addPacketArrays(substruct_packet);
+ }
+
+ safe_delete(substruct_packet);
+ }
+ continue;
+ }
+ else if(type && strncasecmp(type,"Array", 5)==0 && array_size){
+ PacketStruct* new_packet = new PacketStruct;
+ new_packet->SetName(name);
+ new_packet->IsSubPacket(true);
+ new_packet->SetVersion(packet->GetVersion());
+ loadDataStruct(new_packet, parentNode.getChildNode("Data", x), true);
+ packet->add(new_packet);
+ }
+ if(!name || !type)
+ {
+ LogWrite(MISC__WARNING, 0, "Misc", "Ignoring invalid Data Element, all elements must include at least an ElementName and Type!");
+ LogWrite(MISC__WARNING, 0, "Misc", "\tStruct: '%s', version: %i", parentNode.getAttribute("Name"), parentNode.getAttribute("ClientVersion"));
+ continue;
+ }
+ DataStruct* ds = new DataStruct(name, type, num_size, type2);
+ int8 oversized_value = 0;
+ int8 oversized_byte_value = 255;
+ if(oversized){
+ try{
+ oversized_value = atoi(oversized);
+ }
+ catch(...){}
+ }
+ if(oversized_byte){
+ try{
+ oversized_byte_value = atoi(oversized_byte);
+ }
+ catch(...){}
+ }
+ ds->SetOversizedByte(oversized_byte_value);
+ ds->SetOversized(oversized_value);
+ ds->SetMaxArraySize(max_array_size);
+ if(array_size)
+ ds->SetArraySizeVariable(array_size);
+ ds->SetDefaultValue(byte_val);
+ ds->SetIfSetVariable(if_variable);
+ ds->SetIfNotSetVariable(if_not_variable);
+ ds->SetIfEqualsVariable(if_equals_variable);
+ ds->SetIfNotEqualsVariable(if_not_equals_variable);
+ ds->SetIfFlagNotSetVariable(if_flag_not_set_variable);
+ ds->SetIfFlagSetVariable(if_flag_set_variable);
+ if (optional && strlen(optional) > 0 && (strcmp("true", optional) == 0 || strcmp("TRUE", optional) == 0 || strcmp("True", optional) == 0))
+ ds->SetIsOptional(true);
+ packet->add(ds);
+ }
+}
+
diff --git a/old/ConfigReader.h b/old/ConfigReader.h
new file mode 100644
index 0000000..cd34ae5
--- /dev/null
+++ b/old/ConfigReader.h
@@ -0,0 +1,52 @@
+/*
+ EQ2Emulator: Everquest II Server Emulator
+ Copyright (C) 2007 EQ2EMulator Development Team (http://www.eq2emulator.net)
+
+ This file is part of EQ2Emulator.
+
+ EQ2Emulator is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ EQ2Emulator is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with EQ2Emulator. If not, see .
+*/
+#ifndef __CONFIG_READER__
+#define __CONFIG_READER__
+#include
+#include "PacketStruct.h"
+#include