Files
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

797 lines
20 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "StdAfx.h"
#include "../base/Container.hpp"
CPkSystem::CPkSystem()
{
m_SubNext = (UINT)(GetGlobalLogicEngine()->getMiniDateTime() + GetLogicServer()->GetDataProvider()->GetPkConfig().pkSubTime);
m_boCanPked = false;
}
CPkSystem::~CPkSystem()
{
}
bool CPkSystem::Initialize(void *data,SIZE_T size)
{
return true;
}
VOID CPkSystem::OnTimeCheck(TICKCOUNT nTickCount)
{
if (!m_pEntity || m_pEntity->GetType() != enActor)
{
return;
}
UINT nNow = GetGlobalLogicEngine()->getMiniDateTime();
if ( nNow > m_SubNext && !m_pEntity->HasState(esStateDeath))
{
AddPkValue(-1);
m_SubNext = nNow + (UINT)(GetLogicServer()->GetDataProvider()->GetPkConfig().pkSubTime);
}
}
void CPkSystem::ProcessNetData(INT_PTR nCmd,CDataPacketReader &packet )
{
if (!m_pEntity) return;
switch (nCmd)
{
case cInviteMatch:
{
break;
}
case cInviteResult:
{
break;
}
case cSetFreePkMode:
{
SetFreePkMode(packet);
break;
}
case cOnFriendIntercede:
{
DoFriendIntercede(packet);
break;
}
case cIntercedeMineral:
{
CNpc* pNpc = GetGlobalLogicEngine()->GetGlobalNpc();
if (pNpc == NULL) return;
CScriptValueList paramList, retParamList;
paramList << m_pEntity;
pNpc->GetScript().Call("IntercedeMineral",paramList,retParamList );
break;
}
default:
break;
}
}
void CPkSystem::DoFriendIntercede(CDataPacketReader &reader )
{
if (!m_pEntity)
return;
CCLVariant& pVarMgr = m_pEntity->GetActorVar();
CCLVariant* pVar1 = pVarMgr.get(szIntercedeCount);
int nIntercedeCount = 0;
if( pVar1 != NULL )
{
nIntercedeCount = (int)(double)*pVar1;
}
CPkProvider& provider = GetLogicServer()->GetDataProvider()->GetPkConfig();
if(provider.m_nCountPkValue <= nIntercedeCount)
{
return m_pEntity->SendOldTipmsgWithId(TpPK00012,ttFlyTip);
}
int nActorId = 0;
reader >> nActorId;
CActor *pActor = GetGlobalLogicEngine()->GetEntityMgr()->GetEntityPtrByActorID(nActorId);
if(pActor == NULL)
{
return m_pEntity->SendOldTipmsgWithId(tpActorOffline,ttFlyTip);
}
const char* pActorName = pActor->GetEntityName();
const char* pMyName = m_pEntity->GetEntityName();
UINT nCurrPk = pActor->GetProperty<UINT>(PROP_ACTOR_PK_VALUE);
pActor->SetProperty(PROP_ACTOR_PK_VALUE,nCurrPk - provider.m_nSubPkValue);
pVarMgr.set(szIntercedeCount, nIntercedeCount+1);
m_pEntity->SendOldTipmsgFormatWithId(TpPK00009,ttFlyTip,pActorName,provider.m_nSubPkValue);
pActor->SendOldTipmsgFormatWithId(TpPK00010,ttFlyTip,pMyName,provider.m_nSubPkValue);
pActor->SendOldTipmsgFormatWithId(TpPK00011,ttChatWindow,provider.m_nSubPkValue);
CScriptValueList paramList;
}
void CPkSystem::SetFreePkMode( CDataPacketReader& reader )
{
if (!m_pEntity)
return;
//如果是强制pk模式则不能修改
int nPosX,nPosY;
CScene* pScene = m_pEntity->GetScene();
m_pEntity->GetPosition(nPosX,nPosY);
if (pScene)
{
SCENEAREA* pArea = pScene->GetAreaAttri(nPosX, nPosY);
if (pArea && pScene->HasMapAttribute(nPosX,nPosY,aaForbidSetpkMode,pArea))
{
return ;
}
}
BYTE bMode = 0;
reader >> bMode;
SetPkMode(bMode);
}
bool CPkSystem::_CanAttack( CActor* pActor, CAnimal *pPet, bool boAttackNotice)
{
//m_pEntity是攻击方
bool result = true;
if (!m_pEntity || !pActor || m_pEntity == pActor) return false;
//除切磋之外. 要判断场景能否pk,双方都要处于非安全区域才能pk否则不能pk(比武擂台除外)
int x,y;
CScene* pScene = m_pEntity->GetScene();
m_pEntity->GetPosition(x,y);
//注意:当攻击对方为新手保护期,其他玩家攻击时优先系统提示:对方新手保护,无法攻击
if (pScene && pScene->HasMapAttribute(x,y,aaNewPlayerProtect))
{
if (m_pEntity->GetBuffSystem()->Exists(aNewPlayerProtect))
{
m_pEntity->SendOldTipmsgWithId(tpNewPlayerProtectSelf, ttFlyTip);
return false;
}
if (pActor->GetBuffSystem()->Exists(aNewPlayerProtect))
{
m_pEntity->SendOldTipmsgWithId(tpNewPlayerProtectOther, ttFlyTip);
return false;
}
}
UINT myLevel = m_pEntity->GetProperty<UINT>(PROP_CREATURE_LEVEL);
UINT otherLevel = pActor->GetProperty<UINT>(PROP_CREATURE_LEVEL);
//INT_PTR startPkLevel = GetLogicServer()->GetDataProvider()->GetPkConfig().canPkStartLevel;
//INT_PTR endPkLevel = GetLogicServer()->GetDataProvider()->GetPkConfig().canPkEndLevel;//终极杀戮等级:) 默认可以给人打
//如果自己或者对方等级低于startPkLevel都绝对不能攻击
///if (!pScene->HasMapAttribute(x,y,aaNotLevelProtect))
//{
// if(myLevel < (UINT)startPkLevel)
// {
// m_pEntity->SendOldTipmsgWithId(tpNewPlayerProtectSelf, ttFlyTip);
// return false;
// }
// if(otherLevel < (UINT)startPkLevel)
// {
// m_pEntity->SendOldTipmsgWithId(tpNewPlayerProtectOther, ttFlyTip);
// return false;
// }
//}
if (pScene && pScene->HasMapAttribute(x,y,aaSaft))
{
m_pEntity->SendOldTipmsgWithId(tpSafeAreaKill, ttFlyTip);
return false;
}
if (pPet && pPet->GetType()==enPet)
{
pScene = pPet->GetScene();
pPet->GetPosition(x,y);
}
else
{
pScene = pActor->GetScene();
pActor->GetPosition(x,y);
}
if (pScene && pScene->HasMapAttribute(x,y,aaSaft))
{
m_pEntity->SendOldTipmsgWithId(tpSafeAreaKill, ttFlyTip);
return false;
}
INT_PTR nPkMode = m_pEntity->GetProperty<int>(PROP_ACTOR_PK_MOD);
//如果我是和平模式,无论如何都不能攻击
if (nPkMode == fpPeaceful)
{
if (boAttackNotice && m_pEntity->GetTarget() == pActor->GetHandle())
{
SendPkModeStr();
}
return false;
}
//如果他有保护buff我打不到他他也不能攻击别人因为他肯定是和平模式
if (pActor->GetPkSystem().IsProtected())
{
return false;
}
//沙巴克战的行会模式不攻击联盟行会的
CGuildSystem* gs = m_pEntity->GetGuildSystem();
CGuildSystem* otherGs = pActor->GetGuildSystem();
if (!(gs->IsFree()) && !(otherGs->IsFree()))
{
if (nPkMode == fpGuild && GetGlobalLogicEngine()->GetGuildMgr().IsGuildSiegeStart() && gs->GetGuildPtr()->GetRelationShipForId(otherGs->GetGuildPtr()->m_nGid) == 1)
{
return false;
}
}
//如果杀戮值大于300且没有保护buff任何人非和平模式都可以打他
if (pActor->GetProperty<UINT>(PROP_ACTOR_PK_VALUE) >= (UINT)GetLogicServer()->GetDataProvider()->GetPkConfig().redName)
{
result = true;
goto CANATTACK;
}
//如果大于40级且没有保护buff任何人非和平模式都可以打他
//if (otherLevel >= (UINT)endPkLevel)
//{
result = true;
// goto CANATTACK;
//}
//战场模式,暂无
//end 战场
//if (otherLevel >= (UINT)startPkLevel && otherLevel < (UINT)endPkLevel)
//{
//其他等级下如果是和平模式则不可以被PK
if (pActor->GetProperty<int>(PROP_ACTOR_PK_MOD) == fpPeaceful) return false;
//}
CANATTACK:
if (result)
{
//还要判断你的模式
result = CanAttackByMode(pActor);
if (result)
{
DeleteProtectBuff();//清掉其保护buff
}
}
return result;
}
bool CPkSystem::IsUnLimited(CEntity* pEntity)
{
if (!m_pEntity) return false;
int x,y;
CScene* pScene = m_pEntity->GetScene();
if(!pScene) return false;
// 自己在安全区,受限制
m_pEntity->GetPosition(x,y);
if (pScene->HasMapAttribute(x,y,aaSaft))
{
//m_pEntity->SendTipmsgWithId(tpSafeAreaKill, ttFlyTip);
((CActor*)m_pEntity)->SendTipmsg(_T("你在安全区中,不能攻击"),tstFigthing);
return false;
}
// 对方在安全区,受限制
pEntity->GetPosition(x,y);
if (pScene->HasMapAttribute(x,y,aaSaft))
{
((CActor*)m_pEntity)->SendTipmsg(_T("对方在安全区中,不能攻击"),tstFigthing);
return false;
}
// 对方有PK保护受限制
if(((CAnimal*)pEntity)->GetBuffSystem()->Exists(aPkProtectState))
{
((CActor*)m_pEntity)->SendTipmsg(_T("对方在PK保护中不能攻击"),tstFigthing);
return false;
}
return true;
}
bool CPkSystem::CanAttack(CActor* pActor, CAnimal * pPet, bool)
{
if (!m_pEntity) return false;
INT_PTR nPkMode = m_pEntity->GetProperty<int>(PROP_ACTOR_PK_MOD);
switch (nPkMode)
{
case fpPeaceful:
if (pActor->IsBadMan())
{
return true;
}
return false;
case fpTeam:
{
UINT teamId = m_pEntity->GetProperty<UINT>(PROP_ACTOR_TEAM_ID);
UINT otherTeamId = pActor->GetProperty<UINT>(PROP_ACTOR_TEAM_ID);
if (teamId && teamId == otherTeamId)
{
return false;
}
return m_pEntity != pActor;
}
case fpGuild:
{
UINT guildid = m_pEntity->GetProperty<UINT>(PROP_ACTOR_GUILD_ID);
UINT otherguildid = pActor->GetProperty<UINT>(PROP_ACTOR_GUILD_ID);
if (guildid && guildid == otherguildid)
{
return false;
}
return m_pEntity != pActor;
}
case fpPk:
if (pPet && pPet->GetType() == enPet)
{
return true;
}
return m_pEntity != pActor;
case fpZY:
{
if( GetZyType(pActor) == ztSameZY )
{
SendPkModeStr();
return false;
}
return true;
}
case fpEvil:
{
UINT teamId = m_pEntity->GetProperty<UINT>(PROP_ACTOR_TEAM_ID);
UINT otherTeamId = pActor->GetProperty<UINT>(PROP_ACTOR_TEAM_ID);
if (teamId && teamId == otherTeamId)
{
return false;
}
UINT guildid = m_pEntity->GetProperty<UINT>(PROP_ACTOR_GUILD_ID);
UINT otherguildid = pActor->GetProperty<UINT>(PROP_ACTOR_GUILD_ID);
if (guildid && guildid == otherguildid)
{
return false;
}
}
break;
default:
return false;
}
// 在战争区域
int x,y;
CScene* pScene = m_pEntity->GetScene();
m_pEntity->GetPosition(x,y);
if (pScene && pScene->HasMapAttribute(x,y,aaZY))
{
return true;
}
// 善恶
if (pActor->IsBadMan())
{
return true;
}
return false;
}
void CPkSystem::OnEndPk( CActor* pActor )
{
if (!m_pEntity || !pActor) return;
//计算哪方胜利
CActor* pWin = m_pEntity;
CActor* pLost = pActor;
if(pLost == pWin) return;
if ( pWin->GetProperty<UINT>(PROP_CREATURE_HP) < pLost->GetProperty<UINT>(PROP_CREATURE_HP))
{
pWin = pActor;
pLost = m_pEntity;
}
//比武擂台不计算PK值
int x,y;
//CScene* pScene = pLost->GetScene();
pLost->GetPosition(x,y);
//如果是帮派战,记录帮派的击杀人数
CGuild* pMyGuild = pWin->GetGuildSystem()->GetGuildPtr();
CGuild* pOtherGuild = pLost->GetGuildSystem()->GetGuildPtr();
if (pMyGuild && pOtherGuild)
{
// 行会PK
if( pMyGuild->GetRelationShipInWar(pOtherGuild->m_nGid) == GUILD_WARSHIP_YES ) //宣战关系不加PK值
{
pMyGuild->AddPkCount(pOtherGuild->m_nGid); //失败方同时加上死亡数目
pOtherGuild->AddDieCount(pMyGuild->m_nGid);
return;
}
}
//沙巴克战时
if(pWin->GetSceneAreaFlag() == scfGuildSiege && GetGlobalLogicEngine()->GetGuildMgr().IsGuildSiegeStart())
{
return;
}
//褐名或红名
if(pLost->GetNameColorData() > 1)
{
return;
}
/*
//新增沙巴克老大不加pk值
unsigned int nSbkMasterId = GetGlobalLogicEngine()->GetGuildMgr().GetCityOwnMasterId();
if (nSbkMasterId > 0 && pActor->GetId() == nSbkMasterId)
{
return;
}
*/
//本人是沙巴克成员,击杀者不犯法
/*unsigned int nGuildid= m_pEntity->GetProperty<unsigned int>(PROP_ACTOR_GUILD_ID);
unsigned int nKillGuildId = pActor->GetProperty<unsigned int>(PROP_ACTOR_GUILD_ID);
unsigned int nSbkGuildId = GetGlobalLogicEngine()->GetGuildMgr().GetCityOwnGuildId();
if ( nSbkGuildId > 0 && nSbkGuildId == nGuildid && nKillGuildId != nGuildid )
{
return;
}*/
/*被杀者是击杀者的仇人击杀者不加PK值同时删除被杀者不再是击杀者的仇人
此处是在最后抵销一次
*/
// if ( pWin->GetFriendSystem().GetSocialFlag(pLost->GetId(),SOCIAL_ANIMAL) )
// {
// //pWin->GetFriendSystem().DoAddSocialRelation(RELATION_OP_ENIMY, 1, pLost->GetId(), NULL); //通知击杀者删除仇人
// return;
// }
CPkProvider& provider = GetLogicServer()->GetDataProvider()->GetPkConfig();
int nPk = provider.m_pkValue;
pActor->GetPkSystem().AddPkValue(nPk, m_pEntity);
/* 取消队伍 修改为只个人获得 2011-10-10
//如果是个人pk则个人获取战魂值否则是队伍获取
CTeam* pTeam = pWin->GetTeam();
if (pTeam)
{
//团队的的每个人都可以获得战魂
const TEAMMEMBER* pMember= pTeam->GetMemberList();
for(INT_PTR i=0; i< MAX_TEAM_MEMBER_COUNT; i++)
{
if(pMember[i].pActor && (pMember[i].pActor == pWin || pWin->IsInSameScreen(pMember[i].pActor) ))
{
pMember[i].pActor->GetPkSystem().GetZhanHun(pLost);
}
}
}else
{
pWin->GetPkSystem().GetZhanHun(pLost);
}
*/
}
/*实际增加PK值
*/
void CPkSystem::AddPkValue( INT_PTR nValue, CActor * pKilledActor )
{
//OutputMsg(rmNormal, "CPkSystem::AddPkValue: nValue=%d", nValue);
if (!m_pEntity) return;
CScene * pScene = m_pEntity->GetScene();
if(!pScene) return;
CPkProvider& provider = GetLogicServer()->GetDataProvider()->GetPkConfig();
int x,y;
m_pEntity->GetPosition(x,y);
if (nValue > 0)
{
SCENEAREA* pArea = pScene->GetAreaAttri(x,y);
if(!pArea) return;
//战斗区域不修改pk
if (pScene->HasMapAttribute(x,y,aaWar,pArea)) return;
//阵营战争区域不修改pk
if (pScene->HasMapAttribute(x,y,aaZY,pArea)) return;
}
if (pKilledActor)
{
pKilledActor->GetPosition(x,y);
{
SCENEAREA* pArea = pScene->GetAreaAttri(x,y);
if(!pArea) return;
//战斗区域不修改pk
if (pScene->HasMapAttribute(x,y,aaWar,pArea)) return;
//阵营战争区域不修改pk
if (pScene->HasMapAttribute(x,y,aaZY,pArea)) return;
}
}
nValue = nValue + m_pEntity->GetProperty<int>(PROP_ACTOR_PK_VALUE);
if (nValue < 0) nValue = 0;
m_pEntity->SetProperty<UINT>(PROP_ACTOR_PK_VALUE,(UINT)nValue);
if (nValue > 0)//定期减少的不提示
{
m_pEntity->SendOldTipmsgFormatWithId(tpPkChange,ttTipmsgWindow,nValue);
}
}
bool CPkSystem::IsProtected()
{
if (m_pEntity)
{
if(m_pEntity->GetBuffSystem()->Exists(aPkProtectState))
{
return true;
}
}
return false;
}
void CPkSystem::DeleteProtectBuff()
{
//删除pk保护的buff
if (m_pEntity)
{
CBuffSystem *pSystem = m_pEntity->GetBuffSystem();
pSystem->Remove(aPkProtectState,CDynamicBuff::AnyBuffGroup);
if (pSystem->Exists(aNewPlayerProtect,CDynamicBuff::AnyBuffGroup))
{
m_pEntity->GetBuffSystem()->Remove(aNewPlayerProtect,CDynamicBuff::AnyBuffGroup);
m_pEntity->SendOldTipmsgWithId(tpNewPlayerProtectDel, ttFlyTip);
}
}
}
void CPkSystem::SetPkMode( int mode,bool boForce,bool bNeedBroadCast)
{
if (!m_pEntity || mode >= fpCount || mode < fpPeaceful) return;
if (mode != fpPeaceful)
{
DeleteProtectBuff();//设置成非和平模式删除保护buff
}
m_bLastMode = m_pEntity->GetProperty<int>(PROP_ACTOR_PK_MOD);//保存之前的模式
//auto var(m_pEntity->GetDynamicVar());
//var.set("lastPkMode", m_bLastMode);
//如果pk模式没有改变的话是不需要广播的
if(m_bLastMode ==mode)
{
return;
}
m_pEntity->SetProperty<int>(PROP_ACTOR_PK_MOD,mode);
if(m_pEntity->IsInited()
&& !((CActor*)m_pEntity)->OnGetIsTestSimulator()
&& !((CActor*)m_pEntity)->OnGetIsSimulator())
{
CActorPacket AP;
CDataPacket& DataPacket = m_pEntity->AllocPacket(AP);
DataPacket << (BYTE)enPkSystemID << (BYTE)sSetFreePkMode << (BYTE)mode;
AP.flush();
m_pEntity->SendTipmsgFormatWithId(tmPKMod_1 + mode - 1,tstFigthing);
}
//如果不需要广播就不广播,在进入游戏的时候是不需要广播的
if(bNeedBroadCast)
{
UpdateNameClr_OnPkModeChanged(m_pEntity->GetHandle());
}
}
int CPkSystem::GetPkMode()
{
if (!m_pEntity) return 0;
return m_pEntity->GetProperty<int>(PROP_ACTOR_PK_MOD);
}
void CPkSystem::SendPkModeStr()
{
int nTipId = 0;
switch(GetPkMode())
{
case fpPeaceful:
nTipId = 0;
break;
/*case fpTeam:
nTipId = tpPkModeTeam;
break;
*/case fpGuild:
nTipId = 0;
break;
case fpEvil:
nTipId = 0;
break;
case fpPk:
nTipId = 0;
break;
/*case fpZY:
nTipId = tpPkModeCamp;
break;*/
default:
break;
}
if (nTipId != 0)
{
m_pEntity->SendOldTipmsgWithId(nTipId, ttFlyTip);
}
}
void CPkSystem::OnEnterGame()
{
if(!m_pEntity)
{
return;
}
m_pEntity->SetProperty<UINT>(PROP_ACTOR_EVIL_PK_STATUS,0);
//进入游戏的时候设置pk模式是不需要广播的
SetPkMode(m_pEntity->GetProperty<int>(PROP_ACTOR_PK_MOD),true,false);
// 这里强制下发Pk。在某些会改变PK模式的区域上线进入场景会更新PK模式然后进入游戏再次
// 设置相同的PK模式会导致不会下发给客户端。而之前发送数据包的时候客户端还没有创建角色
// 导致客户端PK模式更新不正确的bug
if (((CActor*)m_pEntity)->OnGetIsTestSimulator()
|| ((CActor*)m_pEntity)->OnGetIsSimulator())
{
return;
}
CActorPacket AP;
CDataPacket& DataPacket = m_pEntity->AllocPacket(AP);
DataPacket << (BYTE)enPkSystemID << (BYTE)sSetFreePkMode;
DataPacket << (BYTE)m_pEntity->GetProperty<int>(PROP_ACTOR_PK_MOD);
AP.flush();
}
/*根据行会模式,判断能否攻击对方
队友,任何情况下都不能攻击
*/
bool CPkSystem::CanAttackByMode( CActor* pActor )
{
if (!m_pEntity) return false;
bool result = true;
//策划说任何情况同一队伍的都不可以打
UINT teamId = m_pEntity->GetProperty<UINT>(PROP_ACTOR_TEAM_ID);
UINT otherTeamId = pActor->GetProperty<UINT>(PROP_ACTOR_TEAM_ID);
if (teamId != 0 && teamId == otherTeamId)
{
result = false;
SendPkModeStr();
return result;
}
INT_PTR nPkMode = m_pEntity->GetProperty<int>(PROP_ACTOR_PK_MOD);
switch(nPkMode)
{
case fpPeaceful:
{
result = false;
SendPkModeStr();
break;
}
case fpGuild: //行会模式(仅同行会)
{
UINT guildid = m_pEntity->GetProperty<UINT>(PROP_ACTOR_GUILD_ID);
UINT otherguildid = pActor->GetProperty<UINT>(PROP_ACTOR_GUILD_ID);
if (guildid != 0 && guildid == otherguildid)
{
result = false;
SendPkModeStr();
}
break;
}
case fpZY:
{
if( GetZyType(pActor) == ztSameZY )
{
result = false;
SendPkModeStr();
}
break;
}
case fpPk:
{
result = true;
break;
}
case fpUnion: //联盟(组队、行会、联盟都算)
{
//result = false;
/*如果是结盟阵营,不能攻击
CCamp* pCamp = m_pEntity->GetCamp();
CCamp* pTargetCamp = pActor->GetCamp();
if (pCamp == pTargetCamp || pCamp->IsCampAllied(pTargetCamp))
result = false;
else
result = true;
break;
*/
CGuild* pMyGuild = ((CActor*)m_pEntity)->GetGuildSystem()->GetGuildPtr();
CGuild* pObjGuild = pActor->GetGuildSystem()->GetGuildPtr();
if( pMyGuild && pObjGuild )
{
//同行会或者行会联盟
if( pMyGuild == pObjGuild || pMyGuild->GetRelationShipForId( pObjGuild->GetGuildId() ) == GUILD_RELATION_UNION )
{
return false;
}
}
break;
}
case fpEvil:
{
//为红名的就可以攻击
if(pActor->GetNameColorData() > 1)
{
result = true;
}
else
{
result = false;
SendPkModeStr();
}
break;
}
}
return result;
}
INT_PTR CPkSystem::GetZyType( CActor* pActor )
{
if (!m_pEntity || !pActor) return ztSameZY;
UINT myCamp = m_pEntity->GetProperty<unsigned int>(PROP_ACTOR_ZY);
UINT otherCamp = pActor->GetProperty<unsigned int>(PROP_ACTOR_ZY);
if (myCamp > 0 && otherCamp > 0)
{
if(myCamp != otherCamp)
return ztEnemyZY;
else
return ztSameZY;
}
return ztNeutralZY;
}
void CPkSystem::EnterPK(CActor* pEntity)
{
if (!m_pEntity) return;
if(pEntity->GetType() == enActor)
{
SendPkToClient();
m_pEntity->SendOldTipmsgWithId(tpEnterPK,ttFlyTip);
pEntity->SendOldTipmsgWithId(tpEnterPK,ttFlyTip);
}
else
{
m_pEntity->SendOldTipmsgWithId(tpEnterF,ttFlyTip);
}
}
void CPkSystem::SendPkToClient()
{
if (!m_pEntity)
{
return;
}
if (((CActor*)m_pEntity)->OnGetIsTestSimulator()
|| ((CActor*)m_pEntity)->OnGetIsSimulator() )
{
return;
}
//B 原处于 非战斗状态, A 攻击 B 令其进入 战斗状态时, 才会弹出 打他丫滴! 窗口。
CActorPacket AP;
CDataPacket& DataPacket = m_pEntity->AllocPacket(AP);
DataPacket << (BYTE)enPkSystemID << (BYTE)sKillHe;
DataPacket.writeString("");
AP.flush();
}