// CRIMINAL CHECK
#include "x3_inc_string"

int fnHasStolenGoods(object oPC)
{
  object oItem=GetFirstItemInInventory(oPC);
  string sMsg;
  int bRet=FALSE;
  while(GetIsObjectValid(oItem))
  { // check for stolen goods
    if(GetStolenFlag(oItem)==TRUE)
    {
      sMsg=StringToRGBString(GetName(oItem)+" is a stolen item.","744");
      SendMessageToPC(oPC,sMsg);
      bRet=TRUE;;
    }
    oItem=GetNextItemInInventory(oPC);
  } // check for stolen goods
  return bRet;
}

void main()
{
   int nN=1;
   object oMe=OBJECT_SELF;
   object oPC=GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC,oMe,nN,CREATURE_TYPE_PERCEPTION,PERCEPTION_SEEN,CREATURE_TYPE_IS_ALIVE,TRUE);
   object oTarget=OBJECT_INVALID;
   string sPID;
   while(oTarget==OBJECT_INVALID&&oPC!=OBJECT_INVALID)
   { // check for criminals
     sPID=GetPCPublicCDKey(oPC)+GetPCPlayerName(oPC)+GetName(oPC);
     if (GetLocalInt(oPC,"bPRISONESCAPE")==TRUE) oTarget=oPC;
     else if (GetLocalInt(oPC,"nCRIMECOUNT")>0) oTarget=oPC;
     else if (fnHasStolenGoods(oPC)&&GetLocalInt(GetModule(),sPID+"warn")!=GetCalendarDay())
     { // different day
       oTarget=oPC;
       SetLocalInt(oPC,"nCRIMECOUNT",GetLocalInt(oPC,"nCRIMECOUNT")+1);
       SetLocalInt(GetModule(),sPID+"warn",GetCalendarDay());
     } // different day
     nN++;
     oPC=GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC,oMe,nN,CREATURE_TYPE_PERCEPTION,PERCEPTION_SEEN,CREATURE_TYPE_IS_ALIVE,TRUE);
   } // check for criminals
   if (GetIsObjectValid(oTarget))
   { // issue warning
     AssignCommand(oMe,ClearAllActions(TRUE));
     AssignCommand(oMe,ActionStartConversation(oTarget,"municipal_guards",FALSE,FALSE));
   } // issue warning
}