📄 heromove.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 + -