2538 lines
77 KiB
C++
2538 lines
77 KiB
C++
/** 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以上:GM,4:虚拟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__
|