Move git root from Client/ to src/ to track all source code: - Client: Game client source (moved to Client/Client/) - Server: Game server source - GameTools: Development tools - CryptoSource: Encryption utilities - database: Database scripts - Script: Game scripts - rylCoder_16.02.2008_src: Legacy coder tools - GMFont, Game: Additional resources 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
312 lines
6.6 KiB
C++
312 lines
6.6 KiB
C++
// Arrangement2Dlg.h : 헤더 파일
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#include "afxwin.h"
|
|
|
|
#include <map>
|
|
#include <vector>
|
|
|
|
using namespace std;
|
|
|
|
// CArrangement2Dlg 대화 상자
|
|
class CArrangement2Dlg : public CDialog
|
|
{
|
|
// 생성
|
|
public:
|
|
CArrangement2Dlg(CWnd* pParent = NULL); // 표준 생성자
|
|
|
|
// 대화 상자 데이터
|
|
enum { IDD = IDD_ARRANGEMENT2_DIALOG };
|
|
|
|
protected:
|
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원
|
|
|
|
|
|
// 구현
|
|
protected:
|
|
HICON m_hIcon;
|
|
|
|
// 메시지 맵 함수를 생성했습니다.
|
|
virtual BOOL OnInitDialog();
|
|
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
|
|
afx_msg void OnPaint();
|
|
afx_msg HCURSOR OnQueryDragIcon();
|
|
DECLARE_MESSAGE_MAP()
|
|
public:
|
|
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
|
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
|
afx_msg void OnZoom(UINT nID);
|
|
afx_msg void OnUpdateZoom(CCmdUI *pCmdUI);
|
|
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
|
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
|
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
|
|
afx_msg void OnBnClickedCreatescript();
|
|
afx_msg void OnBnClickedVisualkid();
|
|
afx_msg void OnCbnSelchangeKidcombo();
|
|
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
|
|
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
|
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
|
|
afx_msg void OnZone(UINT nID);
|
|
afx_msg void OnUpdateZone(CCmdUI* pCmdUI);
|
|
afx_msg void OnBnClickedVisualpid();
|
|
afx_msg void OnTimer(UINT nIDEvent);
|
|
afx_msg void OnAppExit();
|
|
afx_msg void OnCbnSelchangePidcombo();
|
|
|
|
protected:
|
|
virtual BOOL DestroyWindow();
|
|
|
|
public:
|
|
int m_nPositionX;
|
|
int m_nPositionY;
|
|
int m_nPositionZ;
|
|
|
|
int m_nProcess;
|
|
|
|
int m_nPID;
|
|
BOOL m_bVisualKID;
|
|
BOOL m_bVisualPID;
|
|
BOOL m_bVisualLevel;
|
|
|
|
CString m_strName;
|
|
CString m_strLevel;
|
|
CString m_strClass;
|
|
int m_nNumOfKID;
|
|
|
|
int m_nNumOfWorld;
|
|
CComboBox m_ctrKIDCombo;
|
|
|
|
BOOL m_bErase;
|
|
|
|
short m_wRespawnArea;
|
|
CComboBox m_ctrPIDCombo;
|
|
|
|
int m_nPartyMemNum;
|
|
|
|
|
|
// ------------------------------------------------------------------
|
|
// 사용자 정의
|
|
|
|
private:
|
|
|
|
enum _Const
|
|
{
|
|
MAP_PAGE_X = 1100,
|
|
MAP_PAGE_Z = 900,
|
|
|
|
SECTOR_SIZE = 315,
|
|
|
|
MAX_NUM = 0xffff,
|
|
ID_LENGTH = 8,
|
|
|
|
MONSTER_BIT = 0x80000000,
|
|
MONSTER_PARTY_BIT = 0x80000000,
|
|
|
|
MAX_STRING_LENGTH = 32,
|
|
|
|
MAX_PARTY_MEMBER_NUM = 10
|
|
};
|
|
|
|
enum Process
|
|
{
|
|
ARRANGEMENT = 0,
|
|
ERASE,
|
|
PARTY
|
|
};
|
|
|
|
enum MovingPattern
|
|
{
|
|
PATTERN_AREA = 0,
|
|
PATTERN_FIX,
|
|
PATTERN_ROUTE,
|
|
PATTERN_NONAREA
|
|
};
|
|
|
|
enum RespawnArea
|
|
{
|
|
DEFAULT_DISTANCE = 32
|
|
};
|
|
|
|
enum SpeacialKindID
|
|
{
|
|
// 소환수
|
|
SUMMON_KINDLING = 3500,
|
|
SUMMON_FLAMEWALKER = 3506,
|
|
SUMMON_BURNINGSHIELD = 3513,
|
|
SUMMON_FIREWING = 3520,
|
|
SUMMON_DEATHBURN = 3527,
|
|
|
|
// 명예의 석상
|
|
STATUE_NEUTRALITY = 4001,
|
|
STATUE_HUMAN_LOADING = 4002,
|
|
STATUE_HUMAN_COMPLETE = 4003,
|
|
STATUE_AKHAN_LOADING = 4004,
|
|
STATUE_AKHAN_COMPLETE = 4005,
|
|
|
|
// BattleGround Server 명예의 석상
|
|
BG_STATUE_NEUTRALITY = 4006,
|
|
BG_STATUE_HUMAN_LOADING = 4007,
|
|
BG_STATUE_HUMAN_COMPLETE = 4008,
|
|
BG_STATUE_AKHAN_LOADING = 4009,
|
|
BG_STATUE_AKHAN_COMPLETE = 4010,
|
|
|
|
// 다크 카나번 석상
|
|
POWER_STATUE_NEUTRALITY = 4011, // 힘의 석상
|
|
POWER_STATUE_HUMAN_LOADING = 4012,
|
|
POWER_STATUE_HUMAN_COMPLETE = 4013,
|
|
POWER_STATUE_AKHAN_LOADING = 4014,
|
|
POWER_STATUE_AKHAN_COMPLETE = 4015,
|
|
|
|
INT_STATUE_NEUTRALITY = 4016, // 지능의 석상
|
|
INT_STATUE_HUMAN_LOADING = 4017,
|
|
INT_STATUE_HUMAN_COMPLETE = 4018,
|
|
INT_STATUE_AKHAN_LOADING = 4019,
|
|
INT_STATUE_AKHAN_COMPLETE = 4020,
|
|
|
|
EXP_STATUE_NEUTRALITY = 4021, // 경험의 석상
|
|
EXP_STATUE_HUMAN_LOADING = 4022,
|
|
EXP_STATUE_HUMAN_COMPLETE = 4023,
|
|
EXP_STATUE_AKHAN_LOADING = 4024,
|
|
EXP_STATUE_AKHAN_COMPLETE = 4025,
|
|
|
|
WEALTH_STATUE_NEUTRALITY = 4026, // 부의 석상
|
|
WEALTH_STATUE_HUMAN_LOADING = 4027,
|
|
WEALTH_STATUE_HUMAN_COMPLETE = 4028,
|
|
WEALTH_STATUE_AKHAN_LOADING = 4029,
|
|
WEALTH_STATUE_AKHAN_COMPLETE = 4030,
|
|
|
|
LIFE_EXTRACT_NEUTRALITY = 4031, // 생명 축출기
|
|
LIFE_EXTRACT_HUMAN_LOADING = 4032,
|
|
LIFE_EXTRACT_HUMAN_COMPLETE = 4033,
|
|
LIFE_EXTRACT_AKHAN_LOADING = 4034,
|
|
LIFE_EXTRACT_AKHAN_COMPLETE = 4035,
|
|
|
|
|
|
// 석상 KID (CreatureStructure.h 에도 정의되어 있음)
|
|
MIN_STATUE_KID = 4001,
|
|
MAX_STATUE_KID = 4035
|
|
};
|
|
|
|
struct Monster
|
|
{
|
|
unsigned long m_dwCID;
|
|
|
|
int m_nKID;
|
|
int m_nPID;
|
|
int m_nLevel;
|
|
|
|
BOOL m_bScout;
|
|
int m_nMovingPattern;
|
|
short m_wRespawnArea;
|
|
|
|
int m_nPosX;
|
|
int m_nPosY;
|
|
int m_nPosZ;
|
|
|
|
Monster()
|
|
: m_dwCID(0), m_nKID(0), m_nPID(0), m_bScout(FALSE), m_nMovingPattern(0),
|
|
m_nPosX(0), m_nPosY(0), m_nPosZ(0), m_wRespawnArea(DEFAULT_DISTANCE), m_nLevel(0)
|
|
{ }
|
|
};
|
|
|
|
typedef struct _MonsterInfo
|
|
{
|
|
int m_nKID;
|
|
|
|
char m_strName[MAX_STRING_LENGTH];
|
|
char m_strLevel[MAX_STRING_LENGTH];
|
|
char m_strClass[MAX_STRING_LENGTH];
|
|
|
|
} MonsterInfo, *LPMonsterInfo;
|
|
|
|
|
|
int m_nMapStartX;
|
|
int m_nMapStartZ;
|
|
|
|
UINT_PTR m_nTimer;
|
|
bool m_bBlink;
|
|
|
|
// 석상 몬스터 ID 유지를 위해
|
|
struct sStatueKey
|
|
{
|
|
sStatueKey(unsigned short wPosX, unsigned short wPosZ)
|
|
{
|
|
m_dwValue = static_cast<unsigned long>( (wPosX << 16) | wPosZ ) ;
|
|
}
|
|
|
|
operator unsigned long() const
|
|
{
|
|
return m_dwValue ;
|
|
}
|
|
|
|
unsigned long m_dwValue ;
|
|
} ;
|
|
|
|
// 몬스터 정보의 리스트
|
|
typedef vector<Monster *> MonsterList;
|
|
typedef std::map<int, MonsterInfo> MonsterInfoList;
|
|
typedef std::map<unsigned long, unsigned long> StatueIDMap; // <sStatueKey::m_dwValue, StatueCID>
|
|
|
|
|
|
MonsterList m_lstMonster;
|
|
MonsterInfoList m_lstMonsterInfo;
|
|
StatueIDMap m_mapStatueID;
|
|
|
|
// 맵이미지 크기
|
|
|
|
unsigned long m_dwPageX;
|
|
unsigned long m_dwPageZ;
|
|
|
|
// 다이얼로그 과거와 현제 크기 및 차이
|
|
int m_nPrevX;
|
|
int m_nPrevY;
|
|
int m_nNextX;
|
|
int m_nNextY;
|
|
int m_nGapX;
|
|
int m_nGapY;
|
|
|
|
// 다이얼로그 위치
|
|
RECT m_rectWindow;
|
|
|
|
// 이미 그려진 녀석을 이동시 참조하는 변수
|
|
bool m_bDragObject;
|
|
int m_DragObjectIndex;
|
|
|
|
CPoint DragScreenStartPoint;
|
|
bool m_bDragScreen;
|
|
|
|
// 줌
|
|
UINT m_nSelectedZoom;
|
|
float m_fMagnification;
|
|
|
|
// 선택된(로딩된 존)
|
|
UINT m_nLoadedZone;
|
|
|
|
// 이미지
|
|
BYTE* m_imageData;
|
|
SIZE m_imageDims;
|
|
int m_imageChannels;
|
|
BITMAPINFO m_bmi;
|
|
BYTE* m_bmp;
|
|
|
|
void CalculateNumOfKID(int nKID);
|
|
void CalculateNumOfPID();
|
|
void ClearBitmap();
|
|
void ClearData();
|
|
BOOL OpenJPGFile(LPCTSTR lpszPathName);
|
|
void RGBA_FPX_to_BGRA(BYTE* data,int width,int height);
|
|
void InitialUpdate();
|
|
|
|
void LoadScript(void);
|
|
|
|
void DrawOutLineText(Graphics& graphics, Font& font, PointF pointF, wchar_t* strText);
|
|
|
|
BOOL IsStatue(unsigned short wKID) CONST;
|
|
template <class T>
|
|
void SetObjectPos(T* pObject);
|
|
public:
|
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
|
};
|