📄 combatsys.cpp
字号:
// CombatSys.cpp: implementation of the CCombatSys class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CombatSys.h"
#include "Char.h"
#include "Map.h"
#include "Menu.h"
#include "Effect.h"
#include "gameproc.h"
using namespace battle;
extern int g_CurrCharStatus;
extern char tool_ID_EFFECT_TEST;
extern bool IsAttackAble(LPCHARACTER pTarget);
extern void DoLButtonDown();
static bool g_aDirection[8] =
{
false, true, true, true,
true, false, false, false
};
///////////////////////////////////////////////////////////////////////////////
// Construction/Destruction
///////////////////////////////////////////////////////////////////////////////
CCombatSys::CCombatSys()
{
}
CCombatSys::~CCombatSys()
{
}
///////////////////////////////////////////////////////////////////////////////
// Public Method
///////////////////////////////////////////////////////////////////////////////
int CCombatSys::Action(LPCHARACTER pCaster)
{
//const int nCombat = pCaster->nActiveCombat; //Thralas
switch(pCaster->nActiveCombat.GetDecrypted())//switch (nCombat)
{
case LIGHTNING_BOOM: return ACTION_ATTACK_BONG_DOWN;
case THUNDER_BLOW: return ACTION_ATTACK_ONESWORD2;
case LIGHTNING_SHOCK: return ACTION_ATTACK_BONG_JJIRKI;
case THUNDER_STRIKE: return ACTION_ATTACK_ONESWORD1;
case GROUND_ATTACK: return ACTION_ATTACK_BONG_DOWN;
case BLOOD_WILL: return ACTION_ATTACK_ONESWORD1;
case SWORD_N_ROSES: return ACTION_ATTACK_ONESWORD2;
case HORN_OF_ICEBERG: return ACTION_ATTACK_BONG_JJIRKI;
case CHARGING: return ACTION_ATTACK_BONG_DOWN;
case DOUBLE_ATTACK: return ACTION_ATTACK_ONESWORD2;
case DARK_BLADE: return ACTION_ATTACK_ONESWORD1;
case LIGHTNING_EXTREME: return ACTION_ATTACK_BONG_ROUND; // 030513 kyo
case EARTH_EXTREME: return ACTION_ATTACK_BONG_DOWN;
case DARK_EXTREME: return ACTION_ATTACK_BONG_ROUND;
case WIND_EXTREME: return ACTION_ATTACK_BONG_ROUND;
}
return ACTION_NONE;
}
void CCombatSys::Effect(MAGICLIST* pEffect)
{
LPCHARACTER pCaster = pEffect->lpChar_Own;
LPCHARACTER pTarget = pEffect->lpChar_Target;
if (pCaster == NULL || pTarget == NULL) return;
const int nCombat = pEffect->magicSerial;
if (pEffect->magicSubNum == 8)
{
switch (nCombat)
{
case BLOOD_EARTH:
{
break;
}
default:
{
::InsertMagic(pCaster, pTarget,
pEffect->next_Effect, 9,
pEffect->x, pEffect->y,
pEffect->tarx, pEffect->tary);
break;
}
}
}
else
{
switch (nCombat)
{
case MULTIPLE_FIRE:
{
switch (pCaster->nActiveLevel.GetDecrypted())
{
case 1:
case 2: EffectShoot(pEffect, 3); break;
case 3: EffectShoot(pEffect, 5); break;
}
break;
}
case ICING_BLAST:
{
switch (pCaster->nActiveLevel.GetDecrypted())
{
case 1:
case 2: EffectMulti(pEffect, 3); break;
case 3: EffectMulti(pEffect, 5); break;
}
break;
}
case LIGHTNING_EXTREME:
{
//EffectSpread(pEffect);
EffectSpreadIrregular(pEffect, g_ClientTime, 5, 7, 2 ); //5鸥老埃拜 2锅 // 030328 kyo
break;
}
case EARTH_EXTREME:
{
const int nMax = pCaster->nActiveLevel.GetDecrypted() + 1;
EffectQuake(pEffect, nMax, g_ClientTime);
break;
}
case FIRE_EXTREME:
case ICE_EXTREME:
{
EffectSpread(pEffect);
break;
}
case DARK_EXTREME:
{
const int nMax = pCaster->nActiveLevel.GetDecrypted() + 1;
EffectQuake(pEffect, nMax, g_ClientTime);
break;
}
default:
{
::InsertMagic(pCaster, pTarget,
pEffect->next_Effect,
pEffect->magicSubNum,
pEffect->x, pEffect->y,
pEffect->tarx, pEffect->tary,
false, 0, false,
pEffect->magic_Runtime);
break;
}
}
}
}
bool CCombatSys::Ready(LPCHARACTER pCaster, int nCombat, int nReady)
{
switch (pCaster->nCurrentAction)
{ //< CSD-030423
case ACTION_ATTACK_BOW:
case ACTION_THROW:
case ACTION_SITDOWN:
{
return false;
}
} //> CSD-030423
// 焊咯瘤绰 付过捞 绝绊 付过 某胶泼捞 啊瓷茄 版快
if (g_lpML == NULL || pCaster->ready_Magic == 0 || pCaster->ready_Magic == 2)
{
if (Hero == pCaster)
{
const int nNumber = nCombat - 100;
if (nNumber >= 114 && nNumber <= 150)
{
OUTPUT(MK_NORMAL, lan->OutputMessage(1, 60), CombatSkillExplain[nNumber].LocalName);
}
}
pCaster->excute_MagicNum = nCombat; // 霖厚吝牢 付过狼 绊蜡锅龋甫 悸泼
pCaster->ready_Magic = 1; // 某胶泼 吝牢 惑怕 悸泼
pCaster->start_Casting = g_ClientTime + 3000;
pCaster->end_Casting = g_ClientTime + nReady; // 某胶泼 肯丰矫埃 悸泼
// 傈捧胶懦 霖厚 悼累
const int nType = g_lpMT[nCombat].order_Type;
const int nCast = 500 + (nType/10) + (nType%10);
::InsertMagic(pCaster, pCaster, nCast, 0, 0, 0, 0, 0);
return true;
}
if (Hero == pCaster)
{
OUTPUT(MK_WARNING, lan->OutputMessage(1, 59));
}
return false;
}
bool CCombatSys::Apply(LPCHARACTER pCaster, LPCHARACTER pTarget, int nCombat, int nX, int nY, bool bFail)
{
if (!IsAttackAble(pTarget)) // 磷绢 乐芭唱 扁磊 葛靛老 版快
{
goto COMBAT_FIAL; // 付过 角菩
}
if (pTarget == NULL) pTarget = pCaster;
if (Hero == pCaster || Hero == pTarget) // 030516 kyo 困摹捞悼 刚历 付过狼 己傍咯何甫 汞绰促.
{
const int nNumber = nCombat - 100;
if (nNumber >= 114 && nNumber <= 150)
{
if (bFail)
{ // 付过捞 角菩茄 版快扼搁
OUTPUT(MK_NORMAL, lan->OutputMessage(1, 62), CombatSkillExplain[nNumber].LocalName);
goto COMBAT_FIAL;
}
if (pCaster == pTarget)
{
OUTPUT(MK_NORMAL, lan->OutputMessage(1, 63), pCaster->name,
CombatSkillExplain[nNumber].LocalName);
}
else
{
OUTPUT(MK_NORMAL, lan->OutputMessage(1, 64), pCaster->name,
pTarget->name,
CombatSkillExplain[nNumber].LocalName);
}
}
}
// 矫傈磊啊 某胶泼捞 场唱绊 付过 惯荤 霖厚登绢 乐阑矫 肚绰 甘 抛胶飘甫 困茄 皋春急琶矫
if ((g_lpMT[nCombat].excute_Type == 0 && pCaster->ready_Magic == 3) ||
pCaster->ready_Magic == 2 || tool_ID_EFFECT_TEST == 1)
{
DIRECTION dir = pCaster->direction;
if ((g_lpMT[nCombat].appoint_Type == 1 && pCaster == pTarget) || g_lpMT[nCombat].appoint_Type == 0)
{
dir = pCaster->direction;
}
else
{
::ChangeDirection(&dir, pCaster->x, pCaster->y, nX, nY); // 秦寸 努腐瘤痢栏肺 规氢 傈券
}
switch (nCombat)
{
case LIGHTNING_SHIELD:
case BURNING_BLOODY: // 030415 kyo
case ICE_SHIELD:
case LIGHTNING_BOOM:
case GROUND_ATTACK:
case THUNDER_BLOW:
case LIGHTNING_SHOCK:
case THUNDER_STRIKE:
case STONE_ARMOR:
case CRITICAL_HIDING:
case HORN_OF_ICEBERG:
case CHARGING:
case TWISTER:
case TYBERN_GIFT:
case ACUQUIRE_DARK: // 030415 kyo
case DARK_BLADE:
case MULTIPLE_FIRE:
case ICING_BLAST:
case SIMUNIAN_BOSOM:
case LIGHTNING_EXTREME: //030513 kyo
case EARTH_EXTREME:
case FIRE_EXTREME:
case DARK_EXTREME:
case ICE_EXTREME:
case WIND_EXTREME:
{
::CharDoAni(pCaster, dir, ACTION_BATTLE_NONE);
break;
}
case WHILWIND:
{ //< CSD-TW-030701
::CharDoAni(pCaster, dir, ACTION_MAGIC_CASTING);
break;
} //> CSD-TW-030701
case BLOOD_EARTH:
case POISONING_NOVA:
{
ClearCrash();
::CharDoAni(pCaster, dir, ACTION_MAGIC_BEFORE);
break;
}
}
if (!AddEffect(pCaster, pTarget, nCombat, nX, nY, bFail))
{
OUTPUT(MK_WARNING, lan->OutputMessage(1, 61));
goto COMBAT_FIAL;
}
}
// 付过 霖厚惑怕俊辑 付过角力备泅 窜拌肺 傈捞 悸泼
if (pCaster->ready_Magic == 2)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -