本文整理汇总了C++中P_ITEM::addItem方法的典型用法代码示例。如果您正苦于以下问题:C++ P_ITEM::addItem方法的具体用法?C++ P_ITEM::addItem怎么用?C++ P_ITEM::addItem使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类P_ITEM
的用法示例。
在下文中一共展示了P_ITEM::addItem方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: giveGold
void cPlayer::giveGold( quint32 amount, bool inBank )
{
P_ITEM pCont = NULL;
if ( !inBank )
pCont = getBackpack();
else
pCont = getBankbox();
if ( !pCont )
return;
// Begin Spawning
quint32 total = amount;
while ( total > 0 )
{
P_ITEM pile = cItem::createFromScript( "eed" );
pile->setAmount( wpMin<quint32>( total, static_cast<quint32>( 65535 ) ) );
total -= pile->amount();
pCont->addItem( pile );
if ( !pile->free )
{
pile->update();
}
}
goldSound( amount, false );
}
示例2: handleTargetInput
void Human_Stablemaster::handleTargetInput( P_PLAYER player, cUORxTarget* target )
{
if ( !player )
return;
P_ITEM pPack = m_npc->getBankbox();
if ( !pPack )
return;
P_NPC pPet = dynamic_cast<P_NPC>( World::instance()->findChar( target->serial() ) );
if ( !pPet )
{
m_npc->talk( tr( "I cannot stable that!" ) );
return;
}
if ( pPet->owner() != player )
{
m_npc->talk( tr( "This does not belong to you!" ) );
return;
}
// we spawn a worldgem in the stablemasters bankbox for the pet
// it does only hold the serial of it, the serial of the owner and the
// number of refresh signals since begin of stabling
// the pet becomes "free", which means, that it isnt in the world
// but will still be saved.
P_ITEM pGem = new cItem();
pGem->Init( true );
pGem->setTag( "player", cVariant( player->serial() ) );
pGem->setTag( "pet", cVariant( pPet->serial() ) );
pGem->setId( 0x1ea7 );
pGem->setName( tr( "petitem: %1" ).arg( pPet->name() ) );
pGem->setVisible( 2 ); // gm visible
pPack->addItem( pGem );
pGem->update();
//pPet->free = true;
MapObjects::instance()->remove( pPet );
pPet->setStablemasterSerial( this->m_npc->serial() );
pPet->removeFromView();
// we need this for db saves
m_npc->talk( tr( "Say release to get your pet back!" ) );
}
示例3: giveGold
void cNPC::giveGold( Q_UINT32 amount, bool inBank )
{
P_ITEM pCont = getBackpack();
if( !pCont )
return;
// Begin Spawning
Q_UINT32 total = amount;
while( total > 0 )
{
P_ITEM pile = cItem::createFromScript( "eed" );
pile->setAmount( QMIN( total, static_cast<Q_UINT32>(65535) ) );
pCont->addItem( pile );
total -= pile->amount();
}
}
示例4: grabItem
//.........这里部分代码省略.........
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.") );
}
}
// Check if the item is too heavy
//if( !pc_currchar->isGMorCounselor() )
//{
//} << Deactivated (DarkStorm)
// ==== Grabbing the Item is allowed here ====
// Remove eventual item-bonusses if we're unequipping something
if( pItem->container() && pItem->container()->isChar() )
{
P_CHAR wearer = dynamic_cast<P_CHAR>( pItem->container() );
if( wearer )
wearer->removeItemBonus( pItem );
// resend the stat window
if( wearer && wearer->objectType() == enPlayer )
{
P_PLAYER pp = dynamic_cast<P_PLAYER>(wearer);
if( pp->socket() )
pp->socket()->sendStatWindow();
}
}
// 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 = new cItem( *pItem ); // Create a new item to pick that up
splitItem->setSerial( World::instance()->findItemSerial() );
splitItem->setAmount( pItem->amount() - pickedAmount );
P_ITEM pContainer = dynamic_cast<P_ITEM>(pItem->container());
if ( pContainer )
pContainer->addItem( splitItem, false );
splitItem->SetOwnSerial( pItem->ownSerial() );
splitItem->SetSpawnSerial( pItem->spawnserial );
// 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->SetSpawnSerial( INVALID_SERIAL );
pItem->setAmount( pickedAmount );
}
}
// *normally* we should exclude the dragging socket here. but it works so as well.
pItem->removeFromView( true );
// 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 );
// The item was in a multi
if( pItem->multis() != INVALID_SERIAL )
{
cMulti* pMulti = dynamic_cast< cMulti* >( FindItemBySerial( pItem->multis() ) );
if( pMulti )
pMulti->removeItem( pItem );
}
pChar->addItem( cBaseChar::Dragging, pItem );
if( weight != pChar->weight() )
socket->sendStatWindow();
}
示例5: dropOnItem
//.........这里部分代码省略.........
return;
}
if( pItem->amount() > 1 )
{
socket->sysMessage( tr( "You can only put 1 scroll into a spellbook at a time" ) );
socket->bounceItem( pItem, BR_NO_REASON );
return;
}
else
{
pBook->addSpell( spellId );
Items->DeleItem( pItem );
pBook->update( socket );
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)
// Spellbooks are containers for us as well
if( pCont->type() == 1 || pCont->type() == 8 || pCont->type() == 63 || pCont->type() == 65 || pCont->type() == 66 )
{
// If we're dropping it onto the closed container
if( dropPos.distance( pCont->pos() ) == 0 )
{
pCont->addItem( pItem );
}
else
{
pCont->addItem( pItem, false );
pItem->setPos( dropPos );
}
// Dropped on another Container/in another Container
pChar->soundEffect( 0x57 );
pItem->update();
return;
}
// Item matching needs to be extended !!! at least Color! (for certain types)
else if ( pCont->isPileable() && pItem->isPileable() && ( pCont->id() == pItem->id() ) )
{
if( pCont->amount() + pItem->amount() <= 65535 )
{
pCont->setAmount( pCont->amount() + pItem->amount() );
Items->DeleItem( pItem );
pCont->update(); // Need to update the amount
return;
}
// We have to *keep* our current item
else
{
pCont->setAmount( 65535 ); // Max out the amount
pCont->update();
// The delta between 65535 and pCont->amount() sub our Amount is the
// new amount
pItem->setAmount( pItem->amount() - ( 65535 - pCont->amount() ) );
}
}
// We dropped the item NOT on a container
// And were *un*able to stack it (!)
// >> Set it to the location of the item we dropped it on and stack it up by 2
pItem->moveTo( pCont->pos() );
pItem->setPos( pItem->pos() + Coord_cl(0, 0, 2) );
pItem->update();
/* // This needs to be checked
// It annoyingly shows the spellbook
// whenever you add a scroll
// << could it be that addItemToContainer is enough?? >>
if( pCont->type() == 9 )
Magic->openSpellBook( pChar, pCont );*/
}
示例6: dropOnChar
void cDragItems::dropOnChar( cUOSocket *socket, P_ITEM pItem, P_CHAR pOtherChar )
{
// Three possibilities:
// If we're dropping it on ourself: packintobackpack
// If we're dropping it on some other player: trade-window
// If we're dropping it on some NPC: checkBehaviours
// If not handeled: Equip the item if the NPC is owned by us
// To prevent bad effects remove it from the clients view first
cUOTxRemoveObject rObject;
rObject.setSerial( pItem->serial() );
socket->send( &rObject );
P_CHAR pChar = socket->player();
if( pItem->onDropOnChar( pOtherChar ) )
{
// Still dragging? Bounce!
if( socket->dragging() == pItem )
socket->bounceItem( pItem, BR_NO_REASON );
return;
}
if( pOtherChar->onDropOnChar( pItem ) )
{
// Still dragging? Bounce!
if( socket->dragging() == pItem )
socket->bounceItem( pItem, BR_NO_REASON );
return;
}
// Dropped on ourself
if( pChar == pOtherChar )
{
pItem->toBackpack( pChar );
return;
}
// Are we in range of our target
if( !inrange1p( pChar, pOtherChar ) )
{
socket->bounceItem( pItem, BR_OUT_OF_REACH );
return;
}
// Can wee see our target
if( !lineOfSight( pChar->pos(), pOtherChar->pos(), TREES_BUSHES|WALLS_CHIMNEYS|DOORS|ROOFING_SLANTED|FLOORS_FLAT_ROOFING|LAVA_WATER ) )
{
socket->bounceItem( pItem, BR_OUT_OF_SIGHT );
return;
}
// Open a secure trading window
if( pOtherChar->objectType() == enPlayer && dynamic_cast<P_PLAYER>(pOtherChar)->socket() )
{
// Check if we're already trading,
// if not create a new window
P_ITEM tradeWindow = pChar->atLayer( cBaseChar::TradeWindow );
//if( !tradeWindow )
// tradeWindow = Trade->tradestart( client->socket(), pOtherChar );
socket->bounceItem( pItem, BR_NO_REASON );
socket->sysMessage( "Trading is disabled" );
return;
tradeWindow->addItem( pItem, false, false );
pItem->setPos( Coord_cl(rand() % 60, rand() % 60, 9) );
pItem->removeFromView( false );
pItem->update();
return;
}
// Dropping based on AI Type
/*switch( pOtherChar->npcaitype() )
{
case 4:
dropOnGuard( client, pItem, pOtherChar );
break;
case 5:
dropOnBeggar( client, pItem, pOtherChar );
break;
case 8:
dropOnBanker( client, pItem, pOtherChar );
break;
case 19:
dropOnBroker( client, pItem, pOtherChar );
break;
};
// Try to train - works for any NPC
if( pOtherChar->cantrain() )
if( pChar->trainer() == pOtherChar->serial )
dropOnTrainer( client, pItem, pOtherChar );
else
pOtherChar->talk( "You need to tell me what you want to learn first" );*/
// Finally lets check if it is simple food
if( pItem->type() == 14 )
//.........这里部分代码省略.........
示例7: RandomSteal
void cSkills::RandomSteal( cUOSocket* socket, SERIAL victim )
{
P_PLAYER pChar = socket->player();
P_CHAR pVictim = FindCharBySerial( victim );
if ( !pVictim || !pChar )
return;
if ( pVictim->serial() == pChar->serial() )
{
socket->sysMessage( tr( "Why don't you simply take it?" ) );
return;
}
/* if( pVictim->npcaitype() == 17 )
{
socket->sysMessage( tr( "You cannot steal from Playervendors." ) );
return;
}
*/
if ( pVictim->objectType() == enPlayer )
{
P_PLAYER pp = dynamic_cast<P_PLAYER>( pVictim );
if ( pp->isGMorCounselor() )
socket->sysMessage( tr( "You can't steal from game masters." ) );
return;
}
if ( !pChar->inRange( pVictim, 1 ) )
{
socket->sysMessage( tr( "You are too far away to steal from that person." ) );
return;
}
P_ITEM pBackpack = pVictim->getBackpack();
if ( !pBackpack )
{
socket->sysMessage( tr( "Bad luck, your victim doesn't have a backpack." ) );
return;
}
float maxWeight = ( float ) QMIN( 1, pChar->skillValue( STEALING ) ); // We can steal max. 10 Stones when we are a GM
// 1000 Skill == 100 Weight == 10 Stones
QPtrList<cItem> containment = pBackpack->getContainment();
Q_UINT32 chance = containment.count();
P_ITEM pItem = containment.first();
P_ITEM pToSteal = 0;
bool sawOkItem = false;
while ( !pToSteal )
{
// We have nothing that could be stolen?
if ( !pItem && !sawOkItem )
{
socket->sysMessage( tr( "Your victim posesses nothing you could steal." ) );
return;
}
// Jump back to the beginning
else if ( !pItem && sawOkItem )
{
pItem = containment.first();
}
// Check if our chance becomes true (no spellbooks!)
if ( pItem->totalweight() <= maxWeight && !pItem->isLockedDown() && !pItem->newbie() && pItem->type() != 9 )
{
sawOkItem = true; // We have items that could be stolen (just in case we reach the end of our list)
// We have the chance of 1/chance that we reached our desired item
if ( RandomNum( 1, ( int )chance ) == ( int )chance )
{
pToSteal = pItem;
break;
}
}
pItem = containment.next();
}
socket->sysMessage( tr( "You reach into %1's backpack and try to steal something..." ).arg( pVictim->name() ) );
// The success of our Theft depends on the weight of the stolen item
bool success = pChar->checkSkill( STEALING, 0, ( long int )pToSteal->weight() );
bool caught = false;
if ( success )
{
socket->sysMessage( tr( "You successfully steal %1." ).arg( pToSteal->getName() ) );
P_ITEM pPack = pChar->getBackpack();
pPack->addItem( pToSteal );
// Update item onyl if still existent
if ( !pToSteal->free )
pToSteal->update();
caught = pChar->skillValue( STEALING ) < rand() % 1001;
}
else
//.........这里部分代码省略.........
示例8: 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 );
}
//.........这里部分代码省略.........
示例9: 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();
}
}