514 lines
22 KiB
C++
514 lines
22 KiB
C++
#pragma once
|
|
|
|
#include <vector>
|
|
|
|
#include <mmo/ArType.h>
|
|
#include <toolkit/c_fixed.h>
|
|
|
|
#include "CreatureBase.h"
|
|
#include "GameContent.h"
|
|
|
|
struct StructState
|
|
{
|
|
enum StateCode
|
|
{
|
|
INC_ITEM_CHANCE = 1020, // 아이템 드랍율 증가
|
|
HUNTING_CREATURE_CARD = 2051, // 헌팅 크리쳐 카드
|
|
INC_BLOCK_CHANCE = 1021,
|
|
ADD_ENERGY = 4504,
|
|
|
|
STAMINA_SAVE = 4003,
|
|
SUPER_SAVE_0 = 4102, // 성장의 물약(구 슈퍼 세이버) - Lv 1 ~ Lv 120
|
|
SUPER_SAVE_1 = 4110, // 성장의 물약(구 슈퍼 세이버) - Lv 121 ~ Lv 130
|
|
SUPER_SAVE_2 = 4111, // 성장의 물약(구 슈퍼 세이버) - Lv 131 ~ Lv 140
|
|
SUPER_SAVE_3 = 4112, // 성장의 물약(구 슈퍼 세이버) - Lv 141 ~ Lv 150
|
|
SUPER_SAVE_4 = 4113, // 성장의 물약(구 슈퍼 세이버) - Lv 1 ~ Lv 150(SUPER_SAVE_1 ~ SUPER_SAVE_3 통합 버전)
|
|
SUPER_SAVE_5 = 4116, // 성장의 물약(구 슈퍼 세이버) - Lv 151 ~ Lv 170
|
|
SUPER_SAVE_6 = 4119, // 성장의 물약(구 슈퍼 세이버) - Lv 1 ~ Lv 300
|
|
SUPER_SAVE_7 = 4120,
|
|
|
|
FRENZY = 4503, // 몬스터 프렌지
|
|
|
|
BLESS_OF_GODDESS = 4510, // 여신의 축복(기부 보상)
|
|
//STIGMA_OF_CRIME = 4512, // 죄의 낙인(Good 성향 중 PK 페널티) - 기부 시스템 리뉴얼 이후로 사용하지 않음
|
|
|
|
NEMESIS_FOR_AUTO = 5997, // Divine punishment (auto)
|
|
NEMESIS = 5999, // Diving punishment
|
|
|
|
SLEEP = 6005, // 수면
|
|
STUN = 6006, // 스턴
|
|
HOLD = 6007, // 홀드
|
|
FEAR = 6008, // 공포
|
|
FROZEN = 6009, // 빙결
|
|
ILLUSION = 6010,
|
|
|
|
SCELLE = 6018,
|
|
|
|
TOTAL_FROZEN = 314113, // 빙결(피격 시 지속효과가 해제될 확률이 조정된 빙결)
|
|
SEAL = 999990, // 공간봉인
|
|
SHINE_WALL = 999991, // 샤인 월 공격과 이동이 봉쇄당한다. 데미지를 입으면 해제된다.
|
|
STONECURSE = 6012, // 석화(피격 불가)
|
|
MUTE = 6013, // 침묵
|
|
HIDE = 6016, // 은신
|
|
STONECURSE_MORTAL = 6019, // 석화(피격 가능)
|
|
GUILD_BUFF = 6523,
|
|
FALL_FROM_SUMMON = 9001, // 낙상 공격과 이동이 봉쇄당한다.
|
|
GAIA_MEMBER_SHIP = 9004,
|
|
PCBANG_MEMBER_SHIP = 9005, // 아이콘만 있고 효과 없음
|
|
PCBANG_PREMIUM_MEMBER_SHIP = 9006, // 최대 HP/MP 10% 증폭 효과 있음
|
|
CARELESSNESS = 9007, // 방심 공격과 이동이 봉쇄당한다. 앉은 상태에서 피격 시
|
|
LUNA = 9903,
|
|
|
|
SUMMON_GROWING_CRACKER_WITHOUT_PENALTY = 9923, // 크리처 쑥쑥 크래커: 소환수용 스테미너 세이버 역할(플레이어에게 걸림)
|
|
SUMMON_GROWING_CRACKER_1X = 9924, // 크리처 쑥쑥 크래커: 소환수용 스테미너 세이버 역할(플레이어에게 걸림) - 플레이어보다 레벨 높은 소환수는 보너스 경험치 못 먹음
|
|
SUMMON_GROWING_CRACKER_2X = 9984,
|
|
SUMMON_GROWING_CRACKER_3X = 9985,
|
|
SUMMON_GROWING_CRACKER_4X = 9986,
|
|
|
|
BURNING_STYLE = 12671,
|
|
DUSK_STYLE = 12673,
|
|
|
|
AGILE_STYLE = 12672,
|
|
SQUALL_OF_ARROW = 12678,
|
|
|
|
FROZEN_SNARE = 13003,
|
|
EARTH_RESTRICTION = 13023,
|
|
|
|
NIGHTMARE = 13601,
|
|
|
|
PASS_DAMAGE = 14012,
|
|
|
|
PET_SHOVELING_REWARD_INC_MOVE_SPEED = 15000, // 펫 삽질 보상(이속 증가)
|
|
PET_SHOVELING_REWARD_DEC_MOVE_SPEED = 15001, // 펫 삽질 보상(이속 감소)
|
|
PET_SHOVELING_REWARD_INC_STR_INT = 15002, // 펫 삽질 보상(힘/지식 증가)
|
|
PET_SHOVELING_REWARD_DEC_STR_INT = 15003, // 펫 삽질 보상(힘/지식 감소)
|
|
PET_SHOVELING_REWARD_INC_AGI_DEX = 15004, // 펫 삽질 보상(민첩/정신 증가)
|
|
PET_SHOVELING_REWARD_DEC_AGI_DEX = 15005, // 펫 삽질 보상(민첩/정신 감소)
|
|
PET_SHOVELING_REWARD_INC_VIT = 15006, // 펫 삽질 보상(체력 증가)
|
|
PET_SHOVELING_REWARD_DEC_VIT = 15007, // 펫 삽질 보상(체력 감소)
|
|
|
|
DEMONIC_STUN = 145014,
|
|
EARTH_TREMOR = 145015,
|
|
DRAGONIC_FEAR = 145017,
|
|
|
|
LIGHTNING_FORCE_CONGESTION = 163420, // 뇌기 폭주
|
|
|
|
FUSION_WITH_SUMMON = 164001, // 생명의 융합 (아따-_- 영어 이름 구리다~-_-;;;)
|
|
SUMMON_FORM = 164002, // 야수 융합
|
|
|
|
ANOMALY_SLEEP = 201032,
|
|
ANOMALY_STUN = 201033,
|
|
ANOMALY_HOLD = 201034,
|
|
ANOMALY_FEAR = 201035,
|
|
ANOMALY_FROZEN = 201036,
|
|
ANOMALY_ILLUSION = 201037,
|
|
|
|
MONSTER_STUN = 201052,
|
|
|
|
PROTECTING_FORCE_OF_BEGINNING = 201085, // 시작의 보호기운<석화> <데스매치 전용>
|
|
TRACE_OF_FUGITIVE = 201084, // 도망자의 기척<은신><데스매치 전용>
|
|
|
|
MONSTER_SLEEP = 203025,
|
|
|
|
MOVE_SPEED_SLOWDOWN = 313205, // 베어로드 비정상 탈퇴로 인한 페널티 디버프
|
|
|
|
STATE_FOR_DUNGEON_OWNER_1 = 41102446,
|
|
STATE_FOR_DUNGEON_OWNER_2 = 41102447,
|
|
|
|
STATE_EMPTY = 0,
|
|
};
|
|
|
|
enum StateGroup
|
|
{
|
|
GROUP_NONE = 0,
|
|
GROUP_PHYSICAL_BOMB = 101,
|
|
GROUP_MAGICAL_BOMB = 102,
|
|
GROUP_ASSASSIN = 201,
|
|
GROUP_RIDING = 301,
|
|
GROUP_MAGIC = 401, // 마법스킬에 의해 호출된 디버프 - 디스펠, 정화에 의해 제거됨
|
|
GROUP_SKILL = 402, // 물리스킬에 의해 호출된 디버프 - 디스펠에 의해 제거됨
|
|
GROUP_POISON = 403, // 독 또는 중독으로 정의된 지속데미지 - 해독, 정화에 의해 제거됨
|
|
GROUP_CURSE = 404, // 저주로 정의된 디버프, 지속데미지 - 저주해제에 의해 제거됨
|
|
GROUP_DISEASE = 405, // 질병으로 정의된 암속성, 디버프, 지속데미지 - 질병치료에 의해 제거됨
|
|
GROUP_WOUND = 406, // 외상으로 정의된 지속데미지, 출혈 - 외상치료에 의해 제거됨
|
|
};
|
|
|
|
enum StateBaseEffect
|
|
{
|
|
EF_NONE = 0, // 기본 효과 없음
|
|
EF_PHYSICAL_STATE_DAMAGE = 1, // 물리 지속 데미지
|
|
EF_PHYSICAL_IGNORE_DEFENCE_STATE_DAMAGE = 2, // 방어 무시 물리 지속 데미지
|
|
EF_MAGICAL_STATE_DAMAGE = 3, // 마법 지속 데미지
|
|
EF_MAGICAL_IGNORE_RESIST_STATE_DAMAGE = 4, // 마방 무시 마법 지속 데미지
|
|
|
|
EF_PHYSICAL_IGNORE_DEFENCE_PER_STATE_DAMAGE = 6, // 방어 무시 물리 % 지속 데미지(지속효과의 추가 컬럼 사용함)
|
|
|
|
EF_HEAL_HP_BY_MAGIC = 11, // 마법 HP 회복
|
|
EF_HEAL_MP_BY_MAGIC = 12, // 마법 MP 회복
|
|
EF_HEAL_SP_BY_MAGIC = 13, // 마법 SP 회복
|
|
EF_HEAL_HP_BY_ITEM = 21, // 아이템 HP 회복
|
|
EF_HEAL_MP_BY_ITEM = 22, // 아이템 MP 회복
|
|
EF_HEAL_SP_BY_ITEM = 23, // 아이템 SP 회복
|
|
EF_HEAL_HPMP_BY_ITEM = 24, // 아이템 HP, MP 회복
|
|
EF_HEAL_HPMP_PER_BY_ITEM = 25, // 아이템 HP, MP % 회복(지속효과의 추가 컬럼 사용함)
|
|
|
|
EF_POISON = 51, // 중독
|
|
EF_VENOM = 52, // 맹독
|
|
EF_BLOODY = 53, // 출혈
|
|
EF_SERIOUS_BLOODY = 54, // 대량 출혈
|
|
};
|
|
|
|
enum
|
|
{
|
|
EF_MISC = 0,
|
|
EF_PARAMETER_INC = 1,
|
|
EF_PARAMETER_AMP = 2,
|
|
EF_PARAMETER_INC_WHEN_EQUIP_SHIELD = 3,
|
|
EF_PARAMETER_AMP_WHEN_EQUIP_SHIELD = 4,
|
|
EF_PARAMETER_INC_WHEN_EQUIP = 5, // 특정 장비 장착시 파라미터 증가
|
|
EF_PARAMETER_AMP_WHEN_EQUIP = 6, // 특정 장비 장착시 파라미터 증폭
|
|
EF_BLESS_OF_GODDESS = 7,
|
|
EF_PARAMETER_SYNCHRONIZATION = 8, // 두 개 이상의 파라미터 수치를 동기화 시킨다.
|
|
EF_DOUBLE_ATTACK = 21,
|
|
EF_ADDITIONAL_DAMAGE_ON_ATTACK = 22,
|
|
EF_AMP_ADDITIONAL_DAMAGE_ON_ATTACK = 23,
|
|
EF_ADDITIONAL_DAMAGE_ON_SKILL = 24,
|
|
EF_AMP_ADDTIONAL_DAMAGE_ON_SKILL = 25,
|
|
EF_ADD_STATE_ON_ATTACK_OLD = 26,
|
|
EF_ADD_HP_ON_ATTACK = 27,
|
|
EF_AMP_RECEIVE_DAMAGE = 30,
|
|
EF_ADD_HP_MP_ON_CRITICAL = 34,
|
|
EF_HEALING_AMPLIFY = 35,
|
|
EF_ADD_STATE_ON_ATTACK = 36, // 공격 시 일정 확률로 지속 효과를 부가한다.
|
|
EF_ADD_STATE_BY_SELF_ON_ATTACK = 37, // 공격 시 일정 확률로 자신에게 지속 효과를 부가한다.
|
|
EF_ADD_STATE_ON_BEING_ATTACKED = 38, // 피격 시 일정 확률로 지속 효과를 부가한다.
|
|
EF_ADD_STATE_BY_SELF_ON_BEING_ATTACKED = 39, // 피격 시 일정 확률로 자신에게 지속 효과를 부가한다.
|
|
EF_STEAL_WITH_REGEN_STOP = 40, // 공격 시 확률적으로 HP또는 MP 스틸이 적용되지만 HP/MP 리젠을 중지시킬 수 있는 유형
|
|
EF_ABSORB = 41,
|
|
EF_STEAL = 42,
|
|
EF_DAMAGE_REFLECT_PERCENT = 43,
|
|
EF_DAMAGE_REFLECT = 44,
|
|
EF_DAMAGE_REFLECT_WHEN_EQUIP_SHIELD = 45,
|
|
EF_DAMAGE_REDUCE_WITH_RACE_BY_PERCENT = 46,
|
|
EF_DAMAGE_REDUCE_WITH_RACE_BY_VALUE = 47,
|
|
//EF_DAMAGE_REDUCE = 48, // DB에서 제거됨(2차 스킬 리뉴얼)
|
|
EF_MANA_SHIELD = 49,
|
|
EF_HEAL = 61,
|
|
EF_REGEN_ADD = 62,
|
|
EF_HEAL_BY_ITEM = 63,
|
|
EF_HEAL_HPMP_PER = 64, // HP, MP % 회복률
|
|
EF_FORCE_CHIP = 71,
|
|
EF_SOUL_CHIP = 72,
|
|
EF_HEALING_CHIP = 73,
|
|
EF_LUNAR_CHIP = 74, // 71, 72, 73 번 유형 혼합형
|
|
EF_NEUTRALIZE = 81,
|
|
EF_MEZZ = 82,
|
|
EF_PROVOKE = 83, // 도발(걸려있는 동안만 헤이트 작동)
|
|
EF_DECREASE_STATE_EFFECT = 84,
|
|
EF_INC_HATE = 85,
|
|
EF_AMP_HATE = 86,
|
|
EF_SKILL_INTERRUPTION = 87,
|
|
EF_ADD_REGION_STATE = 88,
|
|
EF_MP_COST_INC = 91,
|
|
EF_ADD_PARAMETER_ON_NORMAL_ATTACK = 92,
|
|
EF_ADD_PARAMETER_ON_SKILL = 93,
|
|
EF_KNOCKBACK_ON_DEFAULT_ATTACK = 94,
|
|
EF_REMOVE_GOOD_STATE = 97,
|
|
EF_TRANSFORMATION = 104,
|
|
EF_DEAL_DAMAGE = 105,
|
|
EF_AMPLIFY_CASTING_TIME = 106,
|
|
EF_RESURRECTION = 109,
|
|
EF_DETECT_HIDE = 111,
|
|
EF_CREATURE_PARAMETER_AMP = 112,
|
|
EF_CHANGING_FORM = 114,
|
|
EF_CHANGING_GROUP = 115,
|
|
EF_HUNTING_TRAINING = 116, // 계열별 데미지 증감
|
|
EF_PARAMETER_INC_TO_ACTIVE_SUMMON = 117, // 소환된 소환수의 파라미터 증가
|
|
EF_RIDING = 200,
|
|
EF_AMP_AND_INC_ITEM_CHANCE = 201,
|
|
EF_ADD_SKILL = 203,
|
|
EF_ADD_LUNA_ONCE = 204,
|
|
EF_RESIST_HARMFUL_STATE = 2001, // 해로운 지속효과에 대한 추가 저항
|
|
EF_ADD_REDUCE_DAMAGE_ON_ATTACK = 3021,
|
|
EF_DAMAGE_REDUCE_BY_PERCENT_AND_VALUE = 3031,
|
|
EF_AMP_DAMAGE_BASED_ATTACK_POINT = 3062,
|
|
EF_INC_DOT_BASED_PARAM = 3071,
|
|
EF_IMMORTALIZE = 3111,
|
|
EF_INFINITE_SUMMON_TIME = 3121,
|
|
EF_ADD_STATE_BY_SELF_ON_KILL = 3201, // 대상이 죽었을 경우 일정 확률로 자신에게 지속 효과를 부가, 패시브.
|
|
EF_ADD_STATE_ON_CRITICAL_ATTACK = 3202, // 크리티컬 공격 시 일정 확률로 지속 효과를 부가, 패시브.
|
|
EF_ADD_STATE_BY_SELF_ON_CRITICAL_ATTACK = 3203, // 크리티컬 공격 시 일정 확률로 자신에게 지속 효과를 부가, 패시브.
|
|
EF_ADD_STATE_ON_BEING_CRITICAL_ATTACKED = 3204, // 크리티컬 피격 시 일정 확률로 지속 효과를 부가, 패시브.
|
|
EF_ADD_STATE_BY_SELF_ON_BEING_CRITICAL_ATTACKED = 3205, // 크리티컬 피격 시 일정 확률로 자신에게 지속 효과를 부가, 패시브.
|
|
EF_ADD_STATE_ON_AVOID = 3206, // 회피 시 일정 확률로 지속 효과를 부가, 패시브.
|
|
EF_ADD_STATE_BY_SELF_ON_AVOID = 3207, // 회피 시 일정 확률로 자신에게 지속 효과를 부가, 패시브.
|
|
EF_ADD_STATE_ON_BLOCK = 3208, // 블럭 시 일정 확률로 지속 효과를 부가, 패시브.
|
|
EF_ADD_STATE_BY_SELF_ON_BLOCK = 3209, // 블럭 시 일정 확률로 자신에게 지속 효과를 부가, 패시브.
|
|
EF_ADD_STATE_ON_PERFECT_BLOCK = 3210, // 퍼펙트 블럭 시 일정 확률로 지속 효과를 부가, 패시브.
|
|
EF_ADD_STATE_BY_SELF_ON_PERFECT_BLOCK = 3211, // 퍼펙트 블럭 시 일정 확률로 자신에게 지속 효과를 부가, 패시브.
|
|
EF_INCREASE_ENERGY_UNCONSUMPTION_RATE = 3301, // 일정 확률로 기공을 소모하지 않는다.
|
|
EF_ADD_STATE_BY_SELF_ON_DEAD = 3311, // 사망 시 일정 확률로 자신에게 지속 효과를 부가.
|
|
EF_AUTO_RESURRECTION_AFTER_REMOVE_STATE = 3321, // 해당 지속효과가 제거될 때 자동 부활
|
|
EF_ADD_STATE_BY_EQUIP_ITEM = 10001, // 아이템을 장착함으로써 지속 효과를 받음 / 아이템 효과 전용
|
|
};
|
|
|
|
enum
|
|
{
|
|
FLAG_STR = ( 1 << 0 ),
|
|
FLAG_VIT = ( 1 << 1 ),
|
|
FLAG_AGI = ( 1 << 2 ),
|
|
FLAG_DEX = ( 1 << 3 ),
|
|
FLAG_INT = ( 1 << 4 ),
|
|
FLAG_MEN = ( 1 << 5 ),
|
|
FLAG_LUK = ( 1 << 6 ),
|
|
FLAG_ATTACK_POINT = ( 1 << 7 ),
|
|
FLAG_MAGIC_POINT = ( 1 << 8 ),
|
|
FLAG_DEFENCE = ( 1 << 9 ),
|
|
FLAG_MAGIC_DEFENCE = ( 1 << 10 ),
|
|
FLAG_ATTACK_SPEED = ( 1 << 11 ),
|
|
FLAG_CAST_SPEED = ( 1 << 12 ),
|
|
FLAG_MOVE_SPEED = ( 1 << 13 ),
|
|
FLAG_ACCURACY = ( 1 << 14 ),
|
|
FLAG_MAGIC_ACCURACY = ( 1 << 15 ),
|
|
FLAG_CRITICAL = ( 1 << 16 ),
|
|
FLAG_BLOCK = ( 1 << 17 ),
|
|
FLAG_BLOCK_DEFENCE = ( 1 << 18 ),
|
|
FLAG_AVOID = ( 1 << 19 ),
|
|
FLAG_MAGIC_RESISTANCE = ( 1 << 20 ),
|
|
FLAG_MAX_HP = ( 1 << 21 ),
|
|
FLAG_MAX_MP = ( 1 << 22 ),
|
|
FLAG_MAX_SP = ( 1 << 23 ),
|
|
FLAG_HP_REGEN_ADD = ( 1 << 24 ),
|
|
FLAG_MP_REGEN_ADD = ( 1 << 25 ),
|
|
FLAG_SP_REGEN_ADD = ( 1 << 26 ),
|
|
FLAG_HP_REGEN_RATIO = ( 1 << 27 ),
|
|
FLAG_MP_REGEN_RATIO = ( 1 << 28 ),
|
|
FLAG_CRITICAL_DAMAGE_BACKUP = ( 1 << 29 ),
|
|
// 빈자리
|
|
FLAG_MAX_WEIGHT = ( 1 << 30 ),
|
|
FLAG_DAMAGE_REDUCE = ( 1 << 31 )
|
|
};
|
|
|
|
enum
|
|
{
|
|
FLAG_ET_NONE_RESIST = ( 1 << 0 ),
|
|
FLAG_ET_FIRE_RESIST = ( 1 << 1 ),
|
|
FLAG_ET_WATER_RESIST = ( 1 << 2 ),
|
|
FLAG_ET_WIND_RESIST = ( 1 << 3 ),
|
|
FLAG_ET_EARTH_RESIST = ( 1 << 4 ),
|
|
FLAG_ET_LIGHT_RESIST = ( 1 << 5 ),
|
|
FLAG_ET_DARK_RESIST = ( 1 << 6 ),
|
|
FLAG_ET_ATTACK_RANGE = ( 1 << 8 ),
|
|
FLAG_ET_PERFECT_BLOCK = ( 1 << 9 ),
|
|
FLAG_ET_IGNORE_PHYSICAL_DEFENCE = ( 1 << 10 ),
|
|
FLAG_ET_IGNORE_MAGICAL_DEFENCE = ( 1 << 11 ),
|
|
FLAG_ET_PHYSICAL_PENETRATION = ( 1 << 12 ),
|
|
FLAG_ET_MAGICAL_PENETRATION = ( 1 << 13 ),
|
|
FLAG_ET_NONE_DAMAGE = ( 1 << 14 ),
|
|
FLAG_ET_FIRE_DAMAGE = ( 1 << 15 ),
|
|
FLAG_ET_WATER_DAMAGE = ( 1 << 16 ),
|
|
FLAG_ET_WIND_DAMAGE = ( 1 << 17 ),
|
|
FLAG_ET_EARTH_DAMAGE = ( 1 << 18 ),
|
|
FLAG_ET_LIGHT_DAMAGE = ( 1 << 19 ),
|
|
FLAG_ET_DARK_DAMAGE = ( 1 << 20 ),
|
|
FLAG_ET_NONE_ADDITIONAL_DAMAGE = ( 1 << 21 ),
|
|
FLAG_ET_FIRE_ADDITIONAL_DAMAGE = ( 1 << 22 ),
|
|
FLAG_ET_WATER_ADDITIONAL_DAMAGE = ( 1 << 23 ),
|
|
FLAG_ET_WIND_ADDITIONAL_DAMAGE = ( 1 << 24 ),
|
|
FLAG_ET_EARTH_ADDITIONAL_DAMAGE = ( 1 << 25 ),
|
|
FLAG_ET_LIGHT_ADDITIONAL_DAMAGE = ( 1 << 26 ),
|
|
FLAG_ET_DARK_ADDITIONAL_DAMAGE = ( 1 << 27 ),
|
|
FLAG_CRITICAL_DAMAGE = ( 1 << 28 ),
|
|
FLAG_HP_REGEN_STOP = ( 1 << 29 ),
|
|
FLAG_MP_REGEN_STOP = ( 1 << 30 ),
|
|
};
|
|
|
|
|
|
|
|
enum
|
|
{
|
|
INC_ALL_SKILL = 1007,
|
|
INC_ALL_SKILL1 = 1008,
|
|
INC_ALL_SKILL2 = 1009,
|
|
INC_ALL_SKILL3 = 1010,
|
|
INC_COOLTIME_SPEED = 10000,
|
|
INC_CASTING_SPEED = 10001,
|
|
INC_DOUBLE_ATTACK = 10002,
|
|
RESIST_NEGATIVE = 10003,
|
|
INC_SUMMON_FCM = 10004,
|
|
INC_BELT_ENHANCE = 10005,
|
|
INC_HP_MP_ADD = 6291456,
|
|
};
|
|
|
|
enum
|
|
{
|
|
FLAG_EQUIP_ONEHAND_SWORD = ( 1 << 0 ),
|
|
FLAG_EQUIP_TWOHAND_SWORD = ( 1 << 1 ),
|
|
FLAG_EQUIP_DAGGER = ( 1 << 2 ),
|
|
FLAG_EQUIP_TWOHAND_SPEAR = ( 1 << 3 ),
|
|
FLAG_EQUIP_TWOHAND_AXE = ( 1 << 4 ),
|
|
FLAG_EQUIP_ONEHAND_MACE = ( 1 << 5 ),
|
|
FLAG_EQUIP_TWOHAND_MACE = ( 1 << 6 ),
|
|
FLAG_EQUIP_HEAVY_BOW = ( 1 << 7 ),
|
|
FLAG_EQUIP_LIGHT_BOW = ( 1 << 8 ),
|
|
FLAG_EQUIP_CROSSBOW = ( 1 << 9 ),
|
|
FLAG_EQUIP_ONEHAND_STAFF = ( 1 << 10 ),
|
|
FLAG_EQUIP_TWOHAND_STAFF = ( 1 << 11 ),
|
|
FLAG_EQUIP_DOUBLE_SWORD = ( 1 << 12 ),
|
|
FLAG_EQUIP_DOUBLE_DAGGER = ( 1 << 13 ),
|
|
};
|
|
|
|
enum
|
|
{
|
|
NormalAttack = 1 << 0,
|
|
PhysicalSkill = 1 << 1,
|
|
MagicalSkill = 1 << 2,
|
|
Helpful = 1 << 3,
|
|
Harmful = 1 << 4,
|
|
};
|
|
|
|
enum
|
|
{
|
|
FLAG_ASURA = 1 << 0,
|
|
FLAG_DEVA = 1 << 1,
|
|
FLAG_GAIA = 1 << 2,
|
|
FLAG_ALL = 1 << 3,
|
|
FLAG_CREATURE = 1 << 4,
|
|
};
|
|
|
|
enum
|
|
{
|
|
FLAG_HELPFUL = 1 << 0,
|
|
FLAG_HARMFUL = 1 << 1,
|
|
FLAG_ACTIVE = 1 << 2,
|
|
FLAG_PASSIVE = 1 << 3,
|
|
FLAG_PHYSICAL = 1 << 4,
|
|
FLAG_MAGICAL = 1 << 5,
|
|
};
|
|
|
|
enum
|
|
{
|
|
COMMON_RANDOM_STATE = 0,
|
|
EACH_RANDOM_STATE = 1,
|
|
};
|
|
|
|
// 실시간으로 지속효과 부여할 대상 설정을 위한 상수
|
|
// 효과 대상은 범위 스킬과 공용으로 사용되는 값이기 때문에 단일 개체를 대상으로 하는 유형을 추가하기에는 적합하지 않아
|
|
// 효과 대상 자체를 사용하지 않는 별도의 상수를 추가
|
|
enum
|
|
{
|
|
USE_TARGET_REGION_TYPE = 0, // < 실시간 지속효과 부여 > : 분산 타입, 한계 개체 수, 효과대상을 참조하여 범위 지속효과 부여
|
|
USE_TARGET_OWNER = 1, // < 실시간 지속효과 부여 > : 실시간 지속효과 부여 유형을 가진 스스로에게만 지속효과 부여
|
|
};
|
|
|
|
enum
|
|
{
|
|
UNUSED_IN_DB = 0,
|
|
USED_IN_DB = 1,
|
|
USED_IN_DB_BY_DEAD = 2,
|
|
NOT_IN_DB = -1,
|
|
};
|
|
|
|
StructState( StateCode code, int uid, AR_HANDLE caster, unsigned short level, AR_TIME start_time, AR_TIME end_time, int base_damage, bool bIsAura, int nStateValue, const char * szStateValue, const bool bByEvent, int nDBEnable, const bool bHideTime = false, const bool bInvisible = false );
|
|
StructState();
|
|
|
|
virtual ~StructState()
|
|
{
|
|
}
|
|
|
|
void Save( struct StructCreature * pCreature, const int nEnable );
|
|
void SaveByDead( struct StructCreature * pCreature );
|
|
void Expire( struct StructCreature * pCreature );
|
|
|
|
inline bool IsNeedDisplay() const
|
|
{
|
|
return true;
|
|
}
|
|
|
|
bool IsAura() const { return m_bAura; }
|
|
bool IsHolded() const { return !!GetRemainDuration(); }
|
|
void HoldRemainDuration();
|
|
void ReleaseRemainDuration();
|
|
|
|
int GetStateValue() const { return m_nStateValue; }
|
|
const char * GetStateStringValue() const { return m_szStateValue; }
|
|
|
|
bool AddState( AR_HANDLE caster, unsigned short level, AR_TIME start_time, AR_TIME end_time, int base_damage, bool bIsAura );
|
|
inline int GetUID() const { return m_nUID; }
|
|
inline void SetUID( int uid ) { m_nUID = uid; }
|
|
inline void SetLevel( unsigned short level ) { m_nLevel = level; }
|
|
inline void SetStartTime( AR_TIME t ) { m_nStartTime = t; }
|
|
inline void SetEndTime( AR_TIME t ) { m_nEndTime = t; }
|
|
inline AR_TIME GetFullDuration() const { assert( m_nEndTime != (AR_TIME)-1 ); return m_nLostDurationByLoading + ( m_nEndTime - m_nStartTime ); }
|
|
inline void SetLastProcessedTime( AR_TIME t ) { m_nLastProcessedTime = t; }
|
|
inline void SetEnable( int nEnable ) { m_nEnable = nEnable; }
|
|
inline void SetDBEnable( int nDBEnable ) { m_nDBEnable = nDBEnable; }
|
|
inline void SetLastSavedTime( AR_TIME t ) { m_nLastSavedTime = t; }
|
|
inline unsigned short GetLevel() const { return m_nLevel; }
|
|
inline StateCode GetCode() const { return m_nCode; }
|
|
inline AR_TIME GetStartTime() const { return m_nStartTime; }
|
|
inline AR_TIME GetEndTime() const { return m_nEndTime; }
|
|
inline AR_TIME GetRemainDuration() const { return m_nRemainDuration; }
|
|
inline AR_TIME GetLastProcessedTime() const { return m_nLastProcessedTime; }
|
|
inline AR_HANDLE GetCaster() const { return m_hCaster; }
|
|
inline int GetEnable() const { return m_nEnable; }
|
|
inline int GetDBEnable() const { return m_nDBEnable; }
|
|
inline AR_TIME GetLastSavedTime() const { return m_nLastSavedTime; }
|
|
inline bool IsSavable() const { return m_nUID > 0; }
|
|
inline bool IsReusable() const { return m_nDBEnable == UNUSED_IN_DB; }
|
|
inline bool IsInDB() const { return m_nDBEnable != NOT_IN_DB; }
|
|
|
|
// 신규 추가 필드 관련(데미지 관련)
|
|
inline int GetBaseDamage() const { return m_nBaseDamage; }
|
|
inline int GetBaseEffectID() const { return m_pInfo->base_effect_id; }
|
|
inline AR_TIME GetFireInterval() const { return GameContent::GetStateInfo( static_cast<int>(m_nCode) )->fire_interval * 100; }
|
|
inline int GetElementalType() const { return m_pInfo->elemental_type; }
|
|
inline c_fixed10 GetAmplifyBase() const { return m_pInfo->amplify_base; }
|
|
inline c_fixed10 GetAmplifyPerSkillLevel() const { return m_pInfo->amplify_per_skl; }
|
|
inline int GetAddDamageBase() const { return m_pInfo->add_damage_base; }
|
|
inline int GetAddDamagePerSkillLevel() const { return m_pInfo->add_damage_per_skl; }
|
|
|
|
int GetEffectType() const;
|
|
c_fixed10 GetValue( int idx ) const;
|
|
bool IsHarmful() const;
|
|
bool ClearExpiredState( AR_TIME t );
|
|
int GetStateGroup() const;
|
|
bool IsDuplicatedGroup( int nGroupID ) const;
|
|
|
|
void SetState( StateCode code, int uid, AR_HANDLE caster, unsigned short level, AR_TIME duration, AR_TIME remain_time, AR_TIME last_fire_time, int base_damage, int state_value, const char * szStateValue, int nEnable );
|
|
int GetTimeType() const;
|
|
|
|
inline void AddTotalDamage( int damage ) { m_nTotalDamage += damage; }
|
|
inline int GetTotalDamage() const { return m_nTotalDamage; }
|
|
|
|
inline const bool IsLogRequiredOnExpiration() const { return m_pInfo->is_log_required_on_expiration; }
|
|
|
|
inline const bool IsByEvent() const { return m_bByEvent; }
|
|
|
|
protected:
|
|
|
|
// friend struct StatePool;
|
|
|
|
void init( int uid, int code );
|
|
|
|
int m_nUID;
|
|
StateCode m_nCode;
|
|
unsigned short m_nLevel;
|
|
int m_nBaseDamage;
|
|
AR_HANDLE m_hCaster;
|
|
AR_TIME m_nStartTime;
|
|
AR_TIME m_nEndTime;
|
|
AR_TIME m_nLostDurationByLoading;
|
|
AR_TIME m_nRemainDuration; // 일반적으로는 사용하지 않으며 지속효과 일시정지(Hold/Release) 기능에만 사용
|
|
AR_TIME m_nLastProcessedTime;
|
|
const struct StateInfo* m_pInfo;
|
|
int m_nTotalDamage;
|
|
bool m_bAura;
|
|
int m_nStateValue;
|
|
char m_szStateValue[33];
|
|
int m_nEnable;
|
|
|
|
int m_nDBEnable;
|
|
AR_TIME m_nLastSavedTime;
|
|
bool m_bByEvent; // 이벤트에 의해 걸린 지속효과(다른 모든 동일 그룹, 코드의 지속효과를 레벨/잔여시간과 관계없이 덮어 씀. 일반적인 RemoveState로 삭제되지도 않음.)
|
|
}; |