本文整理汇总了C++中P_ITEM::getOutmostItem方法的典型用法代码示例。如果您正苦于以下问题:C++ P_ITEM::getOutmostItem方法的具体用法?C++ P_ITEM::getOutmostItem怎么用?C++ P_ITEM::getOutmostItem使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类P_ITEM
的用法示例。
在下文中一共展示了P_ITEM::getOutmostItem方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: losTargetPoint
Coord Coord::losTargetPoint( cUORxTarget* target, unsigned char map )
{
SERIAL serial = target->serial();
P_ITEM pItem = World::instance()->findItem( serial );
P_CHAR pChar = World::instance()->findChar( serial );
if ( pItem )
{
pItem = pItem->getOutmostItem();
if ( pItem->container() && pItem->container()->isChar() )
{
return pItem->container()->pos().losCharPoint();
}
else
{
return pItem->pos().losItemPoint( pItem->id() );
}
}
else if ( pChar )
{
return pChar->pos().losCharPoint();
}
else
{
return Coord( target->x(), target->y(), target->z(), map );
}
}
示例2: removeFromView
// Remove it from all in-range sockets
void cUObject::removeFromView( bool clean )
{
// Get Real pos
Coord_cl mPos = pos_;
if( isItemSerial( serial_ ) )
{
P_ITEM pItem = dynamic_cast<P_ITEM>(this);
P_ITEM pCont = pItem->getOutmostItem();
if( pCont )
{
mPos = pCont->pos();
P_CHAR pOwner = dynamic_cast<P_CHAR>( pCont->container() );
if( pOwner )
mPos = pOwner->pos();
}
}
cUOTxRemoveObject remove;
remove.setSerial(serial_);
for (cUOSocket *socket = cNetwork::instance()->first(); socket; socket = cNetwork::instance()->next()) {
if (socket->player() != this && (clean || socket->canSee(this))) {
socket->send(&remove);
}
}
}
示例3: inRange
/*!
Checks if the specified object is in given range
*/
bool cUObject::inRange( cUObject* object, quint32 range ) const
{
if ( !object )
return false;
Coord pos = object->pos_;
if ( object->isItem() )
{
P_ITEM pItem = dynamic_cast<P_ITEM>( object );
if ( pItem )
{
P_ITEM pCont = pItem->getOutmostItem();
P_CHAR pEquipped = pItem->getOutmostChar();
if ( pEquipped )
{
pos = pEquipped->pos();
}
else if ( pCont )
{
pos = pCont->pos();
}
}
}
return pos_.distance( pos ) <= range;
}
示例4: removeFromView
// Remove it from all in-range sockets
void cUObject::removeFromView( bool clean )
{
// Get Real pos
Coord_cl mPos = pos_;
if( isItemSerial( serial_ ) )
{
P_ITEM pItem = dynamic_cast<P_ITEM>(this);
P_ITEM pCont = pItem->getOutmostItem();
if( pCont )
{
mPos = pCont->pos();
P_CHAR pOwner = dynamic_cast<P_CHAR>( pCont->container() );
if( pOwner )
mPos = pOwner->pos();
}
}
for( cUOSocket *socket = cNetwork::instance()->first(); socket; socket = cNetwork::instance()->next() )
if( clean || ( socket->player() && ( socket->player()->pos().distance( mPos ) <= socket->player()->visualRange() ) ) )
socket->removeObject( this );
}
示例5: grabItem
// New Class implementation
void cDragItems::grabItem( cUOSocket *socket, cUORxDragItem *packet )
{
// Get our character
P_PLAYER pChar = socket->player();
if( !pChar )
return;
UINT32 weight = pChar->weight();
// Fetch the grab information
UI16 amount = packet->amount();
if( !amount )
amount = 1;
P_ITEM pItem = FindItemBySerial( packet->serial() );
// If it's an invalid pointer we can't even bounce
if( !pItem )
return;
// Are we already dragging an item ?
// Bounce it and reject the move
// (Logged out while dragging an item)
if( socket->dragging() )
{
socket->bounceItem( socket->dragging(), BR_ALREADY_DRAGGING );
return;
}
if( pItem->onPickup( pChar ) )
return;
if( pChar->onPickup( pItem ) )
return;
// Do we really want to let him break his meditation
// When he picks up an item ?
// Maybe a meditation check here ?!?
pChar->disturbMed(); // Meditation
P_CHAR itemOwner = pItem->getOutmostChar();
// Try to pick something out of another characters posessions
if( !pChar->isGM() && itemOwner && ( itemOwner != pChar ) && ( itemOwner->objectType() == enNPC && dynamic_cast<P_NPC>(itemOwner)->owner() != pChar ) )
{
socket->bounceItem( pItem, BR_BELONGS_TO_SOMEONE_ELSE );
return;
}
// Check if the user can grab the item
if( !pChar->canPickUp( pItem ) )
{
socket->bounceItem( pItem, BR_CANNOT_PICK_THAT_UP );
return;
}
// The user can't see the item
// Basically thats impossible as the socket should deny moving the item
// if it's not in line of sight but to prevent exploits
/*if( !line_of_sight( socket->socket(), pChar->pos, pItem->pos, TREES_BUSHES|WALLS_CHIMNEYS|DOORS|ROOFING_SLANTED|FLOORS_FLAT_ROOFING|LAVA_WATER ) )
{
socket->sysMessage( "You can't see the item." );
bounceItem( socket, pItem, true );
return;
}*/
P_ITEM outmostCont = pItem->getOutmostItem();
// If it's a trade-window, reset the ack-status
if( outmostCont && ( outmostCont->container() == pChar ) && ( outmostCont->layer() == 0 ) && ( outmostCont->id() == 0x1E5E ) )
{
// Get the other sides tradewindow
P_ITEM tradeWindow = FindItemBySerial( calcserial( outmostCont->moreb1(), outmostCont->moreb2(), outmostCont->moreb3(), outmostCont->moreb4() ) );
// If one of the trade-windows has the ack-status reset it
if( tradeWindow && ( tradeWindow->morez() || outmostCont->morez() ) )
{
tradeWindow->setMoreZ(0);
outmostCont->setMoreZ(0);
// sendtradestatus( tradeWindow, outmostCont );
}
}
// If the top-most container ( thats important ) is a corpse
// and looting is a crime, flag the character criminal.
if( !pChar->isGM() && outmostCont && outmostCont->corpse() )
{
// For each item we take out we loose carma
// if the corpse is innocent and not in our guild
bool sameGuild = ( GuildCompare( pChar, outmostCont->owner() ) != 0 );
if( ( outmostCont->more2() == 1 ) && !pChar->Owns( outmostCont ) && !sameGuild )
{
// pChar->karma -= 5;
pChar->setKarma( pChar->karma() - 5 );
pChar->setCriminalTime( uiCurrentTime + SrvParams->crimtime() * MY_CLOCKS_PER_SEC );
socket->sysMessage( tr("You lost some karma.") );
}
}
//.........这里部分代码省略.........
示例6: grabItem
// New Class implementation
void DragAndDrop::grabItem( cUOSocket* socket, cUORxDragItem* packet )
{
// Get our character
P_PLAYER pChar = socket->player();
if ( !pChar )
return;
float weight = pChar->weight();
// Fetch the grab information
UI16 amount = packet->amount();
if ( !amount )
amount = 1;
P_ITEM pItem = FindItemBySerial( packet->serial() );
// If it's an invalid pointer we can't even bounce
if ( !pItem )
return;
// Are we already dragging an item ?
// Bounce it and reject the move
// (Logged out while dragging an item)
if ( socket->dragging() )
{
socket->bounceItem( socket->dragging(), BR_ALREADY_DRAGGING );
return;
}
// Check if the item can be reached
if (pItem->getOutmostChar() != pChar && !pChar->lineOfSight(pItem)) {
socket->bounceItem( pItem, BR_OUT_OF_REACH );
return;
}
if ( pItem->onPickup( pChar ) )
return;
if ( pChar->onPickup( pItem ) )
return;
// Do we really want to let him break his meditation
// When he picks up an item ?
// Maybe a meditation check here ?!?
pChar->disturbMed(); // Meditation
P_CHAR itemOwner = pItem->getOutmostChar();
// Try to pick something out of another characters posessions
if ( !pChar->isGM() && itemOwner && ( itemOwner != pChar ) && ( itemOwner->objectType() == enNPC && dynamic_cast<P_NPC>( itemOwner )->owner() != pChar ) )
{
socket->bounceItem( pItem, BR_BELONGS_TO_SOMEONE_ELSE );
return;
}
// Check if the user can grab the item
if ( !pChar->canPickUp( pItem ) )
{
socket->bounceItem( pItem, BR_CANNOT_PICK_THAT_UP );
return;
}
// The user can't see the item
// Basically thats impossible as the socket should deny moving the item
// if it's not in line of sight but to prevent exploits
/*if( !line_of_sight( socket->socket(), pChar->pos, pItem->pos, TREES_BUSHES|WALLS_CHIMNEYS|DOORS|ROOFING_SLANTED|FLOORS_FLAT_ROOFING|LAVA_WATER ) )
{
socket->sysMessage( "You can't see the item." );
bounceItem( socket, pItem, true );
return;
}*/
P_ITEM outmostCont = pItem->getOutmostItem();
// If the top-most container ( thats important ) is a corpse
// and looting is a crime, flag the character criminal.
if ( !pChar->isGM() && outmostCont && outmostCont->corpse() )
{
// For each item we take out we loose carma
// if the corpse is innocent and not in our guild
bool sameGuild = true;//( GuildCompare( pChar, outmostCont->owner() ) != 0 );
if ( outmostCont->hasTag( "notoriety" ) && outmostCont->getTag( "notoriety" ).toInt() == 1 && !pChar->owns( outmostCont ) && !sameGuild )
{
// pChar->karma -= 5;
pChar->setKarma( pChar->karma() - 5 );
pChar->setCriminalTime( Server::instance()->time() + Config::instance()->crimtime() * MY_CLOCKS_PER_SEC );
socket->sysMessage( tr( "You lost some karma." ) );
}
}
// Check if the item is too heavy
//if( !pc_currchar->isGMorCounselor() )
//{
//} << Deactivated (DarkStorm)
// ==== Grabbing the Item is allowed here ====
// Send the user a pickup sound if we're picking it up
//.........这里部分代码省略.........
示例7: dbl_click_item
//.........这里部分代码省略.........
{
socket->sendContainer( pi );
return;
}
if( pi->layer() > 0x18 )
{
socket->sysMessage( tr( "You can't see this." ) );
return;
}
if( isInLockedItem( pi ) )
{
socket->sysMessage( tr( "You have to unlock it before taking a look." ) );
return;
}
if( !pi->container() )
{
if( !pi->inRange( pc_currchar, 2 ) )
{
socket->clilocMessage( 0x7A258, "", 0x3b2 ); // You cannot reach that
return;
} else if(!pc_currchar->lineOfSight(pi, true)) {
socket->clilocMessage( 0x7A258, "", 0x3b2 ); // You cannot reach that
return;
}
socket->sendContainer( pi );
return;
}
else if( pi->container()->isItem() )
{
P_ITEM pOCont = pi->getOutmostItem();
// Check if we can reach the top-container
if( !pOCont->container() )
{
if( !pOCont->inRange( pc_currchar, 2 ) )
{
socket->clilocMessage( 0x7A258, "", 0x3b2 ); // You cannot reach that
return;
}
socket->sendContainer( pi );
}
else
{
P_CHAR pChar = dynamic_cast< P_CHAR >( pOCont->container() );
if( pChar && pChar != pc_currchar )
{
if( !pChar->inRange( pc_currchar, 2 ) )
socket->sysMessage( tr( "You must stand nearer to snoop!" ) );
else
Skills->Snooping( pc_currchar, pi );
}
else if( pChar == pc_currchar )
socket->sendContainer( pi );
}
return;
}
else if( pi->container()->isChar() )
{
// Equipped on another character
P_CHAR pChar = dynamic_cast< P_CHAR >( pi->container() );