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

📄 commongamefunc.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	if(kind == 1038)
	{
		return eJINBUBBOOK;
	}
	if(kind == 1037)
	{
		return eSIMBUBBOOK;
	}
	return eMUGONGBOOK;
}

POSTYPE ConvAbsPos2MugongPos(POSTYPE abspos)
{
	if(abspos < TP_MUGONG_START)
	{
		ASSERT(0);
		return 0;
	}
	if(abspos >= TP_JINBUB_END)
	{
		ASSERT(0);
		return 0;
	}
	
	return abspos - TP_MUGONG_START;
}


DWORD GetMainTargetID(MAINTARGET* pMainTarget)
{
	if(pMainTarget->MainTargetKind == MAINTARGET::MAINTARGETKIND_OBJECTID)
		return pMainTarget->dwMainTargetID;
	else
		return 0;
}

#ifdef _MAPSERVER_
#ifndef _MURIMNET_
#include "UserTable.h"
#include "CharMove.h"
#endif
#endif
#ifdef _MHCLIENT_
#include "ObjectManager.h"
#endif

BOOL GetMainTargetPos(MAINTARGET* pMainTarget,VECTOR3* pRtPos, CObject ** ppObject)
{	
	if(pMainTarget->MainTargetKind == MAINTARGET::MAINTARGETKIND_POS)
	{
		pMainTarget->cpTargetPos.Decompress(pRtPos);
		if(ppObject)
			*ppObject = NULL;
		return TRUE;
	}
	else
	{
		
#ifdef _MAPSERVER_
		CObject* pTarget;
		pTarget = g_pUserTable->FindUser(pMainTarget->dwMainTargetID);
		if(ppObject)
			*ppObject = pTarget;
		if(pTarget == NULL)
			return FALSE;
		*pRtPos = *CCharMove::GetPosition(pTarget);
#endif
#ifdef _MHCLIENT_
		CObject* pTarget;
		pTarget = OBJECTMGR->GetObject(pMainTarget->dwMainTargetID);
		if(ppObject)
			*ppObject = pTarget;
		if(pTarget == NULL)
			return FALSE;
		pTarget->GetPosition(pRtPos);
#endif
		return TRUE;
	}
}

void SetVector3(VECTOR3* vec,float x,float y,float z)
{
	vec->x = x;
	vec->y = y;
	vec->z = z;
}

#ifdef _MHCLIENT_
void VRand(VECTOR3* pResult,VECTOR3* pOriginPos,VECTOR3* pRandom)
{
	int temp;
	temp = (int)pRandom->x;
	pResult->x = temp ? pOriginPos->x + (rand() % (2*temp)) - temp : pOriginPos->x;
	temp = (int)pRandom->y;
	pResult->y = temp ? pOriginPos->y + (rand() % (2*temp)) - temp : pOriginPos->y;
	temp = (int)pRandom->z;
	pResult->z = temp ? pOriginPos->z + (rand() % (2*temp)) - temp : pOriginPos->z;
}

void TransToRelatedCoordinate(VECTOR3* pResult,VECTOR3* pOriginPos,float fAngleRadY)
{
	if(pResult == pOriginPos)
	{
		VECTOR3 tempOri = *pOriginPos;
		pOriginPos = &tempOri;
	}
	static BOOL bb = FALSE;
	if(bb == FALSE)
	{
		MATRIX4 my;
		SetRotationYMatrix(&my,-fAngleRadY);
		
		TransformVector3_VPTR2(pResult,pOriginPos,&my,1);
	}
	else
	{
		RotateVectorAxisY(pResult,pOriginPos,fAngleRadY);
	}
}

void RotateVectorAxisX(VECTOR3* pResult,VECTOR3* pOriginVector,float fAngleRadX)
{
	if(fAngleRadX  == 0)
	{
		*pResult = *pOriginVector;
	}
	else
	{
		MATRIX4 mx;
		SetRotationXMatrix(&mx,-fAngleRadX);
		
		TransformVector3_VPTR2(pResult,pOriginVector,&mx,1);
	}
}

void RotateVectorAxisZ(VECTOR3* pResult,VECTOR3* pOriginVector,float fAngleRadZ)
{
	if(fAngleRadZ  == 0)
	{
		*pResult = *pOriginVector;
	}
	else
	{
		pResult->x = pOriginVector->x*cosf(fAngleRadZ) - pOriginVector->y*sinf(fAngleRadZ);
		pResult->y = pOriginVector->x*sinf(fAngleRadZ) + pOriginVector->y*cosf(fAngleRadZ);
		pResult->z = pOriginVector->z;
	}
}

void RotateVector( VECTOR3* pResult, VECTOR3* pOriginVector, float x, float y, float z )
{
	RotateVectorAxisX( pResult, pOriginVector, x );
	RotateVectorAxisY( pResult, pResult, y );
	RotateVectorAxisZ( pResult, pResult, z );
}

