📄 battlemgr.cpp
字号:
if (SCharacterData.nCharacterHP <= 0)
{
SCharacterData.nCharacterHP = 1; //辑滚俊辑绰
}
if (SCharacterData.nCharacterHP > SCharacterData.nCharacterMAXHP)
{
SCharacterData.nCharacterHP = SCharacterData.nCharacterMAXHP;
}
if (SCharacterData.nCharacterMP < 0)
{
SCharacterData.nCharacterMP = 0;
}
if (SCharacterData.nCharacterMP > SCharacterData.nCharacterMAXMP)
{
SCharacterData.nCharacterMP = SCharacterData.nCharacterMAXMP;
}
}
SetViewType(pTarget);
pTarget->hp += pPacket->nLife;
if (pTarget->hp <= 0) pTarget->hp = 1;
if (pTarget->hp > pTarget->hpmax) pTarget->hp = pTarget->hpmax;
pTarget->mp += pPacket->nMana;
if (pTarget->mp < 0) pTarget->mp = 0;
if (pTarget->mp > pTarget->mpmax) pTarget->mp = pTarget->mpmax;
if (pPacket->nLife < 0) ShowAnimation(ANI_STROKE, pTarget);
break;
}
case HIT_AND_ALIVE:
{
if (pTarget == Hero)
{
SCharacterData.nCharacterHP += pPacket->nLife;
SCharacterData.nCharacterMP += pPacket->nMana;
SCharacterData.condition = CON_NORMAL;
if (SCharacterData.nCharacterHP > SCharacterData.nCharacterMAXHP)
{
SCharacterData.nCharacterHP = SCharacterData.nCharacterMAXHP;
}
if (SCharacterData.nCharacterMP > SCharacterData.nCharacterMAXMP)
{
SCharacterData.nCharacterMP = SCharacterData.nCharacterMAXMP;
}
}
pTarget->hp += pPacket->nLife;
pTarget->mp += pPacket->nMana;
pTarget->condition = CON_NORMAL;
pTarget->viewtype = VIEWTYPE_NORMAL_;
pTarget->dieani = 0;
pTarget->blood_Set = false;
if (pTarget==Hero) ::PlayListAutoSounds(2408, 0, 0, 0); // LTS SOUND
else
{
int distx=pTarget->x-Hero->x;
int disty=pTarget->y-Hero->y;
::PlayListAutoSounds(2408, distx, disty, 0);
}
if (pTarget->hp > pTarget->hpmax) pTarget->hp = pTarget->hpmax;
if (pTarget->mp > pTarget->mpmax) pTarget->mp = pTarget->mpmax;
if (pTarget->changeActionFlag == 1) pTarget->changeActionFlag=0;
ShowAnimation(ANI_NONE, pTarget);
break;
}
}
ShowNumber(pPacket->nLife, pTarget);
} //> CSD-TW-030606
void CBattleMgr::RecvCombatInit(t_combat_init* pPacket)
{ //< CSD-TW-030606
LPCHARACTER pMaster = ::ReturnCharacterPoint(pPacket->idMaster);
if (pMaster == NULL)
{
return;
}
// 傈捧胶懦 檬扁拳
switch (pPacket->nType)
{
case ACTIVE_COMBAT:
{
pMaster->nActiveCombat = 0;
pMaster->nActiveLevel = 0;
break;
}
case PASSIVE_COMBAT:
{
pMaster->nPassiveCombat = 0;
pMaster->nPassiveLevel = 0;
break;
}
case RECOVERY_COMBAT:
{
pMaster->nRecoveryCombat = 0;
pMaster->nRecoveryLevel = 0;
break;
}
}
} //> CSD-TW-030606
void CBattleMgr::RecvCombatClear(t_server_combat_clear* pPacket)
{ //< CSD-TW-030606
LPCHARACTER pMaster = ::ReturnCharacterPoint(pPacket->idMaster);
if (pMaster == NULL)
{
return;
}
// 傈捧胶懦 急琶 秒家
pMaster->nActiveCombat = 0;
pMaster->nPassiveCombat = 0;
pMaster->nRecoveryCombat = 0;
pMaster->nActiveLevel = 0;
pMaster->nPassiveLevel = 0;
pMaster->nRecoveryLevel = 0;
pMaster->ready_Magic = 0;
pMaster->excute_MagicNum = 0;
pMaster->end_Casting = 0;
if (pMaster == Hero)
{
iCSPCMax = iCSPCNow = 0;
::SetSCDMainAndOtherClear(0);
}
} //> CSD-TW-030606
void CBattleMgr::RecvCombatObtain(t_server_combat_obtain* pPacket)
{
LPCHARACTER pMaster = ::ReturnCharacterPoint(pPacket->idMaster);
if (pMaster == NULL) return;
if (pMaster == Hero)
{
const int nPara = pPacket->nPara;
const int nX = pPacket->nPosX;
const int nY = pPacket->nPosY;
const int nTotal = pPacket->nTotal;
// 傈捧胶懦 器牢磐 裙垫 酒捞袍 困摹 备窍扁
POS pos;
::SetItemPos(INV, nPara, nY, nX, &pos);
// 傈捧胶懦 器牢磐 裙垫 酒捞袍 力芭
ItemAttr& rItemAttr = InvItemAttr[nPara][nY][nX];
if (rItemAttr.item_no == 3105)
{
::UseItemByRbutton(pos, rItemAttr);
pMaster->aStepInfo[CSP_STEP] = iCSReservPoint = nTotal + 1;
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 51));
}
}
// 傈捧胶懦 器牢磐 裙垫 捞棋飘 免仿
::InsertMagic(pMaster, pMaster, 500, 0, 0, 0, 0, 0);
}
void CBattleMgr::RecvCombatRequest(t_server_combat_request* pPacket)
{
LPCHARACTER pMaster = ::ReturnCharacterPoint(pPacket->idMaster);
if (pMaster == NULL) return;
pMaster->aStepInfo[CSP_STEP] = pPacket->nRemain;
for (int i = LIGHTNING_BOOM; i <= WIND_EXTREME; ++i)
{
SCharacterData.SkillId[i - 100] = pPacket->aLevel[i - LIGHTNING_BOOM];
}
::CallCombatSkillPointMenu();
}
void CBattleMgr::RecvCombatLearn(t_server_combat_learn* pPacket)
{
LPCHARACTER pMaster = ::ReturnCharacterPoint(pPacket->idMaster);
if (pMaster == NULL) return;
const int nCombat = pPacket->nSkill;
if (IsCombat(nCombat))
{
const int nLevel = pPacket->nLevel;
if (nLevel <= 1)
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 52));
}
else
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 53));
}
SCharacterData.SkillId[nCombat - 100] = nLevel;
CombatSkill[nCombat - 214].iSkillLv = nLevel;
pMaster->aStepInfo[CSP_STEP] = iCSReservPoint = pPacket->nRemain;
}
}
void CBattleMgr::RecvCombatSelect(t_server_combat_select* pPacket)
{ //< CSD-TW-030606
LPCHARACTER pCaster = ::ReturnCharacterPoint(pPacket->idMaster);
if (pCaster == NULL) return;
const int nCombat = pPacket->nCombat;
// 粮犁窍绰 傈捧胶懦牢瘤 八荤
if (!IsCombat(nCombat))
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 61));
return;
}
// 付过 某胶泼吝牢 惑怕俊辑绰 傈捧胶懦阑 荤侩 给窍档废 荐沥
if (!::TimeCheck(pCaster->end_Casting))
{
if (Hero == pCaster)
{
OUTPUT(MK_INFORMATION, lan->OutputMessage(1, 65));
}
return;
}
WORD wReady = 1000;
CCombatSys* pCombat = (CCombatSys*)GetBattle(2);
if (!pCombat->Ready(pCaster, nCombat, wReady))
{
connections.receive = 1;
return;
}
if (pCaster == Hero)
{
switch (g_lpMT[nCombat].spell_Type)
{
case ACTIVE_COMBAT:
{
pCaster->nActiveCombat = 0;
iCSPCNow = 0;
iCSPCMax = g_lpMT[nCombat].nCombatCount;
break;
}
case PASSIVE_COMBAT:
{
pCaster->nPassiveCombat = 0;
break;
}
}
::SetSCDMainAndOtherClear(nCombat - 214);
}
} //> CSD-TW-030606
void CBattleMgr::RecvCombatAttack(t_server_combat_attack* pPacket)
{
LPCHARACTER pCaster = ::ReturnCharacterPoint(pPacket->idCaster);
LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
if (pCaster == NULL || pTarget == NULL) return;
const int nCombat = pPacket->nSkill;
pCaster->excute_MagicNum = nCombat;
const int nX = pPacket->nX;
const int nY = pPacket->nY;
const bool bFail = pPacket->bFailed;
CCombatSys* pCombat = (CCombatSys*)GetBattle(2);
if (pCombat->Apply(pCaster, pTarget, nCombat, nX, nY, bFail))
{ // 荤侩 傈捧胶懦 汲沥
if (bFail == false)
{
const int nLevel = pPacket->nLevel;
switch (g_lpMT[nCombat].spell_Type)
{
case ACTIVE_COMBAT:
{
pCaster->nActiveCombat = nCombat;
pCaster->nActiveLevel = nLevel;
break;
}
case PASSIVE_COMBAT:
{
pCaster->nPassiveCombat = nCombat;
pCaster->nPassiveLevel = nLevel;
break;
}
case RECOVERY_COMBAT: // 030415 kyo
{ //傈捧胶懦 cp雀汗捞 惯悼瞪订
pCaster->nActiveCombat = 0; // 030523 kyo
pCaster->nActiveLevel = 0; // 030523 kyo
pCaster->nRecoveryCombat = nCombat;
pCaster->nRecoveryLevel = nLevel;
break;
}
}
}
}
if (pCaster == Hero)
{
iCSPNow = pPacket->wAmount;
}
}
void CBattleMgr::RecvCombatResult(t_server_combat_result* pPacket)
{
LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
if (pTarget == NULL) return;
const int nCombat = pPacket->nSkill;
switch (pPacket->nResult)
{
case HIT_AND_NOTDEAD:
{
break;
}
}
}
void CBattleMgr::RecvCombatResultH(t_server_combat_result_h* pPacket)
{
LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
if (pTarget == NULL) return;
switch (pPacket->nResult)
{
case HIT_AND_DEAD:
{
pTarget->changeActionFlag = 0;
ShowAnimation(ANI_DEATH, pTarget);
pTarget->pathcount= 0; // 框流捞瘤 臼霸
pTarget->moveFlag = 0; // 磷绢倒酒促聪瘤 给窍霸
pTarget->hp = 0;
pTarget->mp = 0;
pTarget->condition = CON_DEATH;
pTarget->viewtype = VIEWTYPE_NORMAL_;
// 掘绢嘎酒 磷绰 仇捞 官肺 唱牢 版快
if (pTarget == Hero)
{
SCharacterData.nCharacterHP = 0;
SCharacterData.nCharacterMP = 0;
SCharacterData.condition = CON_DEATH;
}
break;
}
case HIT_AND_NOTDEAD:
{
if( pTarget->hp <= 0 || pTarget->condition == CON_DEATH)
{ // 磷绢乐绰 版快扼搁
break;
}
++pTarget->attacked;
::ConditionSet(pTarget, pPacket->nState); // 惑怕甫 犁汲沥
if (pTarget == Hero) // 付过狼 措惑捞 官肺 唱牢 版快
{
SCharacterData.condition = pTarget->condition;
SCharacterData.nCharacterHP += pPacket->nLife;
if (SCharacterData.nCharacterHP <= 0)
{
SCharacterData.nCharacterHP = 1; //辑滚俊辑绰
}
if (SCharacterData.nCharacterHP > SCharacterData.nCharacterMAXHP)
{
SCharacterData.nCharacterHP = SCharacterData.nCharacterMAXHP;
}
}
SetViewType(pTarget);
pTarget->hp += pPacket->nLife;
if (pTarget->hp <= 0) pTarget->hp = 1;
if (pTarget->hp > pTarget->hpmax) pTarget->hp = pTarget->hpmax;
if (pPacket->nLife < 0)
{
if( pPacket->bChangeAni ) // 030415 kyo
ShowAnimation(ANI_STROKE, pTarget);
}
break;
}
}
ShowNumber(pPacket->nLife, pTarget);
}
void CBattleMgr::RecvCombatResultT(t_server_combat_result_t* pPacket)
{
LPCHARACTER pTarget = ::ReturnCharacterPoint(pPacket->idTarget);
if (pTarget == NULL) return;
switch (pPacket->nResult)
{
case HIT_AND_DEAD:
{
break;
}
case HIT_AND_NOTDEAD:
{
::ConditionSet(pTarget, pPacket->nState); // 惑怕甫 犁汲沥
if (pTarget == Hero) // 付过狼 措惑捞 官肺 唱牢 版快
{
SCharacterData.condition = pTarget->condition;
}
SetViewType(pTarget);
break;
}
}
}
extern int GetItemAttr(int item_id, int attr);
bool CBattleMgr::IsThrow() const
{
const int nKind = ::GetItemAttr(EquipItemAttr[WT_WEAPON].item_no, ITEM_KIND);
switch (nKind)
{
case IK_HURL: // 厘芭府 公扁
case IK_SHORT_BOW:
case IK_DUAL_BOW://030102 lsw
case IK_LONG_BOW:
case IK_SNOW_BALL: return true;
}
return false;
}
bool CBattleMgr::IsThrow(int nEffect, bool bCast) const
{ //< CSD-031014
switch (nEffect)
{
case FIRE_ARROW:
case ICE_ARROW:
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:
{
return true;
}
}
if (!bCast)
{
switch (nEffect)
{
case MULTIPLE_FIRE:
case FLEET_MISSILE:
case CONVERTING_ARMOR:
case FIRE_EXTREME:
case ICING_BLAST:
case SHARK_MISSILE:
case ICE_EXTREME: return true;
}
}
return false;
} //> CSD-031014
extern bool g_bWarBegin;
extern bool CheckNotClickNation();
extern bool isOurSquad(LPCHARACTER hero,LPCHARACTER ch);
bool CBattleMgr::IsAttack(LPCHARACTER pCaster, LPCHARACTER pTarget, int nMagic) const
{ //< CSD-021021
if (pCaster == NULL || pTarget == NULL) return false;
if (pTarget->type != SPRITETYPE_CHARACTER) return true;
if (g_GameInfo.lpcharacter == pTarget) return true;
if (pCaster->lpAttacked == pTarget) return true;
if (!IsThrow(nMagic, false)) return true;
//> CSD-021021
bool bResult = false;
if (g_FightMapStart) /* 傈捧 甘俊辑 辑肺 促弗 评老版快 牧飘费 虐 绝捞档 急琶捞 啊瓷窍霸...*/
{
if (pCaster->fight_map_team_num && pTarget->fight_map_team_num &&
pCaster->fight_map_team_num != pTarget->fight_map_team_num)
{
bResult = true;
}
}
else if (pCaster->name_status.nation == pTarget->name_status.nation && GetBattlePeace() == PK_MODE)
{ //< CSD-031212
bResult = true;
} //> CSD-031212
#ifdef _NATION_APPLY_
else if (pTarget->name_status.nation != pCaster->name_status.nation && pTarget->lv >= 1)
{
if (::CheckNotClickNation() == false) bResult = true;
}
#endif
else if (::IsNK(pTarget) >= 5) bResult = true;
else if (Hero->fight_flag && Hero->fight_id == pTarget->id) bResult
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -