📄 objectmonster.cpp
字号:
{
int nSX, nSY, nTX, nTY;
int nPwr;
m_nDirection = nDir;
AddRefMsg(RM_LIGHTING, 1, m_nCurrX, m_nCurrY, (int)m_pTargetObject, NULL);
if (GetNextPosition(nDir, 1, nSX, nSY))
{
GetNextPosition(nDir, 1, nTX, nTY);
nPwr = LOBYTE(m_WAbility.DC) + rand() % HIBYTE(m_WAbility.DC) - LOBYTE(m_WAbility.DC) + 1;
MagPassThroughMagic(nSX, nSY, nTX, nTY, nDir, nPwr, TRUE);
BreakHolySeize();
}
}
void CLightingZombiObject::Run()
{
if (!m_fIsDead && !m_fIsGhost && m_wStatusArr[POISON_STONE] == 0)
{
if ((GetTickCount() - m_dwSearchEnemyTime > 8000) || ((GetTickCount() - m_dwSearchEnemyTime > 1000) && !m_pTargetObject))
{
m_dwSearchEnemyTime = GetTickCount();
MonsterNormalAttack();
}
if (GetTickCount() - m_dwWalkTime > m_dwNextWalkTime)
{
if (m_pTargetObject)
{
if ((abs(m_nCurrX - m_pTargetObject->m_nCurrX) <= 4) && (abs(m_nCurrY - m_pTargetObject->m_nCurrY) <= 4))
{
if ((abs(m_nCurrX - m_pTargetObject->m_nCurrX) <= 2) && (abs(m_nCurrY - m_pTargetObject->m_nCurrY) <= 2))
{
if (rand() % 3 != 0)
{
CMonsterObject::Run();
return;
}
}
GetBackPosition(m_nTargetX, m_nTargetY);
}
}
}
if (m_pTargetObject)
{
if ((abs(m_nCurrX - m_pTargetObject->m_nCurrX) < 6) && (abs(m_nCurrY - m_pTargetObject->m_nCurrY) < 6))
{
if (GetTickCount() - m_dwHitTime > m_dwNextHitTime)
{
m_dwHitTime = GetTickCount();
LightingAttack(GetNextDirection(m_pTargetObject->m_nCurrX, m_pTargetObject->m_nCurrY));
}
}
}
}
CMonsterObject::Run();
}
/* **************************************************************************************
沸
************************************************************************************** */
void CRonObject::AroundAttack()
{
CWHList<CCharObject*> xTargetList;
m_nDirection = (int)m_btTargetDir;
m_pMap->GetMapObject(m_nCurrX, m_nCurrY, 1, &xTargetList);
if (xTargetList.GetCount())
{
PLISTNODE pListNode = xTargetList.GetHead();
CCharObject* pTargetObject;
while (pListNode)
{
if (pTargetObject = xTargetList.GetData(pListNode))
_Attack(CM_HIT, pTargetObject);
pListNode = xTargetList.RemoveNode(pListNode);
}
}
AddRefMsg(RM_HIT, m_nDirection, m_nCurrX, m_nCurrY, 0, NULL);
}
void CRonObject::Run()
{
if (!m_fIsDead && !m_fIsGhost && m_wStatusArr[POISON_STONE] == 0)
{
if ((GetTickCount() - m_dwSearchEnemyTime > 8000) || ((GetTickCount() - m_dwSearchEnemyTime > 1000) && !m_pTargetObject))
{
m_dwSearchEnemyTime = GetTickCount();
MonsterNormalAttack();
}
if (m_pTargetObject)
{
if ((abs(m_nCurrX - m_pTargetObject->m_nCurrX) < 6) && (abs(m_nCurrY - m_pTargetObject->m_nCurrY) < 6))
{
if (GetTickCount() - m_dwHitTime > m_dwNextHitTime)
{
m_dwHitTime = GetTickCount();
AroundAttack();
}
}
}
}
CMonsterObject::Run();
}
/* **************************************************************************************
窍鞭 穿付
************************************************************************************** */
void CMinorNumaObject::Run()
{
if (!m_fIsDead)
{
if ((GetTickCount() - m_dwSearchEnemyTime > 8000) || ((GetTickCount() - m_dwSearchEnemyTime > 1000) && !m_pTargetObject))
{
m_dwSearchEnemyTime = GetTickCount();
MonsterNormalAttack();
}
}
CMonsterObject::Run();
}
/* **************************************************************************************
坷付 矫府令
************************************************************************************** */
void COmaObject::Run()
{
if (!m_fIsDead && !m_fIsGhost)
{
if ((GetTickCount() - m_dwSearchEnemyTime > 8000) || ((GetTickCount() - m_dwSearchEnemyTime > 1000) && !m_pTargetObject))
{
m_dwSearchEnemyTime = GetTickCount();
MonsterNormalAttack();
}
}
CMonsterObject::Run();
}
/* **************************************************************************************
榜伐(籍厘牢)
************************************************************************************** */
CRockManObject::CRockManObject()
{
// m_dwSearchTick = 2500 + rand() % 1500;
// m_dwSearchTime = GetTickCount();
m_fHideMode = TRUE;
}
void CRockManObject::Run()
{
if (!m_fIsDead && !m_fIsGhost)
{
if (m_fHideMode)
{
if (CheckComeOut(8))
ComeOut();
m_dwWalkTime = GetTickCount() + 1000;
}
else
{
if ((GetTickCount() - m_dwSearchEnemyTime > 8000) || ((GetTickCount() - m_dwSearchEnemyTime > 1000) && !m_pTargetObject))
{
m_dwSearchEnemyTime = GetTickCount();
MonsterNormalAttack();
if (!m_pTargetObject)
ComeDown();
}
}
}
CMonsterObject::Run();
}
/* **************************************************************************************
侥牢檬
************************************************************************************** */
CStickObject::CStickObject()
{
m_dwSearchTick = 2500 + rand() % 1500;
m_fHideMode = TRUE;
}
void CStickObject::Run()
{
if (!m_fIsDead && !m_fIsGhost)
{
if (GetTickCount() - m_dwWalkTime > m_dwNextWalkTime)
{
m_dwWalkTime = GetTickCount();
if (m_fHideMode)
{
if (CheckComeOut(4))
ComeOut();
}
else
{
if (m_pTargetObject)
{
if (abs(m_nCurrX - m_pTargetObject->m_nCurrX) > 4 && abs(m_nCurrY - m_pTargetObject->m_nCurrY) > 4)
{
ComeDown();
return;
}
}
if (GetTickCount() - m_dwHitTime > m_dwNextHitTime)
MonsterNormalAttack();
if (!m_fHideMode)
{
if (AttackTarget())
CMonsterObject::Run();
}
}
}
}
CMonsterObject::Run();
}
/* **************************************************************************************
葛贰 鲍拱(荤锄)
************************************************************************************** */
CSandMobObject::CSandMobObject()
{
m_fHideMode = TRUE;
}
void CSandMobObject::Run()
{
if (!m_fIsDead && !m_fIsGhost)
{
if (GetTickCount() - m_dwWalkTime > m_dwNextWalkTime)
{
m_dwWalkTime = GetTickCount();
if (m_fHideMode)
{
if ((m_WAbility.HP > (m_WAbility.MaxHP / 20) && CheckComeOut(8)))
m_dwAppearStart = GetTickCount();
}
else
{
if ((m_WAbility.HP > 0) && (m_WAbility.HP < (m_WAbility.MaxHP / 20)) && (GetTickCount() - m_dwAppearStart > 3000))
ComeDown();
else if (m_pTargetObject)
{
if (abs(m_nCurrX - m_pTargetObject->m_nCurrX) > 15 && abs(m_nCurrY - m_pTargetObject->m_nCurrY) > 15)
{
ComeDown();
return;
}
}
if (GetTickCount() - m_dwHitTime > m_dwNextHitTime)
MonsterNormalAttack();
if (!m_fHideMode)
{
if (AttackTarget())
{
CMonsterObject::Run();
}
}
}
}
}
CMonsterObject::Run();
}
/* **************************************************************************************
归榜
************************************************************************************** */
CWhiteSkeleton::CWhiteSkeleton()
{
// m_dwSearchTick = 2500 + rand() % 1500;
// m_dwSearchTime = GetTickCount();
m_fIsFirst = TRUE;
m_fHideMode = TRUE;
}
void CWhiteSkeleton::ResetSkeleton()
{
// NextHitTime := 3000 - (SlaveMakeLevel * 600);
// NextWalkTime := 1200 - (SlaveMakeLevel * 250);
m_dwWalkTime = GetTickCount() + 2000;
}
void CWhiteSkeleton::Run()
{
if (m_fIsFirst)
{
m_fIsFirst = FALSE;
m_nDirection = 5;
m_fHideMode = FALSE;
AddRefMsg(RM_DIGUP, m_nDirection, m_nCurrX, m_nCurrY, 0, NULL);
ResetSkeleton();
}
CGenneralMonObject::Run();
}
/* **************************************************************************************
脚荐 (锅脚傈)
************************************************************************************** */
CElfMonster::CElfMonster()
{
m_fNoAttackMode = TRUE;
m_fIsFirst = TRUE;
m_fHideMode = TRUE;
}
void CElfMonster::ResetElfMon()
{
// NextHitTime := 3000 - (SlaveMakeLevel * 600);
// NextWalkTime := 1200 - (SlaveMakeLevel * 250);
m_dwWalkTime = GetTickCount() + 2000;
}
void CElfMonster::AppearNow()
{
m_fIsFirst = FALSE;
m_fHideMode = FALSE;
m_dwWalkTime = GetTickCount() + 800;
/*procedure TElfMonster.AppearNow;
begin
bofirst := FALSE;
HideMode := FALSE;
//SendRefMsg (RM_TURN, Dir, CX, CY, 0, '');
//Appear;
//ResetElfMon;
RecalcAbilitys;
WalkTime := WalkTime + 800; //函脚饶 距埃 掉饭捞 乐澜
end;
*/
}
void CElfMonster::Run()
{
if (m_fIsFirst)
{
m_fIsFirst = FALSE;
m_fHideMode = FALSE;
AddRefMsg(RM_DIGUP, m_nDirection, m_nCurrX, m_nCurrY, 0, NULL);
ResetElfMon();
}
if (m_fIsDead)
{
if (GetTickCount() - m_dwDeathTime > 2 * 1000)
MakeGhost();
}
else
{
BOOL fChangeFace = FALSE;
if (m_pTargetObject)
fChangeFace = TRUE;
if (m_pMasterObject)
{
if (m_pMasterObject->m_pTargetObject)// || m_pMasterObject->m_pLastHiter)
fChangeFace = TRUE;
}
if (fChangeFace)
{
CElfWarriorMonster* pElfWarriorMon = dynamic_cast<CElfWarriorMonster*>(MakeClone(_MONSTER_ELFWARRIOR));
if (pElfWarriorMon)
pElfWarriorMon->AppearNow();
m_pMasterObject = NULL;
KickException();
return;
}
}
CMonsterObject::Run();
}
/* **************************************************************************************
脚荐 (函脚饶)
************************************************************************************** */
CElfWarriorMonster::CElfWarriorMonster()
{
m_fIsFirst = TRUE;
}
void CElfWarriorMonster::ResetElfMon()
{
// NextHitTime := 3000 - (SlaveMakeLevel * 600);
// NextWalkTime := 1200 - (SlaveMakeLevel * 250);
m_dwWalkTime = GetTickCount() + 2000;
}
void CElfWarriorMonster::AppearNow()
{
m_fIsFirst = FALSE;
m_fHideMode = FALSE;
AddRefMsg(RM_DIGUP, m_nDirection, m_nCurrX, m_nCurrY, 0, NULL);
m_dwWalkTime = GetTickCount() + 800;
/*procedure TElfMonster.AppearNow;
begin
bofirst := FALSE;
HideMode := FALSE;
//SendRefMsg (RM_TURN, Dir, CX, CY, 0, '');
//Appear;
//ResetElfMon;
RecalcAbilitys;
WalkTime := WalkTime + 800; //函脚饶 距埃 掉饭捞 乐澜
end;
*/
}
void CElfWarriorMonster::Run()
{
if (m_fIsFirst)
{
m_fIsFirst = FALSE;
m_fHideMode = FALSE;
AddRefMsg(RM_DIGUP, m_nDirection, m_nCurrX, m_nCurrY, 0, NULL);
ResetElfMon();
}
if (m_fIsDead)
{
if (GetTickCount() - m_dwDeathTime > 2 * 1000)
MakeGhost();
}
else
{
BOOL fChangeFace = TRUE;
if (m_pTargetObject)
fChangeFace = FALSE;
if (m_pMasterObject)
{
if (m_pMasterObject->m_pTargetObject)// || m_pMasterObject->m_pLastHiter)
fChangeFace = FALSE;
}
if (fChangeFace)
{
CElfMonster* pElfMon = dynamic_cast<CElfMonster*>(MakeClone(_MONSTER_ELFMONSTER));
if (pElfMon)
{
AddRefMsg(RM_DIGDOWN, m_nDirection, m_nCurrX, m_nCurrY, 0, NULL);
AddRefMsg(RM_CHANGEFACE, 0, (int)this, (int)pElfMon, 0, NULL);
pElfMon->AppearNow();
}
m_pMasterObject = NULL;
KickException();
}
}
CGenneralMonObject::Run();
}
/* **************************************************************************************
魔芭固
************************************************************************************** */
CSpitSpiderMonster::CSpitSpiderMonster()
{
}
void CSpitSpiderMonster::SpitAttack(int nDir)
{
int nDamage;
int nX, nY;
m_nDirection = nDir;
if (HIBYTE(m_WAbility.DC) - LOBYTE(m_WAbility.DC) + 1)
nDamage = LOBYTE(m_WAbility.DC) + rand() % (HIBYTE(m_WAbility.DC) - LOBYTE(m_WAbility.DC) + 1);
else
nDamage = LOBYTE(m_WAbility.DC);
if (nDamage <= 0) return;
AddRefMsg(RM_HIT, m_nDirection, m_nCurrX, m_nCurrY, 0, NULL);
for (int i = 0; i < 4; i++)
{
for (int k = 0; k < 4; k++)
{
if (g_SpitMap[nDir][i][k] == 1)
{
nX = m_nCurrX - 2 + k;
nY = m_nCurrY - 2 + i;
CCharObject* pCharObject = m_pMap->GetObject(nX, nY);
if (pCharObject && pCharObject != this)
{
if (IsProperTarget(pCharObject))
{
if (pCharObject->m_btSpeedPoint)
{
if (rand() % pCharObject->m_btSpeedPoint < m_btHitPoint)
{
nDamage = GetMagStruckDamage(nDamage);
if (nDamage > 0)
{
pCharObject->StruckDamage(nDamage);
pCharObject->AddDelayProcess(pCharObject, RM_STRUCK, nDamage, pCharObject->m_WAbility.HP,
pCharObject->m_WAbility.MaxHP, (int)this, NULL, 300);
/* if BoUsePoison then begin
//眉仿捞 皑家窍绰 刀俊 吝刀 等促.
if Random(20 + cret.AntiPoison) = 0 then
cret.MakePoison (POISON_DECHEALTH, 30, 1); //眉仿捞 皑家
//if Random(2) = 0 then
// cret.MakePoison (POISON_STONE, 5); //付厚
end; */
}
}
}
}
}
}
}
}
}
BOOL CSpitSpiderMonster::AttackTarget()
{
int nTargetDir;
if (m_pTargetObject)
{
if (TargetInSpitRange(nTargetDir))
{
if (GetTickCount() - m_dwHitTime > m_dwNextHitTime)
{
m_dwHitTime = GetTickCount();
m_dwTargetFocusTime = GetTickCount();
SpitAttack(nTargetDir);
BreakHolySeize();
}
return TRUE;
}
else
{
if (m_pTargetObject->m_pMap != m_pMap)
{
m_nTargetX = m_pTargetObject->m_nCurrX;
m_nTargetY = m_pTargetObject->m_nCurrY;
}
else
{
m_pTargetObject = NULL;
m_nTargetX = -1;
m_nTargetY = -1;
}
}
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -