Gamelib/
ActorInstance.cpp
replace the relevant code block
void CActorInstance::SetAttackSpeed(float fAtkSpd)
{
if(m_fAtkSpd > 1.7f){m_fAtkSpd = 1.7f;return;}//anticheat01
m_fAtkSpd=fAtkSpd;
}
void CActorInstance::SetMoveSpeed(float fMovSpd)
{
if(m_fMovSpd > 2.0f){m_fMovSpd = 2.0f;return;}//anticheat01
if (m_fMovSpd==fMovSpd)
return;
m_fMovSpd=fMovSpd;
if (__IsMoveMotion())
{
Stop();
Move();
}
}
ActorInstanceBattle.cpp
replace the relevant code block
void CActorInstance::__RunNextCombo()
{
//anticheat01
if(m_fAtkSpd > 1.7f)
{
SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)NULL);
__asm{
mov eax,0x444
jmp eax
}
}
//anticheat01
++m_dwcurComboIndex;
///////////////////////////
ActorInstanceBattle.cpp
replace the relevant code block
void CActorInstance::__OnMove()
{
//anticheat01
if(m_fMovSpd > 2.0f)
{
__asm{
mov eax,0x444
jmp eax
}
}
//anticheat01
IEventHandler& rkEventHandler=__GetEventHandlerRef();
replace the relevant code block
void CActorInstance::__OnAttack(WORD wMotionIndex)
{
//anticheat01
if(m_fAtkSpd > 1.7f)
{
__asm{
mov eax,0x444
jmp eax
}
}
//anticheat01
IEventHandler& rkEventHandler=__GetEventHandlerRef();
PythonNetworkStreamPhaseGame.cpp
ADD
#ifdef ENABLE_NEW_ATTACK_METHOD
#include "ProcessCRC.h"
#include <ThemidaSDK.h>
#endif
replace the relevant code block
bool CPythonNetworkStream::SendAttackPacket(
#ifdef ENABLE_NEW_ATTACK_METHOD
uint32_t type,
#endif
UINT uMotAttack, DWORD dwVIDVictim
#ifdef ENABLE_NEW_ATTACK_METHOD
, uint32_t crc32
#endif
)
{
#ifdef ENABLE_NEW_ATTACK_METHOD
VM_START
if (type != 3 || crc32 != 213334) {
return false;
}
#endif
if (!__CanActMainInstance())
return true;
#ifdef ATTACK_TIME_LOG
static DWORD prevTime = timeGetTime();
DWORD curTime = timeGetTime();
TraceError("TIME: %.4f(%.4f) ATTACK_PACKET: %d TARGET: %d", curTime/1000.0f, (curTime-prevTime)/1000.0f, uMotAttack, dwVIDVictim);
prevTime = curTime;
#endif
TPacketCGAttack kPacketAtk;
kPacketAtk.header = HEADER_CG_ATTACK;
kPacketAtk.bType = uMotAttack;
kPacketAtk.dwVictimVID = dwVIDVictim;
if (!SendSpecial(sizeof(kPacketAtk), &kPacketAtk))
{
Tracen("Send Battle Attack Packet Error");
return false;
}
#ifdef ENABLE_NEW_ATTACK_METHOD
VM_END
#endif
return SendSequence();
}
PythonPlayerEventHandler.cpp
replace the relevant code block
void CPythonPlayerEventHandler::CNormalBowAttack_FlyEventHandler_AutoClear::OnExplodingAtAnotherTarget(DWORD dwSkillIndex, DWORD dwVID)
{
return;
Tracef("Shoot : Hitting another target : %d, %d\n", dwSkillIndex, dwVID);
CPythonNetworkStream& rkStream=CPythonNetworkStream::Instance();
rkStream.SendAttackPacket(
#ifdef ENABLE_NEW_ATTACK_METHOD
3,
#endif
dwSkillIndex, dwVID
#ifdef ENABLE_NEW_ATTACK_METHOD
, 213334
#endif
);
CPythonCharacterManager& rkChrMgr = CPythonCharacterManager::Instance();
CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(dwVID);
if (pInstance)
{
pInstance->GetGraphicThingInstanceRef().OnShootDamage();
}
}
replace the relevant code block
void CPythonPlayerEventHandler::CNormalBowAttack_FlyEventHandler_AutoClear::OnExplodingAtAnotherTarget(DWORD dwSkillIndex, DWORD dwVID)
{
return;
Tracef("Shoot : Hitting another target : %d, %d\n", dwSkillIndex, dwVID);
CPythonNetworkStream& rkStream=CPythonNetworkStream::Instance();
rkStream.SendAttackPacket(
#ifdef ENABLE_NEW_ATTACK_METHOD
3,
#endif
dwSkillIndex, dwVID
#ifdef ENABLE_NEW_ATTACK_METHOD
, 213334
#endif
);
CPythonCharacterManager& rkChrMgr = CPythonCharacterManager::Instance();
CInstanceBase * pInstance = rkChrMgr.GetInstancePtr(dwVID);
if (pInstance)
{
pInstance->GetGraphicThingInstanceRef().OnShootDamage();
}
}
PythonNetworkStream.h
replace the relevant code block
bool SendAttackPacket(
#ifdef ENABLE_NEW_ATTACK_METHOD
uint32_t type,
#endif
UINT uMotAttack, DWORD dwVIDVictim
#ifdef ENABLE_NEW_ATTACK_METHOD
, uint32_t crc32
#endif
);