⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamesvr.h

📁 真正的传奇源代码
💻 H
字号:


#pragma once

#include "../def/staticArray.h"
#include "../def/_orzex/syncobj.h"

#define _RUNGATE_STATUS_DISCONNECTED		0
#define _RUNGATE_STATUS_GOOD				1
#define _RUNGATE_STATUS_HEAVYTRAFFIC		2

#define LOGPARAM_STR						1
#define LOGPARAM_INT						2

#define _NUM_OF_MAXUSER						2500

#define HAM_ALL								0
#define HAM_PEACE							1
#define HAM_GROUP							2
#define HAM_GUILD							3
#define HAM_PKATTACK						4

#define BAGGOLD								5000000

#define USERMODE_PLAYGAME					1
#define USERMODE_LOGIN						2
#define USERMODE_LOGOFF						3
#define USERMODE_NOTICE						4

void MakeItemToDB(int nReadyUserInfo, char *pszUserId, char *pszCharName, _LPTMAKEITEMRCD lpMakeItemRcd);

typedef struct tagOVERLAPPEDEX
{
	OVERLAPPED				Overlapped;
	INT						nOvFlag;
	WSABUF					DataBuf;
	CHAR					Buffer[DATA_BUFSIZE * 2];
	int						bufLen;
} OVERLAPPEDEX, *LPOVERLAPPEDEX;

typedef struct tag_TSENDBUFF
{
	int				nLen;
	char			szData[DATA_BUFSIZE];
}_TSENDBUFF, *_LPTSENDBUFF;

class CGateInfo
{
public:
	SOCKET					m_sock;

	BOOL					m_fDoSending;
	CWHQueue				m_xSendBuffQ;
	OVERLAPPEDEX			OverlappedEx[2];
	
public:
	CGateInfo();

	void	SendGateCheck();
	void	OpenNewUser(char *pszPacket);

	void	xSend();
	int		Send(_LPTSENDBUFF lpSendBuff);
	int		Recv();
	bool	HasCompletionPacket();
	char*	ExtractPacket( char *pPacket );
};

class CUserInfo	: public CIntLock, CStaticArray< CUserInfo >::IArrayData
{
public:
	bool							m_bEmpty;

	int								m_sock;

	char							m_szUserID[12];
	char							m_szCharName[14];

	int								m_nUserGateIndex;
	int								m_nUserServerIndex;
	
	int								m_nCertification;
	int								m_nClientVersion;

	CPlayerObject*					m_pxPlayerObject;
	CGateInfo*						m_pGateInfo;

	BYTE							m_btCurrentMode;

	_THUMANRCD						m_THumanRcd;
	int								m_nNumOfMagics;
	int								m_nNumOfGenItems;
	int								m_nNumOfItems;

	CWHList<_LPTGENERALITEMRCD>		m_lpTGenItemRcd;
	CWHList<_LPTHUMANMAGICRCD>		m_lpTMagicRcd;
	CWHList<_LPTUSERITEMRCD>		m_lpTItemRcd;

	_LPTHUMANMAGICRCD				m_lpTMagicErgumSkill;
	BOOL							m_fLongHitSkill;
	_LPTHUMANMAGICRCD				m_lpTMagicBanwolSkill;
	BOOL							m_fWideHitSkill;
	_LPTHUMANMAGICRCD				m_lpTMagicFireSwordSkill;
	BOOL							m_fFireHitSkill;
	DWORD							m_dwLatestFireHitTime;
	
	_LPTHUMANMAGICRCD				m_lpTMagicOneSwordSkill;
	_LPTHUMANMAGICRCD				m_lpTMagicIlkwangSkill;

	_LPTHUMANMAGICRCD				m_lpTMagicPowerHitSkill;
	BOOL							m_fPowerHitSkill;

	BYTE							m_btAttackSkillCount;
	BYTE							m_btAttackSkillPointCount;

	_LPTHORSERCD					m_lpTHorseRcd;

public:
	CUserInfo();
	bool IsEmpty();

	void							CloseAccount(char *pszName, int nCertification);
	void							SaveHumanToDB(char *pszUserAddr);
	void							CloseUserHuman();

	void							DoClientCertification(char *pszPacket);

	void							Operate();

	_LPTUSERITEMRCD					GetItem(char *pszMakeIndex);
	__inline _LPTUSERITEMRCD		GetUseItem(int nPosition) { return GetItem(m_THumanRcd.szTakeItem[nPosition]); }
	
