📄 objectplayer.cpp
字号:
fCGHI[0] = FALSE;
fCGHI[1] = FALSE;
fCGHI[2] = FALSE;
fCGHI[3] = FALSE;
BOOL fOldHumHideMode = m_fHumHideMode;
ZeroMemory(&m_AddAbility, sizeof(m_AddAbility));
m_WAbility = m_Ability;
m_WAbility.Weight = 0;
m_WAbility.HandWeight = 0;
m_WAbility.WearWeight = 0;
_LPTUSERITEMRCD lpUserItemRcd = NULL;
for (int i = U_DRESS; i <= U_RINGR; i++)
{
if (lpUserItemRcd = m_pUserInfo->GetAccessory(i))
{
g_pStdItemSpecial[lpUserItemRcd->nStdIndex].ApplyItemParameters(&m_AddAbility);
if ( i == U_RIGHTHAND || i == U_WEAPON )
m_WAbility.HandWeight += g_pStdItemSpecial[lpUserItemRcd->nStdIndex].wWeight;
else
m_WAbility.WearWeight += g_pStdItemSpecial[lpUserItemRcd->nStdIndex].wWeight;
if ( i == U_WEAPON )
m_AddAbility.WeaponStrong = (BYTE)g_pStdItemSpecial[lpUserItemRcd->nStdIndex].dwRSource; // 公扁狼 碍档. 碍档啊 臭栏搁 肋 救 磺俺咙
}
}
m_WAbility.Weight = m_pUserInfo->CalcBagWeight();
// BEGIN:篮脚贱
if ((m_fFixedHideMode) && (m_wStatusArr[STATE_TRANSPARENT] > 0))
m_fHumHideMode = TRUE;
if (m_fHumHideMode)
{
if (!fOldHumHideMode)
{
m_nCharStatus = GetCharStatus();
AddRefMsg(RM_CHARSTATUSCHANGED, m_sHitSpeed/*wparam*/, m_nCharStatus, 0, 0, NULL);
}
}
else
{
if (fOldHumHideMode)
{
m_wStatusArr[STATE_TRANSPARENT] = 0;
m_nCharStatus = GetCharStatus();
AddRefMsg(RM_CHARSTATUSCHANGED, m_sHitSpeed/*wparam*/, m_nCharStatus, 0, 0, NULL);
}
}
// END:篮脚贱
RecalcHitSpeed();
// BEGIN:Light (Candle)
BYTE btOldLight = m_btLight;
_LPTGENERALITEMRCD lpTItemRcd = m_pUserInfo->GetRightHand();
if (lpTItemRcd)
{
if (lpTItemRcd->nDura > 0)
m_btLight = 8;
else
m_btLight = 2;
}
else
m_btLight = 2;
if (btOldLight != m_btLight)
AddRefMsg(RM_CHANGELIGHT, 0, 0, 0, 0, NULL);
// END
m_btAntiMagic += m_AddAbility.AntiMagic;
m_btHitPoint += m_AddAbility.HIT;
m_btSpeedPoint += m_AddAbility.SPEED;
m_btAntiPoison += m_AddAbility.AntiPoison;
m_btPoisonRecover += m_AddAbility.PoisonRecover;
m_btHealthRecover += m_AddAbility.HealthRecover;
m_btSpellRecover += m_AddAbility.SpellRecover;
m_sHitSpeed += m_AddAbility.HitSpeed;
// Luck := Luck + AddAbil.Luck;
// Luck := Luck - AddAbil.UnLuck;
m_WAbility.MaxHP = m_Ability.MaxHP + m_AddAbility.HP;
m_WAbility.MaxMP = m_Ability.MaxMP + m_AddAbility.MP;
m_WAbility.AC = MAKEWORD(LOBYTE(m_AddAbility.AC) + LOBYTE(m_Ability.AC), HIBYTE(m_AddAbility.AC) + HIBYTE(m_Ability.AC));
m_WAbility.MAC = MAKEWORD(LOBYTE(m_AddAbility.MAC) + LOBYTE(m_Ability.MAC), HIBYTE(m_AddAbility.MAC) + HIBYTE(m_Ability.MAC));
m_WAbility.DC = MAKEWORD(LOBYTE(m_AddAbility.DC) + LOBYTE(m_Ability.DC), HIBYTE(m_AddAbility.DC) + HIBYTE(m_Ability.DC));
m_WAbility.MC = MAKEWORD(LOBYTE(m_AddAbility.MC) + LOBYTE(m_Ability.MC), HIBYTE(m_AddAbility.MC) + HIBYTE(m_Ability.MC));
m_WAbility.SC = MAKEWORD(LOBYTE(m_AddAbility.SC) + LOBYTE(m_Ability.SC), HIBYTE(m_AddAbility.SC) + HIBYTE(m_Ability.SC));
if (m_wStatusArr[STATE_DEFENCEUP] > 0) // 规绢仿 惑铰
m_WAbility.AC = MAKEWORD(LOBYTE(m_WAbility.AC), HIBYTE(m_WAbility.AC) + 2 + (m_Ability.Level / 7));
if (m_wStatusArr[STATE_MAGDEFENCEUP] > 0) // 付亲仿 惑铰
m_WAbility.MAC = MAKEWORD(LOBYTE(m_WAbility.MAC), HIBYTE(m_WAbility.MAC) + 2 + (m_Ability.Level / 7));
UpdateProcess(this, RM_CHARSTATUSCHANGED, m_sHitSpeed/*wparam*/, m_nCharStatus, 0, 0, NULL);
}
void CPlayerObject::ServerGetMagicKeyChange(int nMagicID, int nUseKey)
{
PLISTNODE pListNode = m_pUserInfo->m_lpTMagicRcd.GetHead();
while (pListNode)
{
_LPTHUMANMAGICRCD lptUserMagicRcd = m_pUserInfo->m_lpTMagicRcd.GetData(pListNode);
if (lptUserMagicRcd)
{
if (lptUserMagicRcd->btMagicID == nMagicID)
{
lptUserMagicRcd->btUseKey = nUseKey;
break;
}
}
pListNode = m_pUserInfo->m_lpTMagicRcd.GetNext(pListNode);
}
}
void CPlayerObject::SendMyMagics()
{
char szEncodeMsg[4096];
int nPos = 0;
_TDEFAULTMESSAGE DefMsg;
int nCnt = m_pUserInfo->EncodeMyMagic(szEncodeMsg, sizeof(szEncodeMsg), nPos);
szEncodeMsg[nPos] = '\0';
fnMakeDefMessage(&DefMsg, SM_SENDMYMAGIC, 0, 0, 0, nCnt);
SendSocket(&DefMsg, szEncodeMsg);
}
void CPlayerObject::SendBagItems()
{
char szEncodeMsg[8096];
int nCnt = m_pUserInfo->m_lpTItemRcd.GetCount();
int nGenCnt = m_pUserInfo->m_lpTGenItemRcd.GetCount();
int nPos = 0;
_TCLIENTITEMRCD tClientItemRcd;
_TDEFAULTMESSAGE DefMsg;
if (nCnt)
{
PLISTNODE pListNode = m_pUserInfo->m_lpTItemRcd.GetHead();
while (pListNode)
{
_LPTUSERITEMRCD lptUserItemRcd = m_pUserInfo->m_lpTItemRcd.GetData(pListNode);
if (lptUserItemRcd)
{
g_pStdItemSpecial[lptUserItemRcd->nStdIndex].GetStandardItem(&tClientItemRcd);
g_pStdItemSpecial[lptUserItemRcd->nStdIndex].GetUpgradeStdItem(&tClientItemRcd, lptUserItemRcd);
memcpy(tClientItemRcd.szMakeIndex, lptUserItemRcd->szMakeIndex, 12);
tClientItemRcd.nDura = lptUserItemRcd->nDura;
tClientItemRcd.nDuraMax = lptUserItemRcd->nDuraMax;
if (strlen(lptUserItemRcd->szPrefixName))
strcpy(tClientItemRcd.tStdItem.szPrefixName, lptUserItemRcd->szPrefixName);
else
ZeroMemory(tClientItemRcd.tStdItem.szPrefixName, sizeof(tClientItemRcd.tStdItem.szPrefixName));
nPos += fnEncode6BitBufA((unsigned char *)&tClientItemRcd, &szEncodeMsg[nPos], sizeof(_TCLIENTITEMRCD), sizeof(szEncodeMsg) - nPos);
szEncodeMsg[nPos++] = '/';
}
pListNode = m_pUserInfo->m_lpTItemRcd.GetNext(pListNode);
}
}
if (nGenCnt)
{
char szVal[5];
ZeroMemory(szVal, sizeof(szVal));
PLISTNODE pListNode = m_pUserInfo->m_lpTGenItemRcd.GetHead();
while (pListNode)
{
_LPTGENERALITEMRCD lptGenItemRcd = m_pUserInfo->m_lpTGenItemRcd.GetData(pListNode);
if (lptGenItemRcd)
{
memcpy(tClientItemRcd.szMakeIndex, lptGenItemRcd->szMakeIndex, 12);
tClientItemRcd.nDura = lptGenItemRcd->nDura;
tClientItemRcd.nDuraMax = lptGenItemRcd->nDuraMax;
g_pStdItemEtc[lptGenItemRcd->nStdIndex].GetStandardItem(&tClientItemRcd);
nPos += fnEncode6BitBufA((unsigned char *)&tClientItemRcd, &szEncodeMsg[nPos], sizeof(_TCLIENTITEMRCD), sizeof(szEncodeMsg) - nPos);
szEncodeMsg[nPos++] = '/';
}
pListNode = m_pUserInfo->m_lpTGenItemRcd.GetNext(pListNode);
}
}
szEncodeMsg[nPos] = '\0';
fnMakeDefMessage(&DefMsg, SM_BAGITEMS, (int)this, 0, 0, nCnt + nGenCnt);
SendSocket(&DefMsg, szEncodeMsg);
}
void CPlayerObject::RecalcLevelAbilitys()
{
int n;
float nLevel = m_Ability.Level;
switch (m_pUserInfo->m_THumanRcd.btJob)
{
case 2: // 档荤
{
m_Ability.MaxHP = 14 + ROUND((nLevel / 6 + 2.5) * nLevel);
m_Ability.MaxMP = 13 + ROUND((nLevel / 8)* 2.2 * nLevel);
m_Ability.MaxWeight = 50 + ROUND((nLevel / 4) * nLevel);
m_Ability.MaxWearWeight = 15 + ROUND((nLevel / 50) * nLevel);
m_Ability.MaxHandWeight = 12 + ROUND((nLevel / 42) * nLevel);
n = (int)nLevel / 7;
m_Ability.DC = MAKEWORD(_MAX(n-1, 0), _MAX(1, n));
m_Ability.MC = 0;
m_Ability.SC = MAKEWORD(_MAX(n-1, 0), _MAX(1, n));
m_Ability.AC = 0;
n = ROUND(nLevel / 6);
m_Ability.MAC = MAKEWORD(n / 2, n + 1);
break;
}
case 1: // 贱荤
{
m_Ability.MaxHP = 14 + ROUND((nLevel / 15 + 1.8) * nLevel);
m_Ability.MaxMP = 13 + ROUND((nLevel / 5 + 2) * 2.2 * nLevel);
m_Ability.MaxWeight = 50 + ROUND((nLevel / 5) * nLevel);
m_Ability.MaxWearWeight = 15 + ROUND((nLevel / 100) * nLevel);
m_Ability.MaxHandWeight = 12 + ROUND((nLevel / 90) * nLevel);
n = (int)nLevel / 7;
m_Ability.DC = MAKEWORD(_MAX(n-1, 0), _MAX(1, n));
m_Ability.MC = MAKEWORD(_MAX(n-1, 0), _MAX(1, n));
m_Ability.SC = 0;
m_Ability.AC = 0;
m_Ability.MAC = 0;
break;
}
case 0: // 傈荤
{
m_Ability.MaxHP = 14 + ROUND((nLevel / 4 + 4) * nLevel);
m_Ability.MaxMP = 11 + (int)(nLevel * 2);
m_Ability.MaxWeight = 50 + ROUND((nLevel / 3) * nLevel);
m_Ability.MaxWearWeight = 15 + ROUND((nLevel / 20) * nLevel);
m_Ability.MaxHandWeight = 12 + ROUND((nLevel / 13) * nLevel);
m_Ability.DC = MAKEWORD(_MAX((int)(nLevel / 7) - 1, 1), _MAX(1, int(nLevel / 5)));
m_Ability.SC = 0;
m_Ability.MC = 0;
m_Ability.AC = MAKEWORD(0, int(nLevel / 7));
m_Ability.MAC = 0;
break;
}
}
if (m_Ability.HP > m_Ability.MaxHP) m_Ability.HP = m_Ability.MaxHP;
if (m_Ability.MP > m_Ability.MaxMP) m_Ability.MP = m_Ability.MaxMP;
}
void CPlayerObject::Initialize()
{
if (!m_pUserInfo) return;
m_dwLatestHitTime = 0;
m_nHitTimeOverCount = 0;
m_nCurrX = m_pUserInfo->m_THumanRcd.nCX;
m_nCurrY = m_pUserInfo->m_THumanRcd.nCY;
m_nDirection = m_pUserInfo->m_THumanRcd.nDirection;
m_pMap = GetMap(m_pUserInfo->m_THumanRcd.szMapName);
memcpy(m_szName, m_pUserInfo->m_szCharName, memlen(m_pUserInfo->m_szCharName));
if (m_pMap)
{
AddProcess(this, RM_LOGON, 0, 0, 0, 0, NULL);
m_pMap->AddNewObject(m_nCurrX, m_nCurrY, OS_MOVINGOBJECT, this);
AddRefMsg(RM_TURN, m_nDirection, m_nCurrX, m_nCurrY, 0, NULL);
m_Ability.Level = m_pUserInfo->m_THumanRcd.szLevel;
m_Ability.Exp = m_pUserInfo->m_THumanRcd.nExp;
m_Ability.MaxExp = NEEDEXPS[m_Ability.Level];
RecalcLevelAbilitys();
RecalcAbilitys();
m_btBright = g_nMirDayTime;
AddProcess(this, RM_ABILITY, 0, 0, 0, 0, NULL);
AddProcess(this, RM_SUBABILITY, 0, 0, 0, 0, NULL);
AddProcess(this, RM_DAYCHANGING, 0, 0, 0, 0, NULL);
AddProcess(this, RM_SENDUSEITEMS, 0, 0, 0, 0, NULL);
AddProcess(this, RM_SENDMYMAGIC, 0, 0, 0, 0, NULL);
// BEGIN : Send Attack Mode Msg
TCHAR wszMsg[128];
char szMsg[128];
LoadString(g_hInst, m_pUserInfo->GetAttackMode() + IDS_ATTACKMODE_ALL, wszMsg, sizeof(wszMsg)/sizeof(TCHAR));
WideCharToMultiByte(CP_ACP, 0, wszMsg, -1, szMsg, sizeof(szMsg), NULL, NULL);
SysMsg(szMsg, 1);
LoadString(g_hInst, IDS_ATTACKMODE_CHGMODE, wszMsg, sizeof(wszMsg)/sizeof(TCHAR));
WideCharToMultiByte(CP_ACP, 0, wszMsg, -1, szMsg, sizeof(szMsg), NULL, NULL);
SysMsg(szMsg, 1);
// END : Send Attack Mode Msg
}
}
/*
void CPlayerObject::SendSocket(_LPTDEFAULTMESSAGE lpDefMsg, char *pszPacket)
{
DWORD dwBytesSends = 0;
_TMSGHEADER MsgHdr;
MsgHdr.nCode = 0xAA55AA55;
MsgHdr.wIdent = GM_DATA;
MsgHdr.wUserGateIndex = m_pUserInfo->m_nUserGateIndex;
MsgHdr.wUserListIndex = m_pUserInfo->m_nUserServerIndex;
MsgHdr.nSocket = m_pUserInfo->m_sock;
if (lpDefMsg)
{
if (pszPacket)
{
int nLength = memlen(pszPacket);
if (nLength >= 256) return; // If pszPacket is too long.
MsgHdr.nLength = sizeof(_TDEFAULTMESSAGE) + nLength;
m_pUserInfo->m_pGateInfo->OverlappedEx[1].DataBuf.len = sizeof(_TMSGHEADER) + MsgHdr.nLength;
memmove(m_pUserInfo->m_pGateInfo->OverlappedEx[1].Buffer, (char *)&MsgHdr, sizeof(_TMSGHEADER));
memmove(&m_pUserInfo->m_pGateInfo->OverlappedEx[1].Buffer[sizeof(_TMSGHEADER)], lpDefMsg, sizeof(_TDEFAULTMESSAGE));
memmove(&m_pUserInfo->m_pGateInfo->OverlappedEx[1].Buffer[sizeof(_TMSGHEADER) + sizeof(_TDEFAULTMESSAGE)], pszPacket, MsgHdr.nLength - sizeof(_TDEFAULTMESSAGE));
m_pUserInfo->m_pGateInfo->OverlappedEx[1].Buffer[m_pUserInfo->m_pGateInfo->OverlappedEx[1].DataBuf.len] = '\0';
}
else
{
MsgHdr.nLength = sizeof(_TDEFAULTMESSAGE);
m_pUserInfo->m_pGateInfo->OverlappedEx[1].DataBuf.len = sizeof(_TMSGHEADER) + MsgHdr.nLength;
memmove(m_pUserInfo->m_pGateInfo->OverlappedEx[1].Buffer, (char *)&MsgHdr, sizeof(_TMSGHEADER));
memmove(&m_pUserInfo->m_pGateInfo->OverlappedEx[1].Buffer[sizeof(_TMSGHEADER)], lpDefMsg, sizeof(_TDEFAULTMESSAGE));
m_pUserInfo->m_pGateInfo->OverlappedEx[1].Buffer[m_pUserInfo->m_pGateInfo->OverlappedEx[1].DataBuf.len] = '\0';
}
}
else
{
int nLen = (memlen(pszPacket) - 1);
MsgHdr.nLength = -(nLen);
m_pUserInfo->m_pGateInfo->OverlappedEx[1].DataBuf.len = sizeof(_TMSGHEADER) + nLen;
memmove(m_pUserInfo->m_pGateInfo->OverlappedEx[1].Buffer, (char *)&MsgHdr, sizeof(_TMSGHEADER));
memmove(&m_pUserInfo->m_pGateInfo->OverlappedEx[1].Buffer[sizeof(_TMSGHEADER)], pszPacket, nLen);
m_pUserInfo->m_pGateInfo->OverlappedEx[1].Buffer[m_pUserInfo->m_pGateInfo->OverlappedEx[1].DataBuf.len] = '\0';
}
m_pUserInfo->m_pGateInfo->OverlappedEx[1].nOvFlag = OVERLAPPED_SEND;
m_pUserInfo->m_pGateInfo->OverlappedEx[1].DataBuf.buf = m_pUserInfo->m_pGateInfo->OverlappedEx[1].Buffer;
WSASend(m_pUserInfo->m_pGateInfo->m_sock, &m_pUserInfo->m_pGateInfo->OverlappedEx[1].DataBuf, 1, &dwBytesSends, 0, (OVERLAPPED *)&m_pUserInfo->m_pGateInfo->OverlappedEx[1], NULL);
}
*/
BOOL CPlayerObject::DoRideHorse(int nDir, int fRideFlag)
{
// if (fRideFlag == m_xAbility.m_fRideHorse)
// {
/* if (m_xAbility.m_fRideHorse)
AddRefMsg(RM_RIDE, 0, 0, 0, 0, NULL);
else
AddRefMsg(RM_RIDE, 1, 0, 0, 0, NULL);
*/
// return TRUE;
// }
return FALSE;
}
void CPlayerObject::MakeFeature()
{
m_tFeature.btGender = m_pUserInfo->GetGenderFeature();
m_tFeature.btWear = m_pUserInfo->GetDressFeature();
m_tFeature.btHair = m_pUserInfo->GetHairFeature();
m_tFeature.btWeapon = m_pUserInfo->GetWeaponFeature();
m_tFeatureEx.btHorse = m_pUserInfo->GetHorseFeatureEx();
m_tFeatureEx.dwHairColor = 0xFFFF;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -