本文整理汇总了C++中P_ITEM::getName方法的典型用法代码示例。如果您正苦于以下问题:C++ P_ITEM::getName方法的具体用法?C++ P_ITEM::getName怎么用?C++ P_ITEM::getName使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类P_ITEM
的用法示例。
在下文中一共展示了P_ITEM::getName方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: dropOnBanker
void cDragItems::dropOnBanker( P_CLIENT client, P_ITEM pItem, P_CHAR pBanker )
{
P_CHAR pChar = client->player();
// No cheque ? >> Put into bank
if( ( pItem->id() != 0x14F0 ) && ( pItem->type() != 1000 ) )
{
P_ITEM bankBox = pChar->getBankBox();
if( bankBox )
bankBox->AddItem( pItem );
else
bounceItem( client, pItem );
pBanker->talk( QString( "The %1 is now in thy bank box" ).arg( pItem->getName() ) );
return;
}
// No Value ?!
if( !pItem->value )
{
pBanker->talk( "This cheque does not have any value!" );
bounceItem( client, pItem );
return;
}
pChar->giveGold( pItem->value, true );
pBanker->talk( QString( "%1 I have cashed thy cheque and deposited %2 gold." ).arg( pChar->name.c_str() ).arg( pItem->amount() ) );
pItem->ReduceAmount();
statwindow( client->socket(), pChar );
}
示例2: dropOnBeggar
void DragAndDrop::dropOnBeggar( cUOSocket* socket, P_ITEM pItem, P_CHAR pBeggar )
{
int tempint;
if( ( pBeggar->hunger() < 6 ) && pItem->type() == 14 )
{
pBeggar->talk( tr("*cough* Thank thee!") );
pBeggar->soundEffect( 0x3A + RandomNum( 1, 3 ) );
// *You see Snowwhite eating some poisoned apples*
// Color: 0x0026
pBeggar->emote( tr( "*You see %1 eating %2*" ).arg( pBeggar->name() ).arg( pItem->getName() ) );
// We try to feed it more than it needs
if( pBeggar->hunger() + pItem->amount() > 6 )
{
// client->player()->karma += ( 6 - pBeggar->hunger() ) * 10;
tempint = ( 6 - pBeggar->hunger() ) * 10;
socket->player()->setKarma( socket->player()->karma() + tempint );
pItem->setAmount( pItem->amount() - ( 6 - pBeggar->hunger() ) );
pBeggar->setHunger( 6 );
// Pack the rest into his backpack
bounceItem( socket, pItem );
return;
}
pBeggar->setHunger( pBeggar->hunger() + pItem->amount() );
// client->player()->karma += pItem->amount() * 10;
tempint = pItem->amount() * 10;
socket->player()->setKarma( socket->player()->karma() + tempint );
pItem->remove();
return;
}
// No Food? Then it has to be Gold
if( pItem->id() != 0xEED )
{
pBeggar->talk( tr("Sorry, but i can only use gold.") );
bounceItem( socket, pItem );
return;
}
pBeggar->talk( tr( "Thank you %1 for the %2 gold!" ).arg( socket->player()->name() ).arg( pItem->amount() ) );
socket->sysMessage( tr("You have gained some karma!") );
if( pItem->amount() <= 100 )
socket->player()->setKarma( socket->player()->karma() + 10 );
else
socket->player()->setKarma( socket->player()->karma() + 50 );
pItem->remove();
}
示例3: dropOnPet
// Item was dropped on a pet
void cDragItems::dropOnPet( P_CLIENT client, P_ITEM pItem, P_CHAR pPet )
{
// Feed our pets
if( ( pPet->hunger() >= 6 ) || pItem->type() != 14 )
{
client->sysMessage( "It doesn't seem to want your item" );
bounceItem( client, pItem );
return;
}
// We have three different eating-sounds (I don't like the idea as they sound too human)
pPet->soundEffect( 0x3A + RandomNum( 1, 3 ) );
// If you want to poison a pet... Why not
if( pItem->poisoned && pPet->poisoned() < pItem->poisoned )
{
pPet->soundEffect( 0x246 );
pPet->setPoisoned( pItem->poisoned );
// a lev.1 poison takes effect after 40 secs, a deadly pois.(lev.4) takes 40/4 secs - AntiChrist
pPet->setPoisontime( uiCurrentTime + ( MY_CLOCKS_PER_SEC * ( 40 / pPet->poisoned() ) ) );
//wear off starts after poison takes effect - AntiChrist
pPet->setPoisonwearofftime(pPet->poisontime() + ( MY_CLOCKS_PER_SEC * SrvParams->poisonTimer() ) );
// Refresh the health-bar of our target
impowncreate( client->socket(), pPet, 1 );
}
// *You see Snowwhite eating some poisoned apples*
// Color: 0x0026
QString emote = QString( "*You see %1 eating %2*" ).arg( pPet->name.c_str() ).arg( pItem->getName() );
pPet->emote( emote );
// We try to feed it more than it needs
if( pPet->hunger() + pItem->amount() > 6 )
{
pItem->setAmount( pItem->amount() - ( 6 - pPet->hunger() ) );
pPet->setHunger( 6 );
// Pack the rest into his backpack
bounceItem( client, pItem );
return;
}
pPet->setHunger( pPet->hunger() + pItem->amount() );
Items->DeleItem( pItem );
}
示例4: dropFoodOnChar
// Food was dropped on a pet
void cDragItems::dropFoodOnChar( cUOSocket* socket, P_ITEM pItem, P_CHAR pChar )
{
// Feed our pets
if( pChar->hunger() >= 6 || pItem->type2() == 0 || !( pChar->nutriment() & ( 1 << (pItem->type2()-1) ) ) )
{
socket->sysMessage( tr("It doesn't seem to want your item") );
bounceItem( socket, pItem );
return;
}
// We have three different eating-sounds (I don't like the idea as they sound too human)
pChar->soundEffect( 0x3A + RandomNum( 1, 3 ) );
// If you want to poison a pet... Why not
if( pItem->poisoned() && pChar->poisoned() < pItem->poisoned() )
{
pChar->soundEffect( 0x246 );
pChar->setPoisoned( pItem->poisoned() );
// a lev.1 poison takes effect after 40 secs, a deadly pois.(lev.4) takes 40/4 secs - AntiChrist
pChar->setPoisonTime( uiCurrentTime + ( MY_CLOCKS_PER_SEC * ( 40 / pChar->poisoned() ) ) );
//wear off starts after poison takes effect - AntiChrist
pChar->setPoisonWearOffTime(pChar->poisonTime() + ( MY_CLOCKS_PER_SEC * SrvParams->poisonTimer() ) );
// Refresh the health-bar of our target
pChar->resend( false );
}
// *You see Snowwhite eating some poisoned apples*
// Color: 0x0026
pChar->emote( tr( "*You see %1 eating %2*" ).arg( pChar->name() ).arg( pItem->getName() ) );
// We try to feed it more than it needs
if( pChar->hunger() + pItem->amount() > 6 )
{
pItem->setAmount( pItem->amount() - ( 6 - pChar->hunger() ) );
pChar->setHunger( 6 );
// Pack the rest into his backpack
bounceItem( socket, pItem );
return;
}
pChar->setHunger( pChar->hunger() + pItem->amount() );
Items->DeleItem( pItem );
}
示例5: ItemDroppedOnPet
static bool ItemDroppedOnPet(NXWCLIENT ps, PKGx08 *pp, P_ITEM pi)
{
if (ps == NULL) return false;
VALIDATEPIR(pi, false);
P_CHAR pet = pointers::findCharBySerial(pp->Tserial);
VALIDATEPCR(pet, false);
NXWSOCKET s = ps->toInt();
P_CHAR pc = ps->currChar();
VALIDATEPCR(pc, false);
if((pet->hunger<6) && (pi->type==ITYPE_FOOD))//AntiChrist new hunger code for npcs
{
pc->playSFX( (UI16)(0x3A+(rand()%3)) ); //0x3A - 0x3C three different sounds
if(pi->poisoned)
{
pet->applyPoison(PoisonType(pi->poisoned));
}
std::string itmname;
if( pi->getCurrentName() == "#" )
{
char temp2[TEMP_STR_SIZE]; //xan -> this overrides the global temp var
pi->getName(temp2);
itmname = temp2;
}
else itmname = pi->getCurrentName();
pet->emotecolor = 0x0026;
pet->emoteall(TRANSLATE("* You see %s eating %s *"), 1, pet->getCurrentNameC(), itmname.c_str() );
pet->hunger++;
} else
{
ps->sysmsg(TRANSLATE("It doesn't appear to want the item"));
Sndbounce5(s);
if (ps->isDragging())
{
ps->resetDragging();
item_bounce5(s,pi);
}
}
return true;
}
示例6: ItemDroppedOnPet
static bool ItemDroppedOnPet(P_CLIENT ps, PKGx08 *pp, P_ITEM pi)
{
UOXSOCKET s = ps->GetSocket();
CHARACTER cc = ps->GetCurrChar();
P_CHAR pc_currchar = MAKE_CHAR_REF(cc);
P_CHAR pc_target = FindCharBySerial(pp->Tserial);
if( pc_target->hunger < 6 && pi->type == 14 )//AntiChrist new hunger code for npcs
{
soundeffect2(DEREF_P_CHAR(pc_currchar), 0x00, 0x3A+(rand()%3)); //0x3A - 0x3C three different sounds
if((pi->poisoned)&&(pc_target->poisoned<pi->poisoned))
{
soundeffect2(DEREF_P_CHAR(pc_target), 0x02, 0x46); //poison sound - SpaceDog
pc_target->poisoned=pi->poisoned;
pc_target->poisontime=uiCurrentTime+(MY_CLOCKS_PER_SEC*(40/pc_target->poisoned)); // a lev.1 poison takes effect after 40 secs, a deadly pois.(lev.4) takes 40/4 secs - AntiChrist
pc_target->poisonwearofftime=pc_target->poisontime+(MY_CLOCKS_PER_SEC*SrvParms->poisontimer); //wear off starts after poison takes effect - AntiChrist
impowncreate(s,DEREF_P_CHAR(pc_target),1); //Lb, sends the green bar !
}
if(pi->name[0]=='#') pi->getName(temp2);
sprintf((char*)temp,"* You see %s eating %s *",pc_target->name,temp2);
pc_target->emotecolor1=0x00;
pc_target->emotecolor2=0x26;
npcemoteall(DEREF_P_CHAR(pc_target),(char*)temp,1);
pc_target->hunger++;
}
else
{
sysmessage(s,"It doesn't appear to want the item");
Sndbounce5(s);
if (ps->IsDragging())
{
ps->ResetDragging();
item_bounce5(s,pi);
}
}
return true;
}
示例7: dropOnBeggar
void cDragItems::dropOnBeggar( cUOSocket* socket, P_ITEM pItem, P_CHAR pBeggar )
{
int tempint;
if( ( pBeggar->hunger() < 6 ) && pItem->type() == 14 )
{
pBeggar->talk( tr("*cough* Thank thee!") );
pBeggar->soundEffect( 0x3A + RandomNum( 1, 3 ) );
// If you want to poison a pet... Why not
if( pItem->poisoned() && pBeggar->poisoned() < pItem->poisoned() )
{
pBeggar->soundEffect( 0x246 );
pBeggar->setPoisoned( pItem->poisoned() );
// a lev.1 poison takes effect after 40 secs, a deadly pois.(lev.4) takes 40/4 secs - AntiChrist
pBeggar->setPoisonTime( uiCurrentTime + ( MY_CLOCKS_PER_SEC * ( 40 / pBeggar->poisoned() ) ) );
//wear off starts after poison takes effect - AntiChrist
pBeggar->setPoisonWearOffTime( pBeggar->poisonTime() + ( MY_CLOCKS_PER_SEC * SrvParams->poisonTimer() ) );
// Refresh the health-bar of our target
pBeggar->resend( false );
}
// *You see Snowwhite eating some poisoned apples*
// Color: 0x0026
pBeggar->emote( tr( "*You see %1 eating %2*" ).arg( pBeggar->name() ).arg( pItem->getName() ) );
// We try to feed it more than it needs
if( pBeggar->hunger() + pItem->amount() > 6 )
{
// client->player()->karma += ( 6 - pBeggar->hunger() ) * 10;
tempint = ( 6 - pBeggar->hunger() ) * 10;
socket->player()->setKarma( socket->player()->karma() + tempint );
pItem->setAmount( pItem->amount() - ( 6 - pBeggar->hunger() ) );
pBeggar->setHunger( 6 );
// Pack the rest into his backpack
bounceItem( socket, pItem );
return;
}
pBeggar->setHunger( pBeggar->hunger() + pItem->amount() );
// client->player()->karma += pItem->amount() * 10;
tempint = pItem->amount() * 10;
socket->player()->setKarma( socket->player()->karma() + tempint );
Items->DeleItem( pItem );
return;
}
// No Food? Then it has to be Gold
if( pItem->id() != 0xEED )
{
pBeggar->talk( tr("Sorry, but i can only use gold.") );
bounceItem( socket, pItem );
return;
}
pBeggar->talk( tr( "Thank you %1 for the %2 gold!" ).arg( socket->player()->name() ).arg( pItem->amount() ) );
socket->sysMessage( tr("You have gained some karma!") );
if( pItem->amount() <= 100 )
socket->player()->setKarma( socket->player()->karma() + 10 );
else
socket->player()->setKarma( socket->player()->karma() + 50 );
Items->DeleItem( pItem );
}
示例8: target_randomSteal
//.........这里部分代码省略.........
VALIDATEPI(pi);
if( pi->isNewbie() )
{//newbie
thief->sysmsg(TRANSLATE("... and fail because it is of no value to you."));
return;
}
if(pi->isSecureContainer())
{
thief->sysmsg(TRANSLATE("... and fail because it's a locked container."));
return;
}
if ( thief->checkSkill( STEALING,0,999) )
{
// 0 stealing 2 stones, 10 3 stones, 99.9 12 stones, 100 17 stones !!!
int cansteal = thief->skill[STEALING] > 999 ? 1700 : thief->skill[STEALING] + 200;
if ( ((pi->getWeightActual())>cansteal) && !pi->isContainer())//Containers
thief->sysmsg(TRANSLATE("... and fail because it is too heavy."));
else
if(pi->isContainer() && (weights::RecursePacks(pi)>cansteal))
thief->sysmsg(TRANSLATE("... and fail because it is too heavy."));
else
{
if (victim->amxevents[EVENT_CHR_ONSTOLEN])
{
g_bByPass = false;
victim->amxevents[EVENT_CHR_ONSTOLEN]->Call(victim->getSerial32(), thief->getSerial32());
if (g_bByPass==true)
return;
}
/*
victim->runAmxEvent( EVENT_CHR_ONSTOLEN, victim->getSerial32(), s);
if (g_bByPass==true)
return;
*/
P_ITEM thiefpack = thief->getBackpack();
VALIDATEPI(thiefpack);
pi->setContSerial( thiefpack->getSerial32() );
thief->sysmsg(TRANSLATE("... and you succeed."));
pi->Refresh();
//all_items(s);
}
}
else
thief->sysmsg(TRANSLATE(".. and fail because you're not good enough."));
if ( thief->skill[STEALING] < rand()%1001 )
{
thief->unHide();
thief->sysmsg(TRANSLATE("You have been caught!"));
thief->IncreaseKarma( ServerScp::g_nStealKarmaLoss);
thief->modifyFame( ServerScp::g_nStealFameLoss);
if (victim->IsInnocent() && thief->attackerserial!=victim->getSerial32() && Guilds->Compare(thief,victim)==0)//AntiChrist
setCrimGrey(thief, ServerScp::g_nStealWillCriminal);//Blue and not attacker and not guild
std::string itmname = "";
if ( pi->getCurrentName() != "#" )
itmname = pi->getCurrentName();
else
{
pi->getName( temp );
itmname = temp;
}
sprintf(temp,TRANSLATE("You notice %s trying to steal %s from you!"), thief->getCurrentNameC(), itmname.c_str());
sprintf(temp2,TRANSLATE("You notice %s trying to steal %s from %s!"), thief->getCurrentNameC(), itmname.c_str(), victim->getCurrentNameC());
if ( victim->npc)
victim->talkAll(TRANSLATE( "Guards!! A thief is amoung us!"),0);
else
victim->sysmsg(temp);
//send to all player temp2 = thief are stealing victim if are more intelligent and a bonus of luck :D
//
//
NxwSocketWrapper sw;
sw.fillOnline( thief, true );
for( sw.rewind(); !sw.isEmpty(); sw++ ) {
NXWCLIENT ps_i=sw.getClient();
if( ps_i==NULL ) continue;
P_CHAR pc_i=ps_i->currChar();
if ( ISVALIDPC(pc_i) )
if( (rand()%10+10==17) || ( (rand()%2==1) && (pc_i->in>=thief->in)))
sysmessage(ps_i->toInt(),temp2);
}
}
}
else
{
thief->sysmsg( TRANSLATE("... and realise you're too far away."));
}
}
示例9: target_stealing
//.........这里部分代码省略.........
return;
}
if (pi->amxevents[EVENT_IONSTOLEN]!=NULL)
{
g_bByPass = false;
pi->amxevents[EVENT_IONSTOLEN]->Call(pi->getSerial32(), thief->getSerial32(), victim->getSerial32());
if (g_bByPass==true)
return;
}
if (victim->amxevents[EVENT_CHR_ONSTOLEN])
{
g_bByPass = false;
victim->amxevents[EVENT_CHR_ONSTOLEN]->Call(victim->getSerial32(), thief->getSerial32());
if (g_bByPass==true)
return;
}
/*
pi->runAmxEvent( EVENT_IONSTOLEN, pi->getSerial32(), s, victim->getSerial32() );
if (g_bByPass==true)
return;
victim->runAmxEvent( EVENT_CHR_ONSTOLEN, victim->getSerial32(), s );
if (g_bByPass==true)
return;
*/
P_ITEM pack= thief->getBackpack();
VALIDATEPI(pack);
pi->setContSerial( pack->getSerial32() );
thief->sysmsg(TRANSLATE("You successfully steal the item."));
pi->Refresh();
result=+200;
//all_items(s); why all item?
}
else
{
thief->sysmsg( TRANSLATE("You failed to steal the item."));
result=-200;
//Only onhide when player is caught!
}
if ( rand()%1000 > ( thief->skill[STEALING] + result ) )
{
thief->unHide();
thief->sysmsg(TRANSLATE("You have been caught!"));
thief->IncreaseKarma(ServerScp::g_nStealKarmaLoss);
thief->modifyFame(ServerScp::g_nStealFameLoss);
if ( victim->IsInnocent() && thief->attackerserial != victim->getSerial32() && Guilds->Compare(thief,victim)==0)
setCrimGrey(thief, ServerScp::g_nStealWillCriminal); //Blue and not attacker and not same guild
std::string itmname ( "" );
char temp[TEMP_STR_SIZE]; //xan -> this overrides the global temp var
char temp2[TEMP_STR_SIZE]; //xan -> this overrides the global temp var
if ( pi->getCurrentName() != "#" )
itmname = pi->getCurrentName();
else
{
pi->getName( temp );
itmname = temp;
}
sprintf(temp,TRANSLATE("You notice %s trying to steal %s from you!"), thief->getCurrentNameC(), itmname.c_str());
sprintf(temp2,TRANSLATE("You notice %s trying to steal %s from %s!"), thief->getCurrentNameC(), itmname.c_str(), victim->getCurrentNameC());
if ( victim->npc )
if( victim->HasHumanBody() )
victim->talkAll(TRANSLATE( "Guards!! A thief is amoung us!"),0);
else
victim->sysmsg(temp);
//send to all player temp2 = thief are stealing victim if are more intelligent and a bonus of luck :D
NxwSocketWrapper sw;
sw.fillOnline( thief, true );
for( sw.rewind(); !sw.isEmpty(); sw++ ) {
NXWCLIENT ps_i=sw.getClient();
if(ps_i==NULL ) continue;
P_CHAR pc_i=ps_i->currChar();
if ( ISVALIDPC(pc_i) )
if( (rand()%10+10==17) || ( (rand()%2==1) && (pc_i->in>=thief->in)))
pc_i->sysmsg(temp2);
}
}
}
else
{
thief->sysmsg(TRANSLATE("You are too far away to steal that item."));
}
AMXEXECSVTARGET( thief->getSerial32(),AMXT_SKITARGS,STEALING,AMX_AFTER);
}
示例10: 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
//.........这里部分代码省略.........
示例11: pack_item
//.........这里部分代码省略.........
{
Items->DeleItem(pItem);
sysmessage(s, "As you let go of the item it disappears.");
return;
}
// - Spell Book
if (pCont->type==9)
{
if (!IsSpellScroll72(pItem->id()))
{
sysmessage(s, "You can only place spell scrolls in a spellbook!");
Sndbounce5(s);
if (ps->IsDragging())
{
ps->ResetDragging();
item_bounce3(pItem);
}
if (pCont->id1>=0x40)
senditem(s, pCont);
return;
}
P_ITEM pBackpack = Packitem(pc_currchar);
if (pBackpack != NULL) // lb
{
if (!pc_currchar->Wears(pCont) &&
(!(pCont->contserial==pBackpack->serial)) && (!(pc_currchar->canSnoop())))
{
sysmessage(s, "You cannot place spells in other peoples spellbooks.");
item_bounce6(ps,pItem);
return;
}
if(pItem->name[0]=='#')
pItem->getName(temp2);
else
strcpy((char*)temp2,pItem->name);
vector<SERIAL> vecContainer = contsp.getData(pCont->serial);
for (unsigned int i = 0; i < vecContainer.size(); i++) // antichrist , bugfix for inscribing scrolls
{
P_ITEM pi = FindItemBySerial(vecContainer[i]);
if (pi != NULL)
{
if(pi->name[0]=='#')
pi->getName(temp);
else
strcpy((char*)temp, pi->name);
if(!(strcmp((char*)temp,(char*)temp2)) || !(strcmp((char*)temp,"All-Spell Scroll")))
{
sysmessage(s,"You already have that spell!");
item_bounce6(ps,pItem);
return;
}
}
}
}
}
// player run vendors
if (!(pCont->pileable && pItem->pileable && pCont->id()==pItem->id()
|| (pCont->type!=1 && pCont->type!=9)))
{
j=DEREF_P_CHAR(GetPackOwner(pCont));
if (j>-1) // bugkilling, LB, was j=!-1, arghh, C !!!
{
示例12: grabItem
// New Class implementation
void cDragItems::grabItem( P_CLIENT client )
{
// Get our character
P_CHAR pChar = client->player();
if( pChar == NULL )
return;
// Fetch the grab information
SERIAL iSerial = LongFromCharPtr( &buffer[ client->socket() ][ 1 ] );
UI16 amount = ShortFromCharPtr( &buffer[ client->socket() ][ 5 ] );
P_ITEM pItem = FindItemBySerial( iSerial );
if( !pItem )
return;
// Are we already dragging an item ?
// Bounce it and reject the move
// (Logged out while dragging an item)
if( client->dragging() )
{
bounceItem( client, client->dragging() );
bounceItem( client, pItem, true );
return;
}
// Do we really want to let him break his meditation
// When he picks up an item ?
// Maybe a meditation check here ?!?
pChar->disturbMed( client->socket() ); // Meditation
P_CHAR itemOwner = GetPackOwner( pItem, 64 );
// Try to pick something out of another characters posessions
if( itemOwner && ( itemOwner != pChar ) && ( !pChar->Owns( itemOwner ) ) )
{
client->sysMessage( QString( "You have to steal the %1 out of %2's posessions." ).arg( pItem->getName() ).arg( itemOwner->name.c_str() ) );
bounceItem( client, pItem, true );
return;
}
// Check if the user can grab the item
if( !pChar->canPickUp( pItem ) )
{
client->sysMessage( "You cannot pick that up." );
bounceItem( client, pItem, true );
return;
}
// The user can't see the item
// Basically thats impossible as the client should deny moving the item
// if it's not in line of sight but to prevent exploits
if( !line_of_sight( client->socket(), pChar->pos, pItem->pos, TREES_BUSHES|WALLS_CHIMNEYS|DOORS|ROOFING_SLANTED|FLOORS_FLAT_ROOFING|LAVA_WATER ) )
{
client->sysMessage( "You can't see the item." );
bounceItem( client, pItem, true );
return;
}
P_ITEM outmostCont = GetOutmostCont( pItem, 64 );
// If it's a trade-window, reset the ack-status
if( outmostCont && ( outmostCont->contserial == pChar->serial ) && ( 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->morez = 0;
outmostCont->morez = 0;
sendtradestatus( tradeWindow, outmostCont );
}
}
// If the top-most container ( thats important ) is a corpse
// and looting is a crime, flag the character criminal.
if( 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, FindCharBySerial( outmostCont->ownserial ) ) != 0 );
if( ( outmostCont->more2 == 1 ) && !pChar->Owns( outmostCont ) && !sameGuild )
{
pChar->karma -= 5;
criminal( pChar );
client->sysMessage( "You lost some karma." );
}
}
// Check if the item is too heavy
//if( !pc_currchar->isGMorCounselor() )
//{
//} << Deactivated (DarkStorm)
// ==== Grabbing the Item is allowed here ====
//.........这里部分代码省略.........
示例13: pack_item
//.........这里部分代码省略.........
{
pItem->Delete();
ps->sysmsg(TRANSLATE("As you let go of the item it disappears."));
return;
}
// - Spell Book
if (pCont->type==ITYPE_SPELLBOOK)
{
if (!pItem->IsSpellScroll72())
{
ps->sysmsg(TRANSLATE("You can only place spell scrolls in a spellbook!"));
Sndbounce5(s);
if (ps->isDragging())
{
ps->resetDragging();
item_bounce3(pItem);
}
if (pCont->getId() >= 0x4000)
senditem(s, pCont);
return;
}
pack= pc->getBackpack();
if(ISVALIDPI(pack))
{
if ((!(pCont->getContSerial()==pc->getSerial32())) &&
(!(pCont->getContSerial()==pack->getSerial32())) && (!(pc->CanSnoop())))
{
ps->sysmsg(TRANSLATE("You cannot place spells in other peoples spellbooks."));
item_bounce6(ps,pItem);
return;
}
if( strncmp(pItem->getCurrentNameC(), "#", 1) )
pItem->getName(temp2);
else
strcpy(temp2,pItem->getCurrentNameC());
NxwItemWrapper sii;
sii.fillItemsInContainer( pCont, false );
for( sii.rewind(); !sii.isEmpty(); sii++ ) {
P_ITEM pi_ci=sii.getItem();
if (ISVALIDPI(pi_ci))
{
if( strncmp(pi_ci->getCurrentNameC(), "#", 1) )
pi_ci->getName(temp);
else
strcpy(temp,pi_ci->getCurrentNameC());
if(!(strcmp(temp,temp2)) || !(strcmp(temp,"All-Spell Scroll")))
{
ps->sysmsg(TRANSLATE("You already have that spell!"));
item_bounce6(ps,pItem);
return;
}
}
// Juliunus, to prevent ppl from wasting scrolls.
if (pItem->amount > 1)
{
ps->sysmsg(TRANSLATE("You can't put more than one scroll at a time in your book."));
item_bounce6(ps,pItem);
return;
}
}