void CPythonPlayerEventHandler::OnHit(UINT uSkill, CActorInstance& rkActorVictim, BOOL isSendPacket) { DWORD dwVIDVictim = rkActorVictim.GetVirtualID(); // Update Target CPythonPlayer::Instance().SetTarget(dwVIDVictim, FALSE); // Update Target if (isSendPacket) { //#define ATTACK_TIME_LOG #ifdef ATTACK_TIME_LOG static std::map s_prevTimed; float curTime = timeGetTime() / 1000.0f; bool isFirst = false; if (s_prevTimed.end() == s_prevTimed.find(dwVIDVictim)) { s_prevTimed[dwVIDVictim] = curTime; isFirst = true; } float diffTime = curTime - s_prevTimed[dwVIDVictim]; if (diffTime < 0.1f && !isFirst) { TraceError("ATTACK(SPEED_HACK): %.4f(%.4f) %d", curTime, diffTime, dwVIDVictim); } else { TraceError("ATTACK: %.4f(%.4f) %d", curTime, diffTime, dwVIDVictim); } s_prevTimed[dwVIDVictim] = curTime; #endif CPythonNetworkStream& rkStream = CPythonNetworkStream::Instance(); rkStream.SendAttackPacket(uSkill, dwVIDVictim); } if (!rkActorVictim.IsPushing()) return; extern bool IS_HUGE_RACE(unsigned int vnum); if (IS_HUGE_RACE(rkActorVictim.GetRace())) return; CPythonCharacterManager::Instance().AdjustCollisionWithOtherObjects(&rkActorVictim); const TPixelPosition& kPPosLast = rkActorVictim.NEW_GetLastPixelPositionRef(); SVictim kVictim; kVictim.m_dwVID = dwVIDVictim; kVictim.m_lPixelX = long(kPPosLast.x); kVictim.m_lPixelY = long(kPPosLast.y); rkActorVictim.TEMP_Push(kVictim.m_lPixelX, kVictim.m_lPixelY); m_kVctkVictim.push_back(kVictim); }