[Help] Weather Packet (My First Packet)

06/07/2014 15:06 mejo33#91
I trying to build this structure and my brain going now to explode... Any one can build me this one? verry thanks for this..
06/07/2014 15:16 Korvacs#92
Quote:
Originally Posted by mejo33 View Post
I trying to build this structure and my brain going now to explode... Any one can build me this one? verry thanks for this..
Just look at how the other structures are built in your source and copy that, then adapt it to fit the weather structures you have been given. This is extremely easy to do.
06/07/2014 17:00 abdoumatrix#93
Quote:
Originally Posted by SteveRambo View Post
...
so?
i dont claimed it to be mine?
and the source in public?
and the credits already in the file :confused:
06/07/2014 17:51 Spirited#94
This is the packet structure that the server uses to send weather instructions to the client (from TQ's official source code):

Code:
#ifndef MSGWEATHER_HEADER_KATTY
#define MSGWEATHER_HEADER_KATTY

 
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "NetMsg.h"


enum { WEATHER_NONE=0, WEATHER_FINE, 
		WEATHER_RAINY, WEATHER_SNOWY, WEATHER_SANDS, 
		WEATHER_LEAF, WEATHER_NOUSED, WEATHER_FLOWER, 
		WEATHER_FLY, WEATHER_DANDELION, WEATHER_WORM, WEATHER_CLOUD,
		WEATHER_ALL};
 
typedef struct {
	unsigned short	unMsgSize;
	unsigned short	unMsgType;

	int 			nType;
	int				nIntensity;					// 1 - 1024
	int				nDir;						// 0 +- 60
	DWORD			dwColor;					// 0 - (MAX-1)

}MSG_WeatherInfo;


 
const int WEATHER_RESET = 1;
const int WEATHER_STOP	= 2;
const int WEATHER_CREATE= 3;
const int WEATHER_DESTROY=4;
 


class CMsgWeather : public CNetMsg    
{
public:
	CMsgWeather();
	virtual ~CMsgWeather();
	BOOL	ConvertInfoForm  (int nType, int nIntensity, int nDir, DWORD nColor);


public:	
	virtual BOOL			Create		(char* pMsgBuf, DWORD dwSize);
	virtual void			Process		(void* pInfo);

protected:
	MSG_WeatherInfo*	m_pInfo;
};

#endif
Code:
 
#include "AllMsg.h"
#include "MsgWeather.h"
#include "SkyLayer.h"
#include "3dgamemap.h"
 
 
const int MAX_WEATHER_INTENSITY	= 1023;
const int MAX_WEATHER_DIR		= 360;
CMsgWeather::CMsgWeather()
{
	Init();
	m_pInfo	=(MSG_WeatherInfo *)m_bufMsg;
}

CMsgWeather::~CMsgWeather()
{
}

//////////////////////////////////////////////////////////////////////
BOOL	CMsgWeather::ConvertInfoForm (int nType, int nIntensity, int nDir, DWORD nColor)
{
	// check param
	if(nType <= WEATHER_NONE || nType >= WEATHER_ALL
				|| nIntensity < 0 || nIntensity >= MAX_WEATHER_INTENSITY
				|| nDir < 0 || nDir >= MAX_WEATHER_DIR)
	{
	 
		return false;
	}

	this->Init();

	int iWeatherDir;
	if(nDir>180)
		iWeatherDir = (360 - nDir)* -1;
	else
		iWeatherDir = nDir;
	int iType;
	switch(nType)
	{
	case	WEATHER_RAINY:	 
		iType	= 1;
		break;
	case WEATHER_SNOWY:
		iType	= 2 ;
		break;
	case	WEATHER_LEAF:	 
		iType	= 3 + nColor;
		break; 
	case WEATHER_FLOWER:	 
		iType	= 10 + nColor;
		break;
	case WEATHER_SANDS:
		iType = 13;	 
		break;
	case WEATHER_FLY:
		iType = 14 + nColor;
		break;
	case WEATHER_DANDELION:
		iType = 18;
		break;
	case WEATHER_WORM:
		iType = 19;
		break;		 
	case WEATHER_CLOUD:
		iType = 20;
		break;
	case  WEATHER_FINE:
		iType	= 0;
		break;
	default:
		return false;
	
	}
	m_pInfo->unMsgSize	=sizeof(MSG_WeatherInfo);
	m_pInfo->unMsgType	=_MSG_WEATHER;
	m_pInfo->nType		= iType;// target type
	m_pInfo->nIntensity	= nIntensity;
	m_pInfo->nDir		= iWeatherDir; // target type
	m_pInfo->dwColor	= nColor;
	return true;
}

BOOL	CMsgWeather::Create		(char* pMsgBuf, DWORD dwSize)
{
	if (!CNetMsg::Create(pMsgBuf, dwSize))
		return FALSE;

	if(_MSG_WEATHER != this->GetType())
		return FALSE;

	return TRUE;
}

extern CGameMap		g_objGameMap;

void	CMsgWeather::Process(void* pInfo)
{
 
	if(!ConvertInfoForm (m_pInfo->nType,m_pInfo->nIntensity,m_pInfo->nDir,m_pInfo->dwColor))
		return ;
 
	CSkyLayer *pSky = g_objGameMap.GetSkyLayer(); 
	int iCommand;
	int iNewType = m_pInfo->nType;
	if(iNewType == pSky->GetWeathType())
		iCommand =WEATHER_RESET;
	else
		if(iNewType == 0)
			iCommand = WEATHER_DESTROY;
		else
			 iCommand = WEATHER_CREATE;
	switch(iCommand)
	{
	case WEATHER_RESET:
		if(m_pInfo->nIntensity == 0)
			pSky->StopWeather();
		else
			pSky->SetWeather(m_pInfo->nDir,m_pInfo->nIntensity);
		break;
	case WEATHER_DESTROY:
		pSky->DestroyWeather();
		break;
	case WEATHER_CREATE:
		pSky->CreateWeather(m_pInfo->nType,m_pInfo->nDir,m_pInfo->nIntensity,m_pInfo->dwColor);
		break; 
	}
	return;
}
This is how the client processes weather: (just posting the header file because it's not too important)
Code:
#ifndef _WEATHER_HEAD_KATTY
#define _WEATHER_HEAD_KATTY

#include <windows.h>
#include <Windef.h>
#include "Ani.h"
#include <deque> 
#include "firebug.h"
#include "nd_bitmap.h"
#include "cloud.h"
using namespace std;
class CAni;
const int _MAX_AMOUNT			= 512;//1024;
const int FLYING_MAX_AMOUNT		= 100;
const int LEAF_MAX_AMOUNT		= 200;
const int _LEAF_FRAME			= 24;
const int WORMTYPE				= 10;
const int CLOUDTYPE				= 11;
const int FLYINGTYPE			= 2;
const int DANDELIONTYPE			= 1;
const int FLYFLOWER_FRAME		= 24;
const int FLYFLOWER_PER_LAYER	=  6;


enum{ __RAIN = 1, __SNOW = 2, __LEAF_G = 3,__LEAF_R = 4,__LEAF_Y = 5, __LEAF_Y_R = 6, __LEAF_5 = 7,__LEAF_6 = 8,__LEAF_7 = 9, __FLOWER_1 = 10, __FLOWER_2 = 11,__FLOWER_3 = 12, __SAND = 13,__FLYING_1,__FLYING_2,__FLYING_3,__FLYING_4,__DANDELION,__WORM, __CLOUD};
enum {_RAINSTATUS_NONE	=0, _RAINSTATUS_CREATE, _RAINSTATUS_SPLASH};
enum {_LEAFSTATUS_NONE	=0, _LEAFSTATUS_CREATE, _LEAFSTATUS_SPLASH};
enum {_SNOWSTATUS_NONE	=0, _SNOWSTATUS_CREATE, _SNOWSTATUS_SPLASH};
enum {_SANDSTATUS_NONE	=0, _SANDSTATUS_CREATE, _SANDSTATUS_SPLASH};
enum {_FLYFLOWERSTATUS_NONE	=0, _FLYFLOWERSTATUS_CREATE, _FLYFLOWERSTATUS_STOP,_FLYFLOWERSTATUS_BEGIN,FLYFLOWERSTATUS_PAUSE,FLYFLOWERSTATUS_RESET};
enum {_LEAF_BEGIN = 11, _LEAF_STOP=10 , _LEAF_RESET = 13, _LEAF_NONE = 14, _LEAF_PAUSE};

class CLeaf
{	
	public:
		CLeaf();
		~CLeaf()	{Destroy();}

		BOOL	Create	(int iPosX,int iPosY,int iSceneDeepth,int fWind,int fGravity);
		void	Show	( );
		void	Process	( );	
		void	Destroy	(void);

		BOOL	IsCreated	(void) {if(m_iStatus) return TRUE; else return FALSE;}
		int		GetInt		(double fValue);
		void	GetSplashPos(int& iPosX,int& iPosY)	{iPosX=m_iSplashX;iPosY=m_iSplashY;}
		void	SetPicture	(char *pszFileName)	{strcpy(m_szFileName,pszFileName);}
	private:

		int		m_iLayerFrame;
		int		m_iStatus;
		double	m_dwElapseTime;
		DWORD	m_dwLifeTime;
		DWORD	m_dStayGroundTime;

		int		m_iSize;
		int		m_iSceneDeepth;
		
		int		m_iStartX,m_iStartY;
		int		m_iSplashX,m_iSplashY;
		int		m_iLastPosX,m_iLastPosY;
		int		m_iLastFrame;

		int		m_fGravity;
		int		m_fSpeed;
		int		m_fWind;

		int		m_ibmpFrameIndex;
		char 	m_szFileName[100];
		int		m_bLieOnGround;
	public:
		int		m_nLevel; 
		int		m_fSinA,m_fCosA;
		int		m_iScreenX,m_iScreenY;
		int		m_nLoopCount;		
		DWORD	m_dwLifeBeginTime;
		 	
};


typedef deque<CLeaf *> CLEAF;


class CLeafSys
{
	public:
		CLeafSys(void)	{m_iStatu = _LEAF_NONE; }
		~CLeafSys(void) {Destroy();}

		BOOL Create	(int nWindDir,int nLevel,int nType);
		void Process(int & nStatus);

	private:
		char 	m_szFileName[100];
		int		m_iLeafAmount;
		int		m_iTargetAmount;
		CLEAF	m_Leaf;
	
		int m_nWindDirection;   
		int	m_iStatu;
	 
	public: 
	
		void LeafStop();
		void Destroy();
		void SetLeaf(int nWindDir,int nLevel);
		DWORD	m_dwPauseTime;
		void Pause();
		void Continue();

};



class CRain
{	
	public:
		CRain();
		~CRain()	{Destroy();}

		BOOL	Create	(int iPosX,int iPosY,int iSceneDeepth,int fWind,int fGravity,int nLevel,DWORD dwColor);
		void	Show	();
		void	Process	();
		void	Reset	(void);
		void	Destroy	(void);

		BOOL	IsCreated	(void) {if(m_iStatus) return TRUE; else return FALSE;}
		int		GetInt		(double fValue);
		void	GetSplashPos(int& iPosX,int& iPosY)	{iPosX=m_iSplashX;iPosY=m_iSplashY;}

		void	SetRipple	(char  szFileName[2][100])	{strcpy(m_szFileName[0],szFileName[0]);strcpy(m_szFileName[1],szFileName[1]);}

	private:
		int		m_iStatus;	
		DWORD	m_dwElapseTime;
		DWORD	m_dwLifeTime;
		int		m_iSize;
		int		m_iSceneDeepth;		
		int		m_iStartX,m_iStartY;
		int		m_iSplashX,m_iSplashY;
		int		m_iLastPosX,m_iLastPosY;

		int		m_fGravity;
		int		m_fSpeed;
		int		m_fWind;
		int		m_iRippleFrameIndex;
		char	m_szFileName[2][100];
		int		m_bOnWater;
	public:
		DWORD	m_dwColor;
		int		m_nLevel; 
		int		m_fSinA,m_fCosA;
		DWORD	m_dwLifeBeginTime;

};




typedef deque<CRain *> CRAIN;
enum {_RAIN_BEGIN = 11, _RAIN_STOP=10 ,_ADD_AMOUNT=12 ,_RAIN_RESET = 13, _RAIN_NONE = 14,_RAIN_PAUSE};
class CRainSys
{
	public:
		CRainSys(void);
		~CRainSys(void) {Destroy();}

		BOOL Create	(int nWindDir,int nLevel,DWORD dwColor);
		void Process(int & nStatus);
		void Reset	(void);	
		void PlayRainSound(int iLevel);
		void	RainStop();
		void	Destroy();
		void	SetRain(int nWindDir,int nLevel);
		void	SetColor (DWORD dwColor);
		DWORD	m_dwPauseTime;
		void	Pause();
		void	Continue();
		int		RendBMP(DWORD dwColor);

	private:
	
		DWORD	m_dwColor;
		char	m_szFileName[2][100];	
		int		m_iRainAmount;
		int		m_iTargetAmount;
		CRAIN	m_Rain;
		int		m_nWindDirection;	
		int		m_iStatu;
 	
};



////////////////////////////////////////////////////////////////////////////////////////////
//snow
////////////////////////////////////////////////////////////////////////////////////////////



class CSnow
{	
	public:
		CSnow();
		~CSnow()	{Destroy();}

		BOOL	Create	(int iPosX,int iPosY,int iSceneDeepth,int fWind,int fGravity);
		void	Process	();
		void	Destroy	(void);
		void	Reset	(void);
	
		void	ShowImage	( int iPosX, int iPosY );
		void	Show		(void );

		BOOL	IsCreated	(void) {if(m_iStatus) return TRUE; else return FALSE;}
		void	GetSplashPos(int& iPosX,int& iPosY)	{iPosX=m_iSplashX;iPosY=m_iSplashY;}
		void	SetImageBmp		(char *pszFileName)	{strcpy(m_szFileName,pszFileName);}
	private:
		int		m_iStatus;
		DWORD	m_dwElapseTime;
		DWORD	m_dwLifeTime;
		int		m_iSceneDeepth;
		
		int		m_iStartX,m_iStartY;
		int		m_iSplashX,m_iSplashY;
		int		m_iLastPosX,m_iLastPosY;
		int		m_fGravity;
		int		m_fSpeed;
		int		m_fWind;
		int		m_nStayTick;
		char 	m_szFileName[100];      
	public:	
		int	   m_fSinA,m_fCosA;
		DWORD	m_dwLifeBeginTime;
};


typedef deque<CSnow *> CSNOW;
enum { _SNOW_STOP = 0,_SNOW_BEGIN = 1, _SNOW_NONE=2,_SNOW_RESET = 3,_SNOW_PAUSE};
class CSnowSys
{
	public:
		CSnowSys(void)	{Init();}
		~CSnowSys(void) {Destroy();}
		void Pause();
		void Continue();

		void Init	(void);
		void Destroy(void);
		BOOL Create	(int iWindDir, int iLevel,DWORD dwColor);
		void Process(int & nStatus);
		void Reset	(void);
		void SnowStop();
		void SetSnow(int nWindDir,int nLevel);
	
	private:	
		char		m_szFileName[100];	
		int			m_iSnowAmount;
		CSNOW		m_Snow;
		int			m_iStatu;
		int			m_iWindDir;
		int			m_iTargetAmount;	
		DWORD		m_dwPauseTime;
};



//------------------------------------------------------------------
//沙
//------------------------------------------------------------------

class CSand
{	
	public:
		CSand();
		~CSand()	{Destroy();}

		BOOL	Create	(int iPosX,int iPosY,int iSceneDeepth,int fWind,int fGravity,int nLevel);
		void	Show	();
		void	Process	();
		void	Reset	(void);
		void	Destroy	(void);

		BOOL	IsCreated	(void) {if(m_iStatus) return TRUE; else return FALSE;}
		int		GetInt		(double fValue);
		void	GetSplashPos(int& iPosX,int& iPosY)	{iPosX=m_iSplashX;iPosY=m_iSplashY;}
 
	private:
		int		m_iStatus;
		DWORD	m_dwElapseTime;
		DWORD	m_dwLifeTime;
		int		m_iSize;
		int		m_iSceneDeepth;
		int		m_iStartX,m_iStartY;
		int		m_iSplashX,m_iSplashY;
		int		m_fGravity;
		int		m_fSpeed;
		int		m_fWind;
		int		m_ibmpFrameIndex;
 	public:
		int		m_nLevel;
		int		m_fSinA,m_fCosA;
		int		m_nDir;
		DWORD	m_dwLifeBeginTime;
	
};


typedef deque<CSand *> CSAND;
enum {_SAND_BEGIN = 11, _SAND_STOP=10 ,_SAND_ADD_AMOUNT=12 ,_SAND_RESET = 13, _SAND_NONE = 14,_SAND_PAUSE};
 
class CSandSys
{
	public:
		CSandSys(void)	{m_iStatu = _SAND_NONE;}
		~CSandSys(void) {Destroy();}

		BOOL Create	(int nWindDir,int nLevel);
		void Process(int & nStatus);
		void Reset	(void);	
		

	private:
 
		int		m_iSandAmount;
		int		m_iTargetAmount;
		CSAND	m_Sand;

	 	int		m_nWindDirection; 
		int		m_nLevel;    
		int		m_iStatu;	 
	 
	public:	
		void	SandStop();
		void	Destroy();
		void	SetSand(int nWindDir,int nLevel);
		void	Pause();
		void	Continue();
		DWORD 	m_dwPauseTime;

};




//--------------------------------------------------------------
//
//烟花.
//------------------------------------------------------------------------

enum {_YINFASTATUS_NONE	=0, _YINFASTATUS_CREATE, _YINFASTATUS_FALL , _YINFASTATUS_START, _YINFASTATUS_END};
enum {_YINFA_BEGIN = 10, _YINFA_STOP=11 , _YINFA_RESET = 13, _YINFA_NONE = 14};

 
const int _YINFA_FRAME	= 8;

class CYinFa
{	
	public:
		CYinFa(){ m_iStatus	= _YINFASTATUS_NONE;}
		~CYinFa()	{Destroy();}

		BOOL	Create	(int iOrigPosX,int iOrigPosY,int nMarginX, int nMarginY, int nRadiuint);
		void	Show	();
		void	Process	();
		void	Reset	(void);
		void	Destroy	(void);

		int 	IsCreated	(void) {return m_iStatus;}
		int		GetInt		(double fValue);
		void	SetPicture	(char *pszFileName)	{strcpy(m_szFileTitle,pszFileName);}

	private:
		int		m_iShowNum;
		int		m_iStatus;
		int		m_nPathCount;    // 粒子向四周散开的已用的贞数	  
		int 	m_nPathLength;   //向四周散开要用的贞数

		POINT	m_nCenterWorldPoint;
		POINT	m_nMarginWorldPoint;
		POINT	m_nFallWorldPoint;

		POINT	m_nStartWoldPoint;
		float	m_fRadius;
		int		m_nFallStep;  // 下落已用的贞数
		int		m_nFallLenght; 
		int		m_nRadius;
		char	m_szFileTitle[100];
		DWORD	m_dwLifeBeginTime;
	public:	 
		float   m_fSinA,m_fCosA;
			 	
};


typedef deque<CYinFa *> DequeYinFa;
class CYinFaSys
{
	public:
		CYinFaSys(void)	{m_nCreated = 0; }
		~CYinFaSys(void) {Destroy();}
		BOOL Create	(int nScreenX,int nScreenY,int nNum, int nShowNum, int nRadius, int nType,DWORD dwDelayTime);
		void Process();
		void Destroy();	
	
	private:
		int 	m_nOrigWorldPointX,m_nOrigWorldPointY;
		double	m_fRadius;
		DWORD	m_dwCreateTime;

		DWORD	m_dwDelayTime;
		DWORD	m_dwBeginTime;
		char	m_szFileTitle[100];
 
		DequeYinFa	m_YinFa;
		int		m_iStatu;
		int		m_nYinFaTotal;
		int		m_nYinFaUsed;
		int		m_nYinFaShowNum;
		int		m_nYinFaType;
		int		m_nInterval;	
	private:	 
		void YinFaStop();	 
	public: 
		POINT m_nShowCenter[20];	
		int m_nCreated;
	
};


typedef deque<POINT *> DequePoint;

//--------------------------------------------------------------
//
//烟花2
//------------------------------------------------------------------------



class CYinFa2
{	
	public:
		CYinFa2(){ m_iStatus	= _YINFASTATUS_NONE;}
		~CYinFa2()	{Destroy();}

		BOOL	Create	(int iOrigPosX,int iOrigPosY,int nMarginX, int nMarginY, int nRadiuint);
		void	Show	();
		void	Process	();
		void	Reset	(void);
		void	Destroy	(void);

		int		IsCreated	(void) {return m_iStatus;}
		int		GetInt		(double fValue);
		void	SetPicture	(char * pszFileName)	{strcpy(m_szFileTitle,pszFileName);}

	private:
		int		m_iShowNum;
		int		m_iStatus;
		int		m_nPathCount;    // 粒子向四周散开的已用的贞数	  
		int 	m_nPathLength;    //向四周散开要用的贞数

		POINT	m_nCenterWorldPoint;
		POINT	m_nMarginWorldPoint;
		POINT	m_nFallWorldPoint;

		POINT	m_nStartWoldPoint;
		float	m_fRadius;
		int		m_nFallStep;  // 下落已用的贞数
		int		m_nFallLenght; 
		int		m_nRadius;
		char	m_szFileTitle[100];
		DWORD	m_dwLifeBeginTime;
		DequePoint m_dequePoint;	

	public:	 
		float   m_fSinA,m_fCosA;
			 	
};


typedef deque<CYinFa2 *> DequeYinFa2;
class CYinFaSys2
{
	public:
		CYinFaSys2(void)	{m_nCreated = 0; }
		~CYinFaSys2(void) {Destroy();}

		BOOL Create	(int nScreenX,int nScreenY,int nNum, int nShowNum, int nRadius, int nType,DWORD dwDelayTime);
		void Process();
		void Destroy();	
	
	
	private:
		int 	m_nOrigWorldPointX,m_nOrigWorldPointY;
		double	m_fRadius;
		DWORD	m_dwCreateTime;
		DWORD	m_dwDelayTime;
		DWORD	m_dwBeginTime;		
		char	m_szFileTitle[100]; 
		DequeYinFa2		m_YinFa;
		int		m_iStatu; 
		int		m_nYinFaTotal;
		int		m_nYinFaUsed;
		int		m_nYinFaShowNum;
		int		m_nYinFaType;
		int		m_nInterval;
	private:
		void YinFaStop();		 
	public: 	
		int m_nCreated;
	
};




typedef deque<CYinFaSys *> DequeFireWork;
class CFireWork
{
public:
	CFireWork(){}
	~CFireWork(){Destroy();}
	void Destroy();
	void Create(int nScreenX,int nScreenY,int nNum,  int nRadius, int nType,DWORD dwDelayTime);
	void Process();
private:
	DequeFireWork dequeFireWork;


};


typedef deque<CYinFaSys2 *> DequeFireWork2;
class CFireWork2
{
public:
	CFireWork2(){}
	~CFireWork2(){Destroy();}
	void Destroy();
	void Create(int nScreenX,int nScreenY,int nNum,  int nRadius, int nType,DWORD dwDelayTime);
	void Process();
private:
	DequeFireWork2 dequeFireWork2;

};



 
class Firework
{
public:
	Firework(){}
	~Firework(){Destroy();}
	void Destroy();
	void Create(int nScreenX,int nScreenY,int nNum,  int nRadius, int nType ,int color,DWORD dwDelayTime);
	void Process();
private:
	CFireWork2 firework2;
	CFireWork  firework1;
	int m_nType;
};



//-----------------------------------------------------------------------
// fly flower
//-----------------------------------------------------------------------




 

class CFlyFlower
{	
	public:
		CFlyFlower(){ m_iStatus	= _FLYFLOWERSTATUS_NONE;}
		~CFlyFlower()	{Destroy();}	 
		void  InitialLayer();

		BOOL	Create	( int nCurFrame,int type);
		void	Show	();
		void	Destroy	(void);
		BOOL	IsCreated	(void) {if(m_iStatus) return TRUE; else return FALSE;}	 
		void	SetPicture	(char *pszFilename)	{strcpy(m_szFileTitle,pszFilename);}
		int		GetY(int nx);

	private:	 
	 
		int		m_iStatus;	 
		POINT	m_nCurWorldPoint;
		POINT	m_nShowWorldPoint;
	 	int		m_nLayer;   
		int		m_nCurState; 
		int		m_nCurFrame;
		int		m_nCurX;
		int		m_nCurY;
		int		m_nSpeed;
		int		m_nLoopCount;
		int		m_nType;
		char 	m_szFileTitle[100];
		int		m_nA,m_nB;
 	
};

 

typedef deque<CFlyFlower *> DequeCFlyFlower;
class CSysFlyFlower
{
	public:

		CSysFlyFlower(void)	{m_nCreated = 0; m_iStatu =_FLYFLOWERSTATUS_NONE; }
		~CSysFlyFlower(void) {Destroy();}

		BOOL Create	( int nNum, int nType,DWORD dwDelayTime);
	 	void Process(int & nStatus);
		void Destroy();	
		void Stop();
		void ReSet(int inum);
		void Pause();
		void Continue();
	
	private:
		int			m_iCurNum;
		int			m_iTargetNum;
		int			m_iStatu;
		int			m_nType;
	 	DWORD		m_dwCreateTime;
		DWORD		m_dwDelayTime;
		DWORD		m_dwBeginTime;		
		char		m_szFileTitle[100];
		int			m_nSpeed; 
		DequeCFlyFlower		m_dequeFlyFlower; 
		
	public: 	
		int m_nCreated;
	
};

 
//---------------------------------------------------------------------------
//天气
//---------------------------------------------------------------------------------
class CWeather
{
	public:
		CWeather(){ m_nType = 0;}
		~CWeather(){Destroy();}
		int m_nType;
		BOOL CreateEnv(int nType,int nWindDir,int nLevel,DWORD dwColor = 0x00ffffff);
		void SetColor(DWORD dwColor);
		void SetEnv(int nWindDir,int nLevel);
		BOOL StopEnv();
		void EnvShow( );
		void Destroy();
		void Pause();
		void Continue();
	private:
		CSnowSys m_objSnow;
		CRainSys m_objRain;
		CLeafSys m_objLeaf;
		CSandSys m_objSand;
		CSysFlyFlower m_objFlying;
		CSysFireBug m_objFlyBug;	 
		CCloudSys	m_objCloud;
};


 

enum {_FIREWORKLETTER_NONE	=0, _FIREWORKLETTER_CREATE, _FIREWORKLETTER_FALL, _FIREWORKLETTER_BEGIN  , _FIREWORKLETTER_STOP , _FIREWORKLETTER_LETTER,_FIREWORKLETTER_END };
 
const int	_FIREWORKLETTER_FRAME = 8 ;
class CFireworkLetter
{	
	public:
		CFireworkLetter(){ m_iStatus	= _FIREWORKLETTER_NONE;}
		~CFireworkLetter()	{Destroy();}

		BOOL	Create	(int iOrigPosX,int iOrigPosY,int nMarginX, int nMarginY);
		void	Show	();
		void	Process	();
		void	Reset	(void);
		void	Destroy	(void);

		int	IsCreated	(void) {return m_iStatus;}	  
		void	SetPicture	(char * pszFileName)	{strcpy(m_szFileTitle,pszFileName);}

	private:
	 
		int		m_iStatus;
		int		m_nPathCount;		// 粒子向四周散开的已用的贞数	  
		int 	m_nPathLength;		//向四周散开要用的贞数

		POINT	m_nCenterWorldPoint;
		POINT	m_nMarginWorldPoint;
		POINT	m_nFallWorldPoint;
		float	m_fRadius;
		int		m_nFallStep;		// 下落已用的贞数
		int		m_nFallLenght; 
		char	m_szFileTitle[100];
			 	
};


typedef deque<CFireworkLetter *> DequeFireworkLetter;
typedef deque<POINT * > DequePoint;
class CFireworkLetterSys
{
	public:
		CFireworkLetterSys(void)	{m_nCreated = 0; }
		~CFireworkLetterSys(void) {Destroy();}

		BOOL Create	(int nScreenX,int nScreenY, char * szLetter ,int nType,DWORD dwDelayTime);
		void Process();
		void Destroy();	
	
	
	private:
		char szLetter[20];
		int 	m_nOrigWorldPointX,m_nOrigWorldPointY;
		double	m_fRadius;		 	
		char	m_szFileTitle[100];

		DequeFireworkLetter	m_firework;
		int		m_iStatu; 
		int		m_nType;	
		DequePoint pPoint ;		
		DWORD	m_dwDelayTime;
		DWORD	m_dwBeginTime;
	 
	private:	 
		void  Stop();	
		int		GetBmpPoint(LPSTR lpfilename, int X, int Y);
		int		test(DWORD a,int k);
		BOOL	GetPoint(char *zw,int X,int Y);
	public: 	 
		int m_nCreated;
	
};


typedef deque<CFireworkLetterSys  *> DequeFireworkChar;
class CFireWorkChar
{
public:
	CFireWorkChar(){}
	~CFireWorkChar(){Destroy();}
	void Destroy();
	void Create(int nScreenX,int nScreenY, char * szLetter ,int nType,DWORD dwDelayTime);
	void Process();
private:
	DequeFireWork2 m_dequeFireWork;
	DequeFireworkChar m_dequeFireworkChar;

};


#endif
06/07/2014 18:15 mejo33#95
Quote:
Originally Posted by Spirited View Post
This is the packet structure that the server uses to send weather instructions to the client (from TQ's official source code):

Code:
#ifndef MSGWEATHER_HEADER_KATTY
#define MSGWEATHER_HEADER_KATTY

 
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "NetMsg.h"


enum { WEATHER_NONE=0, WEATHER_FINE, 
		WEATHER_RAINY, WEATHER_SNOWY, WEATHER_SANDS, 
		WEATHER_LEAF, WEATHER_NOUSED, WEATHER_FLOWER, 
		WEATHER_FLY, WEATHER_DANDELION, WEATHER_WORM, WEATHER_CLOUD,
		WEATHER_ALL};
 
typedef struct {
	unsigned short	unMsgSize;
	unsigned short	unMsgType;

	int 			nType;
	int				nIntensity;					// 1 - 1024
	int				nDir;						// 0 +- 60
	DWORD			dwColor;					// 0 - (MAX-1)

}MSG_WeatherInfo;


 
const int WEATHER_RESET = 1;
const int WEATHER_STOP	= 2;
const int WEATHER_CREATE= 3;
const int WEATHER_DESTROY=4;
 


class CMsgWeather : public CNetMsg    
{
public:
	CMsgWeather();
	virtual ~CMsgWeather();
	BOOL	ConvertInfoForm  (int nType, int nIntensity, int nDir, DWORD nColor);


public:	
	virtual BOOL			Create		(char* pMsgBuf, DWORD dwSize);
	virtual void			Process		(void* pInfo);

protected:
	MSG_WeatherInfo*	m_pInfo;
};

#endif
Code:
 
#include "AllMsg.h"
#include "MsgWeather.h"
#include "SkyLayer.h"
#include "3dgamemap.h"
 
 
const int MAX_WEATHER_INTENSITY	= 1023;
const int MAX_WEATHER_DIR		= 360;
CMsgWeather::CMsgWeather()
{
	Init();
	m_pInfo	=(MSG_WeatherInfo *)m_bufMsg;
}

CMsgWeather::~CMsgWeather()
{
}

//////////////////////////////////////////////////////////////////////
BOOL	CMsgWeather::ConvertInfoForm (int nType, int nIntensity, int nDir, DWORD nColor)
{
	// check param
	if(nType <= WEATHER_NONE || nType >= WEATHER_ALL
				|| nIntensity < 0 || nIntensity >= MAX_WEATHER_INTENSITY
				|| nDir < 0 || nDir >= MAX_WEATHER_DIR)
	{
	 
		return false;
	}

	this->Init();

	int iWeatherDir;
	if(nDir>180)
		iWeatherDir = (360 - nDir)* -1;
	else
		iWeatherDir = nDir;
	int iType;
	switch(nType)
	{
	case	WEATHER_RAINY:	 
		iType	= 1;
		break;
	case WEATHER_SNOWY:
		iType	= 2 ;
		break;
	case	WEATHER_LEAF:	 
		iType	= 3 + nColor;
		break; 
	case WEATHER_FLOWER:	 
		iType	= 10 + nColor;
		break;
	case WEATHER_SANDS:
		iType = 13;	 
		break;
	case WEATHER_FLY:
		iType = 14 + nColor;
		break;
	case WEATHER_DANDELION:
		iType = 18;
		break;
	case WEATHER_WORM:
		iType = 19;
		break;		 
	case WEATHER_CLOUD:
		iType = 20;
		break;
	case  WEATHER_FINE:
		iType	= 0;
		break;
	default:
		return false;
	
	}
	m_pInfo->unMsgSize	=sizeof(MSG_WeatherInfo);
	m_pInfo->unMsgType	=_MSG_WEATHER;
	m_pInfo->nType		= iType;// target type
	m_pInfo->nIntensity	= nIntensity;
	m_pInfo->nDir		= iWeatherDir; // target type
	m_pInfo->dwColor	= nColor;
	return true;
}

BOOL	CMsgWeather::Create		(char* pMsgBuf, DWORD dwSize)
{
	if (!CNetMsg::Create(pMsgBuf, dwSize))
		return FALSE;

	if(_MSG_WEATHER != this->GetType())
		return FALSE;

	return TRUE;
}

extern CGameMap		g_objGameMap;

void	CMsgWeather::Process(void* pInfo)
{
 
	if(!ConvertInfoForm (m_pInfo->nType,m_pInfo->nIntensity,m_pInfo->nDir,m_pInfo->dwColor))
		return ;
 
	CSkyLayer *pSky = g_objGameMap.GetSkyLayer(); 
	int iCommand;
	int iNewType = m_pInfo->nType;
	if(iNewType == pSky->GetWeathType())
		iCommand =WEATHER_RESET;
	else
		if(iNewType == 0)
			iCommand = WEATHER_DESTROY;
		else
			 iCommand = WEATHER_CREATE;
	switch(iCommand)
	{
	case WEATHER_RESET:
		if(m_pInfo->nIntensity == 0)
			pSky->StopWeather();
		else
			pSky->SetWeather(m_pInfo->nDir,m_pInfo->nIntensity);
		break;
	case WEATHER_DESTROY:
		pSky->DestroyWeather();
		break;
	case WEATHER_CREATE:
		pSky->CreateWeather(m_pInfo->nType,m_pInfo->nDir,m_pInfo->nIntensity,m_pInfo->dwColor);
		break; 
	}
	return;
}
This is how the client processes weather: (just posting the header file because it's not too important)
Code:
#ifndef _WEATHER_HEAD_KATTY
#define _WEATHER_HEAD_KATTY

#include <windows.h>
#include <Windef.h>
#include "Ani.h"
#include <deque> 
#include "firebug.h"
#include "nd_bitmap.h"
#include "cloud.h"
using namespace std;
class CAni;
const int _MAX_AMOUNT			= 512;//1024;
const int FLYING_MAX_AMOUNT		= 100;
const int LEAF_MAX_AMOUNT		= 200;
const int _LEAF_FRAME			= 24;
const int WORMTYPE				= 10;
const int CLOUDTYPE				= 11;
const int FLYINGTYPE			= 2;
const int DANDELIONTYPE			= 1;
const int FLYFLOWER_FRAME		= 24;
const int FLYFLOWER_PER_LAYER	=  6;


enum{ __RAIN = 1, __SNOW = 2, __LEAF_G = 3,__LEAF_R = 4,__LEAF_Y = 5, __LEAF_Y_R = 6, __LEAF_5 = 7,__LEAF_6 = 8,__LEAF_7 = 9, __FLOWER_1 = 10, __FLOWER_2 = 11,__FLOWER_3 = 12, __SAND = 13,__FLYING_1,__FLYING_2,__FLYING_3,__FLYING_4,__DANDELION,__WORM, __CLOUD};
enum {_RAINSTATUS_NONE	=0, _RAINSTATUS_CREATE, _RAINSTATUS_SPLASH};
enum {_LEAFSTATUS_NONE	=0, _LEAFSTATUS_CREATE, _LEAFSTATUS_SPLASH};
enum {_SNOWSTATUS_NONE	=0, _SNOWSTATUS_CREATE, _SNOWSTATUS_SPLASH};
enum {_SANDSTATUS_NONE	=0, _SANDSTATUS_CREATE, _SANDSTATUS_SPLASH};
enum {_FLYFLOWERSTATUS_NONE	=0, _FLYFLOWERSTATUS_CREATE, _FLYFLOWERSTATUS_STOP,_FLYFLOWERSTATUS_BEGIN,FLYFLOWERSTATUS_PAUSE,FLYFLOWERSTATUS_RESET};
enum {_LEAF_BEGIN = 11, _LEAF_STOP=10 , _LEAF_RESET = 13, _LEAF_NONE = 14, _LEAF_PAUSE};

class CLeaf
{	
	public:
		CLeaf();
		~CLeaf()	{Destroy();}

		BOOL	Create	(int iPosX,int iPosY,int iSceneDeepth,int fWind,int fGravity);
		void	Show	( );
		void	Process	( );	
		void	Destroy	(void);

		BOOL	IsCreated	(void) {if(m_iStatus) return TRUE; else return FALSE;}
		int		GetInt		(double fValue);
		void	GetSplashPos(int& iPosX,int& iPosY)	{iPosX=m_iSplashX;iPosY=m_iSplashY;}
		void	SetPicture	(char *pszFileName)	{strcpy(m_szFileName,pszFileName);}
	private:

		int		m_iLayerFrame;
		int		m_iStatus;
		double	m_dwElapseTime;
		DWORD	m_dwLifeTime;
		DWORD	m_dStayGroundTime;

		int		m_iSize;
		int		m_iSceneDeepth;
		
		int		m_iStartX,m_iStartY;
		int		m_iSplashX,m_iSplashY;
		int		m_iLastPosX,m_iLastPosY;
		int		m_iLastFrame;

		int		m_fGravity;
		int		m_fSpeed;
		int		m_fWind;

		int		m_ibmpFrameIndex;
		char 	m_szFileName[100];
		int		m_bLieOnGround;
	public:
		int		m_nLevel; 
		int		m_fSinA,m_fCosA;
		int		m_iScreenX,m_iScreenY;
		int		m_nLoopCount;		
		DWORD	m_dwLifeBeginTime;
		 	
};


typedef deque<CLeaf *> CLEAF;


class CLeafSys
{
	public:
		CLeafSys(void)	{m_iStatu = _LEAF_NONE; }
		~CLeafSys(void) {Destroy();}

		BOOL Create	(int nWindDir,int nLevel,int nType);
		void Process(int & nStatus);

	private:
		char 	m_szFileName[100];
		int		m_iLeafAmount;
		int		m_iTargetAmount;
		CLEAF	m_Leaf;
	
		int m_nWindDirection;   
		int	m_iStatu;
	 
	public: 
	
		void LeafStop();
		void Destroy();
		void SetLeaf(int nWindDir,int nLevel);
		DWORD	m_dwPauseTime;
		void Pause();
		void Continue();

};



class CRain
{	
	public:
		CRain();
		~CRain()	{Destroy();}

		BOOL	Create	(int iPosX,int iPosY,int iSceneDeepth,int fWind,int fGravity,int nLevel,DWORD dwColor);
		void	Show	();
		void	Process	();
		void	Reset	(void);
		void	Destroy	(void);

		BOOL	IsCreated	(void) {if(m_iStatus) return TRUE; else return FALSE;}
		int		GetInt		(double fValue);
		void	GetSplashPos(int& iPosX,int& iPosY)	{iPosX=m_iSplashX;iPosY=m_iSplashY;}

		void	SetRipple	(char  szFileName[2][100])	{strcpy(m_szFileName[0],szFileName[0]);strcpy(m_szFileName[1],szFileName[1]);}

	private:
		int		m_iStatus;	
		DWORD	m_dwElapseTime;
		DWORD	m_dwLifeTime;
		int		m_iSize;
		int		m_iSceneDeepth;		
		int		m_iStartX,m_iStartY;
		int		m_iSplashX,m_iSplashY;
		int		m_iLastPosX,m_iLastPosY;

		int		m_fGravity;
		int		m_fSpeed;
		int		m_fWind;
		int		m_iRippleFrameIndex;
		char	m_szFileName[2][100];
		int		m_bOnWater;
	public:
		DWORD	m_dwColor;
		int		m_nLevel; 
		int		m_fSinA,m_fCosA;
		DWORD	m_dwLifeBeginTime;

};




typedef deque<CRain *> CRAIN;
enum {_RAIN_BEGIN = 11, _RAIN_STOP=10 ,_ADD_AMOUNT=12 ,_RAIN_RESET = 13, _RAIN_NONE = 14,_RAIN_PAUSE};
class CRainSys
{
	public:
		CRainSys(void);
		~CRainSys(void) {Destroy();}

		BOOL Create	(int nWindDir,int nLevel,DWORD dwColor);
		void Process(int & nStatus);
		void Reset	(void);	
		void PlayRainSound(int iLevel);
		void	RainStop();
		void	Destroy();
		void	SetRain(int nWindDir,int nLevel);
		void	SetColor (DWORD dwColor);
		DWORD	m_dwPauseTime;
		void	Pause();
		void	Continue();
		int		RendBMP(DWORD dwColor);

	private:
	
		DWORD	m_dwColor;
		char	m_szFileName[2][100];	
		int		m_iRainAmount;
		int		m_iTargetAmount;
		CRAIN	m_Rain;
		int		m_nWindDirection;	
		int		m_iStatu;
 	
};



////////////////////////////////////////////////////////////////////////////////////////////
//snow
////////////////////////////////////////////////////////////////////////////////////////////



class CSnow
{	
	public:
		CSnow();
		~CSnow()	{Destroy();}

		BOOL	Create	(int iPosX,int iPosY,int iSceneDeepth,int fWind,int fGravity);
		void	Process	();
		void	Destroy	(void);
		void	Reset	(void);
	
		void	ShowImage	( int iPosX, int iPosY );
		void	Show		(void );

		BOOL	IsCreated	(void) {if(m_iStatus) return TRUE; else return FALSE;}
		void	GetSplashPos(int& iPosX,int& iPosY)	{iPosX=m_iSplashX;iPosY=m_iSplashY;}
		void	SetImageBmp		(char *pszFileName)	{strcpy(m_szFileName,pszFileName);}
	private:
		int		m_iStatus;
		DWORD	m_dwElapseTime;
		DWORD	m_dwLifeTime;
		int		m_iSceneDeepth;
		
		int		m_iStartX,m_iStartY;
		int		m_iSplashX,m_iSplashY;
		int		m_iLastPosX,m_iLastPosY;
		int		m_fGravity;
		int		m_fSpeed;
		int		m_fWind;
		int		m_nStayTick;
		char 	m_szFileName[100];      
	public:	
		int	   m_fSinA,m_fCosA;
		DWORD	m_dwLifeBeginTime;
};


typedef deque<CSnow *> CSNOW;
enum { _SNOW_STOP = 0,_SNOW_BEGIN = 1, _SNOW_NONE=2,_SNOW_RESET = 3,_SNOW_PAUSE};
class CSnowSys
{
	public:
		CSnowSys(void)	{Init();}
		~CSnowSys(void) {Destroy();}
		void Pause();
		void Continue();

		void Init	(void);
		void Destroy(void);
		BOOL Create	(int iWindDir, int iLevel,DWORD dwColor);
		void Process(int & nStatus);
		void Reset	(void);
		void SnowStop();
		void SetSnow(int nWindDir,int nLevel);
	
	private:	
		char		m_szFileName[100];	
		int			m_iSnowAmount;
		CSNOW		m_Snow;
		int			m_iStatu;
		int			m_iWindDir;
		int			m_iTargetAmount;	
		DWORD		m_dwPauseTime;
};



//------------------------------------------------------------------
//沙
//------------------------------------------------------------------

class CSand
{	
	public:
		CSand();
		~CSand()	{Destroy();}

		BOOL	Create	(int iPosX,int iPosY,int iSceneDeepth,int fWind,int fGravity,int nLevel);
		void	Show	();
		void	Process	();
		void	Reset	(void);
		void	Destroy	(void);

		BOOL	IsCreated	(void) {if(m_iStatus) return TRUE; else return FALSE;}
		int		GetInt		(double fValue);
		void	GetSplashPos(int& iPosX,int& iPosY)	{iPosX=m_iSplashX;iPosY=m_iSplashY;}
 
	private:
		int		m_iStatus;
		DWORD	m_dwElapseTime;
		DWORD	m_dwLifeTime;
		int		m_iSize;
		int		m_iSceneDeepth;
		int		m_iStartX,m_iStartY;
		int		m_iSplashX,m_iSplashY;
		int		m_fGravity;
		int		m_fSpeed;
		int		m_fWind;
		int		m_ibmpFrameIndex;
 	public:
		int		m_nLevel;
		int		m_fSinA,m_fCosA;
		int		m_nDir;
		DWORD	m_dwLifeBeginTime;
	
};


typedef deque<CSand *> CSAND;
enum {_SAND_BEGIN = 11, _SAND_STOP=10 ,_SAND_ADD_AMOUNT=12 ,_SAND_RESET = 13, _SAND_NONE = 14,_SAND_PAUSE};
 
class CSandSys
{
	public:
		CSandSys(void)	{m_iStatu = _SAND_NONE;}
		~CSandSys(void) {Destroy();}

		BOOL Create	(int nWindDir,int nLevel);
		void Process(int & nStatus);
		void Reset	(void);	
		

	private:
 
		int		m_iSandAmount;
		int		m_iTargetAmount;
		CSAND	m_Sand;

	 	int		m_nWindDirection; 
		int		m_nLevel;    
		int		m_iStatu;	 
	 
	public:	
		void	SandStop();
		void	Destroy();
		void	SetSand(int nWindDir,int nLevel);
		void	Pause();
		void	Continue();
		DWORD 	m_dwPauseTime;

};




//--------------------------------------------------------------
//
//烟花.
//------------------------------------------------------------------------

enum {_YINFASTATUS_NONE	=0, _YINFASTATUS_CREATE, _YINFASTATUS_FALL , _YINFASTATUS_START, _YINFASTATUS_END};
enum {_YINFA_BEGIN = 10, _YINFA_STOP=11 , _YINFA_RESET = 13, _YINFA_NONE = 14};

 
const int _YINFA_FRAME	= 8;

class CYinFa
{	
	public:
		CYinFa(){ m_iStatus	= _YINFASTATUS_NONE;}
		~CYinFa()	{Destroy();}

		BOOL	Create	(int iOrigPosX,int iOrigPosY,int nMarginX, int nMarginY, int nRadiuint);
		void	Show	();
		void	Process	();
		void	Reset	(void);
		void	Destroy	(void);

		int 	IsCreated	(void) {return m_iStatus;}
		int		GetInt		(double fValue);
		void	SetPicture	(char *pszFileName)	{strcpy(m_szFileTitle,pszFileName);}

	private:
		int		m_iShowNum;
		int		m_iStatus;
		int		m_nPathCount;    // 粒子向四周散开的已用的贞数	  
		int 	m_nPathLength;   //向四周散开要用的贞数

		POINT	m_nCenterWorldPoint;
		POINT	m_nMarginWorldPoint;
		POINT	m_nFallWorldPoint;

		POINT	m_nStartWoldPoint;
		float	m_fRadius;
		int		m_nFallStep;  // 下落已用的贞数
		int		m_nFallLenght; 
		int		m_nRadius;
		char	m_szFileTitle[100];
		DWORD	m_dwLifeBeginTime;
	public:	 
		float   m_fSinA,m_fCosA;
			 	
};


typedef deque<CYinFa *> DequeYinFa;
class CYinFaSys
{
	public:
		CYinFaSys(void)	{m_nCreated = 0; }
		~CYinFaSys(void) {Destroy();}
		BOOL Create	(int nScreenX,int nScreenY,int nNum, int nShowNum, int nRadius, int nType,DWORD dwDelayTime);
		void Process();
		void Destroy();	
	
	private:
		int 	m_nOrigWorldPointX,m_nOrigWorldPointY;
		double	m_fRadius;
		DWORD	m_dwCreateTime;

		DWORD	m_dwDelayTime;
		DWORD	m_dwBeginTime;
		char	m_szFileTitle[100];
 
		DequeYinFa	m_YinFa;
		int		m_iStatu;
		int		m_nYinFaTotal;
		int		m_nYinFaUsed;
		int		m_nYinFaShowNum;
		int		m_nYinFaType;
		int		m_nInterval;	
	private:	 
		void YinFaStop();	 
	public: 
		POINT m_nShowCenter[20];	
		int m_nCreated;
	
};


typedef deque<POINT *> DequePoint;

//--------------------------------------------------------------
//
//烟花2
//------------------------------------------------------------------------



class CYinFa2
{	
	public:
		CYinFa2(){ m_iStatus	= _YINFASTATUS_NONE;}
		~CYinFa2()	{Destroy();}

		BOOL	Create	(int iOrigPosX,int iOrigPosY,int nMarginX, int nMarginY, int nRadiuint);
		void	Show	();
		void	Process	();
		void	Reset	(void);
		void	Destroy	(void);

		int		IsCreated	(void) {return m_iStatus;}
		int		GetInt		(double fValue);
		void	SetPicture	(char * pszFileName)	{strcpy(m_szFileTitle,pszFileName);}

	private:
		int		m_iShowNum;
		int		m_iStatus;
		int		m_nPathCount;    // 粒子向四周散开的已用的贞数	  
		int 	m_nPathLength;    //向四周散开要用的贞数

		POINT	m_nCenterWorldPoint;
		POINT	m_nMarginWorldPoint;
		POINT	m_nFallWorldPoint;

		POINT	m_nStartWoldPoint;
		float	m_fRadius;
		int		m_nFallStep;  // 下落已用的贞数
		int		m_nFallLenght; 
		int		m_nRadius;
		char	m_szFileTitle[100];
		DWORD	m_dwLifeBeginTime;
		DequePoint m_dequePoint;	

	public:	 
		float   m_fSinA,m_fCosA;
			 	
};


typedef deque<CYinFa2 *> DequeYinFa2;
class CYinFaSys2
{
	public:
		CYinFaSys2(void)	{m_nCreated = 0; }
		~CYinFaSys2(void) {Destroy();}

		BOOL Create	(int nScreenX,int nScreenY,int nNum, int nShowNum, int nRadius, int nType,DWORD dwDelayTime);
		void Process();
		void Destroy();	
	
	
	private:
		int 	m_nOrigWorldPointX,m_nOrigWorldPointY;
		double	m_fRadius;
		DWORD	m_dwCreateTime;
		DWORD	m_dwDelayTime;
		DWORD	m_dwBeginTime;		
		char	m_szFileTitle[100]; 
		DequeYinFa2		m_YinFa;
		int		m_iStatu; 
		int		m_nYinFaTotal;
		int		m_nYinFaUsed;
		int		m_nYinFaShowNum;
		int		m_nYinFaType;
		int		m_nInterval;
	private:
		void YinFaStop();		 
	public: 	
		int m_nCreated;
	
};




typedef deque<CYinFaSys *> DequeFireWork;
class CFireWork
{
public:
	CFireWork(){}
	~CFireWork(){Destroy();}
	void Destroy();
	void Create(int nScreenX,int nScreenY,int nNum,  int nRadius, int nType,DWORD dwDelayTime);
	void Process();
private:
	DequeFireWork dequeFireWork;


};


typedef deque<CYinFaSys2 *> DequeFireWork2;
class CFireWork2
{
public:
	CFireWork2(){}
	~CFireWork2(){Destroy();}
	void Destroy();
	void Create(int nScreenX,int nScreenY,int nNum,  int nRadius, int nType,DWORD dwDelayTime);
	void Process();
private:
	DequeFireWork2 dequeFireWork2;

};



 
class Firework
{
public:
	Firework(){}
	~Firework(){Destroy();}
	void Destroy();
	void Create(int nScreenX,int nScreenY,int nNum,  int nRadius, int nType ,int color,DWORD dwDelayTime);
	void Process();
private:
	CFireWork2 firework2;
	CFireWork  firework1;
	int m_nType;
};



//-----------------------------------------------------------------------
// fly flower
//-----------------------------------------------------------------------




 

class CFlyFlower
{	
	public:
		CFlyFlower(){ m_iStatus	= _FLYFLOWERSTATUS_NONE;}
		~CFlyFlower()	{Destroy();}	 
		void  InitialLayer();

		BOOL	Create	( int nCurFrame,int type);
		void	Show	();
		void	Destroy	(void);
		BOOL	IsCreated	(void) {if(m_iStatus) return TRUE; else return FALSE;}	 
		void	SetPicture	(char *pszFilename)	{strcpy(m_szFileTitle,pszFilename);}
		int		GetY(int nx);

	private:	 
	 
		int		m_iStatus;	 
		POINT	m_nCurWorldPoint;
		POINT	m_nShowWorldPoint;
	 	int		m_nLayer;   
		int		m_nCurState; 
		int		m_nCurFrame;
		int		m_nCurX;
		int		m_nCurY;
		int		m_nSpeed;
		int		m_nLoopCount;
		int		m_nType;
		char 	m_szFileTitle[100];
		int		m_nA,m_nB;
 	
};

 

typedef deque<CFlyFlower *> DequeCFlyFlower;
class CSysFlyFlower
{
	public:

		CSysFlyFlower(void)	{m_nCreated = 0; m_iStatu =_FLYFLOWERSTATUS_NONE; }
		~CSysFlyFlower(void) {Destroy();}

		BOOL Create	( int nNum, int nType,DWORD dwDelayTime);
	 	void Process(int & nStatus);
		void Destroy();	
		void Stop();
		void ReSet(int inum);
		void Pause();
		void Continue();
	
	private:
		int			m_iCurNum;
		int			m_iTargetNum;
		int			m_iStatu;
		int			m_nType;
	 	DWORD		m_dwCreateTime;
		DWORD		m_dwDelayTime;
		DWORD		m_dwBeginTime;		
		char		m_szFileTitle[100];
		int			m_nSpeed; 
		DequeCFlyFlower		m_dequeFlyFlower; 
		
	public: 	
		int m_nCreated;
	
};

 
//---------------------------------------------------------------------------
//天气
//---------------------------------------------------------------------------------
class CWeather
{
	public:
		CWeather(){ m_nType = 0;}
		~CWeather(){Destroy();}
		int m_nType;
		BOOL CreateEnv(int nType,int nWindDir,int nLevel,DWORD dwColor = 0x00ffffff);
		void SetColor(DWORD dwColor);
		void SetEnv(int nWindDir,int nLevel);
		BOOL StopEnv();
		void EnvShow( );
		void Destroy();
		void Pause();
		void Continue();
	private:
		CSnowSys m_objSnow;
		CRainSys m_objRain;
		CLeafSys m_objLeaf;
		CSandSys m_objSand;
		CSysFlyFlower m_objFlying;
		CSysFireBug m_objFlyBug;	 
		CCloudSys	m_objCloud;
};


 

enum {_FIREWORKLETTER_NONE	=0, _FIREWORKLETTER_CREATE, _FIREWORKLETTER_FALL, _FIREWORKLETTER_BEGIN  , _FIREWORKLETTER_STOP , _FIREWORKLETTER_LETTER,_FIREWORKLETTER_END };
 
const int	_FIREWORKLETTER_FRAME = 8 ;
class CFireworkLetter
{	
	public:
		CFireworkLetter(){ m_iStatus	= _FIREWORKLETTER_NONE;}
		~CFireworkLetter()	{Destroy();}

		BOOL	Create	(int iOrigPosX,int iOrigPosY,int nMarginX, int nMarginY);
		void	Show	();
		void	Process	();
		void	Reset	(void);
		void	Destroy	(void);

		int	IsCreated	(void) {return m_iStatus;}	  
		void	SetPicture	(char * pszFileName)	{strcpy(m_szFileTitle,pszFileName);}

	private:
	 
		int		m_iStatus;
		int		m_nPathCount;		// 粒子向四周散开的已用的贞数	  
		int 	m_nPathLength;		//向四周散开要用的贞数

		POINT	m_nCenterWorldPoint;
		POINT	m_nMarginWorldPoint;
		POINT	m_nFallWorldPoint;
		float	m_fRadius;
		int		m_nFallStep;		// 下落已用的贞数
		int		m_nFallLenght; 
		char	m_szFileTitle[100];
			 	
};


typedef deque<CFireworkLetter *> DequeFireworkLetter;
typedef deque<POINT * > DequePoint;
class CFireworkLetterSys
{
	public:
		CFireworkLetterSys(void)	{m_nCreated = 0; }
		~CFireworkLetterSys(void) {Destroy();}

		BOOL Create	(int nScreenX,int nScreenY, char * szLetter ,int nType,DWORD dwDelayTime);
		void Process();
		void Destroy();	
	
	
	private:
		char szLetter[20];
		int 	m_nOrigWorldPointX,m_nOrigWorldPointY;
		double	m_fRadius;		 	
		char	m_szFileTitle[100];

		DequeFireworkLetter	m_firework;
		int		m_iStatu; 
		int		m_nType;	
		DequePoint pPoint ;		
		DWORD	m_dwDelayTime;
		DWORD	m_dwBeginTime;
	 
	private:	 
		void  Stop();	
		int		GetBmpPoint(LPSTR lpfilename, int X, int Y);
		int		test(DWORD a,int k);
		BOOL	GetPoint(char *zw,int X,int Y);
	public: 	 
		int m_nCreated;
	
};


typedef deque<CFireworkLetterSys  *> DequeFireworkChar;
class CFireWorkChar
{
public:
	CFireWorkChar(){}
	~CFireWorkChar(){Destroy();}
	void Destroy();
	void Create(int nScreenX,int nScreenY, char * szLetter ,int nType,DWORD dwDelayTime);
	void Process();
private:
	DequeFireWork2 m_dequeFireWork;
	DequeFireworkChar m_dequeFireworkChar;

};


#endif
Its hard for me, thread can be closed. I dont know how to build it. BTW do u have source for binarys? lol:P
06/07/2014 18:28 Spirited#96
Quote:
Originally Posted by mejo33 View Post
Its hard for me, thread can be closed. I dont know how to build it. BTW do u have source for binarys? lol:P
Yes, everyone does.
[Only registered and activated users can see links. Click Here To Register...]