系统代码块
XxXdef.hpp
#ifndef __XXX_DEF_HPP__ #define __XXX_DEF_HPP__ #pragma pack(push, 4) #include "servercommon/servercommon.h" const int INT_ARRAY_MAX = 10; struct XxXParam { XxXParam() { this->Reset(); } void Reset() { memset(int_array, 0, sizeof(int_array)); } // 四字节对齐 int int_array[INT_ARRAY_MAX]; }; using XxXParamHex = char[sizeof(XxXParam) * 2 + 1]; static_assert(sizeof(XxXParamHex) < 4096, "Incorrect size"); #pragma pack(pop) #endif // __XXX_DEF_HPP__
XxX.h
#ifndef __XXX_H__ #define __XXX_H__ #include "servercommon/xxxdef.hpp" #include "obj/character/attribute.hpp" class Role; class XxX { public: void SetRole(Role *role) { m_role = role; } void InitParam(const XxXParam ¶m); void GetInitParam(XxXParam *param) { *param = m_param; } void ReCalcAttr(CharIntAttrs &base_add, bool is_recalc); private: Role *m_role = nullptr; CharIntAttrs m_attrs_add; XxXParam m_param; }; #endif // __XXX_H__
XxX.cpp
#include "stdafx.h" #include "gamecommon.h" #include "xxx.h" #include "protocal/msgxxx.h" #include "xxxconfig.hpp" void XxX::InitParam(const XxXParam ¶m) { m_param = param; m_module.Init(m_role, this); } void XxX::ReCalcAttr(CharIntAttrs &base_add, bool is_recalc) { if (!is_recalc) { base_add.Add(m_attrs_add.m_attrs); m_role->GetCapability()->AddCap(CAPABILITY_TYPE_XXX, m_other_capability); return; } m_attrs_add.Reset(); m_other_capability = 0; // m_attrs_add加属性 auto module_cfg = LOGIC_CONFIG->GetXxXCfg().GetModuleCfg(); module_cfg.AddAttrs(m_attrs_add); base_add.Add(m_attrs_add.m_attrs); m_role->GetCapability()->AddCap(CAPABILITY_TYPE_XXX, m_other_capability); }
XxXcofig.hpp
// 系统配置 #ifndef __XXX_CONFIG_HPP__ #define __XXX_CONFIG_HPP__ #include "config/gameconfigcommon/gameconfigcommon.h" #include "servercommon/xxxdef.hpp" // 其它 struct XxXOtherConfig { int times_cfg = 0; }; // 模块配置 struct ModuleConfig { struct CfgItem { int seq = 0; // 索引 ItemID item_id = 0; // 激活道具 AttributesConfig attrs_cfg; // 属性加成 }; int cfg_item_count = 0; CfgItem cfg_item_list[XXX_ITEM_MAX_COUNT]; }; class XxXConfig { public: XxXConfig(); bool Init(const std::string &configname, std::string *err); // Called by LogicConfigManager::Init const XxXOtherConfig & GetOtherCfg() { return m_other_cfg; } const XxXModuleConfig::CfgItem * GetModuleCfg(int seq); protected: int InitOtherCfg(RapidXmlNode *root_element); int InitModuleCfg(RapidXmlNode *root_element); private: XxXOtherConfig m_other_cfg; XxXModuleConfig m_module_cfg; }; #endif
XxXconfig.cpp
#include "stdafx.h" #include "xxxconfig.hpp" bool XxXConfig::Init(const std::string &configname, std::string *err) { PRE_LOAD_CONFIG2; LOAD_CONFIG2("other", InitOtherCfg); LOAD_CONFIG2("module", InitModuleCfg); return true; } bool XxXConfig::IsValidModuleSeq(int seq) const { return seq >= 0 && seq < m_active_cfg.cfg_item_count && seq < MODULE_ITEM_MAX_COUNT; } const XxXModuleConfig::CfgItem * XxXConfig::GetActiveCfg(int seq) { if (!this->IsValidModuleSeq(seq)) { return nullptr; } return &m_module_cfg.cfg_item_list[seq]; } int XxXConfig::InitOtherCfg(RapidXmlNode *root_element) { RapidXmlNode *data_element = root_element->first_node("data"); if (!data_element) { return -10000; } if (!ReadPositiveInt(data_element, "times_cfg", m_other_cfg.times_cfg)) { return -1; } return 0; } int XxXConfig::InitActiveCfg(RapidXmlNode *root_element) { RapidXmlNode *data_element = root_element->first_node("data"); if (!data_element) { return -10000; } m_active_cfg.cfg_item_count = 0; while (data_element) { if (m_active_cfg.cfg_item_count >= MODULE_ITEM_MAX_COUNT) { return -1000; } int seq = 0; if (!GetSubNodeValue(data_element, "seq", seq) || seq != m_active_cfg.cfg_item_count) { return -1; } BeautyActiveConfig::CfgItem &cfg_item = m_active_cfg.cfg_item_list[m_active_cfg.cfg_item_count]; cfg_item.seq = seq; if (!GetSubNodeValue(data_element, "active_item_id", cfg_item.active_item_id) || NULL == ITEMPOOL->GetItem(cfg_item.active_item_id)) { return -2; } if (!cfg_item.attrs_cfg.ReadConfig(data_element)) { return -100; } ++m_active_cfg.cfg_item_count; data_element = data_element->next_sibling(); } return 0; }
msgxxx.h
// XX协议 #ifndef __MSG_XXX_H__ #define __MSG_XXX_H__ #include "servercommon/userprotocal/msgheader.h" #include "config/gameconfigcommon/gameconfigcommon.h" #include "servercommon/xxxdef.hpp" #include "msgrole.h" #pragma pack(push) #pragma pack(4) namespace Protocol { //------------------------------------------------------------------------------------------- // CS Protocols // 通用请求类型 enum XXX_COMMON_REQ_TYPE { XXX_COMMON_REQ_TYPE_BASE_INFO = 0, // 基础信息请求 }; // 通用请求 协议号 class CSXxXCommonReq { public: CSXxXCommonReq(); MessageHeader header; unsigned short req_type; unsigned short param_1; unsigned short param_2; unsigned short param_3; }; //------------------------------------------------------------------------------------------- // SC Protocols // 基础信息 协议号 class SCXxXBaseInfo { public: SCXxXBaseInfo(); MessageHeader header; char reserve_ch1; char reserve_ch2; char reserve_ch3; char reserve_ch4; }; //------------------------------------------------------------------------------------------- } #pragma pack(pop) #endif