2018-08-15 12:43:56 +00:00
|
|
|
import sys
|
2020-12-02 14:22:26 +00:00
|
|
|
from datatypes import EmitDefinition, EmitTypeDeclaration
|
2008-04-27 05:59:38 +00:00
|
|
|
import content
|
|
|
|
import network
|
|
|
|
|
|
|
|
def create_enum_table(names, num):
|
|
|
|
lines = []
|
|
|
|
lines += ["enum", "{"]
|
2017-05-21 23:07:13 +00:00
|
|
|
for name in names:
|
2008-04-27 05:59:38 +00:00
|
|
|
lines += ["\t%s,"%name]
|
|
|
|
lines += ["\t%s" % num, "};"]
|
|
|
|
return lines
|
2008-08-27 15:51:09 +00:00
|
|
|
|
|
|
|
def create_flags_table(names):
|
|
|
|
lines = []
|
|
|
|
lines += ["enum", "{"]
|
|
|
|
i = 0
|
|
|
|
for name in names:
|
|
|
|
lines += ["\t%s = 1<<%d," % (name,i)]
|
|
|
|
i += 1
|
|
|
|
lines += ["};"]
|
|
|
|
return lines
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2008-06-12 10:51:48 +00:00
|
|
|
def EmitEnum(names, num):
|
2011-01-05 23:51:31 +00:00
|
|
|
print("enum")
|
|
|
|
print("{")
|
|
|
|
print("\t%s=0," % names[0])
|
2008-06-12 10:51:48 +00:00
|
|
|
for name in names[1:]:
|
2011-01-05 23:51:31 +00:00
|
|
|
print("\t%s," % name)
|
|
|
|
print("\t%s" % num)
|
|
|
|
print("};")
|
2008-08-27 15:51:09 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
def EmitFlags(names):
|
2011-01-05 23:51:31 +00:00
|
|
|
print("enum")
|
|
|
|
print("{")
|
2008-08-27 15:51:09 +00:00
|
|
|
i = 0
|
|
|
|
for name in names:
|
2011-01-05 23:51:31 +00:00
|
|
|
print("\t%s = 1<<%d," % (name,i))
|
2008-08-27 15:51:09 +00:00
|
|
|
i += 1
|
2011-01-05 23:51:31 +00:00
|
|
|
print("};")
|
2008-04-27 05:59:38 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
def main():
|
|
|
|
gen_network_header = "network_header" in sys.argv
|
|
|
|
gen_network_source = "network_source" in sys.argv
|
|
|
|
gen_client_content_header = "client_content_header" in sys.argv
|
|
|
|
gen_client_content_source = "client_content_source" in sys.argv
|
|
|
|
gen_server_content_header = "server_content_header" in sys.argv
|
|
|
|
gen_server_content_source = "server_content_source" in sys.argv
|
|
|
|
|
|
|
|
if gen_client_content_header:
|
|
|
|
print("#ifndef CLIENT_CONTENT_HEADER")
|
|
|
|
print("#define CLIENT_CONTENT_HEADER")
|
|
|
|
|
|
|
|
if gen_server_content_header:
|
|
|
|
print("#ifndef SERVER_CONTENT_HEADER")
|
|
|
|
print("#define SERVER_CONTENT_HEADER")
|
|
|
|
|
|
|
|
|
|
|
|
if gen_client_content_header or gen_server_content_header:
|
|
|
|
# print some includes
|
|
|
|
print('#include <engine/graphics.h>')
|
|
|
|
|
|
|
|
# emit the type declarations
|
|
|
|
contentlines = open("datasrc/content.py", "rb").readlines()
|
|
|
|
order = []
|
|
|
|
for line in contentlines:
|
|
|
|
line = line.strip()
|
|
|
|
if line[:6] == "class ".encode() and "(Struct)".encode() in line:
|
|
|
|
order += [line.split()[1].split("(".encode())[0].decode("ascii")]
|
|
|
|
for name in order:
|
|
|
|
EmitTypeDeclaration(content.__dict__[name])
|
|
|
|
|
|
|
|
# the container pointer
|
|
|
|
print('extern CDataContainer *g_pData;')
|
|
|
|
|
|
|
|
# enums
|
|
|
|
EmitEnum(["IMAGE_%s"%i.name.value.upper() for i in content.container.images.items], "NUM_IMAGES")
|
|
|
|
EmitEnum(["ANIM_%s"%i.name.value.upper() for i in content.container.animations.items], "NUM_ANIMS")
|
|
|
|
EmitEnum(["SPRITE_%s"%i.name.value.upper() for i in content.container.sprites.items], "NUM_SPRITES")
|
|
|
|
|
|
|
|
if gen_client_content_source or gen_server_content_source:
|
|
|
|
if gen_client_content_source:
|
|
|
|
print('#include "client_data.h"')
|
|
|
|
if gen_server_content_source:
|
|
|
|
print('#include "server_data.h"')
|
|
|
|
EmitDefinition(content.container, "datacontainer")
|
|
|
|
print('CDataContainer *g_pData = &datacontainer;')
|
2008-04-27 05:59:38 +00:00
|
|
|
|
2008-06-12 10:51:48 +00:00
|
|
|
# NETWORK
|
2020-12-02 14:22:26 +00:00
|
|
|
if gen_network_header:
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
print("#ifndef GAME_GENERATED_PROTOCOL_H")
|
|
|
|
print("#define GAME_GENERATED_PROTOCOL_H")
|
2022-06-16 14:35:08 +00:00
|
|
|
print("class CUnpacker;")
|
2020-12-02 14:22:26 +00:00
|
|
|
print("#include <engine/message.h>")
|
|
|
|
print(network.RawHeader)
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
for e in network.Enums:
|
|
|
|
for l in create_enum_table(["%s_%s"%(e.name, v) for v in e.values], 'NUM_%sS'%e.name): # pylint: disable=E1101
|
|
|
|
print(l)
|
|
|
|
print("")
|
2008-08-27 15:51:09 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
for e in network.Flags:
|
|
|
|
for l in create_flags_table(["%s_%s" % (e.name, v) for v in e.values]):
|
|
|
|
print(l)
|
|
|
|
print("")
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
non_extended = [o for o in network.Objects if o.ex is None]
|
|
|
|
extended = [o for o in network.Objects if o.ex is not None]
|
|
|
|
for l in create_enum_table(["NETOBJTYPE_EX"]+[o.enum_name for o in non_extended], "NUM_NETOBJTYPES"):
|
|
|
|
print(l)
|
|
|
|
for l in create_enum_table(["__NETOBJTYPE_UUID_HELPER=OFFSET_GAME_UUID-1"]+[o.enum_name for o in extended], "OFFSET_NETMSGTYPE_UUID"):
|
|
|
|
print(l)
|
2011-01-05 23:51:31 +00:00
|
|
|
print("")
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
non_extended = [o for o in network.Messages if o.ex is None]
|
|
|
|
extended = [o for o in network.Messages if o.ex is not None]
|
|
|
|
for l in create_enum_table(["NETMSGTYPE_EX"]+[o.enum_name for o in non_extended], "NUM_NETMSGTYPES"):
|
|
|
|
print(l)
|
|
|
|
print("")
|
|
|
|
for l in create_enum_table(["__NETMSGTYPE_UUID_HELPER=OFFSET_NETMSGTYPE_UUID-1"]+[o.enum_name for o in extended], "OFFSET_MAPITEMTYPE_UUID"):
|
|
|
|
print(l)
|
|
|
|
print("")
|
2008-06-12 10:51:48 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
for item in network.Objects + network.Messages:
|
|
|
|
for line in item.emit_declaration():
|
|
|
|
print(line)
|
|
|
|
print("")
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
EmitEnum(["SOUND_%s"%i.name.value.upper() for i in content.container.sounds.items], "NUM_SOUNDS")
|
|
|
|
EmitEnum(["WEAPON_%s"%i.name.value.upper() for i in content.container.weapons.id.items], "NUM_WEAPONS")
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
print("""
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
class CNetObjHandler
|
|
|
|
{
|
|
|
|
const char *m_pMsgFailedOn;
|
2022-06-22 21:46:25 +00:00
|
|
|
const char *m_pObjFailedOn;
|
2020-12-02 14:22:26 +00:00
|
|
|
const char *m_pObjCorrectedOn;
|
2022-06-22 21:46:25 +00:00
|
|
|
char m_aUnpackedData[1024 * 2];
|
2020-12-02 14:22:26 +00:00
|
|
|
int m_NumObjCorrections;
|
|
|
|
int ClampInt(const char *pErrorMsg, int Value, int Min, int Max);
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
static const char *ms_apObjNames[];
|
2022-06-21 15:34:56 +00:00
|
|
|
static const char *ms_apExObjNames[];
|
2020-12-02 14:22:26 +00:00
|
|
|
static int ms_aObjSizes[];
|
2022-06-22 21:46:25 +00:00
|
|
|
static int ms_aUnpackedObjSizes[];
|
|
|
|
static int ms_aUnpackedExObjSizes[];
|
2020-12-02 14:22:26 +00:00
|
|
|
static const char *ms_apMsgNames[];
|
2022-06-21 15:34:56 +00:00
|
|
|
static const char *ms_apExMsgNames[];
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
public:
|
|
|
|
CNetObjHandler();
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2022-06-22 21:46:25 +00:00
|
|
|
void *SecureUnpackObj(int Type, CUnpacker *pUnpacker);
|
2021-02-08 21:26:26 +00:00
|
|
|
const char *GetObjName(int Type) const;
|
|
|
|
int GetObjSize(int Type) const;
|
2022-06-22 21:46:25 +00:00
|
|
|
int GetUnpackedObjSize(int Type) const;
|
2021-02-08 21:26:26 +00:00
|
|
|
int NumObjCorrections() const;
|
|
|
|
const char *CorrectedObjOn() const;
|
2022-06-22 21:46:25 +00:00
|
|
|
const char *FailedObjOn() const;
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2021-02-08 21:26:26 +00:00
|
|
|
const char *GetMsgName(int Type) const;
|
2020-12-02 14:22:26 +00:00
|
|
|
void *SecureUnpackMsg(int Type, CUnpacker *pUnpacker);
|
|
|
|
bool TeeHistorianRecordMsg(int Type);
|
2021-02-08 21:26:26 +00:00
|
|
|
const char *FailedMsgOn() const;
|
2020-12-02 14:22:26 +00:00
|
|
|
};
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
""")
|
2008-04-27 05:59:38 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
print("#endif // GAME_GENERATED_PROTOCOL_H")
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2010-05-29 07:25:38 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
if gen_network_source:
|
|
|
|
# create names
|
2010-05-29 07:25:38 +00:00
|
|
|
lines = []
|
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['#include "protocol.h"']
|
2022-06-16 14:35:08 +00:00
|
|
|
lines += ['#include <engine/shared/packer.h>']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['#include <engine/shared/protocol.h>']
|
2022-06-16 14:35:08 +00:00
|
|
|
lines += ['#include <engine/shared/uuid_manager.h>']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['#include <game/mapitems_ex.h>']
|
|
|
|
|
|
|
|
lines += ['CNetObjHandler::CNetObjHandler()']
|
|
|
|
lines += ['{']
|
|
|
|
lines += ['\tm_pMsgFailedOn = "";']
|
2022-06-22 21:46:25 +00:00
|
|
|
lines += ['\tm_pObjFailedOn = "";']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['\tm_pObjCorrectedOn = "";']
|
|
|
|
lines += ['\tm_NumObjCorrections = 0;']
|
|
|
|
lines += ['}']
|
|
|
|
lines += ['']
|
2021-02-08 21:26:26 +00:00
|
|
|
lines += ['int CNetObjHandler::NumObjCorrections() const { return m_NumObjCorrections; }']
|
|
|
|
lines += ['const char *CNetObjHandler::CorrectedObjOn() const { return m_pObjCorrectedOn; }']
|
2022-06-22 21:46:25 +00:00
|
|
|
lines += ['const char *CNetObjHandler::FailedObjOn() const { return m_pObjFailedOn; }']
|
2021-02-08 21:26:26 +00:00
|
|
|
lines += ['const char *CNetObjHandler::FailedMsgOn() const { return m_pMsgFailedOn; }']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['']
|
|
|
|
lines += ['']
|
|
|
|
lines += ['']
|
|
|
|
lines += ['']
|
|
|
|
lines += ['']
|
|
|
|
|
|
|
|
lines += ['static const int max_int = 0x7fffffff;']
|
|
|
|
lines += ['static const int min_int = 0x80000000;']
|
|
|
|
|
|
|
|
lines += ['int CNetObjHandler::ClampInt(const char *pErrorMsg, int Value, int Min, int Max)']
|
|
|
|
lines += ['{']
|
|
|
|
lines += ['\tif(Value < Min) { m_pObjCorrectedOn = pErrorMsg; m_NumObjCorrections++; return Min; }']
|
|
|
|
lines += ['\tif(Value > Max) { m_pObjCorrectedOn = pErrorMsg; m_NumObjCorrections++; return Max; }']
|
|
|
|
lines += ['\treturn Value;']
|
|
|
|
lines += ['}']
|
|
|
|
|
|
|
|
lines += ["const char *CNetObjHandler::ms_apObjNames[] = {"]
|
2022-06-21 15:34:56 +00:00
|
|
|
lines += ['\t"EX/UUID",']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['\t"%s",' % o.name for o in network.Objects if o.ex is None]
|
|
|
|
lines += ['\t""', "};", ""]
|
|
|
|
|
2022-06-21 15:34:56 +00:00
|
|
|
lines += ["const char *CNetObjHandler::ms_apExObjNames[] = {"]
|
|
|
|
lines += ['\t"invalid",']
|
|
|
|
lines += ['\t"%s",' % o.name for o in network.Objects if o.ex is not None]
|
|
|
|
lines += ['\t""', "};", ""]
|
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ["int CNetObjHandler::ms_aObjSizes[] = {"]
|
|
|
|
lines += ['\t0,']
|
|
|
|
lines += ['\tsizeof(%s),' % o.struct_name for o in network.Objects if o.ex is None]
|
|
|
|
lines += ['\t0', "};", ""]
|
|
|
|
|
2022-06-22 21:46:25 +00:00
|
|
|
lines += ["int CNetObjHandler::ms_aUnpackedObjSizes[] = {"]
|
|
|
|
lines += ['\t16,']
|
|
|
|
lines += ['\tsizeof(%s),' % o.struct_name for o in network.Objects if o.ex is None]
|
|
|
|
lines += ["};", ""]
|
|
|
|
|
|
|
|
lines += ["int CNetObjHandler::ms_aUnpackedExObjSizes[] = {"]
|
|
|
|
lines += ['\t0,']
|
|
|
|
lines += ['\tsizeof(%s),' % o.struct_name for o in network.Objects if o.ex is not None]
|
|
|
|
lines += ["};", ""]
|
2020-12-02 14:22:26 +00:00
|
|
|
|
|
|
|
lines += ['const char *CNetObjHandler::ms_apMsgNames[] = {']
|
|
|
|
lines += ['\t"invalid",']
|
2022-06-21 15:34:56 +00:00
|
|
|
lines += ['\t"%s",' % msg.name for msg in network.Messages if msg.ex is None]
|
|
|
|
lines += ['\t""', "};", ""]
|
|
|
|
|
|
|
|
lines += ['const char *CNetObjHandler::ms_apExMsgNames[] = {']
|
|
|
|
lines += ['\t"invalid",']
|
|
|
|
lines += ['\t"%s",' % msg.name for msg in network.Messages if msg.ex is not None]
|
|
|
|
lines += ['\t""', "};", ""]
|
2020-12-02 14:22:26 +00:00
|
|
|
|
2021-02-08 21:26:26 +00:00
|
|
|
lines += ['const char *CNetObjHandler::GetObjName(int Type) const']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['{']
|
2022-06-21 15:34:56 +00:00
|
|
|
lines += ['\tif(Type >= 0 && Type < NUM_NETOBJTYPES)']
|
|
|
|
lines += ['\t{']
|
|
|
|
lines += ['\t\treturn ms_apObjNames[Type];']
|
|
|
|
lines += ['\t}']
|
|
|
|
lines += ['\telse if(Type > __NETOBJTYPE_UUID_HELPER && Type < OFFSET_NETMSGTYPE_UUID)']
|
|
|
|
lines += ['\t{']
|
|
|
|
lines += ['\t\treturn ms_apExObjNames[Type - __NETOBJTYPE_UUID_HELPER];']
|
|
|
|
lines += ['\t}']
|
|
|
|
lines += ['\treturn "(out of range)";']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['}']
|
|
|
|
lines += ['']
|
|
|
|
|
2021-02-08 21:26:26 +00:00
|
|
|
lines += ['int CNetObjHandler::GetObjSize(int Type) const']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['{']
|
|
|
|
lines += ['\tif(Type < 0 || Type >= NUM_NETOBJTYPES) return 0;']
|
|
|
|
lines += ['\treturn ms_aObjSizes[Type];']
|
|
|
|
lines += ['}']
|
|
|
|
lines += ['']
|
|
|
|
|
2022-06-22 21:46:25 +00:00
|
|
|
lines += ['int CNetObjHandler::GetUnpackedObjSize(int Type) const']
|
|
|
|
lines += ['{']
|
|
|
|
lines += ['\tif(Type >= 0 && Type < NUM_NETOBJTYPES)']
|
|
|
|
lines += ['\t{']
|
|
|
|
lines += ['\t\treturn ms_aUnpackedObjSizes[Type];']
|
|
|
|
lines += ['\t}']
|
|
|
|
lines += ['\telse if(Type > __NETOBJTYPE_UUID_HELPER && Type < OFFSET_NETMSGTYPE_UUID)']
|
|
|
|
lines += ['\t{']
|
|
|
|
lines += ['\t\treturn ms_aUnpackedExObjSizes[Type - __NETOBJTYPE_UUID_HELPER];']
|
|
|
|
lines += ['\t}']
|
|
|
|
lines += ['\treturn 0;']
|
|
|
|
lines += ['}']
|
|
|
|
lines += ['']
|
|
|
|
|
|
|
|
|
2021-02-08 21:26:26 +00:00
|
|
|
lines += ['const char *CNetObjHandler::GetMsgName(int Type) const']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['{']
|
2022-06-21 15:34:56 +00:00
|
|
|
lines += ['\tif(Type >= 0 && Type < NUM_NETMSGTYPES)']
|
|
|
|
lines += ['\t{']
|
|
|
|
lines += ['\t\treturn ms_apMsgNames[Type];']
|
|
|
|
lines += ['\t}']
|
|
|
|
lines += ['\telse if(Type > __NETMSGTYPE_UUID_HELPER && Type < OFFSET_MAPITEMTYPE_UUID)']
|
|
|
|
lines += ['\t{']
|
|
|
|
lines += ['\t\treturn ms_apExMsgNames[Type - __NETMSGTYPE_UUID_HELPER];']
|
|
|
|
lines += ['\t}']
|
|
|
|
lines += ['\treturn "(out of range)";']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['}']
|
|
|
|
lines += ['']
|
|
|
|
|
|
|
|
for l in lines:
|
|
|
|
print(l)
|
|
|
|
|
|
|
|
# create validate tables
|
|
|
|
lines = []
|
|
|
|
lines += ['static int validate_invalid(void *data, int size) { return -1; }']
|
|
|
|
lines += ["typedef int(*VALIDATEFUNC)(void *data, int size);"]
|
|
|
|
lines += ["static VALIDATEFUNC validate_funcs[] = {"]
|
|
|
|
lines += ['\tvalidate_invalid,']
|
|
|
|
lines += ['\tvalidate_%s,' % o.name for o in network.Objects]
|
|
|
|
lines += ["\t0x0", "};", ""]
|
|
|
|
|
|
|
|
lines += ["int netobj_validate(int type, void *data, int size)"]
|
|
|
|
lines += ["{"]
|
|
|
|
lines += ["\tif(type < 0 || type >= NUM_NETOBJTYPES) return -1;"]
|
|
|
|
lines += ["\treturn validate_funcs[type](data, size);"]
|
|
|
|
lines += ["};", ""]
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
lines = []
|
2022-06-22 21:46:25 +00:00
|
|
|
lines += ['void *CNetObjHandler::SecureUnpackObj(int Type, CUnpacker *pUnpacker)']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['{']
|
2022-06-22 21:46:25 +00:00
|
|
|
lines += ['\tm_pObjFailedOn = 0;']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['\tswitch(Type)']
|
|
|
|
lines += ['\t{']
|
|
|
|
lines += ['\tcase NETOBJTYPE_EX:']
|
|
|
|
lines += ['\t{']
|
2022-06-22 21:46:25 +00:00
|
|
|
lines += ['\t\tconst unsigned char *pPtr = pUnpacker->GetRaw(sizeof(CUuid));']
|
|
|
|
lines += ['\t\tif(pPtr != 0)']
|
|
|
|
lines += ['\t\t{']
|
|
|
|
lines += ['\t\t\tmem_copy(m_aUnpackedData, pPtr, sizeof(CUuid));']
|
|
|
|
lines += ['\t\t}']
|
|
|
|
lines += ['\t\tbreak;']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['\t}']
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
for item in network.Objects:
|
2020-08-11 20:47:40 +00:00
|
|
|
base_item = None
|
|
|
|
if item.base:
|
|
|
|
base_item = next(i for i in network.Objects if i.name == item.base)
|
2022-06-22 21:46:25 +00:00
|
|
|
for line in item.emit_uncompressed_unpack_and_validate(base_item):
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ["\t" + line]
|
|
|
|
lines += ['\t']
|
2022-06-22 21:46:25 +00:00
|
|
|
|
|
|
|
lines += ['\tdefault:']
|
|
|
|
lines += ['\t\tm_pObjFailedOn = "(type out of range)";']
|
|
|
|
lines += ['\t\tbreak;']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['\t}']
|
2022-06-22 21:46:25 +00:00
|
|
|
lines += ['\t']
|
|
|
|
lines += ['\tif(pUnpacker->Error())']
|
|
|
|
lines += ['\t\tm_pObjFailedOn = "(unpack error)";']
|
|
|
|
lines += ['\t']
|
|
|
|
lines += ['\tif(m_pObjFailedOn)']
|
|
|
|
lines += ['\t\treturn 0;']
|
|
|
|
lines += ['\tm_pObjFailedOn = "";']
|
|
|
|
lines += ['\treturn m_aUnpackedData;']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['}']
|
|
|
|
lines += ['']
|
2008-06-12 10:51:48 +00:00
|
|
|
|
2022-06-22 21:46:25 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['void *CNetObjHandler::SecureUnpackMsg(int Type, CUnpacker *pUnpacker)']
|
|
|
|
lines += ['{']
|
|
|
|
lines += ['\tm_pMsgFailedOn = 0;']
|
|
|
|
lines += ['\tswitch(Type)']
|
|
|
|
lines += ['\t{']
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
for item in network.Messages:
|
2022-06-22 21:46:25 +00:00
|
|
|
for line in item.emit_unpack_msg():
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ["\t" + line]
|
|
|
|
lines += ['\t']
|
2011-04-13 18:37:12 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['\tdefault:']
|
|
|
|
lines += ['\t\tm_pMsgFailedOn = "(type out of range)";']
|
|
|
|
lines += ['\t\tbreak;']
|
|
|
|
lines += ['\t}']
|
2010-05-29 07:25:38 +00:00
|
|
|
lines += ['\t']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['\tif(pUnpacker->Error())']
|
|
|
|
lines += ['\t\tm_pMsgFailedOn = "(unpack error)";']
|
|
|
|
lines += ['\t']
|
|
|
|
lines += ['\tif(m_pMsgFailedOn)']
|
|
|
|
lines += ['\t\treturn 0;']
|
|
|
|
lines += ['\tm_pMsgFailedOn = "";']
|
2022-06-22 21:46:25 +00:00
|
|
|
lines += ['\treturn m_aUnpackedData;']
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['}']
|
|
|
|
lines += ['']
|
|
|
|
|
2022-06-22 21:46:25 +00:00
|
|
|
|
2020-12-02 14:22:26 +00:00
|
|
|
lines += ['bool CNetObjHandler::TeeHistorianRecordMsg(int Type)']
|
|
|
|
lines += ['{']
|
|
|
|
lines += ['\tswitch(Type)']
|
|
|
|
lines += ['\t{']
|
|
|
|
empty = True
|
|
|
|
for msg in network.Messages:
|
|
|
|
if not msg.teehistorian:
|
|
|
|
lines += ['\tcase %s:' % msg.enum_name]
|
|
|
|
empty = False
|
|
|
|
if not empty:
|
|
|
|
lines += ['\t\treturn false;']
|
|
|
|
lines += ['\tdefault:']
|
|
|
|
lines += ['\t\treturn true;']
|
|
|
|
lines += ['\t}']
|
|
|
|
lines += ['}']
|
|
|
|
lines += ['']
|
|
|
|
|
|
|
|
lines += ['void RegisterGameUuids(CUuidManager *pManager)']
|
|
|
|
lines += ['{']
|
|
|
|
|
|
|
|
for item in network.Objects + network.Messages:
|
|
|
|
if item.ex is not None:
|
|
|
|
lines += ['\tpManager->RegisterName(%s, "%s");' % (item.enum_name, item.ex)]
|
|
|
|
lines += ['\tRegisterMapItemTypeUuids(pManager);']
|
|
|
|
lines += ['}']
|
|
|
|
|
|
|
|
for l in lines:
|
|
|
|
print(l)
|
|
|
|
|
|
|
|
if gen_client_content_header or gen_server_content_header:
|
|
|
|
print("#endif")
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
main()
|