! Toll-Collector
!   Copyright (c)1997 AbyssWare
!   By: AbyssDragon
!       abyssdragon@juno.com   http://www.geocities.com/TimesSquare/2795
! Modified from civilian.scr by DCSoftware
!
! This will create people that don't let you past without paying. The
! amount of money you owe them is equal to their value. When creating
! Toll-Collectors, remember that if their strength is more than 0, you
! will be given the option to fight them, if their strength is 0, then
! you won't have that option.
! Npc.value is the cost to pass. 
! BUG: If you hit Cancel and move very quickly, you can get out of paying the
! toll. I can't think of a way to fix this right now. If anyone does, tell
! me, and I'll use your suggestion, if it's any good.
! -----------------------------------------------------------------------!
! INSERT THE FOLLOWING PART IN CONTROL.SCR, WHERE IT SAYS THINGS TO DO
!   EVERY MINUTE
! -----------------------------------------------------------------------!
foreach npc do
 if npc.type = TOLL then
  if abs(npc.x - player.x) < 2 or abs(npc.y - player.y) < 2 then
   if npc.v1 < 1 then
    runscript( npc.script, "OBJECT", TALK );
   endif;
  endif;
 endif;
endfor;
! -----------------------------------------------------------------------!
! END CONTROL SECTION
! -----------------------------------------------------------------------!

!------------------------------------------------------------------------!
:@TALK ! Talk to the character !
!------------------------------------------------------------------------!
  if npc.v1 = 1 then
   L0 = msgbox( EXCLAMATION, 1, "Okay", "You've already paid. Go away.");
   STOP;
  endif;

  if player.hp = 0 then
    writeln( player.name, " is dead!" );
    STOP;
  endif;

  if npc.count = 0 then
    L0 = msgbox( ERROR, 1, "Ok", "ERROR: NPC Script called with no NPC selected!" );
    STOP;
  endif;

  if npc.picture >= 0 then
    viewpcx(npc);
  endif;

! Now, set some variables..
  NPC.V0 = 1; ! From know on, remember we've been here
  S1 = swriteln( "Halt! To go on, you must pay my fee of ", npc.value, " gold.");
  if npc.str > 0 then
   L0 = msgbox( EXCLAMATION, 3, "Pay", "Cancel", "Fight", S1);
  else
   L0 = msgbox( EXCLAMATION, 2, "Pay", "Cancel", S1);
  endif;
  on L0 goto PAY, XSTOP, BATTLE;
  goto XSTOP;
 :PAY
  if group.gold < npc.value then
   L0 = msgbox( EXCLAMATION, 1, "Okay", "You can't go through until you pay my fee.");
  else
   dec( group.gold, npc.value);
   L0 = msgbox( EXCLAMATION, 1, "Okay", "Nice doing business with you...");
   npc.v1 = 1;
  endif;
  goto XSTOP;
 :BATTLE
   FIGHT;
   goto XSTOP;

! Feel free to expand on this list.. !

!-----------------------------------------------------------------!
! All STOPs now lead here so the screen can be restored if needed !
!-----------------------------------------------------------------!
:XSTOP
  if npc.picture >= 0 then
    paint(window); ! Assumes the picture fits in the window !
  endif;
  stats(-1); ! Refresh Statistics !
  STOP;

    Source: geocities.com/timessquare/2795

               ( geocities.com/timessquare)