📄 battle_murimfield.cpp
字号:
#include "stdafx.h"
#include "Battle_MurimField.h"
#include "BattleTeam_MurimField.h"
#include "../BattleObject.h"
#include "Object.h"
#include "Player.h"
#ifdef _MAPSERVER_ // mapserver
#include "UserTable.h"
#include "ServerTable.h"
#include "CharMove.h"
#include "ObjectStateManager.h"
#include "PackedData.h"
#else // client
#include "ChatManager.h"
#include "./interface/cWindowManager.h"
#include "./Interface/cScriptManager.h"
#include "ObjectManager.h"
//#include "TileManager.h"
//#include "MHMap.h"
#endif
#define BATTLE_MURIMFIELD_READYTIME 20000
#define BATTLE_MURIMFIELD_FIGHTTIME 100000
#define BATTLE_MURIMFIELD_RESULTTIME 30000
VECTOR3 team1Po,team2Po,team3Po;
CBattle_MurimField::CBattle_MurimField()
{
memset( &m_MurimBattleInfo, 0, sizeof(MURIMFIELD_BATTLE_INFO) );
m_BattleFlag = BATTLE_FLAG_LOGINBATTLE;
// 烙矫
SetVector3(&team1Po,23000,0,25000);
SetVector3(&team2Po,27000,0,25000);
SetVector3(&team3Po,25000,0,25000);
#ifndef _MAPSERVER_
m_pCurShowImage = NULL;
#endif
}
CBattle_MurimField::~CBattle_MurimField()
{
}
// 利,酒焙 备喊
BOOL CBattle_MurimField::IsEnemy( CObject* pOperator, CObject* pTarget )
{
if( m_BattleInfo.BattleState != eBATTLE_STATE_FIGHT )
return FALSE;
if( pOperator->GetBattleID() != pTarget->GetBattleID() )
return FALSE;
if( pOperator->GetBattleTeam() == pTarget->GetBattleTeam() )
return FALSE;
return TRUE;
}
BOOL CBattle_MurimField::IsFriend( CObject* pOperator, CObject* pTarget )
{
if( m_BattleInfo.BattleState != eBATTLE_STATE_FIGHT )
return FALSE;
if( pOperator->GetBattleID() != pTarget->GetBattleID() )
return FALSE;
if( pOperator->GetBattleTeam() != pTarget->GetBattleTeam() )
return FALSE;
return TRUE;
}
// event func
void CBattle_MurimField::OnCreate( BATTLE_INFO_BASE* pCreateInfo, CBattleTeam* pTeam1, CBattleTeam* pTeam2 )
{
CBattle::OnCreate( pCreateInfo, pTeam1, pTeam2 );
memcpy( &m_MurimBattleInfo, pCreateInfo, sizeof(MURIMFIELD_BATTLE_INFO) );
#ifndef _MAPSERVER_
m_ImageNumber.Init( 32, 0 );
m_ImageNumber.SetFillZero( TRUE );
m_ImageNumber.SetLimitCipher( 3 );
m_ImageNumber.SetPosition( 528 + 32, 70 );
SCRIPTMGR->GetImage( 59, &m_ImageReady, PFT_HARDPATH );
SCRIPTMGR->GetImage( 60, &m_ImageFight, PFT_HARDPATH );
SCRIPTMGR->GetImage( 61, &m_ImageWin, PFT_HARDPATH );
SCRIPTMGR->GetImage( 62, &m_ImageLose, PFT_HARDPATH );
SCRIPTMGR->GetImage( 76, &m_ImageDraw, PFT_HARDPATH );
m_pCurShowImage = &m_ImageReady;
m_vImagePos.x = (1024 - 128) / 2; //128 width
m_vImagePos.y = 32;
m_vImageScale.x = m_vImageScale.y = 1.0f;
#endif
}
void CBattle_MurimField::OnFightStart()
{
CBattle::OnFightStart();
#ifndef _MAPSERVER_
m_pCurShowImage = &m_ImageFight;
#endif
}
void CBattle_MurimField::OnDestroy()
{
}
void CBattle_MurimField::OnTeamMemberAdd( int Team, DWORD MemberID, char* Name )
{
#ifdef _MAPSERVER_
CObject* pObject = g_pUserTable->FindUser(MemberID);
ASSERT(pObject);
if(pObject->GetObjectKind() == eObjectKind_Player)
{
CPlayer* pPlayer = (CPlayer*)pObject;
if(Team == eBattleTeam1)
{
CCharMove::SetPosition(pPlayer,&team1Po);
}
else if( Team == eBattleTeam2 )
{
CCharMove::SetPosition(pPlayer,&team2Po);
}
else
{
CCharMove::SetPosition(pPlayer,&team3Po);
}
CCharMove::CorrectPlayerPosToServer(pPlayer);
}
#else
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(451), Name, Team );
#endif
CBattleTeam_MurimField* pTeam = GetTeam(Team);
MURIMFIELD_TEAMINFO* pTeamInfo = pTeam->GetTeamInfo();
BATTLE_TEAMMEMBER_INFO* pMemberInfo = pTeamInfo->FindMember(MemberID);
for(int n=0;n<MAX_MUNPAFIELD_MEMBERNUM;++n)
{
if(pTeamInfo->TeamMember[n].MemberID == MemberID)
{
pTeamInfo->TeamMember[n].set(MemberID,Name);
break;
}
}
}
BOOL CBattle_MurimField::OnTeamMemberDelete(int Team,DWORD MemberID,char* Name)
{
#ifdef _MHCLIENT_
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(452), Name, Team );
#endif
//////////////////////////////////////////////////////////////////////////
// 烙矫 抛胶飘侩
CBattleTeam_MurimField* pTeam = GetTeam(Team);
MURIMFIELD_TEAMINFO* pTeamInfo = pTeam->GetTeamInfo();
BATTLE_TEAMMEMBER_INFO* pMemberInfo = pTeamInfo->FindMember(MemberID);
ASSERT(pMemberInfo);
pMemberInfo->MemberID = 0;
//////////////////////////////////////////////////////////////////////////
return TRUE;
}
BOOL CBattle_MurimField::OnTeamMemberDie(int Team,DWORD VictimMemberID,DWORD KillerID)
{
ASSERT(Team < eBattleTeam_Max);
#ifdef _MAPSERVER_
CObject* pVictimMember = g_pUserTable->FindUser(VictimMemberID);
CObject* pKiller = g_pUserTable->FindUser(KillerID);
if(pVictimMember == NULL || pKiller == NULL)
{
ASSERT(0);
return FALSE;
}
ASSERT(pVictimMember->GetBattleID() == GetBattleID());
if(pKiller->GetBattleID() != GetBattleID())
return FALSE;
OBJECTSTATEMGR_OBJ->StartObjectState( pVictimMember, eObjectState_Die, pKiller->GetID() );
OBJECTSTATEMGR_OBJ->EndObjectState( pVictimMember, eObjectState_Die, PLAYERREVIVE_TIME );
MSG_DWORD3 msg;
SetProtocol(&msg,MP_BATTLE,MP_BATTLE_TEAMMEMBER_DIE_NOTIFY);
msg.dwData1 = Team;
msg.dwData2 = VictimMemberID;
msg.dwData3 = KillerID;
ToEachTeam(pTeam)
pTeam->SendTeamMsg(&msg,sizeof(msg));
EndToEachTeam
#endif
MURIMFIELD_TEAMINFO* pKillTeam = GetTeam(GetOtherTeamNum(Team))->GetTeamInfo();
MURIMFIELD_TEAMINFO* pDiedTeam = GetTeam(Team)->GetTeamInfo();
++pKillTeam->TotalKill;
++pDiedTeam->TotalDied;
BATTLE_TEAMMEMBER_INFO* pKillerInfo = pKillTeam->FindMember(KillerID);
BATTLE_TEAMMEMBER_INFO* pVictimInfo = pDiedTeam->FindMember(VictimMemberID);
ASSERT(pKillerInfo);
ASSERT(pVictimInfo);
++pKillerInfo->MemberKillNum;
++pVictimInfo->MemberDieNum;
return TRUE;
}
void CBattle_MurimField::OnTeamMemberRevive(int Team,CObject* pReviver)
{
#ifdef _MAPSERVER_
VECTOR3 pos;
if( Team == eBattleTeam1 )
pos = team1Po;
else if( Team == eBattleTeam2 )
pos = team2Po;
else
pos = team3Po;
MOVE_POS msg;
msg.Category = MP_USERCONN;
msg.Protocol = MP_USERCONN_CHARACTER_REVIVE;
msg.dwObjectID = pReviver->GetID();
msg.dwMoverID = pReviver->GetID();
msg.cpos.Compress(&pos);
CCharMove::SetPosition( pReviver, &pos );
DWORD MaxLife = pReviver->GetMaxLife();
DWORD MaxNaeryuk = pReviver->GetMaxNaeRyuk();
pReviver->SetLife((DWORD)(MaxLife));
pReviver->SetNaeRyuk((DWORD)(MaxNaeryuk));
ToEachTeam(pTeam)
pTeam->SendTeamMsg(&msg,sizeof(msg));
EndToEachTeam
#endif
}
void CBattle_MurimField::OnTeamObjectCreate(int Team,CBattleObject* pBattleObject)
{
}
void CBattle_MurimField::OnTeamObjectDestroy(int Team,CBattleObject* pBattleObject)
{
}
void CBattle_MurimField::OnTick()
{
ySWITCH(m_BattleInfo.BattleState)
yCASE(eBATTLE_STATE_READY)
DWORD ElapTime = gCurTime - m_BattleInfo.BattleTime;
if( ElapTime > BATTLE_MURIMFIELD_READYTIME )
{
for( int n = 0; n < eBattleTeam_Max; ++n )
{
if( m_TeamArray[n]->GetAliveTeamMemberNum() == 0 )
return;
}
StartBattle();
}
yCASE(eBATTLE_STATE_FIGHT)
Judge();
yCASE(eBATTLE_STATE_RESULT)
Result();
yENDSWITCH
}
BOOL CBattle_MurimField::Judge()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -