📄 npc.cpp
字号:
}
}
else
{
m_pAssistSkill = NULL;
}
// ----------------------------------------------------------------------------
// 历林 胶懦
// ----------------------------------------------------------------------------
if( pBaseNPC->wCURSESKILL )
{
if(NULL == m_pCurseSkill)
{
m_pCurseSkill = new CEnchant;
}
m_pCurseSkill->Clear_Skill();
if( !m_pCurseSkill->ReadSkill( pBaseNPC->wCURSESKILL ))
{
delete m_pCurseSkill;
m_pCurseSkill = NULL;
}
}
else
{
m_pCurseSkill = NULL;
}
// ----------------------------------------------------------------------------
// 磷看阑锭 唱坷绰 胶懦
// ----------------------------------------------------------------------------
if( pBaseNPC->wONKILLSKILL )
{
if(NULL == m_pOnKillSkill)
{
m_pOnKillSkill = new CEnchant;
}
m_pOnKillSkill->Clear_Skill();
m_pOnKillSkill->ReadSkill( pBaseNPC->wONKILLSKILL );
}
else
{
m_pOnKillSkill = NULL;
}
// ----------------------------------------------------------------------------
// 傍拜 罐阑锭 惯悼登绰 胶懦
// ----------------------------------------------------------------------------
if( pBaseNPC->wONATTACKSKILL )
{
if(NULL == m_pOnAttackSkill)
{
m_pOnAttackSkill = new CEnchant;
}
m_pOnAttackSkill->Clear_Skill();
m_pOnAttackSkill->ReadSkill( pBaseNPC->wONATTACKSKILL );
}
else
{
m_pOnAttackSkill = NULL;
}
// ----------------------------------------------------------------------------
// 鸥烙 胶懦
// ----------------------------------------------------------------------------
if( pBaseNPC->wTIMESKILL )
{
if(NULL == m_pTimeSkill)
{
m_pTimeSkill = new CEnchant;
}
m_pTimeSkill->Clear_Skill();
m_pTimeSkill->ReadSkill( pBaseNPC->wTIMESKILL );
}
else
{
m_pTimeSkill = NULL;
}
//}
m_nGold = pBaseNPC->iGOLD ;
m_iMinGold = pBaseNPC->iMINGOLD ;
//
// Preminum
//
#ifdef DEF_PREMINUM
m_nFreeExp = pBaseNPC->nFREEEXP;
m_nFreeGold = pBaseNPC->nFREEGOLD;
m_nFreeMinGold = pBaseNPC->nFREEGOLDMIN;
#endif
m_dwAttackTime = timeGetTime();
return true;
}
////////////////////////////////////////////////////////////////////////////////////////
// Monster甫 悼累 矫糯 (NPC惑怕喊肺 框流 捞档废 父惦)
//
// - 阁胶磐狼 惑怕 (STATUS DIAGRAM累己)
//
////////////////////////////////////////////////////////////////////////////////////////
void NPC::Action( int & pTurnNum )
{
//
// UNIQUIE MONSTER 汗蓖 & TIME SKILL
//
//
if( ( m_nClassType == MONSTER_UNIQUE ) || ( m_nClassType == MONSTER_ZONEBOSS ) )
{
// 蜡聪农 阁胶磐啊 悼累且 鞘夸 绝栏搁
if(false == bIsUniqueAction()) return ;
}
switch( m_nStatus )
{
//
// 磷篮 惑怕 (Monaster狼 积己 矫埃阑 函版窃)
//
case STATUS_DEAD:
case STATUS_PKDEAD:
{
DeadAction() ;
}
break;
// --------------------------------------------------------------------------------
//
// --------------------------------------------------------------------------------
case STATUS_FOLLOW:
{
MoveTo(m_pStrategicTarget) ;
if(m_bIsSpirit == false && g_pMap->IsSafeZone( m_pStrategicTarget->m_nMapLayer, m_pStrategicTarget->m_Tile))
{
SuddenDeath() ;
g_pServer->PacketSend_NPCSummonDead(((PlayerInfo *) m_pStrategicTarget)->m_pSocketFD, this );
}
}
break;
// --------------------------------------------------------------------------------
//
// --------------------------------------------------------------------------------
case STATUS_TELEPORT:
{
if(m_bIsSpirit == false && g_pMap->IsSafeZone( m_pStrategicTarget->m_nMapLayer, m_pStrategicTarget->m_Tile))
{
SuddenDeath() ;
g_pServer->PacketSend_NPCSummonDead(((PlayerInfo *) m_pStrategicTarget)->m_pSocketFD, this );
break;
}
TeleportTo(m_pStrategicTarget) ;
}
break;
// --------------------------------------------------------------------------------
// 措扁 惑怕
// --------------------------------------------------------------------------------
case STATUS_STAY:
{
// ------------------------------------------------------------------------
// 家券 阁胶磐绰 傍拜且 NPC甫 茫澜
// ------------------------------------------------------------------------
if( bFindTarget() ) return;
// ------------------------------------------------------------------------
// 傈帆俊 蝶弗 汲沥
// ------------------------------------------------------------------------
switch( m_nStrategy )
{
case STRATEGY_ROAMING:
{
m_ptPoints[DESTINATION] = RandomSelectRoamingArea( m_ptPoints[0] );
}
break;
}
m_nStatus = STATUS_NORMALMOVE;
m_nStatusLevel = STATLVL_NORMAL;
}
break;
// --------------------------------------------------------------------------------
// 酒捞袍 凛扁 葛靛 (眠饶 MONSTER STEAL备泅 矫 荤侩凳)
// --------------------------------------------------------------------------------
case STATUS_STEAL:
{
/*
//酒捞袍捞 绝芭唱 酒聪搁 促弗镑栏肺 埃促.
if(!m_pTarget->IsItem())
{
m_nStatus = STATUS_STAY;
m_nStatusLevel = STATLVL_CALM;
return;
}
//芭府啊 1 捞窍啊 登搁 酒捞袍阑 凛绰促.
if(GetDistance(m_pTarget) <= 1)
{
//酒捞袍阑 家芭茄促. 弊府绊 措扁茄促澜 促澜阑 扁促赴促.
m_pTarget->Delete();
m_nStatus = STATUS_STAY;
m_nStatusLevel = STATLVL_CALM;
return;
}
else
{
//芭府啊 钢搁 捞悼茄促.
MoveTo(m_pTarget);
}
*/
}
break;
// --------------------------------------------------------------------------------
// 捞悼 MODE 捞悼 葛靛绰 捞悼 傈帆俊 蝶扼 促福促.
// --------------------------------------------------------------------------------
case STATUS_NORMALMOVE:
{
NormalMove() ;
}
break;
// --------------------------------------------------------------------------------
// 傍拜捞 绝绰 捞悼 MODE 捞悼 葛靛绰 捞悼 傈帆俊 蝶扼 促福促.
// --------------------------------------------------------------------------------
case STATUS_MOVE:
{
// ------------------------------------------------------------------------
// 傈帆俊 蝶弗 捞悼
// ------------------------------------------------------------------------
switch( m_nStrategy )
{
// ------------------------------------------------------------------------
// 痢 飞
// ------------------------------------------------------------------------
case STRATEGY_OCCUPATION:
// 格钎俊 档崔沁栏搁 瘤挪促.
if( IsDistanceRange( m_ptPoints[0] , 2 ) )
{
m_nStrategy = STRATEGY_ROAMING;
m_nStatus = STATUS_STAY;
m_nStatusLevel = STATLVL_CALM;
m_ptPoints[0] = m_Tile;
}
else //促澜 瘤痢俊 档馒窍瘤 臼疽栏骨肺 拌加 框流咯具茄促.
MoveTo( m_ptPoints[m_nStepNow] );
break;
case STRATEGY_PROTECT:
// ----------------------------------------------------------------
// 父老 眠利 措惑捞 磷菌促搁 硅雀 傈帆栏肺 函版
// ----------------------------------------------------------------
if( m_pStrategicTarget == NULL || m_pStrategicTarget->IsDead() )
{
m_nStrategy = STRATEGY_ROAMING;
m_nStatus = STATUS_STAY;
m_nStatusLevel = STATLVL_CALM;
return;
}
// ----------------------------------------------------------------
// - 焊龋 措惑狼 林函栏肺 捞悼窃
// - 焊龋 阁胶磐狼 林函 瘤开阑 公累困肺 瘤沥饶 捞悼
// ----------------------------------------------------------------
if( !IsDistanceRange( m_pStrategicTarget->m_Tile, 4) )
{
int nRandMove = rand() % 8;
_POINT_TILE MoveTile;
MoveTile.x = m_pStrategicTarget->m_Tile.x + _MONSTERSLAVE_TABLE_[nRandMove].x;
MoveTile.y = m_pStrategicTarget->m_Tile.y + _MONSTERSLAVE_TABLE_[nRandMove].y;
MoveTo( MoveTile );
}
else
{
bFindTarget();
}
if(m_dwSummoner && (m_bIsSpirit == false) && g_pMap->IsSafeZone( m_pStrategicTarget->m_nMapLayer, m_pStrategicTarget->m_Tile))
{
SuddenDeath() ;
g_pServer->PacketSend_NPCSummonDead(((PlayerInfo *) m_pStrategicTarget)->m_pSocketFD, this );
}
}
}
break;
// --------------------------------------------------------------------------------
// 傍拜 MODE
//
// - 辟芭府 傍拜 / 盔芭府 傍拜 Monster备盒
// - 盔芭府 傍拜牢 版快 1 荤恩父 傍拜 窍档废 父惦
// --------------------------------------------------------------------------------
case STATUS_COUNTERATTACK: // 馆 拜
case STATUS_ATTACK: // 傍 拜
{
if( ( m_nClassType == MONSTER_UNIQUE ) || ( m_nClassType == MONSTER_ZONEBOSS ) )
UniqueMonsterAttack();
else
MonsterAttack(pTurnNum);
}
break;
case STATUS_HELP:
{
Skill_Enchant(m_pAssistSkill);
}
break;
// --------------------------------------------------------------------------------
// 档噶 Mode
// --------------------------------------------------------------------------------
case STATUS_FLEE:
{
// ------------------------------------------------------------------------
// 惑措啊 唱俊霸 利狼甫 焊捞绊 乐促. 弊矾搁 档噶埃促.
// 2003.08.05 Serve Down
// ------------------------------------------------------------------------
if( m_pTarget &&
IsAttackRange( m_pTarget))
{
FleeFrom( m_pTarget );
}
else
{
ClearTarget();
}
}
break;
// --------------------------------------------------------------------------------
// 焊龋 葛靛
// --------------------------------------------------------------------------------
/*
case STATUS_PROTECT:
//俊呈瘤啊 0 捞窍捞芭唱 按眉啊 家芭登芭唱 橇肺咆飘 平捞 老沥 矫埃阑 逞芭唱
//惑措啊 档噶 葛靛俊辑 秦瘤登搁 焊龋葛靛甫 秦力茄促.
if( m_pGuardTarget == NULL ||
!m_pGuardTarget->IsAlive() ||
m_nProtectTick> m_nIntegrity ||
m_pGuardTarget->m_nStatus != STATUS_FLEE)
{
m_pGuardTarget = NULL;
m_nStatus = STATUS_STAY;
m_nStatusLevel = STATLVL_CALM;
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -