Rewrote network stack, started working on porting to 64-bit

This commit is contained in:
2022-03-12 11:39:41 +02:00
parent 64596d344c
commit a056345a7b
167 changed files with 1388 additions and 3085 deletions

View File

@ -11,9 +11,9 @@ namespace building
typedef struct SLand
{
DWORD dwID;
long lMapIndex;
long x, y;
long width, height;
int lMapIndex;
int x, y;
int width, height;
DWORD dwGuildID;
BYTE bGuildLevelLimit;
DWORD dwPrice;
@ -34,12 +34,12 @@ namespace building
DWORD dwUpgradeVnum;
DWORD dwUpgradeLimitTime;
long lLife;
long lRegion[4];
int lLife;
int lRegion[4];
DWORD dwNPCVnum;
long lNPCX;
long lNPCY;
int lNPCX;
int lNPCY;
DWORD dwGroupVnum; // <20><><EFBFBD><EFBFBD> <20>׷<EFBFBD><D7B7><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD>
DWORD dwDependOnGroupVnum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>׷<EFBFBD>
@ -50,13 +50,13 @@ namespace building
DWORD dwID;
DWORD dwLandID;
DWORD dwVnum;
long lMapIndex;
long x, y;
int lMapIndex;
int x, y;
float xRot;
float yRot;
float zRot;
long lLife;
int lLife;
} TObject;
};

View File

@ -66,9 +66,6 @@ enum EMisc
//LIMIT_GOLD
GOLD_MAX = 2000000000,
MAX_PASSPOD = 8 ,
//END_LIMIT_GOLD

View File

@ -1,7 +1,6 @@
#ifndef __INC_SERVICE_H__
#define __INC_SERVICE_H__
#define _IMPROVED_PACKET_ENCRYPTION_ // <20><>Ŷ <20><>ȣȭ <20><><EFBFBD><EFBFBD>
//#define __AUCTION__
#define __PET_SYSTEM__
#endif

View File

@ -11,7 +11,7 @@ template <typename T> class singleton
singleton()
{
assert(!ms_singleton);
long offset = (long) (T*) 1 - (long) (singleton <T>*) (T*) 1;
long offset = (long) (T*) 1 - (long) (singleton <T>*) (T*) 1;
ms_singleton = (T*) ((long) this + offset);
}

View File

