本文整理汇总了C++中GetBase函数的典型用法代码示例。如果您正苦于以下问题:C++ GetBase函数的具体用法?C++ GetBase怎么用?C++ GetBase使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetBase函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: GetSeatIteratorForPassenger
void Vehicle::RemovePassenger(Unit* unit)
{
if (unit->GetVehicle() != this)
return;
SeatMap::iterator seat = GetSeatIteratorForPassenger(unit);
ASSERT(seat != Seats.end());
sLog->outDebug(LOG_FILTER_VEHICLES, "Unit %s exit vehicle entry %u id %u dbguid %u seat %d",
unit->GetName().c_str(), _me->GetEntry(), _vehicleInfo->m_ID, _me->GetGUIDLow(), (int32)seat->first);
seat->second.Passenger = 0;
if (seat->second.SeatInfo->CanEnterOrExit() && ++UsableSeatNum)
_me->SetFlag(UNIT_NPC_FLAGS, (_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK));
unit->ClearUnitState(UNIT_STATE_ONVEHICLE);
if (_me->GetTypeId() == TYPEID_UNIT && unit->GetTypeId() == TYPEID_PLAYER && seat->second.SeatInfo->m_flags & VEHICLE_SEAT_FLAG_CAN_CONTROL)
_me->RemoveCharmedBy(unit);
if (_me->IsInWorld())
{
unit->m_movementInfo.t_pos.Relocate(0.0f, 0.0f, 0.0f, 0.0f);
unit->m_movementInfo.t_time = 0;
unit->m_movementInfo.t_seat = 0;
}
// only for flyable vehicles
if (unit->IsFlying())
_me->CastSpell(unit, VEHICLE_SPELL_PARACHUTE, true);
if (_me->GetTypeId() == TYPEID_UNIT && _me->ToCreature()->IsAIEnabled)
_me->ToCreature()->AI()->PassengerBoarded(unit, seat->first, false);
if (GetBase()->GetTypeId() == TYPEID_UNIT)
sScriptMgr->OnRemovePassenger(this, unit);
}
示例2: Invalidate
void SrtmTile::Init(string const & dir, ms::LatLon const & coord)
{
Invalidate();
string const base = GetBase(coord);
string const cont = dir + base + ".SRTMGL1.hgt.zip";
string file = base + ".hgt";
UnzipMemDelegate delegate(m_data);
try
{
ZipFileReader::UnzipFile(cont, file, delegate);
}
catch (ZipFileReader::LocateZipException const & e)
{
// Sometimes packed file has different name. See N39E051 measure.
file = base + ".SRTMGL1.hgt";
ZipFileReader::UnzipFile(cont, file, delegate);
}
if (!delegate.m_completed)
{
LOG(LWARNING, ("Can't decompress SRTM file:", cont));
Invalidate();
return;
}
if (m_data.size() != kSrtmTileSize)
{
LOG(LWARNING, ("Bad decompressed SRTM file size:", cont, m_data.size()));
Invalidate();
return;
}
m_valid = true;
}
示例3: _ASSERTE
/*
* Handle UDN_DELTAPOS notification.
*/
void MySpinCtrl::OnDeltaPos(NMHDR* pNMHDR, LRESULT* pResult)
{
_ASSERTE(! (UDS_SETBUDDYINT & GetStyle()) && "'Auto Buddy Int' style *MUST* be unchecked");
// _ASSERTE( (UDS_AUTOBUDDY & GetStyle()) && "'Auto Buddy' style *MUST* be checked");
_ASSERTE( (UDS_NOTHOUSANDS & GetStyle()) && "'No Thousands' style *MUST* be checked");
NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
/* grab value from buddy ctrl */
ASSERT(GetBuddy() != NULL);
CString buddyStr;
GetBuddy()->GetWindowText(buddyStr);
long buddyVal, proposedVal;
if (!ConvLong(buddyStr, &buddyVal))
goto bail; // bad string
proposedVal = buddyVal - pNMUpDown->iDelta;
/* peg at the end */
if (proposedVal < fLow)
proposedVal = fLow;
if (proposedVal > fHigh)
proposedVal = fHigh;
if (proposedVal != buddyVal) {
/* set buddy control to new value */
if (GetBase() == 10)
buddyStr.Format(L"%d", proposedVal);
else
buddyStr.Format(L"%X", proposedVal);
GetBuddy()->SetWindowText(buddyStr);
}
bail:
*pResult = 0;
}
示例4: GetEvasion
uint16 GetEvasion(CMobEntity* PMob)
{
uint8 evaRank = PMob->evaRank;
// Mob evasion is based on job
// but occasionally war mobs
// might have a different rank
switch (PMob->GetMJob())
{
case JOB_THF:
case JOB_NIN:
evaRank = 1;
break;
case JOB_MNK:
case JOB_DNC:
case JOB_SAM:
case JOB_PUP:
case JOB_RUN:
evaRank = 2;
break;
case JOB_RDM:
case JOB_BRD:
case JOB_GEO:
case JOB_COR:
evaRank = 4;
break;
case JOB_WHM:
case JOB_SCH:
case JOB_RNG:
case JOB_SMN:
case JOB_BLM:
evaRank = 5;
break;
}
return GetBase(PMob, evaRank);
}
示例5: ASSERT
void Vehicle::RelocatePassengers()
{
ASSERT(_me->GetMap());
std::vector<std::pair<Unit*, Position>> seatRelocation;
seatRelocation.reserve(Seats.size());
// not sure that absolute position calculation is correct, it must depend on vehicle pitch angle
for (SeatMap::const_iterator itr = Seats.begin(); itr != Seats.end(); ++itr)
{
if (Unit* passenger = ObjectAccessor::GetUnit(*GetBase(), itr->second.Passenger.Guid))
{
ASSERT(passenger->IsInWorld());
float px, py, pz, po;
passenger->m_movementInfo.transport.pos.GetPosition(px, py, pz, po);
CalculatePassengerPosition(px, py, pz, &po);
seatRelocation.emplace_back(passenger, Position(px, py, pz, po));
}
}
for (auto const& pair : seatRelocation)
pair.first->UpdatePosition(pair.second);
}
示例6: GetBase
void BookCtrlBaseTestCase::Selection()
{
wxBookCtrlBase * const base = GetBase();
base->SetSelection(0);
CPPUNIT_ASSERT_EQUAL(0, base->GetSelection());
CPPUNIT_ASSERT_EQUAL(wxStaticCast(m_panel1, wxWindow), base->GetCurrentPage());
base->AdvanceSelection(false);
CPPUNIT_ASSERT_EQUAL(2, base->GetSelection());
CPPUNIT_ASSERT_EQUAL(wxStaticCast(m_panel3, wxWindow), base->GetCurrentPage());
base->AdvanceSelection();
CPPUNIT_ASSERT_EQUAL(0, base->GetSelection());
CPPUNIT_ASSERT_EQUAL(wxStaticCast(m_panel1, wxWindow), base->GetCurrentPage());
base->ChangeSelection(1);
CPPUNIT_ASSERT_EQUAL(1, base->GetSelection());
CPPUNIT_ASSERT_EQUAL(wxStaticCast(m_panel2, wxWindow), base->GetCurrentPage());
}
示例7: TransportBase
VehicleKit::VehicleKit(Unit* base, VehicleEntry const* entry)
: TransportBase(base), m_vehicleEntry(entry), m_uiNumFreeSeats(0), m_isInitialized(false)
{
for (uint32 i = 0; i < MAX_VEHICLE_SEAT; ++i)
{
uint32 seatId = GetEntry()->m_seatID[i];
if (!seatId)
continue;
if (VehicleSeatEntry const *seatInfo = sVehicleSeatStore.LookupEntry(seatId))
{
m_Seats.insert(std::make_pair(i, VehicleSeat(seatInfo)));
if (seatInfo->IsUsable())
++m_uiNumFreeSeats;
}
}
if (base)
{
if (GetEntry()->m_flags & VEHICLE_FLAG_NO_STRAFE)
GetBase()->m_movementInfo.AddMovementFlag2(MOVEFLAG2_NO_STRAFE);
if (GetEntry()->m_flags & VEHICLE_FLAG_NO_JUMPING)
GetBase()->m_movementInfo.AddMovementFlag2(MOVEFLAG2_NO_JUMPING);
if (GetEntry()->m_flags & VEHICLE_FLAG_FULLSPEEDTURNING)
GetBase()->m_movementInfo.AddMovementFlag2(MOVEFLAG2_FULLSPEEDTURNING);
if (GetEntry()->m_flags & VEHICLE_FLAG_ALLOW_PITCHING)
GetBase()->m_movementInfo.AddMovementFlag2(MOVEFLAG2_ALLOW_PITCHING);
if (GetEntry()->m_flags & VEHICLE_FLAG_FULLSPEEDPITCHING)
{
GetBase()->m_movementInfo.AddMovementFlag2(MOVEFLAG2_ALLOW_PITCHING);
GetBase()->m_movementInfo.AddMovementFlag2(MOVEFLAG2_FULLSPEEDPITCHING);
}
}
SetDestination();
}
示例8: ASSERT
//.........这里部分代码省略.........
SeatMap::iterator seat;
if (seatId < 0) // no specific seat requirement
{
for (seat = m_Seats.begin(); seat != m_Seats.end(); ++seat)
if (!seat->second.passenger
&& ((!byAura && seat->second.seatInfo->CanEnterOrExit())
|| (byAura
&& seat->second.seatInfo->IsUsableByAura()))) break;
if (seat == m_Seats.end()) // no available seat
return false;
}
else
{
seat = m_Seats.find(seatId);
if (seat == m_Seats.end()) return false;
if (seat->second.passenger) seat->second.passenger->ExitVehicle();
else seat->second.passenger = NULL;
ASSERT(!seat->second.passenger);
}
sLog->outDebug(LOG_FILTER_VEHICLES,
"Unit %s enter vehicle entry %u id %u dbguid %u seat %d",
unit->GetName(), me->GetEntry(), m_vehicleInfo->m_ID,
me->GetGUIDLow(), (int32) seat->first);
seat->second.passenger = unit;
if (seat->second.seatInfo->CanEnterOrExit())
{
ASSERT(m_usableSeatNum);
--m_usableSeatNum;
if (!m_usableSeatNum)
{
if (me->GetTypeId() == TYPEID_PLAYER) me->RemoveFlag(UNIT_NPC_FLAGS,
UNIT_NPC_FLAG_PLAYER_VEHICLE);
else me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
}
}
if (seat->second.seatInfo->m_flags
&& !(seat->second.seatInfo->m_flags & VEHICLE_SEAT_FLAG_UNK11)) unit->AddUnitState(
UNIT_STAT_ONVEHICLE);
unit->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT | MOVEMENTFLAG_ROOT);
VehicleSeatEntry const *veSeat = seat->second.seatInfo;
unit->m_movementInfo.t_pos.m_positionX = veSeat->m_attachmentOffsetX;
unit->m_movementInfo.t_pos.m_positionY = veSeat->m_attachmentOffsetY;
unit->m_movementInfo.t_pos.m_positionZ = veSeat->m_attachmentOffsetZ;
unit->m_movementInfo.t_pos.m_orientation = 0;
unit->m_movementInfo.t_time = 0; // 1 for player
unit->m_movementInfo.t_seat = seat->first;
if (me->GetTypeId() == TYPEID_UNIT && unit->GetTypeId() == TYPEID_PLAYER
&& seat->first == 0
&& seat->second.seatInfo->m_flags & VEHICLE_SEAT_FLAG_CAN_CONTROL)
{
if (!me->SetCharmedBy(unit, CHARM_TYPE_VEHICLE))
ASSERT(false);
if (VehicleScalingInfo const *scalingInfo = sObjectMgr->GetVehicleScalingInfo(m_vehicleInfo->m_ID))
{
Player *plr = unit->ToPlayer();
float averageItemLevel = plr->GetAverageItemLevel();
if (averageItemLevel < scalingInfo->baseItemLevel) averageItemLevel =
scalingInfo->baseItemLevel;
averageItemLevel -= scalingInfo->baseItemLevel;
m_bonusHP = uint32(
me->GetMaxHealth()
* (averageItemLevel * scalingInfo->scalingFactor));
me->SetMaxHealth(me->GetMaxHealth() + m_bonusHP);
me->SetHealth(me->GetHealth() + m_bonusHP);
}
}
if (me->IsInWorld())
{
unit->SendMonsterMoveTransport(me);
if (me->GetTypeId() == TYPEID_UNIT)
{
if (me->ToCreature()->IsAIEnabled) me->ToCreature()->AI()->PassengerBoarded(
unit, seat->first, true);
// update all passenger's positions
RelocatePassengers(me->GetPositionX(), me->GetPositionY(),
me->GetPositionZ(), me->GetOrientation());
}
}
unit->DestroyForNearbyPlayers();
unit->UpdateObjectVisibility(false);
if (GetBase()->GetTypeId() == TYPEID_UNIT)
sScriptMgr->OnAddPassenger(this, unit, seatId);
return true;
}
示例9: passenger
Vehicle::~Vehicle()
{
for (SeatMap::const_iterator itr = Seats.begin(); itr != Seats.end(); ++itr)
{
if (itr->second.Passenger)
sLog->outError("Vehicle::~Vehicle() | passenger (%s), Base (%s), BaseEntry (%u), MapId (%u)", ObjectAccessor::GetUnit(*GetBase(), itr->second.Passenger) ? ObjectAccessor::GetUnit(*GetBase(), itr->second.Passenger)->GetName() : "n/a", GetBase()->GetName(), GetBase()->GetEntry(), GetBase()->GetMapId());
ASSERT(!itr->second.Passenger);
}
}
示例10: GM_ASSERT
// RAGE AGAINST THE VIRTUAL MACHINE =)
gmThread::State gmThread::Sys_Execute(gmVariable * a_return)
{
register union
{
const gmuint8 * instruction;
const gmuint32 * instruction32;
};
register gmVariable * top;
gmVariable * base;
gmVariable * operand;
const gmuint8 * code;
if(m_state != RUNNING) return m_state;
#if GMDEBUG_SUPPORT
if(m_debugFlags && m_machine->GetDebugMode() && m_machine->m_isBroken)
{
if(m_machine->m_isBroken(this))
return RUNNING;
}
#endif // GMDEBUG_SUPPORT
// make sure we have a stack frame
GM_ASSERT(m_frame);
GM_ASSERT(GetFunction()->m_type == GM_FUNCTION);
// cache our "registers"
gmFunctionObject * fn = (gmFunctionObject *) GM_MOBJECT(m_machine, GetFunction()->m_value.m_ref);
code = (const gmuint8 *) fn->GetByteCode();
if(m_instruction == NULL) instruction = code;
else instruction = m_instruction;
top = GetTop();
base = GetBase();
//
// start byte code execution
//
for(;;)
{
#ifdef GM_CHECK_USER_BREAK_CALLBACK // This may be defined in gmConfig_p.h
// Check external source to break execution with exception eg. Check for CTRL-BREAK
// Endless loop protection could be implemented with this, or in a similar manner.
if( gmMachine::s_userBreakCallback && gmMachine::s_userBreakCallback(this) )
{
GMTHREAD_LOG("User break. Execution halted.");
goto LabelException;
}
#endif //GM_CHECK_USER_BREAK_CALLBACK
switch(*(instruction32++))
{
//
// unary operator
//
#if GM_USE_INCDECOPERATORS
case BC_OP_INC :
case BC_OP_DEC :
#endif
case BC_BIT_INV :
case BC_OP_NEG :
case BC_OP_POS :
case BC_OP_NOT :
{
operand = top - 1;
gmOperatorFunction op = OPERATOR(operand->m_type, (gmOperator) instruction32[-1]);
if(op)
{
op(this, operand);
}
else if((fn = CALLOPERATOR(operand->m_type, (gmOperator) instruction32[-1])))
{
operand[2] = operand[0];
operand[0] = gmVariable(GM_NULL, 0);
operand[1] = gmVariable(GM_FUNCTION, fn->GetRef());
SetTop(operand + 3);
State res = PushStackFrame(1, &instruction, &code);
top = GetTop();
base = GetBase();
if(res == RUNNING) break;
if(res == SYS_YIELD) return RUNNING;
if(res == SYS_EXCEPTION) goto LabelException;
if(res == KILLED) { m_machine->Sys_SwitchState(this, KILLED); GM_ASSERT(0); } // operator should not kill a thread
return res;
}
else
{
GMTHREAD_LOG("unary operator %s undefined for type %s", gmGetOperatorName((gmOperator) instruction32[-1]), m_machine->GetTypeName(operand->m_type));
goto LabelException;
}
break;
}
//
// operator
//
//.........这里部分代码省略.........
示例11: InstallAllAccessories
void VehicleKit::Initialize(uint32 creatureEntry)
{
InstallAllAccessories(creatureEntry ? creatureEntry : GetBase()->GetEntry());
UpdateFreeSeatCount();
m_isInitialized = true;
}
示例12: Reset
VehicleKit::~VehicleKit()
{
Reset();
GetBase()->RemoveSpellsCausingAura(SPELL_AURA_CONTROL_VEHICLE);
}
示例13: UnBoardPassenger
void VehicleKit::RemovePassenger(Unit* passenger, bool dismount)
{
SeatMap::iterator seat;
for (seat = m_Seats.begin(); seat != m_Seats.end(); ++seat)
if (seat->second.passenger == passenger->GetObjectGuid())
break;
if (seat == m_Seats.end())
return;
seat->second.passenger.Clear();
passenger->clearUnitState(UNIT_STAT_ON_VEHICLE);
UnBoardPassenger(passenger); // Use TransportBase to remove the passenger from storage list
passenger->m_movementInfo.ClearTransportData();
passenger->m_movementInfo.RemoveMovementFlag(MOVEFLAG_ONTRANSPORT);
if (seat->second.IsProtectPassenger())
if (passenger->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
passenger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
if (seat->second.seatInfo->m_flags & SEAT_FLAG_CAN_CONTROL)
{
passenger->SetCharm(NULL);
passenger->RemoveSpellsCausingAura(SPELL_AURA_CONTROL_VEHICLE);
GetBase()->SetCharmerGuid(ObjectGuid());
GetBase()->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED);
GetBase()->clearUnitState(UNIT_STAT_CONTROLLED);
if (passenger->GetTypeId() == TYPEID_PLAYER)
{
Player* player = (Player*)passenger;
player->SetClientControl(GetBase(), 0);
player->RemovePetActionBar();
}
if(!(((Creature*)GetBase())->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_KEEP_AI))
((Creature*)GetBase())->AIM_Initialize();
}
if (passenger->GetTypeId() == TYPEID_PLAYER)
{
Player* player = (Player*)passenger;
player->SetViewPoint(NULL);
passenger->SetRoot(false);
player->SetMover(player);
player->m_movementInfo.RemoveMovementFlag(MOVEFLAG_ROOT);
if ((GetBase()->HasAuraType(SPELL_AURA_FLY) || GetBase()->HasAuraType(SPELL_AURA_MOD_FLIGHT_SPEED)) &&
(!player->HasAuraType(SPELL_AURA_FLY) && !player->HasAuraType(SPELL_AURA_MOD_FLIGHT_SPEED)))
{
WorldPacket data;
data.Initialize(SMSG_MOVE_UNSET_CAN_FLY, 12);
data << player->GetPackGUID();
data << (uint32)(0);
GetBase()->SendMessageToSet(&data,false);
player->m_movementInfo.RemoveMovementFlag(MOVEFLAG_FLYING);
player->m_movementInfo.RemoveMovementFlag(MOVEFLAG_CAN_FLY);
}
}
UpdateFreeSeatCount();
if (GetBase()->GetTypeId() == TYPEID_UNIT)
{
if (((Creature*)GetBase())->AI())
((Creature*)GetBase())->AI()->PassengerBoarded(passenger, seat->first, false);
}
if (passenger->GetTypeId() == TYPEID_UNIT)
{
if (((Creature*)passenger)->AI())
((Creature*)passenger)->AI()->EnteredVehicle(GetBase(), seat->first, false);
}
if (dismount && seat->second.b_dismount)
{
Dismount(passenger, seat->second.seatInfo);
// only for flyable vehicles
if (GetBase()->m_movementInfo.HasMovementFlag(MOVEFLAG_FLYING))
GetBase()->CastSpell(passenger, 45472, true); // Parachute
}
}
示例14: Assert
bool CMemoryStack::Init( unsigned maxSize, unsigned commitSize, unsigned initialCommit, unsigned alignment )
{
Assert( !m_pBase );
#ifdef _X360
m_bPhysical = false;
#endif
m_maxSize = maxSize;
m_alignment = AlignValue( alignment, 4 );
Assert( m_alignment == alignment );
Assert( m_maxSize > 0 );
#if defined(_WIN32)
if ( commitSize != 0 )
{
m_commitSize = commitSize;
}
unsigned pageSize;
#ifndef _X360
SYSTEM_INFO sysInfo;
GetSystemInfo( &sysInfo );
Assert( !( sysInfo.dwPageSize & (sysInfo.dwPageSize-1)) );
pageSize = sysInfo.dwPageSize;
#else
pageSize = 64*1024;
#endif
if ( m_commitSize == 0 )
{
m_commitSize = pageSize;
}
else
{
m_commitSize = AlignValue( m_commitSize, pageSize );
}
m_maxSize = AlignValue( m_maxSize, m_commitSize );
Assert( m_maxSize % pageSize == 0 && m_commitSize % pageSize == 0 && m_commitSize <= m_maxSize );
m_pBase = (unsigned char *)VirtualAlloc( NULL, m_maxSize, VA_RESERVE_FLAGS, PAGE_NOACCESS );
Assert( m_pBase );
m_pCommitLimit = m_pNextAlloc = m_pBase;
if ( initialCommit )
{
initialCommit = AlignValue( initialCommit, m_commitSize );
Assert( initialCommit < m_maxSize );
if ( !VirtualAlloc( m_pCommitLimit, initialCommit, VA_COMMIT_FLAGS, PAGE_READWRITE ) )
return false;
m_minCommit = initialCommit;
m_pCommitLimit += initialCommit;
MemAlloc_RegisterExternalAllocation( CMemoryStack, GetBase(), GetSize() );
}
#else
m_pBase = (byte *)MemAlloc_AllocAligned( m_maxSize, alignment ? alignment : 1 );
m_pNextAlloc = m_pBase;
m_pCommitLimit = m_pBase + m_maxSize;
#endif
m_pAllocLimit = m_pBase + m_maxSize;
return ( m_pBase != NULL );
}
示例15: GetBase
bool VehicleKit::AddPassenger(Unit *passenger, int8 seatId)
{
SeatMap::iterator seat;
if (seatId < 0) // no specific seat requirement
{
for (seat = m_Seats.begin(); seat != m_Seats.end(); ++seat)
{
if (!seat->second.passenger && (seat->second.seatInfo->IsUsable() || (seat->second.seatInfo->m_flags & SEAT_FLAG_UNCONTROLLED)))
break;
}
if (seat == m_Seats.end()) // no available seat
return false;
}
else
{
seat = m_Seats.find(seatId);
if (seat == m_Seats.end())
return false;
if (seat->second.passenger)
return false;
}
VehicleSeatEntry const* seatInfo = seat->second.seatInfo;
seat->second.passenger = passenger;
if (!(seatInfo->m_flags & SEAT_FLAG_FREE_ACTION))
passenger->addUnitState(UNIT_STAT_ON_VEHICLE);
m_pBase->SetPhaseMask(passenger->GetPhaseMask(), true);
passenger->m_movementInfo.ClearTransportData();
passenger->m_movementInfo.AddMovementFlag(MOVEFLAG_ONTRANSPORT);
if (GetBase()->m_movementInfo.HasMovementFlag(MOVEFLAG_ONTRANSPORT))
{
passenger->m_movementInfo.SetTransportData(GetBase()->m_movementInfo.GetTransportGuid(),
// passenger->m_movementInfo.SetTransportData(GetBase()->GetObjectGuid(),
seatInfo->m_attachmentOffsetX + GetBase()->m_movementInfo.GetTransportPos()->x,
seatInfo->m_attachmentOffsetY + GetBase()->m_movementInfo.GetTransportPos()->y,
seatInfo->m_attachmentOffsetZ + GetBase()->m_movementInfo.GetTransportPos()->z,
seatInfo->m_passengerYaw + GetBase()->m_movementInfo.GetTransportPos()->o,
WorldTimer::getMSTime(), seat->first, seatInfo);
DEBUG_LOG("VehicleKit::AddPassenger passenger %s transport offset on %s setted to %f %f %f %f (parent - %s)",
passenger->GetObjectGuid().GetString().c_str(),
passenger->m_movementInfo.GetTransportGuid().GetString().c_str(),
passenger->m_movementInfo.GetTransportPos()->x,
passenger->m_movementInfo.GetTransportPos()->y,
passenger->m_movementInfo.GetTransportPos()->z,
passenger->m_movementInfo.GetTransportPos()->o,
GetBase()->m_movementInfo.GetTransportGuid().GetString().c_str());
}
else if (passenger->GetTypeId() == TYPEID_UNIT && b_dstSet)
{
passenger->m_movementInfo.SetTransportData(m_pBase->GetObjectGuid(),
seatInfo->m_attachmentOffsetX + m_dst_x, seatInfo->m_attachmentOffsetY + m_dst_y, seatInfo->m_attachmentOffsetZ + m_dst_z,
seatInfo->m_passengerYaw + m_dst_o, WorldTimer::getMSTime(), seat->first, seatInfo);
}
else
{
passenger->m_movementInfo.SetTransportData(m_pBase->GetObjectGuid(),
seatInfo->m_attachmentOffsetX, seatInfo->m_attachmentOffsetY, seatInfo->m_attachmentOffsetZ,
seatInfo->m_passengerYaw, WorldTimer::getMSTime(), seat->first, seatInfo);
}
if (passenger->GetTypeId() == TYPEID_PLAYER)
{
((Player*)passenger)->GetCamera().SetView(m_pBase);
WorldPacket data(SMSG_FORCE_MOVE_ROOT, 8+4);
data << passenger->GetPackGUID();
data << uint32((passenger->m_movementInfo.GetVehicleSeatFlags() & SEAT_FLAG_CAN_CAST) ? 2 : 0);
passenger->SendMessageToSet(&data, true);
}
if (seat->second.IsProtectPassenger())
{
switch (m_pBase->GetEntry())
{
case 33651: // VX 001
case 33432: // Leviathan MX
case 33118: // Ignis (Ulduar)
case 32934: // Kologarn Right Arm (Ulduar)
case 30234: // Nexus Lord's Hover Disk (Eye of Eternity, Malygos Encounter)
case 30248: // Scion's of Eternity Hover Disk (Eye of Eternity, Malygos Encounter)
break;
case 28817:
default:
passenger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
break;
}
passenger->RemoveSpellsCausingAura(SPELL_AURA_MOD_SHAPESHIFT);
}
if (seatInfo->m_flags & SEAT_FLAG_CAN_CONTROL)
{
if (!(m_pBase->GetVehicleInfo()->GetEntry()->m_flags & (VEHICLE_FLAG_ACCESSORY)))
//.........这里部分代码省略.........