📄 commongamefunc.cpp
字号:
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 + -