@ -292,37 +292,8 @@ enum
HEADER_DG_MAP_LOCATIONS = 0xfe,
HEADER_DG_P2P = 0xff,
HEADER_GP_CONFIRM_PASSPOD = 1,
HEADER_PG_CONFIRM_PASSPOD = 2,
};
enum E_PASSPOD
{
E_PASSPOD_SUCCESS = 0,
E_PASSPOD_FAILED_PASSPOD_ERROR,
E_PASSPOD_FAILED_USER_NOT_FOUND,
E_PASSPOD_FAILED_SYSTEM_NOT_FOUND,
E_PASSPOD_FAILED_TOKEN_DISABLED,
E_PASSPOD_FAILED_EMPTY,
};
typedef struct SRequestConfirmPasspod
{
int pid;
char passpod[MAX_PASSPOD + 1];
char login[LOGIN_MAX_LEN + 1];
} RequestConfirmPasspod;
typedef struct SResultConfirmPasspod
{
int pid;
int ret_code;
char login[LOGIN_MAX_LEN + 1];
} ResultConfirmPasspod;
/* ----------------------------------------------
* table
* ----------------------------------------------
@ -356,8 +327,8 @@ typedef struct SSimplePlayer
BYTE bChangeName;
WORD wHairPart;
BYTE bDummy[4];
long x, y;
long lAddr;
LONG x, y;
LONG lAddr;
WORD wPort;
BYTE skill_group;
} TSimplePlayer;
@ -382,7 +353,7 @@ typedef struct SPacketDGCreateSuccess
typedef struct TPlayerItemAttribute
{
BYTE bType;
short sValue;
WORD sValue;
} TPlayerItemAttribute;
typedef struct SPlayerItem
@ -393,7 +364,7 @@ typedef struct SPlayerItem
DWORD count;
DWORD vnum;
long alSockets[ITEM_SOCKET_MAX_NUM]; // <20><><EFBFBD>Ϲ<EFBFBD>ȣ
LONG alSockets[ITEM_SOCKET_MAX_NUM]; // <20><><EFBFBD>Ϲ<EFBFBD>ȣ
TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
@ -417,8 +388,8 @@ struct THorseInfo
{
BYTE bLevel;
BYTE bRiding;
short sStamina;
short sHealth;
WORD sStamina;
WORD sHealth;
DWORD dwHorseHealthDropTime;
};
@ -434,7 +405,7 @@ typedef struct SPlayerTable
BYTE level;
BYTE level_step;
short st, ht, dx, iq;
WORD st, ht, dx, iq;
DWORD exp;
INT gold;
@ -443,21 +414,21 @@ typedef struct SPlayerTable
INT x, y, z;
INT lMapIndex;
long lExitX, lExitY;
long lExitMapIndex;
LONG lExitX, lExitY;
LONG lExitMapIndex;
short hp;
short sp;
WORD hp;
WORD sp;
short sRandomHP;
short sRandomSP;
WORD sRandomHP;
WORD sRandomSP;
int playtime;
DWORD playtime;
short stat_point;
short skill_point;
short sub_skill_point;
short horse_skill_point;
WORD stat_point;
WORD skill_point;
WORD sub_skill_point;
WORD horse_skill_point;
TPlayerSkill skills[SKILL_MAX_NUM];
@ -466,19 +437,19 @@ typedef struct SPlayerTable
BYTE part_base;
WORD parts[PART_MAX_NUM];
short stamina;
WORD stamina;
BYTE skill_group;
long lAlignment;
LONG lAlignment;
char szMobile[MOBILE_MAX_LEN + 1];
short stat_reset_count;
WORD stat_reset_count;
THorseInfo horse;
DWORD logoff_interval;
int aiPremiumTimes[PREMIUM_MAX_NUM];
DWORD aiPremiumTimes[PREMIUM_MAX_NUM];
} TPlayerTable;
typedef struct SMobSkillLevel
@ -518,8 +489,8 @@ typedef struct SMobTable : public SEntityTable
BYTE bStr, bDex, bCon, bInt;
DWORD dwDamageRange[2];
short sAttackSpeed;
short sMovingSpeed;
WORD sAttackSpeed;
WORD sMovingSpeed;
BYTE bAggresiveHPPct;
WORD wAggressiveSight;
WORD wAttackRange;
@ -588,7 +559,7 @@ typedef struct SSkillTable
DWORD preSkillVnum;
BYTE preSkillLevel;
long lMaxHit;
LONG lMaxHit;
char szSplashAroundDamageAdjustPoly[100 + 1];
BYTE bSkillAttrType;
@ -623,19 +594,19 @@ typedef struct SQuestTable
DWORD dwPID;
char szName[QUEST_NAME_MAX_LEN + 1];
char szState[QUEST_STATE_MAX_LEN + 1];
long lValue;
LONG lValue;
} TQuestTable;
typedef struct SItemLimit
{
BYTE bType;
long lValue;
LONG lValue;
} TItemLimit;
typedef struct SItemApply
{
BYTE bType;
long lValue;
LONG lValue;
} TItemApply;
typedef struct SItemTable : public SEntityTable
@ -659,15 +630,15 @@ typedef struct SItemTable : public SEntityTable
TItemLimit aLimits[ITEM_LIMIT_MAX_NUM];
TItemApply aApplies[ITEM_APPLY_MAX_NUM];
long alValues[ITEM_VALUES_MAX_NUM];
long alSockets[ITEM_SOCKET_MAX_NUM];
LONG alValues[ITEM_VALUES_MAX_NUM];
LONG alSockets[ITEM_SOCKET_MAX_NUM];
DWORD dwRefinedVnum;
WORD wRefineSet;
BYTE bAlterToMagicItemPct;
BYTE bSpecular;
BYTE bGainSocketPct;
short int sAddonType; // <20><20>Ӽ<EFBFBD>
WORD sAddonType; // <20><20>Ӽ<EFBFBD>
// <20>Ʒ<EFBFBD> limit flag<61><67><EFBFBD><EFBFBD> realtime<6D><65> üũ <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> VNUM<55><4D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ε<EFBFBD>,
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ź<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۸<EFBFBD><DBB8><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD>쿡 LIMIT_MAX_NUM<55><4D><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鼭 üũ<C3BC>ϴ<EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> Ŀ<><C4BF> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>.
@ -690,7 +661,7 @@ struct TItemAttrTable
char szApply[APPLY_NAME_MAX_LEN + 1];
DWORD dwApplyIndex;
DWORD dwProb;
long lValues[5];
LONG lValues[5];
BYTE bMaxLevelBySet[ATTRIBUTE_SET_MAX_NUM];
};
@ -790,7 +761,7 @@ typedef struct SPacketGDSetup
BYTE bChannel; // ä<><C3A4>
WORD wListenPort; // Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>Ʈ <20><>ȣ
WORD wP2PPort; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ű<EFBFBD><C5B0> P2P <20><>Ʈ <20><>ȣ
long alMaps[32];
LONG alMaps[32];
DWORD dwLoginCount;
BYTE bAuthServer;
} TPacketGDSetup;
@ -802,7 +773,7 @@ typedef struct SPacketDGMapLocations
typedef struct SMapLocation
{
long alMaps[32];
LONG alMaps[32];
char szHost[MAX_HOST_LENGTH + 1];
WORD wPort;
} TMapLocation;
@ -830,7 +801,7 @@ typedef struct SPacketDGDirectEnter
typedef struct SPacketGuildSkillUpdate
{
DWORD guild_id;
int amount;
DWORD amount;
BYTE skill_levels[12];
BYTE skill_point;
BYTE save;
@ -839,7 +810,7 @@ typedef struct SPacketGuildSkillUpdate
typedef struct SPacketGuildExpUpdate
{
DWORD guild_id;
int amount;
DWORD amount;
} TPacketGuildExpUpdate;
typedef struct SPacketGuildChangeMemberData
@ -861,10 +832,10 @@ typedef struct TPacketAffectElement
{
DWORD dwType;
BYTE bApplyOn;
long lApplyValue;
LONG lApplyValue;
DWORD dwFlag;
long lDuration;
long lSPCost;
LONG lDuration;
LONG lSPCost;
} TPacketAffectElement;
typedef struct SPacketGDAddAffect
@ -883,7 +854,7 @@ typedef struct SPacketGDRemoveAffect
typedef struct SPacketGDHighscore
{
DWORD dwPID;
long lValue;
LONG lValue;
char cDir;
char szBoard[21];
} TPacketGDHighscore;
@ -963,8 +934,8 @@ typedef struct SPacketGuildWar
BYTE bWar;
DWORD dwGuildFrom;
DWORD dwGuildTo;
long lWarPrice;
long lInitialScore;
LONG lWarPrice;
LONG lInitialScore;
} TPacketGuildWar;
// Game -> DB : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD>
@ -973,14 +944,14 @@ typedef struct SPacketGuildWarScore
{
DWORD dwGuildGainPoint;
DWORD dwGuildOpponent;
long lScore;
long lBetScore;
LONG lScore;
LONG lBetScore;
} TPacketGuildWarScore;
typedef struct SRefineMaterial
{
DWORD vnum;
int count;
DWORD count;
} TRefineMaterial;
typedef struct SRefineTable
@ -989,8 +960,8 @@ typedef struct SRefineTable
//DWORD result_vnum;
DWORD id;
BYTE material_count;
int cost; // <20>ҿ<EFBFBD> <20><><EFBFBD><EFBFBD>
int prob; // Ȯ<><C8AE>
DWORD cost; // <20>ҿ<EFBFBD> <20><><EFBFBD><EFBFBD>
DWORD prob; // Ȯ<><C8AE>
TRefineMaterial materials[REFINE_MATERIAL_MAX_NUM];
} TRefineTable;
@ -1014,16 +985,16 @@ typedef struct SPacketDGChangeName
typedef struct SPacketGuildLadder
{
DWORD dwGuild;
long lLadderPoint;
long lWin;
long lDraw;
long lLoss;
LONG lLadderPoint;
LONG lWin;
LONG lDraw;
LONG lLoss;
} TPacketGuildLadder;
typedef struct SPacketGuildLadderPoint
{
DWORD dwGuild;
long lChange;
LONG lChange;
} TPacketGuildLadderPoint;
typedef struct SPacketGDSMS
@ -1063,7 +1034,7 @@ typedef struct SPacketGDAuthLogin
DWORD adwClientKey[4];
BYTE bBillType;
DWORD dwBillID;
int iPremiumTimes[PREMIUM_MAX_NUM];
DWORD iPremiumTimes[PREMIUM_MAX_NUM];
} TPacketGDAuthLogin;
typedef struct SPacketGDLoginByKey
@ -1080,21 +1051,21 @@ typedef struct SPacketGDLoginByKey
typedef struct SPacketGiveGuildPriv
{
BYTE type;
int value;
DWORD value;
DWORD guild_id;
time_t duration_sec; ///< <20><><EFBFBD>ӽð<D3BD>
} TPacketGiveGuildPriv;
typedef struct SPacketGiveEmpirePriv
{
BYTE type;
int value;
DWORD value;
BYTE empire;
time_t duration_sec;
} TPacketGiveEmpirePriv;
typedef struct SPacketGiveCharacterPriv
{
BYTE type;
int value;
DWORD value;
DWORD pid;
} TPacketGiveCharacterPriv;
typedef struct SPacketRemoveGuildPriv
@ -1111,7 +1082,7 @@ typedef struct SPacketRemoveEmpirePriv
typedef struct SPacketDGChangeCharacterPriv
{
BYTE type;
int value;
DWORD value;
DWORD pid;
BYTE bLog;
} TPacketDGChangeCharacterPriv;
@ -1122,7 +1093,7 @@ typedef struct SPacketDGChangeCharacterPriv
typedef struct SPacketDGChangeGuildPriv
{
BYTE type;
int value;
DWORD value;
DWORD guild_id;
BYTE bLog;
time_t end_time_sec; ///< <20><><EFBFBD>ӽð<D3BD>
@ -1131,7 +1102,7 @@ typedef struct SPacketDGChangeGuildPriv
typedef struct SPacketDGChangeEmpirePriv
{
BYTE type;
int value;
DWORD value;
BYTE empire;
BYTE bLog;
time_t end_time_sec;
@ -1172,7 +1143,7 @@ typedef struct SPacketGDGuildMoneyWithdrawGiveReply
typedef struct SPacketSetEventFlag
{
char szFlagName[EVENT_FLAG_NAME_MAX_LEN + 1];
long lValue;
LONG lValue;
} TPacketSetEventFlag;
typedef struct SPacketBillingLogin
@ -1238,14 +1209,14 @@ typedef struct SGuildReserve
DWORD dwGuildTo;
DWORD dwTime;
BYTE bType;
long lWarPrice;
long lInitialScore;
LONG lWarPrice;
LONG lInitialScore;
bool bStarted;
DWORD dwBetFrom;
DWORD dwBetTo;
long lPowerFrom;
long lPowerTo;
long lHandicap;
LONG lPowerFrom;
LONG lPowerTo;
LONG lHandicap;
} TGuildWarReserve;
typedef struct
@ -1332,7 +1303,7 @@ typedef struct SItemPriceListTable
typedef struct
{
char szName[CHARACTER_NAME_MAX_LEN + 1];
long lDuration;
LONG lDuration;
} TPacketBlockChat;
// PCBANG_IP_LIST
@ -1347,12 +1318,12 @@ typedef struct SPacketPCBangIP
//ADMIN_MANAGER
typedef struct TAdminInfo
{
int m_ID; //<2F><><EFBFBD><EFBFBD>ID
DWORD m_ID; //<2F><><EFBFBD><EFBFBD>ID
char m_szAccount[32]; //<2F><><EFBFBD><EFBFBD>
char m_szName[32]; //ij<><C4B3><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>
char m_szContactIP[16]; //<2F><><EFBFBD>پ<EFBFBD><D9BE><EFBFBD><EFBFBD><EFBFBD>
char m_szServerIP[16]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int m_Authority; //<2F><><EFBFBD><EFBFBD>
DWORD m_Authority; //<2F><><EFBFBD><EFBFBD>
} tAdminInfo;
//END_ADMIN_MANAGER
@ -1463,7 +1434,7 @@ typedef struct tItemAwardInformer
{
char login[LOGIN_MAX_LEN + 1];
char command[20]; //<2F><><EFBFBD>ɾ<EFBFBD>
unsigned int vnum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD vnum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} TPacketItemAwardInfromer;
// <20><><EFBFBD><EFBFBD> <20>˸<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD>
typedef struct tDeleteAwardID
@ -1473,7 +1444,7 @@ typedef struct tDeleteAwardID
typedef struct SChannelStatus
{
short nPort;
WORD nPort;
BYTE bStatus;
} TChannelStatus;

View File

@ -55,27 +55,11 @@ inline bool str_to_number (unsigned int& out, const char *in)
return true;
}
inline bool str_to_number (long& out, const char *in)
inline bool str_to_number (int64_t& out, const char *in)
{
if (0==in || 0==in[0]) return false;
out = (long) strtol(in, NULL, 10);
return true;
}
inline bool str_to_number (unsigned long& out, const char *in)
{
if (0==in || 0==in[0]) return false;
out = (unsigned long) strtoul(in, NULL, 10);
return true;
}
inline bool str_to_number (long long& out, const char *in)
{
if (0==in || 0==in[0]) return false;
out = (long long) strtoull(in, NULL, 10);
out = (int64_t) strtoull(in, NULL, 10);
return true;
}
@ -87,23 +71,4 @@ inline bool str_to_number (float& out, const char *in)
return true;
}
inline bool str_to_number (double& out, const char *in)
{
if (0==in || 0==in[0]) return false;
out = (double) strtod(in, NULL);
return true;
}
#ifdef __FreeBSD__
inline bool str_to_number (long double& out, const char *in)
{
if (0==in || 0==in[0]) return false;
out = (long double) strtold(in, NULL);
return true;
}
#endif
/*----- atoi function -----*/