📄 battle_vimustreet.cpp
字号:
#include "stdafx.h"
#include "Battle_VimuStreet.h"
#include "BattleTeam_VimuStreet.h"
#include "Object.h"
#include "ObjectStateManager.h"
#include "WantedManager.h"
#include "PartyManager.h"
#include "Party.h"
#include "PKManager.h"
#ifdef _MAPSERVER_
#include "ObjectStateManager.h"
#include "UserTable.h"
#include "Player.h"
#include "PackedData.h"
#include "SkillManager_Server.h"
#else
#include "./interface/cWindowManager.h"
#include "./Interface/cScriptManager.h"
#include "ObjectManager.h"
#include "TileManager.h"
#include "MHMap.h"
#include "ChatManager.h"
#endif
CBattle_VimuStreet::CBattle_VimuStreet()
{
m_BattleFlag = BATTLE_FLAG_NONE;
#ifndef _MAPSERVER_
m_pCurShowImage = NULL;
#endif
}
CBattle_VimuStreet::~CBattle_VimuStreet()
{
}
void CBattle_VimuStreet::Initialize(BATTLE_INFO_BASE* pCreateInfo, CBattleTeam* pTeam1, CBattleTeam* pTeam2)
{
CBattle::Initialize(pCreateInfo,&m_Team[0],&m_Team[1]);
}
//////////////////////////////////////////////////////////////////////////
// { start virtual func ¹Ýµå½Ã ¿À¹ö¶óÀ̵ù ÇØ¾ßÇÔ
// Battle Á¤º¸ °ü·Ã
#ifdef _MAPSERVER_
void CBattle_VimuStreet::GetBattleInfo(char* pInfo,WORD* size)
{
BATTLE_INFO_VIMUSTREET* info = (BATTLE_INFO_VIMUSTREET*)pInfo;
memcpy(info,&m_VimuStreetInfo,sizeof(BATTLE_INFO_VIMUSTREET));
ToEachTeam(pTeam)
CBattleTeam_VimuStreet* pTeamVM = (CBattleTeam_VimuStreet*)pTeam;
info->Character[TeamNumber] = pTeamVM->GetCharacterID();
EndToEachTeam
*size = sizeof(BATTLE_INFO_VIMUSTREET);
}
/*
void CBattle_VimuStreet::GetBattleInfo(BATTLE_INFO_BASE*& pInfo,int& size)
{
pInfo = &m_VimuStreetInfo;
size = sizeof(BATTLE_INFO_BASE);
}
*/
#endif
// Àû,¾Æ±º ±¸º°
BOOL CBattle_VimuStreet::IsEnemy(CObject* pOperator,CObject* pTarget)
{
if( pOperator->GetObjectKind() == eObjectKind_Player )
{
if( pTarget->GetObjectKind() & eObjectKind_Monster ) // ¸ó½ºÅÍ´Â ÀûÀÌ´Ù
{
return TRUE;
}
else if( pTarget->GetObjectKind() == eObjectKind_Player ) //Ÿ°ÙÀÌ Ç÷¹À̾î Àϰæ¿ì
{
/////¿©±â Á¤¸®Çϰí!!!!!!!!!
/////ºñ¹«·Î Á×°í ´Ù½Ã µÇ»ì¾Æ ³¯¶§! ±×¶§ ºñ¹«·Î Á×¾ú´ÂÁö PK·Î Á×¾ú´ÂÁö È®ÀÎÇÒ°Í!
if( pOperator->GetBattleID() == pTarget->GetBattleID() &&
pOperator->GetBattleTeam() != pTarget->GetBattleTeam() &&
GetBattleState() == eBATTLE_STATE_FIGHT )
return TRUE; // º£Æ²¾ÆÀ̵𰡠°°°í ÆÀÀÌ ´Ù¸£´Ù¸é ÀûÀÌ´Ù. //ºñ¹«»ó Àû
#ifdef _MAPSERVER_
if( ((CPlayer*)pOperator)->GetPartyIdx() != 0 )
{
CParty* pParty = PARTYMGR->GetParty( ((CPlayer*)pOperator)->GetPartyIdx() );
if( pParty )
if( pParty->IsPartyMember( pTarget->GetID() ) )
{
return FALSE; //ÆÄƼ¿øÀº ÀûÀÌ ¾Æ´Ï´Ù.
}
}
if( PKMGR->IsPKAllow() )
if( WANTEDMGR->IsOwner((CPlayer*)pOperator, ((CPlayer*)pTarget)->GetWantedIdx()) == TRUE )
return TRUE; //ô»ì ´ë»óÀÚ´Â ÀûÀÌ´Ù.
#else
if( pOperator == HERO )
{
if( PARTYMGR->IsPartyMember( pTarget->GetID() ) )
{
// if( OBJECTMGR->GetSelectedObjectID() == pTarget->GetID() )
// { //¹üÀ§°ø°ÝÀ¸·Î ÆÄƼ¿øÀ» °ø°ÝÇÒ¶§´Â ¸Þ¼¼Áö ¾ø°Ô Çϱâ À§ÇØ
// CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(630) );
// }
return FALSE; //ÆÄƼ¿øÀº ÀûÀÌ ¾Æ´Ï´Ù.
}
if( PKMGR->IsPKAllow() )
if( WANTEDMGR->IsChrIDInList( pTarget->GetID() ) )
return TRUE; //ô»ì ´ë»óÀÚ´Â ÀûÀÌ´Ù.
}
#endif
if( PKMGR->IsPKAllow() )
{
if( ((CPlayer*)pOperator)->IsPKMode() )
{
if(pOperator == pTarget )
return FALSE;
else
return TRUE; //ÀÚ½ÅÀÌ PK¸ðµåÀ̸é ÀÚ½ÅÀ» »« ³ª¸ÓÁö´Â ÀûÀÌ´Ù.
}
if( ((CPlayer*)pTarget)->IsPKMode() )
return TRUE; //»ó´ë°¡ PK¸ðµåÀ̸é ÀûÀÌ´Ù.
}
return FALSE;
}
else if( pOperator->GetObjectKind() & eObjectKind_Monster )
{ // Operator °¡ ¸ó½ºÅÍÀϰæ¿ì //»ç½Ç ¿©±â °É¸± ÀÏÀÌ ¾ø´Ù. ¸ó½ºÅÍ´Â ºñ¹«¸¦ ¸øÇϹǷÎ
if( pTarget->GetObjectKind() & eObjectKind_Monster ) // ¸ó½ºÅÍ´Â ÀûÀÌ ¾Æ´Ô
return FALSE;
}
else if(pTarget->GetObjectKind() == eObjectKind_SkillObject)
{
return TRUE;
}
else //³ª¸ÓÁö´Â ÀûÀÌ ¾Æ´Ï´Ù.
{
return FALSE;
}
}
return TRUE;
}
BOOL CBattle_VimuStreet::IsFriend(CObject* pOperator,CObject* pTarget)
{
if(pOperator->GetBattleID() != pTarget->GetBattleID())
return FALSE;
if(pOperator->GetBattleTeam() != pTarget->GetBattleTeam())
return FALSE;
return TRUE;
}
// event func
void CBattle_VimuStreet::OnCreate(BATTLE_INFO_BASE* pCreateInfo, CBattleTeam* pTeam1, CBattleTeam* pTeam2)
{
CBattle::OnCreate(pCreateInfo,pTeam1,pTeam2);
memcpy(&m_VimuStreetInfo,pCreateInfo,sizeof(BATTLE_INFO_VIMUSTREET));
m_Team[0].SetCharacterID(m_VimuStreetInfo.Character[VIMUTEAM_BLUE]);
m_Team[1].SetCharacterID(m_VimuStreetInfo.Character[VIMUTEAM_RED]);
#ifndef _MAPSERVER_
m_ImageNumber.Init( 32, 0 );
m_ImageNumber.SetFillZero( FALSE );
m_ImageNumber.SetLimitCipher( 2 );
m_ImageNumber.SetPosition( 512 - 16, 80 );
m_ImageNumber.SetScale( 3.0f, 3.0f );
m_dwFadeOutStartTime = 0;
m_bFadeOut = FALSE;
// SCRIPTMGR->GetImage( 59, &m_ImageReady, PFT_HARDPATH );
SCRIPTMGR->GetImage( 60, &m_ImageStart, 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_vTitlePos.x = (1024 - 512) / 2; //128 width
m_vTitlePos.y = 32;
m_vTitleScale.x = 1.0f;
m_vTitleScale.y = 1.0f;
CTileManager* pTileManager = MAP->GetTileManager();
//ºñ¹«ÀåÀ» ¸¸µéÀÚ...
VECTOR3 vPos = m_VimuStreetInfo.vStgPos;
VECTOR3 vStgPos;
float fx, fz = vPos.z;
// RECT rc = { -100.0f, -50.0f, -50.0f, 0.0f };
float fAdd = -50.0f;
for( fx = vPos.x - 1000.0f ; fx <= vPos.x + 1000.0f + fAdd ; fx += 50.0f )//
{
vStgPos.x = fx;
vStgPos.z = fz - 1000.0f;
pTileManager->AddTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
vStgPos.z = fz + 1000.0f + fAdd;
pTileManager->AddTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
}
fx = vPos.x;
for( fz = vPos.z - 1000.0f ; fz <= vPos.z + 1000.0f + fAdd; fz += 50.0f )
{
vStgPos.x = fx - 1000.0f;
vStgPos.z = fz;
pTileManager->AddTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
vStgPos.x = fx + 1000.0f + fAdd;
vStgPos.z = fz;
pTileManager->AddTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
}
//---ÀÓ½Ã
fz = vPos.z;
for( fx = vPos.x - 1050.0f ; fx <= vPos.x + 1050.0f + fAdd ; fx += 50.0f )//
{
vStgPos.x = fx;
vStgPos.z = fz - 1050.0f;
pTileManager->AddTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
vStgPos.z = fz + 1050.0f + fAdd;
pTileManager->AddTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
}
fx = vPos.x;
for( fz = vPos.z - 1050.0f ; fz <= vPos.z + 1050.0f + fAdd ; fz += 50.0f )
{
vStgPos.x = fx - 1050.0f;
vStgPos.z = fz;
pTileManager->AddTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
vStgPos.x = fx + 1050.0f + fAdd;
vStgPos.z = fz;
pTileManager->AddTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
}
//------------------
//°Å¸®¾È¿¡ ÀÖ³ª? ¾øÀ¸¸é? confirm
CPlayer* pPlayer1 = (CPlayer*)OBJECTMGR->GetObject( m_VimuStreetInfo.Character[0] );
CPlayer* pPlayer2 = (CPlayer*)OBJECTMGR->GetObject( m_VimuStreetInfo.Character[1] );
if( pPlayer1 )
if( pPlayer1->GetState() == eObjectState_BattleReady )
OBJECTSTATEMGR->EndObjectState(pPlayer1, eObjectState_BattleReady );
if( pPlayer2 )
if( pPlayer2->GetState() == eObjectState_BattleReady )
OBJECTSTATEMGR->EndObjectState(pPlayer2, eObjectState_BattleReady );
#else
m_bDieByOp = FALSE;
CPlayer* pPlayer1 = (CPlayer*)g_pUserTable->FindUser(m_VimuStreetInfo.Character[0]);
CPlayer* pPlayer2 = (CPlayer*)g_pUserTable->FindUser(m_VimuStreetInfo.Character[1]);
if( pPlayer1 )
if( pPlayer1->GetState() == eObjectState_BattleReady )
OBJECTSTATEMGR_OBJ->EndObjectState(pPlayer1, eObjectState_BattleReady);
if( pPlayer2 )
if( pPlayer2->GetState() == eObjectState_BattleReady )
OBJECTSTATEMGR_OBJ->EndObjectState(pPlayer2, eObjectState_BattleReady);
#endif
//°¢Á¾ ó¸®....
//-ÀÌÆåÆ®¸¦ ó¸®ÇÑ´Ù.
//-ÄÁÆ®·Ñ ´©¸£Áö ¾Ê°íµµ »ó´ë¸¦ °ø°Ý°¡´ÉÇϵµ·Ï ÇÑ´Ù.
//-´Ù¸¥ ij¸¯ÅÍÀÇ PK¸¦ ¸·´Â´Ù.
}
void CBattle_VimuStreet::OnFightStart()
{
CBattle::OnFightStart();
#ifndef _MAPSERVER_
m_pCurShowImage = &m_ImageStart;
m_ImageNumber.SetFillZero( TRUE );
m_ImageNumber.SetFadeOut( 0 ); //fadeout off
m_ImageNumber.SetScale( 1.0f, 1.0f );
m_ImageNumber.SetPosition( 512 + 32, 130 );
#endif
}
void CBattle_VimuStreet::OnDestroy()
{
#ifndef _MAPSERVER_
CTileManager* pTileManager = MAP->GetTileManager();
//ºñ¹«ÀåÀ» ÇØÃ¼
VECTOR3 vPos = m_VimuStreetInfo.vStgPos;
VECTOR3 vStgPos;
float fx, fz = vPos.z;
float fAdd = -50.0f;
for( fx = vPos.x - 1000.0f ; fx <= vPos.x + 1000.0f + fAdd ; fx += 50.0f )
{
vStgPos.x = fx;
vStgPos.z = fz - 1000.0f;
pTileManager->RemoveTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
vStgPos.z = fz + 1000.0f + fAdd;
pTileManager->RemoveTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
}
fx = vPos.x;
for( fz = vPos.z - 1000.0f ; fz <= vPos.z + 1000.0f + fAdd ; fz += 50.0f )
{
vStgPos.x = fx - 1000.0f;
vStgPos.z = fz;
pTileManager->RemoveTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
vStgPos.x = fx + 1000.0f + fAdd;
vStgPos.z = fz;
pTileManager->RemoveTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
}
//---ÀÓ½Ã
fz = vPos.z;
for( fx = vPos.x - 1050.0f ; fx <= vPos.x + 1050.0f + fAdd ; fx += 50.0f )//
{
vStgPos.x = fx;
vStgPos.z = fz - 1050.0f;
pTileManager->RemoveTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
vStgPos.z = fz + 1050.00f + fAdd;
pTileManager->RemoveTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
}
fx = vPos.x;
for( fz = vPos.z - 1050.0f ; fz <= vPos.z + 1050.0f + fAdd; fz += 50.0f )
{
vStgPos.x = fx - 1050.0f;
vStgPos.z = fz;
pTileManager->RemoveTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
vStgPos.x = fx + 1050.0f + fAdd;
vStgPos.z = fz;
pTileManager->RemoveTileAttrByAreaData( NULL, &vStgPos, SKILLAREA_ATTR_BLOCK );
}
//------------------
#else
CPlayer* pPlayer1 = (CPlayer*)g_pUserTable->FindUser(m_VimuStreetInfo.Character[0]);
CPlayer* pPlayer2 = (CPlayer*)g_pUserTable->FindUser(m_VimuStreetInfo.Character[1]);
if( pPlayer1 )
{
pPlayer1->SetBattleID(pPlayer1->GetGridID());
pPlayer1->SetVimuing( FALSE );
if( pPlayer1->GetState() == eObjectState_Die && m_bDieByOp )
{
pPlayer1->ReviveAfterVimu();
m_bDieByOp = FALSE;
}
}
if( pPlayer2 )
{
pPlayer2->SetBattleID(pPlayer2->GetGridID());
pPlayer2->SetVimuing( FALSE );
if( pPlayer2->GetState() == eObjectState_Die && m_bDieByOp )
{
pPlayer2->ReviveAfterVimu();
m_bDieByOp = FALSE;
}
}
#endif
CBattle::OnDestroy();
}
void CBattle_VimuStreet::OnTeamMemberAdd( int Team, DWORD MemberID, char* Name )
{
#ifdef _MAPSERVER_
/*
if( Team == eBattleTeam1 )
{
CObject* pObject = g_pUserTable->FindUser(MemberID);
ASSERT(pObject);
MSG_BATTLE_VIMU_CREATESTAGE msg;
msg.Category = MP_BATTLE;
msg.Protocol = MP_BATTLE_VIMU_CREATESTAGE;
msg.dwObjectID = pObject->GetID();
msg.dwBattleID = pObject->GetBattleID();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -