mixster

mixster

Apr 3rd, 2010
183
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.79 KB | None | 0 0
  1. type
  2.   TWorld = record
  3.     Number, PlayerNo: Integer;
  4.     Members: Boolean;
  5.     Prefix, Location, Activity, Language: String;
  6.     LootShare, QuickChat, PVP: Boolean;
  7.   end;
  8.   TWorldArray = Array of TWorld;
  9.  
  10. function srl_Explode(str, del: string): TStringArray;
  11. {$IFNDEF SCAR320_UP}
  12. var
  13.   i, l, dL: Integer;
  14. begin
  15.   i := 0;
  16.   l := -1;
  17.  
  18.   SetLength(Result, 0);
  19.  
  20.   if (str = '') then
  21.     Exit;
  22.  
  23.   dL := Length(del) - 1;
  24.   repeat
  25.     Inc(l);
  26.     SetLength(Result, l + 1);
  27.  
  28.     i := Pos(del, str);
  29.  
  30.     if (i <= 0) then
  31.       Break;
  32.  
  33.     Result[l] := Copy(str, 1, i - 1);
  34.     Delete(str, 1, i + dL);
  35.   until false;
  36.   Result[l] := Copy(str, 1, Length(str));
  37. {$ELSE}
  38. begin
  39.   Result := Explode(del, str);
  40. {$ENDIF}
  41. end;
  42.  
  43. const
  44.   SRL_LG_ENGLISH = 0;
  45.   SRL_LG_GERMAN = 1;
  46.   SRL_LG_FRENCH = 2;
  47.   SRL_LG_PORTUGUESE = 3;
  48.   SRL_WORLDPARSE_LANG = SRL_LG_ENGLISH;
  49.  
  50.  
  51. {*******************************************************************************
  52. procedure UpdateWorlds;
  53. by: mixster
  54. Description: Parses the worlds page into Worlds.INI
  55. *******************************************************************************}
  56. function UpdateWorlds: Boolean;
  57. var
  58.   worldList: TWorldArray;
  59.   str, Path: string;
  60.   tsa, tsb: TStringArray;
  61.   W, I, H, Time: Integer;
  62. begin
  63.   try
  64.     Result := True;
  65.     Path := AppPath + 'Worlds.INI';
  66.     Writeln('NOTE: Attempting to update the Worlds.INI, please allow the script to access this file.');
  67.     Time := GetTimeRunning;
  68.     W := RewriteFile(Path, False);
  69.     CloseFile(W);
  70.     if (SRL_WORLDPARSE_LANG = SRL_LG_ENGLISH) then
  71.       str := ''
  72.     else
  73.       str := 'l=' + IntToStr(SRL_WORLDPARSE_LANG) + '/';
  74.     str := GetPage('http://www.runescape.com/' + str + 'slu.ws?order=WMPLA');
  75.     Delete(str, 1, Pos('<a href="?order=MWPLA">', str));
  76.     Delete(str, 1, Pos('<tr', str) + 3);
  77.     tsa := srl_Explode(str, '<tr');
  78.     H := High(tsa);
  79.     SetLength(worldList, H + 1);
  80.     for I := 0 to H do
  81.       with worldList[I] do
  82.       begin
  83.         tsb := srl_Explode(tsa[I], '<td');
  84.         if High(tsb) < 5 then
  85.         begin
  86.           Writeln('Skipping world "' + IntToStr(I + 1) + '" because explosion didn''t return enough values');
  87.           Continue;
  88.         end;
  89.         PlayerNo := StrToIntDef(Between('>', '<', tsb[2]), 2000);
  90.         if (Between('"', '"', tsb[3]) = 'a') or (Between('"', '"', tsb[3]) = 'a d') then
  91.         begin
  92.           Location := 'Activity';
  93.           Activity := Between('>', '<', tsb[3]);
  94.         end
  95.         else
  96.         begin
  97.           Location := Between('>', '<', tsb[3]);
  98.           Activity := '';
  99.         end;
  100.  
  101.         Prefix := Between('http://', '.runescape', tsb[1]);
  102.         if Prefix = '' then
  103.           Prefix := Replace(Lowercase(Between('>' + #10, #10 + #10, tsb[1])), ' ', '', [rfReplaceAll]);
  104.         Number := StrToIntDef(Replace(Prefix, 'world', '', [rfReplaceAll]), -1);
  105.         if Number = -1 then
  106.         begin
  107.           Writeln('Invalid world number produced: ' + Prefix);
  108.           Writeln('Assuming has suffix, trying again');
  109.           str := Replace(Prefix, 'world', '', [rfReplaceAll]);
  110.           Number := StrToIntDef(Copy(str, 1, Length(str) - 1), -1);
  111.           if Number = -1 then
  112.             Writeln('Failed to gather a world number')
  113.           else
  114.             Writeln('Succeeded, got ' + IntToStr(Number));
  115.         end;
  116.  
  117.         LootShare := Between('"', '"', tsb[4]) = 'd';
  118.         QuickChat := Activity = 'Quick Chat';
  119.         PvP := Activity = 'PvP World';
  120.         Members := Between('"', '"', tsb[5]) = 'm';
  121.       end;
  122.     //Writeln('Writing to the INI File. T: ' + IntToStr(GetTimeRunning - W));
  123.   except
  124.     Result := False;
  125.     //SRL_Warn('UpdateWorlds', ExceptionToString(ExceptionType, ExceptionParam), Warn_AllVersions);
  126.   end;
  127.   if not Result then Exit;
  128.   WriteINI('Worlds', 'Count', IntToStr(High(worldList) + 1), Path);
  129.   WriteINI('Worlds', 'High', IntToStr(worldList[High(worldList)].Number) + #13#10, Path);
  130.   H := High(worldList);
  131.   for I := 0 to H do
  132.     with worldList[I] do
  133.     begin
  134.       Str := 'World' + IntToStr(Number);
  135.       DeleteINI(Str, '', Path);
  136.       WriteINI(Str, 'Prefix', Prefix, Path);
  137.       WriteINI(Str, 'Activity', Activity, Path);
  138.       //WriteINI(Str, 'Type', BoolToStr(Members), Path);
  139.       if (Members) then
  140.         WriteINI(Str, 'Type', 'Members', Path)
  141.       else
  142.         WriteINI(Str, 'Type', 'Free', Path);
  143.       //WriteINI(Str, 'Flag', fla + 'Flag', Path);
  144.       WriteINI(Str, 'Location', Location, Path);
  145.       WriteINI(Str, 'LootShare', BoolToStr(LootShare), Path);
  146.       WriteINI(Str, 'QuickChat', BoolToStr(QuickChat), Path);
  147.       WriteINI(Str, 'PvP', BoolToStr(PvP) + #13#10, Path);
  148.     end;
  149.   Writeln('Parsed Worlds Page into Worlds.INI. Took ' + IntToStr(GetTimeRunning - Time) + ' ms.');
  150. end;
  151.  
  152. begin
  153.   UpdateWorlds;
  154. end.
Add Comment
Please, Sign In to add comment