;================================== ; Script Name: Serial ; Author: Amdir ; Version: 1.00 ; Client Tested with: 6.0.1.10 ; EUO version tested with: 1.5.123 ; Shard OSI / FS: UODreams ; Revision Date: August 24, 2007 ; Public Release: August 24, 2007 ; Purpose: convert an EasyUO serial to RunUO serial ; Copyright: 2007 Amdir ;================================== set %_0 %0 goto %_0 0: exit 1: gosub %1 exit 2: gosub %1 %2 exit sub test return #true ; usage serial easyuoSerial ; return hexSerial sub serial { set %euid %1 set %serial 0 set %i 1 for %j 1 7 { str Mid %euid %j 1 gosub char2int #strRes set %serial %serial + ( #result * %i ) set %i %i * 26 } set %serial %serial - 7 gosub xor %serial 69 gosub hex #result return #result } sub xor { return %1 && ! %2 || ! %1 && %2 } sub hex { set %number %1 set %inv for %i 1 8 { set %rem %number % 16 if ( %rem = 10 ) set %rem A if ( %rem = 11 ) set %rem B if ( %rem = 12 ) set %rem C if ( %rem = 13 ) set %rem D if ( %rem = 14 ) set %rem E if ( %rem = 15 ) set %rem F set %inv %inv , %rem set %number %number / 16 } set %res for %i 1 8 { set %index 9 - %i str Mid %inv %index 1 set %res %res , #strRes } return 0x , %res } sub char2int { if ( %1 = A ) return 0 if ( %1 = B ) return 1 if ( %1 = C ) return 2 if ( %1 = D ) return 3 if ( %1 = E ) return 4 if ( %1 = F ) return 5 if ( %1 = G ) return 6 if ( %1 = H ) return 7 if ( %1 = I ) return 8 if ( %1 = J ) return 9 if ( %1 = K ) return 10 if ( %1 = L ) return 11 if ( %1 = M ) return 12 if ( %1 = N ) return 13 if ( %1 = O ) return 14 if ( %1 = P ) return 15 if ( %1 = Q ) return 16 if ( %1 = R ) return 17 if ( %1 = S ) return 18 if ( %1 = T ) return 19 if ( %1 = U ) return 20 if ( %1 = V ) return 21 if ( %1 = W ) return 22 if ( %1 = X ) return 23 if ( %1 = Y ) return 24 if ( %1 = Z ) return 25 }