Program Simple_Bod_Taker;
var ProfileList : Array of String; // Variable Declaration
var i : Integer; // we declare this for loop
const Timeout = 60000; // Declaring a Constant 60 * 1000ms( 1s = 1000ms ) = 60 Min
const NPCID = $00003011; // Here we save the ID of the NPC
const BODGumpID_Small = $9BADE6EA; // static type for small BodGumps on Runuo
const BodGumpID_Large = $A125B54A; // static type for large BodGumps on Runuo
const GumpButtonPacket = 1; // PacketValue to send "OK-Button"
const ContextMenuEntryValue = 1; // Entrypoint for Context on Runuo Sample
Procedure Login(Profile:String);
begin
  if ( Connected() ) then
  begin
   Disconnect();// To Avoid already online Character
   Wait(10000); // If we Logout we wait 10 seconds
  end;                                            
  while ( Not Connected() ) do // Loop until we Connect
  begin                                                
    while ( ProfileName() <> Profile ) do // We Check if we need to change Profile
    begin
      ChangeProfile(Profile); // We change Profile
      Wait(30000); // For Security we wait 30 seconds
    end;                                 
    Connect(); // We connect to Gameserver
    Wait(10000); // Security Wait
  end;
end;
Procedure Logout();
begin
  while ( Connected() ) do // Logout Loop
  begin
   Disconnect();// Logout Character
   Wait(10000); // If we Logout we wait 10 seconds
  end;
end;
Procedure HideCharacter();
begin
  while ( Not Hidden() ) do
  begin
    UseSkill('Hiding'); // Use Hiding
    Wait(11000); // Wait ActionDelay( 10s ) + 1s latency ( latency can be different.. good maybe 50ms , lag maybe 800ms.. so 1s is safe )
  end;
end;
Procedure GetBod(ID:Cardinal);
var Flag : Boolean; // Checkup Flag
var ii,iii : Integer; // Loop Check
begin
  Flag := False;   // Just to setup the loop
  while ( Not Flag ) do //loop until you got Bod...
  begin
    if ( GetDistance( ID ) > 1 ) then // Checks if NPC is too far away
    begin
      newMoveXY( GetX(ID) , GetY(ID) , False , 1 , True ); // Moves to NPC with tolerance 1 Tile
      Wait(500); // Wait 500
    end
    else 
    begin
      for ii := 0 to GetGumpsCount() - 1 do // Checking all Gumps
      begin
        if (( GetGumpID(ii) = BODGumpID_Small)  or ( GetGumpID(ii) = BODGumpID_Large)) then // If Gump popped up
        begin
          if ( NumGumpButton(ii,GumpButtonPacket) ) then // Press Ok-Button
          begin
            exit; // Exit this procedure
          end;  
        end;
      end;
      if ( GetDistance( ID ) <= 2 ) then // Secondary Check if distance is ok
      begin
        ClearContextMenu(); // Clear old Context Menu Data   
        Wait(500);
        RequestContextMenu(ID); // Request Context Menu from ID; Note : Stealth knows now the whole context
        Wait(1000);
        SetContextMenuHook(ID,ContextMenuEntryValue); // Simple Hook to "Bulk Order Deed" in Context  
      end;     
    end;
  end;      
end;        
begin
  ProfileList :=['Crome']; //Here we fill the Array
  while ( True ) do // We make here an infinite Loop with this
  begin                                                       
    for i := 0 to Length(ProfileList) - 1 do // Array starts with Slot 0 so if we have 10 Items we have from 0 - 9.
    begin
      Login(ProfileList[i]); // Call Procedure Login
      GetBod(NPCID); // Call Procedure GetBod
      HideCharacter(); // Call Procedure HideCharacter for Hiding char
      Logout(); // Calls Procedure Logout
      // Loop end for Profile 
    end;                               
    exit;
    Wait(Timeout);// Here we go with the Delay...
  end;
end.
Very simple Script for Runuo ( shortly selfmade and 10x tested ) how to login , move to BlacksmithID , GetBod , Hide Character , Logout and Switch Profile ( Note Profile contains accountdata, but script only need profilenames => perfect for sharing).Osi have yet 1 limitation. you need to declare the Servernumber and the Characternumber before. So if Serverlist changes the value could differ. Maybe will be updated in future.
You also could expand this script in a lot of ways like :
Login at home
Get LRC Suite
Recall To Bodgiver
Scan Gump and declare if take or not
Use Bribery
Recall Home
Sort Bods
Drop LRC Suite
and much more..
const Timeout = 60000; // Declaring a Constant 60 * 1000ms( 1s = 1000ms ) = 60 Min
const NPCID = $00003011; // Here we save the ID of the NPC
const BODGumpID_Small = $9BADE6EA; // static type for small BodGumps on Runuo
const BodGumpID_Large = $A125B54A; // static type for large BodGumps on Runuo
const GumpButtonPacket = 1; // PacketValue to send "OK-Button"
const ContextMenuEntryValue = 1; // Entrypoint for Context on Runuo SampleThis could differ from Server to Server.
With Version 6.0 we will introduce the new API, so i will write a few advanced scripts in Delphi or .Net ( Not sure yet. Since i start as Delphi-Developer irl soon ... )