void WorldSession::HandleAttackSwingOpcode( WorldPacket & recv_data ) { CHECK_INWORLD_RETURN; CHECK_PACKET_SIZE(recv_data, 8); uint64 guid; recv_data >> guid; if(!guid) { // does this mean cancel combat? HandleAttackStopOpcode(recv_data); return; } // AttackSwing DEBUG_LOG( "WORLD"," Recvd CMSG_ATTACKSWING Message" ); if(GetPlayer()->IsPacified() || GetPlayer()->IsStunned() || GetPlayer()->IsFeared()) return; // printf("Got ATTACK SWING: %08X %08X\n", GUID_HIPART(guid), GUID_LOPART(guid)); Unit* pEnemy = _player->GetMapMgr()->GetUnit(guid); //printf("Pointer: %08X\n", pEnemy); if(!pEnemy) { OUT_DEBUG("WORLD: "I64FMT" does not exist.", guid); return; } if(pEnemy->isDead() || _player->isDead()) // haxors :( return; // Faction "Hack" by Deathshit if( !isAttackable( GetPlayer(), pEnemy, false ) && !pEnemy->IsInRangeOppFactSet(_player) && !pEnemy->CombatStatus.DidDamageTo(GetPlayer()->GetGUID())) { GetPlayer()->BroadcastMessage("Faction exploit detected. You will be disconnected in 5 seconds."); GetPlayer()->Kick(5000); return; } GetPlayer()->smsg_AttackStart(pEnemy); GetPlayer()->EventAttackStart(); // Set PVP Flag. /*if(pEnemy->IsPlayer() && isHostile(_player, pEnemy)) { // don't in duel.. this should be done in dealdamage anyway :S if( TO_PLAYER( pEnemy )->GetTeam() != _player->GetTeam() ) _player->SetPvPFlag(); }*/ }
void WorldSession::HandleAttackSwingOpcode( WorldPacket & recv_data ) { /*Apply a bugfix to prevent players from attacking people of the same faction. --Hemi*/ if(!_player->IsInWorld()) return; CHECK_PACKET_SIZE(recv_data, 8); uint64 guid; recv_data >> guid; if(!guid) { // does this mean cancel combat? HandleAttackStopOpcode(recv_data); return; } Log.Debug( "WORLD","Recvd CMSG_ATTACKSWING Message" ); // AttackSwing if(GetPlayer()->IsPacified() || GetPlayer()->IsStunned() || GetPlayer()->IsFeared()) return; Unit *pEnemy = _player->GetMapMgr()->GetUnit(guid); if(!pEnemy) { sLog.outDebug("WORLD: "I64FMT" does not exist.", guid); return; } if(pEnemy->isDead() || _player->isDead()) // haxors :( return; bool attackablestatus = isAttackable( GetPlayer(), pEnemy, false ); if( attackablestatus == false ) { //Prevent attacking people of the same faction. --Hemi HandleAttackStopOpcode(recv_data); return; } GetPlayer()->smsg_AttackStart(pEnemy); GetPlayer()->EventAttackStart(); }
void WorldSession::HandleAttackSwingOpcode( WorldPacket & recv_data ) { if(!_player->IsInWorld()) return; CHECK_PACKET_SIZE(recv_data, 8); uint64 guid; recv_data >> guid; if(!guid) { // does this mean cancel combat? HandleAttackStopOpcode(recv_data); return; } // AttackSwing Log.Debug( "WORLD","Recvd CMSG_ATTACKSWING Message" ); if(GetPlayer()->IsPacified() || GetPlayer()->IsStunned() || GetPlayer()->IsFeared()) return; // printf("Got ATTACK SWING: %08X %08X\n", GUID_HIPART(guid), GUID_LOPART(guid)); Unit *pEnemy = _player->GetMapMgr()->GetUnit(guid); //printf("Pointer: %08X\n", pEnemy); if(!pEnemy) { sLog.outDebug("WORLD: "I64FMT" does not exist.", guid); return; } if(pEnemy->isDead() || _player->isDead()) // haxors :( return; GetPlayer()->smsg_AttackStart(pEnemy); GetPlayer()->EventAttackStart(); // Set PVP Flag. /*if(pEnemy->IsPlayer() && isHostile(_player, pEnemy)) { // don't in duel.. this should be done in dealdamage anyway :S if( static_cast< Player* >( pEnemy )->GetTeam() != _player->GetTeam() ) _player->SetPvPFlag(); }*/ }
void WorldSession::HandleAttackSwingOpcode(WorldPacket & recv_data) { CHECK_INWORLD_RETURN CHECK_PACKET_SIZE(recv_data, 8); uint64 guid; recv_data >> guid; if(!guid) { // does this mean cancel combat? HandleAttackStopOpcode(recv_data); return; } // AttackSwing Log.Debug("WORLD", "Recvd CMSG_ATTACKSWING Message"); if(GetPlayer()->IsPacified() || GetPlayer()->IsStunned() || GetPlayer()->IsFeared()) return; // printf("Got ATTACK SWING: %08X %08X\n", GUID_HIPART(guid), Arcemu::Util::GUID_LOPART( guid )); Unit* pEnemy = _player->GetMapMgr()->GetUnit(guid); //printf("Pointer: %08X\n", pEnemy); if(!pEnemy) { LOG_DEBUG("WORLD: "I64FMT" does not exist.", guid); return; } if(pEnemy->IsDead() || _player->IsDead() || !isAttackable(_player, pEnemy, false)) // haxors :( return; GetPlayer()->smsg_AttackStart(pEnemy); GetPlayer()->EventAttackStart(); }
void WorldSession::HandleAttackSwingOpcode( WorldPacket & recv_data ) { CHECK_INWORLD_RETURN; CHECK_PACKET_SIZE(recv_data, 8); uint64 guid; recv_data >> guid; if(!guid) { // does this mean cancel combat? HandleAttackStopOpcode(recv_data); return; } // AttackSwing DEBUG_LOG( "WORLD"," Recvd CMSG_ATTACKSWING Message" ); if(GetPlayer()->IsPacified() || GetPlayer()->IsStunned() || GetPlayer()->IsFeared()) return; // printf("Got ATTACK SWING: %08X %08X\n", GUID_HIPART(guid), GUID_LOPART(guid)); Unit* pEnemy = _player->GetMapMgr()->GetUnit(guid); //printf("Pointer: %08X\n", pEnemy); if(!pEnemy) { OUT_DEBUG("WORLD: "I64FMT" does not exist.", guid); return; } if(pEnemy->isDead() || _player->isDead()) // haxors :( return; // Faction "Hack" by Deathshit // Implemented Hackfix for quest 1640 if(sWorld.antihack_cheatengine) { if(!HasGMPermissions() || !sWorld.no_antihack_on_gm) { if(pEnemy->GetEntry() == 6090 && _player->HasQuest(1640)) { GetPlayer()->smsg_AttackStart(pEnemy); GetPlayer()->EventAttackStart(); return; } int attackablestatus = intisAttackable( GetPlayer(), pEnemy, false ); if((attackablestatus < 1) && !pEnemy->IsInRangeOppFactSet(_player) && !pEnemy->CombatStatus.DidDamageTo(_player->GetGUID())) { if(attackablestatus == -1) return; sWorld.LogCheater(this, "Faction exploit detected. Damagetype: Melee."); GetPlayer()->BroadcastMessage("Faction exploit detected. You will be disconnected in 5 seconds."); GetPlayer()->Kick(5000); return; } } } GetPlayer()->smsg_AttackStart(pEnemy); GetPlayer()->EventAttackStart(); }