Files
mir_server/server/LogicServer/entitysystem/CombatSystem.cpp
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

1154 lines
33 KiB
C++

#include "StdAfx.h"
#include "CombatSystem.h"
#include "../base/Container.hpp"
CCombatSystem::CCombatSystem()
{
m_nJobType = 0;
m_nMaxRankLevel = 0;
m_nLastRankLevel = 0;
m_nCurrentRankLevel = 0;
m_nCombatScore = 0;
m_nChallengeCount = 0;
m_nPickCount = 0;
m_nClearTime = 0;
m_bCdFlag = false;
m_nSelectedIndex[0] = 0;
m_bPickSwitch = true;
m_bSaveInfoFlag = false;
m_bSaveLogFlag = false;
}
bool CCombatSystem::Initialize(void *data,SIZE_T size)
{
// PACTORDBDATA pActorData = (ACTORDBDATA *)data;
// if(pActorData ==NULL || size != sizeof(ACTORDBDATA))
// {
// //OutputMsg(rmWaning,_T("创建角色的数据长度错误,帮派系统初始化失败"));
// return false;
// }
return true;
}
void CCombatSystem::OnDbRetData(INT_PTR nCmd,INT_PTR nErrorCode,CDataPacketReader &reader)
{
// if(m_pEntity ==NULL) return;
// switch(nCmd)
// {
// case jxInterSrvComm::DbServerProto::dcLoadCmobatGameInfo:
// {
// if (nErrorCode == jxInterSrvComm::DbServerProto::reSucc)
// {
// LoadCombatInfoFromDbResult(reader);
// }
// break;
// }
// case jxInterSrvComm::DbServerProto::dcLoadCombatRecord:
// {
// if (nErrorCode == jxInterSrvComm::DbServerProto::reSucc)
// {
// LoadCombatRecordFromDbResult(reader);
// }
// break;
// }
// default:
// {
// break;
// }
// }
}
void CCombatSystem::Save(PACTORDBDATA pData)
{
// if (m_pEntity == NULL ) return;
// if(m_bSaveInfoFlag)
// {
// m_bSaveInfoFlag = false;
// SaveCombatGameInfo();
// }
// if(m_bSaveLogFlag)
// {
// m_bSaveLogFlag = false;
// SaveCombatRecord();
// }
}
void CCombatSystem::OnTimeCheck(TICKCOUNT nTickCount)
{
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// if (false == ((CActor*)m_pEntity)->CheckLevel(nCombatConfig.m_CombatRankConfig.nLevLimit, nCombatConfig.m_CombatRankConfig.nCircleLimit))
// {
// return;
// }
// UpdateCombatRanking();
}
void CCombatSystem::OnEnterGame()
{
// m_nJobType = m_pEntity->GetProperty<int>(PROP_ACTOR_VOCATION);
// LoadCombatInfoFromDb();
// LoadCombatRecordFromDb();
}
void CCombatSystem::LoadCombatInfoFromDb()
{
// if(!m_pEntity) return;
// int nActorId = m_pEntity->GetProperty<int>(PROP_ENTITY_ID);
// CDataClient* pDbClient = GetLogicServer()->GetDbClient();
// if (pDbClient->connected())
// {
// CDataPacket& DataPacket =pDbClient->allocProtoPacket(jxInterSrvComm::DbServerProto::dcLoadCmobatGameInfo);
// DataPacket<< m_pEntity->GetRawServerIndex() << GetLogicServer()->GetServerIndex();
// DataPacket << (int)nActorId;
// GetLogicServer()->GetDbClient()->flushProtoPacket(DataPacket);
// }
}
void CCombatSystem::SaveCombatGameInfo()
{
// if(!m_pEntity) return;
// int nActorId = m_pEntity->GetProperty<int>(PROP_ENTITY_ID);
// CDataClient* pDbClient = GetLogicServer()->GetDbClient();
// if (pDbClient->connected())
// {
// CDataPacket& DataPacket =pDbClient->allocProtoPacket(jxInterSrvComm::DbServerProto::dcSaveCombatGameInfo);
// DataPacket << m_pEntity->GetRawServerIndex() << GetLogicServer()->GetServerIndex();
// DataPacket << nActorId;
// DataPacket << m_nCurrentRankLevel;
// DataPacket << m_nMaxRankLevel;
// DataPacket << m_nLastRankLevel;
// DataPacket << m_nCombatScore;
// DataPacket << m_nChallengeCount;
// DataPacket << m_nPickCount;
// DataPacket << m_nClearTime;
// DataPacket << (int)m_bCdFlag;
// GetLogicServer()->GetDbClient()->flushProtoPacket(DataPacket);
// }
}
void CCombatSystem::LoadCombatInfoFromDbResult(CDataPacketReader &reader)
{
// int nChallengeCount = 0;
// int nPickCount = 0;
// reader >> m_nCurrentRankLevel;
// reader >> m_nMaxRankLevel;
// reader >> m_nLastRankLevel;
// reader >> m_nCombatScore;
// reader >> nChallengeCount;
// reader >> nPickCount;
// reader >> m_nClearTime;
// int nCdFalg = 0;
// reader >> nCdFalg;
// m_bCdFlag = nCdFalg > 0;
// if (!m_bSaveInfoFlag)
// {
// m_nChallengeCount = nChallengeCount;
// m_nPickCount = nPickCount;
// }
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// CRankingMgr &RankingMgr = GetGlobalLogicEngine()->GetRankingMgr();
// CRanking *pRanking = RankingMgr.GetRanking(nCombatConfig.m_CombatRankConfig.sRankInfo[m_nJobType].nRankName);
// if(pRanking)
// {
// int nActorId = m_pEntity->GetProperty<int>(PROP_ENTITY_ID);
// INT_PTR nCurIndex = 0;
// CRankingItem* pRItem = pRanking->GetPtrFromId(nActorId, nCurIndex);
// m_nCurrentRankLevel = (int)nCurIndex + 1;
// if (m_nMaxRankLevel <= 0 || m_nMaxRankLevel > m_nCurrentRankLevel)
// {
// m_nMaxRankLevel = m_nCurrentRankLevel;
// }
// }
}
void CCombatSystem::LoadCombatRecordFromDb()
{
// if(!m_pEntity) return;
// int nActorId = m_pEntity->GetProperty<int>(PROP_ENTITY_ID);
// CDataClient* pDbClient = GetLogicServer()->GetDbClient();
// if (pDbClient->connected())
// {
// CDataPacket& DataPacket =pDbClient->allocProtoPacket(jxInterSrvComm::DbServerProto::dcLoadCombatRecord);
// DataPacket<< m_pEntity->GetRawServerIndex() << GetLogicServer()->GetServerIndex();
// DataPacket << (int)nActorId;
// GetLogicServer()->GetDbClient()->flushProtoPacket(DataPacket);
// }
}
void CCombatSystem::SaveCombatRecord()
{
// if(!m_pEntity) return;
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// int nCount = nCombatConfig.m_CombatRankConfig.nMaxChallangeRecord;
// if (nCount > m_CombatRecordList.count())
// {
// nCount = (int)m_CombatRecordList.count();
// }
// if(nCount <= 0)
// {
// return;
// }
// int nActorId = m_pEntity->GetProperty<int>(PROP_ENTITY_ID);
// CDataClient* pDbClient = GetLogicServer()->GetDbClient();
// if (pDbClient->connected())
// {
// CDataPacket& DataPacket =pDbClient->allocProtoPacket(jxInterSrvComm::DbServerProto::dcSaveCombatRecord);
// DataPacket<< m_pEntity->GetRawServerIndex() << GetLogicServer()->GetServerIndex();
// DataPacket << (int)nActorId;
// DataPacket << (int)nCount;
// for (int i = (int)m_CombatRecordList.count() - nCount; i < m_CombatRecordList.count(); ++i)
// {
// COMBATRECORD& nCombatRecord = m_CombatRecordList[i];
// DataPacket << nCombatRecord.nType;
// DataPacket << nCombatRecord.nResult;
// DataPacket << nCombatRecord.nActorId;
// DataPacket.writeString(nCombatRecord.strName);
// DataPacket << nCombatRecord.nRank;
// }
// GetLogicServer()->GetDbClient()->flushProtoPacket(DataPacket);
// }
}
void CCombatSystem::LoadCombatRecordFromDbResult(CDataPacketReader &reader)
{
// int nCount = 0;
// reader >> nCount;
// if(nCount>0)
// {
// m_CombatRecordList.reserve(nCount);
// m_CombatRecordList.trunc(nCount);
// for (int i = 0; i < nCount; i++)
// {
// COMBATRECORD& nCombatRecord = m_CombatRecordList[i];
// reader >> nCombatRecord.nType;
// reader >> nCombatRecord.nResult;
// reader >> nCombatRecord.nActorId;
// reader.readString(nCombatRecord.strName, ArrayCount(nCombatRecord.strName));
// reader >> nCombatRecord.nRank;
// }
// }
}
void CCombatSystem::ProcessNetData(INT_PTR nCmd,CDataPacketReader &packet )
{
// if (NULL == m_pEntity || ((CEntity*)m_pEntity)->GetType() != enActor)
// {
// return;
// }
// //等级限制
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// if (false == ((CActor*)m_pEntity)->CheckLevel(nCombatConfig.m_CombatRankConfig.nLevLimit, nCombatConfig.m_CombatRankConfig.nCircleLimit))
// {
// m_pEntity->SendOldTipmsgFormatWithId(tpCombatLevelLimit, ttFlyTip, nCombatConfig.m_CombatRankConfig.nLevLimit);
// return;
// }
// switch (nCmd)
// {
// case cGetCombatInfo:
// {
// SendCombatBaseInfo();
// break;
// }
// case cSelectCombatPayer:
// {
// int nActive;
// packet >> nActive;
// PickRankPlayer(nActive);
// break;
// }
// case cCombatStart:
// {
// int nActorId, nRank;
// packet >> nActorId;
// packet >> nRank;
// StartCombatChallage(nActorId, nRank);
// ((CActor*)m_pEntity)->GetQuestSystem()->OnQuestEvent(CQuestData::qtCombatCount, 0, 1, true);
// break;
// }
// case cClearCooldown:
// {
// ClearCombatCd();
// break;
// }
// case cRechargeAwrad:
// {
// int nAwardId;
// packet >> nAwardId;
// RechargeRankAward(nAwardId);
// break;
// }
// case cGetCombatLog:
// {
// GetCombatLog();
// break;
// }
// case cGetCombatRank:
// {
// int nCurrentPage;
// packet >> nCurrentPage;
// GetCombatRank(nCurrentPage);
// break;
// }
// case cGetShopInfo:
// {
// GetRankAwardList();
// break;
// }
// default:
// {
// break;
// }
// }
}
void CCombatSystem::SendCombatBaseInfo()
{
// //下发基本信息
// CActorPacket AP;
// CDataPacket& DataPacket = m_pEntity->AllocPacket(AP);
// DataPacket << (BYTE)enCombatSystemID << (BYTE)sSendCombatInfo;
// DataPacket << m_nCurrentRankLevel;
// DataPacket << m_nMaxRankLevel;
// DataPacket << m_nLastRankLevel;
// DataPacket << m_nCombatScore;
// DataPacket << m_nChallengeCount;
// DataPacket << m_nPickCount;
// DataPacket << m_nClearTime;
// DataPacket << (BYTE)m_bCdFlag;
// AP.flush();
}
void CCombatSystem::PickRankPlayer(int nActive)
{
// //玩家主动请求
// if (nActive > 0)
// {
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// if (m_nPickCount >= nCombatConfig.m_CombatRankConfig.nMaxPickTimes)
// {
// m_pEntity->SendOldTipmsgWithId(tpCombatPickCountLimit, ttFlyTip);
// return;
// }
// m_nPickCount++;
// m_bSaveInfoFlag = true;
// SendCombatBaseInfo();
// m_bPickSwitch = false;
// PickRankPlayerImpl();
// }
// else if (m_bPickSwitch)
// {
// m_bPickSwitch = false;
// PickRankPlayerImpl();
// }
// SendPickRankPlayer();
}
void CCombatSystem::StartCombatChallage(int nActorId, int nRank)
{
// if (nActorId == m_pEntity->GetProperty<int>(PROP_ENTITY_ID))
// {
// return;
// }
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// CRankingMgr &RankingMgr = GetGlobalLogicEngine()->GetRankingMgr();
// CRanking *pRanking = RankingMgr.GetRanking(nCombatConfig.m_CombatRankConfig.sRankInfo[m_nJobType].nRankName);
// if(pRanking)
// {
// INT_PTR nCurIndex = 0;
// CRankingItem* nItem = pRanking->GetPtrFromId(nActorId, nCurIndex);
// if (nRank != nCurIndex + 1)
// {
// PickRankPlayerImpl();
// SendPickRankPlayer();
// return;
// }
// int nTotalTimes = nCombatConfig.m_CombatRankConfig.nMaxChallageTimes;
// int nCdTime = nCombatConfig.m_CombatRankConfig.nAddCD;
// unsigned int nIntervel = nCombatConfig.m_CombatRankConfig.nMaxCD;
// unsigned int nTime = GetGlobalLogicEngine()->getMiniDateTime();
// if (m_bCdFlag)
// {
// if (m_nClearTime > nTime)
// {
// m_pEntity->SendOldTipmsgFormatWithId(tpCombatCDLimit, ttFlyTip);
// return;
// }
// else
// {
// m_nClearTime = nTime + nCdTime;
// m_bCdFlag = false;
// }
// }
// else
// {
// if (m_nClearTime > nTime)
// {
// m_nClearTime += nCdTime;
// if (m_nClearTime - nTime >= nIntervel)
// {
// m_bCdFlag = true;
// }
// }
// else
// {
// m_nClearTime = nTime + nCdTime;
// }
// }
// m_nChallengeCount++;
// m_bSaveInfoFlag = true;
// TriggerEvent(OpCombatStart, nActorId);
// }
}
void CCombatSystem::ClearCombatCd()
{
// unsigned int nTime = GetGlobalLogicEngine()->getMiniDateTime();
// if (!m_bCdFlag || m_nClearTime <= nTime)
// {
// return;
// }
// int nMoney = (m_nClearTime - nTime + 59) / 60;
// //元宝不够
// if(m_pEntity->GetProperty<int>(PROP_ACTOR_YUANBAO) < nMoney)
// {
// m_pEntity->SendOldTipmsgFormatWithId(tpNomoreYubao,ttFlyTip);
// return;
// }
// ((CActor*)m_pEntity)->ChangeMoney(mtYuanbao, -nMoney, 118, 0, "combat clear cd");
// m_nClearTime = 0;
// m_bCdFlag = false;
// m_bSaveInfoFlag = true;
// SendCombatBaseInfo();
}
void CCombatSystem::RechargeRankAward(int nAwardId)
{
//TriggerEvent(OpRechargeAwrad, nAwardId, m_nCurrentRankLevel);
}
void CCombatSystem::GetCombatLog()
{
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// int nCount = nCombatConfig.m_CombatRankConfig.nMaxChallangeRecord;
// if(nCount > m_CombatRecordList.count())
// {
// nCount = (int)(m_CombatRecordList.count());
// }
// CActorPacket AP;
// CDataPacket& DataPacket = m_pEntity->AllocPacket(AP);
// DataPacket << (BYTE)enCombatSystemID << (BYTE)sSendCombatLog;
// DataPacket << (int)nCount;
// for (int i = (int)m_CombatRecordList.count() - 1; m_CombatRecordList.count() - i <= nCount; --i)
// {
// DataPacket << (BYTE)m_CombatRecordList[i].nType;
// DataPacket << (BYTE)m_CombatRecordList[i].nResult;
// DataPacket << (int)m_CombatRecordList[i].nActorId;
// DataPacket.writeString(m_CombatRecordList[i].strName);
// DataPacket << (int)m_CombatRecordList[i].nRank;
// }
// AP.flush();
}
void CCombatSystem::GetCombatRank(int nCurrentPage)
{
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// CRankingMgr &RankingMgr = GetGlobalLogicEngine()->GetRankingMgr();
// CRanking *pRanking = RankingMgr.GetRanking(nCombatConfig.m_CombatRankConfig.sRankInfo[m_nJobType].nRankName);
// if(pRanking)
// {
// int nPageNum = nCombatConfig.m_CombatRankConfig.nShouCount;
// int ItemCount = pRanking->GetItemCount();
// if(ItemCount > 100)
// ItemCount = 100;
// int nTotalPage = (ItemCount + nPageNum - 1) / nPageNum;
// if (nCurrentPage > nTotalPage)
// {
// return;
// }
// CActorPacket AP;
// CDataPacket& DataPacket = m_pEntity->AllocPacket(AP);
// DataPacket << (BYTE)enCombatSystemID << (BYTE)sSendCombatRank;
// DataPacket << (int)nTotalPage;
// DataPacket << (int)nCurrentPage;
// int startIndex = (nCurrentPage-1) * nPageNum;
// int endIndex = nCurrentPage * nPageNum;
// if(endIndex > ItemCount)
// endIndex = ItemCount;
// DataPacket << (int)(endIndex - startIndex);
// CVector<CRankingItem*>& itemList = pRanking->GetList();
// for(int i= startIndex; i < endIndex; ++i)
// {
// CRankingItem* item = itemList[i];
// DataPacket << (int)(i + 1);
// DataPacket << (int)item->GetId();
// DataPacket.writeString(item->GetSubData(0));
// DataPacket << (int)item->GetPoint();
// DataPacket << (int)atoi((item->GetSubData(1)));
// DataPacket << (int)atoi((item->GetSubData(2)));
// }
// AP.flush();
// }
}
void CCombatSystem::GetRankAwardList()
{
//TriggerEvent(OpGetAwardList);
}
void CCombatSystem::TriggerEvent(INT_PTR nSubEvent,INT_PTR nParam1,INT_PTR nParam2,INT_PTR nParam3,INT_PTR nParam4)
{
// CScriptValueList paramList;
// //((CActor*)m_pEntity)->InitEventScriptVaueList(paramList, aeCombat);
// paramList << (int)nSubEvent;
// if(nParam1 >=0)
// {
// paramList << (int)nParam1;
// if(nParam2 >=0)
// {
// paramList << (int)nParam2;
// if(nParam3 >= 0)
// {
// paramList << (int)nParam3;
// }
// }
// }
// ((CActor*)m_pEntity)->OnEvent(aeCombat,paramList,paramList);
}
void CCombatSystem::AddToCombatRank(int nActorId, int nValue)
{
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// CRankingMgr &RankingMgr = GetGlobalLogicEngine()->GetRankingMgr();
// CRanking *pRanking = RankingMgr.GetRanking(nCombatConfig.m_CombatRankConfig.sRankInfo[m_nJobType].nRankName);
// if(pRanking)
// {
// int ItemCount = pRanking->GetItemCount();
// if(ItemCount >= nCombatConfig.m_CombatRankConfig.nMaxRankNum)
// {
// return;
// }
// CRankingItem *pRItem = pRanking->AddItem(nActorId, nValue, false);
// //添加到排行榜
// if (pRItem)
// {
// pRItem->SetSub(0, (char*)((CActor*)m_pEntity->GetEntityName()));
// int nCircle = m_pEntity->GetProperty<int>(PROP_ACTOR_CIRCLE);
// char buf1[32];
// sprintf_s(buf1, sizeof(buf1), "%d", nCircle);
// pRItem->SetSub(1, buf1);
// int nLevle = m_pEntity->GetProperty<int>(PROP_CREATURE_LEVEL);
// char buf2[32];
// sprintf_s(buf2,sizeof(buf2),"%d",nLevle);
// pRItem->SetSub(2, buf2);
// int nSex = m_pEntity->GetProperty<int>(PROP_ACTOR_SEX);
// char buf3[32];
// sprintf_s(buf3,sizeof(buf3),"%d",nSex);
// pRItem->SetSub(3,buf3);
// int nIcon = m_pEntity->GetProperty<int>(PROP_ENTITY_ICON);
// char buf4[32];
// sprintf_s(buf4,sizeof(buf4),"%d",nIcon);
// pRItem->SetSub(4,buf4);
// int nModeId = m_pEntity->GetProperty<int>(PROP_ENTITY_MODELID);
// char buf5[32];
// sprintf_s(buf5,sizeof(buf5),"%d",nModeId);
// pRItem->SetSub(5,buf5);
// int nWeaponId = m_pEntity->GetProperty<int>(PROP_ACTOR_WEAPONAPPEARANCE);
// char buf6[32];
// sprintf_s(buf6,sizeof(buf6),"%d",nWeaponId);
// pRItem->SetSub(6,buf6);
// int nSwingId = m_pEntity->GetProperty<int>(PROP_ACTOR_SWINGAPPEARANCE);
// char buf7[32];
// sprintf_s(buf7,sizeof(buf7),"%d",nSwingId);
// pRItem->SetSub(7,buf7);
// int nHp = m_pEntity->GetProperty<int>(PROP_CREATURE_MAXHP);
// char buf8[32];
// sprintf_s(buf8,sizeof(buf8),"%d",nHp);
// pRItem->SetSub(8,buf8);
// int nAttack = ((CActor*)m_pEntity)->GetActorAttackValueMax();
// char buf9[32];
// sprintf_s(buf9,sizeof(buf9),"%d",nAttack);
// pRItem->SetSub(9,buf9);
// int nDefence = ((CActor*)m_pEntity)->GetActorDefenceValueMax();
// char buf10[32];
// sprintf_s(buf10,sizeof(buf10),"%d",nDefence);
// pRItem->SetSub(10,buf10);
// int nHit = m_pEntity->GetProperty<int>(PROP_CREATURE_HITVALUE);
// char buf11[32];
// sprintf_s(buf11,sizeof(buf11),"%d",nHit);
// pRItem->SetSub(11,buf11);
// int nCrit = m_pEntity->GetProperty<int>(PROP_ACTOR_CRIT_RATE);
// char buf12[32];
// sprintf_s(buf12,sizeof(buf12),"%d",nCrit);
// pRItem->SetSub(12,buf12);
// int nDodge = m_pEntity->GetProperty<int>(PROP_CREATURE_DODVALUE);
// char buf13[32];
// sprintf_s(buf13,sizeof(buf13),"%d",nDodge);
// pRItem->SetSub(13,buf13);
// pRItem->SetSub(14, "1");
// m_nCurrentRankLevel = ItemCount + 1;
// if (m_nMaxRankLevel <= 0 || m_nMaxRankLevel > m_nCurrentRankLevel)
// {
// m_nMaxRankLevel = m_nCurrentRankLevel;
// }
// m_bSaveInfoFlag = true;
// }
// }
}
void CCombatSystem::UpdateCombatRanking()
{
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// CRankingMgr &RankingMgr = GetGlobalLogicEngine()->GetRankingMgr();
// CRanking *pRanking = RankingMgr.GetRanking(nCombatConfig.m_CombatRankConfig.sRankInfo[m_nJobType].nRankName);
// if(pRanking)
// {
// int nActorId = m_pEntity->GetProperty<int>(PROP_ENTITY_ID);
// int nPoint = m_pEntity->GetProperty<unsigned int>(PROP_ACTOR_BATTLE_POWER);
// CRankingItem* pRItem = pRanking->GetPtrFromId(nActorId);
// //更新排行榜
// if (pRItem)
// {
// pRItem->SetPoint(nPoint);
// pRItem->SetSub(0, (char*)((CActor*)m_pEntity->GetEntityName()));
// int nCircle = m_pEntity->GetProperty<int>(PROP_ACTOR_CIRCLE);
// char buf1[32];
// sprintf_s(buf1, sizeof(buf1), "%d", nCircle);
// pRItem->SetSub(1, buf1);
// int nLevle = m_pEntity->GetProperty<int>(PROP_CREATURE_LEVEL);
// char buf2[32];
// sprintf_s(buf2,sizeof(buf2),"%d",nLevle);
// pRItem->SetSub(2, buf2);
// int nSex = m_pEntity->GetProperty<int>(PROP_ACTOR_SEX);
// char buf3[32];
// sprintf_s(buf3,sizeof(buf3),"%d",nSex);
// pRItem->SetSub(3,buf3);
// int nIcon = m_pEntity->GetProperty<int>(PROP_ENTITY_ICON);
// char buf4[32];
// sprintf_s(buf4,sizeof(buf4),"%d",nIcon);
// pRItem->SetSub(4,buf4);
// int nModeId = m_pEntity->GetProperty<int>(PROP_ENTITY_MODELID);
// char buf5[32];
// sprintf_s(buf5,sizeof(buf5),"%d",nModeId);
// pRItem->SetSub(5,buf5);
// int nWeaponId = m_pEntity->GetProperty<int>(PROP_ACTOR_WEAPONAPPEARANCE);
// char buf6[32];
// sprintf_s(buf6,sizeof(buf6),"%d",nWeaponId);
// pRItem->SetSub(6,buf6);
// int nSwingId = m_pEntity->GetProperty<int>(PROP_ACTOR_SWINGAPPEARANCE);
// char buf7[32];
// sprintf_s(buf7,sizeof(buf7),"%d",nSwingId);
// pRItem->SetSub(7,buf7);
// int nHp = m_pEntity->GetProperty<int>(PROP_CREATURE_MAXHP);
// char buf8[32];
// sprintf_s(buf8,sizeof(buf8),"%d",nHp);
// pRItem->SetSub(8,buf8);
// int nAttack = ((CActor*)m_pEntity)->GetActorAttackValueMax();
// char buf9[32];
// sprintf_s(buf9,sizeof(buf9),"%d",nAttack);
// pRItem->SetSub(9,buf9);
// int nDefence = ((CActor*)m_pEntity)->GetActorDefenceValueMax();
// char buf10[32];
// sprintf_s(buf10,sizeof(buf10),"%d",nDefence);
// pRItem->SetSub(10,buf10);
// int nHit = m_pEntity->GetProperty<int>(PROP_CREATURE_HITVALUE);
// char buf11[32];
// sprintf_s(buf11,sizeof(buf11),"%d",nHit);
// pRItem->SetSub(11,buf11);
// int nCrit = m_pEntity->GetProperty<int>(PROP_ACTOR_CRIT_RATE);
// char buf12[32];
// sprintf_s(buf12,sizeof(buf12),"%d",nCrit);
// pRItem->SetSub(12,buf12);
// int nDodge = m_pEntity->GetProperty<int>(PROP_CREATURE_DODVALUE);
// char buf13[32];
// sprintf_s(buf13,sizeof(buf13),"%d",nDodge);
// pRItem->SetSub(13,buf13);
// pRItem->SetSub(14, "1");
// }
// else
// {
// AddToCombatRank(nActorId, nPoint);
// }
// }
}
void CCombatSystem::SwapCombatRank(int nActorId, int nTagetId)
{
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// CRankingMgr &RankingMgr = GetGlobalLogicEngine()->GetRankingMgr();
// CRanking *pRanking = RankingMgr.GetRanking(nCombatConfig.m_CombatRankConfig.sRankInfo[m_nJobType].nRankName);
// if(pRanking)
// {
// CVector<CRankingItem*>& nItemList = pRanking->GetList();
// INT_PTR nTargetIndex =-1;
// //查找目标的index 和指针
// CRankingItem* nItem = pRanking->GetPtrFromId(nTagetId, nTargetIndex);
// if(nItem)
// {
// INT_PTR nTempIndex =-1;
// CRankingItem* mItem = pRanking->GetPtrFromId(nActorId,nTempIndex);
// //挑战方排名在1000以内的
// if(mItem)
// {
// pRanking->SwapItem(nTargetIndex,nTempIndex);
// }
// else if (nItemList.count() < nCombatConfig.m_CombatRankConfig.nMaxRankNum) //当排行榜最大人数还没1000人的时候
// {
// INT_PTR nItemCount = nItemList.count();
// AddToCombatRank(nActorId, m_pEntity->GetProperty<unsigned int>(PROP_ACTOR_BATTLE_POWER));
// if (nItemCount < nItemList.count()) //加入排行榜成功
// {
// nTempIndex = nItemList.count() - 1;
// pRanking->SwapItem(nTargetIndex, nTempIndex);
// }
// }
// else //排名在1000外的情况
// {
// nItem->SetId(nActorId);
// nItem->SetPoint(m_pEntity->GetProperty<int>(PROP_ACTOR_BATTLE_POWER));
// nItem->SetSub(0, (char*)((CActor*)m_pEntity->GetEntityName()));
// int nCircle = m_pEntity->GetProperty<int>(PROP_ACTOR_CIRCLE);
// char buf1[32];
// sprintf_s(buf1, sizeof(buf1), "%d", nCircle);
// nItem->SetSub(1, buf1);
// int nLevle = m_pEntity->GetProperty<int>(PROP_CREATURE_LEVEL);
// char buf2[32];
// sprintf_s(buf2,sizeof(buf2),"%d",nLevle);
// nItem->SetSub(2, buf2);
// int nSex = m_pEntity->GetProperty<int>(PROP_ACTOR_SEX);
// char buf3[32];
// sprintf_s(buf3,sizeof(buf3),"%d",nSex);
// nItem->SetSub(3,buf3);
// int nIcon = m_pEntity->GetProperty<int>(PROP_ENTITY_ICON);
// char buf4[32];
// sprintf_s(buf4,sizeof(buf4),"%d",nIcon);
// nItem->SetSub(4,buf4);
// int nModeId = m_pEntity->GetProperty<int>(PROP_ENTITY_MODELID);
// char buf5[32];
// sprintf_s(buf5,sizeof(buf5),"%d",nModeId);
// nItem->SetSub(5,buf5);
// int nWeaponId = m_pEntity->GetProperty<int>(PROP_ACTOR_WEAPONAPPEARANCE);
// char buf6[32];
// sprintf_s(buf6,sizeof(buf6),"%d",nWeaponId);
// nItem->SetSub(6,buf6);
// int nSwingId = m_pEntity->GetProperty<int>(PROP_ACTOR_SWINGAPPEARANCE);
// char buf7[32];
// sprintf_s(buf7,sizeof(buf7),"%d",nSwingId);
// nItem->SetSub(7,buf7);
// int nHp = m_pEntity->GetProperty<int>(PROP_CREATURE_MAXHP);
// char buf8[32];
// sprintf_s(buf8,sizeof(buf8),"%d",nHp);
// nItem->SetSub(8,buf8);
// int nAttack = ((CActor*)m_pEntity)->GetActorAttackValueMax();
// char buf9[32];
// sprintf_s(buf9,sizeof(buf9),"%d",nAttack);
// nItem->SetSub(9,buf9);
// int nDefence = ((CActor*)m_pEntity)->GetActorDefenceValueMax();
// char buf10[32];
// sprintf_s(buf10,sizeof(buf10),"%d",nDefence);
// nItem->SetSub(10,buf10);
// int nHit = m_pEntity->GetProperty<int>(PROP_CREATURE_HITVALUE);
// char buf11[32];
// sprintf_s(buf11,sizeof(buf11),"%d",nHit);
// nItem->SetSub(11,buf11);
// int nCrit = m_pEntity->GetProperty<int>(PROP_ACTOR_CRIT_RATE);
// char buf12[32];
// sprintf_s(buf12,sizeof(buf12),"%d",nCrit);
// nItem->SetSub(12,buf12);
// int nDodge = m_pEntity->GetProperty<int>(PROP_CREATURE_DODVALUE);
// char buf13[32];
// sprintf_s(buf13,sizeof(buf13),"%d",nDodge);
// nItem->SetSub(13,buf13);
// nItem->SetSub(14, "1");
// }
// }
// }
}
void CCombatSystem::PickRankPlayerImpl()
{
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// int nCount = nCombatConfig.m_Count;
// if(nCount <= 0)
// {
// return;
// }
// CRankingMgr &RankingMgr = GetGlobalLogicEngine()->GetRankingMgr();
// CRanking *pRanking = RankingMgr.GetRanking(nCombatConfig.m_CombatRankConfig.sRankInfo[m_nJobType].nRankName);
// int i = 0;
// if(pRanking)
// {
// int nActorId = m_pEntity->GetProperty<int>(PROP_ENTITY_ID);
// int rIndex = (int)(pRanking->GetIndexFromId(nActorId));
// int itemCount = pRanking->GetItemCount();
// int nMaxRankCount = __min(itemCount, nCombatConfig.m_CombatRankConfig.nMaxRankNum);
// if (rIndex < 0)
// {
// rIndex = nMaxRankCount; //如果玩家没有排行榜中,暂时把他看成是排行榜最后一位的后一位
// }
// for (i = 0; i < nCount; ++i)
// {
// if (rIndex >= nCombatConfig.m_CombatGroupList[i].nStartRank && rIndex <= nCombatConfig.m_CombatGroupList[i].nEndRank)
// {
// break;
// }
// }
// if (i == nCount)
// {
// i = nCount - 1;
// }
// for (int j = 0; j < MAXPICKITEMNUM; ++j)
// {
// PICKITEM &pickItem = nCombatConfig.m_CombatGroupList[i].sPickitems[j];
// int nStartIndex = pickItem.nStartPickRank + rIndex;
// int nEndIndex = pickItem.nEndPIckRank + rIndex;
// if (nStartIndex < 0)
// {
// nStartIndex = 0;
// }
// else if (nStartIndex >= nMaxRankCount)
// {
// nStartIndex = nMaxRankCount - 1;
// }
// if (nEndIndex < 0)
// {
// nEndIndex = 0;
// }
// else if (nEndIndex >= nMaxRankCount)
// {
// nEndIndex = nMaxRankCount - 1;
// }
// int randIndex = (nEndIndex - nStartIndex + 1) <= 0 ? 1:(nEndIndex - nStartIndex + 1);
// int nRandom = (rand() % randIndex) + nStartIndex;
// if (j > 0)
// {
// // 剩下的排名选手数不够填充
// if (nMaxRankCount - nRandom <= MAXPICKITEMNUM - j)
// {
// nRandom = m_nSelectedIndex[j] + 1;
// }
// // 后选排名高于前者
// else if (nRandom <= m_nSelectedIndex[j])
// {
// nRandom = m_nSelectedIndex[j] + 1;
// }
// }
// if (nRandom + 1 == m_nCurrentRankLevel) //排除自己
// {
// nRandom++;
// }
// m_nSelectedIndex[j + 1] = nRandom;
// }
// }
}
void CCombatSystem::SendPickRankPlayer()
{
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// CRankingMgr &RankingMgr = GetGlobalLogicEngine()->GetRankingMgr();
// CRanking *pRanking = RankingMgr.GetRanking(nCombatConfig.m_CombatRankConfig.sRankInfo[m_nJobType].nRankName);
// if(pRanking)
// {
// CActorPacket AP;
// CDataPacket& DataPacket = m_pEntity->AllocPacket(AP);
// DataPacket << (BYTE)enCombatSystemID << (BYTE)sSendSelectResult;
// size_t pos = DataPacket.getPosition();
// DataPacket << (BYTE)0;
// int nResult = 0;
// CVector<CRankingItem*>& itemList = pRanking->GetList();
// for (int i = 0; i < MAXPICKITEMNUM + 1; ++i)
// {
// if (m_nSelectedIndex[i] >= 0 && m_nSelectedIndex[i] < itemList.count())
// {
// CRankingItem* item = itemList[m_nSelectedIndex[i]];
// DataPacket << (int)item->GetId();
// DataPacket << (int)(m_nSelectedIndex[i] + 1);
// DataPacket << (int)item->GetPoint();
// DataPacket << (int)atoi((item->GetSubData(1)));
// DataPacket << (int)atoi((item->GetSubData(2)));
// DataPacket.writeString(item->GetSubData(0));
// DataPacket << (int)atoi((item->GetSubData(3)));
// DataPacket << (int)atoi((item->GetSubData(4)));
// DataPacket << (int)atoi((item->GetSubData(5)));
// DataPacket << (int)atoi((item->GetSubData(6)));
// DataPacket << (int)atoi((item->GetSubData(7)));
// DataPacket << (int)atoi((item->GetSubData(14)));
// nResult++;
// }
// }
// BYTE* pCount = (BYTE*)DataPacket.getPositionPtr(pos);
// *pCount = (BYTE)nResult;
// AP.flush();
// }
}
int CCombatSystem::GetMyCombatRank()
{
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// CRankingMgr &RankingMgr = GetGlobalLogicEngine()->GetRankingMgr();
// CRanking *pRanking = RankingMgr.GetRanking(nCombatConfig.m_CombatRankConfig.sRankInfo[m_nJobType].nRankName);
// if(pRanking == NULL)
// {
return 0;
// }
// int nMyActorId = m_pEntity->GetProperty<int>(PROP_ENTITY_ID);
// int nMyRank = (int)pRanking->GetIndexFromId(nMyActorId) + 1;
// return nMyRank;
}
void CCombatSystem::ChallegeOverOp(int nResult, int nActorId, char* strName, int nIsReal)
{
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// CRankingMgr &RankingMgr = GetGlobalLogicEngine()->GetRankingMgr();
// CRanking *pRanking = RankingMgr.GetRanking(nCombatConfig.m_CombatRankConfig.sRankInfo[m_nJobType].nRankName);
// if(pRanking == NULL)
// {
// return;
// }
// int nMyActorId = m_pEntity->GetProperty<int>(PROP_ENTITY_ID);
// int nMyRank = (int)pRanking->GetIndexFromId(nMyActorId) + 1;
// int nTargetRank = (int)pRanking->GetIndexFromId(nActorId) + 1;
// m_nCurrentRankLevel = nMyRank;
// if (m_nMaxRankLevel <= 0 || m_nMaxRankLevel > m_nCurrentRankLevel)
// {
// m_nMaxRankLevel = m_nCurrentRankLevel;
// }
// m_bSaveInfoFlag = true;
// SendCombatBaseInfo();
// if(nResult == enSuccAndSwap || nResult == enSucc)
// {
// //成功挑战职业宗师X/Y次
// ((CActor*)m_pEntity)->GetQuestSystem()->OnQuestEvent(CQuestData::qtCombatSuccCount, 0, 1, true);
// }
// //胜利交换排名需要重刷选择对手
// if (nResult == enSuccAndSwap)
// {
// PickRankPlayerImpl();
// SendPickRankPlayer();
// }
// TriggerEvent(OpUpdateActorRank, (int)pRanking->GetIndexFromId(nMyActorId) + 1);
// if(strName)
// {
// AddToCombatLog(0, strName, nActorId, nMyRank, nResult);
// }
// if (nIsReal > 0)
// {
// int nConvResult = -nResult;
// CActor * pActor = GetGlobalLogicEngine()->GetEntityMgr()->GetEntityPtrByActorID(nActorId);
// if (pActor != NULL)
// {
// pActor->GetCombatSystem().ChallegeNotice(nConvResult, nMyActorId, (char*)((CActor*)m_pEntity->GetEntityName()), nTargetRank);
// }
// else
// {
// char MsgBuff[MAX_MSG_COUNT];
// CDataPacket packet(MsgBuff, sizeof(MsgBuff));
// packet.writeString("");
// packet.writeString("");
// packet << (int)nConvResult;
// packet << (int)nMyActorId;
// packet << (int)nTargetRank;
// packet.writeString((char*)((CActor*)m_pEntity->GetEntityName()));
// Assert(packet.getPosition() <= MAX_MSG_COUNT);
// CMsgSystem::AddOfflineMsg(nActorId, CMsgSystem::mtCombatLog, MsgBuff, packet.getPosition(), 0);
// }
// }
}
void CCombatSystem::ChallegeNotice(int nResult, int nActorId, char* strName, int nMyRank)
{
// m_nCurrentRankLevel = nMyRank;
// if (m_nMaxRankLevel <= 0 || m_nMaxRankLevel > m_nCurrentRankLevel)
// {
// m_nMaxRankLevel = m_nCurrentRankLevel;
// }
// m_bSaveInfoFlag = true;
// SendCombatBaseInfo();
// if(strName)
// {
// AddToCombatLog(1, strName, nActorId, nMyRank, nResult);
// }
}
void CCombatSystem::OfflineCombatOp(int nResult, int nActorId, char* strName, int nMyRank)
{
// if(strName)
// {
// AddToCombatLog(1, strName, nActorId, nMyRank, nResult);
// }
}
void CCombatSystem::OnNewDayClear()
{
// m_nChallengeCount = 0;
// m_nPickCount = 0;
// m_bSaveInfoFlag = true;
// SendCombatBaseInfo();
}
void CCombatSystem::AddToCombatLog(int nType, char *strName, int nActorId, int nRank, int nResult)
{
// m_bSaveLogFlag = true;
// COMBATRECORD tmpRecord;
// _asncpytA(tmpRecord.strName, strName);
// tmpRecord.nType = nType;
// tmpRecord.nActorId = nActorId;
// tmpRecord.nRank = nRank;
// tmpRecord.nResult = nResult;
// m_CombatRecordList.add(tmpRecord);
}
void CCombatSystem::ChangeCombatScore(int nValue)
{
// m_nCombatScore += nValue;
// m_bSaveInfoFlag = true;
// SendCombatBaseInfo();
}
void CCombatSystem::OnLevelUp()
{
// //已经入榜
// if (m_nCurrentRankLevel > 0)
// {
// return;
// }
// //等级限制
// CCombatRankProvider& nCombatConfig = GetLogicServer()->GetDataProvider()->GetCombatConfig();
// if (false == ((CActor*)m_pEntity)->CheckLevel(nCombatConfig.m_CombatRankConfig.nLevLimit, nCombatConfig.m_CombatRankConfig.nCircleLimit))
// {
// return;
// }
// int nActorId = m_pEntity->GetProperty<int>(PROP_ENTITY_ID);
// int nPoint = m_pEntity->GetProperty<unsigned int>(PROP_ACTOR_BATTLE_POWER);
// AddToCombatRank(nActorId, nPoint);
}