Files
Leviathan/Client/Game/game/Resource/MonsterBase.h
T
2026-06-01 12:46:52 +02:00

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()