📄 battlemgr.cpp
字号:
if (!IsMagic(nMagic))
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 29));
return;
}
// 付过 矫傈 Packet 傈价
t_packet packet;
packet.h.header.type = CMD_MAGIC_CASTING;
packet.h.header.size = sizeof(t_client_magic_casting);
packet.u.magic.client_magic_casting.nMagic = nMagic;
::QueuePacket(&packet, 1);
} //> CSD-TW-030606
void CBattleMgr::SendMagicExecute(BYTE nMagic, LPCHARACTER pTarget, int nX, int nY)
{ //< CSD-TW-030606
if (pTarget == NULL) pTarget = Hero;
// 付过 荤侩饶 5檬 捞郴俊绰 促矫 某胶泼 且荐 绝档废 汲沥
Hero->castStartingTime = g_ClientTime + 4000;
// 捞悼 厘家 付过牢 版快 捞悼啊瓷 咯何 八荤
switch (nMagic)
{
case PHASING:
case MEMORIZING_LOCATION:
case TELEPORT:
case MULTI_PORT:
case TOWN_PORTAL:
case VAMPIRE_DODGE:
{
if (pTarget->sprno != 50 && !::IsMovable(nX>>5, nY>>5))
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 26));
return;
}
break;
}
}
// 付过 楷加 荤侩捞 力茄
int nOffset = 0;
switch (nMagic)
{
case AUTHORITY_CHARISNUMEN:
{
nOffset = 2000;
break;
}
default:
{
nOffset = 800;
break;
}
}
if (Hero->condition&CON_FROZEN)
{
nOffset *= 2;
}
if (IsDelay(nOffset))
{ // 付过 矫累 Packet 傈价
t_packet packet;
packet.h.header.type = CMD_MAGIC_EXECUTE;
packet.h.header.size = sizeof(t_client_magic_execute);
packet.u.magic.client_magic_execute.nMagic = nMagic;
packet.u.magic.client_magic_execute.idTarget = WORD(pTarget->id);
packet.u.magic.client_magic_execute.nX = nX;
packet.u.magic.client_magic_execute.nY = nY;
::QueuePacket(&packet, 1);
}
} //> CSD-TW-030606
void CBattleMgr::SendMagicResult(WORD wdEffect, LPCHARACTER pCaster, WORD idTarget, int nX, int nY)
{ //< CSD-031007
if (!IsIgnoreBattle())
{ // 霸烙芒捞 劝己拳 登瘤 臼栏搁 付过 搬苞甫 焊郴瘤 臼澜
return;
}
LPCHARACTER pTarget = ::ReturnCharacterPoint(idTarget);
if (pCaster == NULL || pTarget == NULL) return;
t_packet packet;
if (pCaster == Hero)
{
switch (wdEffect)
{ //< CSD-031014
case THROW_ARROW:
case THROW_KNIFE:
case THROW_FIRE_ARROW:
case THROW_ICE_KNIFE:
case THROW_SNOW_BALL:
case THROW_WATER_BALL:
case THROW_BIG_GULP:
case MULTIPLE_FIRE:
case FLEET_MISSILE:
case CONVERTING_ARMOR:
case FIRE_EXTREME:
case ICING_BLAST:
case SHARK_MISSILE:
case ICE_EXTREME:
{
packet.h.header.type = CMD_THROW_RESULT;
packet.h.header.size = sizeof(t_client_throw_result);
packet.u.strike.client_throw_result.idTarget = idTarget;
packet.u.strike.client_throw_result.nX = nX;
packet.u.strike.client_throw_result.nY = nY;
packet.u.strike.client_throw_result.bWanted = pTarget->hunter_target;
break;
}
case ITEM_EFFECT_FIRE:
case ITEM_EFFECT_ICE:
case ITEM_EFFECT_LIGHTNING:
{
packet.h.header.type = CMD_EFFECT_RESULT;
packet.h.header.size = sizeof(t_client_effect_result);
packet.u.strike.client_effect_result.wdEffect = wdEffect;
packet.u.strike.client_effect_result.idTarget = idTarget;
packet.u.strike.client_effect_result.nX = nX;
packet.u.strike.client_effect_result.nY = nY;
packet.u.strike.client_effect_result.bWanted = pTarget->hunter_target;
break;
}
default:
{
switch (GetIndex(wdEffect))
{
case 1:
{
switch (wdEffect)
{
case SCORCHER:
case FLAME_PILLAR:
case FLAME_POUR:
case ICE_BREATH2: // 030415 kyo
{
if (!pTarget->bCrash)
{
pTarget->bCrash = true;
break;
}
return;
}
}
packet.h.header.type = CMD_MAGIC_RESULT;
packet.h.header.size = sizeof(t_client_magic_result);
packet.u.magic.client_magic_result.nMagic = static_cast<BYTE>(wdEffect);
packet.u.magic.client_magic_result.idTarget = idTarget;
packet.u.magic.client_magic_result.nX = nX;
packet.u.magic.client_magic_result.nY = nY;
packet.u.magic.client_magic_result.bWanted = pTarget->hunter_target;
break;
}
case 2:
{
switch (wdEffect)
{
case FIRE_WALL:
case ICE_WALL:
case BLOOD_EARTH:
{
if (!pTarget->bCrash)
{
pTarget->bCrash = true;
break;
}
return;
}
}
packet.h.header.type = CMD_COMBAT_RESULT;
packet.h.header.size = sizeof(t_client_combat_result);
packet.u.combat.client_combat_result.nSkill = static_cast<BYTE>(wdEffect);
packet.u.combat.client_combat_result.idTarget = idTarget;
packet.u.combat.client_combat_result.nX = nX;
packet.u.combat.client_combat_result.nY = nY;
packet.u.combat.client_combat_result.bWanted = pTarget->hunter_target;
break;
}
}
break;
}
} //> CSD-031014
if (::IsApplyPK(wdEffect))
{
::CheckNPCPk(Hero->id, idTarget);
}
::QueuePacket(&packet, 1);
}
else
{
switch (wdEffect)
{
case SCORCHER:
case FLAME_PILLAR:
case FLAME_POUR:
case ICE_BREATH2: // 030415 kyo
{
if (!pTarget->bCrash)
{
pTarget->bCrash = true;
}
break;
}
}
}
switch (pCaster->sprno)
{
case 0:
case 1:
{
break;
}
default:
{
if (pTarget == Hero)
{
packet.h.header.type = CMD_MAGIC_RESULT_D;
packet.h.header.size = sizeof(t_magic_result_d);
packet.u.magic.magic_result_d.nMagic = static_cast<BYTE>(wdEffect);
packet.u.magic.magic_result_d.idCaster = WORD(pCaster->id);
packet.u.magic.magic_result_d.idTarget = idTarget;
packet.u.magic.magic_result_d.nX = nX;
packet.u.magic.magic_result_d.nY = nY;
::QueuePacket(&packet, 1);
}
break;
}
}
} //> CSD-031007
void CBattleMgr::SendCombatClear()
{ //< CSD-TW-030606
t_packet packet;
packet.h.header.type = CMD_COMBAT_CLEAR;
packet.h.header.size = sizeof(t_client_combat_clear);
packet.u.combat.client_combat_clear.nType = 0;
::QueuePacket(&packet, 1);
} //> CSD-TW-030606
void CBattleMgr::SendCombatObtain(LPCHARACTER pMaster, BYTE nPara, BYTE nX, BYTE nY, BYTE nPoint)
{
POS pos;
// 傈捧胶懦 器牢磐 裙垫 酒捞袍 困摹 备窍扁
::SetItemPos(INV, nPara, nY, nX, &pos);
// 傈捧胶懦 器牢磐 裙垫 酒捞袍 犬牢
ItemAttr& rItemAttr = InvItemAttr[nPara][nY][nX];
if (rItemAttr.item_no == 3105)
{ // Packet 傈价
t_packet packet;
packet.h.header.type = CMD_COMBAT_OBTAIN;
packet.h.header.size = sizeof(t_client_combat_obtain);
packet.u.combat.client_combat_obtain.idMaster = WORD(pMaster->id);
packet.u.combat.client_combat_obtain.nPara = nPara;
packet.u.combat.client_combat_obtain.nPosX = nX;
packet.u.combat.client_combat_obtain.nPosY = nY;
packet.u.combat.client_combat_obtain.nPoint = nPoint;
::QueuePacket(&packet, 1);
}
}
void CBattleMgr::SendCombatRequest(LPCHARACTER pMaster)
{
if (pMaster == NULL) return;
// Packet 傈价
t_packet packet;
packet.h.header.type = CMD_COMBAT_REQUEST;
packet.h.header.size = sizeof(t_client_combat_request);
packet.u.combat.client_combat_request.idMaster = WORD(pMaster->id);
::QueuePacket(&packet, 1);
}
void CBattleMgr::SendCombatLearn(BYTE nCombat, LPCHARACTER pMaster)
{
if (pMaster == NULL) return;
// Packet 傈价
t_packet packet;
packet.h.header.type = CMD_COMBAT_LEARN;
packet.h.header.size = sizeof(t_client_combat_learn);
packet.u.combat.client_combat_learn.idMaster = WORD(pMaster->id);
packet.u.combat.client_combat_learn.nSkill = nCombat;
packet.u.combat.client_combat_learn.nPoint = 1;
::QueuePacket(&packet, 1);
}
void CBattleMgr::SendCombatSelect(BYTE nCombat)
{ //< CSD-TW-030623 : 傈捧 胶懦 荤侩 啊瓷荐 檬扁拳
if (!::TimeCheck(m_dwSwitchDelay))
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
return;
}
else
{
m_dwSwitchDelay = g_ClientTime + 1000;
}
// 某胶泼悼救俊绰 急琶且荐 绝澜
if (!::TimeCheck(Hero->end_Casting))
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
return;
}
// 焊炼拌凯苞 焊龋拌凯狼 付过荤侩 饶 老沥矫埃 饶 傈捧胶懦 荤侩 阂啊肺 汲沥
if (!::TimeCheck(Hero->continue_RunMagic))
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
return;
}
// 捞傈 付过 荤侩饶 5檬 版苞 饶 促矫 傈捧胶懦 啊瓷
if (!::TimeCheck(Hero->castStartingTime))
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
return;
}
LPCHARACTER pCaster = ::ReturnCharacterPoint(Hero->id);
if (pCaster == NULL) return;
// 瘤楷矫埃 檬扁拳
ClearDelay();
// 傈捧 胶懦 荤侩 啊瓷荐 檬扁拳
if (!IsCombat(nCombat))
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 61));
return;
}
// Packet 傈价
t_packet packet;
packet.h.header.type = CMD_COMBAT_SELECT;
packet.h.header.size = sizeof(t_client_combat_select);
packet.u.combat.client_combat_select.nCombat = nCombat;
::QueuePacket(&packet, 1);
} //> CSD-TW-030623
void CBattleMgr::SendCombatAttack(BYTE nCombat, LPCHARACTER pTarget, int nX, int nY)
{ //< CSD-TW-030623
if (!::TimeCheck(m_dwSwitchDelay))
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
return;
}
else
{
m_dwSwitchDelay = g_ClientTime + 1000;
}
CCombatSys* pCombat = (CCombatSys*)GetBattle(2);
// 傈捧胶懦 楷加 荤侩 八荤
int nOffset = pCombat->GetCastContinue(nCombat)*1000;
if (Hero->condition&CON_FROZEN)
{
nOffset *= 2;
}
if (Hero->continue_RunMagic > g_ClientTime)
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
return;
}
// 捞傈 付过 荤侩饶 5檬 版苞 饶 促矫 傈捧胶懦 啊瓷
if(g_ClientTime < Hero->castStartingTime)
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
return;
}
if (Hero->continue_Time > g_ClientTime)
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
return;
}
if (!IsDelay(nOffset))
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 69));
return;
}
if (pCombat->IsEnable(nCombat))
{
if (pTarget == NULL)
{
pTarget = Hero;
}
if (nCombat == CHARGING)
{
::SendModifyPosition(Hero);
}
// 付过 矫累 Packet 傈价
t_packet packet;
packet.h.header.type = CMD_COMBAT_ATTACK;
packet.h.header.size = sizeof(t_client_combat_attack);
packet.u.combat.client_combat_attack.nSkill = nCombat;
packet.u.combat.client_combat_attack.idTarget = WORD(pTarget->id);
packet.u.combat.client_combat_attack.nX = nX;
packet.u.combat.client_combat_attack.nY = nY;
::QueuePacket(&packet, 1);
}
} //> CSD-TW-030623
void CBattleMgr::SendCombatResult(BYTE nCombat, LPCHARACTER pCaster, LPCHARACTER pTarget, int nX, int nY)
{
if (pCaster == Hero)
{
t_packet packet;
packet.h.header.type = CMD_COMBAT_RESULT;
packet.h.header.size = sizeof(t_client_combat_result);
packet.u.combat.client_combat_result.nSkill = nCombat;
packet.u.combat.client_combat_result.idTarget = WORD(pTarget->id);
packet.u.combat.client_combat_result.nX = nX;
packet.u.combat.client_combat_result.nY = nY;
packet.u.combat.client_combat_result.bWanted = pTarget->hunter_target;
if (::IsApplyPK(nCombat)) ::CheckNPCPk(Hero->id, pTarget->id);
::QueuePacket(&packet, 1);
}
}
void CBattleMgr::SendModifyPosition(LPCHARACTER pTarget)
{ //< CSD-021107
if (pTarget->pathcount > 2 || pTarget->moveFlag == TRUE)
{ // 捞悼吝捞菌栏搁
pTarget->pathcount = 0; // 老窜 肛苗辑霸 茄促.
pTarget->moveFlag = 0;
switch (pTarget->sprno)
{
case 0:
case 1:
{
::SendModifyPosition(pTarget);
break;
}
default:
{
::SendModifyPositionNPC(pTarget->id);
break;
}
}
}
} //> CSD-021107
void CBattleMgr::SendTameCommand(LPCHARACTER pCaster, LPCHARACTER pTarget)
{
if (pCaster == NULL || pTarget == NULL) return;
LPCHARACTER pMaster = pCaster; // 林牢
LPCHARACTER pTame = pCaster->lpNext; // 鸥捞怪等 NPC
while (pTame)
{
if (strcmp(pMaster->name, pTame->HostName) == 0)
{ //< CSD-021024
t_packet packet;
packet.h.header.type = CMD_TAME_COMMAND;
packet.h.header.size = sizeof(t_tame_command);
packet.u.tame_command.cmd = LC_TAME_ATTACK;
strcpy(packet.u.tame_command.mybaby, pTame->name);
strcpy(packet.u.tame_command.toname, pTarget->name);
::QueuePacket(&packet, 1);
} //> CSD-021024
pTame = pTame->lpNext;
}
}
void CBattleMgr::RecvCharInfoTactic(t_char_info_tactic* pPacket)
{ //< CSD-TW-030624
const WORD wKind = pPacket->wKind;
const DWORD dwExperience = pPacket->dwExperience;
const BYTE nStep = pPacket->nStep;
const int nLevel = ::GetLeveByExp(nStep, dwExperience);
if (wKind >= 0 && wKind < 13)
{
Hero->aStepInfo[wKind + TAC_INDEX] = nStep;
SCharacterData.TacticsExp[wKind] = dwExperience;
SCharacterData.SkillId[wKind + 88] = nLevel;
SCharacterData.TacticsExpNext[wKind] = NPC_Lev_Ref[nLevel].nMaxExp;
}
} //> CSD-TW-030624
void CBattleMgr::RecvBattleMessage(t_battle_message* pPacket)
{
const string strMsg = ::lan->OutputMessage(pPacket->nKind, pPacket->nNumber);
Message(pPacket->nType, strMsg.c_str());
}
void CBattleMgr::RecvBattleDamage(t_battle_damage* pPacket)
{ //< CSD-021019 : hp悼扁拳啊 嘎瘤 臼澜
LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
if (pTarget == NULL) return;
const int nDamage = pPacket->nDamage;
if (nDamage < 0)
{
switch (pPacket->nKind)
{
case 0: ::InsertMagic(pTarget, pTarget, 603, 0, 0, 0, pTarget->x, pTarget->y); break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -