int fnLevel(object oPC)
{
  int nRet=GetLevelByPosition(1,oPC);
  nRet=nRet+GetLevelByPosition(2,oPC);
  nRet=nRet+GetLevelByPosition(3,oPC);
  return nRet;
} // fnLevel()

int fnLowestLevel()
{
  int nRet=41;
  object oPC=GetFirstPC();
  while(oPC!=OBJECT_INVALID)
  {
    if (GetLocalString(oPC,"sTeamID")!=""&&fnLevel(oPC)<nRet&&GetIsDM(oPC)==FALSE&&oPC!=GetPCSpeaker()) nRet=fnLevel(oPC);
    oPC=GetNextPC();
  }
  return nRet;
} // fnLowestLevel()

int fnXP(int nLevel)
{
  int nRet=0;
  switch (nLevel)
  {
    case 1: { nRet=0; break; }
    case 2: { nRet=1000; break; }
    case 3: { nRet=3000; break; }
    case 4: { nRet=6000; break; }
    case 5: { nRet=10000; break; }
    case 6: { nRet=15000; break; }
    case 7: { nRet=21000; break; }
    case 8: { nRet=28000; break; }
    case 9: { nRet=36000; break; }
    case 10: { nRet=45000; break; }
    case 11: { nRet=55000; break; }
    case 12: { nRet=66000; break; }
    case 13: { nRet=78000; break; }
    case 14: { nRet=91000; break; }
    case 15: { nRet=105000; break; }
    case 16: { nRet=120000; break; }
    case 17: { nRet=136000; break; }
    case 18: { nRet=153000; break; }
    case 19: { nRet=171000; break; }
    case 20: { nRet=190000; break; }
    default: break;
  }
  return nRet;
}


// level up to 1 less than lowest level
void main()
{
   object oPC=GetPCSpeaker();
   int nLevel=fnLowestLevel()-1;
   if (nLevel<1) nLevel=1;
   if (nLevel>20) nLevel=20;
   SetXP(oPC,fnXP(nLevel));
}