void DoIt(int s)
virtual void DoIt(int s)
	void DoIt(int s)	{		P_ITEM piClick = FindItemBySerial( calcserial(addid1[s], addid2[s], addid3[s], addid4[s]) );		if( piClick == NULL )		{			sysmessage( s, "Original part no longer exists" );			return;		}				const P_ITEM piTarg=FindItemBySerPtr(buffer[s]+7);		if (piTarg==NULL || piTarg->isLockedDown())		{			sysmessage(s, tr("You can't combine these."));			return;		}				// make sure both items are in the player's backpack		P_ITEM pPack=Check4Pack(s);		if (pPack==NULL) return;		if ( piTarg->contserial!=pPack->serial			|| piClick->contserial!=pPack->serial)		{			sysmessage(s,tr("You can't use material outside your backpack") );			return;		}				// make sure the parts are of correct IDs AND they are different		checkPartID( piClick->id() );		checkPartID( piTarg->id() );		if (!decide())			sysmessage(s, tr("You can't combine these.") );		else		{			P_CHAR pc_currchar = currchar[s];			if (pc_currchar->skill[TINKERING]<minskill)			{				sysmessage(s, tr("You aren't skilled enough to even try that!") );				return;			}			if( !Skills->CheckSkill( pc_currchar, TINKERING, minskill, 1000 ) )			{				failmsg(s);				P_ITEM piLoser= rand()%2 ? piTarg : piClick;				piLoser->ReduceAmount(1);				playbad(s);			}			else			{				sysmessage(s, tr("You combined the parts") );				piClick->ReduceAmount(1);				piTarg->ReduceAmount(1);		// delete both parts 				createIt(s);						// spawn the item				playgood(s);			}		}	}