//----------------------------------------------------------------------------
 void CR2GiveItem::giveItemGranted( TDataSetRow creatureRowId, uint32 actionId )
{
	TPendingRequest::iterator it = _PendingRequest.find( creatureRowId );
	if( it != _PendingRequest.end() )
	{
		TCreatureItemRequest &vec = (*it).second;
		for( uint32 i = 0; i < vec.size(); ++ i)
		{
			if( vec[i].ActionId == actionId )
			{
				CCharacter *c = PlayerManager.getChar( vec[i].CharacterRowId );
				nlassert(c);
				CCreature *e = CreatureManager.getCreature(creatureRowId);
				CMirrorPropValueRO<TYPE_SHEET> sheetInMirror( TheDataset, creatureRowId, DSPropertySHEET );
				NLMISC::CSheetId sheetId(sheetInMirror());
				const CStaticCreatures *clientCreatureForm = CSheets::getCreaturesForm( sheetId );
				if(e == NULL) return; 
				sint32 dx = c->getX() - e->getX();
				sint32 dy = c->getY() - e->getY();
				sint32 sqrDist = dx*dx + dy*dy;
				sint32 squareCreatureColRadius = 0;
				if(clientCreatureForm != 0)
				{
					squareCreatureColRadius = (sint32)(1000.0f * max(clientCreatureForm->getColRadius(), max(clientCreatureForm->getColWidth(),clientCreatureForm->getColLength())));
					squareCreatureColRadius= squareCreatureColRadius * squareCreatureColRadius;
				}

				if (sqrDist > (MaxTalkingDistSquare * 1000 * 1000 + squareCreatureColRadius))
				{
					CCharacter::sendDynamicSystemMessage( vec[i].CharacterRowId, "BS_TARGET_TOO_FAR");
					return;
				}

				CUserEventMsg eventMsg;
				eventMsg.InstanceNumber = vec[i].InstanceId;
				eventMsg.GrpAlias = vec[i].GroupAlias;
				// add the character and npc as parameter of the event
				eventMsg.Params.push_back(c->getId().toString());
				eventMsg.Params.push_back(e->getId().toString());

				if( vec[i].IsGiveItem )
				{
					if( _ValidateGiveItemRequest( vec[i] ) )
					{
						CR2MissionItem::getInstance().destroyMissionItem( c->getId(), vec[i].ItemsRequest );

						eventMsg.EventId = 3;
						CWorldInstances::instance().msgToAIInstance(eventMsg.InstanceNumber, eventMsg);
					}
				}
				else
				{
					CR2MissionItem::getInstance().giveMissionItem( c->getId(), c->currentSessionId(), vec[i].ItemsRequest );
					
					eventMsg.EventId = 1;
					CWorldInstances::instance().msgToAIInstance(eventMsg.InstanceNumber, eventMsg);
				}

				vec[i] = vec.back();
				vec.pop_back();
				
				_SetClientDBAll( c, vec );
				
				if( vec.size() == 0 )
					_PendingRequest.erase( it );
				return;
			}
		}
	}
}