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

📄 heromove.cpp

📁 墨香最新私服
💻 CPP
字号:
// HeroMove.cpp: implementation of the CHeroMove class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#ifdef _CHEATENABLE_
#include "CheatMsgParser.h"
#endif	//_CHEATENABLE_
#include "HeroMove.h"
#include "SkillManager_Client.h"
#include "MoveManager.h"
#include "ObjectManager.h"
#include "ChatDialog.h"
#include "GameIn.h"
#include "MousePointer.h"
//#include "WindowIdEnum.h"
//#include "interface\cWindowManager.h"
//#include "./Interface/cListDialog.h"
#include "Interface/cEditBox.h"

#include "GameResourceManager.h"
#include "ExchangeManager.h"
//#include "cMsgBox.h"
#include "chatmanager.h"
#include "NpcScriptManager.h"

#include "BattleSystem_Client.h"

#include "Input/UserInput.h"
#include "MouseCursor.h"
#include "Interface/cWindowManager.h"
#include "PartyManager.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CHeroMove::CHeroMove()
{

}

CHeroMove::~CHeroMove()
{

}

void CHeroMove::OnMouseOver( CObject* pObject )
{
	if( !pObject )	return;
	OBJECTMGR->OnMouseOver( pObject );
	
	if( HERO )
	{
		CBattle* pBattle = BATTLESYSTEM->GetBattle( HERO );
		if( pBattle->IsEnemy( HERO, pObject ) )
			CURSOR->SetCursor( eCURSOR_ATTACK );
		else
		{
			if( pObject->GetObjectKind() == eObjectKind_Npc )
			{
				if( ((CNpc*)pObject)->GetNpcKind() != 30 && ((CNpc*)pObject)->GetNpcKind() != 31 )
				CURSOR->SetCursor( eCURSOR_DEALER );
			}
			else
				CURSOR->SetCursor( eCURSOR_DEFAULT );
		}			
	}
}

void CHeroMove::OnMouseLeave( CObject* pObject )
{
	if( !pObject )	return;
	OBJECTMGR->OnMouseLeave( pObject );
}

void CHeroMove::OnClickPlayer(DWORD MouseEvent,CPlayer* pPlayer)
{
	if(HEROID == pPlayer->GetID()) return;

//庇富酒捞叼 殿废
	if( g_UserInput.GetKeyboard()->GetKeyPressed( KEY_MENU ) )
	if( GAMEIN->GetChatDialog() )
	{
		static char str[MAX_NAME_LENGTH+3];
		wsprintf( str, "/%s ", pPlayer->GetObjectName() );
		GAMEIN->GetChatDialog()->GetChatEditBox()->SetEditText( str );
		GAMEIN->GetChatDialog()->GetChatEditBox()->SetFocusEdit( TRUE );
		return;
	}

	OnAttack( pPlayer, MouseEvent );

/*
	CBattle* pBattle = BATTLESYSTEM->GetBattle( HERO );
	
	if( pBattle->GetBattleKind() == eBATTLE_KIND_NONE )
	{
		if( g_keyboard.GetKeyPressed( KEY_CONTROL ) )
		{
//			OnAttack( pPlayer, MouseEvent );
		}
		else
		{
			if( MouseEvent & MOUSEEVENT_LCLICK )
				OBJECTMGR->SetSelectedObject( pPlayer );
		}
	}
	//KES VIMU 031020 巩颇傈, 厚公吝老 锭
	else if( pBattle->GetBattleState() == eBATTLE_STATE_FIGHT )
	{
		if( pBattle->IsEnemy( HERO, pPlayer ) )
		{
			OnAttack( pPlayer, MouseEvent );
		}
		else
		{
			if( MouseEvent & MOUSEEVENT_LCLICK )
				OBJECTMGR->SetSelectedObject( pPlayer );
		}
	}
*/
}