void RotateVector( VECTOR3* pResult, VECTOR3* pOriginVector, VECTOR3 vRot )
{
	RotateVectorAxisX( pResult, pOriginVector, vRot.x );
	RotateVectorAxisY( pResult, pResult, vRot.y );
	RotateVectorAxisZ( pResult, pResult, vRot.z );
}

#endif


void RotateVectorAxisY(VECTOR3* pResult,VECTOR3* pOriginVector,float fAngleRadY)
{
	if(fAngleRadY == 0)
	{
		*pResult = *pOriginVector;
	}
	else
	{
		pResult->x = pOriginVector->x*cosf(fAngleRadY) - pOriginVector->z*sinf(fAngleRadY);
		pResult->y = pOriginVector->y;
		pResult->z = pOriginVector->x*sinf(fAngleRadY) + pOriginVector->z*cosf(fAngleRadY);
	}
}

void BeelinePoint(VECTOR3 * origin, VECTOR3 * dir, float dist, VECTOR3 * result)
{
/*
	float m = dir->x / dir->z;
	result->x = origin->x + dist*cosf(m);
	result->z = origin->z + dist*sinf(m);
*/
//KES
	float rrr = sqrt( dir->x*dir->x + dir->z*dir->z );
	result->x = origin->x + dir->x * dist / rrr;
	result->z = origin->z + dir->z * dist / rrr;
}
void AdjacentPointForOriginPoint(VECTOR3 * origin, VECTOR3 * target, float dist, VECTOR3 * result)
{
	float rrr = CalcDistanceXZ(origin,target);

	if(rrr < dist)
	{
		result->x = target->x;
		result->z = target->z;
		return;
	}

//KES
	result->x = origin->x + ( target->x - origin->x ) * dist / rrr;
	result->z = origin->z + ( target->z - origin->z ) * dist / rrr;

/*
	float m = (origin->x - target->x)/(origin->z - target->z);
	// taiyo 2004/5/18 : origin->x + , origin->z+
	result->x = origin->x + dist*cosf(m);
	result->z = origin->z + dist*sinf(m);
*/
}
float CalcDistanceXZ(VECTOR3* v1,VECTOR3* v2)
{
//	float x = v1->x - v2->x;
//	float z = v1->z - v2->z;
//	return sqrtf(x*x + z*z);
	return sqrtf( (v1->x - v2->x)*(v1->x - v2->x) + (v1->z - v2->z)*(v1->z - v2->z) );
}

BOOL IsSameDay(char* strDay,WORD Year,WORD Month,WORD Day)
{
	//ex) 2002.02.08
	char temp[64];
	sprintf(temp,"%d.%02d.%02d",Year,Month,Day);
	return strcmp(strDay,temp) == 0;
}



#endif	//_MURIMNET_


#ifdef _MHCLIENT_
extern DWORD gUserID;
void SendAssertMsg(char* pStrFileName,int Line,char* pMsg)
{
	//////////////////////////////////////////////////////////////////////////
	// 皋技瘤 冠胶
	if(g_bAssertMsgBox)
	{
		wsprintf(_g_AssertErrorMessage, "ASSERT() file:%s,line:%d (%s) do you debug?", pStrFileName, Line, pMsg);
		if(IDYES == MessageBox(NULL, _g_AssertErrorMessage, NULL, MB_YESNO|MB_TOPMOST))
			__asm int 3;
		return;
	}
	//////////////////////////////////////////////////////////////////////////

	char temp[256];
	if(pMsg)
		sprintf(temp,"%s\t%d\t%s",pStrFileName,Line,pMsg);
	else
		sprintf(temp,"%s\t%d",pStrFileName,Line);
		
	MSG_ASSERT msg;
	msg.SetMsg(gUserID,gHeroID,temp);
	NETWORK->Send(&msg,sizeof(msg));
}

#endif

void WriteAssertMsg(char* pStrFileName,int Line,char* pMsg)
{
	//////////////////////////////////////////////////////////////////////////
	// 皋技瘤 冠胶
	if(g_bAssertMsgBox)
	{
		wsprintf(_g_AssertErrorMessage, "ASSERT() file:%s,line:%d (%s) do you debug?", pStrFileName, Line, pMsg);
		if(IDYES == MessageBox(NULL, _g_AssertErrorMessage, NULL, MB_YESNO|MB_TOPMOST))
			__asm int 3;
		return;
	}
	//////////////////////////////////////////////////////////////////////////

	char temp[256];
	if(pMsg)
		sprintf(temp,"[%s] %s line:%d, msg:%s, ",g_szHeroIDName ,pStrFileName,Line,pMsg);
	else
		sprintf(temp,"[%s] %s line:%d, ",g_szHeroIDName ,pStrFileName,Line);
	
	FILE* fp = fopen("Assert.txt","a+");
	if(fp)
	{
		fprintf(fp,"%stime:%s\n",temp,GetCurTimeToString());
		fclose(fp);
	}
}

