Files
2022-10-26 12:25:11 +08:00

2538 lines
77 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/** Struct_DB.h : DB? ????
- Number?? ?? unsigned int? ??
@note
- ??, ??? ??? ??? ??? ??? ??. ???? ??, ??? ??
*/
#ifndef __STRUCT_H__
#define __STRUCT_H__
#include <tchar.h>
#include <vector>
#include <ProgramCommon/WzDataType.h>
#include <BitSetOperation.h>
#include <SafeStringBufferControl.h>
#include <SolarFileReader.h>
#include <ResultCode.h>
#include <Struct_BasePlayerInfo.h>
#pragma pack(push,1)
#pragma warning(push)
#pragma warning(disable : 4201)
union tagWZID
{
WzID id;
char code[4];
};
//----------------------------------------------------------------------------------------------------------------------------------------
// 创建角色时给出的初始角色值
//----------------------------------------------------------------------------------------------------------------------------------------
struct INIT_CHARINFO_BASE
{
BYTE m_ClassCode;
CHAR m_pszClassName[MAX_CHARNAME_LENGTH];
LEVELTYPE m_LV;
DWORD m_dwMaxHP;
DWORD m_dwMaxMP;
EXPTYPE m_i64Exp;
WORD m_dwRemainStat;
WORD m_dwRemainSkill;
MAPCODE m_dwRegion;
SHORT m_sLocationX;
SHORT m_sLocationY;
SHORT m_sLocationZ;
SHORT m_sStrength;
SHORT m_sDexterity;
SHORT m_sVitality;
SHORT m_sInteligence;
SHORT m_sSpirit;
SHORT m_sSkillStat1;
SHORT m_sSkillStat2;
CODETYPE m_ClassNameCode;
DWORD m_RiderSummonCode;
#ifdef _NA_20100307_BETAKEY_SYSTEM
INT32 m_MenBeytaKey;
INT32 m_WomanBeytaKey;
#endif
};
//----------------------------------------------------------------------------------------------------------------------------------------
// 根据字符类固定常量
//----------------------------------------------------------------------------------------------------------------------------------------
struct CALC_CHARINFO
{
CODETYPE m_ClassCode;
DAMAGETYPE m_wMeleeDamage;
DAMAGETYPE m_wRangeDamage;
DAMAGETYPE m_wMagicDamage;
BYTE m_byHPPerStat;
BYTE m_byHPPerLevel;
BYTE m_byHPRecover;
BYTE m_byMPPerStat;
BYTE m_byMPPerLevel;
BYTE m_byMPRecover;
BYTE m_byStatPerLevel;
BYTE m_bySkillPerLevel;
BYTE m_byPhyDef;
BYTE m_byMagicDef;
BYTE m_byPhyCritical;
BYTE m_byMagicCritical;
BYTE m_byPhyAttRate;
BYTE m_byPhyAvoidRate;
BYTE m_byMagicAttRate;
BYTE m_byMagicAvoidRate;
BYTE m_byAttSpeed;
BYTE m_byMagicSpeed;
BYTE m_byMoveSpeed;
BYTE m_byLimitCarry;
BYTE m_byFastRecovery;
};
struct PLAYERINFO_FOR_PACKET
{
EXPTYPE m_i64Exp;
DWORD m_dwRemainStat;
DWORD m_dwRemainSkill;
MONEY m_Money;
SLOTCODE m_SelectStyleCode;
PLAYERHP m_MaxHP;
PLAYERHP m_HP;
MPTYPE m_MaxMP;
MPTYPE m_MP;
WORD m_wMoveSpeedRatio; //< 移动速度(% 乘以 100
WORD m_wAttSpeedRatio; //< 攻击速度(% 乘以 100
//BYTE m_byLeftSelect;
INT64 m_StateTime;
char m_tszTitleID[MAX_TITLEID_LENGTH];
INT64 m_TitleTime;
enum eINVEN_LOCK_MODE { ENABLE = 0, EMPTY_PWD = 0, EXIST_PWD = 1, DISABLED = 2,
ENABLEnEMPTY = ENABLE|EMPTY_PWD, ENABLEnEXIST = ENABLE|EXIST_PWD, DISABLEDnEXIST = DISABLED|EXIST_PWD, };
INT m_iInventoryLock; // eINVEN_LOCK_MODE? BitFlags
SHORT m_sStrength;
SHORT m_sDexterity;
SHORT m_sVitality;
SHORT m_sInteligence;
SHORT m_sSpirit;
SHORT m_sSkillStat1;
SHORT m_sSkillStat2;
UPTYPE m_UserPoint;
struct {
WORD m_byGMGrade : 3; //< GM等级(0:一般,1以上:GM4:虚拟ID eCHAR_CONDITION
WORD m_byPCBangUser : 1;
WORD m_byCondition : 1; //< 当前状态(坐/站)
WORD m_byPKState : 3; //< 8
WORD m_byPCRoomSts : 1; //< PC机房封锁状态
WORD m_byCharState : 7; //< eDBCHAR_STATE
};
// 2005/12/28(taiyo)
//使用您在浏览字符列表时收到的值。
//BYTE m_byHeight;
//BYTE m_byFace;
//BYTE m_byHair;
INT m_PlayLimitedTime;
/// [2012-4-20 by i4u4me] ?? ??? ??.
union
{
BYTE m_byInvisibleOptFlag; //< eINVISIBLE_OPTION_FLAG ??
struct
{
BYTE m_Helmet : 1;
BYTE m_Cape : 1;
BYTE m_Wing : 1;
#ifdef _NA_006683_20130502_EQUIPMENTS_VISIBLE_COSTUME
BYTE m_Costume : 1;
BYTE m_Temp : 4;
#else
BYTE m_Temp : 5;
#endif // _NA_006683_20130502_EQUIPMENTS_VISIBLE_COSTUME
}VisibleOptionFlag;
};
// ??? ? ??? ??
GUILDGUID m_GuildGuid;
BYTE m_GuildDuty;
char m_tszGuildName[MAX_GUILDNAME_LENGTH];
// ??
BYTE m_ChaoState; // ?? ??(eCHAO_STATE)
BYTE m_ExtraInventoryTabCount : 6;
BYTE m_ExtraEquipCashSlotCount : 2;
BOOL m_bWhisperFlag;
BOOL m_bTradeFlag;
BYTE m_byFreeInitCount;
BYTE m_bSummonedPet : 4;
BYTE m_bMAXIntimacy : 4;
POSTYPE m_PetItemPos;
DWORD m_bMAXOptionRemainTime;
BYTE m_bActiveEtherDevice;
BYTE m_byEtherBulletPos;
//
PLAYERSD m_MaxSD;
PLAYERSD m_SD;
#ifdef _NA_003027_20111013_HONOR_SYSTEM
WORD m_wHonorTitle;
#endif
#ifdef _NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
PLAYERFP max_FP;
PLAYERFP cur_FP;
#endif //_NA_007514_20140828_NEW_CHARACTER_WITCHBLADE
};
struct SPECIAL_CONDITION
{
BYTE byCondition;
WORD wConditionParam;
WORD wActionType;
WORD wActionParam;
BYTE byActionRate;
};
// ????
struct RESISTANCE_CONDITION
{
WORD m_wStateCode; // 状态码
BYTE m_byRatio; // 状态抵抗概率
tagWZID m_wzidEffectCode; // 效果码
};
//--------------------------------------------------------------------------------------------------
// (CHANGES) change pack info to support busy access structure, \
// target = { BASE_NPCINFO, EXTRA_NPCINFO,
// ROOT_SKILLINFO, BASE_SKILLINFO, BASE_ABILITYINFO, BASE_STYLEINFO }
#pragma pack(push)
#pragma pack()
// NOTE: f110520.2L, the element weakness of the npc based on the user view
struct NpcElementWeakness
{
enum {
eElementWeakness_Fire,
eElementWeakness_Water,
eElementWeakness_Wind,
eElementWeakness_Earth,
eElementWeakness_Dark,
eElementWeakness_Default,
eElementWeakness_Counts = eElementWeakness_Default
};
typedef uint8_t weakness_type;
weakness_type value;
};
struct BASE_NPCINFO
{
MONSTERCODE m_MonsterCode;
char m_pszName[MAX_MONSTERNAME_LENGTH];
LEVELTYPE m_Level;
LEVELTYPE m_DisplayLevel;
BYTE m_byChangeTargetRatio; // 目标变化概率
DWORD m_dwMaxHP;
DWORD m_dwMaxMP;
DWORD m_dwHP;
DWORD m_dwMP;
DWORD m_dwMaxSD;
DWORD m_dwSD;
CODETYPE m_NCode; // ????
BYTE m_bIsNotice;
#ifdef _DH_NPC_GROUP_NAME
DWORD group_name; //??????
#endif//_DH_NPC_GROUP_NAME
DWORD m_dwICode; // 图像代码
WORD m_wNpcImageIndex; // pc? ??? ??? ???
BYTE m_byGrade; // ??/??
float m_fGradeExpRatio; // ??? ?? ?? ??
WORD m_wSize; // ??
WORD m_wAICode; // AI ??
BYTE m_byAttType; // ????(???, ???, ?, ?, ...)
BYTE m_byMeleeType; // ??? ?? ??(1:??, 2:??, 3:??)
BYTE m_byCriticalRatio; // ???? ??
DWORD m_dwMinAttackPower;
DWORD m_dwMaxAttackPower;
DWORD skill_power; // ?? ??? (EP2)
DWORD m_dwPhyDef; // ?? ???
DWORD m_dwMagicDef; // ?? ??? (EP2: unused)
BYTE m_byAttitude; // ?? ??(??, ??, ????)
BYTE m_byMoveAttitude; // ?? ??(???, ???, ???)
DWORD m_dwMoveAreaID; // ?? ?? ID
WORD m_wClass; // ??? ??
uint16_t element_fire_attack; // ??(?) ??? (EP2)
uint16_t element_water_attack; // ??(?) ??? (EP2)
uint16_t element_wind_attack; // ??(??) ??? (EP2)
uint16_t element_earth_attack; // ??(??) ??? (EP2)
uint16_t element_dark_attack; // ??(??) ??? (EP2)
int16_t element_fire_resist; // ??(?) ???, EP2: [R] ??? %???(+/-)
int16_t element_water_resist; // ??(?) ???, EP2: [R] ??? %???(+/-)
int16_t element_wind_resist; // ??(??) ???, EP2: [R] ??? %???(+/-)
int16_t element_earth_resist; // ??(??) ???, EP2: [R] ??? %???(+/-)
int16_t element_dark_resist; // ??(??) ???, EP2: [R] ??? %???(+/-)
NpcElementWeakness element_weakness; // NOTE: f110520.2L, the element weakness of the npc based on the user view
//
BYTE m_byArmorType; // NOTE: EP2 unused... ?? ??(1:Hard, 2:Medium, 3:Soft, 4:Siege, 5:Unarmer)
uint16_t m_wPhyAttRate; // ???? ???, EP2:applied, percentage (0.95 -> 95%)
uint16_t m_wPhyAttAvoid; // ???? ???, EP2:applied, percentage (0.95 -> 95%)
float m_fBodyRadius; // ?? ???
float m_fAttRange; // ?? ??
float m_fViewRange; // ?? ??
float m_fMoveRange; // ?? ??
float m_fWalkSpeed; // ?? ??
float m_fRunSpeed; // ??? ??
WORD m_wAttSpeed; // ?? ??(??, ??)
WORD m_wAttSpeed2;
WORD m_wProjectileCode; // ?? ?????
WORD m_wProjectileCode2;
BYTE m_byJumpRatio; // ?? ??
//_YJ_ADD_DAMAGE_EFFECT_NPCINFO
WzID m_wiDamageEffectID; //如果NPC有指定伤害效果,如果没有输出,则默认输出伤害效果。
WzID m_wiCDamageEffectID; //如果NPC有指定的暴击伤害效果,如果没有输出,则默认输出伤害效果。
enum {MAX_SPECIAL_NUM = 2,};
SPECIAL_CONDITION m_SpecialCondition[MAX_SPECIAL_NUM]; // 特别行动
enum {MAX_RESISTANCE_NUM = 2,};
RESISTANCE_CONDITION m_ResistanceCondition[MAX_RESISTANCE_NUM]; // 状态抵抗(根据 m_wSkillUpdateTime 激活状态抵抗)
#ifdef _NA_007620_20140915_STATE_RESISTS
STLX_MAP<WORD, RESISTANCE_CONDITION>* state_resistances_; // 状态电阻 2(应用状态时会激活电阻)
#endif //_NA_007620_20140915_STATE_RESISTS
#ifdef _NA_007667_20141001_WITCHBLADE_SKILL
BYTE skill_update_condition; // SkillUpdateTime? ???? ??
#endif //_NA_007667_20141001_WITCHBLADE_SKILL
WORD m_wSkillUpdateTime; // 检查技能条件的周期时间
BYTE m_byReviveCondition; // 复活条件
WORD m_wReviveConditionParam; // 复活条件参数
BYTE m_byReviveRate; // 复活机会
SLOTCODE m_wReviveCode; // 复活技能代码
WORD m_wReviveDelay; // 复活动画延迟时间
BYTE m_byHealCondition; // 山路状况
WORD m_wHealConditionParam; // 山路条件参数
BYTE m_byHealRate; // 治愈几率
SLOTCODE m_wHealCode; // 希尔技能代码
WORD m_wHealDelay; // 希尔任何延迟时间
BYTE m_bySummonCondition; // 召唤条件
WORD m_wSummonConditionParam; // 召唤条件参数
BYTE m_bySummonRate; // 召唤机会
SLOTCODE m_wSummonCode; // 召唤技能代码
WORD m_wSummonDelay; // 召唤动画延迟时间
enum {MAX_SKILL_NUM = 10,};
BYTE m_bySkillUsePossible; // 有机会使用其他技能(非普通攻击)
SLOTCODE m_wSkillCode[MAX_SKILL_NUM]; // 其他技能代码
BYTE m_bySkillRate[MAX_SKILL_NUM]; // 其他技能概率
WORD m_wSkillDelay[MAX_SKILL_NUM]; // 其他技能任意延迟时间
WORD m_wHateSkill; // 仇恨技能
WORD m_wRevengeSkill; // 复仇技能
BYTE m_byRevengeRate; // 多重赔率
WORD m_byItemDropRate; // 物品掉落率:每天
BOOL m_bRegion;
enum {MAX_DROPRATIO_INDEX_NUM = 10,};
bool m_bOwnerShipForDropIndex[MAX_DROPRATIO_INDEX_NUM];
DWORD m_dwDropIndex[MAX_DROPRATIO_INDEX_NUM]; //< DropRatioInfo? index
DWORD m_dwFieldDropIndex[MAX_DROPRATIO_INDEX_NUM]; //< bRegion 为 True 时 && 怪物在场区时
DWORD m_dwBattleDropIndex[MAX_DROPRATIO_INDEX_NUM]; //< 当 bRegion 为 True && 当怪物在战区时
enum {
#ifdef _NA_004509_20120314_QUESTDROPINDEX10
MAX_QUEST_ITEM_DROP_NUM = 10,
#else
MAX_QUEST_ITEM_DROP_NUM = 5,
#endif //_NA_004509_20120314_QUESTDROPINDEX10
};
WORD m_QuestCode[MAX_QUEST_ITEM_DROP_NUM]; //<进行中的探索
DWORD m_dwQuestDropIndex[MAX_QUEST_ITEM_DROP_NUM]; //< DropRatioInfo? index
uint8_t m_wACCode; //< AC ??
BYTE m_byACReferenceID; //< AC ??ID
DWORD m_dwOptionID[2]; // 特殊选项
DWORD m_dwOptionParam[2]; // 特殊选项参数
WORD m_wDest;
WORD m_wAct[5];
WORD m_wP[5];
tagWZID m_wzidSpawnAniCode; // 生成动画代码
DWORD m_dwSpawnTime; // 如果生成时间为 0,则没有生成状态。
//_YJ_SPAWN_MONSTER_WITH_EFFECT_001250
DWORD m_dwSpawnEffectCode; // 生成时要输出的效果代码
//_NA_0_20100514_NPC_DEAD_STATE_TIME
DWORD m_dwDeadWaitingTime; //保持死亡的时间(死亡后 - 推迟之前)
#ifdef _NA_20100307_BETAKEY_SYSTEM
INT32 m_BeytaKey;
#endif
};
struct EXTRA_NPCINFO
{
enum eROTATE_TYPE
{
eROTATE_ROTATE = 0,
eROTATE_FIX,
};
enum eDISPLAY_TYPE
{
eDISPLAY_HIDE = 0x00,
eDISPLAY_MINIMAP = 0x01,
eDISPLAY_FULLMAP = 0x02,
eDISPLAY_BOTH = eDISPLAY_MINIMAP | eDISPLAY_FULLMAP,
};
MAPCODE m_MapCode;
FIELDID m_FieldID;
eNPC_TYPE m_eNPCTYPE;
CODETYPE m_NPCCODE;
eROTATE_TYPE m_eRotateType; // 保
eDISPLAY_TYPE m_eDisplayType; // 是否出现在小地图上。
float m_fNPCPos[3];
float m_fNPCDir[3];
int m_iMoveType;
float m_fMovePos[3];
float m_fRange;
DWORD m_dwJobStrID;
int m_iNPC_IconID;
DWORD m_unitID;
};
//--------------------------------------------------------------------------------------------------
// (CHANGES) change method type to const in 'ROOT_SKILLINFO' and 'BASE_SKILLINFO'
struct ROOT_SKILLINFO
{
ROOT_SKILLINFO() :
m_SkillCode(0), m_SkillClassCode(0), m_byType(0)
{
}
enum { SKILL_TYPE, STYLE_TYPE };
SLOTCODE m_SkillCode; // 风格或技能代码
SLOTCODE m_SkillClassCode; // 实施风格或技能
BYTE m_byType; // 技巧或风格// enum { ABILITY_TYPE, SKILL_TYPE };
bool IsStyle() const { return m_byType == STYLE_TYPE; }
bool IsSkill() const { return m_byType == SKILL_TYPE; }
};
//--------------------------------------------------------------------------------------------------
// NOTE: f110309.1L, the IFF_Filter object support target select filtering in ability
// this is implemented by _NA000000_110210_ENHANCED_TARGET_SEARCH_ALGORITHM
struct BASE_SKILLINFO;
struct BASE_ABILITYINFO;
//
struct IFF_Filter
{
IFF_Filter() :
value(0),
validated(false)
{
}
enum eIFF_Check
{
eIFF_None = 0,
//
eIFF_CheckSkip = 1 << 0,
//
eIFF_One = 1 << 3,
eIFF_Player = 1 << 4,
//
eIFF_Corpse = 1 << 7,
eIFF_Resurrection = 1 << 8,
//
eIFF_Enemy = 1 << 11,
eIFF_Friend = 1 << 12,
//
eIFF_AttackerOnly = 1 << 18,
eIFF_MainTargetOnly = 1 << 19,
//
};
#if SUN_CODE_BACKUP
enum eIFF_Relation
{
eIFF_RelationCheckAttackerOnly
= (1 << SKILL_TARGET_ME)
| (1 << SKILL_TARGET_REACHABLE_ME),
eIFF_RelationCheckFriend
= (1 << SKILL_TARGET_FRIEND)
| (1 << SKILL_TARGET_REACHABLE_FRIEND),
eIFF_RelationCheckEnemy
= (1 << SKILL_TARGET_ENEMY)
| (1 << SKILL_TARGET_REACHABLE_ENEMY)
| (1 << SKILL_TARGET_AREA),
eIFF_RelationCheckFriendCorpse
= (1 << SKILL_TARGET_FRIEND_CORPSE),
};
#endif
enum eIFF_AbilityCondition
{
eIFF_AbilityConditionActorOnly
= (1 << SKILL_ABILITY_ME),
eIFF_AbilityConditionMainTargetOnly
= (1 << SKILL_ABILITY_FRIEND)
| (1 << SKILL_ABILITY_ENEMY),
eIFF_AbilityConditionCorpseAbilities
= (1 << SKILL_ABILITY_CORPSE_RESURRECTION)
| (1 << SKILL_ABILITY_CORPSE_FRIEND)
| (1 << SKILL_ABILITY_MYAREA_CORPSE_ENEMY)
| (1 << SKILL_ABILITY_CORPSE_ENEMY),
eIFF_AbilityConditionEnabledResurrection
= (1 << SKILL_ABILITY_CORPSE_RESURRECTION),
eIFF_AbilityConditionPlayer
= (1 << SKILL_ABILITY_PLAYER_ENEMY),
eIFF_AbilityConditionSkipAbilities
= (1 << SKILL_ABILITY_FIELD)
| (1 << SKILL_ABILITY_SUMMON)
| (1 << SKILL_ABILITY_SUMMONED_MONSTER),
eIFF_AbilityConditionFriendAbilities
= (1 << SKILL_ABILITY_FRIEND)
| (1 << SKILL_ABILITY_TARGETAREA_FRIEND)
| (1 << SKILL_ABILITY_MYAREA_FRIEND)
| (1 << SKILL_ABILITY_CORPSE_FRIEND),
eIFF_AbilityConditionEnemyAbilities
= (1 << SKILL_ABILITY_ENEMY)
| (1 << SKILL_ABILITY_TARGETAREA_ENEMY)
| (1 << SKILL_ABILITY_MYAREA_ENEMY)
| (1 << SKILL_ABILITY_MYAREA_CORPSE_ENEMY)
| (1 << SKILL_ABILITY_CORPSE_ENEMY),
};
typedef ulong value_type;
//
//static bool ConfigureIFF_Check(IFF_Filter* result_iff, const eSKILL_TARGET_TYPE target_type);
static bool ConfigureIFF_Check(IFF_Filter* result_iff, const BASE_ABILITYINFO& ability_info);
//
value_type value;
bool validated;
};
//--------------------------------------------------------------------------------------------------
struct BASE_SKILLINFO : public ROOT_SKILLINFO
{
BASE_SKILLINFO()
{
Clear();
}
char m_szSkillName[MAX_SKILLNAME_LENGTH]; // 技能名称
CODETYPE m_dwSkillNcode; //名称代码
CODETYPE m_dwSkillDesccode; // 技能描述代码
CODETYPE m_dwSkillIconcode; //技能图标代码
#ifdef __NA001126_NEW_SKILL_SCREEN_EFFECT
BYTE m_bySwayType; // 震动效果
DWORD m_dwSwayTime; // 震动循环时间
BYTE m_bySwayNum; // 震动次数
DWORD m_dwSwaySize; // 摇晃大小
#endif //__NA001126_NEW_SKILL_SCREEN_EFFECT(仅用于克拉拉)
char m_szSkillMasterEffectName[MAX_SKILLNAME_LENGTH];
int m_iWeaponDefine[4]; //武器限制
tagWZID m_wzidAnimationCode[4]; // 动画代码
WORD m_CSSyncDelay; // 使用技能时完成所有动画的时间
tagWZID m_wzidCastAniCode; // 投射动画代码
CODETYPE m_dwFlyingObjectCode; // 弹丸代码
WORD m_wFlyingLifeTime; // 弹丸寿命
tagWZID m_wzidFieldEffectCode; // 场效应代码
CODETYPE m_dwItemCode; // 项目代码
WORD m_wSkillAttribute; // 技能系列
LEVELTYPE m_wRequireLv; // 所需等级
LEVELTYPE m_wSkillLv; // 对应级别
LEVELTYPE m_wMaxLv; // 最高级别
LEVELTYPE m_wOverLv; // ?? ?? ??
WORD m_wOverStatclass[2]; // ???? ??
WORD m_wOverstat[2]; // ?? ?? ???/?? ?? ??
BYTE m_bySkillType; // ?? ??
BYTE m_byEtherBulletInfo; // ??? ?? ??
BYTE m_bySkillUserType; // ????? ??
CODETYPE m_dwClassDefine; // ??? ??
#ifdef _NA_0_20100901_SKILLTREE_SYSTEM
CODETYPE m_UpperSkillClass; // ????? ??? ??? ???. ?? ???? ???? ?? ?? ?? ???? ??? ??.
#endif
// _NA_0_20110131_SKILLTREE_SYSTEM_RENEWAL
BYTE m_RequireUpperSkillLevel;
BYTE m_bySkillStatType; // ??? ??
WORD m_wRequireSkillStat[2]; // ?? ???
BYTE m_byRequireSkillPoint; // ?? ?????
//IFF_Filter iff_filter; // CHANGES: f110309.1L, ?? ?? ? ?? ?? ?? ?? (ref:m_byTarget)
BYTE m_byTarget; // ?? ?? ??
BYTE m_byForbiddenTarget; // ???? ?? ??
WORD m_wHPSpend; // HP ??
WORD m_wMPSpend; // MP ??
WORD m_wSkillCasting; // ?? ??? ??
DWORD m_dwCoolTime; // ???
WORD m_wSkillRange; // ?? ???
BYTE m_byAttRangeform; // ?? ????
WORD m_wSkillArea; // ?? ??
WORD m_wChaseRange; // ?? ??
BYTE m_byMaxTargetNo; // ?? ???
BYTE m_bySkillAcquire; // ?? ??
#ifdef _YJ_ADD_SKILL_SCRIPT_FIELD_4_AUTO_ATTACK_001212
BYTE m_btAutoAttack; // ????? ???? ?? ???(0 == ?????, 1 == ??????)
#endif //_YJ_ADD_SKILL_SCRIPT_FIELD_4_AUTO_ATTACK_001212
bool IsNonStopSkill() const; // ???? ??? ?? ????.
bool IsSummonSkill() const; // ???? ???? ????.
bool IsActionSkill() const;
bool IsEmoticonSkill() const;
bool IsRangedSkill() const;
void Clear() { ZeroMemory(this, sizeof(*this)); }
};
// (CHANGES) (100307) change to inlining function in BASE_SKILLINFO
inline bool BASE_SKILLINFO::IsNonStopSkill() const
{
return m_wzidAnimationCode[0].id == StrToWzID("NULL");
}
inline bool BASE_SKILLINFO::IsSummonSkill() const
{
return m_bySkillUserType == eSKILL_USER_SUMMONED;
}
inline bool BASE_SKILLINFO::IsRangedSkill() const
{
const WORD RANGE_SKILL_MIN_RANGE = 40;
return m_wSkillRange >= RANGE_SKILL_MIN_RANGE;
}
inline bool BASE_SKILLINFO::IsActionSkill() const
{
return m_bySkillUserType == eSKILL_USER_ACTION;
}
inline bool BASE_SKILLINFO::IsEmoticonSkill() const
{
return m_bySkillUserType == eSKILL_USER_EMOTICON;
}
//--------------------------------------------------------------------------------------------------
struct BASE_ABILITYINFO
{
BASE_ABILITYINFO() :
m_byIndex(0),
m_wAbilityID(0),
m_byRangeType(0),
m_wSuccessRate(0),
m_iOption1(0),
m_iOption2(0),
m_wStateID(0)
{
::ZeroMemory(m_iParam, sizeof(m_iParam));
}
BYTE m_byIndex; // ???? ???
WORD m_wAbilityID; // ???? ID
IFF_Filter iff_filter; // CHANGES: f110309.1L, ?? ?? ? ?? ?? ?? ?? (ref:m_byRangeType)
BYTE m_byRangeType; // ???? Type
WORD m_wSuccessRate; // ???? (???)
int m_iOption1; // ????1
int m_iOption2; // ????2
WORD m_wStateID; // ??ID
enum { MAX_ABILITY_PARAM_NUM = 4 };
int m_iParam[MAX_ABILITY_PARAM_NUM]; // ?? ???? ???
//----------------------------------------------------------------------------------------------
// CHANGES: f110214.3L, added debugging facility
struct DetailLogging;
//
eATTR_TYPE GetAttrType() const;
eATTR_TYPE GetAttrTypeDetail(bool* valid_check) const;
eATTR_TYPE GetAttrTypeForAttackpower(eATTACK_TYPE attack_type, DetailLogging* logging = NULL) const;
eATTR_TYPE GetAttrTypeForDefence(eATTACK_TYPE attack_type, DetailLogging* logging = NULL) const;
eATTR_TYPE GetAttrTypeForStat(eSTAT_TYPE stat_type, DetailLogging* logging = NULL) const;
#ifdef _NA001605_EP2_ATTRIBUTES_RENEWAL_
eATTR_TYPE GetAttrTypeForElementalResist(eATTACK_TYPE attack_type, DetailLogging* logging = NULL) const;
eATTR_TYPE GetAttrTypeForBonusDamage(eARMOR_TYPE armor_type, int value_type_value, DetailLogging* logging = NULL) const;
eATTR_TYPE GetAttrTypeForBonusDefence(eATTACK_TYPE attack_type, DetailLogging* logging = NULL) const;
#else
#endif
eATTR_TYPE GetAttrTypeForReduceDamage(eATTACK_TYPE attack_type, DetailLogging* logging = NULL) const;
eATTR_TYPE GetAttrTypeForAttackRange(eRANGE_TYPE range_type, DetailLogging* logging = NULL) const;
#ifdef _NA_006937_20131030_ABILITY_AND_STATE_CHANGE_CRITICAL
eATTR_TYPE GetAttrTypeForCriticalRatio(eATTR_APPLY_TYPE state_type, DetailLogging* logging = NULL) const;
eATTR_TYPE GetAttrTypeForCriticalDamage(eATTR_APPLY_TYPE state_type, DetailLogging* logging = NULL) const;
#endif //_NA_006937_20131030_ABILITY_AND_STATE_CHANGE_CRITICAL
//_NA001956_110210_PERK_SWITCHABLE_REGION
eATTR_EXTRA_OPTION GetAttrExtraOption() const;
};
inline eATTR_TYPE BASE_ABILITYINFO::GetAttrType() const {
return GetAttrTypeDetail(NULL);
}
struct BASE_STYLEINFO : public ROOT_SKILLINFO
{
BASE_STYLEINFO()
{
::ZeroMemory(this, sizeof(this));
}
//CODETYPE m_dwStyleID; // ??? ID
//CODETYPE m_dwStyleClassID; // ??? ?? ID
char m_szStyleName[MAX_SKILLNAME_LENGTH]; // ??? ??
CODETYPE m_dwStyleNCode; // ?? ??
CODETYPE m_dwStyleDescCode; // ??? ?? ??
WORD m_wSkillattribute; // ??? ??
CODETYPE m_dwStyleImage; // ??? ??
LEVELTYPE m_wRequireLV; // ?? ??
LEVELTYPE m_wStyleLV; // ??? ??
LEVELTYPE m_wMaxLV; // ?? ??
LEVELTYPE m_wOverLV; // ?? ?? ??
WORD m_wOverStatclass[2]; // ?? ?? ??
WORD m_wOverstat[2]; // ?? ?? ??? / ??? ?? ??
BYTE m_byRequireSkillPoint; // ?? ?? ???
BYTE m_byClassDefine; // ??? ??
int m_iWeaponDefine; // ?? ??
BYTE m_byAttType; // ?? ??
float m_fAttRange; // ?? ??
BYTE m_byMoveAttack; // ???? ??
BYTE m_byStyleCheck; // ??? ??
tagWZID m_wzidCodeFirst; // 1? ??
tagWZID m_wzidCodeSecond; // 2? ??
tagWZID m_wzidCodeThird; // 3? ??
tagWZID m_wzidCodeBack; // ?? ??
WORD m_wTimeFirst; // 1? ??
WORD m_wTimeSecond; // 2? ??
WORD m_wTimeThird; // 3? ??
int m_iAddDamage[3]; // ?? ???
float m_fDamagePercent[3]; // ?? ???%
BYTE m_byAttRangeform; // 3? ?? ??
float m_fStyleArea; // 3? ??(???)
float m_fThirdDelay; // 3? ?? ??
int m_iAttackRate; // ?? ?? ??
int m_iAvoidRate; // ?? ?? ??
int m_iAttackSpeed; // ?? ?? ??
int m_iBonusDefence; // ??? ??
int m_iMagicDefenceAdd; // ?? ??? ??( ==> ?? 0814? ??? ??? ??? ?? ????? )
WORD m_wCriticalBonus; // ???? ???
float m_fDefenseIgnore; // ??? ??
float m_fPierceRate; // 3? ?? ?? ??
float m_fPierceRange; // 3? ?? ??
float m_fStunRate; // 3? ?? ?? ??
WORD m_wStunTime; // 3? ?? ??
float m_fKnockBackRate; // 3? ?? ?? ??
float m_fKnockBackRange; // 3? ?? ??
float m_fDownRate; // 3? ?? ?? ??
float m_fDelayReduce; // ??? ?? ?? ??
float m_fDelayOccur; // 3? ??? ?? ??
WORD m_wHPAbsorb; // HP ??
float m_fHPAbsorbPer; // HP% ??
WORD m_wMPAbsorb; // MP ??
float m_fMPAbsorbPer; // MP% ??
WORD m_wMaxTargetNo;
};
#pragma pack(pop)
// (CHANGES) change pack info to support busy access structure, end of pack(8) position
//==================================================================================================
// CHANGES: f110503.7L, change pack info to support busy access structure, \
// target = { sMAPSUBINFO, sMAPINFO, sMAP_ENTERENCE_PORTAL, sFIELDINFO, sWMOINFO, sWUTINFO,
// BASE_STATEINFO }
#pragma pack(push)
#pragma pack()
// related to MapInfoParser data structures
struct sMAPINFO_BASE;
struct sMAP_ENTERENCE_PORTAL_BASE;
struct sFIELDINFO_BASE;
struct sWMOINFO_BASE;
struct sWUTINFO_BASE;
typedef const sMAPINFO_BASE sMAPINFO;
typedef const sMAP_ENTERENCE_PORTAL_BASE sMAP_ENTERENCE_PORTAL;
typedef const sFIELDINFO_BASE sFIELDINFO;
typedef const sWMOINFO_BASE sWMOINFO;
typedef const sWUTINFO_BASE sWUTINFO;
struct sMAPINFO_BASE
{
enum
{
MAX_FIELD_NUM = 20,
MAX_MISION_MAP_NUM = 15,
MAX_HUNTING_MAP_NUM = 15,
MAX_PVP_MAP_NUM = 10,
MAX_QUEST_MAP_NUM = 15,
MAX_CHUNTING_MAP_NUM = 15,
//
MAX_MISSION_MAP_NUM_V1_3 = 6, //World.txt? bMmap???? ??.
MAX_CHUNTING_MAP_NUM_V1_3 = 6, //World.txt? wCmap???? ??.
MAX_PVP_MAP_NUM_V1_3 = 6, //World.txt? wPmap???? ??.
};
MAPCODE MapCode;
MAPCODE MapKind;
BYTE byMKind; //< eZONETYPE ? ??
BYTE byMType; //< (0/1/2) <__NA001226_INSTANCE_DUNGEON_EXTENTION__? ?? ?? ????? ?? ??
BYTE byMinUserNum;
BYTE byMaxUserNum;
LEVELTYPE minLV;
LEVELTYPE maxLV;
BYTE byENTCount; // ENT ?? ??
BYTE byFCount;
eZONE_RULESET Ruleset; // reference: eZONE_RULESET
char pszDebugName[MAX_MAPNAME_LENGTH];
DWORD dwNCode;
DWORD dwFNCode;
DWORD dwDCode;
DWORD dwANCode; //< ?? ?? ??.(???? ??)
WORD wTimeLimit;
DWORD wText1; //1.3?? ??
DWORD wText2; //1.3?? ??
DWORD wText3; //1.3?? ??
DWORD wStartAreaID;
DWORD wStartAreaID2;
//_NA_20100307_BETAKEY_SYSTEM
int nBetaKey;
uint8_t reserved_key_index_; // NOTE: f110520.5L, this support the static field unique index
BYTE byClass; //< eCLASS_TYPE ??? ???? ?????!
//__NA1279_1281_090209_TIMELINE_QUEST_BASED_MISSION__
WORD completeQCode; // QCODE
MAPCODE completeMCode;
LEVELTYPE freePassLV;
WORD wContinentCode;
int ContienetNumber; //_DH_EP2_FULL_MAP
//__NA_000000_20070528_TAIWAN_GUILD_PVP = {
SLOTCODE EntranceItemCode;
BYTE EntranceItemCount;
//};
//----------------------------------------------------------------------------------------------
// enterable MapKind list of the map_info
MAPCODE byMissionMapVec[MAX_MISSION_MAP_NUM_V1_3];
MAPCODE wPVPMapVec[MAX_PVP_MAP_NUM_V1_3];
MAPCODE wCHuntingMapVec[MAX_CHUNTING_MAP_NUM_V1_3];
//----------------------------------------------------------------------------------------------
MAPCODE FCode[MAX_FIELD_NUM];
// f110504.1L, changes size 'MAX_MAPNAME_LENGTH' to 5
char FGCode[MAX_FIELD_NUM][sizeof(WzID) + 1];
FIELDCODE FWMOCode[MAX_FIELD_NUM];
FIELDCODE FWUTCode[MAX_FIELD_NUM];
FIELDCODE MMCode[MAX_FIELD_NUM];
DWORD dwEnvironmentCode[MAX_FIELD_NUM];
DWORD dwImageCode[MAX_FIELD_NUM]; //dImage1~6??? ? ??(???)
//----------------------------------------------------------------------------------------------
bool CheckValidMapKind() const; // CHANGES: f110504.2L, internal check utility
eZONETYPE GetZoneType4SharedCode() const;
};
inline eZONETYPE sMAPINFO_BASE::GetZoneType4SharedCode() const
{
eZONETYPE zone_type = eZONETYPE(byMKind);
if (zone_type == eZONETYPE_TUTORIAL_FIELD ||
zone_type == eZONETYPE_AIRSHIP_FIELD)
{
return eZONETYPE_FIELD;
}
return zone_type;
}
//--------------------------------------------------------------------------------------------------
struct sMAP_ENTERENCE_PORTAL_BASE
{
enum { MAP_T_FIELD = 0, MAP_T_HUNTING, MAP_T_MISSION, MAP_T_UPPERBOUND };
enum { LEVEL_UPPERBOUND = 256 };
enum { MISSION_CODE_UPPERBOUND = 256 };
enum { QUEST_CODE_UPPERBOUND = USHRT_MAX };
enum { DONTWAST_ITEM = 0, WASTE_ITEM, WASTE_UPPERBOUND };
enum
{
MOVE_TYPE_FIELD = 0, // ?? ?? ??
MOVE_TYPE_VILLAGE = 1, // ?? NPC ??
MOVE_TYPE_WAYPOINT = 2, // ?? ???
MOVE_TYPE_WARP_MACHINE = 3, // ??????
MOVE_TYPE_UPPER
};
//----------------------------------------------------------------------------------------------
WORD wIndex; // ??? ?
BYTE byMapType; // ? ??
BOOL bMoveType; // ????(0 : ????, 1 : ?? NPC ??, 2 : ?? ???, 3 : ??????)
MONSTERCODE npc_id_; // ??? ?? NPC ID
WORD wWorldFrom;
WORD wFieldFrom; // ?? ?? ??
char sAreaFromID[sizeof(WzID) + 1]; // ????? ?? ID
DWORD m_dwFromAreaID; // ????? ?? ID? StrToWzID()? ??? ?
WORD wWorldTo;
WORD wFieldTo; // ???? ??? ??? ?? ID
char sAreaToID[sizeof(WzID) + 1]; // ???? ??? ?? ID
DWORD m_dwToAreaID; // ???? ??? ?? ID? StrToWzID()? ??? ?
BYTE byMin_Level; // ?? ?? ?? ?
BYTE byMax_Level; // ???? ?? ?
BYTE byMissionCode;// ????
WORD wQuestCode; // ?????
WORD wItemCode; // ??? ?? ???
WORD wItemNum; // ?? ???? ??
BOOL bWaste_Item; // ? ??? ?? ???? ???? (0: ?? ??, 1:?? ?)
DWORD dwHeim; // ? ??? ?? ?? ??, 0? ?? ?? ?? ??
#ifdef _NA_20100307_BETAKEY_SYSTEM
INT32 nBeytaKey;
float fPayApp;
#endif
};
struct sFIELDINFO_BASE
{
enum { SERVER_TYPE_NONE = 0, SERVER_TYPE_FIELD = 1, SERVER_TYPE_BATTLE = 2, SERVER_TYPE_BOTH = 3 };
FIELDCODE FieldCode;
BYTE byServerType; // 1. ???? 2. ???? 3. ?? ??
BYTE bNewPathEngine; // ?? ???? ????
BYTE bWarCastle; // ???? ???
char pszPath[MAX_PATH];
};
struct sWMOINFO_BASE
{
FIELDCODE Code;
char pszPath[MAX_PATH];
};
struct sWUTINFO_BASE
{
FIELDCODE Code;
char pszPath[MAX_PATH];
};
#pragma pack(pop)
// (CHANGES) change pack info to support busy access structure, end of pack(8) position
//==================================================================================================
// CHANGES: f110503.7L, change pack info to support busy access structure, \
// target = { BASE_STATEINFO }
#pragma pack(push)
#pragma pack()
struct BASE_STATEINFO
{
WORD m_wStateID; // ?? ID
char m_szStateName[MAX_SKILLNAME_LENGTH]; // ?? ??
CODETYPE m_dwNamecode; // ?? ??
CODETYPE m_dwDescCode; // ???? ??
DWORD m_dwIconCode; // ??? ??
#ifdef _100506_LTJ_MOD_STATUS_BUFF_IMAGE_RENDER
BYTE m_byIconRow; // ??? ???(1??)
BYTE m_byIconColumn; // ??? ???(1??)
#endif //_100506_LTJ_MOD_STATUS_BUFF_IMAGE_RENDER
BYTE m_byIconKind; // ??? ??
BYTE m_bDelType; // ???? ( ??? ??? ??? ? ?? ???? )
BYTE m_byType; // ????(??, ??, ??, ??)
BYTE m_bySDApply; // SD ????
BOOLEAN m_bRidingApply; // ? ?? ?? ??
tagWZID m_wzidEffectID; // ?? ??? ID
BYTE m_byEffectPos; // ??? ??
WORD m_wGroupCode; // Group ??(?? ??? ??Group)
//!_NA_000587_20100928_DOMINATION_BUFF_ITEM
WORD m_wBoneIndex; //! ? ??? m_byEffectPos == eSKILLEFFECT_POS_BONE_INDEX ??? ??
float m_fOffsetX; //! ??????? ???
float m_fOffsetY; //! ??????? ???
float m_fOffsetZ; //! ??????? ???
bool m_bApplyParentRotate; //!< ?? ?????
bool m_bApplyParentScale; //!< ?? ??????
};
#pragma pack(pop)
// change pack info to support busy access structure, end of pack(8) position
//==================================================================================================
// ? 4 BYTE
struct MISSIONPART
{
UINT State :4; // ?? ??? ?? : eMISSION_STATE -=> ?? ???? ??? 3bit
UINT Point :12; // ?? ??? ~512 -=> ?? ???? ??? 9bit
UINT Hidden :16; // ?? ?? ??? ??
};
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// ?? ? ??? ?? ???? ??? ??!!!!!
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
struct BASE_ROOMINFO
{
BYTE m_MinLV;
BYTE m_MaxLV;
BYTE m_ClassLimit; // ???? eCLASS_TYPE ????!!!!!!
BYTE m_SpecialType; // eROOM_SPECIAL_TYPE
// (CHANGES)(20100318)(hukim)(REQ_0038) can_join_room_
// ?? ?? ?? ??? ???? ?? ??
bool can_join_room_;
BASE_ROOMINFO() : m_MinLV(0),
m_MaxLV(0),
m_ClassLimit(0),
m_SpecialType(0),
can_join_room_(false)
{
}
BOOL IsSpecialType(eROOM_SPECIAL_TYPE room_type)
{
if (m_SpecialType & room_type)
{
return TRUE;
}
else
{
return FALSE;
}
}
};
struct ADDITIONAL_ROOMINFO
{
BYTE m_Difficulty : 4; //< eHUNTING_MONSTER_DIFFICULT ? ?
BYTE m_Bonus : 4; //< eHUNTING_BONUS_TYPE ? ?
};
struct ADDITIONAL_PVPINFO
{
BYTE m_Rule : 4; //< ?(10/30/??) ePVP_RULE_TYPE? ?
BYTE m_Mode : 4; //< ??(??/?) ePVP_MODE_TYPE? ?
};
struct ADDITIONAL_CHUNTINGINFO
{
BYTE m_Difficulty : 4; //< eHUNTING_MONSTER_DIFFICULT ? ?
BYTE m_Bonus : 4; //< eHUNTING_BONUS_TYPE ? ?
BYTE m_Rule : 4; //< ? eCOMPETITION_RULE_TYPE(????, ????)
BYTE m_Mode : 4; //< ?? eCOMPETITION_MODE_TYPE(????, ????)
};
struct ADDITIONAL_CHUNTINGINFO_EX : ADDITIONAL_CHUNTINGINFO
{
KEYTYPE m_LinkHuntingKey; //< ???? ????? ?(0?? ????)
};
// CHANGES: f110608.6L
struct PVP_LOBBY_INFO
{
uint8_t m_Team; //< ?? ??? ? ?? ( 1 or 2 ) ???? 0
uint8_t m_Ready;
uint16_t m_dwPlayerKey;
};
struct MISSION_ROOMINFO
{
KEYTYPE m_Key;
CODETYPE m_MapCode;
char m_pszRoomTitle[MAX_ROOMTITLE_LENGTH];
BYTE m_byRoomPublic; //< eZONEPUBLIC
struct {
BYTE m_CurUserNum : 4; //< ?? ??
BYTE m_MaxLimitUserNum : 4; //< ?? ??(NonBlock Slot ??)
};
BASE_ROOMINFO m_RoomInfo;
};
struct HUNTING_ROOMINFO
{
KEYTYPE m_Key;
CODETYPE m_MapCode;
char m_pszRoomTitle[MAX_ROOMTITLE_LENGTH];
BYTE m_byRoomPublic; //< eZONEPUBLIC
struct {
BYTE m_CurUserNum : 4; //< ?? ??
BYTE m_MaxLimitUserNum : 4; //< ?? ??(NonBlock Slot ??)
};
BASE_ROOMINFO m_RoomInfo;
ADDITIONAL_ROOMINFO m_AdditionalInfo;
};
struct PVP_ROOMINFO
{
KEYTYPE m_Key;
CODETYPE m_MapCode;
char m_pszRoomTitle[MAX_ROOMTITLE_LENGTH];
BYTE m_byRoomPublic; //< eZONEPUBLIC
struct {
BYTE m_CurUserNum : 4; //< ?? ??
BYTE m_MaxLimitUserNum : 4; //< ?? ??(NonBlock Slot ??)
};
BASE_ROOMINFO m_RoomInfo;
ADDITIONAL_PVPINFO m_AdditionalPVPInfo;
};
struct CHUNTING_ROOMINFO
{
KEYTYPE m_Key;
CODETYPE m_MapCode;
char m_pszRoomTitle[MAX_ROOMTITLE_LENGTH];
BYTE m_byRoomPublic; //< eZONEPUBLIC
struct {
BYTE m_CurUserNum : 4; //< ?? ??
BYTE m_MaxLimitUserNum : 4; //< ?? ??(NonBlock Slot ??)
};
BASE_ROOMINFO m_RoomInfo;
ADDITIONAL_CHUNTINGINFO m_AdditionalInfo;
};
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// ?? ? ??? ?? ???? ??? ?!!!!!
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
// ?? ?? ???
// ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP
struct CHUNTING_PVP_INFO
{
INT m_CHuntingDisCount;
INT m_CHuntingVCount;
INT m_CHuntingLCount;
INT m_CHuntingTotCount;
INT m_CHuntingPVPPoint;
BYTE m_ChuntingRanking;
};
#endif
struct GUILD_RELATION
{
GUILDGUID m_GuildGuid;
ePROCLAIM_GUILD m_eProClaim;
eGUILD_RELATION m_eRelationType;
TCHAR m_GuildName[MAX_GUILDNAME_LENGTH+1];
#ifdef _NA_003923_20120130_GUILD_RENEWAL
DWORD64 m_RelationApplyTime;//?? ?? ?? ??
DWORD64 m_RelationChangeTime;//?? ?? ?? ?? ??
#endif
GUILD_RELATION() : m_GuildGuid(INVALID_GUILDGUID),
m_eProClaim(NONE_PROCLAIM_GUILD),
m_eRelationType(eGUILD_RELATION_NONE)
{
ZeroMemory(m_GuildName, MAX_GUILDNAME_LENGTH+1);
}
}; /*GUILD_RELATION, *LP_GUILD_RELATION;*/
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
struct GUILD_JOIN_REQUEST_INFO
{
time_t m_request_time;
DWORD m_remain_time; //?? ??(?? : ?)
GUILDGUID m_guild_guid;
CHARGUID m_char_guid;
LEVELTYPE m_char_level;
BYTE m_char_class;
TCHAR m_char_name[MAX_CHARNAME_LENGTH + 1];
GUILD_JOIN_REQUEST_INFO()
{
m_remain_time = 0;
m_guild_guid = 0;
m_request_time = 0;
m_char_guid = 0;
m_char_level = 0;
m_char_class = 0;
memset(m_char_name, 0, sizeof(m_char_name));
}
};
#endif //_NA_007330_20140620_GUILD_SYSTEM_EXTENSION
struct BASE_GUILD_ADD_INFO
{
static const size_t kMaxNumberOfRelations = MAX_ALLIENCE_GUILD_NUM +
MAX_HOSTILITY_GUILD_NUM + MAX_ONE_SIDE_HOSTILITY_NUM;
//
GUILDGUID m_GuildGuid;
BYTE m_byRelationGuildCnt;
BYTE m_byAllienceGuildCnt;
BYTE m_byHostilityGuildCnt;
BYTE m_byOneSideGuildCnt;
GUILD_RELATION m_stRelationGuild[kMaxNumberOfRelations];
BASE_GUILD_ADD_INFO() : m_GuildGuid(0),
m_byRelationGuildCnt(0),m_byAllienceGuildCnt(0),
m_byHostilityGuildCnt(0),m_byOneSideGuildCnt(0) {}
BYTE GetTotalSize() { return m_byRelationGuildCnt; }
void SetSize(BYTE allience, BYTE aginst, BYTE oneside)
{
m_byAllienceGuildCnt = allience;
m_byHostilityGuildCnt = aginst;
m_byOneSideGuildCnt = oneside;
m_byRelationGuildCnt = allience+ aginst+ oneside;
}
};
struct GUILD_RIGHT_USE
{
bool m_bRightUse; //?? ??? ????
};
//?? ??? ?? ?? ?? ??
struct GUILD_GRADE_RIGHT_USE : public GUILD_RIGHT_USE
{
BYTE m_Grade; //?? ??? ????? ????
};
//?? ??? ?? ?? ??
struct GUILD_DUTY_RIGHT_USE : public GUILD_RIGHT_USE
{
eGUILD_DUTY m_Duty; //?? ??? ????? ????
};
//?? ??? ?? ?? ??
struct GUILD_RIGHT_USE_INFO : public GUILD_RIGHT_USE
{
eGUILD_RIGHTS m_Right; //????? ??
};
//?? ?? ?? ??
struct GUILD_DUTY_USE_INFO
{
eGUILD_DUTY m_Duty; //?? ??
DWORD m_dwStringCode; //????? ??? ??
bool m_bUse; //?? ??
};
struct GUILD_RANK_INFO
{
//versino 1.0
BYTE m_byLevel; //????
TCHAR m_szLevelName[MAX_PATH]; //????? ??
WORD m_wMaxMember; //?? ??? ?? ??? ?
DWORD m_dwHeim; //?? ??? ??? ??? ???? ??.
UPTYPE m_UP; //?? ??? ??? ??? ???? UP.
GPTYPE m_GP; //?? ??? ??? ??? ???? GP.
//version 1.1
CODETYPE m_RankItemCode; // ?? ??? ??? ??? ??? ???.
};
struct BASE_GUILD_MEMBER_INFO
{
CHARGUID m_CharGuid;
char m_tszCharName[MAX_CHARNAME_LENGTH+1];
eGUILD_DUTY m_eGuildDuty;
BYTE m_byCorpsNum;
};
struct BASE_GUILD_MEMBER_TOTAL_INFO
{
BYTE m_byMemberCount;
BASE_GUILD_MEMBER_INFO m_MemberInfo[MAX_GUILD_MEMBER_NUM];
int GetSize()
{
return sizeof(BASE_GUILD_MEMBER_TOTAL_INFO)-(MAX_GUILD_MEMBER_NUM-m_byMemberCount)*sizeof(BASE_GUILD_MEMBER_INFO);
}
};
struct GUILD_MEMBER_INFO : public BASE_GUILD_MEMBER_INFO
{
BYTE m_byClass; // ??????? ?? ?? ????.
LEVELTYPE m_Level; // ??????? ?? ?? ????.
BYTE m_byChaoState; // ??????? ?? ?? ????.
BOOL m_bLogin; // ??? ?? ( ??????? ?? ??? ??? ???? ??? bLogin? ?? ??. )
#ifdef _NA004034_20120102_GUILD_POINT_SYSTEM
DWORD guild_coin_; // ?? ???
#endif //_NA004034_20120102_GUILD_POINT_SYSTEM
};
struct SERVER_GUILD_MEMBER_INFO : public GUILD_MEMBER_INFO
{
GUILD_RIGHT_USE_INFO m_DelegateRight[MAX_GUILD_DELEGATE_RIGHT]; //??? ??.
};
struct GUILD_MEMBER_TOTAL_INFO
{
BYTE m_byMemberCount;
GUILD_MEMBER_INFO m_MemberInfo[MAX_GUILD_MEMBER_NUM];
int GetSize()
{
return sizeof(GUILD_MEMBER_TOTAL_INFO)-(MAX_GUILD_MEMBER_NUM-m_byMemberCount)*sizeof(GUILD_MEMBER_INFO);
}
};
struct SERVER_GUILD_MEMBER_TOTAL_INFO
{
BYTE m_byMemberCount;
SERVER_GUILD_MEMBER_INFO m_MemberInfo[MAX_GUILD_MEMBER_NUM];
int GetSize()
{
return sizeof(SERVER_GUILD_MEMBER_TOTAL_INFO)-(MAX_GUILD_MEMBER_NUM-m_byMemberCount)*sizeof(SERVER_GUILD_MEMBER_INFO);
}
};
struct BASE_GUILD_INFO
{
GUILDGUID m_GuildGuid;
BYTE m_GuildGrade; //?????? ?? ???? ???? ? ?? ?? ??.
char m_tszGuildName[MAX_GUILDNAME_LENGTH+1]; //????? BASE? ???? ??? ??? ?????? ??? ??? ????.
#ifdef _NA_008334_20150608_SONNENSCHEIN
BYTE sonnenschein_phase_; //???? ????(????)
#endif //_NA_008334_20150608_SONNENSCHEIN
};
struct GAME_GUILD_INFO : public BASE_GUILD_INFO
{
#ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP
CHUNTING_PVP_INFO m_ChuntingPVPInfo;
#endif
GUILDMARKIDX m_BackGroundIdx;
GUILDMARKIDX m_PatternIdx;
};
struct WORLD_GUILD_INFO : public BASE_GUILD_INFO
{
TCHAR m_szGuildNotice[MAX_GUILDNOTICE_LENGTH + 1]; // CHANGES: f110915.1L, with null
#ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP
CHUNTING_PVP_INFO m_ChuntingPVPInfo;
#endif
};
struct GUILD_INFO : public GAME_GUILD_INFO
{
GPTYPE m_GuildPoint;
UPTYPE m_UserPoint;
INT64 m_GuildPenaltyTime;
INT64 m_GuildDestroyTime;
eGUILD_DELCHK m_GuildDestroyWaitFlag; //0: ??, 1: ??, 2: ????
INT64 m_nMasterChangeTime;
WORD m_DominationMapCount;//???? ?
WORD m_DominationJoinCount;//??? ?? ??
WORD m_DominationDefenseCount;//??? ?? ?? ??
WORD m_DominationHuntingCount;//??? ?? ?? ??
#ifdef _NA_003923_20120130_GUILD_RENEWAL
DWORD m_GuildCoin;//???? ???? ?? ?? ?? ??
DWORD m_GuildGP;
#endif
};
struct GUILD_CORPS_INFO
{
BYTE m_bCreate; //?? ??? ?????
BYTE m_byCorpsNum; //????
BOOL m_bRearCamp; //???? ?? ??.
};
struct GUILD_CORPS_TOTAL_INFO
{
// BYTE m_byCorpsCount;
GUILD_CORPS_INFO m_CorpsInfo[MAX_GUILD_CORPS_NUM];
};
struct BASE_GUILD_TOTAL_INFO
{
BASE_GUILD_INFO m_BaseGuildInfo;
BASE_GUILD_MEMBER_TOTAL_INFO m_BaseMemberTotalInfo;
int GetSize()
{
return sizeof(m_BaseGuildInfo) + m_BaseMemberTotalInfo.GetSize();
}
};
struct GUILD_TOTAL_INFO
{
GUILD_INFO m_GuildInfo;
GUILD_MEMBER_TOTAL_INFO m_MemberTotalInfo;
int GetSize()
{
return sizeof(m_GuildInfo) + m_MemberTotalInfo.GetSize();
}
};
#ifdef _NA004034_20120102_GUILD_POINT_SYSTEM
struct GUILD_INFO_EXTRA
{
WORD ranking_;
#ifdef _NA_004034_20120102_GUILD_INTRODUCTION
CHAR introduction_strings_[MAX_GUILD_INTRODUCTION_LENGTH+1];
#endif
GUILD_INFO_EXTRA()
{
ranking_ = 0;
#ifdef _NA_004034_20120102_GUILD_INTRODUCTION
memset(introduction_strings_, 0, sizeof(introduction_strings_));
#endif
}
};
#endif //_NA004034_20120102_GUILD_POINT_SYSTEM
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
struct GUILD_JOIN_REQUEST_TOTAL_INFO
{
GUILD_JOIN_REQUEST_INFO m_GuildJoinRequestInfo[MAX_GUILD_JOIN_REQUEST_NUM];
};
struct GUILD_FACILITY_INFO
{
FCODE code;
FLEVEL level;
GUILD_FACILITY_INFO()
{
code = 0;
level = 0;
}
};
struct GUILD_FACILITY_TOTAL_INFO
{
GUILD_FACILITY_INFO m_GuildFacilityInfo[MAX_GUILD_FACILITY];
int m_count;
GUILD_FACILITY_TOTAL_INFO()
{
m_count = 0;
}
};
#endif //_NA_007330_20140620_GUILD_SYSTEM_EXTENSION
struct PACKET_FOR_GUILD
{
char m_tszGuildName[MAX_GUILDNAME_LENGTH+1];
BYTE m_GuildGrade;
//BYTE m_MarkBinary[MAX_GUILDMARKSTREAM_SIZE];
INT m_MasterCharGuid;
char m_tszMasterCharName[MAX_CHARNAME_LENGTH+1];
GPTYPE m_GuildPoint;
UPTYPE m_UserPoint;
INT m_RestrictedRight;
INT64 m_GuildMoney;
BYTE m_GuildMemberNum;
#ifdef __NA_000000_20070528_TAIWAN_GUILD_PVP
CHUNTING_PVP_INFO m_ChuntingPVPInfo;
#endif
eGUILD_DELCHK m_eDelChk;
INT64 m_GuildPenaltyTime;
GUILDMARKIDX m_BackGroundIndex ;
GUILDMARKIDX m_PatternIndex;
};
struct PACKET_FOR_GUILD_ADD_INFO
{
GUILDGUID m_GuildGuid;
BYTE m_byRelationGuildCnt;
BYTE m_byAllienceGuildCnt;
BYTE m_byAgainstGuildCnt;
BYTE m_byOneSideGuildCnt;
GUILD_RELATION m_stRelationGuild[MAX_ALLIENCE_GUILD_NUM +
MAX_HOSTILITY_GUILD_NUM +
MAX_ONE_SIDE_HOSTILITY_NUM];
void SetSize(int allience, int aginst, int oneside)
{
m_byAllienceGuildCnt = (BYTE)allience;
m_byAgainstGuildCnt = (BYTE)aginst;
m_byOneSideGuildCnt = (BYTE)oneside;
m_byRelationGuildCnt = (BYTE)(allience + aginst + oneside);
}
};
struct PACKET_FOR_GUILD_MEMBER
{
char m_tszCharName[MAX_CHARNAME_LENGTH+1];
BYTE m_byClass;
LEVELTYPE m_LV;
BYTE m_byOnline; // ??? ??(0: offline 1: online )
BYTE m_byChaoState; // ?? ??(eCHAO_STATE)
eGUILD_DUTY m_eGuildDuty;
BYTE m_byCorpsNum;
};
struct PACKET_FOR_GUILD_RELATION
{
eGUILD_RELATION m_eRelationType;
GUILDGUID m_GuildGuid;
char m_GuildName[MAX_GUILDNAME_LENGTH+1];
};
// DB?? ???? ?? ??
struct STRUCT_FRIEND_DB_INFO
{
enum eNodeType
{
UNDEFINED = 0, // default, unused
INFO_FRIEND = 1,
INFO_BLOCK = 2,
INFO_REVENGE = 3,
INFO_REVENGE_POINT = 4,
// expanded by _KR_0_20091021_FIRENDINVITATION_EXTEND = {
INFO_INVIAT = 5, //?? ? ???? ?? ??
INFO_BEINVIATED = 6,//?? ?? ???? ?? ??
//A ? B ? ???? ?? A:5, B:6? ??? ????.
INFO_BLOCKED_INVIAT = 7, //??? ?? ? ???? ?? ??(????)
INFO_BLOCKED_BEINVIATED = 8,//??? ?? ?? ???? ?? ??(????)
// }
}; // Sts ??
DWORD dwFriendGuid;
char ptszFriendName[MAX_CHARNAME_LENGTH+1];
BYTE byClass; // ???
LEVELTYPE Level; // ??
BYTE Sts; // ?? ?? ??, STRUCT_FRIEND_DB_INFO::enumeration
BYTE RevengePoint; // ??? ???(INFO_REVENGE_POINT? ?? ??)
#ifdef _NA_006642_20120416_COMMUNITY_INFO_BUG_MODIFY
BYTE gender; // ??
#endif // _NA_006642_20120416_COMMUNITY_INFO_BUG_MODIFY
};
struct COMMUNITY_DB_INFO
{
enum { INFO_FRIEND = 1, INFO_BLOCK = 2,
INFO_REVENGE = 3, INFO_REVENGE_POINT = 4, }; // friendRelationType
BYTE friendRelationType;
CHARGUID friendGuid;
BYTE friendClass;
LEVELTYPE friendLevel;
TCHAR friendName[MAX_CHARNAME_LENGTH+1];
COMMUNITY_DB_INFO() : friendRelationType(INFO_FRIEND),
friendGuid(0), friendClass(0), friendLevel(0)
{
ZeroMemory(friendName, MAX_CHARNAME_LENGTH+1);
}
};
//// ?????? ???? ?? ??
//struct STRUCT_FRIEND_PACKET_INFO
//{
// BYTE byClass; // ???
// LEVELTYPE Level; // ??
// BOOL bOnline; // ????? TRUE, ?????? FALSE
// BYTE byChannel; // ?? ???? ??(???? ?? ??)
// char ptszFriendName[MAX_CHARNAME_LENGTH+1]; // ?? ??
//};
struct STRUCT_FRIEND_PACKET_INFO
{
char ptszFriendName[MAX_CHARNAME_LENGTH+1]; // ?? ??
BOOL bOnline; // ????? TRUE, ?????? FALSE
BYTE byClass; // ???
LEVELTYPE Level; // ??
BYTE byChannel; // ?? ???? ??(???? ?? ??)
#ifdef _NA_006642_20120416_COMMUNITY_INFO_BUG_MODIFY
BYTE gender; // ??
#endif // _NA_006642_20120416_COMMUNITY_INFO_BUG_MODIFY
};
// ????? ???? ?? ??
struct STRUCT_FRIEND_INFO
{
DWORD dwFriendGuid;
STRUCT_FRIEND_PACKET_INFO sPacketInfo;
STRUCT_FRIEND_PACKET_INFO* GetPacketInfo() { return &sPacketInfo; }
};
// ?????? ???? ?? ??
struct STRUCT_BLOCK_INFO
{
DWORD dwBlockGuid;
char ptszBlockName[MAX_CHARNAME_LENGTH+1];
};
// DB?? ???? ?? ??
typedef STRUCT_BLOCK_INFO STRUCT_BLOCK_DB_INFO;
// ?????? ???? ?? ??
struct STRUCT_BLOCK_PACKET_INFO
{
char ptszBlockedName[MAX_CHARNAME_LENGTH+1]; // ???? ?? ??
};
// ?????? ???? ??? ??
struct STRUCT_REVENGE_PACKET_INFO
{
char ptszRevengeName[MAX_CHARNAME_LENGTH+1]; // ???? ? ??
BOOL bOnline; // ????? TRUE, ?????? FALSE
BYTE byClass; // ???
LEVELTYPE Level; // ??
BYTE byChannelID; // ???? ??
};
// ?????? ???? ??? ??
struct STRUCT_REVENGE_INFO
{
DWORD dwRevengeCharGuid;
STRUCT_REVENGE_PACKET_INFO sPacketInfo;
};
// DB?? ???? ??? ??
typedef STRUCT_REVENGE_INFO STRUCT_REVENGE_DB_INFO;
struct EVENT_STATUS
{
CODETYPE m_dwEventID; // ??? ???
WORD m_wRegisterCnt; // ??? ?? ?? (?? ???? ?? ?? ???? ? ??)
EVENT_STATUS() : m_dwEventID(0), m_wRegisterCnt(0) {}
};
struct EVENT_STATUS_VER2 : EVENT_STATUS
{
BYTE m_DonateHeimRewardCnt; // ?? ?? ?? ??? ?? ??? ??
BYTE m_Status; // 0: (???), 1: (??)
DWORD m_CurDonatedHeims; // ???? ??? ?? ?? (?? ???? ??? ?? ???)
EVENT_STATUS_VER2() : EVENT_STATUS(), m_DonateHeimRewardCnt(0), m_Status(0), m_CurDonatedHeims(0) {}
};
typedef struct EVENT_STATUS_VER2 EVENT_STATUS_EX;
// EventDB? ????? ???? ? ??
// Event?? ?? ??? event ??? ?? filtering? ????.
struct SSQ_RESERVED_REWARD_INFO
{ // ? 5?? ?? ?? ??
enum {};
//struct { //EventStatusQuery::sQUERY? ??
// INT __m_EventID; // m_SSQRewardType
// INT __m_RegisterCnt;
// INT __m_DonateHeimRewardCnt;
// INT __m_DonatedHeims;
// INT __m_Status; // bit
//} __usable_tab_in_DBtable;
struct SharedField {
CODETYPE EventID;
BYTE Status; // used) __m_Status - 0: (???), 1: (??????) < ????? ???
};
struct WinnerReward : public SharedField {
DWORD Point; // used) __m_RegisterCnt - ?? ???
DWORD Exp; // used) __m_DonateHeimRewardCnt - ?? ???
BYTE MonsterKillNum; // used) __m_DonatedHeims:8 - ??? ? ?
BYTE PlayerKillNum; // used) __m_DonatedHeims:8 - ???? ? ?
SLOTCODE ItemCode; // used) __m_DonatedHeims:16 - ?? ???(???) <-
};
struct QuestFail : public SharedField {
DWORD Point; // used) __m_RegisterCnt - ?? ???
DWORD Exp; // used) __m_DonateHeimRewardCnt - ?? ???
BYTE MonsterKillNum; // used) __m_DonatedHeims:8 - ??? ? ?
BYTE PlayerKillNum; // used) __m_DonatedHeims:8 - ???? ? ?
};
struct AdmissionFeeRefund : public SharedField {
SLOTCODE ItemCode; // used) __m_RegisterCnt - ???? ???
MONEY Money; // used) __m_DonatedHeims - ???? Heim
};
union {
SharedField m_SharedInfo;
WinnerReward m_WinnerReward; // ?? ?? ??, DB
QuestFail m_QuestFail; // ??? ?? (????)
AdmissionFeeRefund m_AdmissionFeeRefund; // ??? ?? ??
};
};
// ?? ?? ?? ??? ???
typedef struct
{
char m_ptszCharName[MAX_CHARNAME_LENGTH+1]; // ?? ??? ??
BOOL m_bVoiceOn; // TRUE: ?? FALSE: ??
} STRUCT_VOICE_STATUS, *LP_STRUCT_VOICE_STATUS;
// ?? ?? ????
typedef struct
{
enum eMEMOTYPE {
NORMAL_MEMO,
SYSTEM_MEMO
};
enum eSYSTEMTYPE
{
NORMAL_TYPE,
LOTTO_TYPE,
GROUP_TYPE,
//_KR_0_20091021_FIRENDINVITATION_EXTEND = {
FRINVATE_START_TYPE = SYSMEMO_FRIENDINVITATION_INVATES_TART,
FRINVATE_END_TYPE = SYSMEMO_FRIENDINVITATION_INVATE_END,
FRINVATE_PRESENT_TYPE = SYSMEMO_FRIENDINVITATION_INVATE_PRESENT,
FRBEINVATED_START_TYPE = SYSMEMO_FRIENDINVITATION_BEINVATED_START,
FRBEINVATED_END_TYPE = SYSMEMO_FRIENDINVITATION_BEINVATED_END,
FRBEINVATED_PRESENT_TYPE = SYSMEMO_FRIENDINVITATION_BEINVATED_PRESENT,
//}
DOMINATION_TYPE_RETURN = 9,
DOMINATION_TYPE_REWARD = 10,
LOTTO_TYPE_NEW = SYSMEMO_LOTTO_WIN_NEW,
DOMINATION_TYPE_RETURN_NEW = SYSMEMO_DOMINATION_RETURN_MONEY_NEW,
DOMINATION_TYPE_REWARD_NEW = SYSMEMO_DOMINATION_REWARD_MONEY_NEW,
#ifdef _NA_006801_20130814_RENEWAL_RANKINGSYSTEM_MINOR
WORLDRANKING_TYPE_REWARD_ALARAM = SYSMEMO_WORLD_RANKING_GRADE,
#endif //_NA_006801_20130814_RENEWAL_RANKINGSYSTEM_MINOR
#ifdef _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
GUILD_JOIN_REQUEST = SYSMEMO_GUILD_JOIN_REQUEST,
#endif // _NA_007330_20140620_GUILD_SYSTEM_EXTENSION
#ifdef _NA_008012_20150204_SUN_RANKING_SYSTEM
SUN_RANKING_SETTLE_RESULT_TYPE = SYSMEMO_SUN_RANKING_SETTLE_RESULT,
#endif // _NA_008012_20150204_SUN_RANKING_SYSTEM
};
MEMOGUID m_MemoGuid;
eMEMOTYPE m_MemoType;
char m_SendName[MAX_CHARNAME_LENGTH+1];
BYTE m_byRead; // ???? 1, ??? 0
char m_ptszSubject[MAX_SUBJECT_STRLENGTH];
char m_tszCreateDate[21]; // ?? ??
} STRUCT_SUBJECT_PACKETINFO, *LP_STRUCT_SUBJECT_PACKETINFO;
class IParser;
struct sSCRIPT_DATA_INFO_NODE
{
eSCRIPT_CODE m_ScriptCode;
IParser* m_pIParser;
BOOL m_bBigData;
sSCRIPT_DATA_INFO_NODE()
{
m_ScriptCode = SCRIPT_EMPTY;
m_pIParser = NULL;
m_bBigData = FALSE;
}
};
struct SCRIPT_DATA : public sSCRIPT_DATA_INFO_NODE
{
typedef void (*DestroyParserFunction)();
TCHAR m_szFileName[MAX_PATH+1];
TCHAR m_szVersion[MAX_PATH+1];
eSEPERATOR_MODE m_SeperatorMode;
TCHAR m_szPackFileName[MAX_PATH+1];
DestroyParserFunction DestroyParser;
SCRIPT_DATA() : DestroyParser(NULL)
{
m_szFileName[0] = '\0';
m_szVersion[0] = '\0';
m_SeperatorMode = SEPERATOR_WHITESPACE;
m_szPackFileName[0] = '\0';
}
};
struct st_RANKING_POINT
{
RANKINGKEY DBKey;
USERGUID UserGUID;
RANKINGNO RankingNum;
DWORD Point;
#ifdef _NA_006801_20130814_RENEWAL_RANKINGSYSTEM_MINOR
RANKINGTYPE ranking_type;
#endif //_NA_006801_20130814_RENEWAL_RANKINGSYSTEM_MINOR
};
struct GAME_OPTION
{
BYTE m_byMaxLevel; // ????
WORD m_MaxLevelChangeOfClass1st; // ?? ? ?? ??
BYTE m_byNormalShoutLevel; // ?? ??? ?? ??
BYTE m_byWorldShoutPCBANG; // ?? ??? PC? ?? ??( 0 : ???, 1 : ?? )
BYTE m_byFreeStatInitLevel; // ?? ?? ??? ??,_NA_0062_20100318_CHANGE_LEVEL_FOR_STAT_INIT_2
#ifdef _NA_20110610_MOVE_DOMINATION_CHANNEL_INFO
BYTE m_byDominationChannel; // ?? ??? ?? ??
#endif
#ifdef __NA_0_20080515_BUG_FIX_WORLD_SHOUT_LEVEL
BYTE m_byWorldShoutLevel; // ?? ??? ?? ??
GAME_OPTION() : m_byMaxLevel(0),
m_MaxLevelChangeOfClass1st(0),
m_byNormalShoutLevel(0),
m_byWorldShoutPCBANG(0),
m_byFreeStatInitLevel(0),
m_byWorldShoutLevel(0) {}
#endif
};
// ?? ?? ?? ??
typedef struct
{
INT m_ItemCode;
INT m_LimiteCode;
WORD m_ItemNum;
MONEY m_Money;
INT64 m_UsedTime;
GuildWarehouseLogType m_LogType;
TCHAR m_UsedCharName[MAX_CHARNAME_LENGTH+1];
} STRUCT_GUILDWAREHOUSE_LOGINFO, *LP_STRUCT_GUILDWAREHOUSE_LOGINFO;
typedef util::cSTRING_BUFFER<MAX_SSN_ENCODED_STREAM_LENGTH+1> sSSN_ENCODED_STREAM;
typedef util::cSTRING_BUFFER<MAX_CHARNAME_LENGTH+1> sSTRING_BUFFER_CHAR_NAME;
struct CHANNEL_USERCOUNT
{
DWORD dwChannelID;
DWORD dwVillageCount;
DWORD dwVillagePCRoomCount;
DWORD dwBattleZoneCount;
DWORD dwBattleZonePCRoomCount;
CHANNEL_USERCOUNT()
: dwChannelID(0), dwVillageCount(0), dwVillagePCRoomCount(0),
dwBattleZoneCount(0), dwBattleZonePCRoomCount(0) {}
};
//__NA001254_20090109_RTTG_FUNC_ADD
typedef struct tag_USER_INFO
{
tag_USER_INFO() {
ZeroMemory(m_szRecvCharName, MAX_CHARNAME_LENGTH+1);
}
char m_szRecvCharName[MAX_CHARNAME_LENGTH+1]; // ??? ?? ????
} USER_INFO, *LPUSER_INFO;
//?? ??? : ????? ? ?? ???? ?? '__KR_001355_20090608_GROUPINGSYSTEM_DATA'
struct STRUCT_GROUP_MEMBER_PACKET_INFO
{
char ptszMemberName[MAX_CHARNAME_LENGTH+1]; // ?? ??
BOOL bOnline; // ????? TRUE, ?????? FALSE
BYTE byClass; // ???
LEVELTYPE Level; // ??
BYTE byChannel; // ?? ???? ??(???? ?? ??)
INT64 lastDate; // ??? ?? ??
};
struct STRUCT_GROUP_MEMBER_INFO
{
DWORD charGUID; //???? GUID
DWORD accumEXP; //?? ??? ?? ???? ??甄?EXP
eGROUP_STAT groupSTAT; //????? ???
INT64 lastDate; //?? ??? ??? ?? ??
STRUCT_GROUP_MEMBER_PACKET_INFO GroupMemberInfo;
};
struct STRUCT_GROUP_CHECK_DATE
{
bool result; //?? ??
DWORD64 accumDate; //?? ??? ????? ?? ?
};
//{ designed by __NA_001290_20090525_SHIELD_SYSTEM
class Character;
// (NOTE) (PROPOSAL) (WAVERIX) ??? ?? ?? ??... ??? ????.
// ? data container?? ???? ??? ??? ??? ???? ? ??? ??? ????.
// ?? ???? ?? ???, ?? ??? ??? ????,
// ?? ?? ?? ??? ????? ???? ???? ??? ?? ???? ??? ????
// ??? ??? ?? ?? ? ???? ????? ??? ? ?? ????.
struct ArgDamaged { // Damaged()? ??
ArgDamaged() :
pAttacker(NULL),
attackType(eATTACK_TYPE_INVALID),
damage(0),
bCritical(FALSE),
bMirror(FALSE),
fLimitHP(0),
attackKind(eATTACK_RESIST_NOMAL),
SDApply(eSD_APPLY_EMPTY)
{
}
/*
// (CHANGES) (WAVERIX) remove meaningless code block
~ArgDamaged() {
pAttacker = NULL;
attackType = eATTACK_TYPE_INVALID;
damage = 0;
bCritical = FALSE;
bMirror = FALSE;
fLimitHP = 0;
attackKind = eATTACK_RESIST_NOMAL;
SDApply = eSD_APPLY_EMPTY;
}
const ArgDamaged& operator = ( const ArgDamaged& rhs ) {
this->pAttacker = rhs.pAttacker;
this->attackType = rhs.attackType;
this->damage = rhs.damage;
this->bCritical = rhs.bCritical;
this->bMirror = rhs.bMirror;
this->fLimitHP = rhs.fLimitHP;
this->attackKind = rhs.attackKind;
this->SDApply = rhs.SDApply;
return *this;
}
*/
Character* pAttacker;
eATTACK_TYPE attackType;
DAMAGETYPE damage;
BOOLEAN bCritical; // (CHANGES) (WAVERIX) changes boundary alignment by change types
BOOLEAN bMirror;
INT fLimitHP; // (NOTE) prefix f~ : int room_type ?
eATTACK_RESIST attackKind;
eSD_APPLY SDApply;
};
//}__NA_001290_20090525_SHIELD_SYSTEM
// (WAVERIX) (090819) Added by _PCBANG_POLICY_CHANGE_POST_EXPIRED
struct CHANGE_PCROOM_STATUS
{
enum eStatus {
eStatus_None, // ?? + ???PC?
eStatus_PcRoom, // ?? PC?
eStatus_PcRoomExpired, // ?? PC? (?? ?? ??)
};
BYTE status_; //eStatus
};
/************************************************************************/
/* ?? ??? ?? ??? */
/************************************************************************/
//_NA_0_20100705_DOMINATION_EVENT
struct DOMINATION_REWARD_EVENT_INFO
{
enum EventStats{
all_active = 0, // ?? ??? ?? ???, ?? ???? ??? ??.
all_Inactive, // ?? ?? ?? ??.
event_started // ?? ???? ??? ??.
};
BYTE m_byEventStats; //????? ??? ??
WORD m_wEventDayOfWeek; //????? ?? ??(0~6)
DWORD m_dwEventTime; //????? ?? ??(wzTime)
};
//???? ????? ??? ??? ???? ?? ???
struct DOMINATION_GUILD_INFO
{
GUILDGUID m_GuildGuid; //?? Guid
GUILDMARKIDX m_PatternIndex; //?? ?? ??
GUILDMARKIDX m_BackGroundIndex; //?? ?? ??
TCHAR m_tszGuildName[MAX_GUILDNAME_LENGTH+1]; //???
TCHAR m_tszGuildMaster[MAX_CHARNAME_LENGTH+1];//?? ????
MAPCODE m_MapCode; //?? ? ??
#ifdef _NA_006826_20130722_DOMINATION_RENEWAL
eDOMINATION_PROGRESS_STATE progress_state_; //???? ????
#endif //_NA_006826_20130722_DOMINATION_RENEWAL
};
//?? ??? ???? ?? ???
struct DOMINATION_BASIC_GUILD_INFO
{
GUILDGUID m_GuildGuid; //?? Guid
GUILDMARKIDX m_PatternIndex; //?? ?? ??
GUILDMARKIDX m_BackGroundIndex; //?? ?? ??
TCHAR m_tszGuildName[MAX_GUILDNAME_LENGTH+1]; //???
TCHAR m_tszGuildMaster[MAX_CHARNAME_LENGTH+1];//?? ????
CHARGUID m_GuildMasterGuid; //?? ???Guid
};
struct DOMINATION_INFO
{
MAPCODE m_FieldCode; //?? ??
DOMINATION_BASIC_GUILD_INFO m_inGuildInfo; //?? ?? ??
DOMINATION_BASIC_GUILD_INFO m_disGuildInfo; //?? ?? ??
BYTE m_DeffenseWallA; //?? A
BYTE m_DeffenseWallB; //?? B
BYTE m_DeffenseWallC; //?? C
BYTE m_TotalPoint; //??? ?? ?? ? ???
ULONGLONG m_BestCost; //????? ??? ?????
DOMINATION_REWARD_EVENT_INFO m_rewardEvent; //_NA_0_20100705_DOMINATION_EVENT
#ifdef _NA_006826_20130722_DOMINATION_RENEWAL
eDOMINATION_PROGRESS_STATE progress_state_; //???? ????
#endif //_NA_006826_20130722_DOMINATION_RENEWAL
};
//?????? ?????? ?? ??
struct DOMINATION_ACTION_INFO
{
MAPCODE m_FieldCode; //?? ??
GUILDGUID m_GuilGuid; //?? ??
TCHAR m_tszGuildName[MAX_GUILDNAME_LENGTH+1]; //?? ?? ???
ULONGLONG m_TenderCost; //?? ??
TCHAR m_tszActionApplyTime[MAX_TIMEDATA_SIZE + 1];//?? ??
};
//???? ???? ?? ??
struct DominationAuctionInfo
{
DOMINATION_ACTION_INFO m_ActionInfo; //?? ?? ??
GUILDMARKIDX m_PatternIndex; //?? ?? ??
GUILDMARKIDX m_BackGroundIndex; //?? ?? ??
TCHAR m_tszGuildMaster[MAX_CHARNAME_LENGTH+1];//?? ????
CHARGUID m_MasterGuid; //?? ??? Guid
};
//??? ?? ?? ??
struct DominationMemberInfo
{
bool guild_type_;//true : ?? / false : ??
CHARGUID member_guid_;
LEVELTYPE member_level_;
eCHAR_TYPE member_class_;
TCHAR member_name_[MAX_CHARNAME_LENGTH+1];
};
struct DOMINATION_RETURNMONEY_INFO
{
TCHAR m_tszMaster[MAX_CHARNAME_LENGTH+1]; //?? ?? ????
ULONGLONG m_TenderCost; //?? ?? ??
eSYSTEM_MEMO_TYPE m_CostType; //???? ???? ???
};
struct sDOMINATION_EVENT_INFO
{
// (CHANGES) (f100604.3L) remove constructors
//sDOMINATION_EVENT_INFO() {}
//~sDOMINATION_EVENT_INFO() {}
//sDOMINATION_EVENT_INFO(const sDOMINATION_EVENT_INFO& rhs);
#ifdef _NA_007128_20140326_MONDSCHIEN_DOMINATION
WORD m_wEventIndex; //? ??? ???? ???? ???
WORD m_wMapCode; //?? ??? ???? ??? ??? ?? ???
BYTE m_bDominationType; //?? ???? ??? ???? ??? 0: ?? ??? 1:???????
#endif //_NA_007128_20140326_MONDSCHIEN_DOMINATION
WORD m_wDayOfWeek; //Sunday = 0, Monday = 1
DWORD m_dwTime[DOMINATION_EVENT_MAX];
sDOMINATION_EVENT_INFO()
{
::ZeroMemory(this, sizeof(*this));
}
};
#ifdef _NA_007128_20140326_MONDSCHIEN_DOMINATION
struct sDOMINATION_CONTINENT_LORD_ALLIENCE_INFO
{
char allience_guild_name[MAX_GUILDNAME_LENGTH+1];
sDOMINATION_CONTINENT_LORD_ALLIENCE_INFO()
{
memset(allience_guild_name, 0, sizeof(allience_guild_name));
}
};
struct sDOMINATION_CONTINENT_LORD_INFO //???, ??? ??? ??? ??
{
MAPCODE map_code; //? ??
BYTE continent_number; //?? ??
char guild_name[MAX_GUILDNAME_LENGTH+1]; //?? ??
BYTE allience_guild_count; //?? ?? ?
//?? ?? ??
sDOMINATION_CONTINENT_LORD_ALLIENCE_INFO allience_guild_infos[MAX_ALLIENCE_GUILD_NUM];
sDOMINATION_CONTINENT_LORD_INFO()
{
map_code = 0;
continent_number = 0;
memset(guild_name, 0, sizeof(guild_name));
allience_guild_count = 0;
}
};
#endif //_NA_007128_20140326_MONDSCHIEN_DOMINATION
/************************************************************************/
//???? ??? ???
//_KR_0_20091021_FIRENDINVITATION_EXTEND
struct INVITATEFRIENDLIST_INFO
{
enum FRIEND_ACTION {FRIENDLIST_INIT = 0, FRIENDLIST_ADD, FRIENDLIST_DEL}; //??? ??? ??, ?? ?? ?? ??, ?? ?? ?? ??
DWORD m_dwCharGuid; // ??? ??? ??? GUID
BYTE m_byListCount; // ?? ??
BYTE m_FriendSts; // 5: ?? ?????, 6:?? ??? ??, ref:STRUCT_FRIEND_DB_INFO::eNodeType
BYTE m_FreindAction; // FRIEND_ACTION ??
DWORD m_GuidList[MAX_FRIEND_STAT_NUM]; // ??? GUID ??
WORD GetSize() const
{ // (f100624.2L)
const size_t kMinSize = sizeof(*this) - sizeof(m_GuidList);
return static_cast<WORD>(kMinSize + (sizeof(m_GuidList[0]) * m_byListCount));
}
};
//_KR_0_20091021_FIRENDINVITATION_EXTEND
struct STRUCT_FRIEND_INVITATE_INFO
{
DWORD dwGuid;
DWORD dwFriendGuid;
char ptszFriendName[MAX_CHARNAME_LENGTH+1];
BYTE byClass; // ???
};
//_NA_0_20091118_GAMEROOM_BATTLE_RESULT
/************************************************************************/
/* (??|??|PVP) ?? ?? ??? */
/************************************************************************/
struct GAMEROOM_BATTLE_UPDATE_INFO
{
CHARGUID CharGuid;
DWORD dwTotalDamageToEnemy; // ??? ?? ??? ??
DWORD dwTotalDamageByEnemy; // ??? ?? ??? ??
DWORD dwTotalHealToParty; // ??? ???? ??? ? ??
DWORD dwMaxDamageToEnemy; // ??? ?? ?? ???
WORD wKillCount; // ?? ??
WORD wDeadCount; // ?? ??
WORD wLevel; // ???? ??
//_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
BYTE strongpoint_attack; // ?? ?? ??
BYTE strongpoint_defense; // ?? ?? ??
WORD series_kill; // ?? ?? ??
#ifdef _NA_006633_20130415_ADD_BATTLEGROUND_ASSIST
WORD assist_count; // ?? ???? ??
#endif //_NA_006633_20130415_ADD_BATTLEGROUND_ASSIST
#ifdef _NA_007065_20140217_CHAOSZONE_GOLDRUSH
WORD gold_point; // ?? ?????(????)
#endif //_NA_007065_20140217_CHAOSZONE_GOLDRUSH
};
struct GAMEROOM_BATTLE_ENTER_INFO
{
CHARGUID CharGuid;
char szName[MAX_CHARNAME_LENGTH+1];
BYTE byClass; // ???
BYTE byLevel; // ??
WORD wTeam; // ?(????/PVP??) ?? 0 ?
#ifdef _NA_002050_20110216_ADD_GENDER
BYTE gender; // ??(?? ??)
#endif // _NA_002050_20110216_ADD_GENDER
GAMEROOM_BATTLE_ENTER_INFO() {ZeroMemory(szName, sizeof(char)*(MAX_CHARNAME_LENGTH+1));}
};
struct GAMEROOM_BATTLE_LEAVE_INFO
{
CHARGUID CharGuid;
BYTE AbNormalDisconnect; // ??? ??? ?? ???? ?? (0 : ??, 1 : ???)
};
/************************************************************************/
#if !defined(__SHOP_CASH_DATA_DECLARATION__)
#define __SHOP_CASH_DATA_DECLARATION__
// presentation by _NA00XXXX_090111_CASH_TYPE_SHARED_
struct CashData
{
CASH cash_; // default cash
CASH pp_cash_; // pp card cash
DWORD mileage_; // china mileage service
};
#endif
// _NA_0_20100211_SD_EFFECT_MODIFY
struct PAIR_DAMAGE
{
PAIR_DAMAGE()
: damageHP(0), damageSD(0) {}
PAIR_DAMAGE(DAMAGETYPE hp, DAMAGETYPE sd)
: damageHP(hp), damageSD(sd) {}
DAMAGETYPE damageHP;
DAMAGETYPE damageSD;
};
//_NA_000096_20100527_CHANGE_CHARACTER_APPEARANCE_SYSTEM
struct CharacterAppearanceInfo // ??? ?? ??
{
explicit CharacterAppearanceInfo() :
appearance_type_(
ChangeCharacterAppearanceTypeConst::EnumToValue(ChangeCharacterAppearanceTypeConst::kNone)),
face_(0),
hair_(0),
height_(0)
#ifdef _NA_002050_20110216_ADD_GENDER
, gender(0)
#endif
{
}
ChangeCharacterAppearanceTypeConst::ValueType appearance_type_; // ??? ?? ?? (?? ???)
BYTE face_; // ??
BYTE hair_; // ??
BYTE height_; // ?
#ifdef _NA_002050_20110216_ADD_GENDER
BYTE gender; // ??
#endif
}; // CharacterAppearanceInfo
// designed by _NA_20100812_INTEGRATE_SYSTEM_MEMO_DOMINATION
//??? ??? ?? ???? ????. ??? ?? ?? ???
//??? ??? ?? ???? ?? ?? ??.
struct BasicSystemMemoInfo
{
//-- ??? ?? or Guid? ???? ??? ?? ? ??
TCHAR recv_user_name_[MAX_CHARNAME_LENGTH+1];//?? ?? ????
CHARGUID recv_user_guid_;//?? ?? ??? Guid
TCHAR system_memo_contents_[MAX_MEMO_LENGTH + 1];//??? ?? ??
SLOTCODE recv_item_code_;//?? ?? ??? ??
ULONGLONG amount_cost_;//?? ?? ??
eSYSTEM_MEMO_TYPE system_memo_type_;//??? ?? ???
explicit BasicSystemMemoInfo():
recv_user_guid_(0),
recv_item_code_(0),
amount_cost_(0),
system_memo_type_(NORMAL_MEMO)
{
ZeroMemory(recv_user_name_, sizeof(recv_user_name_));
ZeroMemory(system_memo_contents_, sizeof(system_memo_contents_));
}
};
//?? ??? ?? ??? ?? ?? ??? ?? ??? ??? ???
//?? ??? ??? ?? ??? ??? ?? ? ??.
//????? ??? ?? ?? ?? ???? ??? ??? ??
struct SystemMemoInfoOfDomination : public BasicSystemMemoInfo
{
MAPCODE map_code_;
TCHAR guild_name_[MAX_GUILDNAME_LENGTH+1];
explicit SystemMemoInfoOfDomination():
map_code_(0)
{
ZeroMemory(guild_name_, sizeof(guild_name_));
}
};
//?? ?? ??? ?? ???
struct SystemMemoInfoOfLotto : public BasicSystemMemoInfo
{
INT64 i64Idx_;
WORD draw_num_;
BYTE status_;
};
#ifdef _NA_006801_20130814_RENEWAL_RANKINGSYSTEM_MINOR
struct SystemMemoInfoOfWorldRanking : public BasicSystemMemoInfo
{
RANKINGID ranking_id;
BYTE reward_ranking;
SystemMemoInfoOfWorldRanking() : ranking_id(0), reward_ranking(0) {}
};
#endif //_NA_006801_20130814_RENEWAL_RANKINGSYSTEM_MINOR
#ifdef _NA_003923_20120130_GUILD_RENEWAL
struct GuildInGameLogData
{
BYTE log_type_;//GuildInGameLogType
DWORD param1_;
DWORD param2_;
DWORD param3_;
INT64 log_time_;
TCHAR string_param_[MAX_IN_GAME_LOG_PARAM_STR];
GuildInGameLogData()
{
param1_ = 0;
param2_ = 0;
param3_ = 0;
log_time_ = 0;
ZeroMemory(string_param_, sizeof(string_param_));
}
};
#endif//_NA_003923_20120130_GUILD_RENEWAL
//_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
struct BATTLE_GROUND_TEAM_MEMBER_INFO
{
ChaosZoneTeam team_key;
TCHAR character_name[MAX_CLIENT_CHARNAME_LENGTH];
BATTLE_GROUND_TEAM_MEMBER_INFO()
{
team_key = kChaosZoneTeamNone;
ZeroMemory(character_name, sizeof(character_name));
}
};
struct BATTLE_GROUND_TEAM_SCORE_INFO
{
ChaosZoneTeam team_key;
BYTE strongpoint_count;
WORD victory_point;
};
#ifdef _NA_007065_20140217_CHAOSZONE_GOLDRUSH
struct GOLDRUSH_TEAM_MEMBER_INFO
{
ChaosZoneTeam team_key;
BYTE gold_grade;
TCHAR character_name[MAX_CLIENT_CHARNAME_LENGTH];
GOLDRUSH_TEAM_MEMBER_INFO()
{
gold_grade = 0;
team_key = kChaosZoneTeamNone;
ZeroMemory(character_name, sizeof(character_name));
}
};
struct GOLDRUSH_TEAM_SCORE_INFO
{
struct GoldRushUserInfo
{
TCHAR character_name[MAX_CLIENT_CHARNAME_LENGTH];
WORD gold_grade;
GoldRushUserInfo() : gold_grade(0) {
ZeroMemory(character_name, sizeof(character_name));
}
};
ChaosZoneTeam team_key;
WORD team_gold_point;
BYTE team_member_count;
GoldRushUserInfo team_player_info[10];
GOLDRUSH_TEAM_SCORE_INFO() : team_member_count(0), team_gold_point(0) {
ZeroMemory(team_player_info, sizeof(team_player_info));
}
};
#endif //_NA_007065_20140217_CHAOSZONE_GOLDRUSH
struct BATTLE_GROUND_STRONGPOINT_INFO
{
WzID strongpoint_id; // ?? ???
ChaosZoneTeam team_key;
BattleGroundStrongpointState strongpoint_state;
};
#ifdef _NA_006088_20120910_CHAOS_ZONE_FREE_PVP
struct BaseFreePVPRoomInfo
{
MAPCODE map_code; // ? ??
TCHAR room_title[MAX_ROOMTITLE_LENGTH + 1]; // ? ??
TCHAR room_password[MAX_ROOMPASSWORD_LENGTH + 1]; // ? ?? ??
BaseFreePVPRoomInfo() : map_code(0)
{
ZeroMemory(room_title, sizeof(room_title));
ZeroMemory(room_password, sizeof(room_password));
}
};
struct FreePVPRoomInfo
{
BaseFreePVPRoomInfo base_free_pvp_room_info; // ?? ? ??
KEYTYPE room_key; // ??(index)
KEYTYPE zone_key; // ?? ? ?
BYTE current_user_count; // ?? ??
BYTE max_user_count; // ?? ??
FreePVPRoomInfo() :
room_key(0),
current_user_count(0),
max_user_count(0)
{
}
};
#endif // _NA_006088_20120910_CHAOS_ZONE_FREE_PVP
#ifdef _NA_006372_20130108_BADGE_ITEM
struct TOGGLE_ITEMS
{
bool is_equiped_; // ??? ??
POSTYPE item_pos_; // ???? ??
SLOTCODE item_code_; // ??? ??
TOGGLE_ITEMS()
{
clear();
};
void clear()
{
is_equiped_ = false;
item_pos_ = INVALID_POSTYPE_VALUE;
item_code_ = 0;
};
};
#endif //_NA_006372_20130108_BADGE_ITEM
//_NA_005026_20120527_CHAOS_ZONE_BATTLE_GROUND
struct CHAOS_ZONE_RECORD_INFOS
{
enum { kRecordMaxCount = 5 };
#ifdef _NA_007065_20140217_CHAOSZONE_GOLDRUSH
GoldRushRecord goldrush_record[kRecordMaxCount+1];
#endif //_NA_007065_20140217_CHAOSZONE_GOLDRUSH
BattleGroundRecord battle_ground_record[kRecordMaxCount+1];
CHAOS_ZONE_RECORD_INFOS()
{
Clear();
}
void Clear()
{
ZeroMemory(battle_ground_record, sizeof(battle_ground_record));
#ifdef _NA_007065_20140217_CHAOSZONE_GOLDRUSH
ZeroMemory(goldrush_record, sizeof(goldrush_record));
#endif //_NA_007065_20140217_CHAOSZONE_GOLDRUSH
}
};
#ifdef _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM
struct ATTENDANCE
{
enum { kDayMaxCount = 31, };
DWORD year;
BYTE month;
eATTENDANCE_TYPE type;
int title;
int explanation;
BYTE day_emphasis[kDayMaxCount];
CODETYPE day_reward_index[kDayMaxCount];
};
class AttendanceInfo
{
public:
enum { kRecordMaxCount = 31 };
AttendanceInfo();
eATTENDANCE_INFO* begin() { return &m_info[0]; };
eATTENDANCE_INFO* end() { return &m_info[kRecordMaxCount]; }
eATTENDANCE_INFO* GetAttendance(int day);
bool SetAttendance(int day, eATTENDANCE_INFO info);
void init(DWORD year, BYTE month, eATTENDANCE_TYPE type, eATTENDANCE_INFO info);
bool IsEqualAttendanceInfo(int day, eATTENDANCE_INFO type);
int GetAttendanceInfoCount( eATTENDANCE_INFO type );
DWORD GetYear() const { return m_year; };
BYTE GetMonth() const { return m_month; };
eATTENDANCE_TYPE GetType() const { return m_type; };
private:
eATTENDANCE_INFO m_info[kRecordMaxCount + 1];
eATTENDANCE_TYPE m_type;
DWORD m_year;
BYTE m_month;
};
#endif // _NA_007932_20150112_ATTENDANCE_CHECK_SYSTEM
#ifdef _NA_008012_20150204_SUN_RANKING_SYSTEM
struct SunRankingInfoForClient
{
SunRankingInfoForClient()
{
memset(char_name, 0, MAX_CHARNAME_LENGTH+1);
score = 0;
class_code = eCHAR_NONE;
}
char char_name[MAX_CHARNAME_LENGTH+1];
SCORE score;
eCHAR_TYPE class_code;
};
#endif // _NA_008012_20150204_SUN_RANKING_SYSTEM
#ifdef _NA_008283_20150511_NOTIFICATIONS_SYSTEM
struct NotificationInfo
{
NotificationInfo()
{
Clear();
}
void Clear();
void SetInfo(const TCHAR* char_name, MAPCODE map_code, DWORD time,
NotificationType notification_type, SLOTCODE item_code, int option_value1 = 0);
TCHAR m_char_name[MAX_CHARNAME_LENGTH + 1];
MAPCODE m_map_code;
SLOTCODE m_item_code;
DWORD m_time;
NotificationType m_notification_type;
int m_optione_value1;
};
#endif // _NA_008283_20150511_NOTIFICATIONS_SYSTEM
#ifdef _NA_008404_20150712_MINIGAME_SYSTEM
struct BingoInfo
{
BYTE bingo_number;
eMINIGAME_BINGO_STATE bingo_state;
};
struct MiniGameBingoInfos
{
MiniGameBingoInfos()
{
Clear();
}
void Clear()
{
for (int i = 0; i < MINIGAME_BINGO_LENGTH; ++i)
{
m_bingo_infos[i].bingo_number = 0;
m_bingo_infos[i].bingo_state = eMINIGAME_BINGO_STATE_EMPTY;
}
bingo_event_index = 0;
}
bool IsGenerated()
{
for (int i = 0; i < MINIGAME_BINGO_LENGTH; ++i)
{
// ?? ???? 0? ??
if (m_bingo_infos[i].bingo_number == 0)
{
return false;
}
}
return true;
}
int bingo_event_index;
BingoInfo m_bingo_infos[MINIGAME_BINGO_LENGTH];
};
#endif // _NA_008404_20150712_MINIGAME_SYSTEM
struct AttrOptionInfo
{
WORD m_wOptionKind;
BYTE m_byOptionType;
INT m_iOptionValue;
AttrOptionInfo() :
m_wOptionKind(0), m_byOptionType(0), m_iOptionValue(0)
{
}
AttrOptionInfo(WORD kind, BYTE type, INT value) :
m_wOptionKind(kind), m_byOptionType(type), m_iOptionValue(value)
{}
};
#pragma warning(pop)
#pragma pack(pop)
#endif // __STRUCT_H__