432 lines
13 KiB
C
432 lines
13 KiB
C
#pragma once
|
|
|
|
#pragma pack( 1 )
|
|
|
|
//#include <string>
|
|
#include "Enc.h"
|
|
#include "GameRule.h"
|
|
|
|
#ifdef _RDBGENTEST
|
|
#pragma pack(push,1)
|
|
#endif
|
|
|
|
//------------------------------------------------------------------------------------------------------
|
|
// 몬스터 리소스
|
|
//------------------------------------------------------------------------------------------------------
|
|
struct MonsterBase
|
|
{
|
|
enum ATTACK_TYPE_FLAG
|
|
{
|
|
AT_FIRST_ATTACK = ( 1 << 0 ),
|
|
AT_GROUP_FIRST_ATTACK = ( 1 << 1 ),
|
|
AT_RESPONSE_CASTING = ( 1 << 2 ),
|
|
AT_RESPONSE_RACE = ( 1 << 3 ),
|
|
AT_RESPONSE_BATTLE = ( 1 << 4 ),
|
|
};
|
|
|
|
// 이 등급은 기존의 16개의 등급분류이다. 8.2에서 등급이 eMONSTER_RATE만큼 줄어들어서
|
|
// 이 데이터는 삭제하려 했으나 기존의 몬스터 등급으로 처리하는 코드가 서버, 클라에 존재하여서
|
|
// 등급을 삭제 할 수 없어 등급을 남겨두었다
|
|
enum MONSTER_TYPE
|
|
{
|
|
MONSTER_FIELD_MID_BOSS = 12,
|
|
MONSTER_DUNGEON_MID_BOSS = 22,
|
|
MONSTER_RANK_C_BOSS = 31,
|
|
MONSTER_RANK_B_BOSS = 32,
|
|
MONSTER_RANK_A_BOSS = 33,
|
|
MONSTER_RANK_S_BOSS = 34,
|
|
};
|
|
|
|
// 8.2에서 바뀐 등급 분류 ( 현재 등급 아이콘 출력과 툴팁을 위해 씌이고 있다. )
|
|
enum eMONSTER_RATE : BYTE
|
|
{
|
|
MONSTER_INSTANCE = 1,
|
|
MONSTER_BASIC,
|
|
MONSTER_RARE,
|
|
MONSTER_SPECIAL,
|
|
MONSTER_UNIQUE,
|
|
MONSTER_UNKNOWN, // 아직 결정되지 않음
|
|
|
|
MONSTER_RATE_MAX_,
|
|
};
|
|
|
|
int old_uid; // ID (로딩 후에 쓰레기 값을 채움) 1
|
|
int monster_group; // 계열 2
|
|
int name_id; // 이름 3
|
|
int respawn_name_id; // 리스폰 장소 4
|
|
int transform_level; // 변신레벨 7
|
|
int walk_type; // 보행 타입 8
|
|
int slant_type; // 9
|
|
float size; // 10
|
|
float scale; // 11
|
|
float target_fx_size; // 12
|
|
int level; // 레벨 19
|
|
int affiliation_id; // 계열 ID 20
|
|
int affiliationDetail_id; // 세부 계열 ID 21
|
|
int species_id; // 종 ID 22
|
|
int magic_type; // 마법 속성 23
|
|
int race; // 종족 24
|
|
int visible_range; // 25
|
|
int chase_range; // 26
|
|
int monster_type; // 타입 32
|
|
int monster_grade_icon; // 몬스터 등급 아이콘 id 33
|
|
int stat_id; // 스탯 ID 34
|
|
int monster_skill_link_id; // 몬스터 스킬 id 36
|
|
int ability; // 40
|
|
int standard_walk_speed; // 이동 속도 41
|
|
int standard_run_speed; // 이동 속도 42
|
|
int walk_speed; // 걷기 속도 43
|
|
int run_speed; // 뛰기 속도 44
|
|
int attack_range; // 사정 거리 45
|
|
int hidesense_range; // 은신 감지 거리 46
|
|
int hp; // 47
|
|
int mp; // 48
|
|
int attack_point; // 49
|
|
int magic_point; // 50
|
|
int defence; // 51
|
|
int magic_defence; // 52
|
|
int attack_speed; // 53
|
|
int casting_speed; // 54
|
|
int accuracy; // 55
|
|
int avoid; // 56
|
|
int magic_accuracy; // 57
|
|
int magic_avoid; // 58
|
|
int taming_code; // 테이밍 되는 ID 59
|
|
int creature_taming_code; // MonsterCreature Resource SID 60
|
|
float taming_percentage; // 테이밍 확률 61
|
|
float taming_exp_adjust; // 테이밍 경험치 조정 62
|
|
int exp; // 부여 EXP 63
|
|
int jp; // 부여 JP 64
|
|
int gold_drop_percentage; // 돈 떨어트릴 확률 65
|
|
int gold_min; // 돈 최소 66
|
|
int gold_max; // 돈 최대 67
|
|
int chaos_drop_percentage; // 혼돈 떨어뜨릴 확률 68
|
|
int chaos_min; // 혼돈 최소 69
|
|
int chaos_max; // 혼돈 최대 70
|
|
int exp_2; // 71
|
|
int jp_2; // 72
|
|
int gold_min_2; // 73
|
|
int gold_max_2; // 74
|
|
int chaos_min_2; // 75
|
|
int chaos_max_2; // 76
|
|
int drop_table_link_id; // 몬스터 드롭 테이블 77
|
|
int texture_group; // 78
|
|
int local_flag; // 79
|
|
|
|
int attack_type;
|
|
|
|
};
|
|
|
|
|
|
#ifdef _RDBGENTEST
|
|
#pragma pack(pop)
|
|
#endif
|
|
|
|
|
|
#ifdef _RDBGENTEST
|
|
#pragma pack(push,1)
|
|
#endif
|
|
|
|
//------------------------------------------------------------------------------------------------------
|
|
// 몬스터 정보 (파일)
|
|
//------------------------------------------------------------------------------------------------------
|
|
struct _MONSTER_INFO_FILE_PRE : public MonsterBase
|
|
{
|
|
_MONSTER_INFO_FILE_PRE()
|
|
{
|
|
memset( model, 0, sizeof(model) );
|
|
fight_type = 0;
|
|
}
|
|
|
|
char model[256]; // 5
|
|
int motion_file_id; // 6
|
|
int nCamera_x; // 카메라 위치 X 13
|
|
int nCamera_y; // 카메라 위치 Y 14
|
|
int nCamera_z; // 카메라 위치 Z 15
|
|
float fTarget_x; // 카메라 타겟 위치 X 16
|
|
float fTarget_y; // 카메라 타겟 위치 Y 17
|
|
float fTarget_z; // 카메라 타겟 위치 Z 18
|
|
int fight_type; // 32
|
|
int nMaterial; // 재질 34
|
|
int weapon_type; // 35
|
|
int nAttack_motion_speed; // 공격속도 36
|
|
};
|
|
|
|
#ifdef _RDBGENTEST
|
|
#pragma pack(pop)
|
|
#endif
|
|
|
|
|
|
struct SummonBase
|
|
{
|
|
|
|
enum SUMMON_RATE
|
|
{
|
|
RATE_BASIC = 0,
|
|
RATE_NORMAL_BASIC = 1,
|
|
RATE_SPECIAL_BASIC = 2,
|
|
RATE_NORMAL_RARE = 3,
|
|
RATE_SPECIAL_RARE = 4,
|
|
RATE_UNIQUE = 5,
|
|
|
|
// AziaMAfia Pet Rarity
|
|
RATE_VERACRUZ = 6,
|
|
RATE_PHANTOM = 7,
|
|
RATE_AURA = 8,
|
|
RATE_SHINNY = 9,
|
|
RATE_GALAXY = 10,
|
|
};
|
|
|
|
enum SUMMON_EVOLVE_TYPE
|
|
{
|
|
EVOLVE_NORMAL = 1, // 기본형
|
|
EVOLVE_GROWTH = 2, // 성장형
|
|
EVOLVE_EVOLVE = 3, // 진화형
|
|
};
|
|
|
|
int uid; // ID 1
|
|
int model_id; // 모델 계열 2
|
|
int name_id; // 이름 아이디 3
|
|
int affiliation_id; // 계열 아이디 4
|
|
int affiliationDetail_id; // 세부 계열 아이디 5
|
|
int speceis_id; // 종 아이디 6
|
|
int color_id; // 종분류 컬러 7
|
|
int magic_type; // 마법 속성 8
|
|
char rate; // 9
|
|
int stat_id; // 스탯 ID 10
|
|
float size; // 사이즈 11
|
|
float scale; // 크기 12
|
|
float target_fx_size; // 타겟 X 사이즈 13
|
|
int standard_walk_speed; // 걷기 속도 14
|
|
int standard_run_speed; // 뛰기 속도 15
|
|
int riding_speed; // 라이딩 속도 16
|
|
int run_speed; // 뛰기 속도 17
|
|
char is_riding_only; // 라이딩 전용 18
|
|
int riding_motion_type; // 라이딩 모션 타입 19
|
|
int attack_range; // 사정 거리 20
|
|
|
|
};
|
|
|
|
|
|
struct MonsterCreatureInfo
|
|
{
|
|
int nSid;
|
|
int nUseCode;
|
|
int arSummonCode[ GameRule::MAX_MONSTER_CREATURE_COUNT ];
|
|
};
|
|
|
|
|
|
//------------------------------------------------------------------------------------------------------
|
|
// 펫 리소스
|
|
//------------------------------------------------------------------------------------------------------
|
|
struct PetBase
|
|
{
|
|
enum PET_ATTRIBUTE
|
|
{
|
|
ATTRIBUTE_BASIC = 0,
|
|
ATTRIBUTE_RARE = 1,
|
|
};
|
|
|
|
PetBase()
|
|
: uid ( 0 )
|
|
, specific_id ( 0 )
|
|
, affiliation ( 0 )
|
|
, affiliationDetail ( 0 )
|
|
, name_id ( 0 )
|
|
, cage_id ( 0 )
|
|
, skill_tree_id ( 0 )
|
|
, attribute_flag ( 0 )
|
|
, size ( 0 )
|
|
, scale ( 0 )
|
|
, target_fx_size ( 0 )
|
|
, walk_type ( 0 )
|
|
, slant_type ( 0 )
|
|
{
|
|
}
|
|
|
|
int uid; // 고유 ID 1
|
|
int specific_id; // 종 id 2
|
|
int affiliation; // 계열 3
|
|
int affiliationDetail; // 세부 계열 4
|
|
int name_id; // 팻의 이름 TEXT ID 5
|
|
int cage_id; // 펫의 우리 TEXT ID 6
|
|
int skill_tree_id; // 스킬 트리 ID 7
|
|
int attribute_flag; // 팻 등급 8
|
|
float size; // 크기 9
|
|
float scale; // 모델 스케일 10
|
|
float target_fx_size; // 11
|
|
int walk_type; // 보행 타입 12
|
|
int slant_type; // 기울기 타입 13
|
|
};
|
|
|
|
|
|
//------------------------------------------------------------------------------------------------------
|
|
// 펫 정보 (파일)
|
|
//------------------------------------------------------------------------------------------------------
|
|
struct _PET_INFO_FILE : public PetBase
|
|
{
|
|
_PET_INFO_FILE()
|
|
: PetBase ()
|
|
, camera_x ( 0 )
|
|
, camera_y ( 0 )
|
|
, camera_z ( 0 )
|
|
, target_x ( 0 )
|
|
, target_y ( 0 )
|
|
, target_z ( 0 )
|
|
, motion_file_id ( 0 )
|
|
, texture_group ( -1 )
|
|
, local_flag ( 0 )
|
|
{
|
|
memset( model, 0, sizeof( model ) );
|
|
}
|
|
|
|
int camera_x; // 14
|
|
int camera_y; // 15
|
|
int camera_z; // 16
|
|
float target_x; // 17
|
|
float target_y; // 18
|
|
float target_z; // 19
|
|
char model[ 256 ]; // 20
|
|
int motion_file_id; // 21
|
|
int texture_group; // 22
|
|
int local_flag; // 23
|
|
};
|
|
|
|
|
|
struct DropGroup
|
|
{
|
|
enum
|
|
{
|
|
MAX_DROP_GROUP = 10,
|
|
};
|
|
|
|
int uid;
|
|
int drop_item_id[10];
|
|
int drop_percentage[10]; ///< 드랍 확률. 100000000 일경우 100%
|
|
};
|
|
|
|
|
|
struct _MONSTER_INFO_FILE : public _MONSTER_INFO_FILE_PRE
|
|
{
|
|
ENC_INT uid;
|
|
};
|
|
|
|
struct _SUMMON_INFO_FILE : public SummonBase
|
|
{
|
|
_SUMMON_INFO_FILE()
|
|
{
|
|
nMaterial = 0;
|
|
nAttack_motion_speed = 0;
|
|
nForm = 0;
|
|
nEvolve_target = 0;
|
|
|
|
memset( model, 0, sizeof(model) );
|
|
nFaceID = 0;
|
|
|
|
memset( face_file_name, 0, sizeof(face_file_name) );
|
|
|
|
card_id = 0;
|
|
|
|
memset( illust_file_name, 0, sizeof(illust_file_name) );
|
|
|
|
text_feature_id = 0;
|
|
text_name_id = 0;
|
|
|
|
memset( skill_tree_id, 0, sizeof( skill_tree_id ) );
|
|
}
|
|
|
|
int walk_type; // 보행 타입 20
|
|
int slant_type; // 걷기 타입 21
|
|
int nMaterial; // 재질 22
|
|
int weapon_type; // 무기 종류 23
|
|
int nAttack_motion_speed; // 공격속도 24
|
|
int nForm; // 형태(진화) 25
|
|
int nEvolve_target; // 진화 대상 26
|
|
int nCamera_x; // 카메라 위치 X 27
|
|
int nCamera_y; // 카메라 위치 Y 28
|
|
int nCamera_z; // 카메라 위치 Z 29
|
|
float fTarget_x; // 타겟 위치 X 30
|
|
float fTarget_y; // 타겟 위치 Y 31
|
|
float fTarget_z; // 타겟 위치 Z 32
|
|
char model[256]; // 모델 파일 이름 33
|
|
int motion_file_id; // 모션 파일 ID 34
|
|
int nFaceID; // 얼굴 ID 35
|
|
char face_file_name[256]; // 얼굴 파일 이름 36
|
|
int card_id; // 카드 ID 37
|
|
char illust_file_name[256]; // 일러스트 파일 이름 39
|
|
int text_feature_id; // 40
|
|
int text_name_id; // 41
|
|
int skill_tree_id[5]; // 스킬 트리 ID 42 ~ 46
|
|
int texture_group; // -1: 기본 텍스쳐, 0~9 그룹화된 텍스쳐 47
|
|
int local_flag; // 48
|
|
};
|
|
|
|
|
|
//------------------------------------------------------------------------------------------------------
|
|
// 몬스터 종 정보 ( 클라이언트만 사용하는 정보 )
|
|
//------------------------------------------------------------------------------------------------------
|
|
struct MonsterSpeciesBase
|
|
{
|
|
|
|
MonsterSpeciesBase()
|
|
: uid( NULL )
|
|
, species_id( NULL )
|
|
, string_id( NULL )
|
|
{
|
|
}
|
|
|
|
int uid; // 유니크 ID 1
|
|
int species_id; // 종 ID 2
|
|
int string_id; // 종 문자열 ID 3
|
|
|
|
};
|
|
|
|
|
|
//------------------------------------------------------------------------------------------------------
|
|
// 몬스터 계열 정보 ( 클라이언트만 사용하는 정보 )
|
|
//------------------------------------------------------------------------------------------------------
|
|
struct MonsterAffiliationBase
|
|
{
|
|
|
|
MonsterAffiliationBase()
|
|
: uid( NULL )
|
|
, affiliation_id( NULL )
|
|
, string_id( NULL )
|
|
{
|
|
}
|
|
|
|
int uid; // 유니크 ID 1
|
|
int affiliation_id; // 계열 ID 2
|
|
int string_id; // 계열 문자열 ID 3
|
|
|
|
};
|
|
|
|
|
|
//------------------------------------------------------------------------------------------------------
|
|
// 몬스터 세부 계열 정보 ( 클라이언트만 사용하는 정보 )
|
|
//------------------------------------------------------------------------------------------------------
|
|
struct MonsterAffiliationDetailBase
|
|
{
|
|
|
|
MonsterAffiliationDetailBase()
|
|
: uid( NULL )
|
|
, affiliationDetail_id( NULL )
|
|
, string_id( NULL )
|
|
{
|
|
ZeroMemory( taming_possible_icon_filename, sizeof( taming_possible_icon_filename ) );
|
|
ZeroMemory( taming_impossible_icon_filename, sizeof( taming_impossible_icon_filename ) );
|
|
ZeroMemory( taming_Tamed_icon_filename, sizeof( taming_Tamed_icon_filename ) );
|
|
}
|
|
|
|
int uid; // 유니크 ID 1
|
|
int affiliationDetail_id; // 계열 ID 2
|
|
int string_id; // 계열 문자열 ID 3
|
|
char taming_possible_icon_filename[256]; // 테이밍 가능 아이콘 이름 4
|
|
char taming_impossible_icon_filename[256]; // 테이밍 불 가능 아이콘 이름 5
|
|
char taming_Tamed_icon_filename[256]; // 테이밍 됨 아이콘 이름 6
|
|
|
|
};
|
|
|
|
|
|
|
|
#pragma pack() |