void CriticalAssertMsg(char* pStrFileName,int Line,char* pMsg)
{
	wsprintf(_g_AssertErrorMessage, "ASSERT() file:%s,line:%d (%s) do you debug?", pStrFileName, Line, pMsg);
	if(IDYES == MessageBox(NULL, _g_AssertErrorMessage, NULL, MB_YESNO|MB_TOPMOST))
		__asm int 3;
	return;
}


void SafeStrCpy( char* pDest, const char* pSrc, int nDestBufSize )
{
	strncpy( pDest, pSrc, nDestBufSize -1 );
	pDest[nDestBufSize -1] = 0;
}


void SafeStrCpyEmptyChange( char* pDest, const char* pSrc, int nDestBufSize )
{
	// Hard.. Hard.. Temp.. 抄吝俊 蜡楷窍霸 官操档废 窍磊.. せせせ
	// char b, char a   b->a 肺 牢磊肺 罐酒辑 官操档废..
	char tmp[256] = { 0, };
	strncpy(tmp, pSrc, nDestBufSize-1);

	for(int i=0; i<256; i++)
	{
		if(tmp[i] == '_')		pDest[i] = ' ';
		else					pDest[i] = tmp[i];		
	}

	pDest[nDestBufSize-1] = 0;
}

char* GetCurTimeToString()
{
	static char temp[256];
	SYSTEMTIME ti;
	GetLocalTime(&ti);
	sprintf(temp,"%d岿/%d老 %d矫%d盒%d.%d檬",		// 岿/老 矫:盒:檬
		ti.wMonth,ti.wDay,
		ti.wHour,ti.wMinute,ti.wSecond,ti.wMilliseconds);
	return temp;
}

DWORD GetCurTimeValue()
{
	char temp2[256];

	SYSTEMTIME ti;
	GetLocalTime(&ti);
	sprintf(temp2,"%d%02d%02d",ti.wYear,ti.wMonth,ti.wDay);
	DWORD v2 = atoi(temp2);

	return v2;
}

BOOL CheckValidPosition(VECTOR3& pos)
{
	if(pos.x < 0 || pos.z < 0)
		return FALSE;
	if(pos.x >= 51200 || pos.z >= 51200)
		return FALSE;
	return TRUE;
}


float roughGetLength( float fDistX,float fDistY )
{
	if( fDistX < 0.0f ) fDistX = -fDistX;
	if( fDistY < 0.0f ) fDistY = -fDistY;
	
	int min = ( fDistX > fDistY ) ? fDistY : fDistX;

	return ( fDistX + fDistY - ( min >> 1 ) - ( min >> 2 ) + ( min >> 4 ) );
}

//////////////////////////////////////////////////////////////////////////
// Effect锅龋甫 颇老捞抚栏肺 茫扁 困茄 何盒
map<string,DWORD> g_fileTable;

void LoadEffectFileTable(char* pListFileName)
{
#ifdef _MHCLIENT_
	CMHFile file;
	file.Init(pListFileName,"rb",MHFILE_FLAG_DONOTCHANGE_DIRECTORY_TOROOT);

	DWORD MaxEffectDesc = file.GetDword();
	
	DWORD effnum;
	char efffile[256];
	for(DWORD n=0;n<MaxEffectDesc;++n)
	{
		//ASSERT(!pFile->IsEOF());

		effnum = file.GetDword();
		file.GetString(efffile);
		strupr(efffile);
		if(strcmp(efffile,"NULL") == 0)
			continue;
		
		g_fileTable.insert(map<string,DWORD>::value_type(efffile,effnum));
	}	

	file.Release();
#endif
}

int FindEffectNum(char* pFileName)
{
#ifdef _MHCLIENT_
	if(pFileName[0] == '0' && pFileName[1] == 0)
		return 0;

	static char tempbuf[64];
	strcpy(tempbuf,pFileName);
	map<string,DWORD>::iterator iter;
	iter = g_fileTable.find(strupr(tempbuf));
	if(iter == g_fileTable.end())
	{
//		ASSERTMSG(0,pFileName);
		return -1;
	}
	else
		return iter->second;
#else
	return 0;
#endif
}

void ERRORBSGBOX(char* str,...)
{
	char msg2[255];
	va_list argList;

	va_start(argList, str);
	vsprintf(msg2,str,argList);
	va_end(argList);

	MessageBox(NULL,msg2,NULL,NULL);
	
}

⌨️ 快捷键说明

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