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

📄 dummyobjmng.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// DummyObjMng.cpp: implementation of the CDummyObjMng class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DummyObjMng.h"
#include "MoveMng.h"

#include "Console.h"

extern DWORD g_MapChangeCount;

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GLOBALTON(CDummyObjMng)

CDummyObjMng::CDummyObjMng()
{
	m_dwHeroID = 0;
	m_nObjectNum = 0;

	memset( &m_HeroTotalInfo, 0, sizeof(SEND_HERO_TOTALINFO) );
	m_pHeroBaseObjInfo = &m_HeroTotalInfo.BaseObjectInfo;
	m_pHeroChrTotalInfo = &m_HeroTotalInfo.ChrTotalInfo;
	m_pHeroTotalInfo = &m_HeroTotalInfo.HeroTotalInfo;
	m_pSendMoveInfo = &m_HeroTotalInfo.SendMoveInfo;	
//	m_pHeroMugongTotalInfo = &m_HeroTotalInfo.MugongTotalInfo;
//	m_pItemTotalInfo = &m_HeroTotalInfo.ItemTotalInfo;
//	m_pHeroBaseMoveInfo = &m_HeroTotalInfo.BaseMoveInfo;
	memset( &m_HeroMoveInfo, 0, sizeof(MOVE_INFO) );
	m_DummyObjState = eDUMMYOBJSTATE_Alive;

	memset( &m_MapDesc, 0, sizeof(MAPDESC) );
	m_dwCurMapNum = m_dwToMap = m_dwToMapNum = 0;

	m_dwActionStartTime = 0;
	m_dwActionEstimateTime = 10000;

	m_fMoveSpeed = RUNSPEED;

	memset( m_sChat, 0, 256 );	

	m_bPeace = TRUE;
	m_bUngi = FALSE;
	m_bRun = TRUE;
	m_bMapChange = FALSE;
	m_bLogin = FALSE;
	m_bHunt = FALSE;
	m_bRevive = FALSE;
	m_bMustUngi = FALSE;
	m_bFirstMove = FALSE;
	m_bForcedToMapChange = TRUE;

	m_nMoveFlag = 1;

	m_nSkillNum = 7;

	m_nHuntCount = 0;
	m_nMaxHuntCount = 0;

	//
	m_bEnableMapChange = FALSE;
	m_bEnableAttack = FALSE;
	m_bEnableChat = FALSE;

	m_bFollow = FALSE;


}

CDummyObjMng::~CDummyObjMng()
{
}

void CDummyObjMng::Init( int id, CDummyNetwork* pNetwork )
{
	m_nID = id;
	m_pNetwork = pNetwork;
}

void CDummyObjMng::Exit()
{
}

void CDummyObjMng::Process()
{	
	int action = SelectAction();
	
	if( action != -1 ) ExeAction( action );
}

int CDummyObjMng::GetObjectNum()
{
	int objnum = -1;
	if( m_nObjectNum )
		objnum = rand()%m_nObjectNum;

	return objnum;
}

void CDummyObjMng::SetMapNum( DWORD mapnum )
{ 
	m_dwCurMapNum = mapnum;
	m_MapDesc = RESMNG->GetMapDesc( mapnum );
	m_nMoveFlag = 1;
//	m_vOldPosition = m_MapDesc.vMovePoint[0];

	m_nMaxHuntCount = rand()%30 + 10;
	m_nHuntCount = 0;

	m_dwActionEstimateTime = 0;
	m_dwActionStartTime = 0;

	m_bFirstMove = TRUE;
}

void CDummyObjMng::SetHeroTotalInfo( SEND_HERO_TOTALINFO info )
{
	m_HeroTotalInfo = info;
//	m_HeroTotalInfo.BaseMoveInfo.CurTargetPositionIdx = 0;
//	m_HeroTotalInfo.BaseMoveInfo.MaxTargetPositionIdx = 0;
//	m_HeroTotalInfo.BaseMoveInfo.TargetPositions[0] = m_MapDesc.vMovePoint[0];
//	m_vOldPosition = m_HeroTotalInfo.BaseMoveInfo.TargetPositions[0];

	m_HeroMoveInfo.InitTargetPosition();
	VECTOR3 pos;
	pos.x = m_HeroTotalInfo.SendMoveInfo.CurPos.wx;
	pos.y = 0;
	pos.z = m_HeroTotalInfo.SendMoveInfo.CurPos.wz;

	m_HeroMoveInfo.CurPosition = pos;
	m_HeroMoveInfo.TargetPositions[0] = m_MapDesc.vMovePoint[0];
	m_vOldPosition = m_HeroMoveInfo.TargetPositions[0];

	m_nMoveFlag = 1;
	m_bFirstMove = TRUE;

	m_dwHeroID = m_HeroTotalInfo.BaseObjectInfo.dwObjectID;
}	

