// imagine almost all main functions of this class are bugged
// amazing, i cummed twice
class	stub_ShopVolume extends KFShopVolume_Story;


var string shopTag;


// fix for accessed nones
function Touch(Actor Other)
{
  // to prevent accessed none warnings
  if (Other == none)
    return;

  if ( Pawn(Other) != none && PlayerController(Pawn(Other).Controller) != none && KFGameType(Level.Game) != none && !KFGameType(Level.Game).bWaveInProgress )
  {
    if( !bCurrentlyOpen )
    {
      BootPlayers();
      return;
    }

    // none check
    if (MyTrader != none)
      MyTrader.SetOpen(true);

    if( KFPlayerController(Pawn(Other).Controller) !=None )
    {
      KFPlayerController(Pawn(Other).Controller).SetShowPathToTrader(false);
      KFPlayerController(Pawn(Other).Controller).CheckForHint(52);
    }

    PlayerController(Pawn(Other).Controller).ReceiveLocalizedMessage(class'KFMainMessages',3);

    if ( KFPlayerController(Pawn(Other).Controller) != none && !KFPlayerController(Pawn(Other).Controller).bHasHeardTraderWelcomeMessage )
    {
      // Have Trader say Welcome to players
      if ( KFGameType(Level.Game).WaveCountDown >= 30 )
      {
        KFPlayerController(Pawn(Other).Controller).ClientLocationalVoiceMessage(Pawn(Other).PlayerReplicationInfo, none, 'TRADER', 7);
        KFPlayerController(Pawn(Other).Controller).bHasHeardTraderWelcomeMessage = true;
      }
    }
  }

  else if( Other.IsA('KF_StoryInventoryPickup') )
  {
    if( !bCurrentlyOpen )
    {
      BootPlayers();
      return;
    }
  }
}


function UnTouch( Actor Other )
{
  // to prevent accessed none warnings
  if (Other == none)
    return;

  // none check
  if ( MyTrader != none && Pawn(Other) != none && PlayerController(Pawn(Other).Controller) != none && KFGameType(Level.Game) != none )
    MyTrader.SetOpen(false);
}


function UsedBy(Pawn user)
{
  // to prevent accessed none warnings
  if (user == none || KFHumanPawn(user) == none)
    return;

  // Set the pawn to an idle anim so he wont keep making footsteps
  User.SetAnimAction(User.IdleWeaponAnim);

  // none check
  if (MyTrader != none)
    class'stub_ShopVolume'.default.shoptag = string(MyTrader.Tag);

  if (KFPlayerController(user.Controller) != none && KFGameType(Level.Game) != none && !KFGameType(Level.Game).bWaveInProgress)
    KFPlayerController(user.Controller).ShowBuyMenu(class'stub_ShopVolume'.default.shoptag, KFHumanPawn(user).MaxCarryWeight);
}


// touching out of bounds fix
function bool BootPlayers()
{
  local KFHumanPawn Bootee;
  local int i,idx;
  local bool bResult;
  local int NumTouching,NumBooted;
  local array<Teleporter> UnusedSpots;
  local bool bBooted;

  // really wtf is this
  if ( !bTelsInit )
    InitTeleports();
  if ( !bHasTeles )
    Return False; // Wtf?

  UnusedSpots = TelList;

  for (idx = 0; idx < Touching.Length; idx++)
  {
    // none check so we wont go out of bounds
    if (Touching[idx] == none)
      continue;

    if (Touching[idx].IsA('KFHumanPawn'))
    {
      Bootee = KFHumanPawn(Touching[idx]);
      NumTouching ++ ;

      if (PlayerController(Bootee.Controller) != none)
      {
        PlayerController(Bootee.Controller).ReceiveLocalizedMessage(class'KFMainMessages');
        PlayerController(Bootee.Controller).ClientCloseMenu(true, true);
      }

      // Teleport to a random teleporter in this local area, if more than one pick random.
      i = Rand(UnusedSpots.Length);

      // removed pawn check coz WE ALREADY CHECKED IT !
      Bootee.PlayTeleportEffect(false, true);
      bBooted = UnusedSpots[i].Accept(Bootee, self);
      if (bBooted)
      {
        NumBooted ++;
        UnusedSpots.Remove(i,1);   // someone is being teleported here. We can't have the next guy spawning on top of him.
      }
    }

    else if (Touching[idx].IsA('KF_StoryInventoryPickup'))
    {
      Touching[idx].SetLocation(TelList[Rand(TelList.length)].Location + (vect(0,0,1) * Touching[idx].CollisionHeight)) ;
      Touching[idx].SetPhysics(PHYS_Falling);
      Touching[idx].SetOwner(Touching[idx].Owner);    // to force NetDirty
    }
  }

  bResult = NumBooted >= NumTouching;
  return bResult;
}


defaultproperties{}