	_LPTGENERALITEMRCD				GetUseGenItem(char *pszMakeItemID);
	void							RemoveGenItem(_LPTGENERALITEMRCD lptGenItemRcd);

	int								EncodeMyMagicToServer(char *pszEncodeMsg, int nBuffSize, int& nPos);
	int								EncodeMyMagic(char *pszEncodeMsg, int nBuffSize, int& nPos);
	int								EncodeGenItem(char *pszEncodeMsg, int nBuffSize, int& nPos);

	int								GetWeaponFeature();
	int								GetDressFeature();

	void							AddNewItem(char *pszItemName);
	
	void							MakeGenItem(_LPTGENERALITEMRCD lpItemRcd);

	BOOL							IsMyMagic(int nIndex);

	void							AllowLongHitSkill(BOOL fFlag);
	void							AllowWideHitSkill(BOOL fFlag);
	BOOL							AllowFireHitSkill();

	int								CalcBagWeight();
	int								CalcWearWeightEx(int nIndex);

	int								GetGenItemStdIdx(char *pszMakeIndex);
	int								GetGenItemVal1(char *pszMakeIndex);
	int								GetGenItemVal2(char *pszMakeIndex);

	BOOL							UserDropItem(int nItemIndex, char *pszMakeIndex);
	BOOL							UserDropGenItem(int nItemIndex, char *pszMakeIndex);

	BOOL							IncGold(int nGold);
	BOOL							DecGold(int nGold);

	_LPTHUMANMAGICRCD				GetMagicRcdByID(int nID);
	_LPTHUMANMAGICRCD				GetMagicRcdByKey(int nKey);

	_LPTGENERALITEMRCD				CanUseBujuk();

	void							SetGenItemVal1(int nVal);

	void							ProcessUserMessage(char *pszPacket);

	__inline	_LPTUSERITEMRCD		GetWeapon() { return GetUseItem(U_WEAPON); }
	__inline	_LPTUSERITEMRCD		SetWeapon(char *pszMakeIndex) { memmove(m_THumanRcd.szTakeItem[U_WEAPON], pszMakeIndex, _MAKEITEMINDEX); }
	__inline	void				SetEmptyWeapon() { ZeroMemory(m_THumanRcd.szTakeItem[U_WEAPON], _MAKEITEMINDEX); m_THumanRcd.szTakeItem[U_WEAPON][0] = '0'; }
	__inline	void				SetEmptyDress() { ZeroMemory(m_THumanRcd.szTakeItem[U_DRESS], _MAKEITEMINDEX); m_THumanRcd.szTakeItem[U_DRESS][0] = '0'; }
	__inline	void				SetEmptyUseItem(int i) { ZeroMemory(m_THumanRcd.szTakeItem[i], _MAKEITEMINDEX); m_THumanRcd.szTakeItem[i][0] = '0'; }
	__inline	_LPTUSERITEMRCD		GetDress() { return GetUseItem(U_DRESS); }
	__inline	_LPTUSERITEMRCD		GetAccessory(int nPosition) { return GetUseItem(nPosition); }
	__inline	_LPTGENERALITEMRCD	GetRightHand() { return GetUseGenItem(m_THumanRcd.szTakeItem[U_RIGHTHAND]); }

	__inline	BYTE				GetGenderFeature() { return m_THumanRcd.btGender; }
	__inline	char				GetHairFeature() { return m_THumanRcd.szHair; }
	__inline	BYTE				GetHorseFeatureEx() { if (m_lpTHorseRcd) return m_lpTHorseRcd->btHorseType; else return 0; }
	__inline	int					GetJob() { return m_THumanRcd.btJob; }
	__inline	void				SetJob(int nJob) { if (nJob >= 0 && nJob < 3) m_THumanRcd.btJob = (BYTE)nJob; }

	__inline	int					GetAttackMode() { return (int)m_THumanRcd.btAttackMode; }

	__inline	int					GetMagicID(char *pszMakeIndex) { return GetGenItemVal2(pszMakeIndex); }

	__inline	BOOL				IsEnoughBag() { if (m_lpTItemRcd.GetCount() + m_lpTGenItemRcd.GetCount() >= USERITEMMAX) return FALSE; return TRUE; }

	__inline	DWORD				GetGold() { return m_THumanRcd.dwGold; }

};

void InsertLogMsg(UINT nID);
void InsertLogMsg(LPTSTR lpszMsg);
void InsertLogPacket(char *pszPacket);
void InsertLogMsgParam(UINT nID, void *pParam, BYTE btFlags);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -