📄 magicstate.cpp
字号:
// MagicState.cpp: implementation of the CMagicState class.
//
//////////////////////////////////////////////////////////////////////
#include "..\stdafx.h"
#include "MagicState.h"
#include "..\LowerLayers\MyLog.h"
///////////////////////////////////////////////////////////////////////////////
// Construction/Destruction
///////////////////////////////////////////////////////////////////////////////
CMagicState::CMagicState()
{
Clear();
}
///////////////////////////////////////////////////////////////////////////////
// Public Method
///////////////////////////////////////////////////////////////////////////////
void CMagicState::Clear()
{ //< CSD-TW-030623
ClearTransMap(); // 厘家 扁撅 沥焊 檬扁拳
ClearMagic(); // 付过 锅龋 檬扁拳
ClearActiveState();
ClearPassiveState();
ClearRecoveryState();
m_nAttack = 0; // 拱府利 傍拜 雀荐
m_nNature = NAT_NORMAL; // 己龙 惑怕 檬扁拳
m_nState = CON_NORMAL; // 付过 惑怕 檬扁拳
m_bTamed = false; // 抛捞怪 咯何 檬扁拳
m_bSummon = false; // 家券 阁胶磐 咯何 檬扁拳
m_wPoisonedPoint = 0; // 吝刀登菌阑 锭 HP啊 皑家登绰 剧 檬扁拳
m_wPoisonedCount = 0; // 吝刀登菌阑 锭 HP啊 皑家登绰 檬 檬扁拳
m_nLifeUp = 0; // Life 刘啊樊
m_dwAttack = 0; // 拱府利 傍拜 矫埃 檬扁拳
m_dwCasting = 0; // 付过 矫傈 矫累 矫埃 檬扁拳
m_dwContinue = 0; // 付过 矫傈 蜡瘤 矫埃 檬扁拳
m_bLock = true; // 付过 矫傈 汲沥 檬扁拳
apShort.Clear(); // 窜芭府 拱府利 傍拜仿
apMiddle.Clear(); // 吝芭府 拱府利 傍拜仿
apLong.Clear(); // 厘芭府 拱府利 傍拜仿
dpShort.Clear(); // 窜芭府 拱府利 规绢仿
dpMiddle.Clear(); // 吝芭府 拱府利 规绢仿
dpLong.Clear(); // 厘芭府 拱府利 规绢仿
dpFire.Clear(); // 阂拌凯 傍拜付过 规绢仿
dpIce.Clear(); // 倔澜拌凯 傍拜付过 规绢仿
dpElect.Clear(); // 傈拜拌凯 傍拜付过 规绢仿
dpHoly.Clear(); // 脚仿拌凯 傍拜付过 规绢仿
dpCurse1.Clear(); // 历林 1拌凯 付过 规绢仿
dpCurse2.Clear(); // 历林 2拌凯 付过 规绢仿
dpCurse3.Clear(); // 历林 3拌凯 付过 规绢仿
dpCurse4.Clear(); // 历林 4拌凯 付过 规绢仿
dpCurse5.Clear(); // 历林 5拌凯 付过 规绢仿
dpFreeze.Clear(); // CSD-021216 : 倔覆 历林 付过 规绢仿
amplify.Clear(); // 傍拜 付过 单固瘤
speedUp.Clear(); // 捞悼加档 刘啊
speedDown.Clear(); // 捞悼加档 皑家
avoid.Clear(); // 雀乔啦
agility.Clear(); // 刮酶己
dwCurse1 = 0; // 历林 1拌凯 付过 惑怕
dwCurse2 = 0; // 历林 2拌凯 付过 惑怕
dwCurse3 = 0; // 历林 3拌凯 付过 惑怕
dwCurse4 = 0; // 历林 4拌凯 付过 惑怕
dwFreeze = 0; // CSD-021024 : 倔覆 历林 付过 惑怕
dwNormalProtect = 0; // 老馆 焊龋拌凯 付过 惑怕
dwSpecialProtect = 0; // 漂荐 焊龋拌凯 付过 惑怕
dwExceptProtect = 0; // 抗寇 焊龋拌凯 付过 惑怕 (葛电 付过捞 角菩)
dwAttackDelay = 0; // 傍拜 加档 皑家(某腐磐啊 傍拜 且荐 乐绰 咯何)
dwDontMove = 0; // 捞悼捞 登瘤 臼澜
dwDontAttack = 0; // 老馆利牢 傍拜捞 登瘤 臼澜
dwDontCasting = 0; // 付过 某胶泼捞 登瘤 臼澜
dwDontMiss = 0; // 葛电 拱府利 傍拜苞 付过捞 己傍
dwBlocking = 0; // 寇何客 瞒窜等 惑怕
dwLight = 0; // 林困俊 蝴阑 灌洒绰 惑怕
dwMagicDamageToMana = 0; // 惑措狼 傍拜 付过阑 付唱甫 家葛窍咯 阜酒晨
dwReturnMagic = 0; // 付过狼 瓤苞甫 矫傈磊俊霸 登倒覆
dwTransparency = 0; // 某腐磐啊 捧疙窍霸 凳
dwLifeUp = 0; // 老沥 矫埃悼救 Life啊 棵扼皑
dwStrikeReflect = 0; // CSD-021015 : 拱府傍拜 单固瘤 馆荤
dwMagicReflect = 0; // CSD-021015 : 付过傍拜 单固瘤 馆荤
dwUpDivineMana = 0; // 030415 kyo
for (int i = 0; i < NAT_NORMAL; ++i)
{
dwNature[i] = 0;
}
} //> CSD-TW-030623
void CMagicState::Recovery(DWORD dwNow)
{ //< CSD-TW-030623 : 蜡瘤矫埃捞 瘤抄 付过俊 措窍咯 惑怕甫 雀汗
// 付过 惑怕 八荤
if (apShort.IsContinue(dwNow) == false) apShort.Clear();
if (apMiddle.IsContinue(dwNow) == false) apMiddle.Clear();
if (apLong.IsContinue(dwNow) == false) apLong.Clear();
if (dpShort.IsContinue(dwNow) == false) dpShort.Clear();
if (dpMiddle.IsContinue(dwNow) == false) dpMiddle.Clear();
if (dpLong.IsContinue(dwNow) == false) dpLong.Clear();
if (dpFire.IsContinue(dwNow) == false) dpFire.Clear();
if (dpIce.IsContinue(dwNow) == false) dpIce.Clear();
if (dpElect.IsContinue(dwNow) == false) dpElect.Clear();
if (dpHoly.IsContinue(dwNow) == false) dpHoly.Clear();
if (dpCurse1.IsContinue(dwNow) == false) dpCurse1.Clear();
if (dpCurse2.IsContinue(dwNow) == false) dpCurse2.Clear();
if (dpCurse3.IsContinue(dwNow) == false) dpCurse3.Clear();
if (dpCurse4.IsContinue(dwNow) == false) dpCurse4.Clear();
if (dpCurse5.IsContinue(dwNow) == false) dpCurse5.Clear();
if (dpFreeze.IsContinue(dwNow) == false) dpFreeze.Clear();
if (amplify.IsContinue(dwNow) == false) amplify.Clear();
if (speedUp.IsContinue(dwNow) == false) speedUp.Clear();
if (speedDown.IsContinue(dwNow) == false) speedDown.Clear();
if (avoid.IsContinue(dwNow) == false) avoid.Clear();
if (agility.IsContinue(dwNow) == false) agility.Clear();
if (dwNormalProtect < dwNow) dwNormalProtect = 0;
if (dwSpecialProtect < dwNow) dwSpecialProtect = 0;
if (dwExceptProtect < dwNow) dwExceptProtect = 0;
if (dwAttackDelay < dwNow) dwAttackDelay = 0;
if (dwDontMove < dwNow) dwDontMove = 0;
if (dwDontAttack < dwNow) dwDontAttack = 0;
if (dwDontCasting < dwNow) dwDontCasting = 0;
if (dwDontMiss < dwNow) dwDontMiss = 0;
if (dwBlocking < dwNow) dwBlocking = 0;
if (dwLight < dwNow) dwLight = 0;
if (dwTransparency < dwNow) dwTransparency = 0;
if (dwMagicDamageToMana < dwNow) dwMagicDamageToMana = 0;
if (dwReturnMagic < dwNow) dwReturnMagic = 0;
if (dwLifeUp < dwNow) dwLifeUp = 0;
if (dwStrikeReflect < dwNow) dwStrikeReflect = 0;
if (dwMagicReflect < dwNow) dwMagicReflect = 0;
if (dwUpDivineMana < dwNow) dwUpDivineMana = 0;
for (int i = 0; i < NAT_NORMAL; ++i)
{
if (dwNature[i] < dwNow)
{
dwNature[i] = 0;
m_nNature = NAT_NORMAL;
}
}
if (dwCombatState < dwNow) dwCombatState = 0;
if (dwCombatRecovery < dwNow) dwCombatRecovery = 0;
} //> CSD-TW-030623
bool CMagicState::CheckAttack(BYTE nCount, DWORD dwNow)
{
if (m_dwAttack < dwNow)
{
m_dwAttack = dwNow;
m_nAttack = 0;
}
else
{
if (m_nAttack >= nCount)
{
return false;
}
++m_nAttack;
}
return true;
}
bool CMagicState::CheckStart(BYTE nMagic, DWORD dwNow)
{ //< CSD-TW-030606
switch (Magic_Ref[nMagic].magic_Type)
{
case 0:
case 9: return false;
}
if (m_dwCasting > dwNow)
{
return false;
}
// 拳堪寒牢 版快 蜡瘤 矫埃 汲沥
if (nMagic == FIRE_WALL)
{
m_dwFireWall = dwNow + Magic_Ref[nMagic].continue_Time;
}
// 倔澜寒牢 版快 蜡瘤 矫埃 汲沥
if (nMagic == ICE_WALL)
{
m_dwIceWall = dwNow + Magic_Ref[nMagic].continue_Time;
}
m_nMagic = nMagic; // 矫傈且 付过 锅龋 汲沥
m_dwCasting = dwNow + DELAY; // 付过 矫傈 矫累 矫埃
m_dwContinue = dwNow + GetCastContinue(nMagic); // 某胶泼 蜡瘤 矫埃 汲沥
m_bLock = true; // 付过 矫傈 汲沥
return true;
} //> CSD-TW-030606
bool CMagicState::CheckDoing(BYTE nMagic, DWORD dwNow)
{ //
switch (Magic_Ref[nMagic].Excute_Type)
{
case 0: // 茄锅 矫傈俊 某胶泼 蜡瘤 矫埃悼救 付过 荤侩
{
if (m_dwContinue < dwNow)
{ // 蜡瓤茄 付过 矫傈 啊瓷 矫埃牢瘤 八荤
return false;
}
break;
}
case 1: // 茄锅 矫傈俊 茄锅 付过 荤侩
{
if (m_bLock == false)
{ // 矫傈阑 沁绰瘤 八荤
return false;
}
break;
}
default: return false;
}
m_nMagic = nMagic; // 荤侩且 付过 锅龋 汲沥
return true;
}
bool CMagicState::CheckEnd(BYTE nMagic, DWORD dwNow)
{ //
// 拳堪寒 蜡瘤 矫埃 八荤
if (nMagic == FIRE_WALL && m_dwFireWall < dwNow)
{
return false;
}
// 倔澜寒 蜡瘤 矫埃 八荤
if (nMagic == ICE_WALL && m_dwIceWall < dwNow)
{
return false;
}
m_nMagic = nMagic; // 荤侩且 付过 锅龋 汲沥
return true;
}
bool CMagicState::CheckDelay(BYTE nMagic, DWORD dwNow)
{ // 蜡瓤茄 付过 矫傈 啊瓷 矫埃牢瘤 八荤
if (m_dwCasting > dwNow)
{ // 蜡瓤茄 付过 矫傈 啊瓷 矫埃牢瘤 八荤
return false;
}
m_nMagic = nMagic; // 荤侩且 付过 锅龋 汲沥
m_dwCasting = dwNow + GetCastContinue(nMagic); // 某胶泼 蜡瘤 矫埃 汲沥
return true;
}
bool CMagicState::CheckCombat(BYTE nCombat, DWORD dwNow)
{
if (dwCombatState > dwNow)
{ // 蜡瓤茄 付过 矫傈 啊瓷 矫埃牢瘤 八荤
return false;
}
return true;
}
void CMagicState::InitCurse()
{ //< CSD-021024 : 历林拌凯 付过 惑怕俊 措茄 檬扁拳
dwCurse1 = 0;
dwCurse2 = 0;
dwCurse3 = 0;
dwCurse4 = 0;
dwFreeze = 0;
} //> CSD-021024
void CMagicState::ClearCurse(BYTE nType)
{
switch (nType)
{
case 1:
{
dwCurse1 = 0;
dwDontCasting = 0;
dwDontAttack = 0;
dwBlocking = 0;
DelState(CON_CURSE|CON_DAZE|CON_STONE);
break;
}
case 2:
{ //< CSD-021024
dwCurse2 = 0;
speedDown.Clear();
DelState(CON_SLOW);
break;
} //> CSD-021024
case 3:
{
dwCurse3 = 0;
dwCurse3 = 0;
m_wPoisonedPoint = 0;
DelState(CON_POISON);
break;
}
case 4:
{
dwCurse4 = 0;
DelState(CON_DARKNESS);
break;
}
case 6:
{ //< CSD-021024
dwFreeze = 0;
dwAttackDelay = 0;
DelState(CON_FROZEN);
break;
} //> CSD-021024
}
}
void CMagicState::ApplyCurse(BYTE nType, BYTE nState, DWORD dwTime)
{ //< CSD-021024 : 历林拌凯 付过 惑怕肺 利侩
switch (nType)
{
case 1: dwCurse1 = dwTime; AddState(nState); break;
case 2: dwCurse2 = dwTime; AddState(nState); break;
case 3: dwCurse3 = dwTime; AddState(nState); break;
case 4: dwCurse4 = dwTime; AddState(nState); break;
case 6: dwFreeze = dwTime; AddState(nState); break;
default: return;
}
} //> CSD-021024
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -