Files
2026-06-01 12:46:52 +02:00

413 lines
9.1 KiB
C++

#pragma once
#include <toolkit/c_fixed.h>
#include "SkillBase.h"
struct MonsterBase
{
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 ),
};
enum
{
MONSTER_TYPE_HUNTAHOLIC_1LV = 1,
MONSTER_TYPE_HUNTAHOLIC_2LV = 2,
MONSTER_TYPE_HUNTAHOLIC_3LV = 3,
MONSTER_TYPE_HUNTAHOLIC_BOSS = 4,
MONSTER_TYPE_MIDDLE_1_STAR = 5,
MONSTER_TYPE_MIDDLE_2_STAR = 6,
MONSTER_TYPE_MIDDLE_3_STAR = 7,
MONSTER_TYPE_MIDDLE_4_STAR = 8,
MONSTER_TYPE_HIGH_1_STAR = 9,
MONSTER_TYPE_HIGH_2_STAR = 10,
MONSTER_TYPE_HIGH_3_STAR = 11,
MONSTER_TYPE_HIGH_4_STAR = 12,
MONSTER_TYPE_HIGHEST_1_STAR = 13,
MONSTER_TYPE_HIGHEST_2_STAR = 14,
MONSTER_TYPE_HIGHEST_3_STAR = 15,
MONSTER_TYPE_HIGHEST_4_STAR = 16,
};
int uid; // ID
int monster_group; // 계열
int monster_type; // 타입
int monster_grade_icon; // 몬스터 등급 ICON id
int name_id; // 이름
// 몬스터 종족 ID
enum
{
MONSTER_RACE_DUNGEON_CORE = 20000, // 던전 코어
MONSTER_RACE_DUNGEON_CONNECTOR = 20001, // 던전 결계석
};
int race; // 종족
int group; // 계열
int affiliation; // 세부계열
int transform_level; // 변신레벨
int level; // 레벨
float size;
float scale;
int walk_type; // 보행 타입
int visible_range;
int chase_range;
int magic_type; // 마법 속성
int attack_type;
int hp;
int mp;
int attack_point;
int magic_point;
int defence;
int magic_defence;
int attack_speed;
int attack_speed_type; // 공속 타입
int casting_speed;
int accuracy;
int avoid;
int magic_accuracy;
int magic_avoid;
int taming_code; // 테이밍 되는 ID
int creature_taming_code_group; // 크리쳐 그룹 ( 소울 크리쳐 몬스터 테이밍 테이블의 그룹 아이디 )
c_fixed10 taming_percentage; // 테이밍 확률
float taming_exp_adjust; // 테이밍 경험치 조정
int exp; // 부여 EXP
int exp_2;
int jp; // 부여 JP
int jp_2;
int stat_id; // 스탯 ID
int ability; // 특수능력
int walk_speed; // 걷기 속도
int run_speed; // 뛰기 속도
int attack_range; // 사정 거리
int hidesense_range; // 은신 감지 거리
enum
{
FIGHT_TYPE_NORMAL = 0,
FIGHT_TYPE_ENVIRONMENT = 1,
FIGHT_TYPE_DUNGEON_CONNECTOR = 2,
FIGHT_TYPE_BOSS = 3,
FIGHT_TYPE_AGENT = 4,
FIGHT_TYPE_AUTO_TRAP = 5,
FIGHT_TYPE_TRAP = 6,
FIGHT_TYPE_NOT_MOVABLE = 7,
FIGHT_TYPE_RUNAWAY = 8,
FIGHT_TYPE_IMMORTAL_DUMMY = 9,
FIGHT_TYPE_DEFENCE_AREA = 10,
FIGHT_TYPE_DEFENCE_SKILL = 11,
FIGHT_TYPE_DEFENCE_HOLD = 12,
};
int fight_type;
enum
{
TRIGGER_TYPE_NONE = 0,
TRIGGER_TYPE_HP_BELOW_ONCE = 1,
TRIGGER_TYPE_HP_BELOW_ALWAYS = 2,
TRIGGER_TYPE_TIME_ONCE = 3,
TRIGGER_TYPE_TIME_ALWAYS = 4,
TRIGGER_TYPE_TIME_ALWAYS_INCLUDE_START = 5,
TRIGGER_TYPE_TIME_HP_BELOW = 6,
TRIGGER_TYPE_TIME_HP_OVER = 7,
};
enum
{
NUMBER_OF_TRIGGERS_PER_ROW = 6,
NUMBER_OF_SKILLS_PER_ROW = 6,
NUMBER_OF_ITEM_DROPS_PER_ROW = 10,
};
struct MONSTER_TRIGGER
{
int id;
float value[2];
char script[255];
};
const std::vector< MONSTER_TRIGGER > * trigger_list;
int gold_drop_percentage; // 돈 떨어트릴 확률
int gold_min; // 돈 최소
int gold_max; // 돈 최대
int gold_min_2; // 돈 최소
int gold_max_2; // 돈 최대
int chaos_drop_percentage; // 혼돈 떨어뜨릴 확률
int chaos_min; // 혼돈 최소
int chaos_max; // 혼돈 최대
int chaos_min_2; // 혼돈 최소
int chaos_max_2; // 혼돈 최대
struct MONSTER_ITEM_DROP_INFO
{
int item_id;
int percentage; // 드랍 확률. 100000000 일경우 100%
short min_count;
short max_count;
short min_level;
short max_level;
};
const std::vector< MONSTER_ITEM_DROP_INFO > * item_drop_list;
struct MONSTER_SKILL_INFO
{
int skill_id;
int skill_lv;
float skill_probability;
};
const std::vector< MONSTER_SKILL_INFO > * skill_info_list;
char script_on_dead[ 256 ];
};
struct SummonBase
{
SummonBase()
: uid( 0 )
, type( 0 )
, name_id( 0 )
, card_id( 0 )
, magic_type( 0 )
, rate( 0 )
, stat_id( 0 )
, size( 1.0f )
, scale( 1.0f )
, riding_speed( 0 )
, run_speed( 0 )
, is_riding_only( 0 )
, attack_range( 0 )
, evolve_type( 0 )
, evolve_target( 0 )
{
for( int i = 0; i < GameRule::MAX_SUMMON_SKILL_TREE ; ++i )
{
skill_tree_id[ i ] = 0;
skill_tree[ i ] = NULL;
}
}
enum SUMMON_RATE
{
RATE_BASIC = 0,
RATE_COMMON = 1,
RATE_UNCOMMON = 2,
RATE_RARE = 3,
RATE_UNIQUE = 4,
RATE_EXTRA = 99,
};
enum SUMMON_EVOLVE_TYPE
{
EVOLVE_NORMAL = 1, // 기본형
EVOLVE_GROWTH = 2, // 성장형
EVOLVE_EVOLVE = 3, // 진화형
};
int uid; // ID
int type; // 계열
int name_id; // 이름
int card_id; // 대응되는 소환수 카드
int magic_type; // 마법 속성
int rate;
int stat_id; // 스탯 ID
float size;
float scale;
int riding_speed; // 라이딩 속도
int run_speed; // 뛰기 속도
enum //
{
CANT_RIDING = 0,
RIDING_LENT = 1,
};
char is_riding_only; // 라이딩 전용
int attack_range; // 사정 거리
int evolve_type;
int evolve_target;
int skill_tree_id[ GameRule::MAX_SUMMON_SKILL_TREE ];
std::string strScript;
std::vector< SkillTree > *skill_tree[ GameRule::MAX_SUMMON_SKILL_TREE ];
};
struct PetBase
{
PetBase()
: uid( 0 )
, type( 0 )
, name_id( 0 )
, cage_id( 0 )
, skill_tree_id( 0 )
, attribute_flag( 0 )
, size( 1.0f )
, scale( 1.0f )
{}
enum _PET_BITFLAG
{
RATE_RARE = 1 << 0, // 레어 여부
RATE_SHOVELABLE = 1 << 1, // 삽질 가능 여부
RATE_ITEM_COLLECTABLE = 1 << 2, // 아이템 자동 줍기 가능 여부
RATE_WEIGHT_1000 = 1 << 3, // 소지량 증가(1000)
RATE_WEIGHT_2000 = 1 << 4, // 소지량 증가(2000)
RATE_WEIGHT_4000 = 1 << 5, // 소지량 증가(4000)
RATE_WEIGHT_8000 = 1 << 6, // 소지량 증가(8000)
};
// 소지량을 증가시키는 펫의 성능을 하드코딩하기 위해 필요한 정보들, 플래그의 수가 늘어난다면 코드가 변경되어야 한다.
enum _PET_BITFLAG_WEIGHT
{
RATE_WEIGHT_INDEX = 3,
RATE_WEIGHT_MAX = RATE_WEIGHT_1000 | RATE_WEIGHT_2000 | RATE_WEIGHT_4000 | RATE_WEIGHT_8000,
};
int uid; // ID
int type; // 계열
int name_id; // 이름
int cage_id; // 대응되는 소환수 카드
int skill_tree_id; // 스킬 트리 아이디
int attribute_flag; // 속성 플래그
float size;
float scale;
};
struct DropGroup
{
DropGroup()
: uid( 0 )
{
memset( drop_item_id, 0, sizeof( drop_item_id ) );
memset( drop_min_count, 0, sizeof( drop_min_count ) );
memset( drop_max_count, 0, sizeof( drop_max_count ) );
memset( drop_percentage, 0, sizeof( drop_percentage ) );
}
enum
{
MAX_DROP_GROUP = 10,
};
int uid;
int drop_item_id[10];
int drop_min_count[10];
int drop_max_count[10];
int drop_percentage[10]; // 드랍 확률. 100000000 일경우 100%
};
struct _MONSTER_INFO_FILE : public MonsterBase
{
_MONSTER_INFO_FILE()
{
memset( model, 0, sizeof(model) );
motion_file_id = 0;
weapon_type = 0;
nCamera_x = 0; //카메라 위치 X
nCamera_y = 0; //카메라 위치 Y
nCamera_z = 0; //카메라 위치 Z
nTarget_x = 0; //카메라 타겟 위치 X
nTarget_y = 0; //카메라 타겟 위치 Y
nTarget_z = 0; //카메라 타겟 위치 Z
nMaterial = 0; // 재질
nAttack_motion_speed = 0; // 공격속도
}
char model[256];
int motion_file_id;
int weapon_type;
int nCamera_x; //카메라 위치 X
int nCamera_y; //카메라 위치 Y
int nCamera_z; //카메라 위치 Z
int nTarget_x; //카메라 타겟 위치 X
int nTarget_y; //카메라 타겟 위치 Y
int nTarget_z; //카메라 타겟 위치 Z
int nMaterial; // 재질
int nAttack_motion_speed; // 공격속도
};
struct _SUMMON_INFO_FILE : public SummonBase
{
_SUMMON_INFO_FILE()
{
walk_type = 0;
nMaterial = 0;
weapon_type = 0;
nAttack_motion_speed = 0;
nForm = 0;
nEvolve_target = 0;
nCamera_x = 0; //카메라 위치 X
nCamera_y = 0; //카메라 위치 Y
nCamera_z = 0; //카메라 위치 Z
nTarget_x = 0;
nTarget_y = 0;
nTarget_z = 0;
memset( model, 0, sizeof(model) );
motion_file_id = 0;
nFaceID = 0;
memset( face_file_name, 0, sizeof(face_file_name) );
card_id = 0;
}
int walk_type; // 보행 타입
int nMaterial; //재질
int weapon_type; //무기 종류
int nAttack_motion_speed; //공격속도
int nForm; //형태(진화)
int nEvolve_target; //진화 대상
int nCamera_x; //카메라 위치 X
int nCamera_y; //카메라 위치 Y
int nCamera_z; //카메라 위치 Z
int nTarget_x;
int nTarget_y;
int nTarget_z;
char model[256];
int motion_file_id;
int nFaceID;
char face_file_name[256];
int card_id;
};