本文整理汇总了C++中MovementFlags函数的典型用法代码示例。如果您正苦于以下问题:C++ MovementFlags函数的具体用法?C++ MovementFlags怎么用?C++ MovementFlags使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了MovementFlags函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: CheckMountain
bool AntiCheat::CheckMountain()
{
if (m_currentmovementInfo->HasMovementFlag(MovementFlags(MOVEFLAG_FLYING | MOVEFLAG_SWIMMING)))
return true;
if ( m_currentDeltaZ > 0 )
return true;
int serverDelta = WorldTimer::getMSTimeDiff(m_oldCheckTime[CHECK_MOVEMENT_MOUNTAIN],WorldTimer::getMSTime());
float zSpeed = - m_currentDeltaZ / serverDelta;
float tg_z = (m_currentDelta > 0.0f) ? (-m_currentDeltaZ / m_currentDelta) : -99999;
if (tg_z < m_currentConfig->checkFloatParam[1] || zSpeed < m_currentConfig->checkFloatParam[0] )
return true;
char buffer[255];
sprintf(buffer," deltaZ %e, angle %e, speedZ %e ",
m_currentDeltaZ, tg_z, zSpeed);
m_currentCheckResult.clear();
m_currentCheckResult.append(buffer);
return false;
}
开发者ID:Seehub,项目名称:mangos,代码行数:25,代码来源:AntiCheat.cpp
示例2: CheckFly
bool AntiCheat::CheckFly()
{
if (GetMover()->GetTerrain()->IsUnderWater(m_currentmovementInfo->GetPos()->x, m_currentmovementInfo->GetPos()->y, m_currentmovementInfo->GetPos()->z - 2.0f))
return true;
if (!m_currentmovementInfo->HasMovementFlag(MovementFlags(MOVEFLAG_CAN_FLY | MOVEFLAG_FLYING | MOVEFLAG_ROOT)))
return true;
if (GetMover()->HasAuraType(SPELL_AURA_FEATHER_FALL))
return true;
float ground_z = GetMover()->GetTerrain()->GetHeight(GetPlayer()->GetPositionX(),GetPlayer()->GetPositionY(),MAX_HEIGHT);
float floor_z = GetMover()->GetTerrain()->GetHeight(GetPlayer()->GetPositionX(),GetPlayer()->GetPositionY(),GetPlayer()->GetPositionZ());
float map_z = ((floor_z <= (INVALID_HEIGHT+5.0f)) ? ground_z : floor_z);
if (map_z + m_currentConfig->checkFloatParam[0] > GetPlayer()->GetPositionZ() && map_z > (INVALID_HEIGHT + m_currentConfig->checkFloatParam[0] + 5.0f))
return true;
if (m_currentDeltaZ > 0.0f)
return true;
char buffer[255];
sprintf(buffer," flying without fly auras on height %e but allowed %e",
GetPlayer()->GetPositionZ(), map_z + m_currentConfig->checkFloatParam[0]);
m_currentCheckResult.clear();
m_currentCheckResult.append(buffer);
return false;
}
开发者ID:Seehub,项目名称:mangos,代码行数:29,代码来源:AntiCheat.cpp
示例3: ReadMovementInfo
void WorldSession::HandleMoveKnockBackAck( WorldPacket & recv_data )
{
// CHECK_PACKET_SIZE(recv_data,?);
sLog.outDebug("CMSG_MOVE_KNOCK_BACK_ACK");
// Currently not used but maybe use later for recheck final player position
// (must be at call same as into "recv_data >> x >> y >> z >> orientation;"
/* extract packet */
MovementInfo movementInfo;
uint32 unk1,unk2,unk3;
recv_data >> unk1 >> unk2 >> unk3;
ReadMovementInfo(recv_data, &movementInfo);
//Save movement flags
_player->m_movementInfo.SetMovementFlags(MovementFlags(movementInfo.flags));
#ifdef MOVEMENT_ANTICHEAT_DEBUG
sLog.outBasic("%s CMSG_MOVE_KNOCK_BACK_ACK: tm:%d ftm:%d | %f,%f,%fo(%f) [%X]",GetPlayer()->GetName(),movementInfo.time,movementInfo.fallTime,movementInfo.x,movementInfo.y,movementInfo.z,movementInfo.o,movementInfo.flags);
sLog.outBasic("%s CMSG_MOVE_KNOCK_BACK_ACK additional: vspeed:%f, hspeed:%f",GetPlayer()->GetName(), movementInfo.j_unk, movementInfo.j_xyspeed);
#endif
_player->m_movementInfo = movementInfo;
_player->m_anti_Last_HSpeed = movementInfo.j_xyspeed;
_player->m_anti_Last_VSpeed = movementInfo.j_unk < 3.2f ? movementInfo.j_unk - 1.0f : 3.2f;
uint32 dt = (_player->m_anti_Last_VSpeed < 0) ? (int)(ceil(_player->m_anti_Last_VSpeed/-25)*1000) : (int)(ceil(_player->m_anti_Last_VSpeed/25)*1000);
_player->m_anti_LastSpeedChangeTime = movementInfo.time + dt + 1000;
}
开发者ID:m1ke-dormant,项目名称:mangos,代码行数:28,代码来源:MovementHandler.cpp
示例4: CHECK_PACKET_SIZE
void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo *mi)
{
CHECK_PACKET_SIZE(data, data.rpos()+4+2+4+4+4+4+4);
data >> mi->flags;
data >> mi->unk1;
data >> mi->time;
data >> mi->x;
data >> mi->y;
data >> mi->z;
data >> mi->o;
if(mi->HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT))
{
if(!data.readPackGUID(mi->t_guid))
return;
CHECK_PACKET_SIZE(data, data.rpos()+4+4+4+4+4+1);
data >> mi->t_x;
data >> mi->t_y;
data >> mi->t_z;
data >> mi->t_o;
data >> mi->t_time;
data >> mi->t_seat;
}
if((mi->HasMovementFlag(MovementFlags(MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING2))) || (mi->unk1 & 0x20))
{
CHECK_PACKET_SIZE(data, data.rpos()+4);
data >> mi->s_pitch;
}
开发者ID:acteros,项目名称:anwapEmu,代码行数:30,代码来源:WorldSession.cpp
示例5: MoveFall
void MotionMaster::MoveFall(float z, uint32 id)
{
i_owner->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, 0x02);
i_owner->m_movementInfo.RemoveMovementFlag(MovementFlags(MOVEFLAG_CAN_FLY | MOVEFLAG_FLYING));
i_owner->SetFacingTo(i_owner->GetOrientation());
//AddUnitMovementFlag(MOVEMENTFLAG_FALLING);
MoveCharge(i_owner->GetPositionX(), i_owner->GetPositionY(), z, 3.0f, id);
}
开发者ID:AwkwardDev,项目名称:MangosFX,代码行数:8,代码来源:MotionMaster.cpp
示例6: unit
MoveSplineInit::MoveSplineInit(Unit& m) : unit(m)
{
args.splineId = splineIdGen.NewId();
// Elevators also use MOVEMENTFLAG_ONTRANSPORT but we do not keep track of their position changes
args.TransformForTransport = unit.GetTransGUID();
// mix existing state into new
args.flags.walkmode = unit.m_movementInfo.HasMovementFlag(MOVEMENTFLAG_WALKING);
args.flags.flying = unit.m_movementInfo.HasMovementFlag(MovementFlags(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_DISABLE_GRAVITY));
args.flags.smoothGroundPath = true; // enabled by default, CatmullRom mode or client config "pathSmoothing" will disable this
}
开发者ID:Lbniese,项目名称:WoWCircle434,代码行数:10,代码来源:MoveSplineInit.cpp
示例7: real_position
void MoveSplineInit::Stop()
{
MoveSpline& move_spline = *unit.movespline;
// No need to stop if we are not moving
if (move_spline.Finalized())
return;
// ToDo: update transport info if required
// TransportInfo* transportInfo = unit.GetTransportInfo();
Location real_position(unit.GetPositionX(), unit.GetPositionY(), unit.GetPositionZ(), unit.GetOrientation());
// If boarded use current local position
// if (transportInfo)
// transportInfo->GetLocalPosition(real_position.x, real_position.y, real_position.z, real_position.orientation);
// there is a big chance that current position is unknown if current state is not finalized, need compute it
// this also allows calculate spline position and update map position in much greater intervals
if (!move_spline.Finalized() /*&& !transportInfo*/)
real_position = move_spline.ComputePosition();
if (args.path.empty())
{
// should i do the things that user should do?
MoveTo(real_position);
}
// current first vertex
args.path[0] = real_position;
args.flags = MoveSplineFlag::Done;
unit.m_movementInfo.RemoveMovementFlag(MovementFlags(MOVEFLAG_FORWARD | MOVEFLAG_SPLINE_ENABLED));
move_spline.Initialize(args);
WorldPacket data(SMSG_MONSTER_MOVE, 64);
data << unit.GetPackGUID();
// ToDo: update transport info if required
/*if (transportInfo)
{
data.SetOpcode(SMSG_MONSTER_MOVE_TRANSPORT);
data << transportInfo->GetTransportGuid().WriteAsPacked();
}*/
data << real_position.x << real_position.y << real_position.z;
data << move_spline.GetId();
data << uint8(MonsterMoveStop);
unit.SendMessageToSet(&data, true);
}
开发者ID:Chuck5ta,项目名称:server,代码行数:50,代码来源:MoveSplineInit.cpp
示例8: DEBUG_LOG
void WorldSession::HandleLogoutRequestOpcode( WorldPacket & /*recv_data*/ )
{
DEBUG_LOG( "WORLD: Recvd CMSG_LOGOUT_REQUEST Message, security - %u", GetSecurity() );
if (ObjectGuid lootGuid = GetPlayer()->GetLootGuid())
DoLootRelease(lootGuid);
//Can not logout if...
if( GetPlayer()->isInCombat() || //...is in combat
GetPlayer()->duel || //...is in Duel
//...is jumping ...is falling
GetPlayer()->m_movementInfo.HasMovementFlag(MovementFlags(MOVEFLAG_FALLING | MOVEFLAG_FALLINGFAR)))
{
WorldPacket data( SMSG_LOGOUT_RESPONSE, (2+4) ) ;
data << (uint8)0xC;
data << uint32(0);
data << uint8(0);
SendPacket( &data );
LogoutRequest(0);
return;
}
//instant logout in taverns/cities or on taxi or for admins, gm's, mod's if its enabled in mangosd.conf
if (GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) || GetPlayer()->IsTaxiFlying() ||
GetSecurity() >= (AccountTypes)sWorld.getConfig(CONFIG_UINT32_INSTANT_LOGOUT))
{
LogoutPlayer(true);
return;
}
// not set flags if player can't free move to prevent lost state at logout cancel
if(GetPlayer()->CanFreeMove())
{
float height = GetPlayer()->GetTerrain()->GetHeight(GetPlayer()->GetPositionX(), GetPlayer()->GetPositionY(), GetPlayer()->GetPositionZ());
if ((GetPlayer()->GetPositionZ() < height + 0.1f) && !(GetPlayer()->IsInWater()))
GetPlayer()->SetStandState(UNIT_STAND_STATE_SIT);
WorldPacket data( SMSG_FORCE_MOVE_ROOT, (8+4) ); // guess size
data << GetPlayer()->GetPackGUID();
data << (uint32)2;
SendPacket( &data );
GetPlayer()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
}
WorldPacket data( SMSG_LOGOUT_RESPONSE, 5 );
data << uint32(0);
data << uint8(0);
SendPacket( &data );
LogoutRequest(time(NULL));
}
开发者ID:SeTM,项目名称:one,代码行数:50,代码来源:MiscHandler.cpp
示例9: real_position
void MoveSplineInit::Stop()
{
MoveSpline& move_spline = *unit.movespline;
// No need to stop if we are not moving
if (move_spline.Finalized())
return;
Location real_position(unit.GetPositionX(), unit.GetPositionY(), unit.GetPositionZ(), unit.GetOrientation());
// there is a big chance that current position is unknown if current state is not finalized, need compute it
// this also allows calculate spline position and update map position in much greater intervals
if (!move_spline.Finalized())
real_position = move_spline.ComputePosition();
if (args.path.empty())
{
// should i do the things that user should do?
MoveTo(real_position);
}
// current first vertex
args.path[0] = real_position;
args.flags = MoveSplineFlag::Done;
unit.m_movementInfo.RemoveMovementFlag(MovementFlags(MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_SPLINE_ENABLED));
move_spline.Initialize(args);
WorldPacket data(SMSG_MONSTER_MOVE, 64);
data << unit.GetPackGUID();
data << real_position.x << real_position.y << real_position.z;
data << move_spline.GetId();
data << uint8(MonsterMoveStop);
unit.SendMessageToSet(&data, true);
}
开发者ID:superwow,项目名称:foton.core,代码行数:37,代码来源:MoveSplineInit.cpp
示例10: DEBUG_LOG
void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data )
{
uint32 opcode = recv_data.GetOpcode();
DEBUG_LOG("WORLD: Recvd %s (%u, 0x%X) opcode", LookupOpcodeName(opcode), opcode, opcode);
recv_data.hexlike();
Unit *mover = _player->GetMover();
Player *plMover = mover->GetTypeId() == TYPEID_PLAYER ? (Player*)mover : NULL;
// ignore, waiting processing in WorldSession::HandleMoveWorldportAckOpcode and WorldSession::HandleMoveTeleportAck
if(plMover && plMover->IsBeingTeleported())
{
recv_data.rpos(recv_data.wpos()); // prevent warnings spam
return;
}
/* extract packet */
ObjectGuid guid;
MovementInfo movementInfo;
recv_data >> guid.ReadAsPacked();
recv_data >> movementInfo;
/*----------------*/
if (!VerifyMovementInfo(movementInfo, guid))
return;
// fall damage generation (ignore in flight case that can be triggered also at lags in moment teleportation to another map).
if (opcode == MSG_MOVE_FALL_LAND && plMover && !plMover->IsTaxiFlying())
plMover->HandleFall(movementInfo);
// ---- anti-cheat features -->>>
uint32 Anti_TeleTimeDiff=plMover ? time(NULL) - plMover->Anti__GetLastTeleTime() : time(NULL);
static const uint32 Anti_TeleTimeIgnoreDiff=sWorld.GetMvAnticheatIgnoreAfterTeleport();
if (plMover && (plMover->m_transport == 0) && sWorld.GetMvAnticheatEnable() &&
GetPlayer()->GetSession()->GetSecurity() <= sWorld.GetMvAnticheatGmLevel() &&
GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType()!=FLIGHT_MOTION_TYPE &&
Anti_TeleTimeDiff>Anti_TeleTimeIgnoreDiff)
{
const uint32 CurTime=getMSTime();
if (getMSTimeDiff(GetPlayer()->m_anti_lastalarmtime,CurTime) > sWorld.GetMvAnticheatAlarmPeriod())
{
GetPlayer()->m_anti_alarmcount = 0;
}
/* I really don't care about movement-type yet (todo)
UnitMoveType move_type;
if (movementInfo.flags & MOVEMENTFLAG_FLYING) move_type = MOVE_FLY;
else if (movementInfo.flags & MOVEMENTFLAG_SWIMMING) move_type = MOVE_SWIM;
else if (movementInfo.flags & MOVEMENTFLAG_WALK_MODE) move_type = MOVE_WALK;
else move_type = MOVE_RUN;*/
float delta_x = GetPlayer()->GetPositionX() - movementInfo.GetPos()->x;
float delta_y = GetPlayer()->GetPositionY() - movementInfo.GetPos()->y;
float delta_z = GetPlayer()->GetPositionZ() - movementInfo.GetPos()->z;
float delta = sqrt(delta_x * delta_x + delta_y * delta_y); // Len of movement-vector via Pythagoras (a^2+b^2=Len^2)
float tg_z = 0.0f; //tangens
float delta_t = getMSTimeDiff(GetPlayer()->m_anti_lastmovetime,CurTime);
GetPlayer()->m_anti_lastmovetime = CurTime;
GetPlayer()->m_anti_MovedLen += delta;
if (delta_t > 15000.0f)
{ delta_t = 15000.0f; }
// Tangens of walking angel
if (!(movementInfo.GetMovementFlags() & (MOVEFLAG_FLYING | MOVEFLAG_SWIMMING)))
{
tg_z = ((delta !=0.0f) && (delta_z > 0.0f)) ? (atan((delta_z*delta_z) / delta) * 180.0f / M_PI) : 0.0f;
}
//antiOFF fall-damage, MOVEMENTFLAG_UNK4 seted by client if player try movement when falling and unset in this case the MOVEMENTFLAG_FALLING flag.
if ((!GetPlayer()->CanFly() && GetPlayer()->m_anti_BeginFallZ == INVALID_HEIGHT) &&
(movementInfo.GetMovementFlags() & (MOVEFLAG_FALLING | MOVEFLAG_FALLINGFAR)) != 0)
{
GetPlayer()->m_anti_BeginFallZ=(float)(movementInfo.GetPos()->z);
}
if (GetPlayer()->m_anti_NextLenCheck <= CurTime)
{
// Check every 500ms is a lot more advisable then 1000ms, because normal movment packet arrives every 500ms
uint32 OldNextLenCheck=GetPlayer()->m_anti_NextLenCheck;
float delta_xyt=GetPlayer()->m_anti_MovedLen/(float)(getMSTimeDiff(OldNextLenCheck-500,CurTime));
GetPlayer()->m_anti_NextLenCheck = CurTime+500;
GetPlayer()->m_anti_MovedLen = 0.0f;
static const float MaxDeltaXYT = sWorld.GetMvAnticheatMaxXYT();
if (delta_xyt > MaxDeltaXYT && delta<=100.0f && GetPlayer()->GetZoneId() != 2257)
{
if (sWorld.GetMvAnticheatSpeedCheck())
Anti__CheatOccurred(CurTime,"Speed hack",delta_xyt,LookupOpcodeName(opcode),
(float)(GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType()),
(float)(getMSTimeDiff(OldNextLenCheck-500,CurTime)));
}
}
if (delta > 100.0f && GetPlayer()->GetZoneId() != 2257)
{
if (sWorld.GetMvAnticheatTeleportCheck())
Anti__ReportCheat("Tele hack",delta,LookupOpcodeName(opcode));
//.........这里部分代码省略.........
开发者ID:bobx,项目名称:LaPosadaDelOcio,代码行数:101,代码来源:MovementHandler.cpp
示例11: DEBUG_LOG
//.........这里部分代码省略.........
static const uint32 Anti_TeleTimeIgnoreDiff=sWorld.GetMvAnticheatIgnoreAfterTeleport();
if (plMover && (plMover->m_transport == 0) && sWorld.GetMvAnticheatEnable() &&
GetPlayer()->GetSession()->GetSecurity() <= sWorld.GetMvAnticheatGmLevel() &&
GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType()!=FLIGHT_MOTION_TYPE &&
Anti_TeleTimeDiff>Anti_TeleTimeIgnoreDiff)
{
const uint32 CurTime=getMSTime();
if (getMSTimeDiff(GetPlayer()->m_anti_lastalarmtime,CurTime) > sWorld.GetMvAnticheatAlarmPeriod())
{
GetPlayer()->m_anti_alarmcount = 0;
}
/* I really don't care about movement-type yet (todo)
UnitMoveType move_type;
if (movementInfo.flags & MOVEMENTFLAG_FLYING) move_type = MOVE_FLY;
else if (movementInfo.flags & MOVEMENTFLAG_SWIMMING) move_type = MOVE_SWIM;
else if (movementInfo.flags & MOVEMENTFLAG_WALK_MODE) move_type = MOVE_WALK;
else move_type = MOVE_RUN;*/
float delta_x = GetPlayer()->GetPositionX() - movementInfo.GetPos()->x;
float delta_y = GetPlayer()->GetPositionY() - movementInfo.GetPos()->y;
float delta_z = GetPlayer()->GetPositionZ() - movementInfo.GetPos()->z;
float delta = sqrt(delta_x * delta_x + delta_y * delta_y); // Len of movement-vector via Pythagoras (a^2+b^2=Len^2)
float tg_z = 0.0f; //tangens
float delta_t = getMSTimeDiff(GetPlayer()->m_anti_lastmovetime,CurTime);
GetPlayer()->m_anti_lastmovetime = CurTime;
GetPlayer()->m_anti_MovedLen += delta;
if (delta_t > 15000.0f)
{ delta_t = 15000.0f; }
// Tangens of walking angel
if (!(movementInfo.GetMovementFlags() & (MOVEFLAG_FLYING | MOVEFLAG_SWIMMING)))
{
tg_z = ((delta !=0.0f) && (delta_z > 0.0f)) ? (atan((delta_z*delta_z) / delta) * 180.0f / M_PI) : 0.0f;
}
//antiOFF fall-damage, MOVEMENTFLAG_UNK4 seted by client if player try movement when falling and unset in this case the MOVEMENTFLAG_FALLING flag.
if ((!GetPlayer()->CanFly() && GetPlayer()->m_anti_BeginFallZ == INVALID_HEIGHT) &&
(movementInfo.GetMovementFlags() & (MOVEFLAG_FALLING | MOVEFLAG_FALLINGFAR)) != 0)
{
GetPlayer()->m_anti_BeginFallZ=(float)(movementInfo.GetPos()->z);
}
if (GetPlayer()->m_anti_NextLenCheck <= CurTime)
{
// Check every 500ms is a lot more advisable then 1000ms, because normal movment packet arrives every 500ms
uint32 OldNextLenCheck=GetPlayer()->m_anti_NextLenCheck;
float delta_xyt=GetPlayer()->m_anti_MovedLen/(float)(getMSTimeDiff(OldNextLenCheck-500,CurTime));
GetPlayer()->m_anti_NextLenCheck = CurTime+500;
GetPlayer()->m_anti_MovedLen = 0.0f;
static const float MaxDeltaXYT = sWorld.GetMvAnticheatMaxXYT();
if (delta_xyt > MaxDeltaXYT && delta<=100.0f && GetPlayer()->GetZoneId() != 2257)
{
if (sWorld.GetMvAnticheatSpeedCheck())
Anti__CheatOccurred(CurTime,"Speed hack",delta_xyt,LookupOpcodeName(opcode),
(float)(GetPlayer()->GetMotionMaster()->GetCurrentMovementGeneratorType()),
(float)(getMSTimeDiff(OldNextLenCheck-500,CurTime)));
}
}
if (delta > 100.0f && GetPlayer()->GetZoneId() != 2257)
{
if (sWorld.GetMvAnticheatTeleportCheck())
开发者ID:Subv,项目名称:diamondcore,代码行数:67,代码来源:MovementHandler.cpp
示例12: GetPlayer
bool AntiCheat::CheckNeeded(AntiCheatCheck checktype)
{
if (!sWorld.getConfig(CONFIG_BOOL_ANTICHEAT_ENABLE)
|| !GetPlayer()->IsInWorld()
|| GetPlayer()->IsBeingTeleported()
|| GetPlayer()->GetPlayerbotAI()
|| GetPlayer()->GetSession()->GetSecurity() > int32(sWorld.getConfig(CONFIG_UINT32_ANTICHEAT_GMLEVEL)))
return false;
if (GetMover()->HasAuraType(SPELL_AURA_MOD_CONFUSE))
return false;
AntiCheatCheck checkMainType = (checktype >= 100) ? AntiCheatCheck(checktype / 100) : checktype;
switch( checkMainType)
{
case CHECK_NULL:
return false;
break;
case CHECK_MOVEMENT:
if ( GetPlayer()->GetTransport()
|| GetPlayer()->HasMovementFlag(MOVEFLAG_ONTRANSPORT)
|| GetMover()->GetMotionMaster()->GetCurrentMovementGeneratorType() == FLIGHT_MOTION_TYPE
|| GetPlayer()->IsTaxiFlying())
return false;
break;
case CHECK_SPELL:
break;
case CHECK_QUEST:
return false;
break;
case CHECK_TRANSPORT:
if (!isActiveMover())
return false;
break;
case CHECK_DAMAGE:
case CHECK_ITEM:
case CHECK_WARDEN:
break;
default:
return false;
}
if (checktype < 100 )
return true;
switch( checktype)
{
case CHECK_MOVEMENT_SPEED:
if (GetMover()->HasAura(56266))
return false;
break;
case CHECK_MOVEMENT_FLY:
case CHECK_MOVEMENT_ZAXIS:
if (isCanFly() || !GetMover())
return false;
break;
case CHECK_MOVEMENT_WATERWALKING:
if (!m_currentmovementInfo->HasMovementFlag(MOVEFLAG_WATERWALKING))
return false;
break;
case CHECK_MOVEMENT_TP2PLANE:
if (GetMover()->GetTransport())
return false;
if (m_currentmovementInfo->HasMovementFlag(MovementFlags(MOVEFLAG_SWIMMING | MOVEFLAG_CAN_FLY | MOVEFLAG_FLYING)))
return false;
if (GetMover()->HasAura(60068) && GetMover()->GetTerrain()->IsUnderWater(m_currentmovementInfo->GetPos()->x, m_currentmovementInfo->GetPos()->y, m_currentmovementInfo->GetPos()->z-5.0f))
return false;
break;
case CHECK_MOVEMENT_AIRJUMP:
if (isCanFly() ||
!isActiveMover() ||
GetMover()->HasAuraType(SPELL_AURA_FEATHER_FALL) ||
GetMover()->GetTerrain()->IsUnderWater(m_currentmovementInfo->GetPos()->x, m_currentmovementInfo->GetPos()->y, m_currentmovementInfo->GetPos()->z-5.0f))
return false;
break;
case CHECK_MOVEMENT_TELEPORT:
if (!isActiveMover() || GetPlayer()->IsBeingTeleported())
return false;
break;
case CHECK_MOVEMENT_FALL:
if (isCanFly() || !isActiveMover())
return false;
break;
case CHECK_MOVEMENT_MOUNTAIN:
if (isCanFly() || !isActiveMover())
return false;
break;
default:
break;
}
return true;
}
开发者ID:Seehub,项目名称:mangos,代码行数:95,代码来源:AntiCheat.cpp
示例13: LookupOpcodeName
//.........这里部分代码省略.........
#ifdef MOVEMENT_ANTICHEAT_DEBUG
sLog.outError("MA-%s, leave transport. GO xyzo: %f,%f,%f",
plMover->GetName(), go_data->posX,go_data->posY,go_data->posZ);
#endif
}
}
} else {
#ifdef MOVEMENT_ANTICHEAT_DEBUG
sLog.outDebug("MA-%s, undefined transport.", plMover->GetName());
#endif
check_passed = false;
}
}
if (!check_passed){
if (plMover->m_transport)
{
plMover->m_transport->RemovePassenger(plMover);
plMover->m_transport = NULL;
}
movementInfo.t_x = 0.0f;
movementInfo.t_y = 0.0f;
movementInfo.t_z = 0.0f;
movementInfo.t_o = 0.0f;
movementInfo.t_time = 0;
plMover->m_anti_TransportGUID = 0;
}
}
}
/* process position-change */
if (check_passed)
{
recv_data.put<uint32>(6, getMSTime()); // fix time, offset flags(4) + unk(2)
WorldPacket data(recv_data.GetOpcode(), (mover->GetPackGUID().size()+recv_data.size()));
data.append(mover->GetPackGUID()); // use mover guid
data.append(recv_data.contents(), recv_data.size());
GetPlayer()->SendMessageToSet(&data, false);
if(plMover) // nothing is charmed, or player charmed
{
plMover->SetPosition(movementInfo.x, movementInfo.y, movementInfo.z, movementInfo.o);
plMover->m_movementInfo = movementInfo;
plMover->UpdateFallInformationIfNeed(movementInfo, recv_data.GetOpcode());
if(plMover->isMovingOrTurning())
plMover->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH);
if(movementInfo.z < -500.0f)
{
if(plMover->InBattleGround()
&& plMover->GetBattleGround()
&& plMover->GetBattleGround()->HandlePlayerUnderMap(_player))
{
// do nothing, the handle already did if returned true
}
else
{
// NOTE: this is actually called many times while falling
// even after the player has been teleported away
// TODO: discard movement packets after the player is rooted
if(plMover->isAlive())
{
plMover->EnvironmentalDamage(DAMAGE_FALL_TO_VOID, GetPlayer()->GetMaxHealth());
// pl can be alive if GM/etc
if(!plMover->isAlive())
{
// change the death state to CORPSE to prevent the death timer from
// starting in the next player update
plMover->KillPlayer();
plMover->BuildPlayerRepop();
}
}
// cancel the death timer here if started
plMover->RepopAtGraveyard();
}
}
//movement anticheat >>>
if (plMover->m_anti_AlarmCount > 0){
sLog.outError("MA-%s produce %d anticheat alarms",plMover->GetName(),plMover->m_anti_AlarmCount);
plMover->m_anti_AlarmCount = 0;
}
// end movement anticheat
}
else // creature charmed
{
if(mover->IsInWorld())
mover->GetMap()->CreatureRelocation((Creature*)mover, movementInfo.x, movementInfo.y, movementInfo.z, movementInfo.o);
}
} else if (plMover) {
plMover->m_anti_AlarmCount++;
WorldPacket data;
plMover->m_movementInfo.SetMovementFlags(MovementFlags(MOVEMENTFLAG_NONE));
plMover->BuildTeleportAckMsg(&data, plMover->GetPositionX(), plMover->GetPositionY(), plMover->GetPositionZ(), plMover->GetOrientation());
plMover->GetSession()->SendPacket(&data);
plMover->BuildHeartBeatMsg(&data);
plMover->SendMessageToSet(&data, true);
}
}
开发者ID:m1ke-dormant,项目名称:mangos,代码行数:101,代码来源:MovementHandler.cpp
示例14: GetPlayer
bool AntiCheat::CheckNeeded(AntiCheatCheck checktype)
{
if (!sWorld.getConfig(CONFIG_BOOL_ANTICHEAT_ENABLE)
|| !GetPlayer()->IsInWorld()
|| !GetPlayer()->GetMap()
|| GetPlayer()->IsBeingTeleported()
|| GetPlayer()->GetPlayerbotAI()
|| GetPlayer()->GetSession()->GetSecurity() > int32(sWorld.getConfig(CONFIG_UINT32_ANTICHEAT_GMLEVEL)))
return false;
if (!m_currentConfig->disabledZones.empty())
{
uint32 zone, area;
GetPlayer()->GetZoneAndAreaId(zone,area);
if (m_currentConfig->disabledZones.find(zone) != m_currentConfig->disabledZones.end())
return false;
}
AntiCheatCheck checkMainType = (checktype >= 100) ? AntiCheatCheck(checktype / 100) : checktype;
switch( checkMainType)
{
case CHECK_NULL:
return false;
break;
case CHECK_MOVEMENT:
if ( GetPlayer()->IsOnTransport()
// || GetPlayer()->HasMovementFlag(MOVEFLAG_ONTRANSPORT)
|| GetPlayer()->IsInUnitState(UNIT_ACTION_CONFUSED)
|| GetPlayer()->IsTaxiFlying())
return false;
break;
case CHECK_SPELL:
break;
case CHECK_QUEST:
return false;
break;
case CHECK_TRANSPORT:
if (!isActiveMover())
return false;
break;
case CHECK_WARDEN:
if (!sWorld.getConfig(CONFIG_BOOL_ANTICHEAT_WARDEN))
return false;
break;
case CHECK_DAMAGE:
case CHECK_ITEM:
break;
default:
return false;
}
if (checktype < 100 )
return true;
switch( checktype)
{
case CHECK_MOVEMENT_SPEED:
if (GetMover()->HasAura(56266))
return false;
break;
case CHECK_MOVEMENT_FLY:
case CHECK_MOVEMENT_ZAXIS:
if (isCanFly() || !GetMover())
return false;
break;
case CHECK_MOVEMENT_WATERWALKING:
if (!m_currentmovementInfo->HasMovementFlag(MOVEFLAG_WATERWALKING))
return false;
break;
case CHECK_MOVEMENT_TP2PLANE:
if (GetMover()->IsOnTransport())
return false;
if (m_currentmovementInfo->HasMovementFlag(MovementFlags(MOVEFLAG_SWIMMING | MOVEFLAG_CAN_FLY | MOVEFLAG_FLYING)))
return false;
if (GetMover()->HasAura(60068) && GetMover()->GetTerrain()->IsUnderWater(m_currentmovementInfo->GetPos()->x, m_currentmovementInfo->GetPos()->y, m_currentmovementInfo->GetPos()->z-5.0f))
return false;
break;
case CHECK_MOVEMENT_AIRJUMP:
if (isCanFly() ||
!isActiveMover() ||
GetMover()->GetTerrain()->IsUnderWater(m_currentmovementInfo->GetPos()->x, m_currentmovementInfo->GetPos()->y, m_currentmovementInfo->GetPos()->z-5.0f))
return false;
break;
case CHECK_MOVEMENT_TELEPORT:
if (!isActiveMover() || GetPlayer()->IsBeingTeleported())
return false;
break;
case CHECK_MOVEMENT_FALL:
if (isCanFly() || !isActiveMover())
return false;
break;
case CHECK_MOVEMENT_MOUNTAIN:
if (isCanFly() || !isActiveMover())
return false;
break;
default:
break;
}
//.........这里部分代码省略.........
开发者ID:sergeev,项目名称:mangos4,代码行数:101,代码来源:AntiCheat.cpp
示例15: DEBUG_LOG
void WorldSession::HandleLogoutRequestOpcode( WorldPacket & /*recv_data*/ )
{
DEBUG_LOG( "WORLD: Recvd CMSG_LOGOUT_REQUEST Message, security - %u", GetSecurity() );
if (ObjectGuid lootGuid = GetPlayer()->GetLootGuid())
DoLootRelease(lootGuid);
uint8 reason = 0;
Player* plr = GetPlayer();
if (!plr)
{
LogoutPlayer(false);
return;
}
if (plr->isInCombat())
reason = 1;
else if (plr->m_movementInfo.HasMovementFlag(MovementFlags(MOVEFLAG_FALLING | MOVEFLAG_FALLINGFAR))) // is jumping or falling
reason = 3;
else if (plr->duel || plr->HasAura(9454)) // is dueling or frozen by GM via freeze command
reason = 2;
if (reason)
{
WorldPacket data( SMSG_LOGOUT_RESPONSE, 1+4 ) ;
data << reason;
data << uint32(0);
SendPacket( &data );
LogoutRequest(0);
return;
}
//instant logout in taverns/cities or on taxi or for admins, gm's, mod's if its enabled in mangosd.conf
if (GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) || GetPlayer()->IsTaxiFlying() ||
GetSecurity() >= (AccountTypes)sWorld.getConfig(CONFIG_UINT32_INSTANT_LOGOUT))
{
WorldPacket data(SMSG_LOGOUT_RESPONSE, 1 + 4);
data << reason;
data << uint32(16777216);
SendPacket(&data);
LogoutPlayer(true);
return;
}
// not set flags if player can't free move to prevent lost state at logout cancel
if (GetPlayer()->CanFreeMove())
{
float height = GetPlayer()->GetMap()->GetHeight(GetPlayer()->GetPositionX(), GetPlayer()->GetPositionY(), GetPlayer()->GetPositionZ());
if ((GetPlayer()->GetPositionZ() < height + 0.1f) && !(GetPlayer()->IsInWater()))
GetPlayer()->SetStandState(UNIT_STAND_STATE_SIT);
GetPlayer()->SetRoot(true);
GetPlayer()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED);
}
WorldPacket data(SMSG_LOGOUT_RESPONSE, 1 + 4);
data << uint8(0);
data << uint32(0);
SendPacket( &data );
LogoutRequest(time(NULL));
}
开发者ID:yyhhrr,项目名称:mangospriv,代码行数:61,代码来源:MiscHandler.cpp
注:本文中的MovementFlags函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论