void CHeroMove::OnClickMonster(DWORD MouseEvent,CMonster* pMonster)
{
#ifdef _TESTCLIENT_
	if(KEYBOARD->GetKeyPressed(KEY_CONTROL))
	{
		if(MouseEvent & MOUSEEVENT_LCLICK)
		{
			TARGETSET Target;
			Target.pTarget = pMonster;
			memset(&Target.ResultInfo,0,sizeof(RESULTINFO));
			Target.ResultInfo.bCritical = rand()%2 ? TRUE : FALSE;
			Target.ResultInfo.RealDamage = rand() % 50;
			Target.ResultInfo.ShieldDamage = rand() % 30;
			Target.ResultInfo.CounterDamage = 0;
			//Target.TargetData = rand() % 100;
			EFFECTMGR->StartEffectProcess(GAMERESRCMNGR->m_TestClientInfo.Effect,HERO,&Target,1,pMonster->GetID(),EFFECT_FLAG_HEROATTACK);
		}
		else if(MouseEvent == MOUSEEVENT_RCLICK)
		{
			TARGETSET Target;
			Target.pTarget = HERO;
			memset(&Target.ResultInfo,0,sizeof(RESULTINFO));
			Target.ResultInfo.bCritical = rand()%2 ? TRUE : FALSE;
			Target.ResultInfo.RealDamage = rand() % 50;
			Target.ResultInfo.ShieldDamage = rand() % 30;
			Target.ResultInfo.CounterDamage = 0;
			//Target.TargetData = rand() % 100;
			//Target.TargetData = 30;
			EFFECTMGR->StartEffectProcess(GAMERESRCMNGR->m_TestClientInfo.MonsterEffect,pMonster,&Target,1,HERO->GetID(),EFFECT_FLAG_HEROATTACK);
		}
		return;
	}
	else
	{
		CActionTarget Target;
		Target.InitActionTarget(pMonster,NULL);
		BOOL bMugong = FALSE;
		if(MouseEvent & MOUSEEVENT_RCLICK)
		{
			bMugong = TRUE;
			SKILLMGR->OnSkillCommand(HERO, &Target, bMugong);
		}
	}
#endif

	OnAttack( pMonster, MouseEvent );
}

void CHeroMove::OnClickNpc(DWORD MouseEvent, CNpc* pNpc)
{
	if( HERO->GetState() != eObjectState_None &&
		HERO->GetState() != eObjectState_Move &&
		HERO->GetState() != eObjectState_Immortal )
		return;

	if( BATTLESYSTEM->GetBattle(HERO)->GetBattleKind() != eBATTLE_KIND_NONE )	//厚公吝
		return;

	if( MouseEvent & MOUSEEVENT_LCLICK )
	{
		if( OBJECTMGR->GetSelectedObjectID() == pNpc->GetID() )
		{
//			float dist = MOVEMGR->CalcDistanceXZ(pNpc,HERO);
//			if(dist > NPC_TALKING_DISTANCE)
//			{
				CActionTarget Target;
				Target.InitActionTarget( pNpc, NULL );

				CAction MoveAction;
				MoveAction.InitAction( eActionKind_TalkToNpc, NULL, NPC_TALKING_DISTANCE, &Target );
				MOVEMGR->SetHeroActionMove( &Target, &MoveAction );
//			}
/*
			else
			{
				switch( pNpc->GetNpcKind() )
				{
				case 31:
					{
						char buf[32] = {0,};
						int nLen = strlen( pNpc->GetObjectName() ) - 6; //"啊绰辨"力寇
						strncpy( buf, pNpc->GetObjectName(), nLen );
						buf[nLen] = 0;

						cMsgBox* pBox = WINDOWMGR->MsgBox( MBI_MAPCHANGE, MBT_YESNO, CHATMGR->GetChatMsg(360), buf );

						if( pBox )
						{
							pBox->SetParam( pNpc->GetID() );							
							MOVEMGR->HeroMoveStop();
							HERO->SetState(eObjectState_Deal);
						}
					}
					break;
				case 30:
					{
						cMsgBox* pBox = WINDOWMGR->MsgBox( MBI_SELECTLOGINPOINT, MBT_YESNO, CHATMGR->GetChatMsg(361), pNpc->GetObjectName() );
						if( pBox )
						{
							pBox->SetParam( pNpc->GetID() );
							MOVEMGR->HeroMoveStop();
							HERO->SetState(eObjectState_Deal);
						}
					}
					break;
				default:
					{
						NPCSCRIPTMGR->StartNpcScript( pNpc );
						MOVEMGR->HeroMoveStop();
						HERO->SetState(eObjectState_Deal);
					}
					break;
				}

				pNpc->OnClicked();
			}
*/
		}
//		else			
//		{
//			OBJECTMGR->SetSelectedObject( pNpc );
//		}
	}
}

