本文整理汇总了C++中P_ITEM::container方法的典型用法代码示例。如果您正苦于以下问题:C++ P_ITEM::container方法的具体用法?C++ P_ITEM::container怎么用?C++ P_ITEM::container使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类P_ITEM
的用法示例。
在下文中一共展示了P_ITEM::container方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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: isInLockedItem
bool isInLockedItem( P_ITEM pItem )
{
if( pItem->container() && pItem->container()->isItem() )
{
P_ITEM pCont = dynamic_cast< P_ITEM >( pItem->container() );
if( pCont->type() == 8 || pCont->type() == 64 )
return false;
else
return isInLockedItem( pCont );
}
else
return false;
}
示例3: 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);
}
}
}
示例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: update
// override update
void cCorpse::update( cUOSocket* mSock )
{
// Do not send a normal item update here but something else instead
cItem::ContainerContent content = cItem::content();
cUOTxCorpseEquipment corpseEquip;
cUOTxItemContent corpseContent;
cUOTxSendItem sendItem;
corpseEquip.setSerial( serial() );
for ( QMap<Q_UINT8, SERIAL>::iterator it = equipment_.begin(); it != equipment_.end(); ++it )
{
P_ITEM pItem = World::instance()->findItem( it.data() );
if ( pItem && pItem->container() == this )
{
corpseEquip.addItem( it.key(), it.data() );
corpseContent.addItem( pItem );
}
}
if ( hairStyle_ )
{
corpseEquip.addItem( 11, 0x4FFFFFFE ); // Hair
corpseContent.addItem( 0x4FFFFFFE, hairStyle_, hairColor_, 0, 0, 1, serial() );
}
if ( beardStyle_ )
{
corpseEquip.addItem( 16, 0x4FFFFFFF ); // Beard
corpseContent.addItem( 0x4FFFFFFF, beardStyle_, beardColor_, 0, 0, 1, serial() );
}
sendItem.setId( id() );
sendItem.setAmount( bodyId_ );
sendItem.setSerial( serial() );
sendItem.setCoord( pos() );
sendItem.setDirection( direction() );
if ( bodyId_ >= 0x190 )
{
sendItem.setColor( color_ | 0x8000 );
}
else
{
sendItem.setColor( color_ );
}
if ( mSock )
{
sendTooltip( mSock );
mSock->send( &sendItem );
mSock->send( &corpseEquip );
mSock->send( &corpseContent );
}
else
{
for ( mSock = Network::instance()->first(); mSock; mSock = Network::instance()->next() )
{
if ( mSock->player() && mSock->player()->inRange( this, mSock->player()->visualRange() ) )
{
// Send item
// Send corpse clothing
// Send content
sendTooltip( mSock );
mSock->send( &sendItem );
mSock->send( &corpseEquip );
mSock->send( &corpseContent );
}
}
}
}
示例7: dropOnItem
void DragAndDrop::dropOnItem( cUOSocket* socket, P_ITEM pItem, P_ITEM pCont, const Coord_cl& dropPos )
{
P_PLAYER pChar = socket->player();
if ( pItem->isMulti() )
{
socket->sysMessage( tr( "You cannot put houses in containers" ) );
cUOTxBounceItem bounce;
bounce.setReason( BR_NO_REASON );
socket->send( &bounce );
pItem->remove();
return;
}
if ( pItem->onDropOnItem( pCont ) )
{
if ( pItem->free )
return;
if ( socket->dragging() )
socket->bounceItem( socket->dragging(), BR_NO_REASON );
return;
}
else if ( pCont->onDropOnItem( pItem ) )
{
if ( pItem->free )
return;
if ( socket->dragging() )
socket->bounceItem( socket->dragging(), BR_NO_REASON );
return;
}
// If the target belongs to another character
// It needs to be our vendor or else it's denied
P_CHAR packOwner = pCont->getOutmostChar();
if ( ( packOwner ) && ( packOwner != pChar ) && !pChar->isGM() )
{
// For each item someone puts into there
// He needs to do a snoop-check
if ( pChar->maySnoop() )
{
if ( !pChar->checkSkill( SNOOPING, 0, 1000 ) )
{
socket->sysMessage( tr( "You fail to put that into %1's pack" ).arg( packOwner->name() ) );
socket->bounceItem( pItem, BR_NO_REASON );
return;
}
}
if ( packOwner->objectType() == enPlayer || ( packOwner->objectType() == enNPC && dynamic_cast<P_NPC>( packOwner )->owner() != pChar ) )
{
socket->sysMessage( tr( "You cannot put that into the belongings of another player" ) );
socket->bounceItem( pItem, BR_NO_REASON );
return;
}
}
if ( !pChar->canPickUp( pItem ) )
{
socket->bounceItem( pItem, BR_CANNOT_PICK_THAT_UP );
return;
}
// We drop something on the belongings of one of our playervendors
/* if( ( packOwner != NULL ) && ( packOwner->npcaitype() == 17 ) && packOwner->owner() == pChar )
{
socket->sysMessage( tr( "You drop something into your playervendor (unimplemented)" ) );
socket->bounceItem( pItem, BR_NO_REASON );
return;
}*/
// Playervendors (chest equipped by the vendor - opened to the client)
/*if( !( pCont->pileable() && pItem->pileable() && pCont->id() == pItem->id() || ( pCont->type() != 1 && pCont->type() != 9 ) ) )
{
P_CHAR pc_j = GetPackOwner(pCont);
if (pc_j != NULL)
{
if (pc_j->npcaitype() == 17 && pc_j->isNpc() && pChar->Owns(pc_j))
{
pChar->inputitem = pItem->serial;
pChar->inputmode = cChar::enPricing;
sysmessage(s, "Set a price for this item.");
}
}
*/
// We may also drop into *any* locked chest
// So we can have post-boxes ;o)
if ( pCont->type() == 1 )
{
// If we're dropping it onto the closed container
if ( dropPos.x == 0xFFFF && dropPos.y == 0xFFFF )
{
pCont->addItem( pItem );
}
//.........这里部分代码省略.........
示例8: grabItem
//.........这里部分代码省略.........
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
// From a container/paperdoll
if ( !pItem->isInWorld() )
socket->soundEffect( 0x57, pItem );
// If we're picking up a specific amount of what we got
// Take that into account
if ( amount < pItem->amount() )
{
UI32 pickedAmount = QMIN( amount, pItem->amount() );
// We only have to split if we're not taking it all
if ( pickedAmount != pItem->amount() )
{
P_ITEM splitItem = pItem->dupe(); // Create a new item to pick that up
splitItem->setAmount( pItem->amount() - pickedAmount );
// Add tags to the splitted item
QStringList keys = pItem->getTags();
QStringList::const_iterator it = keys.begin();
for ( ; it != keys.end(); ++it )
{
splitItem->setTag( *it, pItem->getTag( *it ) );
}
P_ITEM pContainer = dynamic_cast<P_ITEM>( pItem->container() );
if ( pContainer )
pContainer->addItem( splitItem, false );
splitItem->SetOwnSerial( pItem->ownSerial() );
splitItem->setSpawnregion( pItem->spawnregion() );
// He needs to see the new item
splitItem->update();
// If we're taking something out of a spawn-region it's spawning "flag" is removed isn't it?
pItem->setAmount( pickedAmount );
}
}
// *normally* we should exclude the dragging socket here. but it works so as well.
pItem->removeFromView( true );
// Remove from spawnregion
pItem->setSpawnregion( 0 );
// Remove it from the World if it is in world, otherwise remove it from it's current container
if ( pItem->isInWorld() )
MapObjects::instance()->remove( pItem );
else
pItem->removeFromCont( true );
// Remove eventual item-bonusses if we're unequipping something
if ( pItem->container() && pItem->container()->isChar() )
{
P_CHAR wearer = dynamic_cast<P_CHAR>( pItem->container() );
// resend the stat window
if ( wearer && wearer->objectType() == enPlayer )
{
P_PLAYER pp = dynamic_cast<P_PLAYER>( wearer );
if ( pp->socket() )
pp->socket()->sendStatWindow();
}
}
pChar->addItem( cBaseChar::Dragging, pItem );
if ( weight != pChar->weight() )
{
socket->sendStatWindow();
}
}
示例9: dbl_click_item
void dbl_click_item(cUOSocket* socket, SERIAL target_serial) throw()
{
SERIAL serial = target_serial;
P_PLAYER pc_currchar = socket->player();
if( !pc_currchar->isGM() && /*pc_currchar->objectDelay() > 10 && ???*/ pc_currchar->objectDelay() >= uiCurrentTime )
{
socket->sysMessage(tr("You must wait to perform another action."));
return;
}
else
pc_currchar->setObjectDelay( SrvParams->objectDelay() * MY_CLOCKS_PER_SEC + uiCurrentTime );
P_ITEM pi = FindItemBySerial( serial );
if( !pi )
return;
if( pi->container() && pi->container()->isItem() && pi->type() != 1 && !pi->isInWorld())
{ // Cant use stuff that isn't in your pack.
P_CHAR pc_p = pi->getOutmostChar();
if( pc_p && pc_currchar != pc_p )
return;
}
else if( pi->container() && pi->container()->isChar() && pi->type() != 1 && !pi->isInWorld() )
{ // in a character.
P_CHAR pc_p = dynamic_cast<P_CHAR>(pi->container());
if (pc_p != NULL)
if( pc_p != pc_currchar && pi->layer() != 15 && pi->type() != 1 )
return;
}
// Criminal for looting an innocent corpse & unhidden if not owner...
if( pi->corpse() )
{
if (!pc_currchar->Owns(pi) && !pc_currchar->isGM()) {
pc_currchar->unhide();
}
// TODO: Add a XML option for this
if(!pc_currchar->Owns(pi) && !pc_currchar->isGM() && pc_currchar->isInnocent())
{
// Innocent Corpse and not in the same party && party allowance for looting?
if (pi->hasTag("notoriety") && pi->getTag("notoriety").toInt() == 0x01) {
P_PLAYER owner = dynamic_cast<P_PLAYER>(pi->owner());
bool allowed = false;
if (owner && owner->party() && owner->party() == pc_currchar->party()) {
// Check if the player allowed looting his corpse by party members
if (owner->party()->lootingAllowed().contains(owner)) {
allowed = true;
}
}
if (!allowed) {
pc_currchar->makeCriminal();
}
}
}
}
// Secure containers
if( pi->isLockedDown() && pi->secured() )
{
if( !pc_currchar->Owns( pi ) && !pc_currchar->isGM() )
{
socket->sysMessage( tr( "That is a secured chest!" ) );
return;
}
}
// Dead ppl can only use ankhs
if( pc_currchar->isDead() && pi->type() != 16 )
{
socket->sysMessage( tr( "Your ghostly hand passes trough the object." ) );
return;
}
// You can only use equipment on your own char
if( !pc_currchar->isGM() && pi->container() && pi->container()->isChar() && pi->container() != pc_currchar )
{
if( pi->layer() != 15 || !SrvParams->stealingEnabled() )
{
socket->sysMessage( tr( "You cannot use items equipped by other players." ) );
return;
}
}
// Call both events here
if( pc_currchar->onUse( pi ) )
return;
if( pi->onUse( pc_currchar ) )
return;
// Check item behaviour by it's tpye
switch (pi->type())
{
case 1: // normal containers
//.........这里部分代码省略.........