📄 dualmgr.cpp
字号:
// DualMgr.cpp: implementation of the CDualMgr class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "DualMgr.h"
#include "Char.h"
#include "Effect.h"
#include "Network.h"
#include "CharDataTable.h"
#include "SmallMenuSet.h"
#include "SymbolMgr_Client.h"
extern CHARACTERLIST g_CharacterList;
extern int UseItemByRbutton(POS pos_s, ItemAttr &item_attr);
extern CSymbolMgr_Client g_SymBolMgr;
//class CSymbolMgr_Client;
CDualMgr g_mgrDual;
///////////////////////////////////////////////////////////////////////////////
// Construction/Destruction
///////////////////////////////////////////////////////////////////////////////
CDualMgr::CDualMgr()
{
m_nPara = 0;
m_nPosX = 0;
m_nPosY = 0;
}
CDualMgr::~CDualMgr()
{
}
///////////////////////////////////////////////////////////////////////////////
// Public Method
///////////////////////////////////////////////////////////////////////////////
void CDualMgr::Load(const char* pFile)
{
/*
ifstream fin(pFile, ios::in|ios::binary);
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 15; ++j)
{
fin.read((char*)(&m_aBank[i][j]), sizeof(HERO_NAME));
}
}
fin.close();
*/
ifstream fin(pFile);
string strLine;
int i = 0, j = 0;
while (getline(fin, strLine, fin.widen('\n')))
{
int nBegin = 0, nEnd = strLine.find("\t", 0);
if (i != atoi(strLine.substr(nBegin , nEnd - nBegin).c_str()))
{
i = atoi(strLine.substr(nBegin , nEnd - nBegin).c_str());
j = 0;
}
// 泅犁 努贰胶 佬绢坷扁
m_aBank[i][j].nBefore = i;
// 函版且 努贰胶 佬绢坷扁
nBegin = nEnd + 1;
nEnd = strLine.find("\t", nBegin);
if (nEnd == string::npos) continue;
m_aBank[i][j].nAfter = atoi(strLine.substr(nBegin , nEnd - nBegin).c_str());
// 努贰胶 窜拌 佬绢坷扁
nBegin = nEnd + 1;
nEnd = strLine.find("\t", nBegin);
if (nEnd == string::npos) continue;
m_aBank[i][j].nStep = atoi(strLine.substr(nBegin , nEnd - nBegin).c_str());
// 疙莫阑 荤侩 啊瓷茄 饭骇 佬绢坷扁
nBegin = nEnd + 1;
nEnd = strLine.find("\t", nBegin);
if (nEnd == string::npos) continue;
m_aBank[i][j].nLimit = atoi(strLine.substr(nBegin , nEnd - nBegin).c_str());
// 努贰胶 疙莫 佬绢坷扁
nBegin = nEnd + 1;
nEnd = strLine.find("\t", nBegin);
if (nEnd == string::npos) continue;
m_aBank[i][j].strName = string(strLine, nBegin , nEnd - nBegin);
// 疙莫俊 包茄 汲疙 佬绢坷扁
nBegin = nEnd + 1;
m_aBank[i][j].strExplain = string(strLine, nBegin , strLine.length() - nBegin);
++j;
}
fin.close();
}
void CDualMgr::Save(const char* pFile)
{
/*
ofstream fout(pFile, ios::out|ios::binary);
for (int i = 0; i < 5; ++i)
{
for (int j = 0; j < 15; ++j)
{
fout.write((char*)(&m_aBank[i][j]), sizeof(HERO_NAME));
}
}
fout.close();
*/
int i = 12, j = 8920;
string strTemp = "Test best!";
ofstream fout(pFile);
fout << i << j << strTemp << endl;
fout.close();
}
string CDualMgr::GetClassName(int nBefore, int nAfter, int nStep, int nLevel) const
{
switch (nStep)
{
case 0: return (nLevel >= 100) ? "Crossing Class":m_aBank[nBefore][(nLevel - 1)/10].strName;
case 1:
case 2:
case 3:
case 4: return m_aBank[nBefore][nAfter + 10].strName;
case 5: return "Dragon Slayer";
}
return "";
}
string CDualMgr::GetDulaExplain(int nBefore, int nAfter) const
{
return m_aBank[nBefore][nAfter + 10].strExplain;
}
void CDualMgr::SendDualEnable(LPCHARACTER pMaster, BYTE nPara, BYTE nX, BYTE nY)
{
if (pMaster == NULL) return;
POS pos;
// 傈捧胶懦 器牢磐 裙垫 酒捞袍 困摹 备窍扁
::SetItemPos(INV, nPara, nY, nX, &pos);
// 傈捧胶懦 器牢磐 裙垫 酒捞袍 犬牢
ItemAttr& rItemAttr = InvItemAttr[nPara][nY][nX];
if (rItemAttr.item_no == 4028)
{ // Packet 傈价
t_packet packet;
packet.h.header.type = CMD_DUAL_ENABLE;
packet.h.header.size = sizeof(t_client_dual_enable);
packet.u.combat.client_combat_obtain.idMaster = WORD(pMaster->id);
packet.u.combat.client_combat_obtain.nPara = nPara;
packet.u.combat.client_combat_obtain.nPosX = nX;
packet.u.combat.client_combat_obtain.nPosY = nY;
::QueuePacket(&packet, 1);
}
}
void CDualMgr::SendDualChange(LPCHARACTER pMaster, BYTE nNext)
{
if (pMaster == NULL) return;
POS pos;
// 傈捧胶懦 器牢磐 裙垫 酒捞袍 困摹 备窍扁
::SetItemPos(INV, m_nPara, m_nPosY, m_nPosX, &pos);
// 傈捧胶懦 器牢磐 裙垫 酒捞袍 犬牢
ItemAttr& rItemAttr = InvItemAttr[m_nPara][m_nPosY][m_nPosX];
if (rItemAttr.item_no == 4028)
{ // Packet 傈价
t_packet packet;
packet.h.header.type = CMD_DUAL_CHANGE;
packet.h.header.size = sizeof(t_client_dual_change);
packet.u.dual.client_dual_change.idMaster = WORD(pMaster->id);
packet.u.dual.client_dual_change.nPara = m_nPara;
packet.u.dual.client_dual_change.nPosX = m_nPosX;
packet.u.dual.client_dual_change.nPosY = m_nPosY;
packet.u.dual.client_dual_change.nNext = nNext;
::QueuePacket(&packet, 1);
}
}
void CDualMgr::SendDualDivide(LPCHARACTER pMaster, BYTE nNext)
{
if (pMaster == NULL) return;
t_packet packet;
packet.h.header.type = CMD_DUAL_DIVIDE;
packet.h.header.size = sizeof(t_client_dual_divide);
packet.u.dual.client_dual_divide.idMaster = WORD(pMaster->id);
packet.u.dual.client_dual_divide.nNext = nNext;
::QueuePacket(&packet, 1);
}
void CDualMgr::RecvDualEnable(t_server_dual_enable* pPacket)
{
LPCHARACTER pDual = ::ReturnCharacterPoint(pPacket->idMaster);
if (pDual == NULL) return;
const BYTE nPara = pPacket->nPara;
const BYTE nX = pPacket->nPosX;
const BYTE nY = pPacket->nPosY;
// 傈捧胶懦 器牢磐 裙垫 酒捞袍 困摹 备窍扁
POS pos;
::SetItemPos(INV, nPara, nY, nX, &pos);
// 傈捧胶懦 器牢磐 裙垫 酒捞袍 犬牢
ItemAttr& rItemAttr = InvItemAttr[nPara][nY][nX];
if (rItemAttr.item_no == 4028)
{ // Packet 傈价
m_nPara = nPara;
m_nPosX = nX;
m_nPosY = nY;
::CallDualInterFace(MT_DUAL_CHANGE);
}
}
void CDualMgr::RecvDualChange(t_server_dual_change* pPacket)
{
LPCHARACTER pDual = ::ReturnCharacterPoint(pPacket->idMaster);
if (pDual == NULL) return;
if (pDual == Hero)
{
m_nPara = 0;
m_nPosX = 0;
m_nPosY = 0;
pDual->aStepInfo[CLS_STEP] = 1; // 掂倔 努贰胶 窜拌 惑铰
pDual->aStepInfo[DUAL_CLS] = pPacket->nDual; // 掂倔 努贰胶 汲沥
SCharacterData.nCharacterAbility[FAME] = pPacket->dwFame; // 惫啊傈 fame 痢荐 犁汲沥
SCharacterData.nCharacterAbility[STR] = pPacket->wStr;
SCharacterData.nCharacterAbility[DEX] = pPacket->wDex;
SCharacterData.nCharacterAbility[CON] = pPacket->wCon;
SCharacterData.nCharacterAbility[WIS] = pPacket->wWis;
SCharacterData.nCharacterAbility[INT_] = pPacket->wInt;
SCharacterData.nCharacterAbility[CHA] = pPacket->wCha;
SCharacterData.nCharacterAbility[MOVP] = pPacket->wMovep;
SCharacterData.nCharacterAbility[ENDU] = pPacket->wEndu;
SCharacterData.nCharacterAbility[MOR] = pPacket->wMor;
SCharacterData.nCharacterAbility[LUCK] = pPacket->wLuck;
SCharacterData.nCharacterAbility[WSPS] = pPacket->wWsPs;
SCharacterData.LvUpPoint = pPacket->wPoint;
}
::InsertMagic(pDual, pDual, 443, -1, 0, 0, 0, 0);
}
void CDualMgr::RecvDualDivide(t_server_dual_divide* pPacket)
{
LPCHARACTER pDual = ::ReturnCharacterPoint(pPacket->idMaster);
if (pDual == NULL) return;
if (pDual == Hero)
{
++Hero->aStepInfo[CLS_STEP]; // 掂倔 努贰胶 窜拌 惑铰
Hero->aStepInfo[DUAL_CLS] = pPacket->nDual; // 掂倔 努贰胶 汲沥
SCharacterData.nCharacterAbility[STR] = pPacket->wStr;
SCharacterData.nCharacterAbility[DEX] = pPacket->wDex;
SCharacterData.nCharacterAbility[CON] = pPacket->wCon;
SCharacterData.nCharacterAbility[WIS] = pPacket->wWis;
SCharacterData.nCharacterAbility[INT_] = pPacket->wInt;
SCharacterData.nCharacterAbility[CHA] = pPacket->wCha;
SCharacterData.nCharacterAbility[MOVP] = pPacket->wMovep;
SCharacterData.nCharacterAbility[ENDU] = pPacket->wEndu;
SCharacterData.nCharacterAbility[MOR] = pPacket->wMor;
SCharacterData.nCharacterAbility[LUCK] = pPacket->wLuck;
SCharacterData.nCharacterAbility[WSPS] = pPacket->wWsPs;
SCharacterData.LvUpPoint = pPacket->wPoint;
}
::InsertMagic(pDual, pDual, 443, -1, 0, 0, 0, 0);
}
int CDualMgr::GetAbility(BYTE nType)
{ // 绢呼府萍 弥措蔼 啊廉坷扁
const int nClass = Hero->class_type;
const int nStep = Hero->aStepInfo[CLS_STEP];
CAbilityLimit* pLimit = g_mgrLimit.GetCell(nClass, nStep);
switch (nType)
{
case STR: return pLimit->GetStr(); // 塞
case CON: return pLimit->GetCon(); // 眉仿
case DEX: return pLimit->GetDex(); // 刮酶
case WIS: return pLimit->GetWis(); // 瘤瓷
case INT_: return pLimit->GetInt(); // 瘤驱
case CHA: return pLimit->GetCha(); // 概仿
case MOVP: return pLimit->GetMovp(); // 捞悼仿
case ENDU: return pLimit->GetEndu(); // 牢郴
case MOR: return pLimit->GetMor(); // 荤扁
case LUCK: return pLimit->GetLuck(); // 青款
case WSPS:
{
switch (SCharacterData.nCharacterData[SPELL])
{
case WIZARD_SPELL: return pLimit->GetWs(); // 付过荤
case PRIEST_SPELL: return pLimit->GetPs(); // 己流磊
}
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -