/lib/gametab/Quests.simba

http://github.com/Drags111/Reflection_Dev · Unknown · 285 lines · 219 code · 66 blank · 0 comment · 0 complexity · 3db395301f506df71a539d71ac3dc1e6 MD5 · raw file

  1. (*
  2. Quests
  3. ====
  4. Quest routines that could be useful.
  5. *)
  6. (*
  7. R_RefreshQuestCache
  8. ~~~~~~~~~~~~~~~~~~~
  9. .. code-block:: pascal
  10. function R_RefreshQuestCache: Boolean;
  11. Opens quest tab so that the list is refreshed.
  12. .. note::
  13. by mormonman
  14. *)
  15. function R_RefreshQuestCache: Boolean;
  16. var
  17. T: Integer;
  18. begin
  19. if (R_CurrentGameTab = RTAB_QUESTS) then
  20. begin
  21. Result := True;
  22. Exit;
  23. end;
  24. MarkTime(T);
  25. while not R_GameTab(RTAB_QUESTS) and (TimeFromMark(T) < 5000) do
  26. Wait(500);
  27. Result := (R_CurrentGameTab = RTAB_QUESTS);
  28. end;
  29. (*
  30. R_GetQuestStatus
  31. ~~~~~~~~~~~~~~~~~~~
  32. .. code-block:: pascal
  33. function R_GetQuestStatus(Quest: String): Integer;
  34. Returns the QUEST_ constant.
  35. .. note::
  36. by mormonman
  37. *)
  38. function R_GetQuestStatus(Quest: String): Integer;
  39. var
  40. i: Integer;
  41. tempInt: TInterfaceComponent;
  42. begin
  43. if not R_RefreshQuestCache then
  44. Exit;
  45. Quest := Lowercase(Quest);
  46. for i := 0 to 192 do
  47. if (Pos(Quest, Lowercase(R_GetInterfaceTextEx(INTERFACE_QUESTS, QUEST_LIST, i))) > 0) then
  48. begin
  49. tempInt := R_GetInterfaceComponent(INTERFACE_QUESTS, QUEST_LIST, i);
  50. Result := tempInt.TextColor;
  51. end;
  52. end;
  53. (*
  54. R_GetQuestPoints
  55. ~~~~~~~~~~~~~~~~~~~
  56. .. code-block:: pascal
  57. function R_GetQuestPoints: Integer;
  58. Returns the players quest points.
  59. .. note::
  60. by mormonman
  61. *)
  62. function R_GetQuestPoints: Integer;
  63. begin
  64. if not R_RefreshQuestCache then
  65. Exit;
  66. Result := StrToIntDef(Trim(Between(':', '/', R_GetInterfaceText(INTERFACE_QUESTS, QUEST_POINTS))), -1);
  67. end;
  68. (*
  69. R_SetQuestFilters
  70. ~~~~~~~~~~~~~~~~~~~
  71. .. code-block:: pascal
  72. function R_SetQuestFilters(Filter, Done: Boolean): Boolean;
  73. Sets the two filters in the quest interface.
  74. @Filter - Hides quests you can't do
  75. @Done - Hides quests you have completed
  76. .. note::
  77. by mormonman
  78. *)
  79. function R_SetQuestFilters(Filter, Done: Boolean): Boolean;
  80. var
  81. FCur, DCur: TInterfaceChild;
  82. A, B: Boolean;
  83. T, TempID: Integer;
  84. begin
  85. if not R_RefreshQuestCache then
  86. Exit;
  87. FCur := R_GetInterfaceChild(INTERFACE_QUESTS, QUEST_FILTER);
  88. DCur := R_GetInterfaceChild(INTERFACE_QUESTS, QUEST_DONE);
  89. A := True; B := True;
  90. if (FCur.TextureID = QUEST_CHECKED) xor Filter then
  91. begin
  92. A := False;
  93. TempID := FCur.TextureID;
  94. MarkTime(T);
  95. while (TimeFromMark(T) < 3500) do
  96. begin
  97. FCur := R_GetInterfaceChild(INTERFACE_QUESTS, QUEST_FILTER);
  98. if (FCur.TextureID <> TempID) then
  99. Break;
  100. R_ClickInterface(FCur, mouse_Left);
  101. Wait(RandomRange(500, 850));
  102. end;
  103. A := (TimeFromMark(T) < 3500);
  104. end;
  105. if (DCur.TextureID = QUEST_CHECKED) xor Done then
  106. begin
  107. B := False;
  108. TempID := DCur.TextureID;
  109. MarkTime(T);
  110. while (TimeFromMark(T) < 3500) do
  111. begin
  112. DCur := R_GetInterfaceChild(INTERFACE_QUESTS, QUEST_DONE);
  113. if (DCur.TextureID <> TempID) then
  114. Break;
  115. R_ClickInterface(DCur, mouse_Left);
  116. Wait(RandomRange(500, 850));
  117. end;
  118. B := (TimeFromMark(T) < 3500);
  119. end;
  120. Result := A and B;
  121. end;
  122. (*
  123. R_ClickQuest
  124. ~~~~~~~~~~~~~~~~~~~
  125. .. code-block:: pascal
  126. procedure R_ClickQuest(Child: TInterfaceChild; ClickType: Integer);
  127. Clicks the quest, work-around for the scrollbar.
  128. .. note::
  129. by mormonman
  130. *)
  131. procedure R_ClickQuest(Child: TInterfaceChild; ClickType: Integer);
  132. begin
  133. MouseBox(Child.X, Child.Y, Child.Bounds.X2 - 50, Child.Bounds.Y2, ClickType);
  134. end;
  135. (*
  136. R_OpenQuest
  137. ~~~~~~~~~~~~~~~~~~~
  138. .. code-block:: pascal
  139. function R_OpenQuest(Quest: String): Boolean;
  140. Opens the quest interface for the given Quest.
  141. .. note::
  142. by mormonman
  143. *)
  144. function R_OpenQuest(Quest: String): Boolean;
  145. var
  146. i, T: Integer;
  147. QuestI, tempC: TInterfaceComponent;
  148. SBar: TInterfaceChild;
  149. B: TBox;
  150. begin
  151. if not R_RefreshQuestCache then
  152. Exit;
  153. Quest := Lowercase(Quest);
  154. Result := R_ValidInterface(INTERFACE_QUESTINFO) and
  155. (Pos(Quest, LowerCase(R_GetInterfaceText(INTERFACE_QUESTINFO, QUEST_INFO_NAME))) > 0);
  156. if Result then
  157. Exit;
  158. if R_SetQuestFilters(False, False) then
  159. begin
  160. for i := 0 to 192 do
  161. if (Pos(Quest, Lowercase(R_GetInterfaceTextEx(INTERFACE_QUESTS, QUEST_LIST, i))) > 0) then
  162. begin
  163. QuestI := R_GetInterfaceComponent(INTERFACE_QUESTS, QUEST_LIST, i);
  164. Break;
  165. end;
  166. if not (Pos(Quest, Lowercase(QuestI.Text)) > 0) then
  167. begin
  168. R_Debug('Quest not found', 'R_OpenQuest');
  169. Exit;
  170. end;
  171. SBar := R_GetInterfaceChild(INTERFACE_QUESTS, QUEST_SCROLL);
  172. B := IntToBox(551, 281, 737, 454);
  173. if R_ScrollTo(QuestI, SBar, B) or
  174. (PointInBox(Point(QuestI.X, QuestI.Y), B) and
  175. PointInBox(Point(QuestI.Bounds.X2, QuestI.Bounds.Y2), B)) then
  176. begin
  177. MarkTime(T);
  178. while (TimeFromMark(T) < 10000) do
  179. begin
  180. if R_ValidInterface(INTERFACE_QUESTINFO) and
  181. (Pos(Quest, Lowercase(R_GetInterfaceText(INTERFACE_QUESTINFO, QUEST_INFO_NAME))) > 0) then
  182. Break;
  183. tempC := R_UpdateInterface(QuestI);
  184. R_ClickQuest(tempC, mouse_Left);
  185. Wait(RandomRange(1500, 2000));
  186. end;
  187. Result := R_ValidInterface(INTERFACE_QUESTINFO) and
  188. (Pos(Quest, LowerCase(R_GetInterfaceText(INTERFACE_QUESTINFO, QUEST_INFO_NAME))) > 0);
  189. if (TimeFromMark(T) > 10000) and not Result then
  190. R_Debug('Opening quest timed out', 'R_OpenQuest');
  191. end else
  192. begin
  193. R_Debug('Unable to scroll to quest', 'R_OpenQuest');
  194. end;
  195. end else
  196. begin
  197. R_Debug('Unable to set quest filters', 'R_OpenQuest');
  198. end;
  199. end;
  200. (*
  201. R_CloseQuestInfo
  202. ~~~~~~~~~~~~~~~~~~~
  203. .. code-block:: pascal
  204. function R_CloseQuestInfo: Boolean;
  205. Closes the quest info interface.
  206. .. note::
  207. by mormonman
  208. *)
  209. function R_CloseQuestInfo: Boolean;
  210. var
  211. CloseI: TInterfaceChild;
  212. begin
  213. Result := not R_ValidInterface(INTERFACE_QUESTINFO);
  214. if Result then
  215. Exit;
  216. CloseI := R_GetInterfaceChild(INTERFACE_QUESTINFO, QUEST_INFO_CLOSE);
  217. R_ClickInterface(CloseI, mouse_Left);
  218. Result := R_WaitInterfaceClose(INTERFACE_QUESTINFO, 3500);
  219. end;