本文整理汇总了C++中P_ITEM::moveTo方法的典型用法代码示例。如果您正苦于以下问题:C++ P_ITEM::moveTo方法的具体用法?C++ P_ITEM::moveTo怎么用?C++ P_ITEM::moveTo使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类P_ITEM
的用法示例。
在下文中一共展示了P_ITEM::moveTo方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: dropOnGround
void DragAndDrop::dropOnGround( cUOSocket* socket, P_ITEM pItem, const Coord_cl& pos )
{
P_PLAYER pChar = socket->player();
// Check if the destination is in line of sight
if ( !pChar->lineOfSight( pos.losItemPoint(pItem->id()) ) )
{
socket->bounceItem( pItem, BR_OUT_OF_SIGHT );
return;
}
if ( !pChar->canPickUp( pItem ) )
{
socket->bounceItem( pItem, BR_CANNOT_PICK_THAT_UP );
return;
}
if ( pItem->onDropOnGround( pos ) )
{
// We're still dragging something
if ( socket->dragging() )
socket->bounceItem( socket->dragging(), BR_NO_REASON );
return;
}
pItem->removeFromCont();
pItem->moveTo( pos );
pItem->update();
// Play Sounds for non gold items
if (pItem->id() != 0xEED) {
pItem->soundEffect(0x42);
}
}
示例2: reSpawn
// do one spawn and reset the timer
void cSpawnRegion::reSpawn( void )
{
this->checkForDeleted();
UI16 i = 0;
for( i = 0; i < this->npcsPerCycle_; i++ )
{
if( this->npcSerials_.size() < this->maxNpcAmt_ )
{
// spawn a random npc
// first find a valid position for the npc
Coord_cl pos;
if( this->findValidSpot( pos ) )
{
QString NpcSect = this->npcSections_[ RandomNum( 1, this->npcSections_.size() ) - 1 ];
P_NPC pc = cCharStuff::createScriptNpc( NpcSect, pos );
if( pc != NULL )
{
this->npcSerials_.push_back( pc->serial() );
pc->setSpawnregion( this->name_ );
}
}
}
}
for( i = 0; i < this->itemsPerCycle_; i++ )
{
if( this->itemSerials_.size() < this->maxItemAmt_ )
{
// spawn a random item
// first find a valid position for the item
Coord_cl pos;
if( this->findValidSpot( pos ) )
{
QString ItemSect = this->itemSections_[ RandomNum( 1, this->itemSections_.size() ) - 1 ];
P_ITEM pi = cItem::createFromScript( ItemSect );
if( pi != NULL )
{
pi->moveTo( pos );
this->itemSerials_.push_back( pi->serial() );
// pi->setSpawnRegion( this->name_ );
}
}
}
}
this->nextTime_ = uiCurrentTime + RandomNum( this->minTime_, this->maxTime_ ) * MY_CLOCKS_PER_SEC;
}
示例3: spawnSingleItem
void cSpawnRegion::spawnSingleItem()
{
Coord_cl pos;
if ( findValidSpot( pos ) )
{
QString ItemSect = this->itemSections_[RandomNum( 1, this->itemSections_.size() ) - 1];
P_ITEM pi = cItem::createFromScript( ItemSect );
if ( pi )
{
pi->moveTo( pos, true );
pi->setSpawnregion( this );
pi->update();
onSpawn( pi );
}
}
}
示例4: dropOnGround
void cDragItems::dropOnGround( P_CLIENT client, P_ITEM pItem, const Coord_cl &pos )
{
P_CHAR pChar = client->player();
// Check if the destination is in line of sight
if( !line_of_sight( client->socket(), pChar->pos, pos, TREES_BUSHES|WALLS_CHIMNEYS|DOORS|ROOFING_SLANTED|FLOORS_FLAT_ROOFING|LAVA_WATER ) )
{
client->sysMessage( "You cannot see the target." );
bounceItem( client, pItem );
return;
}
if( !pChar->canPickUp( pItem ) )
{
bounceItem( client, pItem );
return;
}
pItem->setContSerial( INVALID_SERIAL );
pItem->moveTo( pos );
pItem->setLayer( 0 );
RefreshItem( pItem ); // Send it to all clients in range
pChar->weight -= pItem->getWeight();
statwindow( client->socket(), pChar ); // Update our weight-stats
if( pItem->glow != INVALID_SERIAL )
{
pChar->removeHalo( pItem );
pChar->glowHalo( pItem );
}
// Multi handling (Hm i don't like that...)
if( pChar->multis > 0 )
{
P_ITEM pMulti = FindItemBySerial( pChar->multis );
if( pMulti != NULL )
{
pMulti = findmulti( pItem->pos );
if( pItem != NULL )
pItem->SetMultiSerial( pMulti->serial );
}
}
}
示例5: dropOnGround
void cDragItems::dropOnGround( cUOSocket *socket, P_ITEM pItem, const Coord_cl &pos )
{
P_PLAYER pChar = socket->player();
// Check if the destination is in line of sight
if( !lineOfSight( pChar->pos(), pos, WALLS_CHIMNEYS|DOORS|LAVA_WATER ) )
{
socket->bounceItem( pItem, BR_OUT_OF_SIGHT );
return;
}
if( !pChar->canPickUp( pItem ) )
{
socket->bounceItem( pItem, BR_CANNOT_PICK_THAT_UP );
return;
}
if( pItem->onDropOnGround( pos ) )
{
// We're still dragging something
if( socket->dragging() )
socket->bounceItem( socket->dragging(), BR_NO_REASON );
return;
}
pItem->removeFromCont();
pItem->moveTo( pos );
pItem->update();
if( pItem->priv() & 0x01 )
pItem->startDecay();
// Multi handling
// Has it been dropped into a multi
cMulti* pMulti = cMulti::findMulti( pos );
if( pMulti )
{
pMulti->addItem( pItem );
}
}
示例6: Turn
//.........这里部分代码省略.........
if( Block( pBoat, 0, 0, pBoat->dir ) )
{
pBoat->dir = olddir;
for( a = 0; a < d; a++ )
{
Xsend( Send[a], restart, 2 );
itemtalk( Send[a], pTiller, "Arr, something's in the way!" );
}
return;
}
pBoat->id2=id2;//set the id
if(pBoat->id2==pBoat->more1) pBoat->dir=0;//extra DIR error checking
if(pBoat->id2==pBoat->more2) pBoat->dir=6;
serial=pBoat->serial; // lb !!!
unsigned int ci;
vector<SERIAL> vecEntries = imultisp.getData(serial);
for (ci = 0; ci < vecEntries.size(); ci++)
{
P_ITEM pi = FindItemBySerial(vecEntries[ci]);
if (pi != NULL)
TurnStuff(pBoat, pi, turn);
}
vecEntries.clear();
vecEntries = cmultisp.getData(serial);
for (ci = 0; ci < vecEntries.size(); ci++)
{
P_CHAR pc = FindCharBySerial(vecEntries[ci]);
if (pc != NULL)
TurnStuff(pBoat, pc, turn);
}
//Set the DIR for use in the Offsets/IDs array
dir = (pBoat->dir&0x0F)/2;
//set it's Z to 0,0 inside the boat
pi_p1->MoveTo(pBoat->pos.x,pBoat->pos.y,pi_p1->pos.z);
pi_p1->id2 = cShipItems[dir][PORT_P_C];//change the ID
pi_p2->MoveTo(pBoat->pos.x,pBoat->pos.y,pi_p2->pos.z);
pi_p2->id2=cShipItems[dir][STAR_P_C];
pTiller->MoveTo(pBoat->pos.x,pBoat->pos.y, pTiller->pos.z);
pTiller->id2=cShipItems[dir][TILLERID];
pi_hold->MoveTo(pBoat->pos.x,pBoat->pos.y, pi_hold->pos.z);
pi_hold->id2=cShipItems[dir][HOLDID];
switch(pBoat->more1)//Now set what size boat it is and move the specail items
{
case 0x00:
case 0x04:
pi_p1->moveTo(pi_p1->pos + Coord_cl(iSmallShipOffsets[dir][PORT_PLANK][X], iSmallShipOffsets[dir][PORT_PLANK][Y], 0));
pi_p2->moveTo(pi_p2->pos + Coord_cl(iSmallShipOffsets[dir][STARB_PLANK][X], iSmallShipOffsets[dir][STARB_PLANK][Y], 0));
pTiller->moveTo(pTiller->pos + Coord_cl(iSmallShipOffsets[dir][TILLER][X], iSmallShipOffsets[dir][TILLER][Y], 0));
pi_hold->moveTo(pi_hold->pos + Coord_cl(iSmallShipOffsets[dir][HOLD][X], iSmallShipOffsets[dir][HOLD][Y], 0));
break;
case 0x08:
case 0x0C:
pi_p1->moveTo(pi_p1->pos + Coord_cl(iMediumShipOffsets[dir][PORT_PLANK][X], iMediumShipOffsets[dir][PORT_PLANK][Y], 0) );
pi_p2->moveTo(pi_p2->pos + Coord_cl(iMediumShipOffsets[dir][STARB_PLANK][X], iMediumShipOffsets[dir][STARB_PLANK][Y], 0) );
pTiller->moveTo(pTiller->pos + Coord_cl(iMediumShipOffsets[dir][TILLER][X], iMediumShipOffsets[dir][TILLER][Y], 0) );
pi_hold->moveTo(pi_hold->pos + Coord_cl(iMediumShipOffsets[dir][HOLD][X], iMediumShipOffsets[dir][HOLD][Y], 0) );
break;
case 0x10:
case 0x14:
pi_p1->moveTo(pi_p1->pos + Coord_cl(iLargeShipOffsets[dir][PORT_PLANK][X], iLargeShipOffsets[dir][PORT_PLANK][Y], 0) );
pi_p2->moveTo(pi_p2->pos + Coord_cl(iLargeShipOffsets[dir][STARB_PLANK][X], iLargeShipOffsets[dir][STARB_PLANK][Y], 0 ) );
pTiller->moveTo(pTiller->pos + Coord_cl(iLargeShipOffsets[dir][TILLER][X], iLargeShipOffsets[dir][TILLER][Y], 0 ) );
pi_hold->moveTo(pi_hold->pos + Coord_cl(iLargeShipOffsets[dir][HOLD][X], iLargeShipOffsets[dir][HOLD][Y], 0 ) );
break;
default:
{
sprintf((char*)temp,"Turnboatstuff() more1 error! more1 = %c not found!\n",pBoat->more1);
LogWarning((char*)temp);
}
}
sendinrange(pi_p1);
sendinrange(pi_p2);
sendinrange(pi_hold);
sendinrange(pTiller);
for (a = 0; a < d; ++a)
{
Xsend(Send[a],restart,2);
}
}
示例7: Move
void cBoat::Move(UOXSOCKET s, int dir, P_ITEM pBoat)
{//Move the boat and all it's items 1 square
int tx=0,ty=0;
int serial;
if (pBoat == NULL)
return;
serial = calcserial(pBoat->moreb1, pBoat->moreb2, pBoat->moreb3, pBoat->moreb4);
if (serial == INVALID_SERIAL) return;
P_ITEM pTiller = FindItemBySerial( serial );
if(pTiller == NULL)
return;
P_ITEM pi_p1 = FindItemBySerial( pBoat->morex );
if(pi_p1 == NULL)
return;
P_ITEM pi_p2 = FindItemBySerial( pBoat->morey );
if(pi_p2 == NULL)
return;
P_ITEM pHold = FindItemBySerial( pBoat->morez );
if(pHold == NULL)
return;
Xsend(s,wppause,2);
switch(dir&0x0F)//Which DIR is it going in?
{
case '\x00' :
ty--;
break;
case '\x01' :
tx++;
ty--;
break;
case '\x02' :
tx++;
break;
case '\x03' :
tx++;
ty++;
break;
case '\x04' :
ty++;
break;
case '\x05' :
tx--;
ty++;
break;
case '\x06' :
tx--;
break;
case '\x07' :
tx--;
ty--;
break;
default:
{
sprintf((char*)temp,"warning: Boat direction error: %i int boat %i\n",pBoat->dir&0x0F,pBoat->serial);
LogWarning((char*)temp);
break;
}
}
if((pBoat->pos.x+tx<=200 || pBoat->pos.x+tx>=6000) && (pBoat->pos.y+ty<=200 || pBoat->pos.y+ty>=4900)) //bugfix LB
{
pBoat->type2=0;
itemtalk(s, pTiller, "Arr, Sir, we've hit rough waters!");
Xsend(s,restart,2);
return;
}
if(Block(pBoat,tx,ty,dir))
{
pBoat->type2=0;
itemtalk(s, pTiller, "Arr, somethings in the way!");
Xsend(s,restart,2);
return;
}
//Move all the special items
Coord_cl desloc(tx, ty, 0);
pBoat->moveTo(pBoat->pos + desloc);
pTiller->moveTo(pTiller->pos + desloc);
pi_p1->moveTo(pi_p1->pos + desloc);
pi_p2->moveTo(pi_p2->pos + desloc);
pHold->moveTo(pHold->pos + desloc);
serial = pBoat->serial;
unsigned int a;
vector<SERIAL> vecEntries = imultisp.getData(pBoat->serial);
for (a = 0; a < vecEntries.size(); a++)
{
P_ITEM pi = FindItemBySerial(vecEntries[a]);
if(pi != NULL)
{
pi->MoveTo(pi->pos.x+=tx, pi->pos.y+=ty, pi->pos.z);
sendinrange(pi);
//.........这里部分代码省略.........
示例8: 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 );*/
}
示例9: dropOnItem
//.........这里部分代码省略.........
client->sysMessage( "That spellbook already contains this spell" );
bounceItem( client, pItem );
return;
}
}
// We drop something on the belongings of one of our playervendors
if( ( packOwner != NULL ) && ( packOwner->npcaitype() == 17 ) && pChar->Owns( packOwner ) )
{
client->sysMessage( "You drop something into your playervendor" );
bounceItem( client, pItem );
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() == 9 || pCont->type() == 1 || pCont->type() == 8 || pCont->type() == 63 || pCont->type() == 65 || pCont->type() == 66 )
{
pItem->setContSerial( pCont->serial );
pItem->setLayer( 0 ); // Remove it from our drag-layer
// Huh ? - Make that random will you!
pItem->pos = dropPos;
SndRemoveitem( pItem->serial );
RefreshItem( pItem );
// Dropped on another Container/in another Container
soundeffect2( pChar, 0x57 );
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 );
RefreshItem( pCont ); // Need to update the amount
return;
}
// We have to *keep* our current item
else
{
pCont->setAmount( 65535 ); // Max out the amount
RefreshItem( pCont );
// 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 1
pItem->moveTo( pCont->pos );
pItem->pos.z++; // Increase z by 1
pItem->pos.y++; // To get it visualized do that with y as well
pItem->setLayer( 0 );
pItem->setContSerial( pCont->contserial );
RefreshItem( pItem );
// This needs to be checked
// It annoyingly shows the spellbook
// whenever you add a scroll
if( pCont->type() == 9 )
Magic->openSpellBook( pChar, pCont );
// Glowing Objects moved between chars
if( pItem->glow != INVALID_SERIAL )
{
pChar->removeHalo( pItem );
if( packOwner != NULL )
{
packOwner->addHalo(pItem);
packOwner->glowHalo(pItem);
}
}
}
示例10: dropOnItem
//.........这里部分代码省略.........
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 );
}
else
{
pCont->addItem( pItem, false );
pItem->setPos( dropPos );
}
// Dropped on another Container/in another Container
pChar->soundEffect( 0x57 );
pItem->update();
return;
}
else if ( pCont->canStack( pItem ) )
{
if ( pCont->amount() + pItem->amount() <= 65535 )
{
pCont->setAmount( pCont->amount() + pItem->amount() );
pItem->remove();
pCont->update(); // Need to update the amount
pCont->resendTooltip();
return;
}
else
{
// The delta between 65535 and pCont->amount() sub our Amount is the
// new amount
pItem->setAmount( pItem->amount() - ( 65535 - pCont->amount() ) );
pItem->resendTooltip();
pCont->setAmount( 65535 ); // Max out the amount
pCont->update();
pCont->resendTooltip();
}
}
// 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
if ( pCont->container() )
{
P_ITEM pNewCont = dynamic_cast<P_ITEM>( pCont->container() );
if ( pNewCont )
{
pNewCont->addItem( pItem, false );
pItem->setPos( pCont->pos() + Coord_cl( 0, 0, 2 ) );
}
else
{
pChar->getBackpack()->addItem( pItem );
}
}
else
{
pItem->removeFromCont();
pItem->moveTo( pCont->pos() + Coord_cl( 0, 0, 2 ) );
}
pItem->update();
}
示例11: CombatHit
// CombatHit now expects that LineOfSight has been checked before (Duke, 10.7.2001)
void cCombat::CombatHit(P_CHAR pc_attacker, P_CHAR pc_deffender, unsigned int currenttime, short los)
{
char hit;
if (pc_deffender == NULL || pc_attacker == NULL)
return;
UOXSOCKET s1=calcSocketFromChar(pc_attacker), s2=calcSocketFromChar(pc_deffender);
unsigned short fightskill = Skills->GetCombatSkill(pc_attacker), bowtype = Combat->GetBowType(pc_attacker),splitnum,splitcount,hitin;
unsigned int basedamage;
int damage; // removed from unsigne by Magius(CHE)
signed int x;
// Magius(CHE) - For armour absorbtion system
int maxabs, maxnohabs, tmpj;
P_ITEM pWeapon=pc_attacker->getWeapon();// get the weapon item only once
if (pWeapon && !(rand()%50) // a 2 percent chance (Duke, 07.11.2000)
&& pWeapon->type !=9) // but not for spellbooks (Duke, 09/10/00)
{
pWeapon->hp--; //Take off a hit point
if(pWeapon->hp<=0)
{
sysmessage(s1, tr("Your weapon has been destroyed"));
if ((pWeapon->trigon==1) && (pWeapon->layer>0))// -Frazurbluu- Trigger Type 2 is my new trigger type *-
{
Trig->triggerwitem(s1, pWeapon, 1); // trigger is fired when item destroyed
}
Items->DeleItem(pWeapon);
}
}
// End here - Magius(CHE) - For armour absorbtion system
pc_attacker->swingtarg=-1;
if((chardist(pc_attacker, pc_deffender)>1 && fightskill!=ARCHERY) || !los) return;
if(pc_deffender->isNpc() && pc_deffender->isInvul()) return; // ripper
hit=Skills->CheckSkill(pc_attacker, fightskill, 0, 1000); // increase fighting skill for attacker and defender
if (!hit)
{
if (pc_attacker->isPlayer())
doMissedSoundEffect(pc_attacker);
if ((fightskill==ARCHERY)&&(los))
{
if (rand()%3-1)//-1 0 or 1
{
short id=0x1BFB; // bolts
if (bowtype==1)
id=0x0F3F; // arrows
P_ITEM pAmmo=Items->SpawnItem(pc_deffender,1,"#",1,id,0,0);
if(pAmmo)
{
pAmmo->moveTo(pc_deffender->pos);
pAmmo->priv=1;
RefreshItem(pAmmo);
}
}
}
}
else
{
if (!pc_deffender->isInvul())
{
if (pc_deffender->xid==0x0191) soundeffect2(pc_deffender,0x014b);
else if (pc_deffender->xid==0x0190) soundeffect2(pc_deffender,0x0156);
playmonstersound(pc_deffender, pc_deffender->id(), SND_DEFEND);
//AntiChrist -- for poisoned weapons
if((pWeapon) && (pWeapon->poisoned>0))
{
pc_deffender->poisoned=pWeapon->poisoned;
pc_deffender->poisontime=uiCurrentTime+(MY_CLOCKS_PER_SEC*(40/pc_deffender->poisoned)); // a lev.1 poison takes effect after 40 secs, a deadly pois.(lev.4) takes 40/4 secs - AntiChrist
pc_deffender->poisonwearofftime=pc_deffender->poisontime+(MY_CLOCKS_PER_SEC*SrvParams->poisonTimer()); //wear off starts after poison takes effect - AntiChrist
}
CheckPoisoning(s2, pc_attacker, pc_deffender); // attacker poisons defender
CheckPoisoning(s1, pc_deffender, pc_attacker); // and vice versa
if ((pc_deffender->effDex()>0)) pc_deffender->priv2&=0xFD; // unfreeze
if (fightskill!=WRESTLING && los)
Combat->ItemSpell(pc_attacker, pc_deffender);
if (fightskill!=WRESTLING || pc_attacker->isNpc())
basedamage=Combat->CalcAtt(pc_attacker); // Calc base damage
else
{
if ((pc_attacker->skill[WRESTLING]/100) > 0)
{
if (pc_attacker->skill[WRESTLING]/100!=0)
basedamage=rand()%(pc_attacker->skill[WRESTLING]/100);
else basedamage=0;
}
else basedamage=rand()%2;
//.........这里部分代码省略.........