forked from metin2/server
fix game header encoding
This commit is contained in:
parent
0101618d89
commit
82317e6c4d
|
@ -16,23 +16,23 @@ public:
|
|||
bool ReadDragonSoulTableFile(const char * c_pszFileName);
|
||||
|
||||
void GetDragonSoulInfo(DWORD dwVnum, OUT BYTE& bType, OUT BYTE& bGrade, OUT BYTE& bStep, OUT BYTE& bRefine) const;
|
||||
// fixme : titempos로
|
||||
// fixme : titempos로
|
||||
WORD GetBasePosition(const LPITEM pItem) const;
|
||||
bool IsValidCellForThisItem(const LPITEM pItem, const TItemPos& Cell) const;
|
||||
int GetDuration(const LPITEM pItem) const;
|
||||
|
||||
// 용혼석을 받아서 특정 용심을 추출하는 함수
|
||||
// 용혼석을 받아서 특정 용심을 추출하는 함수
|
||||
bool ExtractDragonHeart(LPCHARACTER ch, LPITEM pItem, LPITEM pExtractor = NULL);
|
||||
|
||||
// 특정 용혼석(pItem)을 장비창에서 제거할 때에 성공 여부를 결정하고,
|
||||
// 실패시 부산물을 주는 함수.(부산물은 dragon_soul_table.txt에 정의)
|
||||
// DestCell에 invalid한 값을 넣으면 성공 시, 용혼석을 빈 공간에 자동 추가.
|
||||
// 실패 시, 용혼석(pItem)은 delete됨.
|
||||
// 추출아이템이 있다면 추출 성공 확률이 pExtractor->GetValue(0)%만큼 증가함.
|
||||
// 부산물은 언제나 자동 추가.
|
||||
// 특정 용혼석(pItem)을 장비창에서 제거할 때에 성공 여부를 결정하고,
|
||||
// 실패시 부산물을 주는 함수.(부산물은 dragon_soul_table.txt에 정의)
|
||||
// DestCell에 invalid한 값을 넣으면 성공 시, 용혼석을 빈 공간에 자동 추가.
|
||||
// 실패 시, 용혼석(pItem)은 delete됨.
|
||||
// 추출아이템이 있다면 추출 성공 확률이 pExtractor->GetValue(0)%만큼 증가함.
|
||||
// 부산물은 언제나 자동 추가.
|
||||
bool PullOut(LPCHARACTER ch, TItemPos DestCell, IN OUT LPITEM& pItem, LPITEM pExtractor = NULL);
|
||||
|
||||
// 용혼석 업그레이드 함수
|
||||
// 용혼석 업그레이드 함수
|
||||
bool DoRefineGrade(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_REFINE_GRID_SIZE]);
|
||||
bool DoRefineStep(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_REFINE_GRID_SIZE]);
|
||||
bool DoRefineStrength(LPCHARACTER ch, TItemPos (&aItemPoses)[DRAGON_SOUL_REFINE_GRID_SIZE]);
|
||||
|
@ -47,7 +47,7 @@ public:
|
|||
private:
|
||||
void SendRefineResultPacket(LPCHARACTER ch, BYTE bSubHeader, const TItemPos& pos);
|
||||
|
||||
// 캐릭터의 용혼석 덱을 살펴보고, 활성화 된 용혼석이 없다면, 캐릭터의 용혼석 활성 상태를 off 시키는 함수.
|
||||
// 캐릭터의 용혼석 덱을 살펴보고, 활성화 된 용혼석이 없다면, 캐릭터의 용혼석 활성 상태를 off 시키는 함수.
|
||||
void RefreshDragonSoulState(LPCHARACTER ch);
|
||||
|
||||
DWORD MakeDragonSoulVnum(BYTE bType, BYTE grade, BYTE step, BYTE refine);
|
||||
|
|
|
@ -16,7 +16,7 @@ struct SGuildMark
|
|||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
Pixel m_apxBuf[SIZE]; // 실제 이미지
|
||||
Pixel m_apxBuf[SIZE]; // 실제 이미지
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void Clear();
|
||||
|
@ -38,11 +38,11 @@ struct SGuildMarkBlock
|
|||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
Pixel m_apxBuf[SIZE]; // 실제 이미지
|
||||
Pixel m_apxBuf[SIZE]; // 실제 이미지
|
||||
|
||||
BYTE m_abCompBuf[MAX_COMP_SIZE]; // 압축된 데이터
|
||||
lzo_uint m_sizeCompBuf; // 압축된 크기
|
||||
DWORD m_crc; // 압축된 데이터의 CRC
|
||||
BYTE m_abCompBuf[MAX_COMP_SIZE]; // 압축된 데이터
|
||||
lzo_uint m_sizeCompBuf; // 압축된 크기
|
||||
DWORD m_crc; // 압축된 데이터의 CRC
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
DWORD GetCRC() const;
|
||||
|
@ -87,9 +87,9 @@ class CGuildMarkImage
|
|||
|
||||
bool SaveMark(DWORD posMark, BYTE * pbMarkImage);
|
||||
bool DeleteMark(DWORD posMark);
|
||||
bool SaveBlockFromCompressedData(DWORD posBlock, const BYTE * pbComp, DWORD dwCompSize); // 서버 -> 클라이언트
|
||||
bool SaveBlockFromCompressedData(DWORD posBlock, const BYTE * pbComp, DWORD dwCompSize); // 서버 -> 클라이언트
|
||||
|
||||
DWORD GetEmptyPosition(); // 빈 마크 위치를 얻는다.
|
||||
DWORD GetEmptyPosition(); // 빈 마크 위치를 얻는다.
|
||||
|
||||
void GetBlockCRCList(DWORD * crcList);
|
||||
void GetDiffBlocks(const DWORD * crcList, std::map<BYTE, const SGuildMarkBlock *> & mapDiffBlocks);
|
||||
|
|
|
@ -32,11 +32,11 @@ class CGuildMarkManager : public singleton<CGuildMarkManager>
|
|||
//
|
||||
void SetMarkPathPrefix(const char * prefix);
|
||||
|
||||
bool LoadMarkIndex(); // 마크 인덱스 불러오기 (서버에서만 사용)
|
||||
bool SaveMarkIndex(); // 마크 인덱스 저장하기
|
||||
bool LoadMarkIndex(); // 마크 인덱스 불러오기 (서버에서만 사용)
|
||||
bool SaveMarkIndex(); // 마크 인덱스 저장하기
|
||||
|
||||
void LoadMarkImages(); // 모든 마크 이미지를 불러오기
|
||||
void SaveMarkImage(DWORD imgIdx); // 마크 이미지 저장
|
||||
void LoadMarkImages(); // 모든 마크 이미지를 불러오기
|
||||
void SaveMarkImage(DWORD imgIdx); // 마크 이미지 저장
|
||||
|
||||
bool GetMarkImageFilename(DWORD imgIdx, std::string & path) const;
|
||||
bool AddMarkIDByGuildID(DWORD guildID, DWORD markID);
|
||||
|
|
|
@ -10,10 +10,10 @@ struct tag_Quiz
|
|||
|
||||
enum OXEventStatus
|
||||
{
|
||||
OXEVENT_FINISH = 0, // OX이벤트가 완전히 끝난 상태
|
||||
OXEVENT_OPEN = 1, // OX이벤트가 시작됨. 을두지(20012)를 통해서 입장가능
|
||||
OXEVENT_CLOSE = 2, // OX이벤트의 참가가 끝남. 을두지(20012)를 통한 입장이 차단됨
|
||||
OXEVENT_QUIZ = 3, // 퀴즈를 출제함.
|
||||
OXEVENT_FINISH = 0, // OX이벤트가 완전히 끝난 상태
|
||||
OXEVENT_OPEN = 1, // OX이벤트가 시작됨. 을두지(20012)를 통해서 입장가능
|
||||
OXEVENT_CLOSE = 2, // OX이벤트의 참가가 끝남. 을두지(20012)를 통한 입장이 차단됨
|
||||
OXEVENT_QUIZ = 3, // 퀴즈를 출제함.
|
||||
|
||||
OXEVENT_ERR = 0xff
|
||||
};
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
class CHARACTER;
|
||||
|
||||
// TODO: 펫으로서의 능력치? 라던가 친밀도, 배고픔 기타등등... 수치
|
||||
// TODO: 펫으로서의 능력치? 라던가 친밀도, 배고픔 기타등등... 수치
|
||||
struct SPetAbility
|
||||
{
|
||||
};
|
||||
|
@ -34,8 +34,8 @@ protected:
|
|||
virtual bool Update(DWORD deltaTime);
|
||||
|
||||
protected:
|
||||
virtual bool _UpdateFollowAI(); ///< 주인을 따라다니는 AI 처리
|
||||
virtual bool _UpdatAloneActionAI(float fMinDist, float fMaxDist); ///< 주인 근처에서 혼자 노는 AI 처리
|
||||
virtual bool _UpdateFollowAI(); ///< 주인을 따라다니는 AI 처리
|
||||
virtual bool _UpdatAloneActionAI(float fMinDist, float fMaxDist); ///< 주인 근처에서 혼자 노는 AI 처리
|
||||
|
||||
/// @TODO
|
||||
//virtual bool _UpdateCombatAI();
|
||||
|
@ -62,13 +62,13 @@ public:
|
|||
bool IsSummoned() const { return 0 != m_pkChar; }
|
||||
void SetSummonItem (LPITEM pItem);
|
||||
DWORD GetSummonItemVID () { return m_dwSummonItemVID; }
|
||||
// 버프 주는 함수와 거두는 함수.
|
||||
// 이게 좀 괴랄한게, 서버가 ㅄ라서,
|
||||
// POINT_MOV_SPEED, POINT_ATT_SPEED, POINT_CAST_SPEED는 PointChange()란 함수만 써서 변경해 봐야 소용이 없는게,
|
||||
// PointChange() 이후에 어디선가 ComputePoints()를 하면 싹다 초기화되고,
|
||||
// 더 웃긴건, ComputePoints()를 부르지 않으면 클라의 POINT는 전혀 변하지 않는다는 거다.
|
||||
// 그래서 버프를 주는 것은 ComputePoints() 내부에서 petsystem->RefreshBuff()를 부르도록 하였고,
|
||||
// 버프를 빼는 것은 ClearBuff()를 부르고, ComputePoints를 하는 것으로 한다.
|
||||
// 버프 주는 함수와 거두는 함수.
|
||||
// 이게 좀 괴랄한게, 서버가 ㅄ라서,
|
||||
// POINT_MOV_SPEED, POINT_ATT_SPEED, POINT_CAST_SPEED는 PointChange()란 함수만 써서 변경해 봐야 소용이 없는게,
|
||||
// PointChange() 이후에 어디선가 ComputePoints()를 하면 싹다 초기화되고,
|
||||
// 더 웃긴건, ComputePoints()를 부르지 않으면 클라의 POINT는 전혀 변하지 않는다는 거다.
|
||||
// 그래서 버프를 주는 것은 ComputePoints() 내부에서 petsystem->RefreshBuff()를 부르도록 하였고,
|
||||
// 버프를 빼는 것은 ClearBuff()를 부르고, ComputePoints를 하는 것으로 한다.
|
||||
void GiveBuff();
|
||||
void ClearBuff();
|
||||
|
||||
|
@ -87,7 +87,7 @@ private:
|
|||
LPCHARACTER m_pkChar; // Instance of pet(CHARACTER)
|
||||
LPCHARACTER m_pkOwner;
|
||||
|
||||
// SPetAbility m_petAbility; // 능력치
|
||||
// SPetAbility m_petAbility; // 능력치
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -95,7 +95,7 @@ private:
|
|||
class CPetSystem
|
||||
{
|
||||
public:
|
||||
typedef std::unordered_map<DWORD, CPetActor*> TPetActorMap; /// <VNUM, PetActor> map. (한 캐릭터가 같은 vnum의 펫을 여러개 가질 일이 있을까..??)
|
||||
typedef std::unordered_map<DWORD, CPetActor*> TPetActorMap; /// <VNUM, PetActor> map. (한 캐릭터가 같은 vnum의 펫을 여러개 가질 일이 있을까..??)
|
||||
|
||||
public:
|
||||
CPetSystem(LPCHARACTER owner);
|
||||
|
@ -107,7 +107,7 @@ public:
|
|||
bool Update(DWORD deltaTime);
|
||||
void Destroy();
|
||||
|
||||
size_t CountSummoned() const; ///< 현재 소환된(실체화 된 캐릭터가 있는) 펫의 개수
|
||||
size_t CountSummoned() const; ///< 현재 소환된(실체화 된 캐릭터가 있는) 펫의 개수
|
||||
|
||||
public:
|
||||
void SetUpdatePeriod(DWORD ms);
|
||||
|
@ -117,7 +117,7 @@ public:
|
|||
void Unsummon(DWORD mobVnum, bool bDeleteFromList = false);
|
||||
void Unsummon(CPetActor* petActor, bool bDeleteFromList = false);
|
||||
|
||||
// TODO: 진짜 펫 시스템이 들어갈 때 구현. (캐릭터가 보유한 펫의 정보를 추가할 때 라던가...)
|
||||
// TODO: 진짜 펫 시스템이 들어갈 때 구현. (캐릭터가 보유한 펫의 정보를 추가할 때 라던가...)
|
||||
CPetActor* AddPet(DWORD mobVnum, const char* petName, const SPetAbility& ability, DWORD options = CPetActor::EPetOption_Followable | CPetActor::EPetOption_Summonable | CPetActor::EPetOption_Combatable);
|
||||
|
||||
void DeletePet(DWORD mobVnum);
|
||||
|
@ -126,8 +126,8 @@ public:
|
|||
|
||||
private:
|
||||
TPetActorMap m_petActorMap;
|
||||
LPCHARACTER m_pkOwner; ///< 펫 시스템의 Owner
|
||||
DWORD m_dwUpdatePeriod; ///< 업데이트 주기 (ms단위)
|
||||
LPCHARACTER m_pkOwner; ///< 펫 시스템의 Owner
|
||||
DWORD m_dwUpdatePeriod; ///< 업데이트 주기 (ms단위)
|
||||
DWORD m_dwLastUpdateTime;
|
||||
LPEVENT m_pkPetSystemUpdateEvent;
|
||||
};
|
||||
|
|
|
@ -4,11 +4,11 @@
|
|||
#include <common/length.h>
|
||||
#include <list>
|
||||
|
||||
// castle.cpp 에 있는 것을 복붙 하였다
|
||||
#define EMPIRE_NONE 0 // 아무국가 아님
|
||||
#define EMPIRE_RED 1 // 신수
|
||||
#define EMPIRE_YELLOW 2 // 천조
|
||||
#define EMPIRE_BLUE 3 // 진노
|
||||
// castle.cpp 에 있는 것을 복붙 하였다
|
||||
#define EMPIRE_NONE 0 // 아무국가 아님
|
||||
#define EMPIRE_RED 1 // 신수
|
||||
#define EMPIRE_YELLOW 2 // 천조
|
||||
#define EMPIRE_BLUE 3 // 진노
|
||||
|
||||
class HME
|
||||
{
|
||||
|
|
|
@ -12,17 +12,17 @@
|
|||
|
||||
/**
|
||||
* @class TrafficProfiler
|
||||
* @brief Network I/O traffic 을 패킷 단위로 측정하는 profiler.
|
||||
* @brief Network I/O traffic 을 패킷 단위로 측정하는 profiler.
|
||||
* @author Bang2ni
|
||||
* @version 05/07/07 Bang2ni - First release.
|
||||
*
|
||||
* 시간대 별로 Network I/O 의 traffic 을 패킷 단위로 측정하고, Text file 형태로 보고서를 작성한다.
|
||||
* 시간대 별로 Network I/O 의 traffic 을 패킷 단위로 측정하고, Text file 형태로 보고서를 작성한다.
|
||||
*/
|
||||
class TrafficProfiler : public singleton< TrafficProfiler >
|
||||
{
|
||||
public:
|
||||
|
||||
/// I/O 방향
|
||||
/// I/O 방향
|
||||
enum IODirection {
|
||||
IODIR_INPUT = 0, ///< Input
|
||||
IODIR_OUTPUT, ///< Output
|
||||
|
@ -37,25 +37,25 @@ class TrafficProfiler : public singleton< TrafficProfiler >
|
|||
/// Destructor
|
||||
~TrafficProfiler( void );
|
||||
|
||||
/// Profiling 에 필요한 초기화를 한다.
|
||||
/// Profiling 에 필요한 초기화를 한다.
|
||||
/**
|
||||
* @param [in] dwFlushCycle Flush 주기. 초 단위이다.
|
||||
* @param [in] pszLogFileName Profiling log file 의 이름
|
||||
* @return false 일 경우 profiling log file 을 open 하지 못했다.
|
||||
* @param [in] dwFlushCycle Flush 주기. 초 단위이다.
|
||||
* @param [in] pszLogFileName Profiling log file 의 이름
|
||||
* @return false 일 경우 profiling log file 을 open 하지 못했다.
|
||||
*
|
||||
* profiling log file 을 open(생성) 한다.
|
||||
* profiling log file 을 open(생성) 한다.
|
||||
*/
|
||||
bool Initialize( DWORD dwFlushCycle, const char* pszLogFileName );
|
||||
|
||||
/// Profiling 을 위해 전송됐거나 전송 할 Packet 을 Report 한다.
|
||||
/// Profiling 을 위해 전송됐거나 전송 할 Packet 을 Report 한다.
|
||||
/**
|
||||
* @param [in] dir Profiling 할 Packet 의 방향
|
||||
* @param [in] byHeader Packet 헤더
|
||||
* @param [in] dwSize Packet 의 총 size
|
||||
* @return Initialize 되지 않았다면 false 를 반환한다.
|
||||
* @param [in] dir Profiling 할 Packet 의 방향
|
||||
* @param [in] byHeader Packet 헤더
|
||||
* @param [in] dwSize Packet 의 총 size
|
||||
* @return Initialize 되지 않았다면 false 를 반환한다.
|
||||
*
|
||||
* Packet 에 해당하는 size 를 누적시킨다.
|
||||
* Initialize 이후나 최근 Flush 된 이후에 Flush 주기 만큼 시간이 흐른 후 호출된다면 Report 이후 Flush 한다.
|
||||
* Packet 에 해당하는 size 를 누적시킨다.
|
||||
* Initialize 이후나 최근 Flush 된 이후에 Flush 주기 만큼 시간이 흐른 후 호출된다면 Report 이후 Flush 한다.
|
||||
*/
|
||||
bool Report( IODirection dir, BYTE byHeader, DWORD dwSize )
|
||||
{
|
||||
|
@ -65,22 +65,22 @@ class TrafficProfiler : public singleton< TrafficProfiler >
|
|||
return true;
|
||||
}
|
||||
|
||||
/// 현재까지 Report 된 내용을 파일에 쓴다.
|
||||
/// 현재까지 Report 된 내용을 파일에 쓴다.
|
||||
/**
|
||||
* @return Initialize 되지 않았다.
|
||||
* @return Initialize 되지 않았다.
|
||||
*/
|
||||
bool Flush( void );
|
||||
|
||||
private:
|
||||
|
||||
/// Profling 에 관련된 variables 를 초기화 한다.
|
||||
/// Profling 에 관련된 variables 를 초기화 한다.
|
||||
void InitializeProfiling( void );
|
||||
|
||||
/// Report 된 Packet 의 traffic 를 계산한다.
|
||||
/// Report 된 Packet 의 traffic 를 계산한다.
|
||||
/**
|
||||
* @param [in] dir Profiling 할 Packet 의 방향
|
||||
* @param [in] byHeader Packet 헤더
|
||||
* @param [in] dwSize Packet 의 총 size
|
||||
* @param [in] dir Profiling 할 Packet 의 방향
|
||||
* @param [in] byHeader Packet 헤더
|
||||
* @param [in] dwSize Packet 의 총 size
|
||||
*/
|
||||
void ComputeTraffic( IODirection dir, BYTE byHeader, DWORD dwSize )
|
||||
{
|
||||
|
@ -96,8 +96,8 @@ class TrafficProfiler : public singleton< TrafficProfiler >
|
|||
|
||||
/// Traffic info type.
|
||||
/**
|
||||
* first: 누적된 총 size
|
||||
* second: 이 packet 이 전송된 횟수
|
||||
* first: 누적된 총 size
|
||||
* second: 이 packet 이 전송된 횟수
|
||||
*/
|
||||
typedef std::pair< DWORD, DWORD > TrafficInfo;
|
||||
|
||||
|
@ -105,11 +105,11 @@ class TrafficProfiler : public singleton< TrafficProfiler >
|
|||
typedef std::vector< TrafficInfo > TrafficVec;
|
||||
|
||||
FILE* m_pfProfileLogFile; ///< Profile log file pointer
|
||||
DWORD m_dwFlushCycle; ///< Flush 주기
|
||||
time_t m_tmProfileStartTime; ///< 프로파일을 시작한 시간. Flush 될 때마다 Update 된다.
|
||||
DWORD m_dwTotalTraffic; ///< Report 된 총 Traffic 용량
|
||||
DWORD m_dwTotalPacket; ///< Report 된 총 Packet 수
|
||||
TrafficVec m_aTrafficVec[ IODIR_MAX ]; ///< Report 된 Traffic 을 저장할 vector의 배열. 각 방향마다 vector 를 가진다.
|
||||
DWORD m_dwFlushCycle; ///< Flush 주기
|
||||
time_t m_tmProfileStartTime; ///< 프로파일을 시작한 시간. Flush 될 때마다 Update 된다.
|
||||
DWORD m_dwTotalTraffic; ///< Report 된 총 Traffic 용량
|
||||
DWORD m_dwTotalPacket; ///< Report 된 총 Packet 수
|
||||
TrafficVec m_aTrafficVec[ IODIR_MAX ]; ///< Report 된 Traffic 을 저장할 vector의 배열. 각 방향마다 vector 를 가진다.
|
||||
};
|
||||
|
||||
#endif // _METIN_II_TRAFFICPROFILER_H_
|
||||
|
|
|
@ -54,23 +54,23 @@ enum EAffectTypes
|
|||
AFFECT_DEF_GRADE, // 226
|
||||
|
||||
AFFECT_PREMIUM_START = 500,
|
||||
AFFECT_EXP_BONUS = 500, // 경험의 반지
|
||||
AFFECT_ITEM_BONUS = 501, // 도둑의 장갑
|
||||
AFFECT_EXP_BONUS = 500, // 경험의 반지
|
||||
AFFECT_ITEM_BONUS = 501, // 도둑의 장갑
|
||||
AFFECT_SAFEBOX = 502, // PREMIUM_SAFEBOX,
|
||||
AFFECT_AUTOLOOT = 503, // PREMIUM_AUTOLOOT,
|
||||
AFFECT_FISH_MIND = 504, // PREMIUM_FISH_MIND,
|
||||
AFFECT_MARRIAGE_FAST = 505, // 원앙의 깃털
|
||||
AFFECT_GOLD_BONUS = 506, // 돈 드롭확률 50%증가
|
||||
AFFECT_MARRIAGE_FAST = 505, // 원앙의 깃털
|
||||
AFFECT_GOLD_BONUS = 506, // 돈 드롭확률 50%증가
|
||||
AFFECT_PREMIUM_END = 509,
|
||||
|
||||
AFFECT_MALL = 510, // 몰 아이템 에펙트
|
||||
AFFECT_NO_DEATH_PENALTY = 511, // 용신의 가호 (경험치가 패널티를 한번 막아준다)
|
||||
AFFECT_SKILL_BOOK_BONUS = 512, // 선인의 교훈 (책 수련 성공 확률이 50% 증가)
|
||||
AFFECT_SKILL_NO_BOOK_DELAY = 513, // 주안술서
|
||||
AFFECT_MALL = 510, // 몰 아이템 에펙트
|
||||
AFFECT_NO_DEATH_PENALTY = 511, // 용신의 가호 (경험치가 패널티를 한번 막아준다)
|
||||
AFFECT_SKILL_BOOK_BONUS = 512, // 선인의 교훈 (책 수련 성공 확률이 50% 증가)
|
||||
AFFECT_SKILL_NO_BOOK_DELAY = 513, // 주안술서
|
||||
|
||||
AFFECT_HAIR = 514, // 헤어 효과
|
||||
AFFECT_COLLECT = 515, //수집퀘스트
|
||||
AFFECT_EXP_BONUS_EURO_FREE = 516, // 경험의 반지 (유럽 버전 14 레벨 이하 기본 효과)
|
||||
AFFECT_HAIR = 514, // 헤어 효과
|
||||
AFFECT_COLLECT = 515, //수집퀘스트
|
||||
AFFECT_EXP_BONUS_EURO_FREE = 516, // 경험의 반지 (유럽 버전 14 레벨 이하 기본 효과)
|
||||
AFFECT_EXP_BONUS_EURO_FREE_UNDER_15 = 517,
|
||||
AFFECT_UNIQUE_ABILITY = 518,
|
||||
|
||||
|
@ -121,8 +121,8 @@ enum EAffectBits
|
|||
AFF_SLOW,
|
||||
AFF_STUN,
|
||||
|
||||
AFF_DUNGEON_READY, // 던전에서 준비 상태
|
||||
AFF_DUNGEON_UNIQUE, // 던전 유니크 (클라이언트에서 컬링되지않음)
|
||||
AFF_DUNGEON_READY, // 던전에서 준비 상태
|
||||
AFF_DUNGEON_UNIQUE, // 던전 유니크 (클라이언트에서 컬링되지않음)
|
||||
|
||||
AFF_BUILDING_CONSTRUCTION_SMALL,
|
||||
AFF_BUILDING_CONSTRUCTION_LARGE,
|
||||
|
@ -133,34 +133,34 @@ enum EAffectBits
|
|||
|
||||
AFF_FISH_MIND,
|
||||
|
||||
AFF_JEONGWIHON, // 전귀혼
|
||||
AFF_GEOMGYEONG, // 검경
|
||||
AFF_CHEONGEUN, // 천근추
|
||||
AFF_GYEONGGONG, // 경공술
|
||||
AFF_EUNHYUNG, // 은형법
|
||||
AFF_GWIGUM, // 귀검
|
||||
AFF_TERROR, // 공포
|
||||
AFF_JUMAGAP, // 주마갑
|
||||
AFF_HOSIN, // 호신
|
||||
AFF_BOHO, // 보호
|
||||
AFF_KWAESOK, // 쾌속
|
||||
AFF_MANASHIELD, // 마나쉴드
|
||||
AFF_MUYEONG, // 무영진 affect
|
||||
AFF_REVIVE_INVISIBLE, // 부활시 잠시동안 무적
|
||||
AFF_FIRE, // 지속 불 데미지
|
||||
AFF_GICHEON, // 기천대공
|
||||
AFF_JEUNGRYEOK, // 증력술
|
||||
AFF_TANHWAN_DASH, // 탄환격용 달리기어펙트
|
||||
AFF_PABEOP, // 파법술
|
||||
AFF_CHEONGEUN_WITH_FALL, // 천근추
|
||||
AFF_JEONGWIHON, // 전귀혼
|
||||
AFF_GEOMGYEONG, // 검경
|
||||
AFF_CHEONGEUN, // 천근추
|
||||
AFF_GYEONGGONG, // 경공술
|
||||
AFF_EUNHYUNG, // 은형법
|
||||
AFF_GWIGUM, // 귀검
|
||||
AFF_TERROR, // 공포
|
||||
AFF_JUMAGAP, // 주마갑
|
||||
AFF_HOSIN, // 호신
|
||||
AFF_BOHO, // 보호
|
||||
AFF_KWAESOK, // 쾌속
|
||||
AFF_MANASHIELD, // 마나쉴드
|
||||
AFF_MUYEONG, // 무영진 affect
|
||||
AFF_REVIVE_INVISIBLE, // 부활시 잠시동안 무적
|
||||
AFF_FIRE, // 지속 불 데미지
|
||||
AFF_GICHEON, // 기천대공
|
||||
AFF_JEUNGRYEOK, // 증력술
|
||||
AFF_TANHWAN_DASH, // 탄환격용 달리기어펙트
|
||||
AFF_PABEOP, // 파법술
|
||||
AFF_CHEONGEUN_WITH_FALL, // 천근추
|
||||
AFF_POLYMORPH,
|
||||
AFF_WAR_FLAG1,
|
||||
AFF_WAR_FLAG2,
|
||||
AFF_WAR_FLAG3,
|
||||
|
||||
AFF_CHINA_FIREWORK,
|
||||
AFF_HAIR, // 헤어
|
||||
AFF_GERMANY, // 독일
|
||||
AFF_HAIR, // 헤어
|
||||
AFF_GERMANY, // 독일
|
||||
|
||||
AFF_BITS_MAX
|
||||
};
|
||||
|
@ -170,11 +170,11 @@ extern void SendAffectAddPacket(LPDESC d, CAffect * pkAff);
|
|||
// AFFECT_DURATION_BUG_FIX
|
||||
enum AffectVariable
|
||||
{
|
||||
// Affect가 무한대로 들어가 있어야 할 경우 사용.
|
||||
// 시간을 계속 줄이기 때문에 매우 큰값으로 무한대를 에뮬레이션함.
|
||||
//// 24비트는 적으므로 25비트를 사용.
|
||||
// ... 25비트 사용한다고 해놓고선 29bit 사용하고 있는 엄청난 주석이란...
|
||||
// collect quest에서 무한 시간을 60년으로 사용하고 있으므로, 여기도 60년으로 하자.
|
||||
// Affect가 무한대로 들어가 있어야 할 경우 사용.
|
||||
// 시간을 계속 줄이기 때문에 매우 큰값으로 무한대를 에뮬레이션함.
|
||||
//// 24비트는 적으므로 25비트를 사용.
|
||||
// ... 25비트 사용한다고 해놓고선 29bit 사용하고 있는 엄청난 주석이란...
|
||||
// collect quest에서 무한 시간을 60년으로 사용하고 있으므로, 여기도 60년으로 하자.
|
||||
|
||||
INFINITE_AFFECT_DURATION = 60 * 365 * 24 * 60 * 60
|
||||
};
|
||||
|
|
|
@ -63,7 +63,7 @@ private:
|
|||
|
||||
TPCMap offer_map;
|
||||
|
||||
// sorting을 위한 members
|
||||
// sorting을 위한 members
|
||||
public:
|
||||
typedef std::vector <TAuctionItemInfo*> TItemInfoVec;
|
||||
private:
|
||||
|
@ -76,7 +76,7 @@ private:
|
|||
public:
|
||||
void SortedItemInfos (TItemInfoVec& vec, BYTE grade, BYTE category, int start_idx, BYTE size, BYTE order[5]);
|
||||
|
||||
// 나의 경매장을 위한 함수.
|
||||
// 나의 경매장을 위한 함수.
|
||||
void YourItemInfoList (TItemInfoVec& vec, DWORD player_id, int start_idx, BYTE size);
|
||||
|
||||
};
|
||||
|
@ -131,7 +131,7 @@ private:
|
|||
typedef std::pair <int, bool> BidInfo;
|
||||
typedef std::map <DWORD, BidInfo > TItemMap;
|
||||
typedef std::unordered_map <DWORD, TItemMap*> TMyBidBoard;
|
||||
// bidder_id가 key
|
||||
// bidder_id가 key
|
||||
TMyBidBoard pc_map;
|
||||
|
||||
public:
|
||||
|
@ -144,7 +144,7 @@ public:
|
|||
|
||||
BidInfo GetMoney (DWORD player_id, DWORD item_id);
|
||||
bool Delete (DWORD player_id, DWORD item_id);
|
||||
// 이미 있으면 덮어 씌운다.
|
||||
// 이미 있으면 덮어 씌운다.
|
||||
void Insert (DWORD player_id, DWORD item_id, int money);
|
||||
void Lock (DWORD player_id, DWORD item_id);
|
||||
void UnLock (DWORD player_id, DWORD item_id);
|
||||
|
@ -156,7 +156,7 @@ private :
|
|||
typedef std::unordered_map<DWORD, LPITEM> TItemMap;
|
||||
TItemMap auction_item_map;
|
||||
|
||||
// auction에 등록된 정보 중 가격, 등등 아이템 테이블에 포함되지 않는 정보들을 관리하는 것들
|
||||
// auction에 등록된 정보 중 가격, 등등 아이템 테이블에 포함되지 않는 정보들을 관리하는 것들
|
||||
AuctionBoard Auction;
|
||||
SaleBoard Sale;
|
||||
WishBoard Wish;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#include "char.h"
|
||||
|
||||
enum EBattleTypes // 상대방 기준
|
||||
enum EBattleTypes // 상대방 기준
|
||||
{
|
||||
BATTLE_NONE,
|
||||
BATTLE_DAMAGE,
|
||||
|
@ -30,7 +30,7 @@ extern void NormalAttackAffect(LPCHARACTER pkAttacker, LPCHARACTER pkVictim);
|
|||
|
||||
extern int battle_hit(LPCHARACTER ch, LPCHARACTER victim);
|
||||
|
||||
// 특성 공격
|
||||
// 특성 공격
|
||||
inline void AttackAffect(LPCHARACTER pkAttacker,
|
||||
LPCHARACTER pkVictim,
|
||||
BYTE att_point,
|
||||
|
|
|
@ -13,7 +13,7 @@ public:
|
|||
{
|
||||
static TGradeUnit beltGradeByLevelTable[] =
|
||||
{
|
||||
0, // 벨트+0
|
||||
0, // 벨트+0
|
||||
1, // +1
|
||||
1, // +2
|
||||
2, // +3
|
||||
|
@ -34,20 +34,20 @@ public:
|
|||
return beltGradeByLevelTable[level];
|
||||
}
|
||||
|
||||
// 현재 벨트 레벨을 기준으로, 어떤 셀들을 이용할 수 있는지 리턴
|
||||
// 현재 벨트 레벨을 기준으로, 어떤 셀들을 이용할 수 있는지 리턴
|
||||
static const TGradeUnit* GetAvailableRuleTableByGrade()
|
||||
{
|
||||
/**
|
||||
벨트는 총 +0 ~ +9 레벨을 가질 수 있으며, 레벨에 따라 7단계 등급으로 구분되어 인벤토리가 활성 화 된다.
|
||||
벨트 레벨에 따른 사용 가능한 셀은 아래 그림과 같음. 현재 등급 >= 활성가능 등급이면 사용 가능.
|
||||
(단, 현재 레벨이 0이면 무조건 사용 불가, 괄호 안의 숫자는 등급)
|
||||
벨트는 총 +0 ~ +9 레벨을 가질 수 있으며, 레벨에 따라 7단계 등급으로 구분되어 인벤토리가 활성 화 된다.
|
||||
벨트 레벨에 따른 사용 가능한 셀은 아래 그림과 같음. 현재 등급 >= 활성가능 등급이면 사용 가능.
|
||||
(단, 현재 레벨이 0이면 무조건 사용 불가, 괄호 안의 숫자는 등급)
|
||||
|
||||
2(1) 4(2) 6(4) 8(6)
|
||||
5(3) 5(3) 6(4) 8(6)
|
||||
7(5) 7(5) 7(5) 8(6)
|
||||
9(7) 9(7) 9(7) 9(7)
|
||||
|
||||
벨트 인벤토리의 크기는 4x4 (16칸)
|
||||
벨트 인벤토리의 크기는 4x4 (16칸)
|
||||
*/
|
||||
|
||||
static TGradeUnit availableRuleByGrade[BELT_INVENTORY_SLOT_COUNT] = {
|
||||
|
@ -62,14 +62,14 @@ public:
|
|||
|
||||
static bool IsAvailableCell(WORD cell, int beltGrade /*int beltLevel*/)
|
||||
{
|
||||
// 기획 또 바뀜.. 아놔...
|
||||
// 기획 또 바뀜.. 아놔...
|
||||
//const TGradeUnit beltGrade = GetBeltGradeByRefineLevel(beltLevel);
|
||||
const TGradeUnit* ruleTable = GetAvailableRuleTableByGrade();
|
||||
|
||||
return ruleTable[cell] <= beltGrade;
|
||||
}
|
||||
|
||||
/// pc의 벨트 인벤토리에 아이템이 하나라도 존재하는 지 검사하는 함수.
|
||||
/// pc의 벨트 인벤토리에 아이템이 하나라도 존재하는 지 검사하는 함수.
|
||||
static bool IsExistItemInBeltInventory(LPCHARACTER pc)
|
||||
{
|
||||
for (WORD i = BELT_INVENTORY_SLOT_START; i < BELT_INVENTORY_SLOT_END; ++i)
|
||||
|
@ -83,7 +83,7 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
/// item이 벨트 인벤토리에 들어갈 수 있는 타입인지 검사하는 함수. (이 규칙은 기획자가 결정함)
|
||||
/// item이 벨트 인벤토리에 들어갈 수 있는 타입인지 검사하는 함수. (이 규칙은 기획자가 결정함)
|
||||
static bool CanMoveIntoBeltInventory(LPITEM item)
|
||||
{
|
||||
bool canMove = false;
|
||||
|
|
|
@ -9,20 +9,20 @@ public:
|
|||
CBuffOnAttributes(LPCHARACTER pOwner, BYTE m_point_type, std::vector <BYTE>* vec_buff_targets);
|
||||
~CBuffOnAttributes();
|
||||
|
||||
// 장착 중 이면서, m_p_vec_buff_wear_targets에 해당하는 아이템인 경우, 해당 아이템으로 인해 붙은 효과를 제거.
|
||||
// 장착 중 이면서, m_p_vec_buff_wear_targets에 해당하는 아이템인 경우, 해당 아이템으로 인해 붙은 효과를 제거.
|
||||
void RemoveBuffFromItem(LPITEM pItem);
|
||||
// m_p_vec_buff_wear_targets에 해당하는 아이템인 경우, 해당 아이템의 attribute에 대한 효과 추가.
|
||||
// m_p_vec_buff_wear_targets에 해당하는 아이템인 경우, 해당 아이템의 attribute에 대한 효과 추가.
|
||||
void AddBuffFromItem(LPITEM pItem);
|
||||
// m_bBuffValue를 바꾸고, 버프의 값도 바꿈.
|
||||
// m_bBuffValue를 바꾸고, 버프의 값도 바꿈.
|
||||
void ChangeBuffValue(BYTE bNewValue);
|
||||
// CHRACTRE::ComputePoints에서 속성치를 초기화하고 다시 계산하므로,
|
||||
// 버프 속성치들을 강제적으로 owner에게 줌.
|
||||
// CHRACTRE::ComputePoints에서 속성치를 초기화하고 다시 계산하므로,
|
||||
// 버프 속성치들을 강제적으로 owner에게 줌.
|
||||
void GiveAllAttributes();
|
||||
|
||||
// m_p_vec_buff_wear_targets에 해당하는 모든 아이템의 attribute를 type별로 합산하고,
|
||||
// 그 attribute들의 (m_bBuffValue)% 만큼을 버프로 줌.
|
||||
// m_p_vec_buff_wear_targets에 해당하는 모든 아이템의 attribute를 type별로 합산하고,
|
||||
// 그 attribute들의 (m_bBuffValue)% 만큼을 버프로 줌.
|
||||
bool On(BYTE bValue);
|
||||
// 버프 제거 후, 초기화
|
||||
// 버프 제거 후, 초기화
|
||||
void Off();
|
||||
|
||||
void Initialize();
|
||||
|
@ -32,9 +32,9 @@ private:
|
|||
BYTE m_bBuffValue;
|
||||
std::vector <BYTE>* m_p_vec_buff_wear_targets;
|
||||
|
||||
// apply_type, apply_value 페어의 맵
|
||||
// apply_type, apply_value 페어의 맵
|
||||
typedef std::map <BYTE, int> TMapAttr;
|
||||
// m_p_vec_buff_wear_targets에 해당하는 모든 아이템의 attribute를 type별로 합산하여 가지고 있음.
|
||||
// m_p_vec_buff_wear_targets에 해당하는 모든 아이템의 attribute를 type별로 합산하여 가지고 있음.
|
||||
TMapAttr m_map_additional_attrs;
|
||||
|
||||
};
|
||||
|
|
|
@ -9,36 +9,36 @@
|
|||
#define _castle_h_
|
||||
|
||||
|
||||
#define MAX_CASTLE_GUARD_REGION 4 // 경비병 배치 구역
|
||||
#define MAX_CASTLE_GUARD_PER_REGION 10 // 한지역에 배치할수있는 경비병그룹
|
||||
#define MAX_CASTLE_FROG 20 // 황금 두꺼비
|
||||
#define MAX_CASTLE_TOWER 10 // 봉화 최대 소환 개수
|
||||
#define MIN_CASTLE_TOWER 5 // 봉화 최소 소환 개수
|
||||
#define MAX_CASTLE_GUARD_REGION 4 // 경비병 배치 구역
|
||||
#define MAX_CASTLE_GUARD_PER_REGION 10 // 한지역에 배치할수있는 경비병그룹
|
||||
#define MAX_CASTLE_FROG 20 // 황금 두꺼비
|
||||
#define MAX_CASTLE_TOWER 10 // 봉화 최대 소환 개수
|
||||
#define MIN_CASTLE_TOWER 5 // 봉화 최소 소환 개수
|
||||
|
||||
|
||||
#define CASTLE_FROG_PRICE 100000000 // 황금두꺼비 가격 (1억)
|
||||
#define CASTLE_FROG_VNUM 11505 // 황금두꺼비 번호
|
||||
//#define CASTLE_TOWER_VNUM 11506 // 봉화 번호
|
||||
#define CASTLE_FROG_PRICE 100000000 // 황금두꺼비 가격 (1억)
|
||||
#define CASTLE_FROG_VNUM 11505 // 황금두꺼비 번호
|
||||
//#define CASTLE_TOWER_VNUM 11506 // 봉화 번호
|
||||
#define IS_CASTLE_MAP(map) (181==(map)||182==(map)||(183)==(map))
|
||||
//#define IS_CASTLE_TOWER(vnum) (11506==(vnum)||11507==(vnum)||11508==(vnum)||11509==(vnum) || 11510==(vnum))
|
||||
|
||||
|
||||
enum CASTLE_STATE
|
||||
{
|
||||
CASTLE_SIEGE_NONE, // 평화모드
|
||||
CASTLE_SIEGE_STRUGGLE, // 공성중
|
||||
CASTLE_SIEGE_END // 수성에 성공했다면 1시간동안 봉화를 깰 수 있다.
|
||||
CASTLE_SIEGE_NONE, // 평화모드
|
||||
CASTLE_SIEGE_STRUGGLE, // 공성중
|
||||
CASTLE_SIEGE_END // 수성에 성공했다면 1시간동안 봉화를 깰 수 있다.
|
||||
};
|
||||
|
||||
|
||||
struct CASTLE_DATA
|
||||
{
|
||||
LPCHARACTER frog[MAX_CASTLE_FROG]; // 황금두꺼비
|
||||
LPCHARACTER frog[MAX_CASTLE_FROG]; // 황금두꺼비
|
||||
|
||||
LPCHARACTER guard[MAX_CASTLE_GUARD_REGION][MAX_CASTLE_GUARD_PER_REGION]; // 경비병 리더
|
||||
DWORD guard_group[MAX_CASTLE_GUARD_REGION][MAX_CASTLE_GUARD_PER_REGION]; // 경비병 리더
|
||||
LPCHARACTER guard[MAX_CASTLE_GUARD_REGION][MAX_CASTLE_GUARD_PER_REGION]; // 경비병 리더
|
||||
DWORD guard_group[MAX_CASTLE_GUARD_REGION][MAX_CASTLE_GUARD_PER_REGION]; // 경비병 리더
|
||||
|
||||
LPCHARACTER tower[MAX_CASTLE_TOWER]; // 봉화
|
||||
LPCHARACTER tower[MAX_CASTLE_TOWER]; // 봉화
|
||||
|
||||
LPEVENT siege_event;
|
||||
LPEVENT stone_event;
|
||||
|
|
|
@ -83,7 +83,7 @@ enum EDamageType
|
|||
DAMAGE_TYPE_NONE,
|
||||
DAMAGE_TYPE_NORMAL,
|
||||
DAMAGE_TYPE_NORMAL_RANGE,
|
||||
//스킬
|
||||
//스킬
|
||||
DAMAGE_TYPE_MELEE,
|
||||
DAMAGE_TYPE_RANGE,
|
||||
DAMAGE_TYPE_FIRE,
|
||||
|
@ -105,103 +105,103 @@ enum EPointTypes
|
|||
POINT_MAX_HP, // 6
|
||||
POINT_SP, // 7
|
||||
POINT_MAX_SP, // 8
|
||||
POINT_STAMINA, // 9 스테미너
|
||||
POINT_MAX_STAMINA, // 10 최대 스테미너
|
||||
POINT_STAMINA, // 9 스테미너
|
||||
POINT_MAX_STAMINA, // 10 최대 스테미너
|
||||
|
||||
POINT_GOLD, // 11
|
||||
POINT_ST, // 12 근력
|
||||
POINT_HT, // 13 체력
|
||||
POINT_DX, // 14 민첩성
|
||||
POINT_IQ, // 15 정신력
|
||||
POINT_ST, // 12 근력
|
||||
POINT_HT, // 13 체력
|
||||
POINT_DX, // 14 민첩성
|
||||
POINT_IQ, // 15 정신력
|
||||
POINT_DEF_GRADE, // 16 ...
|
||||
POINT_ATT_SPEED, // 17 공격속도
|
||||
POINT_ATT_GRADE, // 18 공격력 MAX
|
||||
POINT_MOV_SPEED, // 19 이동속도
|
||||
POINT_CLIENT_DEF_GRADE, // 20 방어등급
|
||||
POINT_CASTING_SPEED, // 21 주문속도 (쿨다운타임*100) / (100 + 이값) = 최종 쿨다운 타임
|
||||
POINT_MAGIC_ATT_GRADE, // 22 마법공격력
|
||||
POINT_MAGIC_DEF_GRADE, // 23 마법방어력
|
||||
POINT_EMPIRE_POINT, // 24 제국점수
|
||||
POINT_LEVEL_STEP, // 25 한 레벨에서의 단계.. (1 2 3 될 때 보상, 4 되면 레벨 업)
|
||||
POINT_STAT, // 26 능력치 올릴 수 있는 개수
|
||||
POINT_SUB_SKILL, // 27 보조 스킬 포인트
|
||||
POINT_SKILL, // 28 액티브 스킬 포인트
|
||||
POINT_WEAPON_MIN, // 29 무기 최소 데미지
|
||||
POINT_WEAPON_MAX, // 30 무기 최대 데미지
|
||||
POINT_PLAYTIME, // 31 플레이시간
|
||||
POINT_HP_REGEN, // 32 HP 회복률
|
||||
POINT_SP_REGEN, // 33 SP 회복률
|
||||
POINT_ATT_SPEED, // 17 공격속도
|
||||
POINT_ATT_GRADE, // 18 공격력 MAX
|
||||
POINT_MOV_SPEED, // 19 이동속도
|
||||
POINT_CLIENT_DEF_GRADE, // 20 방어등급
|
||||
POINT_CASTING_SPEED, // 21 주문속도 (쿨다운타임*100) / (100 + 이값) = 최종 쿨다운 타임
|
||||
POINT_MAGIC_ATT_GRADE, // 22 마법공격력
|
||||
POINT_MAGIC_DEF_GRADE, // 23 마법방어력
|
||||
POINT_EMPIRE_POINT, // 24 제국점수
|
||||
POINT_LEVEL_STEP, // 25 한 레벨에서의 단계.. (1 2 3 될 때 보상, 4 되면 레벨 업)
|
||||
POINT_STAT, // 26 능력치 올릴 수 있는 개수
|
||||
POINT_SUB_SKILL, // 27 보조 스킬 포인트
|
||||
POINT_SKILL, // 28 액티브 스킬 포인트
|
||||
POINT_WEAPON_MIN, // 29 무기 최소 데미지
|
||||
POINT_WEAPON_MAX, // 30 무기 최대 데미지
|
||||
POINT_PLAYTIME, // 31 플레이시간
|
||||
POINT_HP_REGEN, // 32 HP 회복률
|
||||
POINT_SP_REGEN, // 33 SP 회복률
|
||||
|
||||
POINT_BOW_DISTANCE, // 34 활 사정거리 증가치 (meter)
|
||||
POINT_BOW_DISTANCE, // 34 활 사정거리 증가치 (meter)
|
||||
|
||||
POINT_HP_RECOVERY, // 35 체력 회복 증가량
|
||||
POINT_SP_RECOVERY, // 36 정신력 회복 증가량
|
||||
POINT_HP_RECOVERY, // 35 체력 회복 증가량
|
||||
POINT_SP_RECOVERY, // 36 정신력 회복 증가량
|
||||
|
||||
POINT_POISON_PCT, // 37 독 확률
|
||||
POINT_STUN_PCT, // 38 기절 확률
|
||||
POINT_SLOW_PCT, // 39 슬로우 확률
|
||||
POINT_CRITICAL_PCT, // 40 크리티컬 확률
|
||||
POINT_PENETRATE_PCT, // 41 관통타격 확률
|
||||
POINT_CURSE_PCT, // 42 저주 확률
|
||||
POINT_POISON_PCT, // 37 독 확률
|
||||
POINT_STUN_PCT, // 38 기절 확률
|
||||
POINT_SLOW_PCT, // 39 슬로우 확률
|
||||
POINT_CRITICAL_PCT, // 40 크리티컬 확률
|
||||
POINT_PENETRATE_PCT, // 41 관통타격 확률
|
||||
POINT_CURSE_PCT, // 42 저주 확률
|
||||
|
||||
POINT_ATTBONUS_HUMAN, // 43 인간에게 강함
|
||||
POINT_ATTBONUS_ANIMAL, // 44 동물에게 데미지 % 증가
|
||||
POINT_ATTBONUS_ORC, // 45 웅귀에게 데미지 % 증가
|
||||
POINT_ATTBONUS_MILGYO, // 46 밀교에게 데미지 % 증가
|
||||
POINT_ATTBONUS_UNDEAD, // 47 시체에게 데미지 % 증가
|
||||
POINT_ATTBONUS_DEVIL, // 48 마귀(악마)에게 데미지 % 증가
|
||||
POINT_ATTBONUS_INSECT, // 49 벌레족
|
||||
POINT_ATTBONUS_FIRE, // 50 화염족
|
||||
POINT_ATTBONUS_ICE, // 51 빙설족
|
||||
POINT_ATTBONUS_DESERT, // 52 사막족
|
||||
POINT_ATTBONUS_MONSTER, // 53 모든 몬스터에게 강함
|
||||
POINT_ATTBONUS_WARRIOR, // 54 무사에게 강함
|
||||
POINT_ATTBONUS_ASSASSIN, // 55 자객에게 강함
|
||||
POINT_ATTBONUS_SURA, // 56 수라에게 강함
|
||||
POINT_ATTBONUS_SHAMAN, // 57 무당에게 강함
|
||||
POINT_ATTBONUS_TREE, // 58 나무에게 강함 20050729.myevan UNUSED5
|
||||
POINT_ATTBONUS_HUMAN, // 43 인간에게 강함
|
||||
POINT_ATTBONUS_ANIMAL, // 44 동물에게 데미지 % 증가
|
||||
POINT_ATTBONUS_ORC, // 45 웅귀에게 데미지 % 증가
|
||||
POINT_ATTBONUS_MILGYO, // 46 밀교에게 데미지 % 증가
|
||||
POINT_ATTBONUS_UNDEAD, // 47 시체에게 데미지 % 증가
|
||||
POINT_ATTBONUS_DEVIL, // 48 마귀(악마)에게 데미지 % 증가
|
||||
POINT_ATTBONUS_INSECT, // 49 벌레족
|
||||
POINT_ATTBONUS_FIRE, // 50 화염족
|
||||
POINT_ATTBONUS_ICE, // 51 빙설족
|
||||
POINT_ATTBONUS_DESERT, // 52 사막족
|
||||
POINT_ATTBONUS_MONSTER, // 53 모든 몬스터에게 강함
|
||||
POINT_ATTBONUS_WARRIOR, // 54 무사에게 강함
|
||||
POINT_ATTBONUS_ASSASSIN, // 55 자객에게 강함
|
||||
POINT_ATTBONUS_SURA, // 56 수라에게 강함
|
||||
POINT_ATTBONUS_SHAMAN, // 57 무당에게 강함
|
||||
POINT_ATTBONUS_TREE, // 58 나무에게 강함 20050729.myevan UNUSED5
|
||||
|
||||
POINT_RESIST_WARRIOR, // 59 무사에게 저항
|
||||
POINT_RESIST_ASSASSIN, // 60 자객에게 저항
|
||||
POINT_RESIST_SURA, // 61 수라에게 저항
|
||||
POINT_RESIST_SHAMAN, // 62 무당에게 저항
|
||||
POINT_RESIST_WARRIOR, // 59 무사에게 저항
|
||||
POINT_RESIST_ASSASSIN, // 60 자객에게 저항
|
||||
POINT_RESIST_SURA, // 61 수라에게 저항
|
||||
POINT_RESIST_SHAMAN, // 62 무당에게 저항
|
||||
|
||||
POINT_STEAL_HP, // 63 생명력 흡수
|
||||
POINT_STEAL_SP, // 64 정신력 흡수
|
||||
POINT_STEAL_HP, // 63 생명력 흡수
|
||||
POINT_STEAL_SP, // 64 정신력 흡수
|
||||
|
||||
POINT_MANA_BURN_PCT, // 65 마나 번
|
||||
POINT_MANA_BURN_PCT, // 65 마나 번
|
||||
|
||||
/// 피해시 보너스 ///
|
||||
/// 피해시 보너스 ///
|
||||
|
||||
POINT_DAMAGE_SP_RECOVER, // 66 공격당할 시 정신력 회복 확률
|
||||
POINT_DAMAGE_SP_RECOVER, // 66 공격당할 시 정신력 회복 확률
|
||||
|
||||
POINT_BLOCK, // 67 블럭율
|
||||
POINT_DODGE, // 68 회피율
|
||||
POINT_BLOCK, // 67 블럭율
|
||||
POINT_DODGE, // 68 회피율
|
||||
|
||||
POINT_RESIST_SWORD, // 69
|
||||
POINT_RESIST_TWOHAND, // 70
|
||||
POINT_RESIST_DAGGER, // 71
|
||||
POINT_RESIST_BELL, // 72
|
||||
POINT_RESIST_FAN, // 73
|
||||
POINT_RESIST_BOW, // 74 화살 저항 : 대미지 감소
|
||||
POINT_RESIST_FIRE, // 75 화염 저항 : 화염공격에 대한 대미지 감소
|
||||
POINT_RESIST_ELEC, // 76 전기 저항 : 전기공격에 대한 대미지 감소
|
||||
POINT_RESIST_MAGIC, // 77 술법 저항 : 모든술법에 대한 대미지 감소
|
||||
POINT_RESIST_WIND, // 78 바람 저항 : 바람공격에 대한 대미지 감소
|
||||
POINT_RESIST_BOW, // 74 화살 저항 : 대미지 감소
|
||||
POINT_RESIST_FIRE, // 75 화염 저항 : 화염공격에 대한 대미지 감소
|
||||
POINT_RESIST_ELEC, // 76 전기 저항 : 전기공격에 대한 대미지 감소
|
||||
POINT_RESIST_MAGIC, // 77 술법 저항 : 모든술법에 대한 대미지 감소
|
||||
POINT_RESIST_WIND, // 78 바람 저항 : 바람공격에 대한 대미지 감소
|
||||
|
||||
POINT_REFLECT_MELEE, // 79 공격 반사
|
||||
POINT_REFLECT_MELEE, // 79 공격 반사
|
||||
|
||||
/// 특수 피해시 ///
|
||||
POINT_REFLECT_CURSE, // 80 저주 반사
|
||||
POINT_POISON_REDUCE, // 81 독데미지 감소
|
||||
/// 특수 피해시 ///
|
||||
POINT_REFLECT_CURSE, // 80 저주 반사
|
||||
POINT_POISON_REDUCE, // 81 독데미지 감소
|
||||
|
||||
/// 적 소멸시 ///
|
||||
POINT_KILL_SP_RECOVER, // 82 적 소멸시 MP 회복
|
||||
/// 적 소멸시 ///
|
||||
POINT_KILL_SP_RECOVER, // 82 적 소멸시 MP 회복
|
||||
POINT_EXP_DOUBLE_BONUS, // 83
|
||||
POINT_GOLD_DOUBLE_BONUS, // 84
|
||||
POINT_ITEM_DROP_BONUS, // 85
|
||||
|
||||
/// 회복 관련 ///
|
||||
/// 회복 관련 ///
|
||||
POINT_POTION_BONUS, // 86
|
||||
POINT_KILL_HP_RECOVERY, // 87
|
||||
|
||||
|
@ -225,7 +225,7 @@ enum EPointTypes
|
|||
|
||||
POINT_HIT_HP_RECOVERY, // 100
|
||||
POINT_HIT_SP_RECOVERY, // 101
|
||||
POINT_MANASHIELD, // 102 흑신수호 스킬에 의한 마나쉴드 효과 정도
|
||||
POINT_MANASHIELD, // 102 흑신수호 스킬에 의한 마나쉴드 효과 정도
|
||||
|
||||
POINT_PARTY_BUFFER_BONUS, // 103
|
||||
POINT_PARTY_SKILL_MASTER_BONUS, // 104
|
||||
|
@ -234,56 +234,56 @@ enum EPointTypes
|
|||
POINT_SP_RECOVER_CONTINUE, // 106
|
||||
|
||||
POINT_STEAL_GOLD, // 107
|
||||
POINT_POLYMORPH, // 108 변신한 몬스터 번호
|
||||
POINT_MOUNT, // 109 타고있는 몬스터 번호
|
||||
POINT_POLYMORPH, // 108 변신한 몬스터 번호
|
||||
POINT_MOUNT, // 109 타고있는 몬스터 번호
|
||||
|
||||
POINT_PARTY_HASTE_BONUS, // 110
|
||||
POINT_PARTY_DEFENDER_BONUS, // 111
|
||||
POINT_STAT_RESET_COUNT, // 112 피의 단약 사용을 통한 스텟 리셋 포인트 (1당 1포인트 리셋가능)
|
||||
POINT_STAT_RESET_COUNT, // 112 피의 단약 사용을 통한 스텟 리셋 포인트 (1당 1포인트 리셋가능)
|
||||
|
||||
POINT_HORSE_SKILL, // 113
|
||||
|
||||
POINT_MALL_ATTBONUS, // 114 공격력 +x%
|
||||
POINT_MALL_DEFBONUS, // 115 방어력 +x%
|
||||
POINT_MALL_EXPBONUS, // 116 경험치 +x%
|
||||
POINT_MALL_ITEMBONUS, // 117 아이템 드롭율 x/10배
|
||||
POINT_MALL_GOLDBONUS, // 118 돈 드롭율 x/10배
|
||||
POINT_MALL_ATTBONUS, // 114 공격력 +x%
|
||||
POINT_MALL_DEFBONUS, // 115 방어력 +x%
|
||||
POINT_MALL_EXPBONUS, // 116 경험치 +x%
|
||||
POINT_MALL_ITEMBONUS, // 117 아이템 드롭율 x/10배
|
||||
POINT_MALL_GOLDBONUS, // 118 돈 드롭율 x/10배
|
||||
|
||||
POINT_MAX_HP_PCT, // 119 최대생명력 +x%
|
||||
POINT_MAX_SP_PCT, // 120 최대정신력 +x%
|
||||
POINT_MAX_HP_PCT, // 119 최대생명력 +x%
|
||||
POINT_MAX_SP_PCT, // 120 최대정신력 +x%
|
||||
|
||||
POINT_SKILL_DAMAGE_BONUS, // 121 스킬 데미지 *(100+x)%
|
||||
POINT_NORMAL_HIT_DAMAGE_BONUS, // 122 평타 데미지 *(100+x)%
|
||||
POINT_SKILL_DAMAGE_BONUS, // 121 스킬 데미지 *(100+x)%
|
||||
POINT_NORMAL_HIT_DAMAGE_BONUS, // 122 평타 데미지 *(100+x)%
|
||||
|
||||
// DEFEND_BONUS_ATTRIBUTES
|
||||
POINT_SKILL_DEFEND_BONUS, // 123 스킬 방어 데미지
|
||||
POINT_NORMAL_HIT_DEFEND_BONUS, // 124 평타 방어 데미지
|
||||
POINT_SKILL_DEFEND_BONUS, // 123 스킬 방어 데미지
|
||||
POINT_NORMAL_HIT_DEFEND_BONUS, // 124 평타 방어 데미지
|
||||
// END_OF_DEFEND_BONUS_ATTRIBUTES
|
||||
|
||||
// PC_BANG_ITEM_ADD
|
||||
POINT_PC_BANG_EXP_BONUS, // 125 PC방 전용 경험치 보너스
|
||||
POINT_PC_BANG_DROP_BONUS, // 126 PC방 전용 드롭률 보너스
|
||||
POINT_PC_BANG_EXP_BONUS, // 125 PC방 전용 경험치 보너스
|
||||
POINT_PC_BANG_DROP_BONUS, // 126 PC방 전용 드롭률 보너스
|
||||
// END_PC_BANG_ITEM_ADD
|
||||
POINT_RAMADAN_CANDY_BONUS_EXP, // 라마단 사탕 경험치 증가용
|
||||
POINT_RAMADAN_CANDY_BONUS_EXP, // 라마단 사탕 경험치 증가용
|
||||
|
||||
POINT_ENERGY = 128, // 128 기력
|
||||
POINT_ENERGY = 128, // 128 기력
|
||||
|
||||
// 기력 ui 용.
|
||||
// 서버에서 쓰지 않기만, 클라이언트에서 기력의 끝 시간을 POINT로 관리하기 때문에 이렇게 한다.
|
||||
// 아 부끄럽다
|
||||
POINT_ENERGY_END_TIME = 129, // 129 기력 종료 시간
|
||||
// 기력 ui 용.
|
||||
// 서버에서 쓰지 않기만, 클라이언트에서 기력의 끝 시간을 POINT로 관리하기 때문에 이렇게 한다.
|
||||
// 아 부끄럽다
|
||||
POINT_ENERGY_END_TIME = 129, // 129 기력 종료 시간
|
||||
|
||||
POINT_COSTUME_ATTR_BONUS = 130,
|
||||
POINT_MAGIC_ATT_BONUS_PER = 131,
|
||||
POINT_MELEE_MAGIC_ATT_BONUS_PER = 132,
|
||||
|
||||
// 추가 속성 저항
|
||||
POINT_RESIST_ICE = 133, // 냉기 저항 : 얼음공격에 대한 대미지 감소
|
||||
POINT_RESIST_EARTH = 134, // 대지 저항 : 얼음공격에 대한 대미지 감소
|
||||
POINT_RESIST_DARK = 135, // 어둠 저항 : 얼음공격에 대한 대미지 감소
|
||||
// 추가 속성 저항
|
||||
POINT_RESIST_ICE = 133, // 냉기 저항 : 얼음공격에 대한 대미지 감소
|
||||
POINT_RESIST_EARTH = 134, // 대지 저항 : 얼음공격에 대한 대미지 감소
|
||||
POINT_RESIST_DARK = 135, // 어둠 저항 : 얼음공격에 대한 대미지 감소
|
||||
|
||||
POINT_RESIST_CRITICAL = 136, // 크리티컬 저항 : 상대의 크리티컬 확률을 감소
|
||||
POINT_RESIST_PENETRATE = 137, // 관통타격 저항 : 상대의 관통타격 확률을 감소
|
||||
POINT_RESIST_CRITICAL = 136, // 크리티컬 저항 : 상대의 크리티컬 확률을 감소
|
||||
POINT_RESIST_PENETRATE = 137, // 관통타격 저항 : 상대의 관통타격 확률을 감소
|
||||
|
||||
//POINT_MAX_NUM = 129 common/length.h
|
||||
};
|
||||
|
@ -352,7 +352,7 @@ struct DynamicCharacterPtr {
|
|||
uint32_t id;
|
||||
};
|
||||
|
||||
/* 저장하는 데이터 */
|
||||
/* 저장하는 데이터 */
|
||||
typedef struct character_point
|
||||
{
|
||||
int points[POINT_MAX_NUM];
|
||||
|
@ -375,7 +375,7 @@ typedef struct character_point
|
|||
BYTE skill_group;
|
||||
} CHARACTER_POINT;
|
||||
|
||||
/* 저장되지 않는 캐릭터 데이터 */
|
||||
/* 저장되지 않는 캐릭터 데이터 */
|
||||
typedef struct character_point_instant
|
||||
{
|
||||
int points[POINT_MAX_NUM];
|
||||
|
@ -397,7 +397,7 @@ typedef struct character_point_instant
|
|||
LPITEM pItems[INVENTORY_AND_EQUIP_SLOT_MAX];
|
||||
BYTE bItemGrid[INVENTORY_AND_EQUIP_SLOT_MAX];
|
||||
|
||||
// 용혼석 인벤토리.
|
||||
// 용혼석 인벤토리.
|
||||
LPITEM pDSItems[DRAGON_SOUL_INVENTORY_MAX_NUM];
|
||||
WORD wDSItemGrid[DRAGON_SOUL_INVENTORY_MAX_NUM];
|
||||
|
||||
|
@ -409,7 +409,7 @@ typedef struct character_point_instant
|
|||
|
||||
BYTE gm_level;
|
||||
|
||||
BYTE bBasePart; // 평상복 번호
|
||||
BYTE bBasePart; // 평상복 번호
|
||||
|
||||
int iMaxStamina;
|
||||
|
||||
|
@ -507,7 +507,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
{
|
||||
protected:
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Entity 관련
|
||||
// Entity 관련
|
||||
virtual void EncodeInsertPacket(LPENTITY entity);
|
||||
virtual void EncodeRemovePacket(LPENTITY entity);
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -517,7 +517,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
void UpdatePacket();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// FSM (Finite State Machine) 관련
|
||||
// FSM (Finite State Machine) 관련
|
||||
protected:
|
||||
CStateTemplate<CHARACTER> m_stateMove;
|
||||
CStateTemplate<CHARACTER> m_stateBattle;
|
||||
|
@ -587,13 +587,13 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
DWORD GetPlayerID() const { return m_dwPlayerID; }
|
||||
|
||||
void SetPlayerProto(const TPlayerTable * table);
|
||||
void CreatePlayerProto(TPlayerTable & tab); // 저장 시 사용
|
||||
void CreatePlayerProto(TPlayerTable & tab); // 저장 시 사용
|
||||
|
||||
void SetProto(const CMob * c_pkMob);
|
||||
WORD GetRaceNum() const;
|
||||
|
||||
void Save(); // DelayedSave
|
||||
void SaveReal(); // 실제 저장
|
||||
void SaveReal(); // 실제 저장
|
||||
void FlushDelayedSaveItem();
|
||||
|
||||
const char * GetName() const;
|
||||
|
@ -634,7 +634,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
DWORD GetExp() const { return m_points.exp; }
|
||||
void SetExp(DWORD exp) { m_points.exp = exp; }
|
||||
DWORD GetNextExp() const;
|
||||
LPCHARACTER DistributeExp(); // 제일 많이 때린 사람을 리턴한다.
|
||||
LPCHARACTER DistributeExp(); // 제일 많이 때린 사람을 리턴한다.
|
||||
void DistributeHP(LPCHARACTER pkKiller);
|
||||
void DistributeSP(LPCHARACTER pkKiller, int iMethod=0);
|
||||
|
||||
|
@ -717,14 +717,14 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
DWORD GetPolymorphItemVnum() const;
|
||||
DWORD GetMonsterDrainSPPoint() const;
|
||||
|
||||
void MainCharacterPacket(); // 내가 메인캐릭터라고 보내준다.
|
||||
void MainCharacterPacket(); // 내가 메인캐릭터라고 보내준다.
|
||||
|
||||
void ComputePoints();
|
||||
void ComputeBattlePoints();
|
||||
void PointChange(BYTE type, int amount, bool bAmount = false, bool bBroadcast = false);
|
||||
void PointsPacket();
|
||||
void ApplyPoint(BYTE bApplyType, int iVal);
|
||||
void CheckMaximumPoints(); // HP, SP 등의 현재 값이 최대값 보다 높은지 검사하고 높다면 낮춘다.
|
||||
void CheckMaximumPoints(); // HP, SP 등의 현재 값이 최대값 보다 높은지 검사하고 높다면 낮춘다.
|
||||
|
||||
bool Show(int lMapIndex, int x, int y, int z = INT_MAX, bool bShowSpawnMotion = false);
|
||||
|
||||
|
@ -749,7 +749,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
bool IsBlockMode(BYTE bFlag) const { return (m_pointsInstant.bBlockMode & bFlag)?true:false; }
|
||||
|
||||
bool IsPolymorphed() const { return m_dwPolymorphRace>0; }
|
||||
bool IsPolyMaintainStat() const { return m_bPolyMaintainStat; } // 이전 스텟을 유지하는 폴리모프.
|
||||
bool IsPolyMaintainStat() const { return m_bPolyMaintainStat; } // 이전 스텟을 유지하는 폴리모프.
|
||||
void SetPolymorph(DWORD dwRaceNum, bool bMaintainStat = false);
|
||||
DWORD GetPolymorphVnum() const { return m_dwPolymorphRace; }
|
||||
int GetPolymorphPower() const;
|
||||
|
@ -806,15 +806,15 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
void SetNowWalking(bool bWalkFlag);
|
||||
void ResetWalking() { SetNowWalking(m_bWalking); }
|
||||
|
||||
bool Goto(int x, int y); // 바로 이동 시키지 않고 목표 위치로 BLENDING 시킨다.
|
||||
bool Goto(int x, int y); // 바로 이동 시키지 않고 목표 위치로 BLENDING 시킨다.
|
||||
void Stop();
|
||||
|
||||
bool CanMove() const; // 이동할 수 있는가?
|
||||
bool CanMove() const; // 이동할 수 있는가?
|
||||
|
||||
void SyncPacket();
|
||||
bool Sync(int x, int y); // 실제 이 메소드로 이동 한다 (각 종 조건에 의한 이동 불가가 없음)
|
||||
bool Move(int x, int y); // 조건을 검사하고 Sync 메소드를 통해 이동 한다.
|
||||
void OnMove(bool bIsAttack = false); // 움직일때 불린다. Move() 메소드 이외에서도 불릴 수 있다.
|
||||
bool Sync(int x, int y); // 실제 이 메소드로 이동 한다 (각 종 조건에 의한 이동 불가가 없음)
|
||||
bool Move(int x, int y); // 조건을 검사하고 Sync 메소드를 통해 이동 한다.
|
||||
void OnMove(bool bIsAttack = false); // 움직일때 불린다. Move() 메소드 이외에서도 불릴 수 있다.
|
||||
DWORD GetMotionMode() const;
|
||||
float GetMoveMotionSpeed() const;
|
||||
float GetMoveSpeed() const;
|
||||
|
@ -825,7 +825,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
DWORD GetLastMoveTime() const { return m_dwLastMoveTime; }
|
||||
DWORD GetLastAttackTime() const { return m_dwLastAttackTime; }
|
||||
|
||||
void SetLastAttacked(DWORD time); // 마지막으로 공격받은 시간 및 위치를 저장함
|
||||
void SetLastAttacked(DWORD time); // 마지막으로 공격받은 시간 및 위치를 저장함
|
||||
|
||||
bool SetSyncOwner(LPCHARACTER ch, bool bRemoveFromList = true);
|
||||
bool IsSyncOwner(LPCHARACTER ch) const;
|
||||
|
@ -852,7 +852,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
|
||||
float m_fSyncTime;
|
||||
LPCHARACTER m_pkChrSyncOwner;
|
||||
CHARACTER_LIST m_kLst_pkChrSyncOwned; // 내가 SyncOwner인 자들
|
||||
CHARACTER_LIST m_kLst_pkChrSyncOwned; // 내가 SyncOwner인 자들
|
||||
|
||||
PIXEL_POSITION m_posDest;
|
||||
PIXEL_POSITION m_posStart;
|
||||
|
@ -875,7 +875,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
bool m_bStaminaConsume;
|
||||
// End
|
||||
|
||||
// Quickslot 관련
|
||||
// Quickslot 관련
|
||||
public:
|
||||
void SyncQuickslot(BYTE bType, BYTE bOldPos, BYTE bNewPos);
|
||||
bool GetQuickslot(BYTE pos, TQuickslot ** ppSlot);
|
||||
|
@ -904,7 +904,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
void LoadAffect(DWORD dwCount, TPacketAffectElement * pElements);
|
||||
void SaveAffect();
|
||||
|
||||
// Affect loading이 끝난 상태인가?
|
||||
// Affect loading이 끝난 상태인가?
|
||||
bool IsLoadedAffect() const { return m_bIsLoadedAffect; }
|
||||
|
||||
bool IsGoodAffect(BYTE bAffectType) const;
|
||||
|
@ -930,25 +930,25 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
void DenyToParty(LPCHARACTER member);
|
||||
void AcceptToParty(LPCHARACTER member);
|
||||
|
||||
/// 자신의 파티에 다른 character 를 초대한다.
|
||||
/// 자신의 파티에 다른 character 를 초대한다.
|
||||
/**
|
||||
* @param pchInvitee 초대할 대상 character. 파티에 참여 가능한 상태이어야 한다.
|
||||
* @param pchInvitee 초대할 대상 character. 파티에 참여 가능한 상태이어야 한다.
|
||||
*
|
||||
* 양측 character 의 상태가 파티에 초대하고 초대받을 수 있는 상태가 아니라면 초대하는 캐릭터에게 해당하는 채팅 메세지를 전송한다.
|
||||
* 양측 character 의 상태가 파티에 초대하고 초대받을 수 있는 상태가 아니라면 초대하는 캐릭터에게 해당하는 채팅 메세지를 전송한다.
|
||||
*/
|
||||
void PartyInvite(LPCHARACTER pchInvitee);
|
||||
|
||||
/// 초대했던 character 의 수락을 처리한다.
|
||||
/// 초대했던 character 의 수락을 처리한다.
|
||||
/**
|
||||
* @param pchInvitee 파티에 참여할 character. 파티에 참여가능한 상태이어야 한다.
|
||||
* @param pchInvitee 파티에 참여할 character. 파티에 참여가능한 상태이어야 한다.
|
||||
*
|
||||
* pchInvitee 가 파티에 가입할 수 있는 상황이 아니라면 해당하는 채팅 메세지를 전송한다.
|
||||
* pchInvitee 가 파티에 가입할 수 있는 상황이 아니라면 해당하는 채팅 메세지를 전송한다.
|
||||
*/
|
||||
void PartyInviteAccept(LPCHARACTER pchInvitee);
|
||||
|
||||
/// 초대했던 character 의 초대 거부를 처리한다.
|
||||
/// 초대했던 character 의 초대 거부를 처리한다.
|
||||
/**
|
||||
* @param [in] dwPID 초대 했던 character 의 PID
|
||||
* @param [in] dwPID 초대 했던 character 의 PID
|
||||
*/
|
||||
void PartyInviteDeny(DWORD dwPID);
|
||||
|
||||
|
@ -961,45 +961,45 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
|
||||
protected:
|
||||
|
||||
/// 파티에 가입한다.
|
||||
/// 파티에 가입한다.
|
||||
/**
|
||||
* @param pkLeader 가입할 파티의 리더
|
||||
* @param pkLeader 가입할 파티의 리더
|
||||
*/
|
||||
void PartyJoin(LPCHARACTER pkLeader);
|
||||
|
||||
/**
|
||||
* 파티 가입을 할 수 없을 경우의 에러코드.
|
||||
* Error code 는 시간에 의존적인가에 따라 변경가능한(mutable) type 과 정적(static) type 으로 나뉜다.
|
||||
* Error code 의 값이 PERR_SEPARATOR 보다 낮으면 변경가능한 type 이고 높으면 정적 type 이다.
|
||||
* 파티 가입을 할 수 없을 경우의 에러코드.
|
||||
* Error code 는 시간에 의존적인가에 따라 변경가능한(mutable) type 과 정적(static) type 으로 나뉜다.
|
||||
* Error code 의 값이 PERR_SEPARATOR 보다 낮으면 변경가능한 type 이고 높으면 정적 type 이다.
|
||||
*/
|
||||
enum PartyJoinErrCode {
|
||||
PERR_NONE = 0, ///< 처리성공
|
||||
PERR_SERVER, ///< 서버문제로 파티관련 처리 불가
|
||||
PERR_DUNGEON, ///< 캐릭터가 던전에 있음
|
||||
PERR_OBSERVER, ///< 관전모드임
|
||||
PERR_LVBOUNDARY, ///< 상대 캐릭터와 레벨차이가 남
|
||||
PERR_LOWLEVEL, ///< 상대파티의 최고레벨보다 30레벨 낮음
|
||||
PERR_HILEVEL, ///< 상대파티의 최저레벨보다 30레벨 높음
|
||||
PERR_ALREADYJOIN, ///< 파티가입 대상 캐릭터가 이미 파티중
|
||||
PERR_PARTYISFULL, ///< 파티인원 제한 초과
|
||||
PERR_NONE = 0, ///< 처리성공
|
||||
PERR_SERVER, ///< 서버문제로 파티관련 처리 불가
|
||||
PERR_DUNGEON, ///< 캐릭터가 던전에 있음
|
||||
PERR_OBSERVER, ///< 관전모드임
|
||||
PERR_LVBOUNDARY, ///< 상대 캐릭터와 레벨차이가 남
|
||||
PERR_LOWLEVEL, ///< 상대파티의 최고레벨보다 30레벨 낮음
|
||||
PERR_HILEVEL, ///< 상대파티의 최저레벨보다 30레벨 높음
|
||||
PERR_ALREADYJOIN, ///< 파티가입 대상 캐릭터가 이미 파티중
|
||||
PERR_PARTYISFULL, ///< 파티인원 제한 초과
|
||||
PERR_SEPARATOR, ///< Error type separator.
|
||||
PERR_DIFFEMPIRE, ///< 상대 캐릭터와 다른 제국임
|
||||
PERR_MAX ///< Error code 최고치. 이 앞에 Error code 를 추가한다.
|
||||
PERR_DIFFEMPIRE, ///< 상대 캐릭터와 다른 제국임
|
||||
PERR_MAX ///< Error code 최고치. 이 앞에 Error code 를 추가한다.
|
||||
};
|
||||
|
||||
/// 파티 가입이나 결성 가능한 조건을 검사한다.
|
||||
/// 파티 가입이나 결성 가능한 조건을 검사한다.
|
||||
/**
|
||||
* @param pchLeader 파티의 leader 이거나 초대한 character
|
||||
* @param pchGuest 초대받는 character
|
||||
* @return 모든 PartyJoinErrCode 가 반환될 수 있다.
|
||||
* @param pchLeader 파티의 leader 이거나 초대한 character
|
||||
* @param pchGuest 초대받는 character
|
||||
* @return 모든 PartyJoinErrCode 가 반환될 수 있다.
|
||||
*/
|
||||
static PartyJoinErrCode IsPartyJoinableCondition(const LPCHARACTER pchLeader, const LPCHARACTER pchGuest);
|
||||
|
||||
/// 파티 가입이나 결성 가능한 동적인 조건을 검사한다.
|
||||
/// 파티 가입이나 결성 가능한 동적인 조건을 검사한다.
|
||||
/**
|
||||
* @param pchLeader 파티의 leader 이거나 초대한 character
|
||||
* @param pchGuest 초대받는 character
|
||||
* @return mutable type 의 code 만 반환한다.
|
||||
* @param pchLeader 파티의 leader 이거나 초대한 character
|
||||
* @param pchGuest 초대받는 character
|
||||
* @return mutable type 의 code 만 반환한다.
|
||||
*/
|
||||
static PartyJoinErrCode IsPartyJoinableMutableCondition(const LPCHARACTER pchLeader, const LPCHARACTER pchGuest);
|
||||
|
||||
|
@ -1008,11 +1008,11 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
LPEVENT m_pkPartyRequestEvent;
|
||||
|
||||
/**
|
||||
* 파티초청 Event map.
|
||||
* key: 초대받은 캐릭터의 PID
|
||||
* value: event의 pointer
|
||||
* 파티초청 Event map.
|
||||
* key: 초대받은 캐릭터의 PID
|
||||
* value: event의 pointer
|
||||
*
|
||||
* 초대한 캐릭터들에 대한 event map.
|
||||
* 초대한 캐릭터들에 대한 event map.
|
||||
*/
|
||||
typedef std::map< DWORD, LPEVENT > EventMap;
|
||||
EventMap m_PartyInviteEventMap;
|
||||
|
@ -1046,7 +1046,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Item related
|
||||
public:
|
||||
bool CanHandleItem(bool bSkipRefineCheck = false, bool bSkipObserver = false); // 아이템 관련 행위를 할 수 있는가?
|
||||
bool CanHandleItem(bool bSkipRefineCheck = false, bool bSkipObserver = false); // 아이템 관련 행위를 할 수 있는가?
|
||||
|
||||
bool IsItemLoaded() const { return m_bItemLoaded; }
|
||||
void SetItemLoaded() { m_bItemLoaded = true; }
|
||||
|
@ -1061,14 +1061,14 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
LPITEM GetWear(BYTE bCell) const;
|
||||
|
||||
// MYSHOP_PRICE_LIST
|
||||
void UseSilkBotary(void); /// 비단 보따리 아이템의 사용
|
||||
void UseSilkBotary(void); /// 비단 보따리 아이템의 사용
|
||||
|
||||
/// DB 캐시로 부터 받아온 가격정보 리스트를 유저에게 전송하고 보따리 아이템 사용을 처리한다.
|
||||
/// DB 캐시로 부터 받아온 가격정보 리스트를 유저에게 전송하고 보따리 아이템 사용을 처리한다.
|
||||
/**
|
||||
* @param [in] p 가격정보 리스트 패킷
|
||||
* @param [in] p 가격정보 리스트 패킷
|
||||
*
|
||||
* 접속한 후 처음 비단 보따리 아이템 사용 시 UseSilkBotary 에서 DB 캐시로 가격정보 리스트를 요청하고
|
||||
* 응답받은 시점에 이 함수에서 실제 비단보따리 사용을 처리한다.
|
||||
* 접속한 후 처음 비단 보따리 아이템 사용 시 UseSilkBotary 에서 DB 캐시로 가격정보 리스트를 요청하고
|
||||
* 응답받은 시점에 이 함수에서 실제 비단보따리 사용을 처리한다.
|
||||
*/
|
||||
void UseSilkBotaryReal(const TPacketMyshopPricelistHeader* p);
|
||||
// END_OF_MYSHOP_PRICE_LIST
|
||||
|
@ -1114,10 +1114,10 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
bool EquipItem(LPITEM item, int iCandidateCell = -1);
|
||||
bool UnequipItem(LPITEM item);
|
||||
|
||||
// 현재 item을 착용할 수 있는 지 확인하고, 불가능 하다면 캐릭터에게 이유를 알려주는 함수
|
||||
// 현재 item을 착용할 수 있는 지 확인하고, 불가능 하다면 캐릭터에게 이유를 알려주는 함수
|
||||
bool CanEquipNow(const LPITEM item, const TItemPos& srcCell = NPOS, const TItemPos& destCell = NPOS);
|
||||
|
||||
// 착용중인 item을 벗을 수 있는 지 확인하고, 불가능 하다면 캐릭터에게 이유를 알려주는 함수
|
||||
// 착용중인 item을 벗을 수 있는 지 확인하고, 불가능 하다면 캐릭터에게 이유를 알려주는 함수
|
||||
bool CanUnequipNow(const LPITEM item, const TItemPos& srcCell = NPOS, const TItemPos& destCell = NPOS);
|
||||
|
||||
bool SwapItem(BYTE bCell, BYTE bDestCell);
|
||||
|
@ -1149,14 +1149,14 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
|
||||
protected:
|
||||
|
||||
/// 한 아이템에 대한 가격정보를 전송한다.
|
||||
/// 한 아이템에 대한 가격정보를 전송한다.
|
||||
/**
|
||||
* @param [in] dwItemVnum 아이템 vnum
|
||||
* @param [in] dwItemPrice 아이템 가격
|
||||
* @param [in] dwItemVnum 아이템 vnum
|
||||
* @param [in] dwItemPrice 아이템 가격
|
||||
*/
|
||||
void SendMyShopPriceListCmd(DWORD dwItemVnum, DWORD dwItemPrice);
|
||||
|
||||
bool m_bNoOpenedShop; ///< 이번 접속 후 개인상점을 연 적이 있는지의 여부(열었던 적이 없다면 true)
|
||||
bool m_bNoOpenedShop; ///< 이번 접속 후 개인상점을 연 적이 있는지의 여부(열었던 적이 없다면 true)
|
||||
|
||||
bool m_bItemLoaded;
|
||||
int m_iRefineAdditionalCell;
|
||||
|
@ -1170,7 +1170,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
void SetGold(INT gold) { m_points.gold = gold; }
|
||||
bool DropGold(INT gold);
|
||||
INT GetAllowedGold() const;
|
||||
void GiveGold(INT iAmount); // 파티가 있으면 파티 분배, 로그 등의 처리
|
||||
void GiveGold(INT iAmount); // 파티가 있으면 파티 분배, 로그 등의 처리
|
||||
// End of Money
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -1236,9 +1236,9 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
bool CanFight() const;
|
||||
|
||||
bool CanBeginFight() const;
|
||||
void BeginFight(LPCHARACTER pkVictim); // pkVictimr과 싸우기 시작한다. (강제적임, 시작할 수 있나 체크하려면 CanBeginFight을 사용)
|
||||
void BeginFight(LPCHARACTER pkVictim); // pkVictimr과 싸우기 시작한다. (강제적임, 시작할 수 있나 체크하려면 CanBeginFight을 사용)
|
||||
|
||||
bool CounterAttack(LPCHARACTER pkChr); // 반격하기 (몬스터만 사용)
|
||||
bool CounterAttack(LPCHARACTER pkChr); // 반격하기 (몬스터만 사용)
|
||||
|
||||
bool IsStun() const;
|
||||
void Stun();
|
||||
|
@ -1268,7 +1268,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
void UpdateAlignment(int iAmount);
|
||||
int GetAlignment() const;
|
||||
|
||||
//선악치 얻기
|
||||
//선악치 얻기
|
||||
int GetRealAlignment() const;
|
||||
void ShowAlignment(bool bShow);
|
||||
|
||||
|
@ -1317,7 +1317,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
|
||||
DWORD m_dwFlyTargetID;
|
||||
std::vector<DWORD> m_vec_dwFlyTargets;
|
||||
TDamageMap m_map_kDamage; // 어떤 캐릭터가 나에게 얼마만큼의 데미지를 주었는가?
|
||||
TDamageMap m_map_kDamage; // 어떤 캐릭터가 나에게 얼마만큼의 데미지를 주었는가?
|
||||
// AttackLog m_kAttackLog;
|
||||
DWORD m_dwKillerPID;
|
||||
|
||||
|
@ -1340,8 +1340,8 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
BYTE GetDropMetinStonePct() const { return m_bDropMetinStonePct; }
|
||||
|
||||
protected:
|
||||
LPCHARACTER m_pkChrStone; // 나를 스폰한 돌
|
||||
CHARACTER_SET m_set_pkChrSpawnedBy; // 내가 스폰한 놈들
|
||||
LPCHARACTER m_pkChrStone; // 나를 스폰한 돌
|
||||
CHARACTER_SET m_set_pkChrSpawnedBy; // 내가 스폰한 놈들
|
||||
DWORD m_dwDropMetinStone;
|
||||
BYTE m_bDropMetinStonePct;
|
||||
// End of Stone
|
||||
|
@ -1399,7 +1399,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
|
||||
private:
|
||||
bool m_bDisableCooltime;
|
||||
DWORD m_dwLastSkillTime; ///< 마지막으로 skill 을 쓴 시간(millisecond).
|
||||
DWORD m_dwLastSkillTime; ///< 마지막으로 skill 을 쓴 시간(millisecond).
|
||||
// End of Skill
|
||||
|
||||
// MOB_SKILL
|
||||
|
@ -1456,10 +1456,10 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
// AI related
|
||||
public:
|
||||
void AssignTriggers(const TMobTable * table);
|
||||
LPCHARACTER GetVictim() const; // 공격할 대상 리턴
|
||||
LPCHARACTER GetVictim() const; // 공격할 대상 리턴
|
||||
void SetVictim(LPCHARACTER pkVictim);
|
||||
LPCHARACTER GetNearestVictim(LPCHARACTER pkChr);
|
||||
LPCHARACTER GetProtege() const; // 보호해야 할 대상 리턴
|
||||
LPCHARACTER GetProtege() const; // 보호해야 할 대상 리턴
|
||||
|
||||
bool Follow(LPCHARACTER pkChr, float fMinimumDistance = 150.0f);
|
||||
bool Return();
|
||||
|
@ -1483,8 +1483,8 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Target
|
||||
protected:
|
||||
LPCHARACTER m_pkChrTarget; // 내 타겟
|
||||
CHARACTER_SET m_set_pkChrTargetedBy; // 나를 타겟으로 가지고 있는 사람들
|
||||
LPCHARACTER m_pkChrTarget; // 내 타겟
|
||||
CHARACTER_SET m_set_pkChrTargetedBy; // 나를 타겟으로 가지고 있는 사람들
|
||||
|
||||
public:
|
||||
void SetTarget(LPCHARACTER pkChrTarget);
|
||||
|
@ -1505,19 +1505,19 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
void ChangeSafeboxSize(BYTE bSize);
|
||||
void CloseSafebox();
|
||||
|
||||
/// 창고 열기 요청
|
||||
/// 창고 열기 요청
|
||||
/**
|
||||
* @param [in] pszPassword 1자 이상 6자 이하의 창고 비밀번호
|
||||
* @param [in] pszPassword 1자 이상 6자 이하의 창고 비밀번호
|
||||
*
|
||||
* DB 에 창고열기를 요청한다.
|
||||
* 창고는 중복으로 열지 못하며, 최근 창고를 닫은 시간으로 부터 10초 이내에는 열 지 못한다.
|
||||
* DB 에 창고열기를 요청한다.
|
||||
* 창고는 중복으로 열지 못하며, 최근 창고를 닫은 시간으로 부터 10초 이내에는 열 지 못한다.
|
||||
*/
|
||||
void ReqSafeboxLoad(const char* pszPassword);
|
||||
|
||||
/// 창고 열기 요청의 취소
|
||||
/// 창고 열기 요청의 취소
|
||||
/**
|
||||
* ReqSafeboxLoad 를 호출하고 CloseSafebox 하지 않았을 때 이 함수를 호출하면 창고를 열 수 있다.
|
||||
* 창고열기의 요청이 DB 서버에서 실패응답을 받았을 경우 이 함수를 사용해서 요청을 할 수 있게 해준다.
|
||||
* ReqSafeboxLoad 를 호출하고 CloseSafebox 하지 않았을 때 이 함수를 호출하면 창고를 열 수 있다.
|
||||
* 창고열기의 요청이 DB 서버에서 실패응답을 받았을 경우 이 함수를 사용해서 요청을 할 수 있게 해준다.
|
||||
*/
|
||||
void CancelSafeboxLoad( void ) { m_bOpeningSafebox = false; }
|
||||
|
||||
|
@ -1535,7 +1535,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
CSafebox * m_pkSafebox;
|
||||
int m_iSafeboxSize;
|
||||
int m_iSafeboxLoadTime;
|
||||
bool m_bOpeningSafebox; ///< 창고가 열기 요청 중이거나 열려있는가 여부, true 일 경우 열기요청이거나 열려있음.
|
||||
bool m_bOpeningSafebox; ///< 창고가 열기 요청 중이거나 열려있는가 여부, true 일 경우 열기요청이거나 열려있음.
|
||||
|
||||
CSafebox * m_pkMall;
|
||||
int m_iMallLoadTime;
|
||||
|
@ -1569,7 +1569,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
|
||||
void HorseSummon(bool bSummon, bool bFromFar = false, DWORD dwVnum = 0, const char* name = 0);
|
||||
|
||||
LPCHARACTER GetHorse() const { return m_chHorse; } // 현재 소환중인 말
|
||||
LPCHARACTER GetHorse() const { return m_chHorse; } // 현재 소환중인 말
|
||||
LPCHARACTER GetRider() const; // rider on horse
|
||||
void SetRider(LPCHARACTER ch);
|
||||
|
||||
|
@ -1631,7 +1631,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Resists & Proofs
|
||||
public:
|
||||
bool CannotMoveByAffect() const; // 특정 효과에 의해 움직일 수 없는 상태인가?
|
||||
bool CannotMoveByAffect() const; // 특정 효과에 의해 움직일 수 없는 상태인가?
|
||||
bool IsImmune(DWORD dwImmuneFlag);
|
||||
void SetImmuneFlag(DWORD dw) { m_pointsInstant.dwImmuneFlag = dw; }
|
||||
|
||||
|
@ -1671,7 +1671,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
void UpdateStateMachine(DWORD dwPulse);
|
||||
void SetNextStatePulse(int iPulseNext);
|
||||
|
||||
// 캐릭터 인스턴스 업데이트 함수. 기존엔 이상한 상속구조로 CFSM::Update 함수를 호출하거나 UpdateStateMachine 함수를 사용했는데, 별개의 업데이트 함수 추가함.
|
||||
// 캐릭터 인스턴스 업데이트 함수. 기존엔 이상한 상속구조로 CFSM::Update 함수를 호출하거나 UpdateStateMachine 함수를 사용했는데, 별개의 업데이트 함수 추가함.
|
||||
void UpdateCharacter(DWORD dwPulse);
|
||||
|
||||
protected:
|
||||
|
@ -1741,9 +1741,9 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
int m_aiPremiumTimes[PREMIUM_MAX_NUM];
|
||||
|
||||
// CHANGE_ITEM_ATTRIBUTES
|
||||
static const DWORD msc_dwDefaultChangeItemAttrCycle; ///< 디폴트 아이템 속성변경 가능 주기
|
||||
static const char msc_szLastChangeItemAttrFlag[]; ///< 최근 아이템 속성을 변경한 시간의 Quest Flag 이름
|
||||
static const char msc_szChangeItemAttrCycleFlag[]; ///< 아이템 속성병경 가능 주기의 Quest Flag 이름
|
||||
static const DWORD msc_dwDefaultChangeItemAttrCycle; ///< 디폴트 아이템 속성변경 가능 주기
|
||||
static const char msc_szLastChangeItemAttrFlag[]; ///< 최근 아이템 속성을 변경한 시간의 Quest Flag 이름
|
||||
static const char msc_szChangeItemAttrCycleFlag[]; ///< 아이템 속성병경 가능 주기의 Quest Flag 이름
|
||||
// END_OF_CHANGE_ITEM_ATTRIBUTES
|
||||
|
||||
// PC_BANG_ITEM_ADD
|
||||
|
@ -1824,7 +1824,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
int GetMyShopTime() const { return m_iMyShopTime; }
|
||||
void SetMyShopTime() { m_iMyShopTime = thecore_pulse(); }
|
||||
|
||||
// Hack 방지를 위한 체크.
|
||||
// Hack 방지를 위한 체크.
|
||||
bool IsHack(bool bSendMsg = true, bool bCheckShopOwner = true, int limittime = g_nPortalLimitTime);
|
||||
|
||||
// MONARCH
|
||||
|
@ -1874,9 +1874,9 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
bool IsSiegeNPC() const;
|
||||
|
||||
private:
|
||||
//중국 전용
|
||||
//18세 미만 전용
|
||||
//3시간 : 50 % 5 시간 0%
|
||||
//중국 전용
|
||||
//18세 미만 전용
|
||||
//3시간 : 50 % 5 시간 0%
|
||||
e_overtime m_eOverTime;
|
||||
|
||||
public:
|
||||
|
@ -1952,7 +1952,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
|
||||
typedef std::map <BYTE, CBuffOnAttributes*> TMapBuffOnAttrs;
|
||||
TMapBuffOnAttrs m_map_buff_on_attrs;
|
||||
// 무적 : 원활한 테스트를 위하여.
|
||||
// 무적 : 원활한 테스트를 위하여.
|
||||
public:
|
||||
void SetArmada() { cannot_dead = true; }
|
||||
void ResetArmada() { cannot_dead = false; }
|
||||
|
@ -1967,7 +1967,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
bool IsPet() { return m_bIsPet; }
|
||||
#endif
|
||||
|
||||
//최종 데미지 보정.
|
||||
//최종 데미지 보정.
|
||||
private:
|
||||
float m_fAttMul;
|
||||
float m_fDamMul;
|
||||
|
@ -1980,7 +1980,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
private:
|
||||
bool IsValidItemPosition(TItemPos Pos) const;
|
||||
|
||||
//독일 선물 기능 패킷 임시 저장
|
||||
//독일 선물 기능 패킷 임시 저장
|
||||
private:
|
||||
unsigned int itemAward_vnum = 0;
|
||||
char itemAward_cmd[20] = "";
|
||||
|
@ -1994,10 +1994,10 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
//void SetItemAward_flag(bool flag) { itemAward_flag = flag; }
|
||||
|
||||
public:
|
||||
//용혼석
|
||||
//용혼석
|
||||
|
||||
// 캐릭터의 affect, quest가 load 되기 전에 DragonSoul_Initialize를 호출하면 안된다.
|
||||
// affect가 가장 마지막에 로드되어 LoadAffect에서 호출함.
|
||||
// 캐릭터의 affect, quest가 load 되기 전에 DragonSoul_Initialize를 호출하면 안된다.
|
||||
// affect가 가장 마지막에 로드되어 LoadAffect에서 호출함.
|
||||
void DragonSoul_Initialize();
|
||||
|
||||
bool DragonSoul_IsQualified() const;
|
||||
|
@ -2008,17 +2008,17 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
bool DragonSoul_ActivateDeck(int deck_idx);
|
||||
|
||||
void DragonSoul_DeactivateAll();
|
||||
// 반드시 ClearItem 전에 불러야 한다.
|
||||
// 왜냐하면....
|
||||
// 용혼석 하나 하나를 deactivate할 때마다 덱에 active인 용혼석이 있는지 확인하고,
|
||||
// active인 용혼석이 하나도 없다면, 캐릭터의 용혼석 affect와, 활성 상태를 제거한다.
|
||||
// 반드시 ClearItem 전에 불러야 한다.
|
||||
// 왜냐하면....
|
||||
// 용혼석 하나 하나를 deactivate할 때마다 덱에 active인 용혼석이 있는지 확인하고,
|
||||
// active인 용혼석이 하나도 없다면, 캐릭터의 용혼석 affect와, 활성 상태를 제거한다.
|
||||
//
|
||||
// 하지만 ClearItem 시, 캐릭터가 착용하고 있는 모든 아이템을 unequip하는 바람에,
|
||||
// 용혼석 Affect가 제거되고, 결국 로그인 시, 용혼석이 활성화되지 않는다.
|
||||
// (Unequip할 때에는 로그아웃 상태인지, 아닌지 알 수 없다.)
|
||||
// 용혼석만 deactivate시키고 캐릭터의 용혼석 덱 활성 상태는 건드리지 않는다.
|
||||
// 하지만 ClearItem 시, 캐릭터가 착용하고 있는 모든 아이템을 unequip하는 바람에,
|
||||
// 용혼석 Affect가 제거되고, 결국 로그인 시, 용혼석이 활성화되지 않는다.
|
||||
// (Unequip할 때에는 로그아웃 상태인지, 아닌지 알 수 없다.)
|
||||
// 용혼석만 deactivate시키고 캐릭터의 용혼석 덱 활성 상태는 건드리지 않는다.
|
||||
void DragonSoul_CleanUp();
|
||||
// 용혼석 강화창
|
||||
// 용혼석 강화창
|
||||
public:
|
||||
bool DragonSoul_RefineWindow_Open(LPENTITY pEntity);
|
||||
bool DragonSoul_RefineWindow_Close();
|
||||
|
@ -2026,8 +2026,8 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
|||
bool DragonSoul_RefineWindow_CanRefine();
|
||||
|
||||
private:
|
||||
// SyncPosition을 악용하여 타유저를 이상한 곳으로 보내는 핵 방어하기 위하여,
|
||||
// SyncPosition이 일어날 때를 기록.
|
||||
// SyncPosition을 악용하여 타유저를 이상한 곳으로 보내는 핵 방어하기 위하여,
|
||||
// SyncPosition이 일어날 때를 기록.
|
||||
timeval m_tvLastSyncTime;
|
||||
int m_iSyncHackCount;
|
||||
public:
|
||||
|
|
|
@ -24,7 +24,7 @@ class CHARACTER_MANAGER : public singleton<CHARACTER_MANAGER>
|
|||
|
||||
void Destroy();
|
||||
|
||||
void GracefulShutdown(); // 정상적 셧다운할 때 사용. PC를 모두 저장시키고 Destroy 한다.
|
||||
void GracefulShutdown(); // 정상적 셧다운할 때 사용. PC를 모두 저장시키고 Destroy 한다.
|
||||
|
||||
DWORD AllocVID();
|
||||
|
||||
|
@ -56,11 +56,11 @@ class CHARACTER_MANAGER : public singleton<CHARACTER_MANAGER>
|
|||
bool AddToStateList(LPCHARACTER ch);
|
||||
void RemoveFromStateList(LPCHARACTER ch);
|
||||
|
||||
// DelayedSave: 어떠한 루틴 내에서 저장을 해야 할 짓을 많이 하면 저장
|
||||
// 쿼리가 너무 많아지므로 "저장을 한다" 라고 표시만 해두고 잠깐
|
||||
// (예: 1 frame) 후에 저장시킨다.
|
||||
// DelayedSave: 어떠한 루틴 내에서 저장을 해야 할 짓을 많이 하면 저장
|
||||
// 쿼리가 너무 많아지므로 "저장을 한다" 라고 표시만 해두고 잠깐
|
||||
// (예: 1 frame) 후에 저장시킨다.
|
||||
void DelayedSave(LPCHARACTER ch);
|
||||
bool FlushDelayedSave(LPCHARACTER ch); // Delayed 리스트에 있다면 지우고 저장한다. 끊김 처리시 사용 됨.
|
||||
bool FlushDelayedSave(LPCHARACTER ch); // Delayed 리스트에 있다면 지우고 저장한다. 끊김 처리시 사용 됨.
|
||||
void ProcessDelayedSave();
|
||||
|
||||
template<class Func> Func for_each_pc(Func f);
|
||||
|
@ -124,7 +124,7 @@ class CHARACTER_MANAGER : public singleton<CHARACTER_MANAGER>
|
|||
NAME_MAP m_map_pkPCChr;
|
||||
|
||||
char dummy1[1024]; // memory barrier
|
||||
CHARACTER_SET m_set_pkChrState; // FSM이 돌아가고 있는 놈들
|
||||
CHARACTER_SET m_set_pkChrState; // FSM이 돌아가고 있는 놈들
|
||||
CHARACTER_SET m_set_pkChrForDelayedSave;
|
||||
CHARACTER_SET m_set_pkChrMonsterLog;
|
||||
|
||||
|
|
|
@ -51,11 +51,11 @@ enum SCMD_XMAS
|
|||
};
|
||||
|
||||
extern void Shutdown(int iSec);
|
||||
extern void SendNotice(const char * c_pszBuf); // 이 게임서버에만 공지
|
||||
extern void SendLog(const char * c_pszBuf); // 운영자에게만 공지
|
||||
extern void BroadcastNotice(const char * c_pszBuf); // 전 서버에 공지
|
||||
extern void SendNoticeMap(const char* c_pszBuf, int nMapIndex, bool bBigFont); // 지정 맵에만 공지
|
||||
extern void SendMonarchNotice(BYTE bEmpire, const char * c_pszBuf); // 같은 제국에게 공지
|
||||
extern void SendNotice(const char * c_pszBuf); // 이 게임서버에만 공지
|
||||
extern void SendLog(const char * c_pszBuf); // 운영자에게만 공지
|
||||
extern void BroadcastNotice(const char * c_pszBuf); // 전 서버에 공지
|
||||
extern void SendNoticeMap(const char* c_pszBuf, int nMapIndex, bool bBigFont); // 지정 맵에만 공지
|
||||
extern void SendMonarchNotice(BYTE bEmpire, const char * c_pszBuf); // 같은 제국에게 공지
|
||||
|
||||
// LUA_ADD_BGM_INFO
|
||||
void CHARACTER_SetBGMVolumeEnable();
|
||||
|
|
|
@ -35,7 +35,7 @@ extern bool china_event_server;
|
|||
extern bool g_bNoMoreClient;
|
||||
extern bool g_bNoRegen;
|
||||
|
||||
extern bool g_bTrafficProfileOn; ///< true 이면 TrafficProfiler 를 켠다.
|
||||
extern bool g_bTrafficProfileOn; ///< true 이면 TrafficProfiler 를 켠다.
|
||||
|
||||
extern BYTE g_bChannel;
|
||||
|
||||
|
@ -99,8 +99,8 @@ extern int VIEW_RANGE;
|
|||
extern int VIEW_BONUS_RANGE;
|
||||
|
||||
extern bool g_bCheckMultiHack;
|
||||
extern bool g_protectNormalPlayer; // 범법자가 "평화모드" 인 일반유저를 공격하지 못함
|
||||
extern bool g_noticeBattleZone; // 중립지대에 입장하면 안내메세지를 알려줌
|
||||
extern bool g_protectNormalPlayer; // 범법자가 "평화모드" 인 일반유저를 공격하지 못함
|
||||
extern bool g_noticeBattleZone; // 중립지대에 입장하면 안내메세지를 알려줌
|
||||
|
||||
extern DWORD g_GoldDropTimeLimitValue;
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ enum EMonsterChatState
|
|||
|
||||
typedef struct SMobRankStat
|
||||
{
|
||||
int iGoldPercent; // 돈이 나올 확률
|
||||
int iGoldPercent; // 돈이 나올 확률
|
||||
} TMobRankStat;
|
||||
|
||||
typedef struct SMobStat
|
||||
|
@ -124,7 +124,7 @@ extern const int aiMobResistsApplyIdx[MOB_RESISTS_MAX_NUM];
|
|||
|
||||
extern const int aSkillAttackAffectProbByRank[MOB_RANK_MAX_NUM];
|
||||
|
||||
extern const int aiItemMagicAttributePercentHigh[ITEM_ATTRIBUTE_MAX_LEVEL]; // 1개까지
|
||||
extern const int aiItemMagicAttributePercentHigh[ITEM_ATTRIBUTE_MAX_LEVEL]; // 1개까지
|
||||
extern const int aiItemMagicAttributePercentLow[ITEM_ATTRIBUTE_MAX_LEVEL];
|
||||
|
||||
extern const int aiItemAttributeAddPercent[ITEM_ATTRIBUTE_MAX_NUM];
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* date : 2006.11.20
|
||||
* file : cube.h
|
||||
* author : mhh
|
||||
* description : 큐브시스템
|
||||
* description : 큐브시스템
|
||||
*/
|
||||
|
||||
#ifndef _cube_h_
|
||||
|
@ -30,7 +30,7 @@ struct CUBE_DATA
|
|||
std::vector<CUBE_VALUE> item;
|
||||
std::vector<CUBE_VALUE> reward;
|
||||
int percent;
|
||||
unsigned int gold; // 제조시 필요한 금액
|
||||
unsigned int gold; // 제조시 필요한 금액
|
||||
|
||||
CUBE_DATA();
|
||||
|
||||
|
|
|
@ -105,7 +105,7 @@ class DBManager : public singleton<DBManager>
|
|||
void FlushBilling(bool bForce=false);
|
||||
void CheckBilling();
|
||||
|
||||
void StopAllBilling(); // 20050503.ipkn.DB-AUTH 접속 종료시 빌링 테이블 모두 지우기 (재연결시 복구함)
|
||||
void StopAllBilling(); // 20050503.ipkn.DB-AUTH 접속 종료시 빌링 테이블 모두 지우기 (재연결시 복구함)
|
||||
|
||||
DWORD CountQuery() { return m_sql.CountQuery(); }
|
||||
DWORD CountQueryResult() { return m_sql.CountResult(); }
|
||||
|
@ -119,8 +119,8 @@ class DBManager : public singleton<DBManager>
|
|||
const std::string & GetDBString(const std::string& key);
|
||||
const std::vector<std::string> & GetGreetMessage();
|
||||
|
||||
template<class Functor> void FuncQuery(Functor f, const char * c_pszFormat, ...); // 결과를 f인자로 호출함 (SQLMsg *) 알아서 해제됨
|
||||
template<class Functor> void FuncAfterQuery(Functor f, const char * c_pszFormat, ...); // 끝나고 나면 f가 호출됨 void f(void) 형태
|
||||
template<class Functor> void FuncQuery(Functor f, const char * c_pszFormat, ...); // 결과를 f인자로 호출함 (SQLMsg *) 알아서 해제됨
|
||||
template<class Functor> void FuncAfterQuery(Functor f, const char * c_pszFormat, ...); // 끝나고 나면 f가 호출됨 void f(void) 형태
|
||||
|
||||
size_t EscapeString(char* dst, size_t dstSize, const char *src, size_t srcSize);
|
||||
|
||||
|
|
|
@ -47,14 +47,14 @@ class CLoginKey
|
|||
};
|
||||
|
||||
|
||||
// sequence 버그 찾기용 데이타
|
||||
// sequence 버그 찾기용 데이타
|
||||
struct seq_t
|
||||
{
|
||||
BYTE hdr;
|
||||
BYTE seq;
|
||||
};
|
||||
typedef std::vector<seq_t> seq_vector_t;
|
||||
// sequence 버그 찾기용 데이타
|
||||
// sequence 버그 찾기용 데이타
|
||||
|
||||
extern void DescReadHandler(bufferevent *bev, void *ctx);
|
||||
extern void DescWriteHandler(bufferevent *bev, void *ctx);
|
||||
|
@ -109,7 +109,7 @@ class DESC
|
|||
|
||||
bool IsPhase(int phase) const { return m_iPhase == phase ? true : false; }
|
||||
|
||||
// 핸드쉐이크 (시간 동기화)
|
||||
// 핸드쉐이크 (시간 동기화)
|
||||
void StartHandshake(DWORD _dw);
|
||||
void SendHandshake(DWORD dwCurTime, LONG lNewDelta);
|
||||
bool HandshakeProcess(DWORD dwTime, LONG lDelta, bool bInfiniteRetry=false);
|
||||
|
@ -118,7 +118,7 @@ class DESC
|
|||
DWORD GetHandshake() const { return m_dwHandshake; }
|
||||
DWORD GetClientTime();
|
||||
|
||||
// 제국
|
||||
// 제국
|
||||
BYTE GetEmpire();
|
||||
|
||||
// for p2p
|
||||
|
@ -127,7 +127,7 @@ class DESC
|
|||
void DisconnectOfSameLogin();
|
||||
|
||||
void SetAdminMode();
|
||||
bool IsAdminMode(); // Handshake 에서 어드민 명령을 쓸수있나?
|
||||
bool IsAdminMode(); // Handshake 에서 어드민 명령을 쓸수있나?
|
||||
|
||||
void SetPong(bool b);
|
||||
bool IsPong();
|
||||
|
@ -200,7 +200,7 @@ class DESC
|
|||
WORD m_wP2PPort;
|
||||
BYTE m_bP2PChannel;
|
||||
|
||||
bool m_bAdminMode; // Handshake 에서 어드민 명령을 쓸수있나?
|
||||
bool m_bAdminMode; // Handshake 에서 어드민 명령을 쓸수있나?
|
||||
bool m_bPong;
|
||||
|
||||
int m_iCurrentSequence;
|
||||
|
@ -252,7 +252,7 @@ class DESC
|
|||
|
||||
void ChatPacket(BYTE type, const char * format, ...);
|
||||
|
||||
/* 시퀀스 버그 찾기용 코드 */
|
||||
/* 시퀀스 버그 찾기용 코드 */
|
||||
public:
|
||||
seq_vector_t m_seq_vector;
|
||||
void push_seq (BYTE hdr, BYTE seq);
|
||||
|
|
|
@ -38,8 +38,8 @@ class CDungeon
|
|||
|
||||
void IncMonster() { m_iMonsterCount++; SPDLOG_DEBUG("MonsterCount {}", m_iMonsterCount); }
|
||||
void DecMonster() { m_iMonsterCount--; CheckEliminated(); }
|
||||
int CountMonster() { return m_iMonsterCount; } // 데이터로 리젠한 몬스터의 수
|
||||
int CountRealMonster(); // 실제로 맵상에 있는 몬스터
|
||||
int CountMonster() { return m_iMonsterCount; } // 데이터로 리젠한 몬스터의 수
|
||||
int CountRealMonster(); // 실제로 맵상에 있는 몬스터
|
||||
|
||||
void IncPartyMember(LPPARTY pParty, LPCHARACTER ch);
|
||||
void DecPartyMember(LPPARTY pParty, LPCHARACTER ch);
|
||||
|
@ -103,7 +103,7 @@ class CDungeon
|
|||
void SetFlag(std::string name, int value);
|
||||
void SetWarpLocation (int map_index, int x, int y);
|
||||
|
||||
// item group은 item_vnum과 item_count로 구성.
|
||||
// item group은 item_vnum과 item_count로 구성.
|
||||
typedef std::vector <std::pair <DWORD, int> > ItemGroup;
|
||||
void CreateItemGroup (std::string& group_name, ItemGroup& item_group);
|
||||
const ItemGroup* GetItemGroup (std::string& group_name);
|
||||
|
@ -142,7 +142,7 @@ class CDungeon
|
|||
bool m_bExitAllAtEliminate;
|
||||
bool m_bWarpAtEliminate;
|
||||
|
||||
// 적 전멸시 워프하는 위치
|
||||
// 적 전멸시 워프하는 위치
|
||||
int m_iWarpDelay;
|
||||
int m_lWarpMapIndex;
|
||||
int m_lWarpX;
|
||||
|
@ -163,9 +163,9 @@ class CDungeon
|
|||
friend EVENTFUNC(dungeon_exit_all_event);
|
||||
friend EVENTFUNC(dungeon_jump_to_event);
|
||||
|
||||
// 파티 단위 던전 입장을 위한 임시 변수.
|
||||
// m_map_pkParty는 관리가 부실하여 사용할 수 없다고 판단하여,
|
||||
// 임시로 한 파티에 대한 관리를 하는 변수 생성.
|
||||
// 파티 단위 던전 입장을 위한 임시 변수.
|
||||
// m_map_pkParty는 관리가 부실하여 사용할 수 없다고 판단하여,
|
||||
// 임시로 한 파티에 대한 관리를 하는 변수 생성.
|
||||
|
||||
LPPARTY m_pParty;
|
||||
public :
|
||||
|
|
|
@ -28,7 +28,7 @@ class CEntity
|
|||
void ViewCleanup();
|
||||
void ViewInsert(LPENTITY entity, bool recursive = true);
|
||||
void ViewRemove(LPENTITY entity, bool recursive = true);
|
||||
void ViewReencode(); // 주위 Entity에 패킷을 다시 보낸다.
|
||||
void ViewReencode(); // 주위 Entity에 패킷을 다시 보낸다.
|
||||
|
||||
int GetViewAge() const { return m_iViewAge; }
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
/*
|
||||
* Filename: event.h
|
||||
* Description: 이벤트 관련 (timed event)
|
||||
* Description: 이벤트 관련 (timed event)
|
||||
*
|
||||
* Author: 김한주 (aka. 비엽, Cronan), 송영진 (aka. myevan, 빗자루)
|
||||
* Author: 김한주 (aka. 비엽, Cronan), 송영진 (aka. myevan, 빗자루)
|
||||
*/
|
||||
#ifndef __INC_LIBTHECORE_EVENT_H__
|
||||
#define __INC_LIBTHECORE_EVENT_H__
|
||||
|
@ -81,10 +81,10 @@ extern int event_count();
|
|||
|
||||
#define event_create(func, info, when) event_create_ex(func, info, when)
|
||||
extern LPEVENT event_create_ex(TEVENTFUNC func, event_info_data* info, int when);
|
||||
extern void event_cancel(LPEVENT * event); // 이벤트 취소
|
||||
extern int event_processing_time(LPEVENT event); // 수행 시간 리턴
|
||||
extern int event_time(LPEVENT event); // 남은 시간 리턴
|
||||
extern void event_reset_time(LPEVENT event, int when); // 실행 시간 재 설정
|
||||
extern void event_cancel(LPEVENT * event); // 이벤트 취소
|
||||
extern int event_processing_time(LPEVENT event); // 수행 시간 리턴
|
||||
extern int event_time(LPEVENT event); // 남은 시간 리턴
|
||||
extern void event_reset_time(LPEVENT event, int when); // 실행 시간 재 설정
|
||||
extern void event_set_verbose(int level);
|
||||
|
||||
extern event_info_data* FindEventInfo(DWORD dwID);
|
||||
|
|
|
@ -35,7 +35,7 @@ class CExchange
|
|||
bool CheckSpace();
|
||||
|
||||
private:
|
||||
CExchange * m_pCompany; // 상대방의 CExchange 포인터
|
||||
CExchange * m_pCompany; // 상대방의 CExchange 포인터
|
||||
|
||||
LPCHARACTER m_pOwner;
|
||||
|
||||
|
|
|
@ -45,15 +45,15 @@ public:
|
|||
int GetRowCount();
|
||||
|
||||
template <typename T>
|
||||
bool GetValue(size_t i, const std::string & c_rstrColKey, T& tValue) const; // n번째(map에 들어있는 순서일 뿐, txt의 순서와는 관계 없음) row의 특정 컬럼의 값을 반환하는 함수.
|
||||
// 이질적이긴 하지만, 편의를 위한 함수.
|
||||
bool GetValue(size_t i, const std::string & c_rstrColKey, T& tValue) const; // n번째(map에 들어있는 순서일 뿐, txt의 순서와는 관계 없음) row의 특정 컬럼의 값을 반환하는 함수.
|
||||
// 이질적이긴 하지만, 편의를 위한 함수.
|
||||
template <typename T>
|
||||
bool GetValue(const std::string & c_rstrRowKey, const std::string & c_rstrColKey, T& tValue) const;
|
||||
template <typename T>
|
||||
bool GetValue(const std::string & c_rstrRowKey, int index, T& tValue) const;
|
||||
|
||||
bool GetRow(const std::string & c_rstrKey, OUT const CGroupNodeRow ** ppRow) const;
|
||||
// 참고로, idx랑 txt에 쓰여진 순서랑 관계 없음.
|
||||
// 참고로, idx랑 txt에 쓰여진 순서랑 관계 없음.
|
||||
bool GetRow(int idx, OUT const CGroupNodeRow ** ppRow) const;
|
||||
bool GetGroupRow(const std::string& stGroupName, const std::string& stRow, OUT const CGroupNode::CGroupNodeRow ** ppRow) const;
|
||||
|
||||
|
@ -184,7 +184,7 @@ bool CGroupNode::GetGroupValue(const std::string& stGroupName, const std::string
|
|||
if (pChildGroup->GetValue(stRow, iCol, tValue))
|
||||
return true;
|
||||
}
|
||||
// default group을 살펴봄.
|
||||
// default group을 살펴봄.
|
||||
pChildGroup = GetChildNode("default");
|
||||
if (NULL != pChildGroup)
|
||||
{
|
||||
|
@ -203,7 +203,7 @@ bool CGroupNode::GetGroupValue(const std::string& stGroupName, const std::string
|
|||
if (pChildGroup->GetValue(stRow, stCol, tValue))
|
||||
return true;
|
||||
}
|
||||
// default group을 살펴봄.
|
||||
// default group을 살펴봄.
|
||||
pChildGroup = GetChildNode("default");
|
||||
if (NULL != pChildGroup)
|
||||
{
|
||||
|
|
|
@ -29,12 +29,12 @@ struct SGuildMaster
|
|||
|
||||
typedef struct SGuildMember
|
||||
{
|
||||
DWORD pid; // player 테이블의 id; primary key
|
||||
BYTE grade; // 길드상의 플레이어의 계급 1 to 15 (1이 짱)
|
||||
DWORD pid; // player 테이블의 id; primary key
|
||||
BYTE grade; // 길드상의 플레이어의 계급 1 to 15 (1이 짱)
|
||||
BYTE is_general;
|
||||
BYTE job;
|
||||
BYTE level;
|
||||
DWORD offer_exp; // 공헌한 경험치
|
||||
DWORD offer_exp; // 공헌한 경험치
|
||||
BYTE _dummy;
|
||||
|
||||
std::string name;
|
||||
|
@ -72,7 +72,7 @@ typedef struct packet_guild_sub_info
|
|||
|
||||
typedef struct SGuildGrade
|
||||
{
|
||||
char grade_name[GUILD_GRADE_NAME_MAX_LEN+1]; // 8+1 길드장, 길드원 등의 이름
|
||||
char grade_name[GUILD_GRADE_NAME_MAX_LEN+1]; // 8+1 길드장, 길드원 등의 이름
|
||||
BYTE auth_flag;
|
||||
} TGuildGrade;
|
||||
|
||||
|
@ -256,7 +256,7 @@ class CGuild
|
|||
bool ChargeSP(LPCHARACTER ch, int iSP);
|
||||
|
||||
void Chat(const char* c_pszText);
|
||||
void P2PChat(const char* c_pszText); // 길드 채팅
|
||||
void P2PChat(const char* c_pszText); // 길드 채팅
|
||||
|
||||
void SkillUsableChange(DWORD dwSkillVnum, bool bUsable);
|
||||
void AdvanceLevel(int iLevel);
|
||||
|
@ -266,7 +266,7 @@ class CGuild
|
|||
void RequestWithdrawMoney(LPCHARACTER ch, int iGold);
|
||||
|
||||
void RecvMoneyChange(int iGold);
|
||||
void RecvWithdrawMoneyGive(int iChangeGold); // bGive==1 이면 길드장에게 주는 걸 시도하고 성공실패를 디비에게 보낸다
|
||||
void RecvWithdrawMoneyGive(int iChangeGold); // bGive==1 이면 길드장에게 주는 걸 시도하고 성공실패를 디비에게 보낸다
|
||||
|
||||
int GetGuildMoney() const { return m_data.gold; }
|
||||
|
||||
|
@ -277,7 +277,7 @@ class CGuild
|
|||
int GetGuildWarState(DWORD guild_id);
|
||||
bool CanStartWar(BYTE bGuildWarType);
|
||||
DWORD GetWarStartTime(DWORD guild_id);
|
||||
bool UnderWar(DWORD guild_id); // 전쟁중인가?
|
||||
bool UnderWar(DWORD guild_id); // 전쟁중인가?
|
||||
DWORD UnderAnyWar(BYTE bType = GUILD_WAR_TYPE_MAX_NUM);
|
||||
|
||||
// War map relative
|
||||
|
@ -320,26 +320,26 @@ class CGuild
|
|||
bool HasLand();
|
||||
|
||||
// GUILD_JOIN_BUG_FIX
|
||||
/// character 에게 길드가입 초대를 한다.
|
||||
/// character 에게 길드가입 초대를 한다.
|
||||
/**
|
||||
* @param pchInviter 초대한 character.
|
||||
* @param pchInvitee 초대할 character.
|
||||
* @param pchInviter 초대한 character.
|
||||
* @param pchInvitee 초대할 character.
|
||||
*
|
||||
* 초대하거나 받을수 없는 상태라면 해당하는 채팅 메세지를 전송한다.
|
||||
* 초대하거나 받을수 없는 상태라면 해당하는 채팅 메세지를 전송한다.
|
||||
*/
|
||||
void Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee );
|
||||
|
||||
/// 길드초대에 대한 상대 character 의 수락을 처리한다.
|
||||
/// 길드초대에 대한 상대 character 의 수락을 처리한다.
|
||||
/**
|
||||
* @param pchInvitee 초대받은 character
|
||||
* @param pchInvitee 초대받은 character
|
||||
*
|
||||
* 길드에 가입가능한 상태가 아니라면 해당하는 채팅 메세지를 전송한다.
|
||||
* 길드에 가입가능한 상태가 아니라면 해당하는 채팅 메세지를 전송한다.
|
||||
*/
|
||||
void InviteAccept( LPCHARACTER pchInvitee );
|
||||
|
||||
/// 길드초대에 대한 상대 character 의 거부를 처리한다.
|
||||
/// 길드초대에 대한 상대 character 의 거부를 처리한다.
|
||||
/**
|
||||
* @param dwPID 초대받은 character 의 PID
|
||||
* @param dwPID 초대받은 character 의 PID
|
||||
*/
|
||||
void InviteDeny( DWORD dwPID );
|
||||
// END_OF_GUILD_JOIN_BUG_FIX
|
||||
|
@ -377,27 +377,27 @@ class CGuild
|
|||
bool abSkillUsable[GUILD_SKILL_COUNT];
|
||||
|
||||
// GUILD_JOIN_BUG_FIX
|
||||
/// 길드 가입을 할 수 없을 경우의 에러코드.
|
||||
/// 길드 가입을 할 수 없을 경우의 에러코드.
|
||||
enum GuildJoinErrCode {
|
||||
GERR_NONE = 0, ///< 처리성공
|
||||
GERR_WITHDRAWPENALTY, ///< 탈퇴후 가입가능한 시간이 지나지 않음
|
||||
GERR_COMMISSIONPENALTY, ///< 해산후 가입가능한 시간이 지나지 않음
|
||||
GERR_ALREADYJOIN, ///< 길드가입 대상 캐릭터가 이미 길드에 가입해 있음
|
||||
GERR_GUILDISFULL, ///< 길드인원 제한 초과
|
||||
GERR_GUILD_IS_IN_WAR, ///< 길드가 현재 전쟁중
|
||||
GERR_INVITE_LIMIT, ///< 길드원 가입 제한 상태
|
||||
GERR_MAX ///< Error code 최고치. 이 앞에 Error code 를 추가한다.
|
||||
GERR_NONE = 0, ///< 처리성공
|
||||
GERR_WITHDRAWPENALTY, ///< 탈퇴후 가입가능한 시간이 지나지 않음
|
||||
GERR_COMMISSIONPENALTY, ///< 해산후 가입가능한 시간이 지나지 않음
|
||||
GERR_ALREADYJOIN, ///< 길드가입 대상 캐릭터가 이미 길드에 가입해 있음
|
||||
GERR_GUILDISFULL, ///< 길드인원 제한 초과
|
||||
GERR_GUILD_IS_IN_WAR, ///< 길드가 현재 전쟁중
|
||||
GERR_INVITE_LIMIT, ///< 길드원 가입 제한 상태
|
||||
GERR_MAX ///< Error code 최고치. 이 앞에 Error code 를 추가한다.
|
||||
};
|
||||
|
||||
/// 길드에 가입 가능한 조건을 검사한다.
|
||||
/// 길드에 가입 가능한 조건을 검사한다.
|
||||
/**
|
||||
* @param [in] pchInvitee 초대받는 character
|
||||
* @param [in] pchInvitee 초대받는 character
|
||||
* @return GuildJoinErrCode
|
||||
*/
|
||||
GuildJoinErrCode VerifyGuildJoinableCondition( const LPCHARACTER pchInvitee );
|
||||
|
||||
typedef std::map< DWORD, LPEVENT > EventMap;
|
||||
EventMap m_GuildInviteEventMap; ///< 길드 초청 Event map. key: 초대받은 캐릭터의 PID
|
||||
EventMap m_GuildInviteEventMap; ///< 길드 초청 Event map. key: 초대받은 캐릭터의 PID
|
||||
// END_OF_GUILD_JOIN_BUG_FIX
|
||||
};
|
||||
|
||||
|
|
|
@ -8,10 +8,10 @@ const int HORSE_MAX_LEVEL = 30;
|
|||
|
||||
struct THorseStat
|
||||
{
|
||||
int iMinLevel; // 탑승할 수 있는 최소 레벨
|
||||
int iMinLevel; // 탑승할 수 있는 최소 레벨
|
||||
int iNPCRace;
|
||||
int iMaxHealth; // 말의 최대 체력
|
||||
int iMaxStamina; // 말의 최대 스테미너
|
||||
int iMaxHealth; // 말의 최대 체력
|
||||
int iMaxStamina; // 말의 최대 스테미너
|
||||
int iST;
|
||||
int iDX;
|
||||
int iHT;
|
||||
|
|
|
@ -177,7 +177,7 @@ protected:
|
|||
protected:
|
||||
void MapLocations(const char * c_pData);
|
||||
void LoginSuccess(DWORD dwHandle, const char *data);
|
||||
void PlayerCreateFailure(LPDESC d, BYTE bType); // 0 = 일반 실패 1 = 이미 있음
|
||||
void PlayerCreateFailure(LPDESC d, BYTE bType); // 0 = 일반 실패 1 = 이미 있음
|
||||
void PlayerDeleteSuccess(LPDESC d, const char * data);
|
||||
void PlayerDeleteFail(LPDESC d);
|
||||
void PlayerLoad(LPDESC d, const char* data);
|
||||
|
@ -272,10 +272,10 @@ protected:
|
|||
void BlockException(TPacketBlockException * data);
|
||||
|
||||
// MYSHOP_PRICE_LIST
|
||||
/// 아이템 가격정보 리스트 요청에 대한 응답 패킷(HEADER_DG_MYSHOP_PRICELIST_RES) 처리함수
|
||||
/// 아이템 가격정보 리스트 요청에 대한 응답 패킷(HEADER_DG_MYSHOP_PRICELIST_RES) 처리함수
|
||||
/**
|
||||
* @param d 아이템 가격정보 리스트를 요청한 플레이어의 descriptor
|
||||
* @param p 패킷데이터의 포인터
|
||||
* @param d 아이템 가격정보 리스트를 요청한 플레이어의 descriptor
|
||||
* @param p 패킷데이터의 포인터
|
||||
*/
|
||||
void MyshopPricelistRes( LPDESC d, const TPacketMyshopPricelistHeader* p );
|
||||
// END_OF_MYSHOP_PRICE_LIST
|
||||
|
@ -285,7 +285,7 @@ protected:
|
|||
//END_RELOAD_ADMIN
|
||||
|
||||
void DetailLog(const TPacketNeedLoginLogInfo* info);
|
||||
// 독일 선물 기능 테스트
|
||||
// 독일 선물 기능 테스트
|
||||
void ItemAwardInformer(TPacketItemAwardInfromer* data);
|
||||
|
||||
void RespondChannelStatus(LPDESC desc, const char* pcData);
|
||||
|
|
|
@ -60,10 +60,10 @@ class CItem : public CEntity
|
|||
bool SetCount(DWORD count);
|
||||
DWORD GetCount();
|
||||
|
||||
// GetVnum과 GetOriginalVnum에 대한 comment
|
||||
// GetVnum은 Masking 된 Vnum이다. 이를 사용함으로써, 아이템의 실제 Vnum은 10이지만, Vnum이 20인 것처럼 동작할 수 있는 것이다.
|
||||
// Masking 값은 ori_to_new.txt에서 정의된 값이다.
|
||||
// GetOriginalVnum은 아이템 고유의 Vnum으로, 로그 남길 때, 클라이언트에 아이템 정보 보낼 때, 저장할 때는 이 Vnum을 사용하여야 한다.
|
||||
// GetVnum과 GetOriginalVnum에 대한 comment
|
||||
// GetVnum은 Masking 된 Vnum이다. 이를 사용함으로써, 아이템의 실제 Vnum은 10이지만, Vnum이 20인 것처럼 동작할 수 있는 것이다.
|
||||
// Masking 값은 ori_to_new.txt에서 정의된 값이다.
|
||||
// GetOriginalVnum은 아이템 고유의 Vnum으로, 로그 남길 때, 클라이언트에 아이템 정보 보낼 때, 저장할 때는 이 Vnum을 사용하여야 한다.
|
||||
//
|
||||
DWORD GetVnum() const { return m_dwMaskVnum ? m_dwMaskVnum : m_dwVnum; }
|
||||
DWORD GetOriginalVnum() const { return m_dwVnum; }
|
||||
|
@ -103,7 +103,7 @@ class CItem : public CEntity
|
|||
|
||||
bool IsPolymorphItem();
|
||||
|
||||
void ModifyPoints(bool bAdd); // 아이템의 효과를 캐릭터에 부여 한다. bAdd가 false이면 제거함
|
||||
void ModifyPoints(bool bAdd); // 아이템의 효과를 캐릭터에 부여 한다. bAdd가 false이면 제거함
|
||||
|
||||
bool CreateSocket(BYTE bSlot, BYTE bGold);
|
||||
const int * GetSockets() { return &m_alSockets[0]; }
|
||||
|
@ -146,7 +146,7 @@ class CItem : public CEntity
|
|||
|
||||
DWORD GetLastOwnerPID() { return m_dwLastOwnerPID; }
|
||||
|
||||
int GetAttributeSetIndex(); // 속성 붙는것을 지정한 배열의 어느 인덱스를 사용하는지 돌려준다.
|
||||
int GetAttributeSetIndex(); // 속성 붙는것을 지정한 배열의 어느 인덱스를 사용하는지 돌려준다.
|
||||
void AlterToMagicItem();
|
||||
void AlterToSocketItem(int iSocketCount);
|
||||
|
||||
|
@ -165,7 +165,7 @@ class CItem : public CEntity
|
|||
void StopTimerBasedOnWearExpireEvent();
|
||||
void StopAccessorySocketExpireEvent();
|
||||
|
||||
// 일단 REAL_TIME과 TIMER_BASED_ON_WEAR 아이템에 대해서만 제대로 동작함.
|
||||
// 일단 REAL_TIME과 TIMER_BASED_ON_WEAR 아이템에 대해서만 제대로 동작함.
|
||||
int GetDuration();
|
||||
|
||||
int GetAttributeCount();
|
||||
|
@ -180,7 +180,7 @@ class CItem : public CEntity
|
|||
bool IsSameSpecialGroup(const LPITEM item) const;
|
||||
|
||||
// ACCESSORY_REFINE
|
||||
// 액세서리에 광산을 통해 소켓을 추가
|
||||
// 액세서리에 광산을 통해 소켓을 추가
|
||||
bool IsAccessoryForSocket();
|
||||
|
||||
int GetAccessorySocketGrade();
|
||||
|
@ -193,7 +193,7 @@ class CItem : public CEntity
|
|||
|
||||
void AccessorySocketDegrade();
|
||||
|
||||
// 악세사리 를 아이템에 밖았을때 타이머 돌아가는것( 구리, 등 )
|
||||
// 악세사리 를 아이템에 밖았을때 타이머 돌아가는것( 구리, 등 )
|
||||
void StartAccessorySocketExpireEvent();
|
||||
void SetAccessorySocketExpireEvent(LPEVENT pkEvent);
|
||||
|
||||
|
@ -227,7 +227,7 @@ class CItem : public CEntity
|
|||
|
||||
protected:
|
||||
friend class CInputDB;
|
||||
bool OnAfterCreatedItem(); // 서버상에 아이템이 모든 정보와 함께 완전히 생성(로드)된 후 불리우는 함수.
|
||||
bool OnAfterCreatedItem(); // 서버상에 아이템이 모든 정보와 함께 완전히 생성(로드)된 후 불리우는 함수.
|
||||
|
||||
public:
|
||||
bool IsRideItem();
|
||||
|
@ -237,46 +237,46 @@ class CItem : public CEntity
|
|||
bool IsNewMountItem();
|
||||
|
||||
#ifdef __AUCTION__
|
||||
// 경매장
|
||||
// 경매장
|
||||
bool MoveToAuction ();
|
||||
void CopyToRawData (TPlayerItem* item);
|
||||
#endif
|
||||
// 독일에서 기존 캐시 아이템과 같지만, 교환 가능한 캐시 아이템을 만든다고 하여,
|
||||
// 오리지널 아이템에, 교환 금지 플래그만 삭제한 새로운 아이템들을 새로운 아이템 대역에 할당하였다.
|
||||
// 문제는 새로운 아이템도 오리지널 아이템과 같은 효과를 내야하는데,
|
||||
// 서버건, 클라건, vnum 기반으로 되어있어
|
||||
// 새로운 vnum을 죄다 서버에 새로 다 박아야하는 안타까운 상황에 맞닿았다.
|
||||
// 그래서 새 vnum의 아이템이면, 서버에서 돌아갈 때는 오리지널 아이템 vnum으로 바꿔서 돌고 하고,
|
||||
// 저장할 때에 본래 vnum으로 바꿔주도록 한다.
|
||||
// 독일에서 기존 캐시 아이템과 같지만, 교환 가능한 캐시 아이템을 만든다고 하여,
|
||||
// 오리지널 아이템에, 교환 금지 플래그만 삭제한 새로운 아이템들을 새로운 아이템 대역에 할당하였다.
|
||||
// 문제는 새로운 아이템도 오리지널 아이템과 같은 효과를 내야하는데,
|
||||
// 서버건, 클라건, vnum 기반으로 되어있어
|
||||
// 새로운 vnum을 죄다 서버에 새로 다 박아야하는 안타까운 상황에 맞닿았다.
|
||||
// 그래서 새 vnum의 아이템이면, 서버에서 돌아갈 때는 오리지널 아이템 vnum으로 바꿔서 돌고 하고,
|
||||
// 저장할 때에 본래 vnum으로 바꿔주도록 한다.
|
||||
|
||||
// Mask vnum은 어떤 이유(ex. 위의 상황)로 인해 vnum이 바뀌어 돌아가는 아이템을 위해 있다.
|
||||
// Mask vnum은 어떤 이유(ex. 위의 상황)로 인해 vnum이 바뀌어 돌아가는 아이템을 위해 있다.
|
||||
void SetMaskVnum(DWORD vnum) { m_dwMaskVnum = vnum; }
|
||||
DWORD GetMaskVnum() { return m_dwMaskVnum; }
|
||||
bool IsMaskedItem() { return m_dwMaskVnum != 0; }
|
||||
|
||||
// 용혼석
|
||||
// 용혼석
|
||||
bool IsDragonSoul();
|
||||
int GiveMoreTime_Per(float fPercent);
|
||||
int GiveMoreTime_Fix(DWORD dwTime);
|
||||
|
||||
private:
|
||||
TItemTable const * m_pProto; // 프로토 타잎
|
||||
TItemTable const * m_pProto; // 프로토 타잎
|
||||
|
||||
DWORD m_dwVnum;
|
||||
LPCHARACTER m_pOwner;
|
||||
|
||||
BYTE m_bWindow; // 현재 아이템이 위치한 윈도우
|
||||
DWORD m_dwID; // 고유번호
|
||||
bool m_bEquipped; // 장착 되었는가?
|
||||
BYTE m_bWindow; // 현재 아이템이 위치한 윈도우
|
||||
DWORD m_dwID; // 고유번호
|
||||
bool m_bEquipped; // 장착 되었는가?
|
||||
DWORD m_dwVID; // VID
|
||||
WORD m_wCell; // 위치
|
||||
DWORD m_dwCount; // 개수
|
||||
int m_lFlag; // 추가 flag
|
||||
DWORD m_dwLastOwnerPID; // 마지막 가지고 있었던 사람의 PID
|
||||
WORD m_wCell; // 위치
|
||||
DWORD m_dwCount; // 개수
|
||||
int m_lFlag; // 추가 flag
|
||||
DWORD m_dwLastOwnerPID; // 마지막 가지고 있었던 사람의 PID
|
||||
|
||||
bool m_bExchanging; ///< 현재 교환중 상태
|
||||
bool m_bExchanging; ///< 현재 교환중 상태
|
||||
|
||||
int m_alSockets[ITEM_SOCKET_MAX_NUM]; // 아이템 소캣
|
||||
int m_alSockets[ITEM_SOCKET_MAX_NUM]; // 아이템 소캣
|
||||
TPlayerItemAttribute m_aAttr[ITEM_ATTRIBUTE_MAX_NUM];
|
||||
|
||||
LPEVENT m_pkDestroyEvent;
|
||||
|
|
|
@ -5,9 +5,9 @@
|
|||
#include "pool.h"
|
||||
#endif
|
||||
|
||||
// special_item_group.txt에서 정의하는 속성 그룹
|
||||
// type attr로 선언할 수 있다.
|
||||
// 이 속성 그룹을 이용할 수 있는 것은 special_item_group.txt에서 Special type으로 정의된 그룹에 속한 UNIQUE ITEM이다.
|
||||
// special_item_group.txt에서 정의하는 속성 그룹
|
||||
// type attr로 선언할 수 있다.
|
||||
// 이 속성 그룹을 이용할 수 있는 것은 special_item_group.txt에서 Special type으로 정의된 그룹에 속한 UNIQUE ITEM이다.
|
||||
class CSpecialAttrGroup
|
||||
{
|
||||
public:
|
||||
|
@ -43,10 +43,10 @@ class CSpecialItemGroup
|
|||
MOB_GROUP,
|
||||
};
|
||||
|
||||
// QUEST 타입은 퀘스트 스크립트에서 vnum.sig_use를 사용할 수 있는 그룹이다.
|
||||
// 단, 이 그룹에 들어가기 위해서는 ITEM 자체의 TYPE이 QUEST여야 한다.
|
||||
// SPECIAL 타입은 idx, item_vnum, attr_vnum을 입력한다. attr_vnum은 위에 CSpecialAttrGroup의 Vnum이다.
|
||||
// 이 그룹에 들어있는 아이템은 같이 착용할 수 없다.
|
||||
// QUEST 타입은 퀘스트 스크립트에서 vnum.sig_use를 사용할 수 있는 그룹이다.
|
||||
// 단, 이 그룹에 들어가기 위해서는 ITEM 자체의 TYPE이 QUEST여야 한다.
|
||||
// SPECIAL 타입은 idx, item_vnum, attr_vnum을 입력한다. attr_vnum은 위에 CSpecialAttrGroup의 Vnum이다.
|
||||
// 이 그룹에 들어있는 아이템은 같이 착용할 수 없다.
|
||||
enum ESIGType { NORMAL, PCT, QUEST, SPECIAL };
|
||||
|
||||
struct CSpecialItemInfo
|
||||
|
@ -79,9 +79,9 @@ class CSpecialItemGroup
|
|||
return m_vecProbs.empty();
|
||||
}
|
||||
|
||||
// Type Multi, 즉 m_bType == PCT 인 경우,
|
||||
// 확률을 더해가지 않고, 독립적으로 계산하여 아이템을 생성한다.
|
||||
// 따라서 여러 개의 아이템이 생성될 수 있다.
|
||||
// Type Multi, 즉 m_bType == PCT 인 경우,
|
||||
// 확률을 더해가지 않고, 독립적으로 계산하여 아이템을 생성한다.
|
||||
// 따라서 여러 개의 아이템이 생성될 수 있다.
|
||||
// by rtsummit
|
||||
int GetMultiIndex(std::vector <int> &idx_vec) const
|
||||
{
|
||||
|
@ -143,8 +143,8 @@ class CSpecialItemGroup
|
|||
return false;
|
||||
}
|
||||
|
||||
// Group의 Type이 Special인 경우에
|
||||
// dwVnum에 매칭되는 AttrVnum을 return해준다.
|
||||
// Group의 Type이 Special인 경우에
|
||||
// dwVnum에 매칭되는 AttrVnum을 return해준다.
|
||||
DWORD GetAttrVnum(DWORD dwVnum) const
|
||||
{
|
||||
if (CSpecialItemGroup::SPECIAL != m_bType)
|
||||
|
@ -354,18 +354,18 @@ class ITEM_MANAGER : public singleton<ITEM_MANAGER>
|
|||
|
||||
bool Initialize(TItemTable * table, int size);
|
||||
void Destroy();
|
||||
void Update(); // 매 루프마다 부른다.
|
||||
void Update(); // 매 루프마다 부른다.
|
||||
void GracefulShutdown();
|
||||
|
||||
DWORD GetNewID();
|
||||
bool SetMaxItemID(TItemIDRangeTable range); // 최대 고유 아이디를 지정
|
||||
bool SetMaxItemID(TItemIDRangeTable range); // 최대 고유 아이디를 지정
|
||||
bool SetMaxSpareItemID(TItemIDRangeTable range);
|
||||
|
||||
// DelayedSave: 어떠한 루틴 내에서 저장을 해야 할 짓을 많이 하면 저장
|
||||
// 쿼리가 너무 많아지므로 "저장을 한다" 라고 표시만 해두고 잠깐
|
||||
// (예: 1 frame) 후에 저장시킨다.
|
||||
// DelayedSave: 어떠한 루틴 내에서 저장을 해야 할 짓을 많이 하면 저장
|
||||
// 쿼리가 너무 많아지므로 "저장을 한다" 라고 표시만 해두고 잠깐
|
||||
// (예: 1 frame) 후에 저장시킨다.
|
||||
void DelayedSave(LPITEM item);
|
||||
void FlushDelayedSave(LPITEM item); // Delayed 리스트에 있다면 지우고 저장한다. 끊김 처리시 사용 됨.
|
||||
void FlushDelayedSave(LPITEM item); // Delayed 리스트에 있다면 지우고 저장한다. 끊김 처리시 사용 됨.
|
||||
void SaveSingleItem(LPITEM item);
|
||||
|
||||
LPITEM CreateItem(DWORD vnum, DWORD count = 1, DWORD dwID = 0, bool bTryMagic = false, int iRarePct = -1, bool bSkipSave = false);
|
||||
|
@ -374,7 +374,7 @@ class ITEM_MANAGER : public singleton<ITEM_MANAGER>
|
|||
#else
|
||||
void DestroyItem(LPITEM item, const char* file, size_t line);
|
||||
#endif
|
||||
void RemoveItem(LPITEM item, const char * c_pszReason=NULL); // 사용자로 부터 아이템을 제거
|
||||
void RemoveItem(LPITEM item, const char * c_pszReason=NULL); // 사용자로 부터 아이템을 제거
|
||||
|
||||
LPITEM Find(DWORD id);
|
||||
LPITEM FindByVID(DWORD vid);
|
||||
|
@ -397,7 +397,7 @@ class ITEM_MANAGER : public singleton<ITEM_MANAGER>
|
|||
|
||||
DWORD GetRefineFromVnum(DWORD dwVnum);
|
||||
|
||||
static void CopyAllAttrTo(LPITEM pkOldItem, LPITEM pkNewItem); // pkNewItem으로 모든 속성과 소켓 값들을 목사하는 함수.
|
||||
static void CopyAllAttrTo(LPITEM pkOldItem, LPITEM pkNewItem); // pkNewItem으로 모든 속성과 소켓 값들을 목사하는 함수.
|
||||
|
||||
|
||||
const CSpecialItemGroup* GetSpecialItemGroup(DWORD dwVnum);
|
||||
|
@ -421,8 +421,8 @@ class ITEM_MANAGER : public singleton<ITEM_MANAGER>
|
|||
std::map<DWORD, DWORD> m_map_ItemRefineFrom;
|
||||
int m_iTopOfTable;
|
||||
|
||||
ITEM_VID_MAP m_VIDMap; ///< m_dwVIDCount 의 값단위로 아이템을 저장한다.
|
||||
DWORD m_dwVIDCount; ///< 이녀석 VID가 아니라 그냥 프로세스 단위 유니크 번호다.
|
||||
ITEM_VID_MAP m_VIDMap; ///< m_dwVIDCount 의 값단위로 아이템을 저장한다.
|
||||
DWORD m_dwVIDCount; ///< 이녀석 VID가 아니라 그냥 프로세스 단위 유니크 번호다.
|
||||
DWORD m_dwCurrentID;
|
||||
TItemIDRangeTable m_ItemIDRange;
|
||||
TItemIDRangeTable m_ItemIDSpareRange;
|
||||
|
@ -443,15 +443,15 @@ class ITEM_MANAGER : public singleton<ITEM_MANAGER>
|
|||
// END_OF_CHECK_UNIQUE_GROUP
|
||||
|
||||
private:
|
||||
// 독일에서 기존 캐시 아이템과 같지만, 교환 가능한 캐시 아이템을 만든다고 하여,
|
||||
// 오리지널 아이템에 교환 금지 플래그만 삭제한 새로운 아이템들을 만들어,
|
||||
// 새로운 아이템 대역을 할당하였다.
|
||||
// 문제는 새로운 아이템도 오리지널 아이템과 같은 효과를 내야하는데,
|
||||
// 서버건, 클라건, vnum 기반으로 되어있어
|
||||
// 새로운 vnum을 죄다 서버에 새로 다 박아야하는 안타까운 상황에 맞닿았다.
|
||||
// 그래서 새 vnum의 아이템이면, 서버에서 돌아갈 때는 오리지널 아이템 vnum으로 바꿔서 돌고 하고,
|
||||
// 저장할 때에 본래 vnum으로 바꿔주도록 한다.
|
||||
// 이를 위해 오리지널 vnum과 새로운 vnum을 연결시켜주는 맵을 만듦.
|
||||
// 독일에서 기존 캐시 아이템과 같지만, 교환 가능한 캐시 아이템을 만든다고 하여,
|
||||
// 오리지널 아이템에 교환 금지 플래그만 삭제한 새로운 아이템들을 만들어,
|
||||
// 새로운 아이템 대역을 할당하였다.
|
||||
// 문제는 새로운 아이템도 오리지널 아이템과 같은 효과를 내야하는데,
|
||||
// 서버건, 클라건, vnum 기반으로 되어있어
|
||||
// 새로운 vnum을 죄다 서버에 새로 다 박아야하는 안타까운 상황에 맞닿았다.
|
||||
// 그래서 새 vnum의 아이템이면, 서버에서 돌아갈 때는 오리지널 아이템 vnum으로 바꿔서 돌고 하고,
|
||||
// 저장할 때에 본래 vnum으로 바꿔주도록 한다.
|
||||
// 이를 위해 오리지널 vnum과 새로운 vnum을 연결시켜주는 맵을 만듦.
|
||||
typedef std::map <DWORD, DWORD> TMapDW2DW;
|
||||
TMapDW2DW m_map_new_to_ori;
|
||||
|
||||
|
|
|
@ -22,10 +22,10 @@ class MessengerManager : public singleton<MessengerManager>
|
|||
void RequestToAdd(LPCHARACTER ch, LPCHARACTER target);
|
||||
void AuthToAdd(keyA account, keyA companion, bool bDeny);
|
||||
|
||||
void __AddToList(keyA account, keyA companion); // 실제 m_Relation, m_InverseRelation 수정하는 메소드
|
||||
void __AddToList(keyA account, keyA companion); // 실제 m_Relation, m_InverseRelation 수정하는 메소드
|
||||
void AddToList(keyA account, keyA companion);
|
||||
|
||||
void __RemoveFromList(keyA account, keyA companion); // 실제 m_Relation, m_InverseRelation 수정하는 메소드
|
||||
void __RemoveFromList(keyA account, keyA companion); // 실제 m_Relation, m_InverseRelation 수정하는 메소드
|
||||
void RemoveFromList(keyA account, keyA companion);
|
||||
|
||||
void RemoveAllList(keyA account);
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
|
||||
typedef struct SMobSplashAttackInfo
|
||||
{
|
||||
DWORD dwTiming; // 스킬 사용 후 실제로 데미지 먹힐때까지 기다리는 시간 (ms)
|
||||
DWORD dwHitDistance; // 스킬 사용시 실제로 스킬 계산이 되는 거리 (전방 몇cm)
|
||||
DWORD dwTiming; // 스킬 사용 후 실제로 데미지 먹힐때까지 기다리는 시간 (ms)
|
||||
DWORD dwHitDistance; // 스킬 사용시 실제로 스킬 계산이 되는 거리 (전방 몇cm)
|
||||
|
||||
SMobSplashAttackInfo(DWORD dwTiming, DWORD dwHitDistance)
|
||||
: dwTiming(dwTiming)
|
||||
|
@ -37,8 +37,8 @@ class CMobInstance
|
|||
public:
|
||||
CMobInstance();
|
||||
|
||||
PIXEL_POSITION m_posLastAttacked; // 마지막 맞은 위치
|
||||
DWORD m_dwLastAttackedTime; // 마지막 맞은 시간
|
||||
PIXEL_POSITION m_posLastAttacked; // 마지막 맞은 위치
|
||||
DWORD m_dwLastAttackedTime; // 마지막 맞은 시간
|
||||
DWORD m_dwLastWarpTime;
|
||||
|
||||
bool m_IsBerserk;
|
||||
|
|
|
@ -49,11 +49,11 @@ class CMonarch : public singleton<CMonarch>
|
|||
private:
|
||||
TMonarchInfo m_MonarchInfo;
|
||||
|
||||
int m_PowerUp[4]; ///< 군주의 사자후
|
||||
int m_DefenseUp[4]; ///< 군주의 금강권
|
||||
int m_PowerUp[4]; ///< 군주의 사자후
|
||||
int m_DefenseUp[4]; ///< 군주의 금강권
|
||||
|
||||
int m_PowerUpCT[4]; ///< 군주의 사자후
|
||||
int m_DefenseUpCT[4]; ///< 군주의 금강권
|
||||
int m_PowerUpCT[4]; ///< 군주의 사자후
|
||||
int m_DefenseUpCT[4]; ///< 군주의 금강권
|
||||
};
|
||||
|
||||
bool IsMonarchWarpZone (int map_idx);
|
||||
|
|
|
@ -18,40 +18,40 @@ enum EMotionMode
|
|||
|
||||
enum EPublicMotion
|
||||
{
|
||||
MOTION_NONE, // 0 없음
|
||||
MOTION_WAIT, // 1 대기 (00.msa)
|
||||
MOTION_WALK, // 2 걷기 (02.msa)
|
||||
MOTION_RUN, // 3 뛰기 (03.msa)
|
||||
MOTION_CHANGE_WEAPON, // 4 무기바꾸기
|
||||
MOTION_DAMAGE, // 5 정면맞기 (30.msa)
|
||||
MOTION_DAMAGE_FLYING, // 6 정면날아가기 (32.msa)
|
||||
MOTION_STAND_UP, // 7 정면일어나기 (33.msa)
|
||||
MOTION_DAMAGE_BACK, // 8 후면맞기 (34.msa)
|
||||
MOTION_DAMAGE_FLYING_BACK, // 9 후면날아가기 (35.msa)
|
||||
MOTION_STAND_UP_BACK, // 10 후면일어나기 (26.msa)
|
||||
MOTION_DEAD, // 11 죽기 (31.msa)
|
||||
MOTION_DEAD_BACK, // 12 후면죽기 (37.msa)
|
||||
MOTION_NORMAL_ATTACK, // 13 기본 공격
|
||||
MOTION_COMBO_ATTACK_1, // 14 콤보 공격
|
||||
MOTION_COMBO_ATTACK_2, // 15 콤보 공격
|
||||
MOTION_COMBO_ATTACK_3, // 16 콤보 공격
|
||||
MOTION_COMBO_ATTACK_4, // 17 콤보 공격
|
||||
MOTION_COMBO_ATTACK_5, // 18 콤보 공격
|
||||
MOTION_COMBO_ATTACK_6, // 19 콤보 공격
|
||||
MOTION_COMBO_ATTACK_7, // 20 콤보 공격
|
||||
MOTION_COMBO_ATTACK_8, // 21 콤보 공격
|
||||
MOTION_INTRO_WAIT, // 22 선택화면 대기
|
||||
MOTION_INTRO_SELECTED, // 23 선택화면 선택
|
||||
MOTION_INTRO_NOT_SELECTED, // 24 선택화면 비선택
|
||||
MOTION_SPAWN, // 25 소환
|
||||
MOTION_FISHING_THROW, // 26 낚시 던지기
|
||||
MOTION_FISHING_WAIT, // 27 낚시 대기
|
||||
MOTION_FISHING_STOP, // 28 낚시 그만두기
|
||||
MOTION_FISHING_REACT, // 29 낚시 반응
|
||||
MOTION_FISHING_CATCH, // 30 낚시 잡기
|
||||
MOTION_FISHING_FAIL, // 31 낚시 실패
|
||||
MOTION_STOP, // 32 말 멈추기
|
||||
MOTION_SPECIAL_1, // 33 몬스터 스킬
|
||||
MOTION_NONE, // 0 없음
|
||||
MOTION_WAIT, // 1 대기 (00.msa)
|
||||
MOTION_WALK, // 2 걷기 (02.msa)
|
||||
MOTION_RUN, // 3 뛰기 (03.msa)
|
||||
MOTION_CHANGE_WEAPON, // 4 무기바꾸기
|
||||
MOTION_DAMAGE, // 5 정면맞기 (30.msa)
|
||||
MOTION_DAMAGE_FLYING, // 6 정면날아가기 (32.msa)
|
||||
MOTION_STAND_UP, // 7 정면일어나기 (33.msa)
|
||||
MOTION_DAMAGE_BACK, // 8 후면맞기 (34.msa)
|
||||
MOTION_DAMAGE_FLYING_BACK, // 9 후면날아가기 (35.msa)
|
||||
MOTION_STAND_UP_BACK, // 10 후면일어나기 (26.msa)
|
||||
MOTION_DEAD, // 11 죽기 (31.msa)
|
||||
MOTION_DEAD_BACK, // 12 후면죽기 (37.msa)
|
||||
MOTION_NORMAL_ATTACK, // 13 기본 공격
|
||||
MOTION_COMBO_ATTACK_1, // 14 콤보 공격
|
||||
MOTION_COMBO_ATTACK_2, // 15 콤보 공격
|
||||
MOTION_COMBO_ATTACK_3, // 16 콤보 공격
|
||||
MOTION_COMBO_ATTACK_4, // 17 콤보 공격
|
||||
MOTION_COMBO_ATTACK_5, // 18 콤보 공격
|
||||
MOTION_COMBO_ATTACK_6, // 19 콤보 공격
|
||||
MOTION_COMBO_ATTACK_7, // 20 콤보 공격
|
||||
MOTION_COMBO_ATTACK_8, // 21 콤보 공격
|
||||
MOTION_INTRO_WAIT, // 22 선택화면 대기
|
||||
MOTION_INTRO_SELECTED, // 23 선택화면 선택
|
||||
MOTION_INTRO_NOT_SELECTED, // 24 선택화면 비선택
|
||||
MOTION_SPAWN, // 25 소환
|
||||
MOTION_FISHING_THROW, // 26 낚시 던지기
|
||||
MOTION_FISHING_WAIT, // 27 낚시 대기
|
||||
MOTION_FISHING_STOP, // 28 낚시 그만두기
|
||||
MOTION_FISHING_REACT, // 29 낚시 반응
|
||||
MOTION_FISHING_CATCH, // 30 낚시 잡기
|
||||
MOTION_FISHING_FAIL, // 31 낚시 실패
|
||||
MOTION_STOP, // 32 말 멈추기
|
||||
MOTION_SPECIAL_1, // 33 몬스터 스킬
|
||||
MOTION_SPECIAL_2, // 34
|
||||
MOTION_SPECIAL_3, // 35
|
||||
MOTION_SPECIAL_4, // 36
|
||||
|
|
|
@ -24,19 +24,19 @@ class P2P_MANAGER : public singleton<P2P_MANAGER>
|
|||
P2P_MANAGER();
|
||||
~P2P_MANAGER();
|
||||
|
||||
// 아래 Register* Unregister* pair들은 내부적으로 사실 같은 루틴을 사용한다.
|
||||
// 단지 명시적으로 표시하기 위한 것
|
||||
// 아래 Register* Unregister* pair들은 내부적으로 사실 같은 루틴을 사용한다.
|
||||
// 단지 명시적으로 표시하기 위한 것
|
||||
void RegisterAcceptor(LPDESC d);
|
||||
void UnregisterAcceptor(LPDESC d);
|
||||
|
||||
void RegisterConnector(LPDESC d);
|
||||
void UnregisterConnector(LPDESC d);
|
||||
|
||||
void EraseUserByDesc(LPDESC d); // 해당 desc에 있는 유저들을 지운다.
|
||||
void EraseUserByDesc(LPDESC d); // 해당 desc에 있는 유저들을 지운다.
|
||||
|
||||
void FlushOutput();
|
||||
|
||||
void Boot(LPDESC d); // p2p 처리에 필요한 정보를 보내준다. (전 캐릭터의 로그인 정보 등)
|
||||
void Boot(LPDESC d); // p2p 처리에 필요한 정보를 보내준다. (전 캐릭터의 로그인 정보 등)
|
||||
|
||||
void Send(const void * c_pvData, int iSize, LPDESC except = NULL);
|
||||
|
||||
|
|
|
@ -45,14 +45,14 @@ enum
|
|||
HEADER_CG_ITEM_USE_TO_ITEM = 60,
|
||||
HEADER_CG_TARGET = 61,
|
||||
|
||||
HEADER_CG_TEXT = 64, // @ 로 시작되면 텍스트를 파싱한다.
|
||||
HEADER_CG_TEXT = 64, // @ 로 시작되면 텍스트를 파싱한다.
|
||||
HEADER_CG_WARP = 65,
|
||||
HEADER_CG_SCRIPT_BUTTON = 66,
|
||||
HEADER_CG_MESSENGER = 67,
|
||||
|
||||
HEADER_CG_MALL_CHECKOUT = 69,
|
||||
HEADER_CG_SAFEBOX_CHECKIN = 70, // 아이템을 창고에 넣??는다.
|
||||
HEADER_CG_SAFEBOX_CHECKOUT = 71, // 아이템을 창고로 부터 빼온다.
|
||||
HEADER_CG_SAFEBOX_CHECKIN = 70, // 아이템을 창고에 넣??는다.
|
||||
HEADER_CG_SAFEBOX_CHECKOUT = 71, // 아이템을 창고로 부터 빼온다.
|
||||
|
||||
HEADER_CG_PARTY_INVITE = 72,
|
||||
HEADER_CG_PARTY_INVITE_ANSWER = 73,
|
||||
|
@ -93,10 +93,10 @@ enum
|
|||
// HEADER_CG_ROULETTE = 200,
|
||||
// HEADER_CG_RUNUP_MATRIX_ANSWER = 201,
|
||||
|
||||
//NOTE : 이런 개XXX 정말 이거 Packet설계한 사람은 누구냐. 이렇게 코딩하고 밥이 넘어가나.
|
||||
//enum을 별도로 구별을 하던가. 아님 namepsace로 구별을 하던가..
|
||||
//정말 packet generator까지는 바라지도 않는다. 이런 씨XX
|
||||
//이러다가 숫자 겹치면 누가 책임지는데???
|
||||
//NOTE : 이런 개XXX 정말 이거 Packet설계한 사람은 누구냐. 이렇게 코딩하고 밥이 넘어가나.
|
||||
//enum을 별도로 구별을 하던가. 아님 namepsace로 구별을 하던가..
|
||||
//정말 packet generator까지는 바라지도 않는다. 이런 씨XX
|
||||
//이러다가 숫자 겹치면 누가 책임지는데???
|
||||
|
||||
HEADER_CG_DRAGON_SOUL_REFINE = 205,
|
||||
HEADER_CG_STATE_CHECKER = 206,
|
||||
|
@ -286,7 +286,7 @@ enum
|
|||
HEADER_GG_NOTICE = 4,
|
||||
HEADER_GG_SHUTDOWN = 5,
|
||||
HEADER_GG_GUILD = 6,
|
||||
HEADER_GG_DISCONNECT = 7, // 누군가의 접속을 강제로 끊을 때
|
||||
HEADER_GG_DISCONNECT = 7, // 누군가의 접속을 강제로 끊을 때
|
||||
HEADER_GG_SHOUT = 8,
|
||||
HEADER_GG_SETUP = 9,
|
||||
HEADER_GG_MESSENGER_ADD = 10,
|
||||
|
@ -454,8 +454,8 @@ typedef struct SPacketGGMessengerMobile
|
|||
typedef struct SPacketGGFindPosition
|
||||
{
|
||||
BYTE header;
|
||||
DWORD dwFromPID; // 저 위치로 워프하려는 사람
|
||||
DWORD dwTargetPID; // 찾는 사람
|
||||
DWORD dwFromPID; // 저 위치로 워프하려는 사람
|
||||
DWORD dwTargetPID; // 찾는 사람
|
||||
} TPacketGGFindPosition;
|
||||
|
||||
typedef struct SPacketGGWarpCharacter
|
||||
|
@ -496,14 +496,14 @@ typedef struct SPacketGGBlockChat
|
|||
LONG lBlockDuration;
|
||||
} TPacketGGBlockChat;
|
||||
|
||||
/* 클라이언트 측에서 보내는 패킷 */
|
||||
/* 클라이언트 측에서 보내는 패킷 */
|
||||
|
||||
typedef struct command_text
|
||||
{
|
||||
BYTE bHeader;
|
||||
} TPacketCGText;
|
||||
|
||||
/* 로그인 (1) */
|
||||
/* 로그인 (1) */
|
||||
typedef struct command_handshake
|
||||
{
|
||||
BYTE bHeader;
|
||||
|
@ -587,7 +587,7 @@ typedef struct command_player_create_success
|
|||
TSimplePlayer player;
|
||||
} TPacketGCPlayerCreateSuccess;
|
||||
|
||||
// 공격
|
||||
// 공격
|
||||
typedef struct command_attack
|
||||
{
|
||||
BYTE bHeader;
|
||||
|
@ -609,7 +609,7 @@ enum EMoveFuncType
|
|||
FUNC_SKILL = 0x80,
|
||||
};
|
||||
|
||||
// 이동
|
||||
// 이동
|
||||
typedef struct command_move
|
||||
{
|
||||
BYTE bHeader;
|
||||
|
@ -628,22 +628,22 @@ typedef struct command_sync_position_element
|
|||
LONG lY;
|
||||
} TPacketCGSyncPositionElement;
|
||||
|
||||
// 위치 동기화
|
||||
typedef struct command_sync_position // 가변 패킷
|
||||
// 위치 동기화
|
||||
typedef struct command_sync_position // 가변 패킷
|
||||
{
|
||||
BYTE bHeader;
|
||||
WORD wSize;
|
||||
} TPacketCGSyncPosition;
|
||||
|
||||
/* 채팅 (3) */
|
||||
typedef struct command_chat // 가변 패킷
|
||||
/* 채팅 (3) */
|
||||
typedef struct command_chat // 가변 패킷
|
||||
{
|
||||
BYTE header;
|
||||
WORD size;
|
||||
BYTE type;
|
||||
} TPacketCGChat;
|
||||
|
||||
/* 귓속말 */
|
||||
/* 귓속말 */
|
||||
typedef struct command_whisper
|
||||
{
|
||||
BYTE bHeader;
|
||||
|
@ -803,7 +803,7 @@ typedef struct command_quest_confirm
|
|||
} TPacketCGQuestConfirm;
|
||||
|
||||
/*
|
||||
* 서버 측에서 보내는 패킷
|
||||
* 서버 측에서 보내는 패킷
|
||||
*/
|
||||
typedef struct packet_quest_confirm
|
||||
{
|
||||
|
@ -919,7 +919,7 @@ typedef struct packet_add_char
|
|||
BYTE bAttackSpeed;
|
||||
|
||||
BYTE bStateFlag;
|
||||
DWORD dwAffectFlag[2]; // 효과
|
||||
DWORD dwAffectFlag[2]; // 효과
|
||||
} TPacketGCCharacterAdd;
|
||||
|
||||
typedef struct packet_char_additional_info
|
||||
|
@ -981,7 +981,7 @@ typedef struct packet_del_char
|
|||
DWORD id;
|
||||
} TPacketGCCharacterDelete;
|
||||
|
||||
typedef struct packet_chat // 가변 패킷
|
||||
typedef struct packet_chat // 가변 패킷
|
||||
{
|
||||
BYTE header;
|
||||
WORD size;
|
||||
|
@ -990,7 +990,7 @@ typedef struct packet_chat //
|
|||
BYTE bEmpire;
|
||||
} TPacketGCChat;
|
||||
|
||||
typedef struct packet_whisper // 가변 패킷
|
||||
typedef struct packet_whisper // 가변 패킷
|
||||
{
|
||||
BYTE bHeader;
|
||||
WORD wSize;
|
||||
|
@ -1214,7 +1214,7 @@ typedef struct packet_shop_start
|
|||
struct packet_shop_item items[SHOP_HOST_ITEM_MAX_NUM];
|
||||
} TPacketGCShopStart;
|
||||
|
||||
typedef struct packet_shop_start_ex // 다음에 TSubPacketShopTab* shop_tabs 이 따라옴.
|
||||
typedef struct packet_shop_start_ex // 다음에 TSubPacketShopTab* shop_tabs 이 따라옴.
|
||||
{
|
||||
typedef struct sub_packet_shop_tab
|
||||
{
|
||||
|
@ -1237,7 +1237,7 @@ typedef struct packet_shop_update_price
|
|||
INT iPrice;
|
||||
} TPacketGCShopUpdatePrice;
|
||||
|
||||
typedef struct packet_shop // 가변 패킷
|
||||
typedef struct packet_shop // 가변 패킷
|
||||
{
|
||||
BYTE header;
|
||||
WORD size;
|
||||
|
@ -1317,7 +1317,7 @@ typedef struct packet_move
|
|||
DWORD dwDuration;
|
||||
} TPacketGCMove;
|
||||
|
||||
// 소유권
|
||||
// 소유권
|
||||
typedef struct packet_ownership
|
||||
{
|
||||
BYTE bHeader;
|
||||
|
@ -1325,7 +1325,7 @@ typedef struct packet_ownership
|
|||
DWORD dwVictimVID;
|
||||
} TPacketGCOwnership;
|
||||
|
||||
// 위치 동기화 패킷의 bCount 만큼 붙는 단위
|
||||
// 위치 동기화 패킷의 bCount 만큼 붙는 단위
|
||||
typedef struct packet_sync_position_element
|
||||
{
|
||||
DWORD dwVID;
|
||||
|
@ -1333,11 +1333,11 @@ typedef struct packet_sync_position_element
|
|||
LONG lY;
|
||||
} TPacketGCSyncPositionElement;
|
||||
|
||||
// 위치 동기화
|
||||
typedef struct packet_sync_position // 가변 패킷
|
||||
// 위치 동기화
|
||||
typedef struct packet_sync_position // 가변 패킷
|
||||
{
|
||||
BYTE bHeader;
|
||||
WORD wSize; // 개수 = (wSize - sizeof(TPacketGCSyncPosition)) / sizeof(TPacketGCSyncPositionElement)
|
||||
WORD wSize; // 개수 = (wSize - sizeof(TPacketGCSyncPosition)) / sizeof(TPacketGCSyncPositionElement)
|
||||
} TPacketGCSyncPosition;
|
||||
|
||||
typedef struct packet_fly
|
||||
|
@ -1372,7 +1372,7 @@ typedef struct packet_shoot
|
|||
typedef struct packet_duel_start
|
||||
{
|
||||
BYTE header;
|
||||
WORD wSize; // DWORD가 몇개? 개수 = (wSize - sizeof(TPacketGCPVPList)) / 4
|
||||
WORD wSize; // DWORD가 몇개? 개수 = (wSize - sizeof(TPacketGCPVPList)) / 4
|
||||
} TPacketGCDuelStart;
|
||||
|
||||
enum EPVPModes
|
||||
|
@ -1388,7 +1388,7 @@ typedef struct packet_pvp
|
|||
BYTE bHeader;
|
||||
DWORD dwVIDSrc;
|
||||
DWORD dwVIDDst;
|
||||
BYTE bMode; // 0 이면 끔, 1이면 켬
|
||||
BYTE bMode; // 0 이면 끔, 1이면 켬
|
||||
} TPacketGCPVP;
|
||||
|
||||
typedef struct command_use_skill
|
||||
|
@ -1785,7 +1785,7 @@ typedef struct packet_mark_idxlist
|
|||
BYTE header;
|
||||
DWORD bufSize;
|
||||
WORD count;
|
||||
//뒤에 size * (WORD + WORD)만큼 데이터 붙음
|
||||
//뒤에 size * (WORD + WORD)만큼 데이터 붙음
|
||||
} TPacketGCMarkIDXList;
|
||||
|
||||
typedef struct packet_mark_block
|
||||
|
@ -1794,7 +1794,7 @@ typedef struct packet_mark_block
|
|||
DWORD bufSize;
|
||||
BYTE imgIdx;
|
||||
DWORD count;
|
||||
// 뒤에 64 x 48 x 픽셀크기(4바이트) = 12288만큼 데이터 붙음
|
||||
// 뒤에 64 x 48 x 픽셀크기(4바이트) = 12288만큼 데이터 붙음
|
||||
} TPacketGCMarkBlock;
|
||||
|
||||
typedef struct command_symbol_upload
|
||||
|
@ -1933,8 +1933,8 @@ typedef struct SPacketGCRefineInformaion
|
|||
DWORD src_vnum;
|
||||
DWORD result_vnum;
|
||||
BYTE material_count;
|
||||
INT cost; // 소요 비용
|
||||
INT prob; // 확률
|
||||
INT cost; // 소요 비용
|
||||
INT prob; // 확률
|
||||
TRefineMaterial materials[REFINE_MATERIAL_MAX_NUM];
|
||||
} TPacketGCRefineInformation;
|
||||
|
||||
|
@ -2149,13 +2149,13 @@ typedef struct SPacketGCPanamaPack
|
|||
BYTE abIV[32];
|
||||
} TPacketGCPanamaPack;
|
||||
|
||||
//TODO : 아우 짱나..가변패킷 사이즈 받아들일수 있게 패킷 핸들러 Refactoring 하자.
|
||||
//TODO : 아우 짱나..가변패킷 사이즈 받아들일수 있게 패킷 핸들러 Refactoring 하자.
|
||||
typedef struct SPacketGCHybridCryptKeys
|
||||
{
|
||||
SPacketGCHybridCryptKeys() : m_pStream(NULL) {}
|
||||
~SPacketGCHybridCryptKeys()
|
||||
{
|
||||
//GCC 에선 NULL delete 해도 괜찮나? 일단 안전하게 NULL 체크 하자. ( 근데 이거 C++ 표준아니었나 --a )
|
||||
//GCC 에선 NULL delete 해도 괜찮나? 일단 안전하게 NULL 체크 하자. ( 근데 이거 C++ 표준아니었나 --a )
|
||||
if( m_pStream )
|
||||
{
|
||||
delete[] m_pStream;
|
||||
|
@ -2188,7 +2188,7 @@ typedef struct SPacketGCHybridCryptKeys
|
|||
}
|
||||
|
||||
BYTE bHeader;
|
||||
WORD uDynamicPacketSize; // 빌어먹을 클라 DynamicPacketHeader 구조때문에 맞춰줘야한다 -_-;
|
||||
WORD uDynamicPacketSize; // 빌어먹을 클라 DynamicPacketHeader 구조때문에 맞춰줘야한다 -_-;
|
||||
INT KeyStreamLen;
|
||||
BYTE* pDataKeyStream;
|
||||
|
||||
|
@ -2236,7 +2236,7 @@ typedef struct SPacketGCPackageSDB
|
|||
}
|
||||
|
||||
BYTE bHeader;
|
||||
WORD uDynamicPacketSize; // 빌어먹을 클라 DynamicPacketHeader 구조때문에 맞춰줘야한다 -_-;
|
||||
WORD uDynamicPacketSize; // 빌어먹을 클라 DynamicPacketHeader 구조때문에 맞춰줘야한다 -_-;
|
||||
INT iStreamLen;
|
||||
BYTE* m_pDataSDBStream;
|
||||
|
||||
|
@ -2254,7 +2254,7 @@ typedef struct SPacketGCSpecificEffect
|
|||
char effect_file[MAX_EFFECT_FILE_NAME];
|
||||
} TPacketGCSpecificEffect;
|
||||
|
||||
// 용혼석
|
||||
// 용혼석
|
||||
enum EDragonSoulRefineWindowRefineType
|
||||
{
|
||||
DragonSoulRefineWindow_UPGRADE,
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
enum // unit : minute
|
||||
{
|
||||
PARTY_ENOUGH_MINUTE_FOR_EXP_BONUS = 60, // 파티 결성 후 60분 후 부터 추가 경험치 보너스
|
||||
PARTY_ENOUGH_MINUTE_FOR_EXP_BONUS = 60, // 파티 결성 후 60분 후 부터 추가 경험치 보너스
|
||||
PARTY_HEAL_COOLTIME_LONG = 60,
|
||||
PARTY_HEAL_COOLTIME_SHORT = 30,
|
||||
PARTY_MAX_MEMBER = 8,
|
||||
|
@ -69,12 +69,12 @@ class CPartyManager : public singleton<CPartyManager>
|
|||
void P2PQuitParty(DWORD pid);
|
||||
|
||||
private:
|
||||
TPartyMap m_map_pkParty; // PID로 어느 파티에 있나 검색하기 위한 컨테이너
|
||||
TPartyMap m_map_pkMobParty; // Mob 파티는 PID 대신 VID 로 따로 관리한다.
|
||||
TPartyMap m_map_pkParty; // PID로 어느 파티에 있나 검색하기 위한 컨테이너
|
||||
TPartyMap m_map_pkMobParty; // Mob 파티는 PID 대신 VID 로 따로 관리한다.
|
||||
|
||||
TPCPartySet m_set_pkPCParty; // 사람들의 파티 전체 집합
|
||||
TPCPartySet m_set_pkPCParty; // 사람들의 파티 전체 집합
|
||||
|
||||
bool m_bEnablePCParty; // 디비가 켜져있지 않으면 사람들의 파티 상태가 변경불가
|
||||
bool m_bEnablePCParty; // 디비가 켜져있지 않으면 사람들의 파티 상태가 변경불가
|
||||
};
|
||||
|
||||
enum EPartyMessages
|
||||
|
@ -246,9 +246,9 @@ class CParty
|
|||
TFlagMap m_map_iFlag;
|
||||
|
||||
LPDUNGEON m_pkDungeon;
|
||||
// 아귀 동굴용 dungeon 멤버 변수.
|
||||
// 정말 이렇게까지 하고 싶진 않았는데, 던전에서 party 관리가 정말로 개판이라
|
||||
// 그거 고치기 전까지는 이렇게 임시로 해놓는다.
|
||||
// 아귀 동굴용 dungeon 멤버 변수.
|
||||
// 정말 이렇게까지 하고 싶진 않았는데, 던전에서 party 관리가 정말로 개판이라
|
||||
// 그거 고치기 전까지는 이렇게 임시로 해놓는다.
|
||||
LPDUNGEON m_pkDungeon_for_Only_party;
|
||||
public:
|
||||
void SetDungeon_for_Only_party(LPDUNGEON pDungeon);
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
#define __PRIV_MANAGER_H
|
||||
|
||||
/**
|
||||
* @version 05/06/08 Bang2ni - Guild privilege 관련 함수 지속 시간 추가
|
||||
* RequestGiveGuildPriv, GiveGuildPriv 함수 프로토타잎 수정
|
||||
* m_aPrivGuild 타잎 수정
|
||||
* 구조체 SPrivGuildData, 멤버 함수 GetPrivByGuildEx 추가
|
||||
* @version 05/06/08 Bang2ni - Guild privilege 관련 함수 지속 시간 추가
|
||||
* RequestGiveGuildPriv, GiveGuildPriv 함수 프로토타잎 수정
|
||||
* m_aPrivGuild 타잎 수정
|
||||
* 구조체 SPrivGuildData, 멤버 함수 GetPrivByGuildEx 추가
|
||||
*/
|
||||
class CPrivManager : public singleton<CPrivManager>
|
||||
{
|
||||
|
@ -38,18 +38,18 @@ class CPrivManager : public singleton<CPrivManager>
|
|||
|
||||
SPrivEmpireData* GetPrivByEmpireEx(BYTE bEmpire, BYTE type);
|
||||
|
||||
/// 길드 보너스 데이터
|
||||
/// 길드 보너스 데이터
|
||||
struct SPrivGuildData
|
||||
{
|
||||
int value; ///< 보너스 수치
|
||||
time_t end_time_sec; ///< 지속 시간
|
||||
int value; ///< 보너스 수치
|
||||
time_t end_time_sec; ///< 지속 시간
|
||||
};
|
||||
|
||||
/// 길드 보너스 데이터를 얻어온다.
|
||||
/// 길드 보너스 데이터를 얻어온다.
|
||||
/**
|
||||
* @param [in] dwGuildID 얻어올 길드의 ID
|
||||
* @param [in] byType 보너스 타잎
|
||||
* @return 대상 길드의 길드 보너스 데이터의 포인터, 해당하는 보너스 타잎과 길드의 ID 에 대해 보너스 데이터가 없을 경우 NULL
|
||||
* @param [in] dwGuildID 얻어올 길드의 ID
|
||||
* @param [in] byType 보너스 타잎
|
||||
* @return 대상 길드의 길드 보너스 데이터의 포인터, 해당하는 보너스 타잎과 길드의 ID 에 대해 보너스 데이터가 없을 경우 NULL
|
||||
*/
|
||||
const SPrivGuildData* GetPrivByGuildEx( DWORD dwGuildID, BYTE byType ) const;
|
||||
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
|
||||
class CHARACTER;
|
||||
|
||||
// CPVP에는 DWORD 아이디 두개를 받아서 m_dwCRC를 만들어서 가지고 있는다.
|
||||
// CPVPManager에서 이렇게 만든 CRC를 통해 검색한다.
|
||||
// CPVP에는 DWORD 아이디 두개를 받아서 m_dwCRC를 만들어서 가지고 있는다.
|
||||
// CPVPManager에서 이렇게 만든 CRC를 통해 검색한다.
|
||||
class CPVP
|
||||
{
|
||||
public:
|
||||
|
@ -26,8 +26,8 @@ class CPVP
|
|||
CPVP(CPVP & v);
|
||||
~CPVP();
|
||||
|
||||
void Win(DWORD dwPID); // dwPID가 이겼다!
|
||||
bool CanRevenge(DWORD dwPID); // dwPID가 복수할 수 있어?
|
||||
void Win(DWORD dwPID); // dwPID가 이겼다!
|
||||
bool CanRevenge(DWORD dwPID); // dwPID가 복수할 수 있어?
|
||||
bool IsFight();
|
||||
bool Agree(DWORD dwPID);
|
||||
|
||||
|
@ -57,7 +57,7 @@ class CPVPManager : public singleton<CPVPManager>
|
|||
|
||||
void Insert(LPCHARACTER pkChr, LPCHARACTER pkVictim);
|
||||
bool CanAttack(LPCHARACTER pkChr, LPCHARACTER pkVictim);
|
||||
bool Dead(LPCHARACTER pkChr, DWORD dwKillerPID); // PVP에 있었나 없었나를 리턴
|
||||
bool Dead(LPCHARACTER pkChr, DWORD dwKillerPID); // PVP에 있었나 없었나를 리턴
|
||||
void GiveUp(LPCHARACTER pkChr, DWORD dwKillerPID);
|
||||
void Connect(LPCHARACTER pkChr);
|
||||
void Disconnect(LPCHARACTER pkChr);
|
||||
|
|
|
@ -56,7 +56,7 @@ namespace quest
|
|||
bool RunState(QuestState& qs);
|
||||
|
||||
PC * GetPC(unsigned int pc);
|
||||
PC * GetPCForce(unsigned int pc); // 현재 PC를 바꾸지 않고 PC 포인터를 가져온다.
|
||||
PC * GetPCForce(unsigned int pc); // 현재 PC를 바꾸지 않고 PC 포인터를 가져온다.
|
||||
|
||||
unsigned int GetCurrentNPCRace();
|
||||
const string & GetCurrentQuestName();
|
||||
|
@ -106,7 +106,7 @@ namespace quest
|
|||
void Letter(DWORD pc);
|
||||
void Letter(DWORD pc, DWORD quest_index, int state);
|
||||
|
||||
void ItemInformer(unsigned int pc, unsigned int vnum); //독일선물기능
|
||||
void ItemInformer(unsigned int pc, unsigned int vnum); //독일선물기능
|
||||
|
||||
//
|
||||
|
||||
|
@ -254,7 +254,7 @@ namespace quest
|
|||
static bool ExecuteQuestScript(PC& pc, DWORD quest_index, const int state, const char* code, const int code_size, vector<AArgScript*>* pChatScripts = NULL, bool bUseCache = true);
|
||||
|
||||
|
||||
// begin_other_pc_blcok, end_other_pc_block을 위한 객체들.
|
||||
// begin_other_pc_blcok, end_other_pc_block을 위한 객체들.
|
||||
public:
|
||||
void BeginOtherPCBlock(DWORD pid);
|
||||
void EndOtherPCBlock();
|
||||
|
|
|
@ -21,13 +21,13 @@ namespace quest
|
|||
class NPC
|
||||
{
|
||||
public:
|
||||
// 인자가 없는 스크립트들
|
||||
// 인자가 없는 스크립트들
|
||||
// first: state number
|
||||
typedef map<int, AStateScriptType> AQuestScriptType;
|
||||
// first: quest number
|
||||
typedef map<unsigned int, AQuestScriptType> QuestMapType;
|
||||
|
||||
// 인자가 있는 스크립트들
|
||||
// 인자가 있는 스크립트들
|
||||
// first: state number
|
||||
typedef map<int, vector<AArgScript> > AArgQuestScriptType;
|
||||
// first: quest number
|
||||
|
@ -69,7 +69,7 @@ namespace quest
|
|||
bool OnChat(PC& pc);
|
||||
bool HasChat();
|
||||
|
||||
bool OnItemInformer(PC& pc,unsigned int vnum); // 독일 선물 기능 테스트
|
||||
bool OnItemInformer(PC& pc,unsigned int vnum); // 독일 선물 기능 테스트
|
||||
|
||||
bool OnTarget(PC& pc, DWORD dwQuestIndex, const char * c_pszTargetName, const char * c_pszVerb, bool & bRet);
|
||||
bool OnUnmount(PC& pc);
|
||||
|
|
|
@ -35,12 +35,12 @@ namespace quest
|
|||
enum
|
||||
{
|
||||
QUEST_SEND_ISBEGIN = (1 << 0),
|
||||
QUEST_SEND_TITLE = (1 << 1), // 30자 까지
|
||||
QUEST_SEND_CLOCK_NAME = (1 << 2), // 16자 까지
|
||||
QUEST_SEND_TITLE = (1 << 1), // 30자 까지
|
||||
QUEST_SEND_CLOCK_NAME = (1 << 2), // 16자 까지
|
||||
QUEST_SEND_CLOCK_VALUE = (1 << 3),
|
||||
QUEST_SEND_COUNTER_NAME = (1 << 4), // 16자 까지
|
||||
QUEST_SEND_COUNTER_NAME = (1 << 4), // 16자 까지
|
||||
QUEST_SEND_COUNTER_VALUE = (1 << 5),
|
||||
QUEST_SEND_ICON_FILE = (1 << 6), // 24자 까지
|
||||
QUEST_SEND_ICON_FILE = (1 << 6), // 24자 까지
|
||||
};
|
||||
|
||||
typedef map<unsigned int, QuestState> QuestInfo;
|
||||
|
@ -122,7 +122,7 @@ namespace quest
|
|||
bool IsLoaded() const { return m_bLoaded; }
|
||||
void SetLoaded() { m_bLoaded = true; }
|
||||
void Build();
|
||||
// DB에 저장
|
||||
// DB에 저장
|
||||
void Save();
|
||||
|
||||
bool HasReward() { return !m_vRewardData.empty() || m_bIsGivenReward; }
|
||||
|
@ -176,7 +176,7 @@ namespace quest
|
|||
TTimerMap m_TimerMap;
|
||||
|
||||
int m_iSendToClient;
|
||||
bool m_bLoaded; // 로드는 한번만 한다.
|
||||
bool m_bLoaded; // 로드는 한번만 한다.
|
||||
|
||||
int m_iLastState;
|
||||
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
|
||||
enum
|
||||
{
|
||||
BLACKSMITH_MOB = 20016, // 확률 개량
|
||||
ALCHEMIST_MOB = 20001, // 100% 개량 성공
|
||||
BLACKSMITH_MOB = 20016, // 확률 개량
|
||||
ALCHEMIST_MOB = 20001, // 100% 개량 성공
|
||||
|
||||
BLACKSMITH_WEAPON_MOB = 20044,
|
||||
BLACKSMITH_ARMOR_MOB = 20045,
|
||||
|
|
|
@ -132,7 +132,7 @@ class SECTREE
|
|||
|
||||
while (it_tree != m_neighbor_list.end())
|
||||
{
|
||||
//첫번째를 찾으면 바로 리턴
|
||||
//첫번째를 찾으면 바로 리턴
|
||||
if ( (*(it_tree++))->for_each_entity_for_find_victim(func) )
|
||||
return;
|
||||
}
|
||||
|
@ -143,7 +143,7 @@ class SECTREE
|
|||
|
||||
while (it != m_set_entity.end())
|
||||
{
|
||||
//정상적으로 찾으면 바로 리턴
|
||||
//정상적으로 찾으면 바로 리턴
|
||||
if ( func(*it++) )
|
||||
return true;
|
||||
}
|
||||
|
@ -176,9 +176,9 @@ class SECTREE
|
|||
DWORD GetAttribute(int x, int y);
|
||||
bool IsAttr(int x, int y, DWORD dwFlag);
|
||||
|
||||
void CloneAttribute(LPSECTREE tree); // private map 처리시 사용
|
||||
void CloneAttribute(LPSECTREE tree); // private map 처리시 사용
|
||||
|
||||
int GetEventAttribute(int x, int y); // 20050313 현재는 사용하지 않음
|
||||
int GetEventAttribute(int x, int y); // 20050313 현재는 사용하지 않음
|
||||
|
||||
void SetAttribute(DWORD x, DWORD y, DWORD dwAttr);
|
||||
void RemoveAttribute(DWORD x, DWORD y, DWORD dwAttr);
|
||||
|
|
|
@ -165,16 +165,16 @@ class SECTREE_MANAGER : public singleton<SECTREE_MANAGER>
|
|||
size_t GetMonsterCountInMap(int lMapIndex);
|
||||
size_t GetMonsterCountInMap(int lMpaIndex, DWORD dwVnum);
|
||||
|
||||
/// 영역에 대해 Sectree 의 Attribute 에 대해 특정한 처리를 수행한다.
|
||||
/// 영역에 대해 Sectree 의 Attribute 에 대해 특정한 처리를 수행한다.
|
||||
/**
|
||||
* @param [in] lMapIndex 적용할 Map index
|
||||
* @param [in] lStartX 사각형 영역의 가장 왼쪽 좌표
|
||||
* @param [in] lStartY 사각형 영역의 가장 위쪽 좌표
|
||||
* @param [in] lEndX 사각형 영역의 가장 오른쪽 좌표
|
||||
* @param [in] lEndY 사각형 영역의 가장 아랫쪽 좌표
|
||||
* @param [in] lRotate 영역에 대해 회전할 각
|
||||
* @param [in] dwAttr 적용할 Attribute
|
||||
* @param [in] mode Attribute 에 대해 처리할 type
|
||||
* @param [in] lMapIndex 적용할 Map index
|
||||
* @param [in] lStartX 사각형 영역의 가장 왼쪽 좌표
|
||||
* @param [in] lStartY 사각형 영역의 가장 위쪽 좌표
|
||||
* @param [in] lEndX 사각형 영역의 가장 오른쪽 좌표
|
||||
* @param [in] lEndY 사각형 영역의 가장 아랫쪽 좌표
|
||||
* @param [in] lRotate 영역에 대해 회전할 각
|
||||
* @param [in] dwAttr 적용할 Attribute
|
||||
* @param [in] mode Attribute 에 대해 처리할 type
|
||||
*/
|
||||
bool ForAttrRegion(int lMapIndex, int lStartX, int lStartY, int lEndX, int lEndY, int lRotate, DWORD dwAttr, EAttrRegionMode mode);
|
||||
|
||||
|
@ -182,39 +182,39 @@ class SECTREE_MANAGER : public singleton<SECTREE_MANAGER>
|
|||
|
||||
private:
|
||||
|
||||
/// 직각의 사각형 영역에 대해 Sectree 의 Attribute 에 대해 특정한 처리를 수행한다.
|
||||
/// 직각의 사각형 영역에 대해 Sectree 의 Attribute 에 대해 특정한 처리를 수행한다.
|
||||
/**
|
||||
* @param [in] lMapIndex 적용할 Map index
|
||||
* @param [in] lCX 사각형 영역의 가장 왼쪽 Cell 의 좌표
|
||||
* @param [in] lCY 사각형 영역의 가장 위쪽 Cell 의 좌표
|
||||
* @param [in] lCW 사각형 영역의 Cell 단위 폭
|
||||
* @param [in] lCH 사각형 영역의 Cell 단위 높이
|
||||
* @param [in] lRotate 회전할 각(직각)
|
||||
* @param [in] dwAttr 적용할 Attribute
|
||||
* @param [in] mode Attribute 에 대해 처리할 type
|
||||
* @param [in] lMapIndex 적용할 Map index
|
||||
* @param [in] lCX 사각형 영역의 가장 왼쪽 Cell 의 좌표
|
||||
* @param [in] lCY 사각형 영역의 가장 위쪽 Cell 의 좌표
|
||||
* @param [in] lCW 사각형 영역의 Cell 단위 폭
|
||||
* @param [in] lCH 사각형 영역의 Cell 단위 높이
|
||||
* @param [in] lRotate 회전할 각(직각)
|
||||
* @param [in] dwAttr 적용할 Attribute
|
||||
* @param [in] mode Attribute 에 대해 처리할 type
|
||||
*/
|
||||
bool ForAttrRegionRightAngle( int lMapIndex, int lCX, int lCY, int lCW, int lCH, int lRotate, DWORD dwAttr, EAttrRegionMode mode );
|
||||
|
||||
/// 직각 이외의 사각형 영역에 대해 Sectree 의 Attribute 에 대해 특정한 처리를 수행한다.
|
||||
/// 직각 이외의 사각형 영역에 대해 Sectree 의 Attribute 에 대해 특정한 처리를 수행한다.
|
||||
/**
|
||||
* @param [in] lMapIndex 적용할 Map index
|
||||
* @param [in] lCX 사각형 영역의 가장 왼쪽 Cell 의 좌표
|
||||
* @param [in] lCY 사각형 영역의 가장 위쪽 Cell 의 좌표
|
||||
* @param [in] lCW 사각형 영역의 Cell 단위 폭
|
||||
* @param [in] lCH 사각형 영역의 Cell 단위 높이
|
||||
* @param [in] lRotate 회전할 각(직각 이외의 각)
|
||||
* @param [in] dwAttr 적용할 Attribute
|
||||
* @param [in] mode Attribute 에 대해 처리할 type
|
||||
* @param [in] lMapIndex 적용할 Map index
|
||||
* @param [in] lCX 사각형 영역의 가장 왼쪽 Cell 의 좌표
|
||||
* @param [in] lCY 사각형 영역의 가장 위쪽 Cell 의 좌표
|
||||
* @param [in] lCW 사각형 영역의 Cell 단위 폭
|
||||
* @param [in] lCH 사각형 영역의 Cell 단위 높이
|
||||
* @param [in] lRotate 회전할 각(직각 이외의 각)
|
||||
* @param [in] dwAttr 적용할 Attribute
|
||||
* @param [in] mode Attribute 에 대해 처리할 type
|
||||
*/
|
||||
bool ForAttrRegionFreeAngle( int lMapIndex, int lCX, int lCY, int lCW, int lCH, int lRotate, DWORD dwAttr, EAttrRegionMode mode );
|
||||
|
||||
/// 한 Cell 의 Attribute 에 대해 특정한 처리를 수행한다.
|
||||
/// 한 Cell 의 Attribute 에 대해 특정한 처리를 수행한다.
|
||||
/**
|
||||
* @param [in] lMapIndex 적용할 Map index
|
||||
* @param [in] lCX 적용할 Cell 의 X 좌표
|
||||
* @param [in] lCY 적용할 Cell 의 Y 좌표
|
||||
* @param [in] dwAttr 적용할 Attribute
|
||||
* @param [in] mode Attribute 에 대해 처리할 type
|
||||
* @param [in] lMapIndex 적용할 Map index
|
||||
* @param [in] lCX 적용할 Cell 의 X 좌표
|
||||
* @param [in] lCY 적용할 Cell 의 Y 좌표
|
||||
* @param [in] dwAttr 적용할 Attribute
|
||||
* @param [in] mode Attribute 에 대해 처리할 type
|
||||
*/
|
||||
bool ForAttrRegionCell( int lMapIndex, int lCX, int lCY, DWORD dwAttr, EAttrRegionMode mode );
|
||||
|
||||
|
|
|
@ -14,12 +14,12 @@ class CShop
|
|||
public:
|
||||
typedef struct shop_item
|
||||
{
|
||||
DWORD vnum; // 아이템 번호
|
||||
int price; // 가격
|
||||
BYTE count; // 아이템 개수
|
||||
DWORD vnum; // 아이템 번호
|
||||
int price; // 가격
|
||||
BYTE count; // 아이템 개수
|
||||
|
||||
LPITEM pkItem;
|
||||
int itemid; // 아이템 고유아이디
|
||||
int itemid; // 아이템 고유아이디
|
||||
|
||||
shop_item()
|
||||
{
|
||||
|
@ -40,20 +40,20 @@ class CShop
|
|||
virtual void SetPCShop(LPCHARACTER ch);
|
||||
virtual bool IsPCShop() { return m_pkPC ? true : false; }
|
||||
|
||||
// 게스트 추가/삭제
|
||||
// 게스트 추가/삭제
|
||||
virtual bool AddGuest(LPCHARACTER ch,DWORD owner_vid, bool bOtherEmpire);
|
||||
void RemoveGuest(LPCHARACTER ch);
|
||||
|
||||
// 물건 구입
|
||||
// 물건 구입
|
||||
virtual int Buy(LPCHARACTER ch, BYTE pos);
|
||||
|
||||
// 게스트에게 패킷을 보냄
|
||||
// 게스트에게 패킷을 보냄
|
||||
void BroadcastUpdateItem(BYTE pos);
|
||||
|
||||
// 판매중인 아이템의 갯수를 알려준다.
|
||||
// 판매중인 아이템의 갯수를 알려준다.
|
||||
int GetNumberByVnum(DWORD dwVnum);
|
||||
|
||||
// 아이템이 상점에 등록되어 있는지 알려준다.
|
||||
// 아이템이 상점에 등록되어 있는지 알려준다.
|
||||
virtual bool IsSellingItem(DWORD itemID);
|
||||
|
||||
DWORD GetVnum() { return m_dwVnum; }
|
||||
|
@ -70,7 +70,7 @@ class CShop
|
|||
|
||||
typedef std::unordered_map<LPCHARACTER, bool> GuestMapType;
|
||||
GuestMapType m_map_guest;
|
||||
std::vector<SHOP_ITEM> m_itemVector; // 이 상점에서 취급하는 물건들
|
||||
std::vector<SHOP_ITEM> m_itemVector; // 이 상점에서 취급하는 물건들
|
||||
|
||||
LPCHARACTER m_pkPC;
|
||||
};
|
||||
|
|
|
@ -12,11 +12,11 @@ typedef struct SShopTableEx : SShopTable
|
|||
|
||||
class CGroupNode;
|
||||
|
||||
// 확장 shop.
|
||||
// 명도전을 화폐로 쓸 수 있고, 아이템을 여러 탭에 나눠 배치할 수 있다.
|
||||
// 단, pc 샵은 구현하지 않음.
|
||||
// 클라와 통신할 때에 탭은 pos 45 단위로 구분.
|
||||
// 기존 샵의 m_itemVector은 사용하지 않는다.
|
||||
// 확장 shop.
|
||||
// 명도전을 화폐로 쓸 수 있고, 아이템을 여러 탭에 나눠 배치할 수 있다.
|
||||
// 단, pc 샵은 구현하지 않음.
|
||||
// 클라와 통신할 때에 탭은 pos 45 단위로 구분.
|
||||
// 기존 샵의 m_itemVector은 사용하지 않는다.
|
||||
class CShopEx: public CShop
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -5,33 +5,33 @@
|
|||
|
||||
enum ESkillFlags
|
||||
{
|
||||
SKILL_FLAG_ATTACK = (1 << 0), // 공격 기술
|
||||
SKILL_FLAG_USE_MELEE_DAMAGE = (1 << 1), // 기본 밀리 타격치를 b 값으로 사용
|
||||
SKILL_FLAG_COMPUTE_ATTGRADE = (1 << 2), // 공격등급을 계산한다
|
||||
SKILL_FLAG_SELFONLY = (1 << 3), // 자신에게만 쓸 수 있음
|
||||
SKILL_FLAG_USE_MAGIC_DAMAGE = (1 << 4), // 기본 마법 타격치를 b 값으로 사용
|
||||
SKILL_FLAG_USE_HP_AS_COST = (1 << 5), // HP를 SP대신 쓴다
|
||||
SKILL_FLAG_ATTACK = (1 << 0), // 공격 기술
|
||||
SKILL_FLAG_USE_MELEE_DAMAGE = (1 << 1), // 기본 밀리 타격치를 b 값으로 사용
|
||||
SKILL_FLAG_COMPUTE_ATTGRADE = (1 << 2), // 공격등급을 계산한다
|
||||
SKILL_FLAG_SELFONLY = (1 << 3), // 자신에게만 쓸 수 있음
|
||||
SKILL_FLAG_USE_MAGIC_DAMAGE = (1 << 4), // 기본 마법 타격치를 b 값으로 사용
|
||||
SKILL_FLAG_USE_HP_AS_COST = (1 << 5), // HP를 SP대신 쓴다
|
||||
SKILL_FLAG_COMPUTE_MAGIC_DAMAGE = (1 << 6),
|
||||
SKILL_FLAG_SPLASH = (1 << 7),
|
||||
SKILL_FLAG_GIVE_PENALTY = (1 << 8), // 쓰고나면 잠시동안(3초) 2배 데미지를 받는다.
|
||||
SKILL_FLAG_USE_ARROW_DAMAGE = (1 << 9), // 기본 화살 타격치를 b 값으로 사용
|
||||
SKILL_FLAG_PENETRATE = (1 << 10), // 방어무시
|
||||
SKILL_FLAG_IGNORE_TARGET_RATING = (1 << 11), // 상대 레이팅 무시
|
||||
SKILL_FLAG_SLOW = (1 << 12), // 슬로우 공격
|
||||
SKILL_FLAG_STUN = (1 << 13), // 스턴 공격
|
||||
SKILL_FLAG_HP_ABSORB = (1 << 14), // HP 흡수
|
||||
SKILL_FLAG_SP_ABSORB = (1 << 15), // SP 흡수
|
||||
SKILL_FLAG_FIRE_CONT = (1 << 16), // FIRE 지속 데미지
|
||||
SKILL_FLAG_REMOVE_BAD_AFFECT = (1 << 17), // 나쁜효과 제거
|
||||
SKILL_FLAG_REMOVE_GOOD_AFFECT = (1 << 18), // 나쁜효과 제거
|
||||
SKILL_FLAG_CRUSH = (1 << 19), // 상대방을 날림
|
||||
SKILL_FLAG_POISON = (1 << 20), // 독 공격
|
||||
SKILL_FLAG_TOGGLE = (1 << 21), // 토글
|
||||
SKILL_FLAG_DISABLE_BY_POINT_UP = (1 << 22), // 찍어서 올릴 수 없다.
|
||||
SKILL_FLAG_CRUSH_LONG = (1 << 23), // 상대방을 멀리 날림
|
||||
SKILL_FLAG_WIND = (1 << 24), // 바람 속성
|
||||
SKILL_FLAG_ELEC = (1 << 25), // 전기 속성
|
||||
SKILL_FLAG_FIRE = (1 << 26), // 불 속성
|
||||
SKILL_FLAG_GIVE_PENALTY = (1 << 8), // 쓰고나면 잠시동안(3초) 2배 데미지를 받는다.
|
||||
SKILL_FLAG_USE_ARROW_DAMAGE = (1 << 9), // 기본 화살 타격치를 b 값으로 사용
|
||||
SKILL_FLAG_PENETRATE = (1 << 10), // 방어무시
|
||||
SKILL_FLAG_IGNORE_TARGET_RATING = (1 << 11), // 상대 레이팅 무시
|
||||
SKILL_FLAG_SLOW = (1 << 12), // 슬로우 공격
|
||||
SKILL_FLAG_STUN = (1 << 13), // 스턴 공격
|
||||
SKILL_FLAG_HP_ABSORB = (1 << 14), // HP 흡수
|
||||
SKILL_FLAG_SP_ABSORB = (1 << 15), // SP 흡수
|
||||
SKILL_FLAG_FIRE_CONT = (1 << 16), // FIRE 지속 데미지
|
||||
SKILL_FLAG_REMOVE_BAD_AFFECT = (1 << 17), // 나쁜효과 제거
|
||||
SKILL_FLAG_REMOVE_GOOD_AFFECT = (1 << 18), // 나쁜효과 제거
|
||||
SKILL_FLAG_CRUSH = (1 << 19), // 상대방을 날림
|
||||
SKILL_FLAG_POISON = (1 << 20), // 독 공격
|
||||
SKILL_FLAG_TOGGLE = (1 << 21), // 토글
|
||||
SKILL_FLAG_DISABLE_BY_POINT_UP = (1 << 22), // 찍어서 올릴 수 없다.
|
||||
SKILL_FLAG_CRUSH_LONG = (1 << 23), // 상대방을 멀리 날림
|
||||
SKILL_FLAG_WIND = (1 << 24), // 바람 속성
|
||||
SKILL_FLAG_ELEC = (1 << 25), // 전기 속성
|
||||
SKILL_FLAG_FIRE = (1 << 26), // 불 속성
|
||||
};
|
||||
|
||||
enum
|
||||
|
@ -44,84 +44,84 @@ enum ESkillIndexes
|
|||
{
|
||||
SKILL_RESERVED = 0,
|
||||
|
||||
// 무사 전사 계열
|
||||
// 무사 전사 계열
|
||||
// A
|
||||
SKILL_SAMYEON = 1, // 삼연참(세번베기)
|
||||
SKILL_PALBANG, // 팔방풍우
|
||||
SKILL_SAMYEON = 1, // 삼연참(세번베기)
|
||||
SKILL_PALBANG, // 팔방풍우
|
||||
// S
|
||||
SKILL_JEONGWI, // 전귀혼
|
||||
SKILL_GEOMKYUNG, // 검경
|
||||
SKILL_TANHWAN, // 탄환격
|
||||
SKILL_JEONGWI, // 전귀혼
|
||||
SKILL_GEOMKYUNG, // 검경
|
||||
SKILL_TANHWAN, // 탄환격
|
||||
|
||||
// 무사 기공 계열
|
||||
// 무사 기공 계열
|
||||
// A
|
||||
SKILL_GIGONGCHAM = 16, // 기공참
|
||||
SKILL_GYOKSAN, // 격산타우
|
||||
SKILL_DAEJINGAK, // 대진각
|
||||
SKILL_GIGONGCHAM = 16, // 기공참
|
||||
SKILL_GYOKSAN, // 격산타우
|
||||
SKILL_DAEJINGAK, // 대진각
|
||||
// S
|
||||
SKILL_CHUNKEON, // 천근추
|
||||
SKILL_GEOMPUNG, // 검풍
|
||||
SKILL_CHUNKEON, // 천근추
|
||||
SKILL_GEOMPUNG, // 검풍
|
||||
|
||||
// 자객 암살 계열
|
||||
// 자객 암살 계열
|
||||
// A
|
||||
SKILL_AMSEOP = 31, // 암습
|
||||
SKILL_GUNGSIN, // 궁신탄영
|
||||
SKILL_CHARYUN, // 차륜살
|
||||
SKILL_AMSEOP = 31, // 암습
|
||||
SKILL_GUNGSIN, // 궁신탄영
|
||||
SKILL_CHARYUN, // 차륜살
|
||||
// S
|
||||
SKILL_EUNHYUNG, // 은형법
|
||||
SKILL_SANGONG, // 산공분
|
||||
SKILL_EUNHYUNG, // 은형법
|
||||
SKILL_SANGONG, // 산공분
|
||||
|
||||
// 자객 궁수 계열
|
||||
// 자객 궁수 계열
|
||||
// A
|
||||
SKILL_YEONSA = 46, // 연사
|
||||
SKILL_KWANKYEOK, // 관격술
|
||||
SKILL_HWAJO, // 화조파
|
||||
SKILL_YEONSA = 46, // 연사
|
||||
SKILL_KWANKYEOK, // 관격술
|
||||
SKILL_HWAJO, // 화조파
|
||||
// S
|
||||
SKILL_GYEONGGONG, // 경공술
|
||||
SKILL_GIGUNG, // 기궁
|
||||
SKILL_GYEONGGONG, // 경공술
|
||||
SKILL_GIGUNG, // 기궁
|
||||
|
||||
// 수라 검
|
||||
// 수라 검
|
||||
// A
|
||||
SKILL_SWAERYUNG = 61, // 쇄령지
|
||||
SKILL_YONGKWON, // 용권파
|
||||
SKILL_SWAERYUNG = 61, // 쇄령지
|
||||
SKILL_YONGKWON, // 용권파
|
||||
// S
|
||||
SKILL_GWIGEOM, // 귀검
|
||||
SKILL_TERROR, // 공포
|
||||
SKILL_JUMAGAP, // 주마갑
|
||||
SKILL_PABEOB, // 파법술
|
||||
SKILL_GWIGEOM, // 귀검
|
||||
SKILL_TERROR, // 공포
|
||||
SKILL_JUMAGAP, // 주마갑
|
||||
SKILL_PABEOB, // 파법술
|
||||
|
||||
// 수라 마법
|
||||
// 수라 마법
|
||||
// A
|
||||
SKILL_MARYUNG = 76, // 마령
|
||||
SKILL_HWAYEOMPOK, // 화염폭
|
||||
SKILL_MUYEONG, // 무영진
|
||||
SKILL_MARYUNG = 76, // 마령
|
||||
SKILL_HWAYEOMPOK, // 화염폭
|
||||
SKILL_MUYEONG, // 무영진
|
||||
// S
|
||||
SKILL_MANASHILED, // 흑신수호
|
||||
SKILL_TUSOK, // 투속마령
|
||||
SKILL_MAHWAN, // 마환격
|
||||
SKILL_MANASHILED, // 흑신수호
|
||||
SKILL_TUSOK, // 투속마령
|
||||
SKILL_MAHWAN, // 마환격
|
||||
|
||||
// 무당 용신
|
||||
// 무당 용신
|
||||
// A
|
||||
SKILL_BIPABU = 91,
|
||||
SKILL_YONGBI, // 용비광사파
|
||||
SKILL_PAERYONG, // 패룡나한무
|
||||
SKILL_YONGBI, // 용비광사파
|
||||
SKILL_PAERYONG, // 패룡나한무
|
||||
// S
|
||||
//SKILL_BUDONG, // 부동박부
|
||||
SKILL_HOSIN, // 호신
|
||||
SKILL_REFLECT, // 보호
|
||||
SKILL_GICHEON, // 기천대공
|
||||
//SKILL_BUDONG, // 부동박부
|
||||
SKILL_HOSIN, // 호신
|
||||
SKILL_REFLECT, // 보호
|
||||
SKILL_GICHEON, // 기천대공
|
||||
|
||||
// 무당 뇌신
|
||||
// 무당 뇌신
|
||||
// A
|
||||
SKILL_NOEJEON = 106, // 뇌전령
|
||||
SKILL_BYEURAK, // 벼락
|
||||
SKILL_CHAIN, // 체인라이트닝
|
||||
SKILL_NOEJEON = 106, // 뇌전령
|
||||
SKILL_BYEURAK, // 벼락
|
||||
SKILL_CHAIN, // 체인라이트닝
|
||||
// S
|
||||
SKILL_JEONGEOP, // 정업인
|
||||
SKILL_KWAESOK, // 이동속도업
|
||||
SKILL_JEUNGRYEOK, // 증력술
|
||||
SKILL_JEONGEOP, // 정업인
|
||||
SKILL_KWAESOK, // 이동속도업
|
||||
SKILL_JEUNGRYEOK, // 증력술
|
||||
|
||||
// 공통 스킬
|
||||
// 공통 스킬
|
||||
// 7
|
||||
SKILL_7_A_ANTI_TANHWAN = 112,
|
||||
SKILL_7_B_ANTI_AMSEOP,
|
||||
|
@ -134,27 +134,27 @@ enum ESkillIndexes
|
|||
SKILL_8_C_ANTI_MAHWAN,
|
||||
SKILL_8_D_ANTI_BYEURAK,
|
||||
|
||||
// 보조 스킬
|
||||
// 보조 스킬
|
||||
|
||||
SKILL_LEADERSHIP = 121, // 통솔력
|
||||
SKILL_COMBO = 122, // 연계기
|
||||
SKILL_CREATE = 123, // 제조
|
||||
SKILL_LEADERSHIP = 121, // 통솔력
|
||||
SKILL_COMBO = 122, // 연계기
|
||||
SKILL_CREATE = 123, // 제조
|
||||
SKILL_MINING = 124,
|
||||
|
||||
SKILL_LANGUAGE1 = 126, // 신수어 능력
|
||||
SKILL_LANGUAGE2 = 127, // 천조어 능력
|
||||
SKILL_LANGUAGE3 = 128, // 진노어 능력
|
||||
SKILL_POLYMORPH = 129, // 둔갑
|
||||
SKILL_LANGUAGE1 = 126, // 신수어 능력
|
||||
SKILL_LANGUAGE2 = 127, // 천조어 능력
|
||||
SKILL_LANGUAGE3 = 128, // 진노어 능력
|
||||
SKILL_POLYMORPH = 129, // 둔갑
|
||||
|
||||
SKILL_HORSE = 130, // 승마 스킬
|
||||
SKILL_HORSE_SUMMON = 131, // 말 소환 스킬
|
||||
SKILL_HORSE_WILDATTACK = 137, // 난무
|
||||
SKILL_HORSE_CHARGE = 138, // 돌격
|
||||
SKILL_HORSE_ESCAPE = 139, // 탈출
|
||||
SKILL_HORSE_WILDATTACK_RANGE = 140, // 난무(활)
|
||||
SKILL_HORSE = 130, // 승마 스킬
|
||||
SKILL_HORSE_SUMMON = 131, // 말 소환 스킬
|
||||
SKILL_HORSE_WILDATTACK = 137, // 난무
|
||||
SKILL_HORSE_CHARGE = 138, // 돌격
|
||||
SKILL_HORSE_ESCAPE = 139, // 탈출
|
||||
SKILL_HORSE_WILDATTACK_RANGE = 140, // 난무(활)
|
||||
|
||||
SKILL_ADD_HP = 141, // 증혈
|
||||
SKILL_RESIST_PENETRATE = 142, // 철통
|
||||
SKILL_ADD_HP = 141, // 증혈
|
||||
SKILL_RESIST_PENETRATE = 142, // 철통
|
||||
|
||||
GUILD_SKILL_START = 151,
|
||||
GUILD_SKILL_EYE = 151,
|
||||
|
@ -176,35 +176,35 @@ class CSkillProto
|
|||
{
|
||||
public:
|
||||
char szName[64];
|
||||
DWORD dwVnum; // 번호
|
||||
DWORD dwVnum; // 번호
|
||||
|
||||
DWORD dwType; // 0: 전직업, 1: 무사, 2: 자객, 3: 수라, 4: 무당
|
||||
BYTE bMaxLevel; // 최대 수련도
|
||||
BYTE bLevelLimit; // 레벨제한
|
||||
int iSplashRange; // 스플래쉬 거리 제한
|
||||
DWORD dwType; // 0: 전직업, 1: 무사, 2: 자객, 3: 수라, 4: 무당
|
||||
BYTE bMaxLevel; // 최대 수련도
|
||||
BYTE bLevelLimit; // 레벨제한
|
||||
int iSplashRange; // 스플래쉬 거리 제한
|
||||
|
||||
BYTE bPointOn; // 어디에 결과값을 적용 시키는가? (타격치, MAX HP, HP REGEN 등등등)
|
||||
CPoly kPointPoly; // 결과값 만드는 공식
|
||||
BYTE bPointOn; // 어디에 결과값을 적용 시키는가? (타격치, MAX HP, HP REGEN 등등등)
|
||||
CPoly kPointPoly; // 결과값 만드는 공식
|
||||
|
||||
CPoly kSPCostPoly; // 사용 SP 공식
|
||||
CPoly kDurationPoly; // 지속 시간 공식
|
||||
CPoly kDurationSPCostPoly; // 지속 SP 공식
|
||||
CPoly kCooldownPoly; // 쿨다운 시간 공식
|
||||
CPoly kMasterBonusPoly; // 마스터일 때 보너스 공식
|
||||
CPoly kSplashAroundDamageAdjustPoly; // 스플래쉬 공격일 경우 주위 적에게 입히는 데미지 감소 비율
|
||||
CPoly kSPCostPoly; // 사용 SP 공식
|
||||
CPoly kDurationPoly; // 지속 시간 공식
|
||||
CPoly kDurationSPCostPoly; // 지속 SP 공식
|
||||
CPoly kCooldownPoly; // 쿨다운 시간 공식
|
||||
CPoly kMasterBonusPoly; // 마스터일 때 보너스 공식
|
||||
CPoly kSplashAroundDamageAdjustPoly; // 스플래쉬 공격일 경우 주위 적에게 입히는 데미지 감소 비율
|
||||
|
||||
DWORD dwFlag; // 스킬옵션
|
||||
DWORD dwAffectFlag; // 스킬에 맞은 경우 적용되는 Affect
|
||||
DWORD dwFlag; // 스킬옵션
|
||||
DWORD dwAffectFlag; // 스킬에 맞은 경우 적용되는 Affect
|
||||
|
||||
BYTE bLevelStep; // 한번에 올리는데 필요한 스킬 포인트 수
|
||||
DWORD preSkillVnum; // 배우는데 필요한 이전에 배워야할 스킬
|
||||
BYTE preSkillLevel; // 이전에 배워야할 스킬의 레벨
|
||||
BYTE bLevelStep; // 한번에 올리는데 필요한 스킬 포인트 수
|
||||
DWORD preSkillVnum; // 배우는데 필요한 이전에 배워야할 스킬
|
||||
BYTE preSkillLevel; // 이전에 배워야할 스킬의 레벨
|
||||
|
||||
int lMaxHit;
|
||||
|
||||
BYTE bSkillAttrType;
|
||||
|
||||
// 2차 적용
|
||||
// 2차 적용
|
||||
BYTE bPointOn2;
|
||||
CPoly kPointPoly2;
|
||||
CPoly kDurationPoly2;
|
||||
|
@ -218,7 +218,7 @@ class CSkillProto
|
|||
return dwVnum == SKILL_TANHWAN || dwVnum == SKILL_HORSE_CHARGE;
|
||||
}
|
||||
|
||||
// 3차 적용
|
||||
// 3차 적용
|
||||
BYTE bPointOn3;
|
||||
CPoly kPointPoly3;
|
||||
CPoly kDurationPoly3;
|
||||
|
|
|
@ -8,7 +8,7 @@ class CTableBySkill : public singleton<CTableBySkill>
|
|||
CTableBySkill()
|
||||
: m_aiSkillDamageByLevel(NULL)
|
||||
{
|
||||
//스킬 레벨당 추가데미지 초기화
|
||||
//스킬 레벨당 추가데미지 초기화
|
||||
for ( int job = 0; job < JOB_MAX_NUM * 2; ++job )
|
||||
m_aiSkillPowerByLevelFromType[job] = NULL;
|
||||
}
|
||||
|
@ -18,18 +18,18 @@ class CTableBySkill : public singleton<CTableBySkill>
|
|||
DeleteAll();
|
||||
}
|
||||
|
||||
//테이블 세팅 체크
|
||||
//테이블 세팅 체크
|
||||
bool Check() const;
|
||||
|
||||
//삭제
|
||||
//삭제
|
||||
void DeleteAll();
|
||||
|
||||
//스킬레벨단위 스킬파워 테이블
|
||||
//스킬레벨단위 스킬파워 테이블
|
||||
int GetSkillPowerByLevelFromType( int job, int skillgroup, int skilllevel, bool bMob ) const;
|
||||
void SetSkillPowerByLevelFromType( int idx, const int* aTable );
|
||||
void DeleteSkillPowerByLevelFromType( int idx );
|
||||
|
||||
//레벨당 추가 스킬데미지 테이블
|
||||
//레벨당 추가 스킬데미지 테이블
|
||||
int GetSkillDamageByLevel( int Level ) const;
|
||||
void SetSkillDamageByLevelTable( const int* aTable );
|
||||
void DeleteSkillDamageByLevelTable();
|
||||
|
|
|
@ -17,8 +17,8 @@ EVENTINFO(TargetInfo)
|
|||
DWORD dwPID;
|
||||
DWORD dwQuestIndex;
|
||||
|
||||
char szTargetName[32+1]; // 퀘스트에서 사용하는 이름
|
||||
char szTargetDesc[32+1]; // 실제 클라이언트에 전송되는 이름
|
||||
char szTargetName[32+1]; // 퀘스트에서 사용하는 이름
|
||||
char szTargetDesc[32+1]; // 실제 클라이언트에 전송되는 이름
|
||||
|
||||
int iType;
|
||||
int iArg1;
|
||||
|
|
|
@ -40,13 +40,13 @@ enum
|
|||
|
||||
ITEM_GIVE_STAT_RESET_COUNT_VNUM = 70014,
|
||||
ITEM_SKILLFORGET_VNUM = 70037,
|
||||
ITEM_SKILLFORGET2_VNUM = 70055, // 7, 8 스킬 망각서
|
||||
ITEM_SKILLFORGET2_VNUM = 70055, // 7, 8 스킬 망각서
|
||||
|
||||
UNIQUE_ITEM_FISH_MIND = 71008, // 월간어심
|
||||
UNIQUE_ITEM_SAFEBOX_EXPAND = 71009, // 창고확장권
|
||||
UNIQUE_ITEM_AUTOLOOT_GOLD = 71010, // 제3의 손
|
||||
UNIQUE_ITEM_EMOTION_MASK = 71011, // 열정의 가면
|
||||
UNIQUE_ITEM_EMOTION_MASK2 = 71033, // 열정의 가면
|
||||
UNIQUE_ITEM_FISH_MIND = 71008, // 월간어심
|
||||
UNIQUE_ITEM_SAFEBOX_EXPAND = 71009, // 창고확장권
|
||||
UNIQUE_ITEM_AUTOLOOT_GOLD = 71010, // 제3의 손
|
||||
UNIQUE_ITEM_EMOTION_MASK = 71011, // 열정의 가면
|
||||
UNIQUE_ITEM_EMOTION_MASK2 = 71033, // 열정의 가면
|
||||
|
||||
ITEM_NEW_YEAR_GREETING_VNUM = 50023,
|
||||
|
||||
|
@ -106,11 +106,11 @@ enum
|
|||
|
||||
REWARD_BOX_UNIQUE_ITEM_CAPE_OF_COURAGE = 76007,
|
||||
|
||||
// 용혼석 추출 확률을 높여주는 아이템
|
||||
// 용혼석 추출 확률을 높여주는 아이템
|
||||
DRAGON_SOUL_EXTRACTOR_GROUP = 10600,
|
||||
// 용심 추출해주는 아이템
|
||||
// 용심 추출해주는 아이템
|
||||
DRAGON_HEART_EXTRACTOR_GROUP = 10601,
|
||||
// 용혼석에서 추출할 때 주는 용심.
|
||||
// 용혼석에서 추출할 때 주는 용심.
|
||||
DRAGON_HEART_VNUM = 100000,
|
||||
};
|
||||
|
||||
|
|
|
@ -68,7 +68,7 @@ class CWarMap
|
|||
DWORD GetWinnerGuild();
|
||||
void UsePotion(LPCHARACTER ch, LPITEM item);
|
||||
|
||||
void Draw(); // 강제 무승부 처리
|
||||
void Draw(); // 강제 무승부 처리
|
||||
void Timeout();
|
||||
void CheckWarEnd();
|
||||
bool SetEnded();
|
||||
|
@ -125,8 +125,8 @@ class CWarMap
|
|||
|
||||
void Initialize();
|
||||
|
||||
int GetAccumulatedJoinerCount(); // 누적된 참가자 수
|
||||
int GetCurJointerCount(); // 현재 참가자 수
|
||||
int GetAccumulatedJoinerCount(); // 누적된 참가자 수
|
||||
int GetCurJointerCount(); // 현재 참가자 수
|
||||
|
||||
void AppendMember(LPCHARACTER ch);
|
||||
void RemoveMember(LPCHARACTER ch);
|
||||
|
|
|
@ -5,8 +5,8 @@ namespace xmas
|
|||
{
|
||||
enum
|
||||
{
|
||||
MOB_SANTA_VNUM = 20031, //산타
|
||||
// MOB_SANTA_VNUM = 20095, //노해
|
||||
MOB_SANTA_VNUM = 20031, //산타
|
||||
// MOB_SANTA_VNUM = 20095, //노해
|
||||
MOB_XMAS_TREE_VNUM = 20032,
|
||||
MOB_XMAS_FIRWORK_SELLER_VNUM = 9004,
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue