forked from metin2/server
fix game header encoding
This commit is contained in:
@ -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<EFBFBD><EFBFBD>
|
||||
// fixme : titempos로
|
||||
WORD GetBasePosition(const LPITEM pItem) const;
|
||||
bool IsValidCellForThisItem(const LPITEM pItem, const TItemPos& Cell) const;
|
||||
int GetDuration(const LPITEM pItem) const;
|
||||
|
||||
// <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ƽ<DEBE> Ư<><C6AF> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>Լ<EFBFBD>
|
||||
// 용혼석을 받아서 특정 용심을 추출하는 함수
|
||||
bool ExtractDragonHeart(LPCHARACTER ch, LPITEM pItem, LPITEM pExtractor = NULL);
|
||||
|
||||
// Ư<EFBFBD><EFBFBD> <20><>ȥ<EFBFBD><C8A5>(pItem)<29><> <20><><EFBFBD><EFBFBD>â<EFBFBD><C3A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>θ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD>н<EFBFBD> <20>λ깰<CEBB><EAB9B0> <20>ִ<EFBFBD> <20>Լ<EFBFBD>.(<28>λ깰<CEBB><EAB9B0> dragon_soul_table.txt<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
// DestCell<EFBFBD><EFBFBD> invalid<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>, <20><>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20>߰<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, <20><>ȥ<EFBFBD><C8A5>(pItem)<EFBFBD><EFBFBD> delete<EFBFBD><EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִٸ<D6B4> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD> pExtractor->GetValue(0)%<EFBFBD><EFBFBD>ŭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// <EFBFBD>λ깰<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> <20>߰<EFBFBD>.
|
||||
// 특정 용혼석(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);
|
||||
|
||||
// <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><D7B7>̵<EFBFBD> <20>Լ<EFBFBD>
|
||||
// 용혼석 업그레이드 함수
|
||||
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);
|
||||
|
||||
// ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȥ<EFBFBD><C8A5> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>캸<EFBFBD><ECBAB8>, Ȱ<><C8B0>ȭ <20><> <20><>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD>, ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȥ<EFBFBD><C8A5> Ȱ<><C8B0> <20><><EFBFBD>¸<EFBFBD> off <20><>Ű<EFBFBD><C5B0> <20>Լ<EFBFBD>.
|
||||
// 캐릭터의 용혼석 덱을 살펴보고, 활성화 된 용혼석이 없다면, 캐릭터의 용혼석 활성 상태를 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]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD><CCB9><EFBFBD>
|
||||
Pixel m_apxBuf[SIZE]; // 실제 이미지
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
void Clear();
|
||||
@ -38,11 +38,11 @@ struct SGuildMarkBlock
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
Pixel m_apxBuf[SIZE]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD><CCB9><EFBFBD>
|
||||
Pixel m_apxBuf[SIZE]; // 실제 이미지
|
||||
|
||||
BYTE m_abCompBuf[MAX_COMP_SIZE]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
lzo_uint m_sizeCompBuf; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>
|
||||
DWORD m_crc; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> -> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ
|
||||
bool SaveBlockFromCompressedData(DWORD posBlock, const BYTE * pbComp, DWORD dwCompSize); // 서버 -> 클라이언트
|
||||
|
||||
DWORD GetEmptyPosition(); // <EFBFBD><EFBFBD> <20><>ũ <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD>´<EFBFBD>.
|
||||
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(); // <EFBFBD><EFBFBD>ũ <20>ε<EFBFBD><CEB5><EFBFBD> <20>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
bool SaveMarkIndex(); // <EFBFBD><EFBFBD>ũ <20>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
|
||||
bool LoadMarkIndex(); // 마크 인덱스 불러오기 (서버에서만 사용)
|
||||
bool SaveMarkIndex(); // 마크 인덱스 저장하기
|
||||
|
||||
void LoadMarkImages(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ <20>̹<EFBFBD><CCB9><EFBFBD><EFBFBD><EFBFBD> <20>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
void SaveMarkImage(DWORD imgIdx); // <EFBFBD><EFBFBD>ũ <20>̹<EFBFBD><CCB9><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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<EFBFBD>̺<EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
OXEVENT_OPEN = 1, // OX<EFBFBD>̺<EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD>۵<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(20012)<29><> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD>尡<EFBFBD><E5B0A1>
|
||||
OXEVENT_CLOSE = 2, // OX<EFBFBD>̺<EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(20012)<29><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ܵ<EFBFBD>
|
||||
OXEVENT_QUIZ = 3, // <EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
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: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD><EFBFBD><EFBFBD> <20>ɷ<EFBFBD>ġ? <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ģ<>е<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD>... <EFBFBD><EFBFBD>ġ
|
||||
// TODO: 펫으로서의 능력치? 라던가 친밀도, 배고픔 기타등등... 수치
|
||||
struct SPetAbility
|
||||
{
|
||||
};
|
||||
@ -34,8 +34,8 @@ protected:
|
||||
virtual bool Update(DWORD deltaTime);
|
||||
|
||||
protected:
|
||||
virtual bool _UpdateFollowAI(); ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ٴϴ<D9B4> AI ó<EFBFBD><EFBFBD>
|
||||
virtual bool _UpdatAloneActionAI(float fMinDist, float fMaxDist); ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ó<EFBFBD><C3B3><EFBFBD><EFBFBD> ȥ<><C8A5> <20><><EFBFBD><EFBFBD> AI ó<EFBFBD><EFBFBD>
|
||||
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; }
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20>ŵδ<C5B5> <20>Լ<EFBFBD>.
|
||||
// <EFBFBD>̰<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ѱ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
// POINT_MOV_SPEED, POINT_ATT_SPEED, POINT_CAST_SPEED<EFBFBD><EFBFBD> PointChange()<EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC><EFBFBD> <20>Ἥ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ҿ<EFBFBD><D2BF><EFBFBD> <20><><EFBFBD>°<EFBFBD>,
|
||||
// PointChange() <EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD> <20><><EFBFBD><EFBFBD> ComputePoints()<EFBFBD><EFBFBD> <20>ϸ<EFBFBD> <20>ϴ<EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD>ǰ<EFBFBD>,
|
||||
// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ComputePoints()<EFBFBD><EFBFBD> <20>θ<EFBFBD><CEB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> POINT<4E><54> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´ٴ<C2B4> <20>Ŵ<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> ComputePoints() <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD><EFBFBD><EFBFBD> petsystem->RefreshBuff()<EFBFBD><EFBFBD> <20>θ<EFBFBD><CEB8><EFBFBD><EFBFBD><EFBFBD> <20>Ͽ<EFBFBD><CFBF><EFBFBD>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ClearBuff()<EFBFBD><EFBFBD> <20>θ<EFBFBD><CEB8><EFBFBD>, ComputePoints<EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
// 버프 주는 함수와 거두는 함수.
|
||||
// 이게 좀 괴랄한게, 서버가 ㅄ라서,
|
||||
// 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; // <EFBFBD>ɷ<EFBFBD>ġ
|
||||
// SPetAbility m_petAbility; // 능력치
|
||||
};
|
||||
|
||||
/**
|
||||
@ -95,7 +95,7 @@ private:
|
||||
class CPetSystem
|
||||
{
|
||||
public:
|
||||
typedef std::unordered_map<DWORD, CPetActor*> TPetActorMap; /// <VNUM, PetActor> map. (<EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD> vnum<75><6D> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..??)
|
||||
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; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF>(<28><>üȭ <20><> ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20>ִ<EFBFBD>) <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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: <EFBFBD><EFBFBD>¥ <20><> <20>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>. (ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...)
|
||||
// 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; ///< <EFBFBD><EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD> Owner
|
||||
DWORD m_dwUpdatePeriod; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>ֱ<EFBFBD> (ms<6D><73><EFBFBD><EFBFBD>)
|
||||
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 <EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ͽ<EFBFBD><CFBF><EFBFBD>
|
||||
#define EMPIRE_NONE 0 // <EFBFBD>ƹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD>
|
||||
#define EMPIRE_RED 1 // <EFBFBD>ż<EFBFBD>
|
||||
#define EMPIRE_YELLOW 2 // õ<EFBFBD><EFBFBD>
|
||||
#define EMPIRE_BLUE 3 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 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 <EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> profiler.
|
||||
* @brief Network I/O traffic 을 패킷 단위로 측정하는 profiler.
|
||||
* @author Bang2ni
|
||||
* @version 05/07/07 Bang2ni - First release.
|
||||
*
|
||||
* <EFBFBD>ð<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Network I/O <EFBFBD><EFBFBD> traffic <EFBFBD><EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>, Text file <20><><EFBFBD>·<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ۼ<EFBFBD><DBBC>Ѵ<EFBFBD>.
|
||||
* 시간대 별로 Network I/O 의 traffic 을 패킷 단위로 측정하고, Text file 형태로 보고서를 작성한다.
|
||||
*/
|
||||
class TrafficProfiler : public singleton< TrafficProfiler >
|
||||
{
|
||||
public:
|
||||
|
||||
/// I/O <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// I/O 방향
|
||||
enum IODirection {
|
||||
IODIR_INPUT = 0, ///< Input
|
||||
IODIR_OUTPUT, ///< Output
|
||||
@ -37,25 +37,25 @@ class TrafficProfiler : public singleton< TrafficProfiler >
|
||||
/// Destructor
|
||||
~TrafficProfiler( void );
|
||||
|
||||
/// Profiling <EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD><C8AD> <20>Ѵ<EFBFBD>.
|
||||
/// Profiling 에 필요한 초기화를 한다.
|
||||
/**
|
||||
* @param [in] dwFlushCycle Flush <EFBFBD>ֱ<EFBFBD>. <20><> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
|
||||
* @param [in] pszLogFileName Profiling log file <EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
* @return false <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> profiling log file <EFBFBD><EFBFBD> open <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ߴ<EFBFBD>.
|
||||
* @param [in] dwFlushCycle Flush 주기. 초 단위이다.
|
||||
* @param [in] pszLogFileName Profiling log file 의 이름
|
||||
* @return false 일 경우 profiling log file 을 open 하지 못했다.
|
||||
*
|
||||
* profiling log file <EFBFBD><EFBFBD> open(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>) <20>Ѵ<EFBFBD>.
|
||||
* profiling log file 을 open(생성) 한다.
|
||||
*/
|
||||
bool Initialize( DWORD dwFlushCycle, const char* pszLogFileName );
|
||||
|
||||
/// Profiling <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>۵ưų<C6B0> <20><><EFBFBD><EFBFBD> <20><> Packet <EFBFBD><EFBFBD> Report <EFBFBD>Ѵ<EFBFBD>.
|
||||
/// Profiling 을 위해 전송됐거나 전송 할 Packet 을 Report 한다.
|
||||
/**
|
||||
* @param [in] dir Profiling <EFBFBD><EFBFBD> Packet <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @param [in] byHeader Packet <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param [in] dwSize Packet <EFBFBD><EFBFBD> <20><> size
|
||||
* @return Initialize <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾҴٸ<D2B4> false <20><> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
* @param [in] dir Profiling 할 Packet 의 방향
|
||||
* @param [in] byHeader Packet 헤더
|
||||
* @param [in] dwSize Packet 의 총 size
|
||||
* @return Initialize 되지 않았다면 false 를 반환한다.
|
||||
*
|
||||
* Packet <EFBFBD><EFBFBD> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> size <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
* Initialize <EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD> <20>ֱ<EFBFBD> Flush <20><> <20><><EFBFBD>Ŀ<EFBFBD> Flush <20>ֱ<EFBFBD> <20><>ŭ <20>ð<EFBFBD><C3B0><EFBFBD> <20>帥 <20><> ȣ<><C8A3><EFBFBD>ȴٸ<C8B4> Report <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Flush <EFBFBD>Ѵ<EFBFBD>.
|
||||
* 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;
|
||||
}
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Report <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
/// 현재까지 Report 된 내용을 파일에 쓴다.
|
||||
/**
|
||||
* @return Initialize <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾҴ<CABE>.
|
||||
* @return Initialize 되지 않았다.
|
||||
*/
|
||||
bool Flush( void );
|
||||
|
||||
private:
|
||||
|
||||
/// Profling <EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD> variables <EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20>Ѵ<EFBFBD>.
|
||||
/// Profling 에 관련된 variables 를 초기화 한다.
|
||||
void InitializeProfiling( void );
|
||||
|
||||
/// Report <EFBFBD><EFBFBD> Packet <EFBFBD><EFBFBD> traffic <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// Report 된 Packet 의 traffic 를 계산한다.
|
||||
/**
|
||||
* @param [in] dir Profiling <EFBFBD><EFBFBD> Packet <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @param [in] byHeader Packet <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param [in] dwSize Packet <EFBFBD><EFBFBD> <20><> 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: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> size
|
||||
* second: <EFBFBD><EFBFBD> packet <EFBFBD><EFBFBD> <20><><EFBFBD>۵<EFBFBD> Ƚ<><C8BD>
|
||||
* 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 <EFBFBD>ֱ<EFBFBD>
|
||||
time_t m_tmProfileStartTime; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD>. Flush <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Update <EFBFBD>ȴ<EFBFBD>.
|
||||
DWORD m_dwTotalTraffic; ///< Report <EFBFBD><EFBFBD> <20><> Traffic <EFBFBD>뷮
|
||||
DWORD m_dwTotalPacket; ///< Report <EFBFBD><EFBFBD> <20><> Packet <EFBFBD><EFBFBD>
|
||||
TrafficVec m_aTrafficVec[ IODIR_MAX ]; ///< Report <EFBFBD><EFBFBD> Traffic <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> vector<6F><72> <20>迭. <20><> <20><><EFBFBD>⸶<EFBFBD><E2B8B6> vector <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
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, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
AFFECT_ITEM_BONUS = 501, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>尩
|
||||
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, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
AFFECT_GOLD_BONUS = 506, // <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ȯ<EFBFBD><C8AE> 50%<25><><EFBFBD><EFBFBD>
|
||||
AFFECT_MARRIAGE_FAST = 505, // 원앙의 깃털
|
||||
AFFECT_GOLD_BONUS = 506, // 돈 드롭확률 50%증가
|
||||
AFFECT_PREMIUM_END = 509,
|
||||
|
||||
AFFECT_MALL = 510, // <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||||
AFFECT_NO_DEATH_PENALTY = 511, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ (<28><><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20>г<EFBFBD>Ƽ<EFBFBD><C6BC> <20>ѹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>)
|
||||
AFFECT_SKILL_BOOK_BONUS = 512, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (å <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD> 50% <EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
AFFECT_SKILL_NO_BOOK_DELAY = 513, // <EFBFBD>־ȼ<EFBFBD><EFBFBD><EFBFBD>
|
||||
AFFECT_MALL = 510, // 몰 아이템 에펙트
|
||||
AFFECT_NO_DEATH_PENALTY = 511, // 용신의 가호 (경험치가 패널티를 한번 막아준다)
|
||||
AFFECT_SKILL_BOOK_BONUS = 512, // 선인의 교훈 (책 수련 성공 확률이 50% 증가)
|
||||
AFFECT_SKILL_NO_BOOK_DELAY = 513, // 주안술서
|
||||
|
||||
AFFECT_HAIR = 514, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȿ<><C8BF>
|
||||
AFFECT_COLLECT = 515, //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
AFFECT_EXP_BONUS_EURO_FREE = 516, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 14 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>⺻ ȿ<><C8BF>)
|
||||
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, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>غ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
AFF_DUNGEON_UNIQUE, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ũ (Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
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, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ
|
||||
AFF_GEOMGYEONG, // <EFBFBD>˰<EFBFBD>
|
||||
AFF_CHEONGEUN, // õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AFF_GYEONGGONG, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AFF_EUNHYUNG, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AFF_GWIGUM, // <EFBFBD>Ͱ<EFBFBD>
|
||||
AFF_TERROR, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AFF_JUMAGAP, // <EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>
|
||||
AFF_HOSIN, // ȣ<EFBFBD><EFBFBD>
|
||||
AFF_BOHO, // <EFBFBD><EFBFBD>ȣ
|
||||
AFF_KWAESOK, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AFF_MANASHIELD, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AFF_MUYEONG, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> affect
|
||||
AFF_REVIVE_INVISIBLE, // <EFBFBD><EFBFBD>Ȱ<EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
AFF_FIRE, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AFF_GICHEON, // <EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AFF_JEUNGRYEOK, // <EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
||||
AFF_TANHWAN_DASH, // źȯ<EFBFBD>ݿ<EFBFBD> <20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
|
||||
AFF_PABEOP, // <EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD>
|
||||
AFF_CHEONGEUN_WITH_FALL, // õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
AFF_GERMANY, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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<EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD><D1B4><EFBFBD> <20><><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// <EFBFBD>ð<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̱<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ſ<EFBFBD> ū<><C5AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ븦 <20><><EFBFBD>ķ<EFBFBD><C4B7>̼<EFBFBD><CCBC><EFBFBD>.
|
||||
//// 24<EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> 25<32><35>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>.
|
||||
// ... 25<EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD>Ѵٰ<D1B4> <20>س<EFBFBD><D8B3><EFBFBD><EFBFBD><EFBFBD> 29bit <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ִ<EFBFBD> <20><>û<EFBFBD><C3BB> <20>ּ<EFBFBD><D6BC>̶<EFBFBD>...
|
||||
// collect quest<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> 60<36><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>, <20><><EFBFBD> 60<36><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// 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<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 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]);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>.
|
||||
// 나의 경매장을 위한 함수.
|
||||
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<EFBFBD><EFBFBD> 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);
|
||||
// <EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// 이미 있으면 덮어 씌운다.
|
||||
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<EFBFBD><EFBFBD> <20><><EFBFBD>ϵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD><CCBA><EFBFBD> <20><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>͵<EFBFBD>
|
||||
// auction에 등록된 정보 중 가격, 등등 아이템 테이블에 포함되지 않는 정보들을 관리하는 것들
|
||||
AuctionBoard Auction;
|
||||
SaleBoard Sale;
|
||||
WishBoard Wish;
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
#include "char.h"
|
||||
|
||||
enum EBattleTypes // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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);
|
||||
|
||||
// Ư<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 특성 공격
|
||||
inline void AttackAffect(LPCHARACTER pkAttacker,
|
||||
LPCHARACTER pkVictim,
|
||||
BYTE att_point,
|
||||
|
@ -13,7 +13,7 @@ public:
|
||||
{
|
||||
static TGradeUnit beltGradeByLevelTable[] =
|
||||
{
|
||||
0, // <EFBFBD><EFBFBD>Ʈ+0
|
||||
0, // 벨트+0
|
||||
1, // +1
|
||||
1, // +2
|
||||
2, // +3
|
||||
@ -34,20 +34,20 @@ public:
|
||||
return beltGradeByLevelTable[level];
|
||||
}
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> <20><> <20>ִ<EFBFBD><D6B4><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 현재 벨트 레벨을 기준으로, 어떤 셀들을 이용할 수 있는지 리턴
|
||||
static const TGradeUnit* GetAvailableRuleTableByGrade()
|
||||
{
|
||||
/**
|
||||
<EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><> +0 ~ +9 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 7<>ܰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>еǾ<D0B5> <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> Ȱ<><C8B0> ȭ <20>ȴ<EFBFBD>.
|
||||
<EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ʒ<EFBFBD> <20><EFBFBD><D7B8><EFBFBD> <20><><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> >= Ȱ<><C8B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
(<EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ұ<EFBFBD>, <20><>ȣ <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ڴ<EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
벨트는 총 +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)
|
||||
|
||||
<EFBFBD><EFBFBD>Ʈ <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> ũ<><C5A9><EFBFBD><EFBFBD> 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*/)
|
||||
{
|
||||
// <EFBFBD><EFBFBD>ȹ <20><> <20>ٲ<EFBFBD>.. <20>Ƴ<EFBFBD>...
|
||||
// 기획 또 바뀜.. 아놔...
|
||||
//const TGradeUnit beltGrade = GetBeltGradeByRefineLevel(beltLevel);
|
||||
const TGradeUnit* ruleTable = GetAvailableRuleTableByGrade();
|
||||
|
||||
return ruleTable[cell] <= beltGrade;
|
||||
}
|
||||
|
||||
/// pc<EFBFBD><EFBFBD> <20><>Ʈ <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><> <20>˻<EFBFBD><CBBB>ϴ<EFBFBD> <20>Լ<EFBFBD>.
|
||||
/// 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<EFBFBD><EFBFBD> <20><>Ʈ <20>κ<EFBFBD><CEBA>丮<EFBFBD><E4B8AE> <20><><EFBFBD> <20><> <20>ִ<EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB>ϴ<EFBFBD> <20>Լ<EFBFBD>. (<28><> <20><>Ģ<EFBFBD><C4A2> <20><>ȹ<EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
/// 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();
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20≯鼭, m_p_vec_buff_wear_targets<EFBFBD><EFBFBD> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ȿ<><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// 장착 중 이면서, m_p_vec_buff_wear_targets에 해당하는 아이템인 경우, 해당 아이템으로 인해 붙은 효과를 제거.
|
||||
void RemoveBuffFromItem(LPITEM pItem);
|
||||
// m_p_vec_buff_wear_targets<EFBFBD><EFBFBD> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>, <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> attribute<74><65> <20><><EFBFBD><EFBFBD> ȿ<><C8BF> <20>߰<EFBFBD>.
|
||||
// m_p_vec_buff_wear_targets에 해당하는 아이템인 경우, 해당 아이템의 attribute에 대한 효과 추가.
|
||||
void AddBuffFromItem(LPITEM pItem);
|
||||
// m_bBuffValue<EFBFBD><EFBFBD> <20>ٲٰ<D9B2>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٲ<EFBFBD>.
|
||||
// m_bBuffValue를 바꾸고, 버프의 값도 바꿈.
|
||||
void ChangeBuffValue(BYTE bNewValue);
|
||||
// CHRACTRE::ComputePoints<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD>ġ<EFBFBD><C4A1> <20>ʱ<EFBFBD>ȭ<EFBFBD>ϰ<EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϹǷ<CFB9>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> owner<65><72><EFBFBD><EFBFBD> <20><>.
|
||||
// CHRACTRE::ComputePoints에서 속성치를 초기화하고 다시 계산하므로,
|
||||
// 버프 속성치들을 강제적으로 owner에게 줌.
|
||||
void GiveAllAttributes();
|
||||
|
||||
// m_p_vec_buff_wear_targets<EFBFBD><EFBFBD> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> attribute<EFBFBD><EFBFBD> type<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ջ<EFBFBD><D5BB>ϰ<EFBFBD>,
|
||||
// <EFBFBD><EFBFBD> attribute<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (m_bBuffValue)% <EFBFBD><EFBFBD>ŭ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>.
|
||||
// m_p_vec_buff_wear_targets에 해당하는 모든 아이템의 attribute를 type별로 합산하고,
|
||||
// 그 attribute들의 (m_bBuffValue)% 만큼을 버프로 줌.
|
||||
bool On(BYTE bValue);
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>, <20>ʱ<EFBFBD>ȭ
|
||||
// 버프 제거 후, 초기화
|
||||
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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
// apply_type, apply_value 페어의 맵
|
||||
typedef std::map <BYTE, int> TMapAttr;
|
||||
// m_p_vec_buff_wear_targets<EFBFBD><EFBFBD> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> attribute<EFBFBD><EFBFBD> type<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ջ<EFBFBD><D5BB>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// 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 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD>
|
||||
#define MAX_CASTLE_GUARD_PER_REGION 10 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD>Ҽ<EFBFBD><D2BC>ִ<EFBFBD> <20><><EFBFBD><F1BAB4B1>
|
||||
#define MAX_CASTLE_FROG 20 // Ȳ<EFBFBD><EFBFBD> <20>β<EFBFBD><CEB2><EFBFBD>
|
||||
#define MAX_CASTLE_TOWER 10 // <EFBFBD><EFBFBD>ȭ <20>ִ<EFBFBD> <20><>ȯ <20><><EFBFBD><EFBFBD>
|
||||
#define MIN_CASTLE_TOWER 5 // <EFBFBD><EFBFBD>ȭ <20>ּ<EFBFBD> <20><>ȯ <20><><EFBFBD><EFBFBD>
|
||||
#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 // Ȳ<EFBFBD>ݵβ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (1<EFBFBD><EFBFBD>)
|
||||
#define CASTLE_FROG_VNUM 11505 // Ȳ<EFBFBD>ݵβ<EFBFBD><EFBFBD><EFBFBD> <20><>ȣ
|
||||
//#define CASTLE_TOWER_VNUM 11506 // <EFBFBD><EFBFBD>ȭ <20><>ȣ
|
||||
#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, // <EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
CASTLE_SIEGE_STRUGGLE, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
CASTLE_SIEGE_END // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ߴٸ<DFB4> 1<>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><>ȭ<EFBFBD><C8AD> <20><> <20><> <20>ִ<EFBFBD>.
|
||||
CASTLE_SIEGE_NONE, // 평화모드
|
||||
CASTLE_SIEGE_STRUGGLE, // 공성중
|
||||
CASTLE_SIEGE_END // 수성에 성공했다면 1시간동안 봉화를 깰 수 있다.
|
||||
};
|
||||
|
||||
|
||||
struct CASTLE_DATA
|
||||
{
|
||||
LPCHARACTER frog[MAX_CASTLE_FROG]; // Ȳ<EFBFBD>ݵβ<EFBFBD><EFBFBD><EFBFBD>
|
||||
LPCHARACTER frog[MAX_CASTLE_FROG]; // 황금두꺼비
|
||||
|
||||
LPCHARACTER guard[MAX_CASTLE_GUARD_REGION][MAX_CASTLE_GUARD_PER_REGION]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
DWORD guard_group[MAX_CASTLE_GUARD_REGION][MAX_CASTLE_GUARD_PER_REGION]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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]; // <EFBFBD><EFBFBD>ȭ
|
||||
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,
|
||||
//<EFBFBD><EFBFBD>ų
|
||||
//스킬
|
||||
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 <EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD>
|
||||
POINT_MAX_STAMINA, // 10 <EFBFBD>ִ<EFBFBD> <20><><EFBFBD>̳<D7B9>
|
||||
POINT_STAMINA, // 9 스테미너
|
||||
POINT_MAX_STAMINA, // 10 최대 스테미너
|
||||
|
||||
POINT_GOLD, // 11
|
||||
POINT_ST, // 12 <EFBFBD>ٷ<EFBFBD>
|
||||
POINT_HT, // 13 ü<EFBFBD><EFBFBD>
|
||||
POINT_DX, // 14 <EFBFBD><EFBFBD>ø<EFBFBD><EFBFBD>
|
||||
POINT_IQ, // 15 <EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD>
|
||||
POINT_ST, // 12 근력
|
||||
POINT_HT, // 13 체력
|
||||
POINT_DX, // 14 민첩성
|
||||
POINT_IQ, // 15 정신력
|
||||
POINT_DEF_GRADE, // 16 ...
|
||||
POINT_ATT_SPEED, // 17 <EFBFBD><EFBFBD><EFBFBD>ݼӵ<EFBFBD>
|
||||
POINT_ATT_GRADE, // 18 <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD> MAX
|
||||
POINT_MOV_SPEED, // 19 <EFBFBD>̵<EFBFBD><EFBFBD>ӵ<EFBFBD>
|
||||
POINT_CLIENT_DEF_GRADE, // 20 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_CASTING_SPEED, // 21 <EFBFBD>ֹ<EFBFBD><EFBFBD>ӵ<EFBFBD> (<28><><EFBFBD>ٿ<EFBFBD>Ÿ<EFBFBD><C5B8>*100) / (100 + <EFBFBD>̰<EFBFBD>) = <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٿ<EFBFBD> Ÿ<><C5B8>
|
||||
POINT_MAGIC_ATT_GRADE, // 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD>
|
||||
POINT_MAGIC_DEF_GRADE, // 23 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_EMPIRE_POINT, // 24 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_LEVEL_STEP, // 25 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ܰ<EFBFBD>.. (1 2 3 <20><> <20><> <20><><EFBFBD><EFBFBD>, 4 <20>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>)
|
||||
POINT_STAT, // 26 <EFBFBD>ɷ<EFBFBD>ġ <20>ø<EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_SUB_SKILL, // 27 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>Ʈ
|
||||
POINT_SKILL, // 28 <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>Ʈ
|
||||
POINT_WEAPON_MIN, // 29 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_WEAPON_MAX, // 30 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_PLAYTIME, // 31 <EFBFBD>÷<EFBFBD><EFBFBD>̽ð<EFBFBD>
|
||||
POINT_HP_REGEN, // 32 HP ȸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_SP_REGEN, // 33 SP ȸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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 Ȱ <20><><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD>ġ (meter)
|
||||
POINT_BOW_DISTANCE, // 34 활 사정거리 증가치 (meter)
|
||||
|
||||
POINT_HP_RECOVERY, // 35 ü<EFBFBD><EFBFBD> ȸ<><C8B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_SP_RECOVERY, // 36 <EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD> ȸ<><C8B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_HP_RECOVERY, // 35 체력 회복 증가량
|
||||
POINT_SP_RECOVERY, // 36 정신력 회복 증가량
|
||||
|
||||
POINT_POISON_PCT, // 37 <EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
POINT_STUN_PCT, // 38 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
POINT_SLOW_PCT, // 39 <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> Ȯ<><C8AE>
|
||||
POINT_CRITICAL_PCT, // 40 ũ<EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
POINT_PENETRATE_PCT, // 41 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
POINT_CURSE_PCT, // 42 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
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 <EFBFBD>ΰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_ANIMAL, // 44 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> % <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_ORC, // 45 <EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> % <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_MILGYO, // 46 <EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> % <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_UNDEAD, // 47 <EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> % <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_DEVIL, // 48 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28>Ǹ<EFBFBD>)<29><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> % <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_INSECT, // 49 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_FIRE, // 50 ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_ICE, // 51 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_DESERT, // 52 <EFBFBD>縷<EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_MONSTER, // 53 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_WARRIOR, // 54 <EFBFBD><EFBFBD><EFBFBD>翡<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_ASSASSIN, // 55 <EFBFBD>ڰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_SURA, // 56 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_SHAMAN, // 57 <EFBFBD><EFBFBD><EFBFBD>翡<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_ATTBONUS_TREE, // 58 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 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 <EFBFBD><EFBFBD><EFBFBD>翡<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_ASSASSIN, // 60 <EFBFBD>ڰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_SURA, // 61 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_SHAMAN, // 62 <EFBFBD><EFBFBD><EFBFBD>翡<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_WARRIOR, // 59 무사에게 저항
|
||||
POINT_RESIST_ASSASSIN, // 60 자객에게 저항
|
||||
POINT_RESIST_SURA, // 61 수라에게 저항
|
||||
POINT_RESIST_SHAMAN, // 62 무당에게 저항
|
||||
|
||||
POINT_STEAL_HP, // 63 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_STEAL_SP, // 64 <EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_STEAL_HP, // 63 생명력 흡수
|
||||
POINT_STEAL_SP, // 64 정신력 흡수
|
||||
|
||||
POINT_MANA_BURN_PCT, // 65 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
POINT_MANA_BURN_PCT, // 65 마나 번
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD>ؽ<EFBFBD> <20><><EFBFBD>ʽ<EFBFBD> ///
|
||||
/// 피해시 보너스 ///
|
||||
|
||||
POINT_DAMAGE_SP_RECOVER, // 66 <EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ŷ<EFBFBD> ȸ<><C8B8> Ȯ<><C8AE>
|
||||
POINT_DAMAGE_SP_RECOVER, // 66 공격당할 시 정신력 회복 확률
|
||||
|
||||
POINT_BLOCK, // 67 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_DODGE, // 68 ȸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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 ȭ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_FIRE, // 75 ȭ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : ȭ<><C8AD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_ELEC, // 76 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_MAGIC, // 77 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_WIND, // 78 <EFBFBD>ٶ<EFBFBD> <20><><EFBFBD><EFBFBD> : <20>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_BOW, // 74 화살 저항 : 대미지 감소
|
||||
POINT_RESIST_FIRE, // 75 화염 저항 : 화염공격에 대한 대미지 감소
|
||||
POINT_RESIST_ELEC, // 76 전기 저항 : 전기공격에 대한 대미지 감소
|
||||
POINT_RESIST_MAGIC, // 77 술법 저항 : 모든술법에 대한 대미지 감소
|
||||
POINT_RESIST_WIND, // 78 바람 저항 : 바람공격에 대한 대미지 감소
|
||||
|
||||
POINT_REFLECT_MELEE, // 79 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݻ<EFBFBD>
|
||||
POINT_REFLECT_MELEE, // 79 공격 반사
|
||||
|
||||
/// Ư<EFBFBD><EFBFBD> <20><><EFBFBD>ؽ<EFBFBD> ///
|
||||
POINT_REFLECT_CURSE, // 80 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݻ<EFBFBD>
|
||||
POINT_POISON_REDUCE, // 81 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
/// 특수 피해시 ///
|
||||
POINT_REFLECT_CURSE, // 80 저주 반사
|
||||
POINT_POISON_REDUCE, // 81 독데미지 감소
|
||||
|
||||
/// <EFBFBD><EFBFBD> <20>Ҹ<EFBFBD><D2B8><EFBFBD> ///
|
||||
POINT_KILL_SP_RECOVER, // 82 <EFBFBD><EFBFBD> <20>Ҹ<EFBFBD><D2B8><EFBFBD> MP ȸ<EFBFBD><EFBFBD>
|
||||
/// 적 소멸시 ///
|
||||
POINT_KILL_SP_RECOVER, // 82 적 소멸시 MP 회복
|
||||
POINT_EXP_DOUBLE_BONUS, // 83
|
||||
POINT_GOLD_DOUBLE_BONUS, // 84
|
||||
POINT_ITEM_DROP_BONUS, // 85
|
||||
|
||||
/// ȸ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ///
|
||||
/// 회복 관련 ///
|
||||
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 <EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD>ȣ <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȿ<><C8BF> <20><><EFBFBD><EFBFBD>
|
||||
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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ
|
||||
POINT_MOUNT, // 109 Ÿ<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ
|
||||
POINT_POLYMORPH, // 108 변신한 몬스터 번호
|
||||
POINT_MOUNT, // 109 타고있는 몬스터 번호
|
||||
|
||||
POINT_PARTY_HASTE_BONUS, // 110
|
||||
POINT_PARTY_DEFENDER_BONUS, // 111
|
||||
POINT_STAT_RESET_COUNT, // 112 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ܾ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ (1<><31> 1<><31><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD>°<EFBFBD><C2B0><EFBFBD>)
|
||||
POINT_STAT_RESET_COUNT, // 112 피의 단약 사용을 통한 스텟 리셋 포인트 (1당 1포인트 리셋가능)
|
||||
|
||||
POINT_HORSE_SKILL, // 113
|
||||
|
||||
POINT_MALL_ATTBONUS, // 114 <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD> +x%
|
||||
POINT_MALL_DEFBONUS, // 115 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +x%
|
||||
POINT_MALL_EXPBONUS, // 116 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ +x%
|
||||
POINT_MALL_ITEMBONUS, // 117 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> x/10<EFBFBD><EFBFBD>
|
||||
POINT_MALL_GOLDBONUS, // 118 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> x/10<EFBFBD><EFBFBD>
|
||||
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 <EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> +x%
|
||||
POINT_MAX_SP_PCT, // 120 <EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD> +x%
|
||||
POINT_MAX_HP_PCT, // 119 최대생명력 +x%
|
||||
POINT_MAX_SP_PCT, // 120 최대정신력 +x%
|
||||
|
||||
POINT_SKILL_DAMAGE_BONUS, // 121 <EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *(100+x)%
|
||||
POINT_NORMAL_HIT_DAMAGE_BONUS, // 122 <EFBFBD><EFBFBD>Ÿ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *(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 <EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_NORMAL_HIT_DEFEND_BONUS, // 124 <EFBFBD><EFBFBD>Ÿ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD>ʽ<EFBFBD>
|
||||
POINT_PC_BANG_DROP_BONUS, // 126 PC<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ӷ<EFBFBD> <20><><EFBFBD>ʽ<EFBFBD>
|
||||
POINT_PC_BANG_EXP_BONUS, // 125 PC방 전용 경험치 보너스
|
||||
POINT_PC_BANG_DROP_BONUS, // 126 PC방 전용 드롭률 보너스
|
||||
// END_PC_BANG_ITEM_ADD
|
||||
POINT_RAMADAN_CANDY_BONUS_EXP, // <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_RAMADAN_CANDY_BONUS_EXP, // 라마단 사탕 경험치 증가용
|
||||
|
||||
POINT_ENERGY = 128, // 128 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_ENERGY = 128, // 128 기력
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ui <EFBFBD><EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʱ⸸, Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ð<EFBFBD><C3B0><EFBFBD> POINT<4E><54> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̷<EFBFBD><CCB7><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD> <20>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD>
|
||||
POINT_ENERGY_END_TIME = 129, // 129 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>
|
||||
// 기력 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,
|
||||
|
||||
// <EFBFBD>߰<EFBFBD> <20>Ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_ICE = 133, // <EFBFBD>ñ<EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_EARTH = 134, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_DARK = 135, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 추가 속성 저항
|
||||
POINT_RESIST_ICE = 133, // 냉기 저항 : 얼음공격에 대한 대미지 감소
|
||||
POINT_RESIST_EARTH = 134, // 대지 저항 : 얼음공격에 대한 대미지 감소
|
||||
POINT_RESIST_DARK = 135, // 어둠 저항 : 얼음공격에 대한 대미지 감소
|
||||
|
||||
POINT_RESIST_CRITICAL = 136, // ũ<EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><C5A9>Ƽ<EFBFBD><C6BC> Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_PENETRATE = 137, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
POINT_RESIST_CRITICAL = 136, // 크리티컬 저항 : 상대의 크리티컬 확률을 감소
|
||||
POINT_RESIST_PENETRATE = 137, // 관통타격 저항 : 상대의 관통타격 확률을 감소
|
||||
|
||||
//POINT_MAX_NUM = 129 common/length.h
|
||||
};
|
||||
@ -352,7 +352,7 @@ struct DynamicCharacterPtr {
|
||||
uint32_t id;
|
||||
};
|
||||
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
/* 저장하는 데이터 */
|
||||
typedef struct character_point
|
||||
{
|
||||
int points[POINT_MAX_NUM];
|
||||
@ -375,7 +375,7 @@ typedef struct character_point
|
||||
BYTE skill_group;
|
||||
} CHARACTER_POINT;
|
||||
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
/* 저장되지 않는 캐릭터 데이터 */
|
||||
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];
|
||||
|
||||
// <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA>丮.
|
||||
// 용혼석 인벤토리.
|
||||
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; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ
|
||||
BYTE bBasePart; // 평상복 번호
|
||||
|
||||
int iMaxStamina;
|
||||
|
||||
@ -507,7 +507,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
||||
{
|
||||
protected:
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Entity <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 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) <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 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); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
void CreatePlayerProto(TPlayerTable & tab); // 저장 시 사용
|
||||
|
||||
void SetProto(const CMob * c_pkMob);
|
||||
WORD GetRaceNum() const;
|
||||
|
||||
void Save(); // DelayedSave
|
||||
void SaveReal(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
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(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
|
||||
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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ밪 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB>ϰ<EFBFBD> <20><><EFBFBD>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
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; } // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
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); // <EFBFBD>ٷ<EFBFBD> <20>̵<EFBFBD> <20><>Ű<EFBFBD><C5B0> <20>ʰ<EFBFBD> <20><>ǥ <20><>ġ<EFBFBD><C4A1> BLENDING <EFBFBD><EFBFBD>Ų<EFBFBD><EFBFBD>.
|
||||
bool Goto(int x, int y); // 바로 이동 시키지 않고 목표 위치로 BLENDING 시킨다.
|
||||
void Stop();
|
||||
|
||||
bool CanMove() const; // <EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ°<D6B4>?
|
||||
bool CanMove() const; // 이동할 수 있는가?
|
||||
|
||||
void SyncPacket();
|
||||
bool Sync(int x, int y); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ҵ<DEBC><D2B5><EFBFBD> <20>̵<EFBFBD> <20>Ѵ<EFBFBD> (<28><> <20><> <20><><EFBFBD>ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20>Ұ<EFBFBD><D2B0><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
bool Move(int x, int y); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB>ϰ<EFBFBD> Sync <20>ҵ带 <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
void OnMove(bool bIsAttack = false); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD> <20>Ҹ<EFBFBD><D2B8><EFBFBD>. Move() <20>ҵ<DEBC> <20>̿ܿ<CCBF><DCBF><EFBFBD><EFBFBD><EFBFBD> <20>Ҹ<EFBFBD> <20><> <20>ִ<EFBFBD>.
|
||||
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); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD> <20>ð<EFBFBD> <20><> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> SyncOwner<EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
|
||||
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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 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<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>?
|
||||
// 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);
|
||||
|
||||
/// <EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20>ٸ<EFBFBD> character <EFBFBD><EFBFBD> <20>ʴ<EFBFBD><CAB4>Ѵ<EFBFBD>.
|
||||
/// 자신의 파티에 다른 character 를 초대한다.
|
||||
/**
|
||||
* @param pchInvitee <EFBFBD>ʴ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> character. <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD><CCBE><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
* @param pchInvitee 초대할 대상 character. 파티에 참여 가능한 상태이어야 한다.
|
||||
*
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> character <EFBFBD><EFBFBD> <20><><EFBFBD>°<EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20>ʴ<EFBFBD><CAB4>ϰ<EFBFBD> <20>ʴ<EFBFBD><CAB4><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD>°<EFBFBD> <20>ƴ϶<C6B4><CFB6><EFBFBD> <20>ʴ<EFBFBD><CAB4>ϴ<EFBFBD> ij<><C4B3><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> ä<><C3A4> <20><EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
* 양측 character 의 상태가 파티에 초대하고 초대받을 수 있는 상태가 아니라면 초대하는 캐릭터에게 해당하는 채팅 메세지를 전송한다.
|
||||
*/
|
||||
void PartyInvite(LPCHARACTER pchInvitee);
|
||||
|
||||
/// <EFBFBD>ʴ<EFBFBD><EFBFBD>ߴ<EFBFBD> character <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// 초대했던 character 의 수락을 처리한다.
|
||||
/**
|
||||
* @param pchInvitee <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> character. <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD><CCBE><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
* @param pchInvitee 파티에 참여할 character. 파티에 참여가능한 상태이어야 한다.
|
||||
*
|
||||
* pchInvitee <EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><>Ȳ<EFBFBD><C8B2> <20>ƴ϶<C6B4><CFB6><EFBFBD> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> ä<><C3A4> <20><EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
* pchInvitee 가 파티에 가입할 수 있는 상황이 아니라면 해당하는 채팅 메세지를 전송한다.
|
||||
*/
|
||||
void PartyInviteAccept(LPCHARACTER pchInvitee);
|
||||
|
||||
/// <EFBFBD>ʴ<EFBFBD><EFBFBD>ߴ<EFBFBD> character <EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20>źθ<C5BA> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// 초대했던 character 의 초대 거부를 처리한다.
|
||||
/**
|
||||
* @param [in] dwPID <EFBFBD>ʴ<EFBFBD> <20>ߴ<EFBFBD> character <EFBFBD><EFBFBD> PID
|
||||
* @param [in] dwPID 초대 했던 character 의 PID
|
||||
*/
|
||||
void PartyInviteDeny(DWORD dwPID);
|
||||
|
||||
@ -961,45 +961,45 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider
|
||||
|
||||
protected:
|
||||
|
||||
/// <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// 파티에 가입한다.
|
||||
/**
|
||||
* @param pkLeader <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD>
|
||||
* @param pkLeader 가입할 파티의 리더
|
||||
*/
|
||||
void PartyJoin(LPCHARACTER pkLeader);
|
||||
|
||||
/**
|
||||
* <EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>.
|
||||
* Error code <EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD><CEB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>氡<EFBFBD><E6B0A1><EFBFBD><EFBFBD>(mutable) type <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(static) type <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
* Error code <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> PERR_SEPARATOR <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>氡<EFBFBD><E6B0A1><EFBFBD><EFBFBD> type <20>̰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> type <EFBFBD>̴<EFBFBD>.
|
||||
* 파티 가입을 할 수 없을 경우의 에러코드.
|
||||
* Error code 는 시간에 의존적인가에 따라 변경가능한(mutable) type 과 정적(static) type 으로 나뉜다.
|
||||
* Error code 의 값이 PERR_SEPARATOR 보다 낮으면 변경가능한 type 이고 높으면 정적 type 이다.
|
||||
*/
|
||||
enum PartyJoinErrCode {
|
||||
PERR_NONE = 0, ///< ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PERR_SERVER, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD> ó<><C3B3> <20>Ұ<EFBFBD>
|
||||
PERR_DUNGEON, ///< ij<EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
PERR_OBSERVER, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PERR_LVBOUNDARY, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>Ϳ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD> <20><>
|
||||
PERR_LOWLEVEL, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <20>ְ<EFBFBD><D6B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 30<33><30><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
PERR_HILEVEL, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 30<33><30><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
PERR_ALREADYJOIN, ///< <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20>̹<EFBFBD> <20><>Ƽ<EFBFBD><C6BC>
|
||||
PERR_PARTYISFULL, ///< <EFBFBD><EFBFBD>Ƽ<EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>
|
||||
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, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>Ϳ<EFBFBD> <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
PERR_MAX ///< Error code <EFBFBD>ְ<EFBFBD>ġ. <20><> <20>տ<EFBFBD> Error code <EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
|
||||
PERR_DIFFEMPIRE, ///< 상대 캐릭터와 다른 제국임
|
||||
PERR_MAX ///< Error code 최고치. 이 앞에 Error code 를 추가한다.
|
||||
};
|
||||
|
||||
/// <EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> <20>Ἲ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB>Ѵ<EFBFBD>.
|
||||
/// 파티 가입이나 결성 가능한 조건을 검사한다.
|
||||
/**
|
||||
* @param pchLeader <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> leader <EFBFBD>̰ų<EFBFBD> <20>ʴ<EFBFBD><CAB4><EFBFBD> character
|
||||
* @param pchGuest <EFBFBD>ʴ<EFBFBD><EFBFBD><EFBFBD> character
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> PartyJoinErrCode <EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20><> <20>ִ<EFBFBD>.
|
||||
* @param pchLeader 파티의 leader 이거나 초대한 character
|
||||
* @param pchGuest 초대받는 character
|
||||
* @return 모든 PartyJoinErrCode 가 반환될 수 있다.
|
||||
*/
|
||||
static PartyJoinErrCode IsPartyJoinableCondition(const LPCHARACTER pchLeader, const LPCHARACTER pchGuest);
|
||||
|
||||
/// <EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD> <20>Ἲ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB>Ѵ<EFBFBD>.
|
||||
/// 파티 가입이나 결성 가능한 동적인 조건을 검사한다.
|
||||
/**
|
||||
* @param pchLeader <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> leader <EFBFBD>̰ų<EFBFBD> <20>ʴ<EFBFBD><CAB4><EFBFBD> character
|
||||
* @param pchGuest <EFBFBD>ʴ<EFBFBD><EFBFBD><EFBFBD> character
|
||||
* @return mutable type <EFBFBD><EFBFBD> code <EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>Ѵ<EFBFBD>.
|
||||
* @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;
|
||||
|
||||
/**
|
||||
* <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD>û Event map.
|
||||
* key: <EFBFBD>ʴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PID
|
||||
* value: event<EFBFBD><EFBFBD> pointer
|
||||
* 파티초청 Event map.
|
||||
* key: 초대받은 캐릭터의 PID
|
||||
* value: event의 pointer
|
||||
*
|
||||
* <EFBFBD>ʴ<EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>͵鿡 <20><><EFBFBD><EFBFBD> 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); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20>ִ°<D6B4>?
|
||||
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); /// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
void UseSilkBotary(void); /// 비단 보따리 아이템의 사용
|
||||
|
||||
/// DB ij<EFBFBD>÷<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ƿ<DEBE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// DB 캐시로 부터 받아온 가격정보 리스트를 유저에게 전송하고 보따리 아이템 사용을 처리한다.
|
||||
/**
|
||||
* @param [in] p <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>Ŷ
|
||||
* @param [in] p 가격정보 리스트 패킷
|
||||
*
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> ó<><C3B3> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> UseSilkBotary <20><><EFBFBD><EFBFBD> DB ij<>÷<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><>û<EFBFBD>ϰ<EFBFBD>
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
||||
* 접속한 후 처음 비단 보따리 아이템 사용 시 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);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> item<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><> Ȯ<><C8AE><EFBFBD>ϰ<EFBFBD>, <20>Ұ<EFBFBD><D2B0><EFBFBD> <20>ϴٸ<CFB4> ij<><C4B3><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˷<EFBFBD><CBB7>ִ<EFBFBD> <20>Լ<EFBFBD>
|
||||
// 현재 item을 착용할 수 있는 지 확인하고, 불가능 하다면 캐릭터에게 이유를 알려주는 함수
|
||||
bool CanEquipNow(const LPITEM item, const TItemPos& srcCell = NPOS, const TItemPos& destCell = NPOS);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> item<65><6D> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><> Ȯ<><C8AE><EFBFBD>ϰ<EFBFBD>, <20>Ұ<EFBFBD><D2B0><EFBFBD> <20>ϴٸ<CFB4> ij<><C4B3><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˷<EFBFBD><CBB7>ִ<EFBFBD> <20>Լ<EFBFBD>
|
||||
// 착용중인 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:
|
||||
|
||||
/// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// 한 아이템에 대한 가격정보를 전송한다.
|
||||
/**
|
||||
* @param [in] dwItemVnum <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> vnum
|
||||
* @param [in] dwItemPrice <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @param [in] dwItemVnum 아이템 vnum
|
||||
* @param [in] dwItemPrice 아이템 가격
|
||||
*/
|
||||
void SendMyShopPriceListCmd(DWORD dwItemVnum, DWORD dwItemPrice);
|
||||
|
||||
bool m_bNoOpenedShop; ///< <EFBFBD>̹<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD> 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); // <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ <20>й<EFBFBD>, <20>α<EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
||||
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<EFBFBD><EFBFBD> <20>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ֳ<EFBFBD> üũ<C3BC>Ϸ<EFBFBD><CFB7><EFBFBD> CanBeginFight<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
void BeginFight(LPCHARACTER pkVictim); // pkVictimr과 싸우기 시작한다. (강제적임, 시작할 수 있나 체크하려면 CanBeginFight을 사용)
|
||||
|
||||
bool CounterAttack(LPCHARACTER pkChr); // <EFBFBD>ݰ<EFBFBD><EFBFBD>ϱ<EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>)
|
||||
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;
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD>
|
||||
//선악치 얻기
|
||||
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; // <EFBFBD> ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD>ŭ<EFBFBD><C5AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE>°<EFBFBD>?
|
||||
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; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
CHARACTER_SET m_set_pkChrSpawnedBy; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> skill <20><> <20><> <20>ð<EFBFBD>(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; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
LPCHARACTER GetVictim() const; // 공격할 대상 리턴
|
||||
void SetVictim(LPCHARACTER pkVictim);
|
||||
LPCHARACTER GetNearestVictim(LPCHARACTER pkChr);
|
||||
LPCHARACTER GetProtege() const; // <EFBFBD><EFBFBD>ȣ<EFBFBD>ؾ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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; // <EFBFBD><EFBFBD> Ÿ<><C5B8>
|
||||
CHARACTER_SET m_set_pkChrTargetedBy; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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();
|
||||
|
||||
/// â<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û
|
||||
/// 창고 열기 요청
|
||||
/**
|
||||
* @param [in] pszPassword 1<EFBFBD><EFBFBD> <20>̻<EFBFBD> 6<><36> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2> <20><><EFBFBD>й<EFBFBD>ȣ
|
||||
* @param [in] pszPassword 1자 이상 6자 이하의 창고 비밀번호
|
||||
*
|
||||
* DB <EFBFBD><EFBFBD> â<><C3A2><EFBFBD><EFBFBD><EFBFBD>⸦ <20><>û<EFBFBD>Ѵ<EFBFBD>.
|
||||
* â<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ߺ<EFBFBD><DFBA><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϸ<EFBFBD>, <20>ֱ<EFBFBD> â<><C3A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 10<31><30> <20>̳<EFBFBD><CCB3><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD>Ѵ<EFBFBD>.
|
||||
* DB 에 창고열기를 요청한다.
|
||||
* 창고는 중복으로 열지 못하며, 최근 창고를 닫은 시간으로 부터 10초 이내에는 열 지 못한다.
|
||||
*/
|
||||
void ReqSafeboxLoad(const char* pszPassword);
|
||||
|
||||
/// â<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD>
|
||||
/// 창고 열기 요청의 취소
|
||||
/**
|
||||
* ReqSafeboxLoad <EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>ϰ<EFBFBD> CloseSafebox <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʾ<EFBFBD><CABE><EFBFBD> <20><> <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> ȣ<><C8A3><EFBFBD>ϸ<EFBFBD> â<><C3A2><EFBFBD><EFBFBD> <20><> <20><> <20>ִ<EFBFBD>.
|
||||
* â<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û<EFBFBD><C3BB> DB <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEBE><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><>û<EFBFBD><C3BB> <20><> <20><> <20>ְ<EFBFBD> <20><><EFBFBD>ش<EFBFBD>.
|
||||
* 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; ///< â<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û <20><><EFBFBD>̰ų<CCB0> <20><><EFBFBD><EFBFBD><EFBFBD>ִ°<D6B4> <20><><EFBFBD><EFBFBD>, true <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>̰ų<CCB0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
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; } // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF><EFBFBD><EFBFBD> <20><>
|
||||
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; // Ư<EFBFBD><EFBFBD> ȿ<><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>?
|
||||
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);
|
||||
|
||||
// ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ν<EFBFBD><CEBD>Ͻ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Լ<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD><EFBFBD> CFSM::Update <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>ϰų<CFB0> UpdateStateMachine <EFBFBD>Լ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ߴµ<DFB4>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Լ<EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD>.
|
||||
// 캐릭터 인스턴스 업데이트 함수. 기존엔 이상한 상속구조로 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; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD>
|
||||
static const char msc_szLastChangeItemAttrFlag[]; ///< <EFBFBD>ֱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> Quest Flag <EFBFBD≯<EFBFBD>
|
||||
static const char msc_szChangeItemAttrCycleFlag[]; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֱ<EFBFBD><D6B1><EFBFBD> Quest Flag <EFBFBD≯<EFBFBD>
|
||||
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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> üũ.
|
||||
// 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:
|
||||
//<EFBFBD>߱<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//18<EFBFBD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//3<EFBFBD>ð<EFBFBD> : 50 % 5 <EFBFBD>ð<EFBFBD> 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;
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> : <20><>Ȱ<EFBFBD><C8B0> <20><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>Ͽ<EFBFBD>.
|
||||
// 무적 : 원활한 테스트를 위하여.
|
||||
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
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
//최종 데미지 보정.
|
||||
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;
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//독일 선물 기능 패킷 임시 저장
|
||||
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:
|
||||
//<EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
|
||||
//용혼석
|
||||
|
||||
// ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> affect, quest<EFBFBD><EFBFBD> load <EFBFBD>DZ<EFBFBD> <20><><EFBFBD><EFBFBD> DragonSoul_Initialize<EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>ϸ<EFBFBD> <20>ȵȴ<C8B5>.
|
||||
// affect<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5>Ǿ<EFBFBD> LoadAffect<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD>.
|
||||
// 캐릭터의 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();
|
||||
// <EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD> ClearItem <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ҷ<EFBFBD><D2B7><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
// <EFBFBD>ֳ<EFBFBD><EFBFBD>ϸ<EFBFBD>....
|
||||
// <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> <20>ϳ<EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> deactivate<74><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> active<76><65> <20><>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> Ȯ<><C8AE><EFBFBD>ϰ<EFBFBD>,
|
||||
// active<EFBFBD><EFBFBD> <20><>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD>, ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȥ<EFBFBD><C8A5> affect<63><74>, Ȱ<><C8B0> <20><><EFBFBD>¸<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// 반드시 ClearItem 전에 불러야 한다.
|
||||
// 왜냐하면....
|
||||
// 용혼석 하나 하나를 deactivate할 때마다 덱에 active인 용혼석이 있는지 확인하고,
|
||||
// active인 용혼석이 하나도 없다면, 캐릭터의 용혼석 affect와, 활성 상태를 제거한다.
|
||||
//
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ClearItem <EFBFBD><EFBFBD>, ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> unequip<69>ϴ<EFBFBD> <20>ٶ<EFBFBD><D9B6><EFBFBD>,
|
||||
// <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> Affect<EFBFBD><EFBFBD> <20><><EFBFBD>ŵǰ<C5B5>, <20>ᱹ <20>α<EFBFBD><CEB1><EFBFBD> <20><>, <20><>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD> Ȱ<><C8B0>ȭ<EFBFBD><C8AD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
||||
// (Unequip<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>αƿ<D7BE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>ƴ<EFBFBD><C6B4><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD>.)
|
||||
// <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> deactivate<EFBFBD><EFBFBD>Ű<EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȥ<EFBFBD><C8A5> <20><> Ȱ<><C8B0> <20><><EFBFBD>´<EFBFBD> <20>ǵ帮<C7B5><E5B8AE> <20>ʴ´<CAB4>.
|
||||
// 하지만 ClearItem 시, 캐릭터가 착용하고 있는 모든 아이템을 unequip하는 바람에,
|
||||
// 용혼석 Affect가 제거되고, 결국 로그인 시, 용혼석이 활성화되지 않는다.
|
||||
// (Unequip할 때에는 로그아웃 상태인지, 아닌지 알 수 없다.)
|
||||
// 용혼석만 deactivate시키고 캐릭터의 용혼석 덱 활성 상태는 건드리지 않는다.
|
||||
void DragonSoul_CleanUp();
|
||||
// <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> <20><>ȭâ
|
||||
// 용혼석 강화창
|
||||
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<EFBFBD><EFBFBD> <20>ǿ<EFBFBD><C7BF>Ͽ<EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD>,
|
||||
// SyncPosition<EFBFBD><EFBFBD> <20>Ͼ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// SyncPosition을 악용하여 타유저를 이상한 곳으로 보내는 핵 방어하기 위하여,
|
||||
// SyncPosition이 일어날 때를 기록.
|
||||
timeval m_tvLastSyncTime;
|
||||
int m_iSyncHackCount;
|
||||
public:
|
||||
|
@ -24,7 +24,7 @@ class CHARACTER_MANAGER : public singleton<CHARACTER_MANAGER>
|
||||
|
||||
void Destroy();
|
||||
|
||||
void GracefulShutdown(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˴ٿ<CBB4><D9BF><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>. PC<50><43> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ű<EFBFBD><C5B0> Destroy <EFBFBD>Ѵ<EFBFBD>.
|
||||
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: <EFBFBD><EFBFBD><EFBFBD> <20><>ƾ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؾ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>" <20><><EFBFBD><EFBFBD> ǥ<>ø<EFBFBD> <20>صΰ<D8B5> <20><><EFBFBD><EFBFBD>
|
||||
// (<EFBFBD><EFBFBD>: 1 frame) <EFBFBD>Ŀ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
// DelayedSave: 어떠한 루틴 내에서 저장을 해야 할 짓을 많이 하면 저장
|
||||
// 쿼리가 너무 많아지므로 "저장을 한다" 라고 표시만 해두고 잠깐
|
||||
// (예: 1 frame) 후에 저장시킨다.
|
||||
void DelayedSave(LPCHARACTER ch);
|
||||
bool FlushDelayedSave(LPCHARACTER ch); // Delayed <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20>ִٸ<D6B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>.
|
||||
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<EFBFBD><EFBFBD> <20><><EFBFBD>ư<EFBFBD><C6B0><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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); // <EFBFBD><EFBFBD> <20><><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
extern void SendLog(const char * c_pszBuf); // <EFBFBD><EFBFBD>ڿ<EFBFBD><EFBFBD>Ը<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
extern void BroadcastNotice(const char * c_pszBuf); // <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
extern void SendNoticeMap(const char* c_pszBuf, int nMapIndex, bool bBigFont); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
extern void SendMonarchNotice(BYTE bEmpire, const char * c_pszBuf); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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 <EFBFBD≯<EFBFBD> TrafficProfiler <EFBFBD><EFBFBD> <20>Ҵ<EFBFBD>.
|
||||
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; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> "<22><>ȭ<EFBFBD><C8AD><EFBFBD><EFBFBD>" <20><> <20>Ϲ<EFBFBD><CFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
extern bool g_noticeBattleZone; // <EFBFBD>߸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>뿡 <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ȳ<EFBFBD><C8B3><EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> <20>˷<EFBFBD><CBB7><EFBFBD>
|
||||
extern bool g_protectNormalPlayer; // 범법자가 "평화모드" 인 일반유저를 공격하지 못함
|
||||
extern bool g_noticeBattleZone; // 중립지대에 입장하면 안내메세지를 알려줌
|
||||
|
||||
extern DWORD g_GoldDropTimeLimitValue;
|
||||
|
||||
|
@ -13,7 +13,7 @@ enum EMonsterChatState
|
||||
|
||||
typedef struct SMobRankStat
|
||||
{
|
||||
int iGoldPercent; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE>
|
||||
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<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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 : ť<EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><EFBFBD><EFBFBD>
|
||||
* 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; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20>ݾ<EFBFBD>
|
||||
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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28>翬<EFBFBD><E7BFAC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
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, ...); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> f<><66><EFBFBD>ڷ<EFBFBD> ȣ<><C8A3><EFBFBD><EFBFBD> (SQLMsg *) <EFBFBD>˾Ƽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
template<class Functor> void FuncAfterQuery(Functor f, const char * c_pszFormat, ...); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> f<><66> ȣ<><C8A3><EFBFBD><EFBFBD> void f(void) <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ
|
||||
// sequence 버그 찾기용 데이타
|
||||
struct seq_t
|
||||
{
|
||||
BYTE hdr;
|
||||
BYTE seq;
|
||||
};
|
||||
typedef std::vector<seq_t> seq_vector_t;
|
||||
// sequence <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ÿ
|
||||
// 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; }
|
||||
|
||||
// <EFBFBD>ڵ彦<EFBFBD><EFBFBD>ũ (<28>ð<EFBFBD> <20><><EFBFBD><EFBFBD>ȭ)
|
||||
// 핸드쉐이크 (시간 동기화)
|
||||
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();
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 제국
|
||||
BYTE GetEmpire();
|
||||
|
||||
// for p2p
|
||||
@ -127,7 +127,7 @@ class DESC
|
||||
void DisconnectOfSameLogin();
|
||||
|
||||
void SetAdminMode();
|
||||
bool IsAdminMode(); // Handshake <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD>?
|
||||
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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ֳ<EFBFBD>?
|
||||
bool m_bAdminMode; // Handshake 에서 어드민 명령을 쓸수있나?
|
||||
bool m_bPong;
|
||||
|
||||
int m_iCurrentSequence;
|
||||
@ -252,7 +252,7 @@ class DESC
|
||||
|
||||
void ChatPacket(BYTE type, const char * format, ...);
|
||||
|
||||
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ã<><C3A3><EFBFBD><EFBFBD> <20>ڵ<EFBFBD> */
|
||||
/* 시퀀스 버그 찾기용 코드 */
|
||||
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; } // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
int CountRealMonster(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʻ<EFBFBD><CABB><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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<EFBFBD><EFBFBD> item_vnum<EFBFBD><EFBFBD> item_count<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// 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;
|
||||
|
||||
// <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><>ġ
|
||||
// 적 전멸시 워프하는 위치
|
||||
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);
|
||||
|
||||
// <EFBFBD><EFBFBD>Ƽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ӽ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// m_map_pkParty<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ν<EFBFBD><CEBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ٰ<EFBFBD> <20>Ǵ<EFBFBD><C7B4>Ͽ<EFBFBD>,
|
||||
// <EFBFBD>ӽ÷<EFBFBD> <20><> <20><>Ƽ<EFBFBD><C6BC> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// 파티 단위 던전 입장을 위한 임시 변수.
|
||||
// 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(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Entity<EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
void ViewReencode(); // 주위 Entity에 패킷을 다시 보낸다.
|
||||
|
||||
int GetViewAge() const { return m_iViewAge; }
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
/*
|
||||
* Filename: event.h
|
||||
* Description: <EFBFBD>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> (timed event)
|
||||
* Description: 이벤트 관련 (timed event)
|
||||
*
|
||||
* Author: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (aka. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Cronan), <EFBFBD>ۿ<EFBFBD><EFBFBD><EFBFBD> (aka. myevan, <EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD>)
|
||||
* 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); // <EFBFBD>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
extern int event_processing_time(LPEVENT event); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
extern int event_time(LPEVENT event); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
extern void event_reset_time(LPEVENT event, int when); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>
|
||||
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; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CExchange <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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<EFBFBD><EFBFBD>°(map<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, txt<78><74> <20><><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>) row<6F><77> Ư<><C6AF> <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD>ϴ<EFBFBD> <20>Լ<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̱<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>.
|
||||
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;
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, idx<EFBFBD><EFBFBD> txt<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// 참고로, 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<EFBFBD><EFBFBD> <20><><EFBFBD>캽.
|
||||
// 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<EFBFBD><EFBFBD> <20><><EFBFBD>캽.
|
||||
// default group을 살펴봄.
|
||||
pChildGroup = GetChildNode("default");
|
||||
if (NULL != pChildGroup)
|
||||
{
|
||||
|
@ -29,12 +29,12 @@ struct SGuildMaster
|
||||
|
||||
typedef struct SGuildMember
|
||||
{
|
||||
DWORD pid; // player <EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD><EFBFBD><EFBFBD> id; primary key
|
||||
BYTE grade; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7>̾<EFBFBD><CCBE><EFBFBD> <20><><EFBFBD><EFBFBD> 1 to 15 (1<EFBFBD><EFBFBD> ¯)
|
||||
DWORD pid; // player 테이블의 id; primary key
|
||||
BYTE grade; // 길드상의 플레이어의 계급 1 to 15 (1이 짱)
|
||||
BYTE is_general;
|
||||
BYTE job;
|
||||
BYTE level;
|
||||
DWORD offer_exp; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ġ
|
||||
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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20≯<EFBFBD>
|
||||
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); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ä<><C3A4>
|
||||
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 <EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>忡<EFBFBD><E5BFA1> <20>ִ<EFBFBD> <20><> <20>õ<EFBFBD><C3B5>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD>?
|
||||
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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>尡<EFBFBD><E5B0A1> <20>ʴ븦 <20>Ѵ<EFBFBD>.
|
||||
/// character 에게 길드가입 초대를 한다.
|
||||
/**
|
||||
* @param pchInviter <EFBFBD>ʴ<EFBFBD><EFBFBD><EFBFBD> character.
|
||||
* @param pchInvitee <EFBFBD>ʴ<EFBFBD><EFBFBD><EFBFBD> character.
|
||||
* @param pchInviter 초대한 character.
|
||||
* @param pchInvitee 초대할 character.
|
||||
*
|
||||
* <EFBFBD>ʴ<EFBFBD><EFBFBD>ϰų<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>¶<EFBFBD><C2B6><EFBFBD> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> ä<><C3A4> <20><EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
* 초대하거나 받을수 없는 상태라면 해당하는 채팅 메세지를 전송한다.
|
||||
*/
|
||||
void Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee );
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʴ뿡 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> character <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// 길드초대에 대한 상대 character 의 수락을 처리한다.
|
||||
/**
|
||||
* @param pchInvitee <EFBFBD>ʴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> character
|
||||
* @param pchInvitee 초대받은 character
|
||||
*
|
||||
* <EFBFBD><EFBFBD><EFBFBD>忡 <20><><EFBFBD><EFBFBD><D4B0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>°<EFBFBD> <20>ƴ϶<C6B4><CFB6><EFBFBD> <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> ä<><C3A4> <20><EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
* 길드에 가입가능한 상태가 아니라면 해당하는 채팅 메세지를 전송한다.
|
||||
*/
|
||||
void InviteAccept( LPCHARACTER pchInvitee );
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʴ뿡 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> character <20><> <20>źθ<C5BA> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// 길드초대에 대한 상대 character 의 거부를 처리한다.
|
||||
/**
|
||||
* @param dwPID <EFBFBD>ʴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> character <EFBFBD><EFBFBD> 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
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>.
|
||||
/// 길드 가입을 할 수 없을 경우의 에러코드.
|
||||
enum GuildJoinErrCode {
|
||||
GERR_NONE = 0, ///< ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GERR_WITHDRAWPENALTY, ///< Ż<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><D4B0><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
GERR_COMMISSIONPENALTY, ///< <EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><D4B0><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
GERR_ALREADYJOIN, ///< <EFBFBD><EFBFBD><EFBFBD>尡<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>Ͱ<EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD>忡 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
GERR_GUILDISFULL, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>
|
||||
GERR_GUILD_IS_IN_WAR, ///< <EFBFBD><EFBFBD><EFBFBD>尡 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
GERR_INVITE_LIMIT, ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
GERR_MAX ///< Error code <EFBFBD>ְ<EFBFBD>ġ. <20><> <20>տ<EFBFBD> Error code <EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>.
|
||||
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 를 추가한다.
|
||||
};
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD>忡 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB>Ѵ<EFBFBD>.
|
||||
/// 길드에 가입 가능한 조건을 검사한다.
|
||||
/**
|
||||
* @param [in] pchInvitee <EFBFBD>ʴ<EFBFBD><EFBFBD><EFBFBD> character
|
||||
* @param [in] pchInvitee 초대받는 character
|
||||
* @return GuildJoinErrCode
|
||||
*/
|
||||
GuildJoinErrCode VerifyGuildJoinableCondition( const LPCHARACTER pchInvitee );
|
||||
|
||||
typedef std::map< DWORD, LPEVENT > EventMap;
|
||||
EventMap m_GuildInviteEventMap; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û Event map. key: <EFBFBD>ʴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 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; // ž<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20>ּ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int iMinLevel; // 탑승할 수 있는 최소 레벨
|
||||
int iNPCRace;
|
||||
int iMaxHealth; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> ü<><C3BC>
|
||||
int iMaxStamina; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD>̳<D7B9>
|
||||
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 = <EFBFBD>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD> 1 = <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>û<EFBFBD><C3BB> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŷ(HEADER_DG_MYSHOP_PRICELIST_RES) ó<EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>
|
||||
/// 아이템 가격정보 리스트 요청에 대한 응답 패킷(HEADER_DG_MYSHOP_PRICELIST_RES) 처리함수
|
||||
/**
|
||||
* @param d <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><>û<EFBFBD><C3BB> <20>÷<EFBFBD><C3B7>̾<EFBFBD><CCBE><EFBFBD> descriptor
|
||||
* @param p <EFBFBD><EFBFBD>Ŷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @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);
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD>Ʈ
|
||||
// 독일 선물 기능 테스트
|
||||
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<EFBFBD><EFBFBD> GetOriginalVnum<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> comment
|
||||
// GetVnum<EFBFBD><EFBFBD> Masking <EFBFBD><EFBFBD> Vnum<EFBFBD>̴<EFBFBD>. <20≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ν<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Vnum<EFBFBD><EFBFBD> 10<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Vnum<EFBFBD><EFBFBD> 20<EFBFBD><EFBFBD> <20><>ó<EFBFBD><C3B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
|
||||
// Masking <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ori_to_new.txt<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ǵ<EFBFBD> <20><><EFBFBD>̴<EFBFBD>.
|
||||
// GetOriginalVnum<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Vnum<75><6D><EFBFBD><EFBFBD>, <20>α<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>, Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> Vnum<75><6D> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
// 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); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȿ<><C8BF><EFBFBD><EFBFBD> ij<><C4B3><EFBFBD>Ϳ<EFBFBD> <20>ο<EFBFBD> <20>Ѵ<EFBFBD>. bAdd<EFBFBD><EFBFBD> false<EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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(); // <EFBFBD>Ӽ<EFBFBD> <20>ٴ°<D9B4><C2B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>迭<EFBFBD><E8BFAD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
|
||||
int GetAttributeSetIndex(); // 속성 붙는것을 지정한 배열의 어느 인덱스를 사용하는지 돌려준다.
|
||||
void AlterToMagicItem();
|
||||
void AlterToSocketItem(int iSocketCount);
|
||||
|
||||
@ -165,7 +165,7 @@ class CItem : public CEntity
|
||||
void StopTimerBasedOnWearExpireEvent();
|
||||
void StopAccessorySocketExpireEvent();
|
||||
|
||||
// <EFBFBD>ϴ<EFBFBD> REAL_TIME<EFBFBD><EFBFBD> TIMER_BASED_ON_WEAR <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// 일단 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
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD>
|
||||
// 액세서리에 광산을 통해 소켓을 추가
|
||||
bool IsAccessoryForSocket();
|
||||
|
||||
int GetAccessorySocketGrade();
|
||||
@ -193,7 +193,7 @@ class CItem : public CEntity
|
||||
|
||||
void AccessorySocketDegrade();
|
||||
|
||||
// <EFBFBD>Ǽ<EFBFBD><EFBFBD>縮 <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD><EFBFBD><EFBFBD> Ÿ<≯<EFBFBD> <20><><EFBFBD>ư<EFBFBD><C6B0>°<EFBFBD>( <20><><EFBFBD><EFBFBD>, <20><> )
|
||||
// 악세사리 를 아이템에 밖았을때 타이머 돌아가는것( 구리, 등 )
|
||||
void StartAccessorySocketExpireEvent();
|
||||
void SetAccessorySocketExpireEvent(LPEVENT pkEvent);
|
||||
|
||||
@ -227,7 +227,7 @@ class CItem : public CEntity
|
||||
|
||||
protected:
|
||||
friend class CInputDB;
|
||||
bool OnAfterCreatedItem(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Բ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>(<28>ε<EFBFBD>)<29><> <20><> <20>Ҹ<EFBFBD><D2B8><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD>.
|
||||
bool OnAfterCreatedItem(); // 서버상에 아이템이 모든 정보와 함께 완전히 생성(로드)된 후 불리우는 함수.
|
||||
|
||||
public:
|
||||
bool IsRideItem();
|
||||
@ -237,46 +237,46 @@ class CItem : public CEntity
|
||||
bool IsNewMountItem();
|
||||
|
||||
#ifdef __AUCTION__
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 경매장
|
||||
bool MoveToAuction ();
|
||||
void CopyToRawData (TPlayerItem* item);
|
||||
#endif
|
||||
// <EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3> <20><><EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ȯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ٰ<EFBFBD> <20>Ͽ<EFBFBD>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD>, <20><>ȯ <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><DBB5><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>뿪<EFBFBD><EBBFAA> <20>Ҵ<EFBFBD><D2B4>Ͽ<EFBFBD><CFBF><EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD> <20><><EFBFBD><EFBFBD> ȿ<><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴµ<CFB4>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Ŭ<><C5AC><EFBFBD><EFBFBD>, vnum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE>־<EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> vnum<75><6D> <20>˴<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ھƾ<DABE><C6BE>ϴ<EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><>Ȳ<EFBFBD><C8B2> <20>´<EFBFBD><C2B4>Ҵ<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> vnum<75><6D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ư<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> vnum<75><6D><EFBFBD><EFBFBD> <20>ٲ㼭 <20><><EFBFBD><EFBFBD> <20>ϰ<EFBFBD>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> vnum<75><6D><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2>ֵ<EFBFBD><D6B5><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
// 독일에서 기존 캐시 아이템과 같지만, 교환 가능한 캐시 아이템을 만든다고 하여,
|
||||
// 오리지널 아이템에, 교환 금지 플래그만 삭제한 새로운 아이템들을 새로운 아이템 대역에 할당하였다.
|
||||
// 문제는 새로운 아이템도 오리지널 아이템과 같은 효과를 내야하는데,
|
||||
// 서버건, 클라건, vnum 기반으로 되어있어
|
||||
// 새로운 vnum을 죄다 서버에 새로 다 박아야하는 안타까운 상황에 맞닿았다.
|
||||
// 그래서 새 vnum의 아이템이면, 서버에서 돌아갈 때는 오리지널 아이템 vnum으로 바꿔서 돌고 하고,
|
||||
// 저장할 때에 본래 vnum으로 바꿔주도록 한다.
|
||||
|
||||
// Mask vnum<EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>(ex. <20><><EFBFBD><EFBFBD> <20><>Ȳ)<29><> <20><><EFBFBD><EFBFBD> vnum<75><6D> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20><><EFBFBD>ư<EFBFBD><C6B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD>.
|
||||
// Mask vnum은 어떤 이유(ex. 위의 상황)로 인해 vnum이 바뀌어 돌아가는 아이템을 위해 있다.
|
||||
void SetMaskVnum(DWORD vnum) { m_dwMaskVnum = vnum; }
|
||||
DWORD GetMaskVnum() { return m_dwMaskVnum; }
|
||||
bool IsMaskedItem() { return m_dwMaskVnum != 0; }
|
||||
|
||||
// <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
|
||||
// 용혼석
|
||||
bool IsDragonSoul();
|
||||
int GiveMoreTime_Per(float fPercent);
|
||||
int GiveMoreTime_Fix(DWORD dwTime);
|
||||
|
||||
private:
|
||||
TItemTable const * m_pProto; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8>
|
||||
TItemTable const * m_pProto; // 프로토 타잎
|
||||
|
||||
DWORD m_dwVnum;
|
||||
LPCHARACTER m_pOwner;
|
||||
|
||||
BYTE m_bWindow; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DWORD m_dwID; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ
|
||||
bool m_bEquipped; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE>°<EFBFBD>?
|
||||
BYTE m_bWindow; // 현재 아이템이 위치한 윈도우
|
||||
DWORD m_dwID; // 고유번호
|
||||
bool m_bEquipped; // 장착 되었는가?
|
||||
DWORD m_dwVID; // VID
|
||||
WORD m_wCell; // <EFBFBD><EFBFBD>ġ
|
||||
DWORD m_dwCount; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int m_lFlag; // <EFBFBD>߰<EFBFBD> flag
|
||||
DWORD m_dwLastOwnerPID; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> PID
|
||||
WORD m_wCell; // 위치
|
||||
DWORD m_dwCount; // 개수
|
||||
int m_lFlag; // 추가 flag
|
||||
DWORD m_dwLastOwnerPID; // 마지막 가지고 있었던 사람의 PID
|
||||
|
||||
bool m_bExchanging; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ<EFBFBD><C8AF> <20><><EFBFBD><EFBFBD>
|
||||
bool m_bExchanging; ///< 현재 교환중 상태
|
||||
|
||||
int m_alSockets[ITEM_SOCKET_MAX_NUM]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ĺ
|
||||
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<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>Ӽ<EFBFBD> <20><EFBFBD>
|
||||
// type attr<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD> <20>Ӽ<EFBFBD> <20><EFBFBD><D7B7><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> special_item_group.txt<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Special type<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ǵ<EFBFBD> <20>쿡 <20><><EFBFBD><EFBFBD> UNIQUE ITEM<EFBFBD>̴<EFBFBD>.
|
||||
// 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 Ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE><EFBFBD><EFBFBD> vnum.sig_use<73><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><EFBFBD><D7B7>̴<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD>, <20><> <20>쿡 <20><><EFBFBD><EFBFBD><EEB0A1> <20><><EFBFBD>ؼ<EFBFBD><D8BC><EFBFBD> ITEM <EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD> TYPE<EFBFBD><EFBFBD> QUEST<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
// SPECIAL Ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> idx, item_vnum, attr_vnum<EFBFBD><EFBFBD> <20>Է<EFBFBD><D4B7>Ѵ<EFBFBD>. attr_vnum<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> CSpecialAttrGroup<EFBFBD><EFBFBD> Vnum<EFBFBD>̴<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD> <20>쿡 <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>.
|
||||
// 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, <EFBFBD><EFBFBD> m_bType == PCT <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>,
|
||||
// Ȯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ذ<EFBFBD><D8B0><EFBFBD> <20>ʰ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD>.
|
||||
// Type Multi, 즉 m_bType == PCT 인 경우,
|
||||
// 확률을 더해가지 않고, 독립적으로 계산하여 아이템을 생성한다.
|
||||
// 따라서 여러 개의 아이템이 생성될 수 있다.
|
||||
// by rtsummit
|
||||
int GetMultiIndex(std::vector <int> &idx_vec) const
|
||||
{
|
||||
@ -143,8 +143,8 @@ class CSpecialItemGroup
|
||||
return false;
|
||||
}
|
||||
|
||||
// Group<EFBFBD><EFBFBD> Type<EFBFBD><EFBFBD> Special<EFBFBD><EFBFBD> <20><><EFBFBD>쿡
|
||||
// dwVnum<EFBFBD><EFBFBD> <20><>Ī<EFBFBD>Ǵ<EFBFBD> AttrVnum<EFBFBD><EFBFBD> return<EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>.
|
||||
// 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(); // <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>θ<EFBFBD><CEB8><EFBFBD>.
|
||||
void Update(); // 매 루프마다 부른다.
|
||||
void GracefulShutdown();
|
||||
|
||||
DWORD GetNewID();
|
||||
bool SetMaxItemID(TItemIDRangeTable range); // <EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
bool SetMaxItemID(TItemIDRangeTable range); // 최대 고유 아이디를 지정
|
||||
bool SetMaxSpareItemID(TItemIDRangeTable range);
|
||||
|
||||
// DelayedSave: <EFBFBD><EFBFBD><EFBFBD> <20><>ƾ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ؾ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>" <20><><EFBFBD><EFBFBD> ǥ<>ø<EFBFBD> <20>صΰ<D8B5> <20><><EFBFBD><EFBFBD>
|
||||
// (<EFBFBD><EFBFBD>: 1 frame) <EFBFBD>Ŀ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
// DelayedSave: 어떠한 루틴 내에서 저장을 해야 할 짓을 많이 하면 저장
|
||||
// 쿼리가 너무 많아지므로 "저장을 한다" 라고 표시만 해두고 잠깐
|
||||
// (예: 1 frame) 후에 저장시킨다.
|
||||
void DelayedSave(LPITEM item);
|
||||
void FlushDelayedSave(LPITEM item); // Delayed <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20>ִٸ<D6B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>.
|
||||
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); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>Լ<EFBFBD>.
|
||||
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 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
DWORD m_dwVIDCount; ///< <EFBFBD>̳༮ VID<EFBFBD><EFBFBD> <20>ƴ϶<C6B4> <20>׳<EFBFBD> <20><><EFBFBD>μ<EFBFBD><CEBC><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ũ <20><>ȣ<EFBFBD><C8A3>.
|
||||
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:
|
||||
// <EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ij<><C4B3> <20><><EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ȯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ٰ<EFBFBD> <20>Ͽ<EFBFBD>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20><>ȯ <20><><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><DBB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>뿪<EFBFBD><EBBFAA> <20>Ҵ<EFBFBD><D2B4>Ͽ<EFBFBD><CFBF><EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۰<EFBFBD> <20><><EFBFBD><EFBFBD> ȿ<><C8BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴµ<CFB4>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Ŭ<><C5AC><EFBFBD><EFBFBD>, vnum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE>־<EFBFBD>
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> vnum<75><6D> <20>˴<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ھƾ<DABE><C6BE>ϴ<EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD> <20><>Ȳ<EFBFBD><C8B2> <20>´<EFBFBD><C2B4>Ҵ<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> vnum<75><6D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ư<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> vnum<75><6D><EFBFBD><EFBFBD> <20>ٲ㼭 <20><><EFBFBD><EFBFBD> <20>ϰ<EFBFBD>,
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> vnum<75><6D><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2>ֵ<EFBFBD><D6B5><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
// <EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> vnum<75><6D> <20><><EFBFBD>ο<EFBFBD> vnum<75><6D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// 독일에서 기존 캐시 아이템과 같지만, 교환 가능한 캐시 아이템을 만든다고 하여,
|
||||
// 오리지널 아이템에 교환 금지 플래그만 삭제한 새로운 아이템들을 만들어,
|
||||
// 새로운 아이템 대역을 할당하였다.
|
||||
// 문제는 새로운 아이템도 오리지널 아이템과 같은 효과를 내야하는데,
|
||||
// 서버건, 클라건, 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); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> m_Relation, m_InverseRelation <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ҵ<DEBC>
|
||||
void __AddToList(keyA account, keyA companion); // 실제 m_Relation, m_InverseRelation 수정하는 메소드
|
||||
void AddToList(keyA account, keyA companion);
|
||||
|
||||
void __RemoveFromList(keyA account, keyA companion); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> m_Relation, m_InverseRelation <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ҵ<DEBC>
|
||||
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; // <EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD> <20>ð<EFBFBD> (ms)
|
||||
DWORD dwHitDistance; // <EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǵ<EFBFBD> <20>Ÿ<EFBFBD> (<28><><EFBFBD><EFBFBD> <20><>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; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ
|
||||
DWORD m_dwLastAttackedTime; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD>
|
||||
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]; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int m_DefenseUp[4]; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݰ<EFBFBD><DDB0><EFBFBD>
|
||||
int m_PowerUp[4]; ///< 군주의 사자후
|
||||
int m_DefenseUp[4]; ///< 군주의 금강권
|
||||
|
||||
int m_PowerUpCT[4]; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int m_DefenseUpCT[4]; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݰ<EFBFBD><DDB0><EFBFBD>
|
||||
int m_PowerUpCT[4]; ///< 군주의 사자후
|
||||
int m_DefenseUpCT[4]; ///< 군주의 금강권
|
||||
};
|
||||
|
||||
bool IsMonarchWarpZone (int map_idx);
|
||||
|
@ -18,40 +18,40 @@ enum EMotionMode
|
||||
|
||||
enum EPublicMotion
|
||||
{
|
||||
MOTION_NONE, // 0 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
MOTION_WAIT, // 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> (00.msa)
|
||||
MOTION_WALK, // 2 <EFBFBD>ȱ<EFBFBD> (02.msa)
|
||||
MOTION_RUN, // 3 <EFBFBD>ٱ<EFBFBD> (03.msa)
|
||||
MOTION_CHANGE_WEAPON, // 4 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٲٱ<EFBFBD>
|
||||
MOTION_DAMAGE, // 5 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD> (30.msa)
|
||||
MOTION_DAMAGE_FLYING, // 6 <EFBFBD><EFBFBD><EFBFBD>鳯<EFBFBD>ư<EFBFBD><EFBFBD><EFBFBD> (32.msa)
|
||||
MOTION_STAND_UP, // 7 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͼ<EFBFBD><EFBFBD> (33.msa)
|
||||
MOTION_DAMAGE_BACK, // 8 <EFBFBD>ĸ<EFBFBD><EFBFBD>±<EFBFBD> (34.msa)
|
||||
MOTION_DAMAGE_FLYING_BACK, // 9 <EFBFBD>ĸ鳯<EFBFBD>ư<EFBFBD><EFBFBD><EFBFBD> (35.msa)
|
||||
MOTION_STAND_UP_BACK, // 10 <EFBFBD>ĸ<EFBFBD><EFBFBD>Ͼ<EFBFBD><EFBFBD> (26.msa)
|
||||
MOTION_DEAD, // 11 <EFBFBD>ױ<EFBFBD> (31.msa)
|
||||
MOTION_DEAD_BACK, // 12 <EFBFBD>ĸ<EFBFBD><EFBFBD>ױ<EFBFBD> (37.msa)
|
||||
MOTION_NORMAL_ATTACK, // 13 <EFBFBD>⺻ <20><><EFBFBD><EFBFBD>
|
||||
MOTION_COMBO_ATTACK_1, // 14 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MOTION_COMBO_ATTACK_2, // 15 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MOTION_COMBO_ATTACK_3, // 16 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MOTION_COMBO_ATTACK_4, // 17 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MOTION_COMBO_ATTACK_5, // 18 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MOTION_COMBO_ATTACK_6, // 19 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MOTION_COMBO_ATTACK_7, // 20 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MOTION_COMBO_ATTACK_8, // 21 <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MOTION_INTRO_WAIT, // 22 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MOTION_INTRO_SELECTED, // 23 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MOTION_INTRO_NOT_SELECTED, // 24 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȭ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
MOTION_SPAWN, // 25 <EFBFBD><EFBFBD>ȯ
|
||||
MOTION_FISHING_THROW, // 26 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
MOTION_FISHING_WAIT, // 27 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MOTION_FISHING_STOP, // 28 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><D7B8>α<EFBFBD>
|
||||
MOTION_FISHING_REACT, // 29 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MOTION_FISHING_CATCH, // 30 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MOTION_FISHING_FAIL, // 31 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
MOTION_STOP, // 32 <EFBFBD><EFBFBD> <20><><EFBFBD>߱<EFBFBD>
|
||||
MOTION_SPECIAL_1, // 33 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų
|
||||
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();
|
||||
|
||||
// <EFBFBD>Ʒ<EFBFBD> Register* Unregister* pair<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ƾ<EFBFBD><C6BE> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ǥ<><C7A5><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
||||
// 아래 Register* Unregister* pair들은 내부적으로 사실 같은 루틴을 사용한다.
|
||||
// 단지 명시적으로 표시하기 위한 것
|
||||
void RegisterAcceptor(LPDESC d);
|
||||
void UnregisterAcceptor(LPDESC d);
|
||||
|
||||
void RegisterConnector(LPDESC d);
|
||||
void UnregisterConnector(LPDESC d);
|
||||
|
||||
void EraseUserByDesc(LPDESC d); // <EFBFBD>ش<EFBFBD> desc<EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
void EraseUserByDesc(LPDESC d); // 해당 desc에 있는 유저들을 지운다.
|
||||
|
||||
void FlushOutput();
|
||||
|
||||
void Boot(LPDESC d); // p2p ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>. (<28><> ij<><C4B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>)
|
||||
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, // @ <EFBFBD><EFBFBD> <20><><EFBFBD>۵Ǹ<DBB5> <20>ؽ<EFBFBD>Ʈ<EFBFBD><C6AE> <20>Ľ<EFBFBD><C4BD>Ѵ<EFBFBD>.
|
||||
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, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2><EFBFBD><EFBFBD> <20><>??<3F>´<EFBFBD>.
|
||||
HEADER_CG_SAFEBOX_CHECKOUT = 71, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD>.
|
||||
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 : <EFBFBD>̷<EFBFBD> <20><>XXX <20><><EFBFBD><EFBFBD> <20>̰<EFBFBD> Packet<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20>̷<EFBFBD><CCB7><EFBFBD> <20>ڵ<EFBFBD><DAB5>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѿ<D1BE><EEB0A1>.
|
||||
//enum<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD><CFB4><EFBFBD>. <20>ƴ<EFBFBD> namepsace<63><65> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD><CFB4><EFBFBD>..
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> packet generator<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>. <20>̷<EFBFBD> <20><>XX
|
||||
//<EFBFBD>̷<EFBFBD><EFBFBD>ٰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> å<><C3A5><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>???
|
||||
//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, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>
|
||||
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; // <EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
DWORD dwTargetPID; // ã<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
DWORD dwFromPID; // 저 위치로 워프하려는 사람
|
||||
DWORD dwTargetPID; // 찾는 사람
|
||||
} TPacketGGFindPosition;
|
||||
|
||||
typedef struct SPacketGGWarpCharacter
|
||||
@ -496,14 +496,14 @@ typedef struct SPacketGGBlockChat
|
||||
LONG lBlockDuration;
|
||||
} TPacketGGBlockChat;
|
||||
|
||||
/* Ŭ<EFBFBD><EFBFBD><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ */
|
||||
/* 클라이언트 측에서 보내는 패킷 */
|
||||
|
||||
typedef struct command_text
|
||||
{
|
||||
BYTE bHeader;
|
||||
} TPacketCGText;
|
||||
|
||||
/* <EFBFBD>α<EFBFBD><EFBFBD><EFBFBD> (1) */
|
||||
/* 로그인 (1) */
|
||||
typedef struct command_handshake
|
||||
{
|
||||
BYTE bHeader;
|
||||
@ -587,7 +587,7 @@ typedef struct command_player_create_success
|
||||
TSimplePlayer player;
|
||||
} TPacketGCPlayerCreateSuccess;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 공격
|
||||
typedef struct command_attack
|
||||
{
|
||||
BYTE bHeader;
|
||||
@ -609,7 +609,7 @@ enum EMoveFuncType
|
||||
FUNC_SKILL = 0x80,
|
||||
};
|
||||
|
||||
// <EFBFBD>̵<EFBFBD>
|
||||
// 이동
|
||||
typedef struct command_move
|
||||
{
|
||||
BYTE bHeader;
|
||||
@ -628,22 +628,22 @@ typedef struct command_sync_position_element
|
||||
LONG lY;
|
||||
} TPacketCGSyncPositionElement;
|
||||
|
||||
// <EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD>ȭ
|
||||
typedef struct command_sync_position // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
// 위치 동기화
|
||||
typedef struct command_sync_position // 가변 패킷
|
||||
{
|
||||
BYTE bHeader;
|
||||
WORD wSize;
|
||||
} TPacketCGSyncPosition;
|
||||
|
||||
/* ä<EFBFBD><EFBFBD> (3) */
|
||||
typedef struct command_chat // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
/* 채팅 (3) */
|
||||
typedef struct command_chat // 가변 패킷
|
||||
{
|
||||
BYTE header;
|
||||
WORD size;
|
||||
BYTE type;
|
||||
} TPacketCGChat;
|
||||
|
||||
/* <EFBFBD>ӼӸ<EFBFBD> */
|
||||
/* 귓속말 */
|
||||
typedef struct command_whisper
|
||||
{
|
||||
BYTE bHeader;
|
||||
@ -803,7 +803,7 @@ typedef struct command_quest_confirm
|
||||
} TPacketCGQuestConfirm;
|
||||
|
||||
/*
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
* 서버 측에서 보내는 패킷
|
||||
*/
|
||||
typedef struct packet_quest_confirm
|
||||
{
|
||||
@ -919,7 +919,7 @@ typedef struct packet_add_char
|
||||
BYTE bAttackSpeed;
|
||||
|
||||
BYTE bStateFlag;
|
||||
DWORD dwAffectFlag[2]; // ȿ<EFBFBD><EFBFBD>
|
||||
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 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
typedef struct packet_chat // 가변 패킷
|
||||
{
|
||||
BYTE header;
|
||||
WORD size;
|
||||
@ -990,7 +990,7 @@ typedef struct packet_chat //
|
||||
BYTE bEmpire;
|
||||
} TPacketGCChat;
|
||||
|
||||
typedef struct packet_whisper // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
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 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> TSubPacketShopTab* shop_tabs <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
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 // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
typedef struct packet_shop // 가변 패킷
|
||||
{
|
||||
BYTE header;
|
||||
WORD size;
|
||||
@ -1317,7 +1317,7 @@ typedef struct packet_move
|
||||
DWORD dwDuration;
|
||||
} TPacketGCMove;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 소유권
|
||||
typedef struct packet_ownership
|
||||
{
|
||||
BYTE bHeader;
|
||||
@ -1325,7 +1325,7 @@ typedef struct packet_ownership
|
||||
DWORD dwVictimVID;
|
||||
} TPacketGCOwnership;
|
||||
|
||||
// <EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD>ȭ <20><>Ŷ<EFBFBD><C5B6> bCount <20><>ŭ <20>ٴ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 위치 동기화 패킷의 bCount 만큼 붙는 단위
|
||||
typedef struct packet_sync_position_element
|
||||
{
|
||||
DWORD dwVID;
|
||||
@ -1333,11 +1333,11 @@ typedef struct packet_sync_position_element
|
||||
LONG lY;
|
||||
} TPacketGCSyncPositionElement;
|
||||
|
||||
// <EFBFBD><EFBFBD>ġ <20><><EFBFBD><EFBFBD>ȭ
|
||||
typedef struct packet_sync_position // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ
|
||||
// 위치 동기화
|
||||
typedef struct packet_sync_position // 가변 패킷
|
||||
{
|
||||
BYTE bHeader;
|
||||
WORD wSize; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> = (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<EFBFBD><EFBFBD> <20>? <20><><EFBFBD><EFBFBD> = (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 <EFBFBD≯<EFBFBD> <20><>, 1<≯<EFBFBD> <20><>
|
||||
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;
|
||||
//<EFBFBD>ڿ<EFBFBD> size * (WORD + WORD)<EFBFBD><EFBFBD>ŭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//뒤에 size * (WORD + WORD)만큼 데이터 붙음
|
||||
} TPacketGCMarkIDXList;
|
||||
|
||||
typedef struct packet_mark_block
|
||||
@ -1794,7 +1794,7 @@ typedef struct packet_mark_block
|
||||
DWORD bufSize;
|
||||
BYTE imgIdx;
|
||||
DWORD count;
|
||||
// <EFBFBD>ڿ<EFBFBD> 64 x 48 x <EFBFBD>ȼ<EFBFBD>ũ<EFBFBD><EFBFBD>(4<><34><EFBFBD><EFBFBD>Ʈ) = 12288<38><38>ŭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 뒤에 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; // <EFBFBD>ҿ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
INT prob; // Ȯ<EFBFBD><EFBFBD>
|
||||
INT cost; // 소요 비용
|
||||
INT prob; // 확률
|
||||
TRefineMaterial materials[REFINE_MATERIAL_MAX_NUM];
|
||||
} TPacketGCRefineInformation;
|
||||
|
||||
@ -2149,13 +2149,13 @@ typedef struct SPacketGCPanamaPack
|
||||
BYTE abIV[32];
|
||||
} TPacketGCPanamaPack;
|
||||
|
||||
//TODO : <EFBFBD>ƿ<EFBFBD> ¯<><C2AF>..<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ƶ<DEBE><C6B5>ϼ<EFBFBD> <20>ְ<EFBFBD> <20><>Ŷ <20>ڵ鷯 Refactoring <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
//TODO : 아우 짱나..가변패킷 사이즈 받아들일수 있게 패킷 핸들러 Refactoring 하자.
|
||||
typedef struct SPacketGCHybridCryptKeys
|
||||
{
|
||||
SPacketGCHybridCryptKeys() : m_pStream(NULL) {}
|
||||
~SPacketGCHybridCryptKeys()
|
||||
{
|
||||
//GCC <EFBFBD><EFBFBD><EFBFBD><EFBFBD> NULL delete <EFBFBD>ص<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> NULL üũ <20><><EFBFBD><EFBFBD>. ( <20>ٵ<EFBFBD> <20>̰<EFBFBD> C++ ǥ<>ؾƴϾ<C6B4><CFBE><EFBFBD> --a )
|
||||
//GCC 에선 NULL delete 해도 괜찮나? 일단 안전하게 NULL 체크 하자. ( 근데 이거 C++ 표준아니었나 --a )
|
||||
if( m_pStream )
|
||||
{
|
||||
delete[] m_pStream;
|
||||
@ -2188,7 +2188,7 @@ typedef struct SPacketGCHybridCryptKeys
|
||||
}
|
||||
|
||||
BYTE bHeader;
|
||||
WORD uDynamicPacketSize; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC> DynamicPacketHeader <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD> -_-;
|
||||
WORD uDynamicPacketSize; // 빌어먹을 클라 DynamicPacketHeader 구조때문에 맞춰줘야한다 -_-;
|
||||
INT KeyStreamLen;
|
||||
BYTE* pDataKeyStream;
|
||||
|
||||
@ -2236,7 +2236,7 @@ typedef struct SPacketGCPackageSDB
|
||||
}
|
||||
|
||||
BYTE bHeader;
|
||||
WORD uDynamicPacketSize; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC> DynamicPacketHeader <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD> -_-;
|
||||
WORD uDynamicPacketSize; // 빌어먹을 클라 DynamicPacketHeader 구조때문에 맞춰줘야한다 -_-;
|
||||
INT iStreamLen;
|
||||
BYTE* m_pDataSDBStream;
|
||||
|
||||
@ -2254,7 +2254,7 @@ typedef struct SPacketGCSpecificEffect
|
||||
char effect_file[MAX_EFFECT_FILE_NAME];
|
||||
} TPacketGCSpecificEffect;
|
||||
|
||||
// <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
|
||||
// 용혼석
|
||||
enum EDragonSoulRefineWindowRefineType
|
||||
{
|
||||
DragonSoulRefineWindow_UPGRADE,
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
enum // unit : minute
|
||||
{
|
||||
PARTY_ENOUGH_MINUTE_FOR_EXP_BONUS = 60, // <EFBFBD><EFBFBD>Ƽ <20>Ἲ <20><> 60<36><30> <20><> <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD>ġ <20><><EFBFBD>ʽ<EFBFBD>
|
||||
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<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ƽ<EFBFBD><C6BC> <20>ֳ<EFBFBD> <20>˻<EFBFBD><CBBB>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̳<EFBFBD>
|
||||
TPartyMap m_map_pkMobParty; // Mob <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> PID <EFBFBD><EFBFBD><EFBFBD><EFBFBD> VID <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
TPartyMap m_map_pkParty; // PID로 어느 파티에 있나 검색하기 위한 컨테이너
|
||||
TPartyMap m_map_pkMobParty; // Mob 파티는 PID 대신 VID 로 따로 관리한다.
|
||||
|
||||
TPCPartySet m_set_pkPCParty; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ <20><>ü <20><><EFBFBD><EFBFBD>
|
||||
TPCPartySet m_set_pkPCParty; // 사람들의 파티 전체 집합
|
||||
|
||||
bool m_bEnablePCParty; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ƽ <20><><EFBFBD>°<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD>
|
||||
bool m_bEnablePCParty; // 디비가 켜져있지 않으면 사람들의 파티 상태가 변경불가
|
||||
};
|
||||
|
||||
enum EPartyMessages
|
||||
@ -246,9 +246,9 @@ class CParty
|
||||
TFlagMap m_map_iFlag;
|
||||
|
||||
LPDUNGEON m_pkDungeon;
|
||||
// <EFBFBD>Ʊ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> dungeon <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̷<EFBFBD><CCB7>Ա<EFBFBD><D4B1><EFBFBD> <20>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾҴµ<D2B4>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> party <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD>
|
||||
// <EFBFBD>װ<EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̷<EFBFBD><CCB7><EFBFBD> <20>ӽ÷<D3BD> <20>س<EFBFBD><D8B3>´<EFBFBD>.
|
||||
// 아귀 동굴용 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 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20>߰<EFBFBD>
|
||||
* RequestGiveGuildPriv, GiveGuildPriv <EFBFBD>Լ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD>
|
||||
* m_aPrivGuild Ÿ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü SPrivGuildData, <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Լ<EFBFBD> GetPrivByGuildEx <EFBFBD>߰<EFBFBD>
|
||||
* @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);
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ʽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
/// 길드 보너스 데이터
|
||||
struct SPrivGuildData
|
||||
{
|
||||
int value; ///< <EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD> <20><>ġ
|
||||
time_t end_time_sec; ///< <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD>
|
||||
int value; ///< 보너스 수치
|
||||
time_t end_time_sec; ///< 지속 시간
|
||||
};
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ʽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
|
||||
/// 길드 보너스 데이터를 얻어온다.
|
||||
/**
|
||||
* @param [in] dwGuildID <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
|
||||
* @param [in] byType <EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD> Ÿ<><C5B8>
|
||||
* @return <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ʽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20>ش<EFBFBD><D8B4>ϴ<EFBFBD> <20><><EFBFBD>ʽ<EFBFBD> Ÿ<>ٰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ʽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 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<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DWORD <EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD> <20>ΰ<EFBFBD><CEB0><EFBFBD> <20>Ƽ<DEBE> m_dwCRC<52><43> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ´<D6B4>.
|
||||
// CPVPManager<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̷<EFBFBD><CCB7><EFBFBD> <20><><EFBFBD><EFBFBD> CRC<52><43> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD><CBBB>Ѵ<EFBFBD>.
|
||||
// CPVP에는 DWORD 아이디 두개를 받아서 m_dwCRC를 만들어서 가지고 있는다.
|
||||
// CPVPManager에서 이렇게 만든 CRC를 통해 검색한다.
|
||||
class CPVP
|
||||
{
|
||||
public:
|
||||
@ -26,8 +26,8 @@ class CPVP
|
||||
CPVP(CPVP & v);
|
||||
~CPVP();
|
||||
|
||||
void Win(DWORD dwPID); // dwPID<EFBFBD><EFBFBD> <20>̰<EFBFBD><CCB0><EFBFBD>!
|
||||
bool CanRevenge(DWORD dwPID); // dwPID<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>־<EFBFBD>?
|
||||
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<EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> PC<50><43> <20>ٲ<EFBFBD><D9B2><EFBFBD> <20>ʰ<EFBFBD> PC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>.
|
||||
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); //<EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
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<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC>.
|
||||
// begin_other_pc_blcok, end_other_pc_block을 위한 객체들.
|
||||
public:
|
||||
void BeginOtherPCBlock(DWORD pid);
|
||||
void EndOtherPCBlock();
|
||||
|
@ -21,13 +21,13 @@ namespace quest
|
||||
class NPC
|
||||
{
|
||||
public:
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE>
|
||||
// 인자가 없는 스크립트들
|
||||
// first: state number
|
||||
typedef map<int, AStateScriptType> AQuestScriptType;
|
||||
// first: quest number
|
||||
typedef map<unsigned int, AQuestScriptType> QuestMapType;
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20>ִ<EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ<EFBFBD><C6AE>
|
||||
// 인자가 있는 스크립트들
|
||||
// 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); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD>Ʈ
|
||||
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<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
QUEST_SEND_CLOCK_NAME = (1 << 2), // 16<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
QUEST_SEND_COUNTER_NAME = (1 << 4), // 16자 까지
|
||||
QUEST_SEND_COUNTER_VALUE = (1 << 5),
|
||||
QUEST_SEND_ICON_FILE = (1 << 6), // 24<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 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; // <EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD> <20>ѹ<EFBFBD><D1B9><EFBFBD> <20>Ѵ<EFBFBD>.
|
||||
bool m_bLoaded; // 로드는 한번만 한다.
|
||||
|
||||
int m_iLastState;
|
||||
|
||||
|
@ -5,8 +5,8 @@
|
||||
|
||||
enum
|
||||
{
|
||||
BLACKSMITH_MOB = 20016, // Ȯ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
ALCHEMIST_MOB = 20001, // 100% <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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())
|
||||
{
|
||||
//ù<EFBFBD><EFBFBD>°<EFBFBD><EFBFBD> ã<><C3A3><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//첫번째를 찾으면 바로 리턴
|
||||
if ( (*(it_tree++))->for_each_entity_for_find_victim(func) )
|
||||
return;
|
||||
}
|
||||
@ -143,7 +143,7 @@ class SECTREE
|
||||
|
||||
while (it != m_set_entity.end())
|
||||
{
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
//정상적으로 찾으면 바로 리턴
|
||||
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 ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
void CloneAttribute(LPSECTREE tree); // private map 처리시 사용
|
||||
|
||||
int GetEventAttribute(int x, int y); // 20050313 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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);
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Sectree <EFBFBD><EFBFBD> Attribute <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// 영역에 대해 Sectree 의 Attribute 에 대해 특정한 처리를 수행한다.
|
||||
/**
|
||||
* @param [in] lMapIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Map index
|
||||
* @param [in] lStartX <EFBFBD>簢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ǥ
|
||||
* @param [in] lStartY <EFBFBD>簢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ǥ
|
||||
* @param [in] lEndX <EFBFBD>簢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ
|
||||
* @param [in] lEndY <EFBFBD>簢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ʒ<EFBFBD><C6B7><EFBFBD> <20><>ǥ
|
||||
* @param [in] lRotate <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ȸ<><C8B8><EFBFBD><EFBFBD> <20><>
|
||||
* @param [in] dwAttr <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Attribute
|
||||
* @param [in] mode Attribute <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> 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:
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>簢<EFBFBD><E7B0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Sectree <EFBFBD><EFBFBD> Attribute <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// 직각의 사각형 영역에 대해 Sectree 의 Attribute 에 대해 특정한 처리를 수행한다.
|
||||
/**
|
||||
* @param [in] lMapIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Map index
|
||||
* @param [in] lCX <EFBFBD>簢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Cell <20><> <20><>ǥ
|
||||
* @param [in] lCY <EFBFBD>簢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Cell <20><> <20><>ǥ
|
||||
* @param [in] lCW <EFBFBD>簢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Cell <20><><EFBFBD><EFBFBD> <20><>
|
||||
* @param [in] lCH <EFBFBD>簢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Cell <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @param [in] lRotate ȸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>(<28><><EFBFBD><EFBFBD>)
|
||||
* @param [in] dwAttr <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Attribute
|
||||
* @param [in] mode Attribute <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> 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 );
|
||||
|
||||
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> <20>簢<EFBFBD><E7B0A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Sectree <EFBFBD><EFBFBD> Attribute <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// 직각 이외의 사각형 영역에 대해 Sectree 의 Attribute 에 대해 특정한 처리를 수행한다.
|
||||
/**
|
||||
* @param [in] lMapIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Map index
|
||||
* @param [in] lCX <EFBFBD>簢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Cell <20><> <20><>ǥ
|
||||
* @param [in] lCY <EFBFBD>簢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Cell <20><> <20><>ǥ
|
||||
* @param [in] lCW <EFBFBD>簢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Cell <20><><EFBFBD><EFBFBD> <20><>
|
||||
* @param [in] lCH <EFBFBD>簢<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Cell <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
* @param [in] lRotate ȸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>(<28><><EFBFBD><EFBFBD> <20>̿<EFBFBD><CCBF><EFBFBD> <20><>)
|
||||
* @param [in] dwAttr <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Attribute
|
||||
* @param [in] mode Attribute <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> 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 );
|
||||
|
||||
/// <EFBFBD><EFBFBD> Cell <EFBFBD><EFBFBD> Attribute <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
/// 한 Cell 의 Attribute 에 대해 특정한 처리를 수행한다.
|
||||
/**
|
||||
* @param [in] lMapIndex <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Map index
|
||||
* @param [in] lCX <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Cell <EFBFBD><EFBFBD> X <EFBFBD><EFBFBD>ǥ
|
||||
* @param [in] lCY <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Cell <EFBFBD><EFBFBD> Y <EFBFBD><EFBFBD>ǥ
|
||||
* @param [in] dwAttr <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Attribute
|
||||
* @param [in] mode Attribute <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> 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; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ
|
||||
int price; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BYTE count; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
DWORD vnum; // 아이템 번호
|
||||
int price; // 가격
|
||||
BYTE count; // 아이템 개수
|
||||
|
||||
LPITEM pkItem;
|
||||
int itemid; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD>
|
||||
int itemid; // 아이템 고유아이디
|
||||
|
||||
shop_item()
|
||||
{
|
||||
@ -40,20 +40,20 @@ class CShop
|
||||
virtual void SetPCShop(LPCHARACTER ch);
|
||||
virtual bool IsPCShop() { return m_pkPC ? true : false; }
|
||||
|
||||
// <EFBFBD>Խ<EFBFBD>Ʈ <20>߰<EFBFBD>/<2F><><EFBFBD><EFBFBD>
|
||||
// 게스트 추가/삭제
|
||||
virtual bool AddGuest(LPCHARACTER ch,DWORD owner_vid, bool bOtherEmpire);
|
||||
void RemoveGuest(LPCHARACTER ch);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 물건 구입
|
||||
virtual int Buy(LPCHARACTER ch, BYTE pos);
|
||||
|
||||
// <EFBFBD>Խ<EFBFBD>Ʈ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD><EFBFBD>
|
||||
// 게스트에게 패킷을 보냄
|
||||
void BroadcastUpdateItem(BYTE pos);
|
||||
|
||||
// <EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˷<EFBFBD><CBB7>ش<EFBFBD>.
|
||||
// 판매중인 아이템의 갯수를 알려준다.
|
||||
int GetNumberByVnum(DWORD dwVnum);
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϵǾ<CFB5> <20>ִ<EFBFBD><D6B4><EFBFBD> <20>˷<EFBFBD><CBB7>ش<EFBFBD>.
|
||||
// 아이템이 상점에 등록되어 있는지 알려준다.
|
||||
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; // <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD>ǵ<EFBFBD>
|
||||
std::vector<SHOP_ITEM> m_itemVector; // 이 상점에서 취급하는 물건들
|
||||
|
||||
LPCHARACTER m_pkPC;
|
||||
};
|
||||
|
@ -12,11 +12,11 @@ typedef struct SShopTableEx : SShopTable
|
||||
|
||||
class CGroupNode;
|
||||
|
||||
// Ȯ<EFBFBD><EFBFBD> shop.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȭ<><C8AD><EFBFBD><EFBFBD> <20><> <20><> <20>ְ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><> <20>ִ<EFBFBD>.
|
||||
// <EFBFBD><EFBFBD>, pc <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// Ŭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> pos 45 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> m_itemVector<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
||||
// 확장 shop.
|
||||
// 명도전을 화폐로 쓸 수 있고, 아이템을 여러 탭에 나눠 배치할 수 있다.
|
||||
// 단, pc 샵은 구현하지 않음.
|
||||
// 클라와 통신할 때에 탭은 pos 45 단위로 구분.
|
||||
// 기존 샵의 m_itemVector은 사용하지 않는다.
|
||||
class CShopEx: public CShop
|
||||
{
|
||||
public:
|
||||
|
@ -5,33 +5,33 @@
|
||||
|
||||
enum ESkillFlags
|
||||
{
|
||||
SKILL_FLAG_ATTACK = (1 << 0), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_USE_MELEE_DAMAGE = (1 << 1), // <EFBFBD>⺻ <20>и<EFBFBD> Ÿ<><C5B8>ġ<EFBFBD><C4A1> b <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_COMPUTE_ATTGRADE = (1 << 2), // <EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>
|
||||
SKILL_FLAG_SELFONLY = (1 << 3), // <EFBFBD>ڽſ<EFBFBD><EFBFBD>Ը<EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_USE_MAGIC_DAMAGE = (1 << 4), // <EFBFBD>⺻ <20><><EFBFBD><EFBFBD> Ÿ<><C5B8>ġ<EFBFBD><C4A1> b <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_USE_HP_AS_COST = (1 << 5), // HP<EFBFBD><EFBFBD> SP<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>(3<><33>) 2<><32> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>´<DEB4>.
|
||||
SKILL_FLAG_USE_ARROW_DAMAGE = (1 << 9), // <EFBFBD>⺻ ȭ<><C8AD> Ÿ<><C5B8>ġ<EFBFBD><C4A1> b <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_PENETRATE = (1 << 10), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_IGNORE_TARGET_RATING = (1 << 11), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_SLOW = (1 << 12), // <EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_STUN = (1 << 13), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_HP_ABSORB = (1 << 14), // HP <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_SP_ABSORB = (1 << 15), // SP <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_FIRE_CONT = (1 << 16), // FIRE <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_REMOVE_BAD_AFFECT = (1 << 17), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_REMOVE_GOOD_AFFECT = (1 << 18), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_CRUSH = (1 << 19), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_POISON = (1 << 20), // <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_TOGGLE = (1 << 21), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_DISABLE_BY_POINT_UP = (1 << 22), // <EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>.
|
||||
SKILL_FLAG_CRUSH_LONG = (1 << 23), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ָ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
SKILL_FLAG_WIND = (1 << 24), // <EFBFBD>ٶ<EFBFBD> <20>Ӽ<EFBFBD>
|
||||
SKILL_FLAG_ELEC = (1 << 25), // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӽ<EFBFBD>
|
||||
SKILL_FLAG_FIRE = (1 << 26), // <EFBFBD><EFBFBD> <20>Ӽ<EFBFBD>
|
||||
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,
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>迭
|
||||
// 무사 전사 계열
|
||||
// A
|
||||
SKILL_SAMYEON = 1, // <EFBFBD>↓<EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
SKILL_PALBANG, // <EFBFBD>ȹ<EFBFBD>dz<EFBFBD><EFBFBD>
|
||||
SKILL_SAMYEON = 1, // 삼연참(세번베기)
|
||||
SKILL_PALBANG, // 팔방풍우
|
||||
// S
|
||||
SKILL_JEONGWI, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ
|
||||
SKILL_GEOMKYUNG, // <EFBFBD>˰<EFBFBD>
|
||||
SKILL_TANHWAN, // źȯ<EFBFBD><EFBFBD>
|
||||
SKILL_JEONGWI, // 전귀혼
|
||||
SKILL_GEOMKYUNG, // 검경
|
||||
SKILL_TANHWAN, // 탄환격
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>迭
|
||||
// 무사 기공 계열
|
||||
// A
|
||||
SKILL_GIGONGCHAM = 16, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_GYOKSAN, // <EFBFBD>ݻ<EFBFBD>Ÿ<EFBFBD><EFBFBD>
|
||||
SKILL_DAEJINGAK, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_GIGONGCHAM = 16, // 기공참
|
||||
SKILL_GYOKSAN, // 격산타우
|
||||
SKILL_DAEJINGAK, // 대진각
|
||||
// S
|
||||
SKILL_CHUNKEON, // õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_GEOMPUNG, // <EFBFBD><EFBFBD>dz
|
||||
SKILL_CHUNKEON, // 천근추
|
||||
SKILL_GEOMPUNG, // 검풍
|
||||
|
||||
// <EFBFBD>ڰ<EFBFBD> <20>ϻ<EFBFBD> <20>迭
|
||||
// 자객 암살 계열
|
||||
// A
|
||||
SKILL_AMSEOP = 31, // <EFBFBD>Ͻ<EFBFBD>
|
||||
SKILL_GUNGSIN, // <EFBFBD>ý<EFBFBD>ź<EFBFBD><EFBFBD>
|
||||
SKILL_CHARYUN, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_AMSEOP = 31, // 암습
|
||||
SKILL_GUNGSIN, // 궁신탄영
|
||||
SKILL_CHARYUN, // 차륜살
|
||||
// S
|
||||
SKILL_EUNHYUNG, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_SANGONG, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_EUNHYUNG, // 은형법
|
||||
SKILL_SANGONG, // 산공분
|
||||
|
||||
// <EFBFBD>ڰ<EFBFBD> <20>ü<EFBFBD> <20>迭
|
||||
// 자객 궁수 계열
|
||||
// A
|
||||
SKILL_YEONSA = 46, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_KWANKYEOK, // <EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD>
|
||||
SKILL_HWAJO, // ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_YEONSA = 46, // 연사
|
||||
SKILL_KWANKYEOK, // 관격술
|
||||
SKILL_HWAJO, // 화조파
|
||||
// S
|
||||
SKILL_GYEONGGONG, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_GIGUNG, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_GYEONGGONG, // 경공술
|
||||
SKILL_GIGUNG, // 기궁
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
// 수라 검
|
||||
// A
|
||||
SKILL_SWAERYUNG = 61, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_YONGKWON, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_SWAERYUNG = 61, // 쇄령지
|
||||
SKILL_YONGKWON, // 용권파
|
||||
// S
|
||||
SKILL_GWIGEOM, // <EFBFBD>Ͱ<EFBFBD>
|
||||
SKILL_TERROR, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_JUMAGAP, // <EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_PABEOB, // <EFBFBD>Ĺ<EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_GWIGEOM, // 귀검
|
||||
SKILL_TERROR, // 공포
|
||||
SKILL_JUMAGAP, // 주마갑
|
||||
SKILL_PABEOB, // 파법술
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 수라 마법
|
||||
// A
|
||||
SKILL_MARYUNG = 76, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_HWAYEOMPOK, // ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_MUYEONG, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_MARYUNG = 76, // 마령
|
||||
SKILL_HWAYEOMPOK, // 화염폭
|
||||
SKILL_MUYEONG, // 무영진
|
||||
// S
|
||||
SKILL_MANASHILED, // <EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD>ȣ
|
||||
SKILL_TUSOK, // <EFBFBD><EFBFBD><EFBFBD>Ӹ<EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_MAHWAN, // <EFBFBD><EFBFBD>ȯ<EFBFBD><EFBFBD>
|
||||
SKILL_MANASHILED, // 흑신수호
|
||||
SKILL_TUSOK, // 투속마령
|
||||
SKILL_MAHWAN, // 마환격
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 무당 용신
|
||||
// A
|
||||
SKILL_BIPABU = 91,
|
||||
SKILL_YONGBI, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_PAERYONG, // <EFBFBD>з泪<EFBFBD>ѹ<EFBFBD>
|
||||
SKILL_YONGBI, // 용비광사파
|
||||
SKILL_PAERYONG, // 패룡나한무
|
||||
// S
|
||||
//SKILL_BUDONG, // <EFBFBD>ε<EFBFBD><EFBFBD>ں<EFBFBD>
|
||||
SKILL_HOSIN, // ȣ<EFBFBD><EFBFBD>
|
||||
SKILL_REFLECT, // <EFBFBD><EFBFBD>ȣ
|
||||
SKILL_GICHEON, // <EFBFBD><EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//SKILL_BUDONG, // 부동박부
|
||||
SKILL_HOSIN, // 호신
|
||||
SKILL_REFLECT, // 보호
|
||||
SKILL_GICHEON, // 기천대공
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 무당 뇌신
|
||||
// A
|
||||
SKILL_NOEJEON = 106, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_BYEURAK, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_CHAIN, // ü<EFBFBD>ζ<EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD>
|
||||
SKILL_NOEJEON = 106, // 뇌전령
|
||||
SKILL_BYEURAK, // 벼락
|
||||
SKILL_CHAIN, // 체인라이트닝
|
||||
// S
|
||||
SKILL_JEONGEOP, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_KWAESOK, // <EFBFBD>̵<EFBFBD><EFBFBD>ӵ<EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_JEUNGRYEOK, // <EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
||||
SKILL_JEONGEOP, // 정업인
|
||||
SKILL_KWAESOK, // 이동속도업
|
||||
SKILL_JEUNGRYEOK, // 증력술
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų
|
||||
// 공통 스킬
|
||||
// 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,
|
||||
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų
|
||||
// 보조 스킬
|
||||
|
||||
SKILL_LEADERSHIP = 121, // <EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
||||
SKILL_COMBO = 122, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_CREATE = 123, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_LEADERSHIP = 121, // 통솔력
|
||||
SKILL_COMBO = 122, // 연계기
|
||||
SKILL_CREATE = 123, // 제조
|
||||
SKILL_MINING = 124,
|
||||
|
||||
SKILL_LANGUAGE1 = 126, // <EFBFBD>ż<EFBFBD><EFBFBD><EFBFBD> <20>ɷ<EFBFBD>
|
||||
SKILL_LANGUAGE2 = 127, // õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɷ<EFBFBD>
|
||||
SKILL_LANGUAGE3 = 128, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ɷ<EFBFBD>
|
||||
SKILL_POLYMORPH = 129, // <EFBFBD>а<EFBFBD>
|
||||
SKILL_LANGUAGE1 = 126, // 신수어 능력
|
||||
SKILL_LANGUAGE2 = 127, // 천조어 능력
|
||||
SKILL_LANGUAGE3 = 128, // 진노어 능력
|
||||
SKILL_POLYMORPH = 129, // 둔갑
|
||||
|
||||
SKILL_HORSE = 130, // <EFBFBD>¸<EFBFBD> <20><>ų
|
||||
SKILL_HORSE_SUMMON = 131, // <EFBFBD><EFBFBD> <20><>ȯ <20><>ų
|
||||
SKILL_HORSE_WILDATTACK = 137, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_HORSE_CHARGE = 138, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_HORSE_ESCAPE = 139, // Ż<EFBFBD><EFBFBD>
|
||||
SKILL_HORSE_WILDATTACK_RANGE = 140, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Ȱ)
|
||||
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, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SKILL_RESIST_PENETRATE = 142, // ö<EFBFBD><EFBFBD>
|
||||
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; // <EFBFBD><EFBFBD>ȣ
|
||||
DWORD dwVnum; // 번호
|
||||
|
||||
DWORD dwType; // 0: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2: <EFBFBD>ڰ<EFBFBD>, 3: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 4: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
BYTE bMaxLevel; // <EFBFBD>ִ<EFBFBD> <20><><EFBFBD>õ<EFBFBD>
|
||||
BYTE bLevelLimit; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int iSplashRange; // <EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD> <20>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
DWORD dwType; // 0: 전직업, 1: 무사, 2: 자객, 3: 수라, 4: 무당
|
||||
BYTE bMaxLevel; // 최대 수련도
|
||||
BYTE bLevelLimit; // 레벨제한
|
||||
int iSplashRange; // 스플래쉬 거리 제한
|
||||
|
||||
BYTE bPointOn; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ű<EFBFBD>°<EFBFBD>? (Ÿ<><C5B8>ġ, MAX HP, HP REGEN <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
CPoly kPointPoly; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
BYTE bPointOn; // 어디에 결과값을 적용 시키는가? (타격치, MAX HP, HP REGEN 등등등)
|
||||
CPoly kPointPoly; // 결과값 만드는 공식
|
||||
|
||||
CPoly kSPCostPoly; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> SP <20><><EFBFBD><EFBFBD>
|
||||
CPoly kDurationPoly; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
CPoly kDurationSPCostPoly; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> SP <20><><EFBFBD><EFBFBD>
|
||||
CPoly kCooldownPoly; // <EFBFBD><EFBFBD><EFBFBD>ٿ<EFBFBD> <20>ð<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
CPoly kMasterBonusPoly; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>ʽ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
CPoly kSplashAroundDamageAdjustPoly; // <EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
CPoly kSPCostPoly; // 사용 SP 공식
|
||||
CPoly kDurationPoly; // 지속 시간 공식
|
||||
CPoly kDurationSPCostPoly; // 지속 SP 공식
|
||||
CPoly kCooldownPoly; // 쿨다운 시간 공식
|
||||
CPoly kMasterBonusPoly; // 마스터일 때 보너스 공식
|
||||
CPoly kSplashAroundDamageAdjustPoly; // 스플래쉬 공격일 경우 주위 적에게 입히는 데미지 감소 비율
|
||||
|
||||
DWORD dwFlag; // <EFBFBD><EFBFBD>ų<EFBFBD>ɼ<EFBFBD>
|
||||
DWORD dwAffectFlag; // <EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> Affect
|
||||
DWORD dwFlag; // 스킬옵션
|
||||
DWORD dwAffectFlag; // 스킬에 맞은 경우 적용되는 Affect
|
||||
|
||||
BYTE bLevelStep; // <EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8>µ<EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD>Ʈ <20><>
|
||||
DWORD preSkillVnum; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų
|
||||
BYTE preSkillLevel; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD>
|
||||
BYTE bLevelStep; // 한번에 올리는데 필요한 스킬 포인트 수
|
||||
DWORD preSkillVnum; // 배우는데 필요한 이전에 배워야할 스킬
|
||||
BYTE preSkillLevel; // 이전에 배워야할 스킬의 레벨
|
||||
|
||||
int lMaxHit;
|
||||
|
||||
BYTE bSkillAttrType;
|
||||
|
||||
// 2<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 2차 적용
|
||||
BYTE bPointOn2;
|
||||
CPoly kPointPoly2;
|
||||
CPoly kDurationPoly2;
|
||||
@ -218,7 +218,7 @@ class CSkillProto
|
||||
return dwVnum == SKILL_TANHWAN || dwVnum == SKILL_HORSE_CHARGE;
|
||||
}
|
||||
|
||||
// 3<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// 3차 적용
|
||||
BYTE bPointOn3;
|
||||
CPoly kPointPoly3;
|
||||
CPoly kDurationPoly3;
|
||||
|
@ -8,7 +8,7 @@ class CTableBySkill : public singleton<CTableBySkill>
|
||||
CTableBySkill()
|
||||
: m_aiSkillDamageByLevel(NULL)
|
||||
{
|
||||
//<EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ
|
||||
//스킬 레벨당 추가데미지 초기화
|
||||
for ( int job = 0; job < JOB_MAX_NUM * 2; ++job )
|
||||
m_aiSkillPowerByLevelFromType[job] = NULL;
|
||||
}
|
||||
@ -18,18 +18,18 @@ class CTableBySkill : public singleton<CTableBySkill>
|
||||
DeleteAll();
|
||||
}
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD>̺<EFBFBD> <20><><EFBFBD><EFBFBD> üũ
|
||||
//테이블 세팅 체크
|
||||
bool Check() const;
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//삭제
|
||||
void DeleteAll();
|
||||
|
||||
//<EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ų<EFBFBD>Ŀ<EFBFBD> <20><><EFBFBD>̺<EFBFBD>
|
||||
//스킬레벨단위 스킬파워 테이블
|
||||
int GetSkillPowerByLevelFromType( int job, int skillgroup, int skilllevel, bool bMob ) const;
|
||||
void SetSkillPowerByLevelFromType( int idx, const int* aTable );
|
||||
void DeleteSkillPowerByLevelFromType( int idx );
|
||||
|
||||
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><>ų<EFBFBD><C5B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>̺<EFBFBD>
|
||||
//레벨당 추가 스킬데미지 테이블
|
||||
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]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20≯<EFBFBD>
|
||||
char szTargetDesc[32+1]; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>۵Ǵ<DBB5> <20≯<EFBFBD>
|
||||
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 <EFBFBD><EFBFBD>ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ITEM_SKILLFORGET2_VNUM = 70055, // 7, 8 스킬 망각서
|
||||
|
||||
UNIQUE_ITEM_FISH_MIND = 71008, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
UNIQUE_ITEM_SAFEBOX_EXPAND = 71009, // â<EFBFBD><EFBFBD>Ȯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
UNIQUE_ITEM_AUTOLOOT_GOLD = 71010, // <EFBFBD><EFBFBD>3<EFBFBD><EFBFBD> <20><>
|
||||
UNIQUE_ITEM_EMOTION_MASK = 71011, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
UNIQUE_ITEM_EMOTION_MASK2 = 71033, // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
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,
|
||||
|
||||
// <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 용혼석 추출 확률을 높여주는 아이템
|
||||
DRAGON_SOUL_EXTRACTOR_GROUP = 10600,
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 용심 추출해주는 아이템
|
||||
DRAGON_HEART_EXTRACTOR_GROUP = 10601,
|
||||
// <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
// 용혼석에서 추출할 때 주는 용심.
|
||||
DRAGON_HEART_VNUM = 100000,
|
||||
};
|
||||
|
||||
|
@ -68,7 +68,7 @@ class CWarMap
|
||||
DWORD GetWinnerGuild();
|
||||
void UsePotion(LPCHARACTER ch, LPITEM item);
|
||||
|
||||
void Draw(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>º<EFBFBD> ó<><C3B3>
|
||||
void Draw(); // 강제 무승부 처리
|
||||
void Timeout();
|
||||
void CheckWarEnd();
|
||||
bool SetEnded();
|
||||
@ -125,8 +125,8 @@ class CWarMap
|
||||
|
||||
void Initialize();
|
||||
|
||||
int GetAccumulatedJoinerCount(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
int GetCurJointerCount(); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
|
||||
int GetAccumulatedJoinerCount(); // 누적된 참가자 수
|
||||
int GetCurJointerCount(); // 현재 참가자 수
|
||||
|
||||
void AppendMember(LPCHARACTER ch);
|
||||
void RemoveMember(LPCHARACTER ch);
|
||||
|
@ -5,8 +5,8 @@ namespace xmas
|
||||
{
|
||||
enum
|
||||
{
|
||||
MOB_SANTA_VNUM = 20031, //<EFBFBD><EFBFBD>Ÿ
|
||||
// MOB_SANTA_VNUM = 20095, //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
MOB_SANTA_VNUM = 20031, //산타
|
||||
// MOB_SANTA_VNUM = 20095, //노해
|
||||
MOB_XMAS_TREE_VNUM = 20032,
|
||||
MOB_XMAS_FIRWORK_SELLER_VNUM = 9004,
|
||||
};
|
||||
|
Reference in New Issue
Block a user