void CHeroMove::OnClickSkillObject(DWORD MouseEvent,CSkillObject* pObj)
{
	OnAttack( pObj, MouseEvent );
}

void CHeroMove::OnClickGround(DWORD MouseEvent,VECTOR3* pPos)
{

#ifdef _TESTCLIENT_

	if(KEYBOARD->GetKeyPressed(KEY_MENU) && KEYBOARD->GetKeyPressed(KEY_SPACE))
	{
		VECTOR3 pos;
		pos.x = pPos->x;
		pos.y = 0;
		pos.z = pPos->z;
		MOVEMGR->SetPosition(HERO,&pos);
	}
	else
	{
		if( MouseEvent & MOUSEEVENT_LCLICK )
			MOVEMGR->SetHeroTarget(pPos);
		else
			MOVEMGR->SetHeroTarget(pPos,FALSE);

		HERO->DisableAutoAttack();
	}
#else

#ifdef _CHEATENABLE_
	if(KEYBOARD->GetKeyPressed(KEY_MENU) && KEYBOARD->GetKeyPressed(KEY_SPACE))
	{
#ifndef _GMTOOL_
		if( CHEATMGR->IsCheatEnable() )	
#endif
		{
			MOVE_POS msg;
			msg.Category = MP_CHEAT;
			msg.Protocol = MP_CHEAT_MOVE_SYN;
			msg.dwObjectID = HEROID;
			msg.dwMoverID = HEROID;
			msg.cpos.Compress(pPos);
			NETWORK->Send(&msg,sizeof(msg));
		}
	}
	else
#endif	//_CHEATENABLE_
	{
		if(HERO)
		{
			if( MouseEvent & MOUSEEVENT_LCLICK )
				MOVEMGR->SetHeroTarget(pPos);
			else
				MOVEMGR->SetHeroTarget(pPos,FALSE);

			HERO->DisableAutoAttack();
			HERO->SetMovingAction(NULL);
		}
	}

#endif	//_TESTCLIENT_

}

#define ATTACK_TICK	400

void CHeroMove::OnAttack(CObject* pTargetObj,DWORD MouseEvent)
{	
	static CObject* pLastObj		= NULL;
	static DWORD	dwAttackTime	= 0;
	
	if( HERO && pTargetObj )
	{
		if( HERO->GetCharacterTotalInfo()->bVisible )	//救焊老锭绰 傍拜捞 救登档废 荐沥 //KES
		{
			if( pLastObj != pTargetObj || gCurTime - dwAttackTime > ATTACK_TICK )
			{
				if( MouseEvent & MOUSEEVENT_LCLICK )
				{
					if( OBJECTMGR->GetSelectedObjectID() == pTargetObj->GetID() )
					{
						if( HERO->IsPKMode() )
						if( PARTYMGR->IsPartyMember( pTargetObj->GetID() ) )						
						{ //裹困傍拜栏肺 颇萍盔阑 傍拜且锭绰 皋技瘤 绝霸 窍扁 困秦
							CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(630) );
							return;
						}
						
						CActionTarget Target;
						Target.InitActionTarget(pTargetObj,NULL);
						
						HERO->EnableAutoAttack(&Target);		
						SKILLMGR->OnSkillCommand(HERO, &Target, FALSE);	
						pLastObj		= pTargetObj;
						dwAttackTime	= gCurTime;
					}
				}
				else if( MouseEvent & MOUSEEVENT_DBLCLICK )
				{
					if( HERO->IsPKMode() )
					if( PARTYMGR->IsPartyMember( pTargetObj->GetID() ) )						
					{ //裹困傍拜栏肺 颇萍盔阑 傍拜且锭绰 皋技瘤 绝霸 窍扁 困秦
						CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(630) );
						return;
					}
					CActionTarget Target;
					Target.InitActionTarget(pTargetObj,NULL);
					
					HERO->EnableAutoAttack(&Target);		
					SKILLMGR->OnSkillCommand(HERO, &Target, FALSE);	
					pLastObj		= pTargetObj;
					dwAttackTime	= gCurTime;
				}
			}
		}
	}
}