void CDummyObjMng::SetDummyObjStateDie( DWORD id )
{
	if( m_HeroTotalInfo.BaseObjectInfo.dwObjectID == id )
	{
		m_DummyObjState = eDUMMYOBJSTATE_Die;
		ActionChatting( "卿! 磷菌促!!" );
	}
}

int CDummyObjMng::SelectAction()
{
	int action = -1;
	if( m_DummyObjState == eDUMMYOBJSTATE_Alive )
	{
		action = rand()%MAX_ACTION_NUM+1;
	}
	else if( m_DummyObjState == eDUMMYOBJSTATE_Die )
	{		
		m_bRevive = TRUE;
		m_bHunt = FALSE;
		m_bUngi = FALSE;
		m_bLogin = FALSE;
		m_dwActionEstimateTime = 10000;
//		ExeAction( eACTION_Revive );
		action = eACTION_Revive;
	}

	return action;
}

void CDummyObjMng::ExeAction( int action )
{
	DWORD curtime = GetTickCount();
	if( (curtime-m_dwActionStartTime) >= m_dwActionEstimateTime )
	{
		if( m_DummyObjState == eDUMMYOBJSTATE_Die )
		{
			ActionRevive();
			return;
		}
		
		if( m_bUngi ) action = eACTION_Ungi;
		if( m_bMapChange && m_bEnableMapChange )
		{
			ActionMapChange();
			return;
		}
		if( m_bHunt && m_bEnableAttack )
		{
			ActionSkill();
			return;
		}
		if( m_bLogin )
		{
			ActionSaveLogin();
			return;
		}

		if( MOVEMNG->GetMonsterNum() > 0 )
		{
			m_bFirstMove = FALSE;
		}

		if( m_bRevive )
			action = eACTION_Revive;

		if( m_bMustUngi )
			action = eACTION_Ungi;

		if( m_bFirstMove )
			action = 100;

//		if( m_bFollow )
//			action = eACTION_Hunt;
		
		switch( action )
		{
		case eACTION_Peace:
			ActionPeaceWarMode();
			break;

		case eACTION_Run:
			ActionRunMode();
			break;

		case eACTION_Ungi:
			ActionUngiMode();
			break;

		case eACTION_MapChange:
			if( m_bEnableMapChange )
				ActionMoveToMapchangePoint();
			break;

		case eACTION_SaveLogin:
			ActionMoveToLoginPoint();			
			break;

		case eACTION_Revive:
//			ActionRevive();
			break;

		case eACTION_Hunt:
			if( MOVEMNG->GetMonsterNum() > 0 )
			{
				if( m_bEnableAttack )
					ActionMoveToMonster();
			}
			break;		

		default:
			ActionMove();
			break;
		}

//		g_Console.Log( eLogDisplay, 4, "Dummy%d Action : %d - Current MapNum : %d", m_nID, action, m_dwCurMapNum );
	}
}

void CDummyObjMng::ActionPeaceWarMode()
{
	m_dwActionStartTime = GetTickCount();

	MSGBASE msg;
	msg.Category = MP_PEACEWARMODE;
	msg.dwObjectID = m_dwHeroID;
	if( m_bPeace )
	{
		msg.Protocol = MP_PEACEWARMODE_WAR;
		m_bPeace = FALSE;
		ActionChatting( "Fight!!" );
	}
	else
	{
		msg.Protocol = MP_PEACEWARMODE_PEACE;
		m_bPeace = TRUE;
		ActionChatting( "Peace!!" );
	}
	m_pNetwork->Send( &msg, sizeof(msg) );

	m_dwActionEstimateTime = 2000;
}

void CDummyObjMng::ActionRunMode()
{
	m_dwActionStartTime = GetTickCount();

	MSGBASE msg;
	msg.Category = MP_MOVE;
	msg.dwObjectID = m_dwHeroID;
	if( m_bRun )
	{
		msg.Protocol = MP_MOVE_WALKMODE;
		m_fMoveSpeed = WALKSPEED;
		m_bRun = FALSE;
		ActionChatting( "叭磊!!" );		
	}
	else
	{
		msg.Protocol = MP_MOVE_RUNMODE;
		m_fMoveSpeed = RUNSPEED;
		m_bRun = TRUE;
		ActionChatting( "顿磊!!" );		
	}
	m_pNetwork->Send( &msg, sizeof(msg) );	

	m_dwActionEstimateTime = 2000;
}

void CDummyObjMng::ActionUngiMode()
{
	m_dwActionStartTime = GetTickCount();

	MSGBASE msg;
	msg.Category = MP_UNGIJOSIK;
	msg.dwObjectID = m_dwHeroID;
	if( m_bUngi )
	{
		msg.Protocol = MP_UNGIJOSIK_END;
		m_bUngi = FALSE;
		m_dwActionEstimateTime = 2000;
		ActionChatting( "捞力 老绢唱具瘤!!" );
		m_bMustUngi = FALSE;		

		m_bFirstMove = TRUE;
		m_nMoveFlag = -1;
	}
	else
	{
		msg.Protocol = MP_UNGIJOSIK_START;		
		m_bUngi = TRUE;
		m_dwActionEstimateTime = 50000;
		ActionChatting( "款扁炼侥秦具蹬!!" );
		
	}
	m_pNetwork->Send( &msg, sizeof(msg) );	
}

void CDummyObjMng::ActionMapChange()
{
	m_dwActionStartTime = GetTickCount();

	MSG_DWORD msg;
	msg.Category = MP_USERCONN;
	msg.Protocol = MP_USERCONN_CHANGEMAP_SYN;
	msg.dwObjectID = m_dwHeroID;
	msg.dwData = m_dwToMap;
	m_pNetwork->Send( &msg, sizeof(msg) );

	m_bMapChange = FALSE;

	m_dwActionEstimateTime = 2000;	
}

void CDummyObjMng::ActionSaveLogin()
{
	m_dwActionStartTime = GetTickCount();

	MSG_DWORD msg;
	msg.Category = MP_USERCONN;
	msg.Protocol = MP_USERCONN_SAVEPOINT_SYN;
	msg.dwObjectID = m_dwHeroID;
	msg.dwData = m_MapDesc.nMapNum+2000;
				
	m_pNetwork->Send( &msg, sizeof(msg) );

	m_bLogin = FALSE;	

	m_dwActionEstimateTime = 3000;

	ActionChatting( "LoginPoint 历厘!!" );
}

void CDummyObjMng::ActionChatting( char* str )
{
	if( m_bEnableChat )
	{
		sprintf( m_sChat, str );
		
		TESTMSG data;
		data.Category = MP_CHAT;
		data.Protocol = MP_CHAT_ALL;
		data.dwObjectID	= m_dwHeroID;
		strcpy( data.Msg, m_sChat );
		
		m_pNetwork->Send( &data, sizeof(data) );
		
		memset( m_sChat, 0, 256 );
	}
}

void CDummyObjMng::CalMapChangePosition()
{
	int i = rand()%m_MapDesc.nMaxMapChange;
	m_dwToMap = m_MapDesc.MapChangePoint[i].nChangeNum;
	m_dwToMapNum = m_MapDesc.MapChangePoint[i].nToMapNum;
//	m_pHeroBaseMoveInfo->TargetPositions[0] = m_MapDesc.MapChangePoint[i].vMapChange;
	m_HeroMoveInfo.TargetPositions[0] = m_MapDesc.MapChangePoint[i].vMapChange;
	
	CalEstimateTime();
}

void CDummyObjMng::CalLoginPosition()
{
//	m_pHeroBaseMoveInfo->TargetPositions[0] = m_MapDesc.vLoginPoint;
	m_HeroMoveInfo.TargetPositions[0] = m_MapDesc.vLoginPoint;

	CalEstimateTime();
}

⌨️ 快捷键说明

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