📄 skillobjectsingleunit_attack.cpp
字号:
// SkillObjectSingleUnit_Attack.cpp: implementation of the CSkillObjectSingleUnit_Attack class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "SkillObjectSingleUnit_Attack.h"
#ifdef _MAPSERVER_
#include "PackedData.h"
#include "AttackManager.h"
#include "SkillObject_server.h"
#include "Battle.h"
#else
#include "ObjectManager.h"
#include "ObjectActionManager.h"
#include "Gamein.h"
#include "SkillObject_Client.h"
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSkillObjectSingleUnit_Attack::CSkillObjectSingleUnit_Attack(DWORD SingleUnitNum)
: CSkillObjectSingleUnit(SingleUnitNum)
{
m_PNTarget = SKILLRESULTKIND_NEGATIVE;
}
CSkillObjectSingleUnit_Attack::~CSkillObjectSingleUnit_Attack()
{
}
void CSkillObjectSingleUnit_Attack::DoInit(CSkillInfo* pSkillInfo,WORD SkillLevel)
{
m_PhysicalAttack = 0;
m_AttribAttack = pSkillInfo->GetContinueAttAttack(SkillLevel);
m_Attrib = pSkillInfo->GetAttrib();
m_AttAttackRate = pSkillInfo->GetContinueAttAttackRate(SkillLevel);
}
void CSkillObjectSingleUnit_Attack::Operate(SKILLOBJECT_INFO* pSkillObjectInfo,CSkillObjectTargetList* pTargetList)
{
CObject* pOperator = m_pSkillObject->GetOperator();
MSG_SKILL_SINGLE_RESULT msg;
msg.InitMsg(pSkillObjectInfo->SkillObjectIdx,GetSingleUnitNum());
CTargetListIterator iter(&msg.TargetList);
CObject* pObject;
BYTE bTargetKind;
RESULTINFO damageinfo;
pTargetList->SetPositionHead();
while(pTargetList->GetNextTarget(m_PNTarget,&pObject,&bTargetKind)) // 傍拜篮 Negative
{
if((bTargetKind & SKILLRESULTKIND_NEGATIVE) == FALSE)
continue;
#ifdef _MAPSERVER_
if(pOperator->GetBattle())
if(pOperator->GetBattle()->IsEnemy(pOperator,pObject) == FALSE)
{
continue;
}
ATTACKMGR->Attack(TRUE, pOperator, pObject, 0, m_PhysicalAttack, m_Attrib,
m_AttribAttack, m_AttribAttack, m_AttAttackRate,
0,
&damageinfo,
FALSE); // FALSE 绰 Single Unit篮 墨款磐 单固瘤 绝澜
#else
damageinfo.Clear();
damageinfo.RealDamage = rand() % 100 + 1;
damageinfo.ShieldDamage = rand() % 30;
damageinfo.CounterDamage = 0;
#endif
iter.AddTargetWithResultInfo(pObject->GetID(),bTargetKind,&damageinfo);
}
iter.Release();
#ifdef _MAPSERVER_
PACKEDDATA_OBJ->QuickSend(pOperator,&msg,msg.GetMsgLength());
#else
// for testclient
GAMEIN->NetworkMsgParse(msg.Category,msg.Protocol,&msg);
#endif
}
#ifdef _MHCLIENT_
void CSkillObjectSingleUnit_Attack::StartSingleUnitEffect(CObject* pOperator,CTargetList* pTList)
{
CObject* pObject;
CTargetListIterator iter(pTList);
RESULTINFO rinfo;
while(iter.GetNextTarget())
{
pObject = OBJECTMGR->GetObject(iter.GetTargetID());
if(pObject == NULL)
continue;
iter.GetTargetData(&rinfo);
/*
// 瘤加瓤苞钎矫
ySWITCH(m_Attrib)
yCASE(ATTR_FIRE) EFFECTMGR->StartSkillMainTainEffect(650,pObject);
yCASE(ATTR_TREE) EFFECTMGR->StartSkillMainTainEffect(653,pObject);
yCASE(ATTR_NOATTR) EFFECTMGR->StartSkillMainTainEffect(653,pObject); // 刀
yENDSWITCH
// 650 瘤加单固瘤 (拳) 加己 单固瘤瘤加 蔼>0 加己 蔼捞 1(拳)
// 653 瘤加单固瘤 (格) 加己 单固瘤瘤加 蔼>0 加己 蔼捞 3(格)
*/
OBJECTACTIONMGR->ApplyResult(pObject,pOperator,&rinfo,eDamageKind_ContinueDamage);
/*
OBJECTACTIONMGR->Damage(pObject,pOperator,eDamageKind_Front,rinfo.RealDamage,rinfo.ShieldDamage,rinfo.bCritical);
DWORD CounterDamage = rinfo.CounterDamage;
if(CounterDamage != 0)
OBJECTACTIONMGR->Damage(pOperator,pObject,eDamageKind_Counter,CounterDamage,0,FALSE);
if(pObject->IsDied()) // 磷菌促
{
OBJECTACTIONMGR->Die(pObject,pOperator,FALSE); // 弊成 磷扁
}
*/
}
iter.Release();
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -