📄 objectplayer.cpp
字号:
m_tFeatureEx.dwWearColor = 0xFFFF;
}
BOOL CPlayerObject::CheckTakeOnItem(WORD wWhere, _LPTUSERITEMRCD lpTItemRcd)
{
TCHAR wszMsg[64];
char szMsg[64];
int nNeed = g_pStdItemSpecial[lpTItemRcd->nStdIndex].wNeed;
int nNeedLevel = g_pStdItemSpecial[lpTItemRcd->nStdIndex].wNeedLevel;;
int nWeight = g_pStdItemSpecial[lpTItemRcd->nStdIndex].wWeight;
if (wWhere == U_DRESS)
{
if (lpTItemRcd->szMakeIndex[0] != 'B') return FALSE;
if (g_pStdItemSpecial[lpTItemRcd->nStdIndex].wStdMode == 10) // 巢磊渴
{
if (m_tFeature.btGender != 0)
{
LoadString(g_hInst, IDS_MALE_WEAR, wszMsg, sizeof(wszMsg)/sizeof(TCHAR));
WideCharToMultiByte(CP_ACP, 0, wszMsg, -1, szMsg, sizeof(szMsg), NULL, NULL);
SysMsg(szMsg, 0);
return FALSE;
}
}
else if (g_pStdItemSpecial[lpTItemRcd->nStdIndex].wStdMode == 11) // 咯磊渴
{
if (m_tFeature.btGender != 1)
{
LoadString(g_hInst, IDS_FEMALE_WEAR, wszMsg, sizeof(wszMsg)/sizeof(TCHAR));
WideCharToMultiByte(CP_ACP, 0, wszMsg, -1, szMsg, sizeof(szMsg), NULL, NULL);
SysMsg(szMsg, 0);
return FALSE;
}
}
}
if ((wWhere == U_WEAPON) || (wWhere == U_RIGHTHAND))
{
if (m_WAbility.MaxHandWeight < nWeight)
{
LoadString(g_hInst, IDS_NOTENOUGH_VALUE, wszMsg, sizeof(wszMsg)/sizeof(TCHAR));
WideCharToMultiByte(CP_ACP, 0, wszMsg, -1, szMsg, sizeof(szMsg), NULL, NULL);
SysMsg(szMsg, 0);
return FALSE;
}
}
else
{
if (m_WAbility.MaxWearWeight < nWeight + m_pUserInfo->CalcWearWeightEx(wWhere))
{
LoadString(g_hInst, IDS_NOTENOUGH_WEIGHT, wszMsg, sizeof(wszMsg)/sizeof(TCHAR));
WideCharToMultiByte(CP_ACP, 0, wszMsg, -1, szMsg, sizeof(szMsg), NULL, NULL);
SysMsg(szMsg, 0);
return FALSE;
}
}
switch (nNeed)
{
case 0:
if (m_WAbility.Level < nNeedLevel) goto _NOTENOUGH_VALUE;
break;
case 1:
if (HIBYTE(m_WAbility.DC) < nNeedLevel) goto _NOTENOUGH_VALUE;
break;
case 2:
if (HIBYTE(m_WAbility.MC) < nNeedLevel) goto _NOTENOUGH_VALUE;
break;
case 3:
if (HIBYTE(m_WAbility.SC) < nNeedLevel) goto _NOTENOUGH_VALUE;
break;
}
return TRUE;
_NOTENOUGH_VALUE:
LoadString(g_hInst, IDS_NOTENOUGH_VALUE, wszMsg, sizeof(wszMsg)/sizeof(TCHAR));
WideCharToMultiByte(CP_ACP, 0, wszMsg, -1, szMsg, sizeof(szMsg), NULL, NULL);
SysMsg(szMsg, 0);
return FALSE;
}
void CPlayerObject::ServerGetTakeOnGenItem(WORD wWhere, char *pszItemIndex)
{
_LPTGENERALITEMRCD lpTGenItemRcd = NULL;
_TDEFAULTMESSAGE DefMsg;
if (m_pUserInfo->m_lpTGenItemRcd.GetCount())
{
PLISTNODE pListNode = m_pUserInfo->m_lpTGenItemRcd.GetHead();
while (pListNode)
{
lpTGenItemRcd = m_pUserInfo->m_lpTGenItemRcd.GetData(pListNode);
if (memcmp(pszItemIndex, lpTGenItemRcd->szMakeIndex, _MAKEITEMINDEX) == 0)
{
memcpy(m_pUserInfo->m_THumanRcd.szTakeItem[wWhere], lpTGenItemRcd->szMakeIndex, _MAKEITEMINDEX);
RecalcAbilitys();
LONG lFeature = GetFeatureToLong();
AddProcess(this, RM_ABILITY, 0, 0, 0, 0, NULL);
AddProcess(this, RM_SUBABILITY, 0, 0, 0, 0, NULL);
fnMakeDefMessage(&DefMsg, SM_TAKEON_OK, lFeature, 0, 0, 0);
SendSocket(&DefMsg, NULL);
AddRefMsg(RM_FEATURECHANGED, 0, lFeature, 0, 0, NULL);
return;
}
pListNode = m_pUserInfo->m_lpTGenItemRcd.GetNext(pListNode);
}
}
fnMakeDefMessage(&DefMsg, SM_TAKEON_FAIL, 2, 0, 0, 0);
SendSocket(&DefMsg, NULL);
}
void CPlayerObject::ServerGetTakeOnItem(WORD wWhere, char *pszItemIndex)
{
_TDEFAULTMESSAGE DefMsg;
_LPTUSERITEMRCD lpTItemRcd = m_pUserInfo->GetItem(pszItemIndex);
if (lpTItemRcd)
{
if (CheckTakeOnItem(wWhere, lpTItemRcd))
{
memcpy(m_pUserInfo->m_THumanRcd.szTakeItem[wWhere], lpTItemRcd->szMakeIndex, _MAKEITEMINDEX);
switch (wWhere)
{
case U_DRESS:
m_tFeature.btWear = m_pUserInfo->GetDressFeature();
break;
case U_WEAPON:
m_tFeature.btWeapon = m_pUserInfo->GetWeaponFeature();
break;
}
RecalcAbilitys();
LONG lFeature = GetFeatureToLong();
AddProcess(this, RM_ABILITY, 0, 0, 0, 0, NULL);
AddProcess(this, RM_SUBABILITY, 0, 0, 0, 0, NULL);
fnMakeDefMessage(&DefMsg, SM_TAKEON_OK, lFeature, 0, 0, 0);
SendSocket(&DefMsg, NULL);
AddRefMsg(RM_FEATURECHANGED, 0, lFeature, 0, 0, NULL);
return;
}
else
{
fnMakeDefMessage(&DefMsg, SM_TAKEON_FAIL, 1, 0, 0, 0);
SendSocket(&DefMsg, NULL);
return;
}
}
fnMakeDefMessage(&DefMsg, SM_TAKEON_FAIL, 2, 0, 0, 0);
SendSocket(&DefMsg, NULL);
}
void CPlayerObject::ServerGetTakeOffItem(WORD wWhere, char *pszItemIndex)
{
_LPTUSERITEMRCD lpTItemRcd = NULL;
_TDEFAULTMESSAGE DefMsg;
// PLISTNODE pListNode = m_pUserInfo->m_lpTItemRcd.GetHead();
// while (pListNode)
// {
// lpTItemRcd = m_pUserInfo->m_lpTItemRcd.GetData(pListNode);
if (memcmp(m_pUserInfo->m_THumanRcd.szTakeItem[wWhere], pszItemIndex, _MAKEITEMINDEX) == 0)
{
ZeroMemory(m_pUserInfo->m_THumanRcd.szTakeItem[wWhere], _MAKEITEMINDEX);
memcpy(m_pUserInfo->m_THumanRcd.szTakeItem[wWhere], "0", 2);
switch (wWhere)
{
case U_DRESS:
m_tFeature.btWear = m_pUserInfo->GetDressFeature();
break;
case U_WEAPON:
m_tFeature.btWeapon = m_pUserInfo->GetWeaponFeature();
break;
}
RecalcAbilitys();
LONG lFeature = GetFeatureToLong();
AddProcess(this, RM_ABILITY, 0, 0, 0, 0, NULL);
AddProcess(this, RM_SUBABILITY, 0, 0, 0, 0, NULL);
fnMakeDefMessage(&DefMsg, SM_TAKEOFF_OK, lFeature, 0, 0, 0);
SendSocket(&DefMsg, NULL);
AddRefMsg(RM_FEATURECHANGED, 0, lFeature, 0, 0, NULL);
}
else
{
fnMakeDefMessage(&DefMsg, SM_TAKEOFF_FAIL, 1, 0, 0, 0);
SendSocket(&DefMsg, NULL);
}
}
void CPlayerObject::SendMapName()
{
if (m_pMap)
{
_TDEFAULTMESSAGE DefMsg;
char szEncodeMsg[256];
fnMakeDefMessage(&DefMsg, SM_MAPDESCRIPTION, 0, 0, 0, 0);
int nPos = fnEncode6BitBufA((unsigned char *)m_pMap->m_szMapTextName, szEncodeMsg, memlen(m_pMap->m_szMapTextName) - 1, sizeof(szEncodeMsg));
szEncodeMsg[nPos] = '\0';
SendSocket(&DefMsg, szEncodeMsg);
}
}
void CPlayerObject::SendNewMap()
{
if (m_pMap)
{
_TDEFAULTMESSAGE DefMsg;
char szEncodeMsg[256];
fnMakeDefMessage(&DefMsg, SM_NEWMAP, (int)this, m_nCurrX, m_nCurrY, MAKEWORD(DayBright(), m_pMap->m_btSeries));
int nPos = fnEncode6BitBufA((unsigned char *)m_pMap->m_szMapName, szEncodeMsg, memlen(m_pMap->m_szMapName) - 1, sizeof(szEncodeMsg));
szEncodeMsg[nPos] = '\0';
SendSocket(&DefMsg, szEncodeMsg);
}
}
BYTE CPlayerObject::DayBright()
{
int n;
// begin
// if PEnvir.Darkness then n := 1
// else
if (m_btBright == 1)
n = 0;
else if (m_btBright == 3)
n = 1;
else
n = 2;
/* if PEnvir.DayLight then n := 0; */
return n;
}
void CPlayerObject::Run()
{
if (RestoreHealSpell())
Die();
// 家券 坷宏璃飘 八荤
if (m_xSlaveObjList.GetCount())
{
PLISTNODE pListNode = m_xSlaveObjList.GetHead();
while (pListNode)
{
CCharObject* pCharObject = m_xSlaveObjList.GetData(pListNode);
if (pCharObject)
{
if (pCharObject->m_fIsDead || pCharObject->m_fIsGhost || pCharObject->m_pMasterObject != this)
pListNode = m_xSlaveObjList.RemoveNode(pListNode);
else
pListNode = m_xSlaveObjList.GetNext(pListNode);
}
}
}
CCharObject::Run();
}
WORD CPlayerObject::GetThisCharColor()
{
return _CHAT_COLOR3;
}
void CPlayerObject::ServerGetButch(CCharObject* pCharObject, int nX, int nY, int nDir)
{
if ((abs(nX - m_nCurrX) <= 2) && (abs(nY - m_nCurrY) <= 2))
{
if (m_pMap->IsValidObject(nX, nY, 2, pCharObject))
{
CAnimalObject* pAnimalObject = dynamic_cast<CAnimalObject*>(pCharObject);
if (pAnimalObject)
{
if (pAnimalObject->m_fIsDead && !pAnimalObject->m_fSkeleton)
{
int n = 5 + rand() % 16;
int m = 100 + rand() % 201;
pAnimalObject->m_nMeatQuality -= n;
pAnimalObject->m_nBodyLeathery -= m;
if (pAnimalObject->m_nMeatQuality < 0)
pAnimalObject->m_nMeatQuality = 0;
if (pAnimalObject->m_nBodyLeathery <= 0)
{
// if (animal.RaceServer >= RC_ANIMAL) and (animal.RaceServer < RC_MONSTER) then begin //荤娇鞍捞 绊扁甫林绰 巴父, 秦榜肺 函窃
// animal.BoSkeleton := TRUE;
// animal.ApplyMeatQuality;
// animal.SendRefMsg (RM_SKELETON, animal.Dir, animal.CX, animal.CY, 0, '')
// end;
pAnimalObject->m_fSkeleton = TRUE;
pAnimalObject->AddRefMsg(RM_SKELETON, pAnimalObject->m_nDirection, pAnimalObject->m_nCurrX, pAnimalObject->m_nCurrY, 0, NULL);
// if (!pAnimalObject->TakeCretBagItems())
// SysMag("酒公巴档 掘瘤 给沁嚼聪促.", 0);
pAnimalObject->m_nBodyLeathery = 50;
}
m_dwDeathTime = GetTickCount();
}
}
}
m_nDirection = nDir;
}
AddRefMsg(RM_BUTCH, nDir, m_nCurrX, m_nCurrY, 0, NULL);
}
BOOL CPlayerObject::SpellXY(int nKey, int nTargetX, int nTargetY, int nTargetObj)
{
if (!m_pUserInfo) return FALSE;
_LPTHUMANMAGICRCD lptMagicRcd = m_pUserInfo->GetMagicRcdByKey(nKey);
if (lptMagicRcd)
{
CMagicInfo* pMagicInfo = GetMagicInfo(lptMagicRcd->btMagicID);
if (pMagicInfo)
{
int nSpellPoint = pMagicInfo->GetSpellPoint(lptMagicRcd->btLevel);
switch (lptMagicRcd->btMagicID)
{
case _SKILL_ERGUM:
{
if (!m_pUserInfo->m_fLongHitSkill)
{
m_pUserInfo->AllowLongHitSkill(TRUE);
SendSocket(NULL, "+LNG");
}
else
{
m_pUserInfo->AllowLongHitSkill(FALSE);
SendSocket(NULL, "+ULNG");
}
return TRUE;
}
case _SKILL_BANWOL:
{
if (!m_pUserInfo->m_fWideHitSkill)
{
m_pUserInfo->AllowWideHitSkill(TRUE);
SendSocket(NULL, "+WID");
}
else
{
m_pUserInfo->AllowWideHitSkill(FALSE);
SendSocket(NULL, "+UWID");
}
return TRUE;
}
case _SKILL_FIRESWORD:
{
if (m_pUserInfo->AllowFireHitSkill())
{
DamageSpell(nSpellPoint);
HealthSpellChanged();
SendSocket(NULL, "+FIR");
}
return TRUE;
}
}
if (m_WAbility.MP >= nSpellPoint)
{
DamageSpell(nSpellPoint);
HealthSpellChanged();
GetNextDirection(nTargetX, nTargetY);
switch (lptMagicRcd->btMagicID)
{
case _SKILL_HANGMAJINBUB:
case _SKILL_DEJIWONHO:
case _SKILL_FIRECHARM:
case _SKILL_FIRE:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -