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