// LBS 畴痢惑 包访 03.09.30
void CHeroMove::OnDbClickPlayer(DWORD MouseEvent,CPlayer* pPlayer)
{
	if( HERO->GetState() != eObjectState_None &&
		HERO->GetState() != eObjectState_Move &&
		HERO->GetState() != eObjectState_Immortal )
		return;

	if( OBJECTMGR->GetSelectedObjectID() )
	{
		if( OBJECTMGR->GetSelectedObjectID() == pPlayer->GetID() )
		{
			//畴痢惑老 版快俊父 皋技瘤甫 焊郴磊.
			if( pPlayer->GetState() == eObjectState_StreetStall_Owner )
			{
				CActionTarget Target;
				Target.InitActionTarget( pPlayer, NULL );

				CAction MoveAction;
				MoveAction.InitStallAction( STREETSTALL_ENTER_DISTANCE, &Target );
				MOVEMGR->SetHeroActionMove( &Target, &MoveAction );
			}
			else
			{
				OnAttack( pPlayer, MOUSEEVENT_DBLCLICK );
			}
		}
	}
}

void CHeroMove::OnDbClickMonster(DWORD MouseEvent,CMonster* pMonster)
{
	OnAttack( pMonster, MouseEvent );
}

void CHeroMove::OnDbClickNpc(DWORD MouseEvent, CNpc* pNpc)
{
	if( HERO->GetState() != eObjectState_None &&
		HERO->GetState() != eObjectState_Move &&
		HERO->GetState() != eObjectState_Immortal )
		return;
	
	CActionTarget Target;
	Target.InitActionTarget( pNpc, NULL );
				
	CAction MoveAction;
	MoveAction.InitAction( eActionKind_TalkToNpc, NULL, NPC_TALKING_DISTANCE, &Target );
	MOVEMGR->SetHeroActionMove( &Target, &MoveAction );
}

void CHeroMove::AttackSelectedObject()
{
	CObject* pTargetObj = OBJECTMGR->GetSelectedObject();
	if( !pTargetObj ) return;

	OnAttack(pTargetObj,MOUSEEVENT_LCLICK);
}

// LBS 03.10.09
void CHeroMove::SelectLoginPoint( WORD LoginPointIndex )
{
	MSG_DWORD msg;
	msg.Category = MP_USERCONN;
	msg.Protocol = MP_USERCONN_SAVEPOINT_SYN;
	msg.dwObjectID = HEROID;
	msg.dwData = LoginPointIndex;
				
	NETWORK->Send(&msg, sizeof(msg));

	CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(161) );
}


void CHeroMove::MapChange( WORD MapIndex )
{
	MSG_DWORD msg;
	msg.Category = MP_USERCONN;
	msg.Protocol = MP_USERCONN_CHANGEMAP_SYN;
	msg.dwObjectID = HEROID;
	msg.dwData = MapIndex;
	
	NETWORK->Send(&msg, sizeof(msg));	
	
	g_UserInput.SetInputFocus(FALSE);
}

⌨️ 快捷键说明

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