mixster

mixster

Mar 6th, 2010
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.82 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); //Uncomment to test for crash
  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