barbrady

Latest script

Feb 12th, 2014
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.67 KB | None | 0 0
  1. {$I RSPS/srlRSPS.Simba}
  2. {$I RSPS/core/prayer.Simba}
  3.  
  4.  
  5. const
  6.  
  7. _timeout = 30000;
  8.  
  9. _loot = false;
  10. _loot_distance = 5;
  11.  
  12. _rightClick = false;
  13. _useUptext = true;
  14. _checkCombat = true;
  15. _autoLoad = true;
  16. _displayMonsters = false;
  17.  
  18. _updateTotal = true;
  19. _update_total = 170000;
  20.  
  21. _pray = false;
  22. _use_prayers = ['Ultimate Strength'];
  23. _check_prayer_every = 5000;
  24. _pray_at = 15;
  25.  
  26. _trackSkills = true;
  27. _track_skills = ['Hitpoints'];
  28. _update_every = 100000;
  29.  
  30. displayOnlineFriends = true;
  31. update_friends_every = 50000;
  32.  
  33. display_task = false;
  34.  
  35. attack_mode = 3;
  36.  
  37.  
  38. monsterID = 8;
  39.  
  40.  
  41. // do not touch
  42. scriptVersion = 14;
  43.  
  44. type
  45. _monster = record
  46. color, tol:tintegerarray;
  47. health, filter:integer;
  48. hue, sat:textendedarray;
  49. uptext:tstringarray;
  50. name:string;
  51. end;
  52.  
  53. _loot_item = record
  54. options:TStringArray;
  55. name:string;
  56. Value, count:Integer;
  57. end;
  58.  
  59. tStatInfo = record
  60. skillLevel:array[0..20] of integer;
  61. skillName:TStringArray;
  62. end;
  63.  
  64. tCustomStatInfo = record
  65. skillLevels:TIntegerArray;
  66. skillName:TStringarray;
  67. end;
  68.  
  69. _eventTimer = record
  70. eventName:string;
  71. lastTime, _maxTime:integer;
  72. onTimeup:procedure;
  73. activated:boolean;
  74. end;
  75.  
  76. _eventTimerArray = array of _eventTimer;
  77.  
  78. _loot_array = array of _loot_item;
  79.  
  80. var
  81. timeout, loot_distance, startXP, lastCheck, currentTotal:integer;
  82. loot, rightClick, checkCombat, useUptext:boolean;
  83. customSkills, currentSkills:tCustomStatInfo;
  84. startXPString, attackMode, weaponName, combatLevel:string;
  85. myTimers:_eventTimerArray;
  86. _pickUps:_loot_array;
  87. lastOnline:TStringArray;
  88.  
  89. procedure _loot_array.init;
  90. begin
  91. setLength(self, 3);
  92. with self[0] do
  93. begin
  94. name := 'Gold charm';
  95. options := ['ake old','ld cha'];
  96. value := 0;
  97. end;
  98. with self[1] do
  99. begin
  100. name := 'Green charm';
  101. options := ['ake Gr','en cha'];
  102. value := 0;
  103. end;
  104. with self[2] do
  105. begin
  106. name := 'Coins';
  107. options := ['ake Coi','oins'];
  108. value := 1;
  109. end;
  110. end;
  111.  
  112. var
  113. _ss:_rsps_server;
  114. m:_monster;
  115. debug:boolean;
  116. failed, kills, startTotal:integer;
  117.  
  118. procedure _monster.init;
  119. begin
  120. with self do
  121. begin
  122. color := [9148055];
  123. tol := [15];
  124. health := 22;
  125. filter := 140;
  126. hue := [0.10];
  127. sat := [0.15];
  128. uptext := ['ave','rawl','raw'];
  129. name := 'Cave crawler';
  130. end;
  131. end;
  132.  
  133. function findFile(path, ext, name:string):boolean;
  134. var
  135. s:TStringArray;
  136. i:Integer;
  137. begin
  138. s := GetFiles(path, ext);
  139. for i := 0 to high(s) do
  140. result := (s[i] = (name +'.' + ext));
  141. end;
  142.  
  143. function hasprofile():boolean;
  144. begin
  145. result := fileExists(appPath + 'SSfighterSettings\_soulsplit.monsterProfiles.txt');
  146. end;
  147.  
  148. function hasSettingsFile():boolean;
  149. begin
  150. result := fileExists(appPath + 'SSfighterSettings\_soulsplit.settings.txt');
  151. end;
  152.  
  153. function ss_in:boolean;
  154. begin
  155. result := getColor(426, 543) = 16777215
  156. end;
  157.  
  158. procedure ss_login;
  159. begin
  160. if ss_in then
  161. exit
  162. else begin
  163. mouse(489, 466);
  164. if waitFunc(@ss_in, 40, 6000) then
  165. wait(6000);
  166. end;
  167. end;
  168.  
  169. function getFileString:String;
  170. var
  171. tmpFile:integer;
  172. str:string;
  173. begin
  174. tmpFile := openFile(appPath + 'SSfighterSettings\_soulsplit.monsterProfiles' + '.txt', true);
  175. try
  176. ReadFileString(tmpFile, str, 20000);
  177. finally
  178. result := str;
  179. closeFile(tmpFile);
  180. end;
  181. end;
  182.  
  183. procedure printLoaded;
  184. var
  185. str, info:string;
  186. i, t:integer;
  187. begin
  188. t := getSystemTime();
  189. str := getFileString();
  190. repeat
  191. i := i + 1;
  192. info := between('<monster' + toStr(i) + '>', '</monster>', str);
  193. if length(info) < 10 then
  194. exit();
  195. writeln('ID: ' , i , ' ', between('<name>','</name>', info));
  196. until ((getSystemTime - t) > 2000);
  197. end;
  198.  
  199. procedure printInfo(search:string;lineTime:integer);
  200. var
  201. str, info:string;
  202. i, t:integer;
  203. begin
  204. t := getSystemTime();
  205. str := getFileString();
  206. str := between('<' + search + '>', '</' + search + '>', str);
  207. repeat
  208. i := i + 1;
  209. info := between('<' + toStr(i) + '>', '</>', str);
  210. if length(info) < 1 then
  211. exit();
  212. writeln(info);
  213. wait(lineTime);
  214. until ((getSystemTime - t) > 15000);
  215. end;
  216.  
  217. procedure printInfo(search:TStringArray;time, lineTime:integer);overload;
  218. var
  219. i:integer;
  220. begin
  221. for i := 0 to high(search) do
  222. begin
  223. printInfo(search[i], lineTime);
  224. wait(time);
  225. end;
  226. end;
  227.  
  228. procedure _monster.load(id:integer);
  229. var
  230. profileString, monsterInfo:String;
  231. tmpFile:Integer;
  232. begin
  233. profileString := getFileString();
  234. monsterInfo := between('<monster' + toStr(id) + '>', '</monster>', profileString);
  235. if length(monsterInfo) < 1 then
  236. begin
  237. writeln('Invalid monster ID! ' , id);
  238. exit();
  239. end;
  240. with self do
  241. begin
  242. Color := between('<color>', '</color>', monsterInfo).toIntegerArray();
  243. tol := between('<tol>', '</tol>', monsterInfo).toIntegerArray();
  244. health := StrToInt(between('<health>', '</health>', monsterInfo));
  245. hue := between('<hue>', '</hue>', monsterInfo).toExtendedArray();
  246. sat := between('<sat>', '</sat>', monsterInfo).toExtendedArray();
  247. uptext := between('<uptext>', '</uptext>', monsterInfo).toStringArray();
  248. name := between('<name>', '</name>', monsterInfo);
  249. end;
  250. end;
  251.  
  252. function getSettingsString():string;
  253. var
  254. tmpFile:integer;
  255. str:string;
  256. begin
  257. tmpFile := openFile(appPath + 'SSfighterSettings\_soulsplit.settings' + '.txt', true);
  258. try
  259. ReadFileString(tmpFile, str, 20000);
  260. finally
  261. result := str;
  262. closeFile(tmpFile);
  263. end;
  264. end;
  265.  
  266. procedure loadSettingsFromFile;
  267. var
  268. profileString, settingsInfo:String;
  269. begin
  270. profileString := getSettingsString();
  271. settingsInfo := between('<settings>', '</settings>', profileString);
  272. if (length(settingsInfo) > 10) then
  273. begin
  274. timeout := StrToInt(between('<timeout>', '</timeout>', settingsInfo));
  275. loot_distance := StrToInt(between('<lootdist>', '</lootdist>', settingsInfo));
  276. loot := between('<loot>', '</loot>', settingsInfo).toBoolean();
  277. rightClick := between('<rightClick>', '</rightClick>', settingsInfo).toBoolean();
  278. useUptext := between('<useUptext>', '</useUptext>', settingsInfo).toBoolean();
  279. checkCombat := between('<checkCombat>', '</checkCombat>', settingsInfo).toBoolean();
  280. end else
  281. writeln('Error loading settings!');
  282. end;
  283.  
  284. function localVersion():integer;
  285. var
  286. profileString, settingsInfo:String;
  287. begin
  288. profileString := getFileString();
  289. if length(profileString) > 1 then
  290. try
  291. result := StrToInt(between('<revision>','</revision>', profileString));
  292. except
  293. result := -1;
  294. end
  295. else
  296. writeln('Unable to get current revision');
  297. end;
  298.  
  299. function GetProfileVersion():integer;
  300. begin
  301. try
  302. result := StrToInt(getPage('http://pastebin.com/raw.php?i=r9hGvtAu'));
  303. except
  304. result := -1;
  305. end;
  306. end;
  307.  
  308. function getOnlineProfiles():string;
  309. begin
  310. result := getPage('http://pastebin.com/raw.php?i=WFS9KJtK');
  311. end;
  312.  
  313. procedure updateProfile;
  314. var
  315. tmpFile:integer;
  316. begin
  317. try
  318. tmpFile := rewriteFile(appPath + 'SSfighterSettings\_soulsplit.monsterProfiles.txt', true);
  319. writeFileString(tmpFile, getOnlineProfiles());
  320. closeFile(tmpFile);
  321. writeln('Monster profiles updated');
  322. except
  323. writeln('Error updating profile');
  324. end;
  325. end;
  326.  
  327. function getScriptVersion():integer;
  328. begin
  329. try
  330. result := StrToInt(getPage('http://pastebin.com/raw.php?i=yf87fYMd'));
  331. except
  332. result := -1;
  333. end;
  334. end;
  335.  
  336. function getScriptText():string;
  337. begin
  338. result := getPage('http://pastebin.com/raw.php?i=JX6THqXD');
  339. end;
  340.  
  341. procedure updateScript(rev:integer);
  342. var
  343. tmpFile:integer;
  344. path:string;
  345. sucess:boolean;
  346. begin
  347. path := appPath + 'scripts\Soulsplit fighter V' + toStr(rev) + '.simba';
  348. writeln('Saving latest script at ' , path);
  349. try
  350. tmpFile := createFile(path);
  351. closeFile(tmpFile);
  352. tmpFile := rewriteFile(path, true);
  353. writeFileString(tmpFile, getScriptText());
  354. sucess := true;
  355. except
  356. writeln('Error writing script to file');
  357. finally
  358. closeFile(tmpFile);
  359. end;
  360. if sucess then
  361. begin
  362. writeln('please use the script at ', path);
  363. terminateScript;
  364. end;
  365. end;
  366.  
  367.  
  368. procedure UpdateScriptFiles;
  369. var
  370. latestProfileVersion, latestScriptVersion, tmpFile:integer;
  371. begin
  372. if (not hasProfile) then
  373. begin
  374. Writeln('Profiles file not found attempting to download...');
  375. try
  376. tmpFile := createFile(appPath + 'SSfighterSettings\_soulsplit.monsterProfiles.txt');
  377. closeFile(tmpFile);
  378. UpdateScriptFiles;
  379. exit();
  380. except
  381. Writeln('Error downloading monster profiles');
  382. end;
  383. end else
  384. begin
  385. latestProfileVersion := GetProfileVersion();
  386. Writeln('Current profiles version: ' , localVersion(), ' latest: ' , latestProfileVersion);
  387. if (latestProfileVersion > localVersion()) then
  388. updateProfile
  389. else if (latestProfileVersion = localVersion()) then
  390. writeln('Monster profiles up to date')
  391. else
  392. writeln('Local version is newer then online version');
  393. end;
  394. latestScriptVersion := getScriptVersion();
  395. writeln('Current script version: ' , scriptVersion, ' Latest script version: ' , latestScriptVersion);
  396. if (scriptVersion < latestScriptVersion) then
  397. begin
  398. writeln('Updating script..');
  399. updateScript(latestScriptVersion);
  400. end else
  401. begin
  402. if (scriptVersion = latestScriptVersion) then
  403. writeln('Script up to date')
  404. else
  405. writeln('Local version is newer then online version');
  406. end;
  407. end;
  408.  
  409. procedure createSettingsFile();
  410. var
  411. tmpFile:integer;
  412. begin
  413. tmpFile := createFile(appPath + 'SSfighterSettings\_soulsplit.settings.txt');
  414. closeFile(tmpFile);
  415. end;
  416.  
  417. procedure saveSettings();
  418. var
  419. path:string;
  420. tmpFile:integer;
  421. begin
  422. path := appPath + 'SSfighterSettings\_soulsplit.settings.txt';
  423. try
  424. tmpFile := rewriteFile(path, true);
  425. writeFileString(tmpFile, '<settings>');
  426. writeFileString(tmpFile, '<timeout>' + toStr(_timeout) + '</timeout>');
  427. writeFileString(tmpFile, '<loot>' + toStr(_loot) + '</loot>');
  428. writeFileString(tmpFile, '<lootdist>' + toStr(_loot_distance) + '</lootdist>');
  429. writeFileString(tmpFile, '<debug>' + toStr(debug) + '</debug>');
  430. writeFileString(tmpFile, '<rightClick>' + toStr(_rightClick) + '</rightClick>');
  431. writeFileString(tmpFile, '<checkUptext>' + toStr(_useUpText) + '</checkUptext>');
  432. writeFileString(tmpFile, '<monsterID>' + toStr(monsterID) + '</monsterID>');
  433. writeFileString(tmpFile, '</settings>');
  434. writeln('Saved settings to ' , path);
  435. except
  436. writeln('Error saving script settings');
  437. finally
  438. closeFile(tmpFile);
  439. end;
  440. end;
  441.  
  442. procedure updateSettingsFiles;
  443. begin
  444. if (not directoryExists(appPath + 'SSfighterSettings')) then
  445. begin
  446. writeln('Could not find settings folder creating one now');
  447. if createDirectory(appPath + 'SSfighterSettings') then
  448. writeln('Directory created');
  449. end;
  450. if (not hasSettingsfile) then
  451. begin
  452. writeln('Creating settings file');
  453. createSettingsFile();
  454. saveSettings();
  455. end;
  456. end;
  457.  
  458. procedure loadScriptVars;
  459. begin
  460. UpdateScriptFiles;
  461. if _autoLoad then
  462. begin
  463. loadSettingsFromFile();
  464. m.load(monsterID);
  465. end else
  466. begin
  467. timeout := _timeout;
  468. loot_distance := _loot_distance;
  469. loot := _loot;
  470. rightClick := _rightClick;
  471. useUpText := _useUptext;
  472. checkCombat := _checkCombat;
  473. m.init();
  474. end;
  475. end;
  476.  
  477. function center(bx: TBox): TPoint;
  478. begin
  479. if ((bx.X1 > bx.X2) or (bx.Y1 > bx.Y2)) then
  480. begin
  481. if (bx.X1 > bx.X2) then
  482. Swap(bx.X1, bx.X2);
  483. if (bx.Y1 > bx.Y2) then
  484. Swap(bx.Y1, bx.Y2);
  485. end;
  486. Result := Point(Round(bx.X1 + ((bx.X2 - bx.X1) div 2)), Round(bx.Y1 + ((bx.Y2 - bx.Y1) div 2)));
  487. end;
  488.  
  489. function perHour(what:integer):integer;
  490. begin
  491. result := Round(what * (3600.0 / (GetTimeRunning / 1000.0)));
  492. end;
  493.  
  494. procedure _monster.progress(state:string);
  495. var
  496. i:integer;
  497. begin
  498. clearDebug();
  499. writeln('- Time running: ' , timeRunning);
  500. writeln('- State: ', state);
  501. writeln('- ', kills, ' ', self.name, ' Killed [', perHour(kills),'] per hour ' , 'Levels gained: ' , (currentTotal - startTotal));
  502. writeln('- Start XP: ' , startXPString, ' XP gained: ', (ss_getXpBarTotal - startXP), ' [', perHour(ss_getXpBarTotal - startXP),'] per hour');
  503. writeln('- Using : ', weaponName , ' Attack mode: [', attackMode, '] Combat level: ', combatLevel);
  504. if displayOnlineFriends then
  505. writeln('- Online freinds: ' , lastOnline);
  506. if display_task then
  507. for i := 0 to high(myTimers) do
  508. writeln('- Task [',i,']', myTimers[i].eventName, ' next update in ' , msToTime(myTimers[i]._maxTime - (getSystemtime - myTimers[i].lastTime), 0));
  509. end;
  510.  
  511. procedure _loot_array.pickUp();
  512. var
  513. _dots:TPointArray;
  514. options:array of TOptions;
  515. i, k, e, _count:integer;
  516. opt_strs:TStringArray;
  517. _ls:TPoint;
  518. moved:boolean;
  519. begin
  520. _dots := GetMiniMapDotsIn('item',539, 61, 708, 217);//getRedDots();
  521. filterpointspie(_dots, 0, 360, 0, loot_distance * 4, 627, 138);
  522. sortTPAFrom(_dots, point(627, 138));
  523. setLength(_dots, 2);
  524. for i := 0 to high(_dots) do
  525. begin
  526. if moved then
  527. exit();
  528. _ls := ss_MMtoMsPoint(_dots[i]);
  529. mouse(_ls.x, _ls.y, 0, 0, mouse_right);
  530. options := _ss.getOptions();
  531. setLength(opt_strs, length(options));
  532. for k := 0 to high(options) do
  533. opt_strs[k] := options[k].Str;
  534. writeln('k=' , k);
  535. k := 0;
  536. writeln(k);
  537. //setLength(LookFor, 3);
  538. writeln(opt_strs);
  539.  
  540. for k := 0 to high(self) do
  541. begin
  542. writeln(self[k].options);
  543. if isText(opt_strs, self[k].options) then
  544. _count := _count + 1;
  545. end;
  546. for k := 0 to _count do
  547. begin
  548. if moved then
  549. mouse(258, 230, 0, 0, mouse_right);
  550. for e := 0 to high(self) do
  551. if not _ss.waitOptionMulti(self[e].options, 150) then
  552. if debug then
  553. writeln('Did not find ' , self[e].options)
  554. else
  555. moved := true;
  556. end;
  557. end;
  558. end;
  559.  
  560. function healthBar(b:tbox):boolean;
  561. var
  562. red, green, bar:tpointarray;
  563. healthbar:t2dpointarray;
  564. i:integer;
  565. bx:tbox;
  566. begin
  567. if ((mainscreen.bounds.x1 + (b.x1 - 2)) < 0) then
  568. exit(false);
  569. findColors(green, 65280, b.x1 - 2, b.y1-7, b.x2, b.y2);
  570. findColors(red, 255, b.x1 - 2, b.y1 - 7, b.x2, b.y2);
  571. bar := mergeAtpa([green, red]);
  572. if (length(bar) > 0) then
  573. begin
  574. healthbar := clustertpa(bar, 1);
  575. if (length(healthbar) = 0) then
  576. exit(false);
  577. for i := 0 to high(healthbar) do
  578. begin
  579. bx := gettpabounds(healthbar[i]);
  580. if ((bx.x1 - bx.x1) > 25) then
  581. exit(true);
  582. end;
  583. end;
  584. end;
  585.  
  586. function specOn:boolean;
  587. var
  588. tpa:TPointArray;
  589. begin
  590. result := false;
  591. findcolorstolerance(tpa, 1210821, 471, 221, 509, 259, 53);
  592. if (length(tpa) > 25) then
  593. exit(true);
  594. end;
  595.  
  596. function specPercentage:extended;
  597. var
  598. greentpa:tpointarray;
  599. barOpen:boolean;
  600. begin
  601. if specOn then
  602. begin
  603. mouse(491, 241);
  604. wait(200);
  605. end;
  606. ColorToleranceSpeed(2);
  607. SetColorSpeed2Modifiers(0.55, 0.59);
  608. findcolorstolerance(greentpa, 4176530, 475, 224, 507, 258, 38);
  609. ColorToleranceSpeed(1);
  610. SetColorSpeed2Modifiers(0.02, 0.02);
  611. if (length(greentpa) > 1) then
  612. result := ((length(greentpa) / 917) * 100)
  613. else
  614. result := 0;
  615. end;
  616.  
  617. function differentCount(time:integer): Boolean;
  618. var
  619. _white_count:integer;
  620. begin
  621. if not ss_xpBarOpen then
  622. mouse(534, 117);
  623. _white_count := countColorTolerance(16777215, 410, 110, 508, 123, 5);
  624. wait(time);
  625. result := (_white_count <> countColorTolerance(16777215, 410, 110, 508, 123, 5));
  626. end;
  627.  
  628. function inCombat:boolean;
  629. begin
  630. result := differentCount(3300);
  631. end;
  632.  
  633. procedure holdKey(ID, time:Integer);
  634. begin
  635. keyDown(ID);
  636. wait(time);
  637. keyUp(ID);
  638. end;
  639.  
  640. procedure rotateCompass;
  641. var
  642. currentAngle:Extended;
  643. t:Integer;
  644. begin
  645. currentAngle := map.GetCompassAngleDegrees();
  646. t := getSystemTime;
  647. repeat
  648. holdKey(37, 150);
  649. until ((map.GetCompassAngleDegrees() - currentAngle) > 60) or ((map.GetCompassAngleDegrees() - currentAngle) < 60) or ((GetSystemTime - t) > 2500);
  650. end;
  651.  
  652. function _monster.find:boolean;
  653. var
  654. mtpas, matpa:t2dpointarray;
  655. mtpa:tpointarray;
  656. i, x, y:integer;
  657. bx:tbox;
  658. dx, dy, dx2, dy2:integer;
  659. begin
  660. ColorToleranceSpeed(2);
  661. setLength(mtpas, length(self.color));
  662. for i := 0 to high(self.color) do
  663. begin
  664. SetColorSpeed2Modifiers(self.hue[i], self.sat[i]);
  665. findColorsTolerance(mtpas[i], self.color[i], mainscreen.bounds, self.tol[i]);
  666. end;
  667. ColorToleranceSpeed(1);
  668. SetColorSpeed2Modifiers(0.02, 0.02);
  669. if (length(mtpas) > 1) then
  670. mtpa := mergeAtpa(mtpas)
  671. else
  672. mtpa := mtpas[0];
  673. if (length(mtpa) > 0) then
  674. begin
  675. matpa := clustertpa(mtpa, 4);
  676. filtertpasbetween(matpa, 0, self.filter);
  677. SortATPAFromFirstpoint(matpa, Point(256, 216));
  678. if debug then
  679. debugatpa(matpa, 'bmp');
  680. for i := 0 to high(matpa) do
  681. begin
  682. if (checkCombat) then
  683. begin
  684. bx := gettpabounds(matpa[i]);
  685. if not healthBar(bx) then
  686. continue;
  687. end;
  688. if (i > 2) then
  689. exit(false);
  690. if useUptext then
  691. if (_ss.waitUpTextMulti(self.uptext, 150)) then
  692. continue
  693. else
  694. if debug then
  695. writeln('Uptext ' , self.uptext, ' not found');
  696. MiddleTPAEx(matpa[i], x, y);
  697. if rightClick then
  698. begin
  699. Mouse(x, y, 0, 0, Mouse_right);
  700. if _ss.waitOptionMulti(['ttack', 'Atta' ], 1200) then
  701. exit(true);
  702. end else
  703. begin
  704. mouse(x, y);
  705. exit(true);
  706. end;
  707. end;
  708. end;
  709. end;
  710.  
  711. function diff300:boolean;
  712. begin
  713. result := differentCount(300);
  714. end;
  715.  
  716. procedure updateTotal();
  717. var
  718. ct:integer;
  719. begin
  720. ct := getTotalLevel();
  721. if (ct > - 1) then
  722. currentTotal := ct;
  723. end;
  724.  
  725. function rsps_inventory.clickColor(color, tol:integer):boolean;
  726. var
  727. i, x, y:integer;
  728. begin
  729. openTab(TAB_INV);
  730. for i := 0 to high(self.slots) do
  731. if findColorTolerance(x, y, color, self.slots[i], tol) then
  732. begin
  733. self.interactItem(i, mouse_left);
  734. wait(50 + random(250));
  735. exit(true);
  736. end;
  737. end;
  738.  
  739. function rsps_inventory.clickColor(colors, tols:TIntegerArray):boolean;overload;
  740. var
  741. i:integer;
  742. begin
  743. if (length(colors) <> length(tols)) then
  744. exit();
  745. for i := 0 to high(colors) do
  746. if self.clickColor(colors[i], tols[i]) then
  747. exit(true);
  748. end;
  749.  
  750. procedure checkPrayer;
  751. begin
  752. if (map.getPrayer() < _pray_at) then
  753. inventory.clickColor([9750065, 6897065], [5, 5]);
  754. normals.activatePrayer(_use_prayers);
  755. wait(random(300));
  756. end;
  757.  
  758. procedure tStatInfo.printSkillInfo;
  759. var
  760. i:integer;
  761. begin
  762. for i := 0 to high(self.skillLevel) do
  763. writeln(self.skillName[i], ' = ' , self.skillLevel[i]);
  764. end;
  765.  
  766. procedure tStatInfo.setSkillNames;
  767. begin
  768. self.skillName := ['Attack','Strength','Defense','Range',
  769. 'Prayer','Magic','Runecrafting','Hitpoints', 'Agility','Herblore',
  770. 'Theiving','Crafting','Fletching','Slayer','Mining','Smithing',
  771. 'Fishing','Cooking','Firemaking','Woodcutting','Farming'];
  772. end;
  773.  
  774. procedure tStatInfo.getSkills;
  775. var
  776. i, k, basex, basey, c:integer;
  777. begin
  778. self.setSkillNames();
  779. openTab(TAB_STATS);
  780. basex := 586;
  781. basey := 300;
  782. for i := 0 to 2 do
  783. for k := 0 to 6 do
  784. begin
  785. try
  786. self.skillLevel[c] := StrToInt(getSimpleText([65535], basex + (i * 54), basey + (k * 32), basex + 14 + (i * 54), basey + 11 + (k * 32), 'statchars07'));
  787. except
  788. self.skillLevel[c] := -1;
  789. end;
  790. c := c + 1;
  791. end;
  792. end;
  793.  
  794. function getStatID(name:string):integer;
  795. var
  796. p:tStatInfo;
  797. i:integer;
  798. begin
  799. p.setSkillNames();
  800. for i := 0 to high(p.skillName) do
  801. if (lowercase(p.skillName[i]) = lowercase(name)) then
  802. exit(i);
  803. end;
  804.  
  805. function getStatID(names:tstringarray):TIntegerArray; overload;
  806. var
  807. i:integer;
  808. begin
  809. setLength(result, length(names));
  810. for i := 0 to high(names) do
  811. result[i] := getStatID(names[i]);
  812. end;
  813.  
  814. function getStatLevel(ID:integer):integer;
  815. var
  816. p:tStatInfo;
  817. begin
  818. p.getSkills();
  819. result := p.skillLevel[ID];
  820. end;
  821.  
  822. function getStatLevel(IDs:TIntegerArray):TIntegerArray; overload;
  823. var
  824. i:integer;
  825. begin
  826. setLength(result, length(IDs));
  827. for i := 0 to high(IDs) do
  828. result[i] := getStatLevel(IDs[i]);
  829. end;
  830.  
  831. function getStatLevel(name:string):integer; overload;
  832. begin
  833. result := getStatLevel(getStatID(name));
  834. end;
  835.  
  836. function getStatLevel(names:tStringarray):TIntegerArray; overload;
  837. begin
  838. result := getStatLevel(getStatID(names));
  839. end;
  840.  
  841. procedure tCustomStatInfo.setUp(skillNames:TStringArray);
  842. var
  843. i:integer;
  844. begin
  845. setLength(self.skillName, length(skillNames));
  846. setLength(self.skillLevels,length(skillNames));
  847. for i := 0 to high(skillNames) do
  848. self.skillName[i] := skillNames[i];
  849. end;
  850.  
  851. procedure tCustomStatInfo.compare(var p:tCustomStatInfo);
  852. var
  853. i:integer;
  854. tl:integer;
  855. begin
  856. p.setUp(self.Skillname);
  857. for i := 0 to high(self.skillLevels) do
  858. begin
  859. tl := getStatLevel(self.skillName[i]);
  860. if (tl > - 1) then
  861. p.skillLevels[i] := (self.SkillLevels[i] - tl);
  862. end;
  863. end;
  864.  
  865. procedure tCustomStatInfo.update();
  866. begin
  867. self.skillLevels := getStatLevel(self.skillName);
  868. end;
  869.  
  870. procedure updateStats();
  871. begin
  872. currentSkills.update();
  873. end;
  874.  
  875. procedure _eventTimerArray.update;
  876. var
  877. i:integer;
  878. begin
  879. for i := 0 to high(self) do
  880. begin
  881. if (self[i].activated) then
  882. if ((getSystemTime - self[i].lastTime) > self[i]._maxTime) then
  883. begin
  884. self[i].onTimeUp();
  885. markTime(self[i].lastTime);
  886. end;
  887. end;
  888. end;
  889.  
  890. procedure printGainedLevels;
  891. var
  892. i:integer;
  893. begin
  894. writeln('============Script finish report============');
  895. for i := 0 to high(customSkills.skillLevels) do
  896. writeln(customSkills.skillName[i] , ' Start: ' , customSkills.skillLevels[i], ' Finish: ' , currentSkills.skillLevels[i], ' Gained: ' , (customSkills.skillLevels[i] - currentSkills.skillLevels[i]));
  897. writeln('Total levels gained ' , (startTotal - currentTotal));
  898. end;
  899.  
  900. function isOnlineIndex(index:integer):boolean;
  901. var
  902. x, y:integer;
  903. begin
  904. openTab(TAB_FRIENDS);
  905. result := findColorTolerance(x, y, 65280, 556, 289 + (index * 15), 702, 299 + (index * 15), 1);
  906. end;
  907.  
  908. function getOnlineFriendCount:integer;
  909. var
  910. i, c:integer;
  911. begin
  912. openTab(TAB_FRIENDS);
  913. for i := 0 to 11 do
  914. if (isOnlineIndex(i)) then
  915. c := c + 1
  916. else
  917. break;
  918. result := c;
  919. end;
  920.  
  921. function getOnlineFriends:TStringArray;
  922. var
  923. i, c:integer;
  924. begin
  925. c := getOnlinefriendCount();
  926. setLength(result, c);
  927. if (c = 0) then
  928. exit;
  929. for i := 0 to c - 1 do
  930. result[i] := getFriendName(i);
  931. end;
  932.  
  933. procedure updateOnlineFriends;
  934. begin
  935. lastOnline := getOnlineFriends();
  936. end;
  937.  
  938. function getAttackMode():integer;
  939. var
  940. i, k, c, x, y:integer;
  941. begin
  942. result := -1;
  943. openTab(TAB_COMBAT);
  944. for i := 0 to 1 do
  945. for k := 0 to 1 do
  946. if (countColorTolerance(1974405,
  947. 569 + (i * 82), 305 + (k * 54),
  948. 634 + (i * 82), 348 + (k * 54),
  949. 13) > 200) then
  950. exit(c)
  951. else
  952. c := c + 1;
  953. end;
  954.  
  955. function getAttackModeName(index:integer):string;overload;
  956. var
  957. i, k, c:integer;
  958. tpa:TPointArray;
  959. atpa:T2DPointArray;
  960. b:Tbox;
  961. begin
  962. if (index > 3) then exit;
  963. openTab(TAB_COMBAT);
  964. for i := 0 to 1 do
  965. for k := 0 to 1 do
  966. if (c = index) then
  967. exit(getSimpleText([2070783],
  968. 569 + (i * 82), 305 + (k * 54),
  969. 634 + (i * 82), 348 + (k * 54),
  970. 'statchars07'))
  971. else
  972. c := c + 1;
  973. end;
  974.  
  975. function getAttackModeString():string;
  976. var
  977. mode:integer;
  978. begin
  979. mode := getAttackMode();
  980. if (mode <> -1) then
  981. result := getAttackModeName(mode);
  982. end;
  983.  
  984. procedure switchStyle(style:integer);
  985. var
  986. i, k, c:integer;
  987. begin
  988. if (style > 3) or (getAttackMode = style) then
  989. exit;
  990. openTab(TAB_COMBAT);
  991. for i := 0 to 1 do
  992. for k := 0 to 1 do
  993. if (c = style) then
  994. begin
  995. mouse(569 + (i * 82) + 25, 305 + (k * 54) + 25);
  996. exit;
  997. end else
  998. c := c + 1;
  999. end;
  1000.  
  1001. procedure switchStyle(style:string); overload;
  1002. var
  1003. i:integer;
  1004. begin
  1005. for i := 0 to 3 do
  1006. if (lowercase(getAttackModeName(i)) = lowercase(style)) then
  1007. begin
  1008. switchStyle(i);
  1009. exit;
  1010. end;
  1011. end;
  1012.  
  1013. function getCombatLevelString():string;
  1014. begin
  1015. openTab(TAB_COMBAT);
  1016. result := getSimpleText([2070783], 664, 283, 680, 295, 'statchars07');
  1017. end;
  1018.  
  1019. function getCombatLevel():integer;
  1020. begin
  1021. try
  1022. result := StrToInt(getCombatLevelString);
  1023. except
  1024. result := 3;
  1025. end;
  1026. end;
  1027.  
  1028. procedure checkStyle;
  1029. begin
  1030. switchStyle(attack_mode);
  1031. combatLevel := getCombatLevelString();
  1032. end;
  1033.  
  1034. procedure _eventTimerArray.init;
  1035. var
  1036. i:integer;
  1037. begin
  1038. setLength(self, 5);
  1039.  
  1040. with self[0] do
  1041. begin
  1042. eventName := 'Check total';
  1043. _maxtime := _update_total;
  1044. activated := _updateTotal;
  1045. onTimeUp := @updateTotal;
  1046. end;
  1047.  
  1048. with self[1] do
  1049. begin
  1050. eventName := 'Check prayer';
  1051. _maxtime := _check_prayer_every;
  1052. activated := _pray;
  1053. onTimeUp := @checkPrayer;
  1054. end;
  1055.  
  1056. with self[2] do
  1057. begin
  1058. eventName := 'Check levels';
  1059. activated := _trackSkills;
  1060. _maxtime := _update_every;
  1061. onTimeUp := @updateStats;
  1062. end;
  1063.  
  1064. with self[3] do
  1065. begin
  1066. eventName := 'Check Online fiends';
  1067. activated := displayOnlineFriends;
  1068. _maxtime := update_friends_every;
  1069. onTimeUp := @updateOnlineFriends;
  1070. end;
  1071.  
  1072. with self[4] do
  1073. begin
  1074. eventName := 'Check attack style and combat level';
  1075. activated := true;
  1076. _maxtime := 100000;
  1077. onTimeUp := @checkStyle;
  1078. end;
  1079.  
  1080. for i := 0 to high(self) do
  1081. markTime(self[i].lastTime);
  1082. end;
  1083.  
  1084. procedure _ssFight;
  1085. var
  1086. t, reply:integer;
  1087. begin
  1088. ss_login;
  1089. myTimers.update();
  1090. if (failed > 40) then
  1091. begin
  1092. m.progress('Script failed');
  1093. reply := messageBox('The script has failed more then 5 times, would you like to enter Debug mode?', 'ATTENTION', 2);
  1094. writeln('The script has failed more then 5 times');
  1095. if (reply = 4) then
  1096. begin
  1097. debug := true;
  1098. failed := 0
  1099. end
  1100. else if (reply = 3) then
  1101. terminateScript
  1102. else
  1103. failed := 0;
  1104. end else begin
  1105. if (m.find) then
  1106. begin
  1107. m.progress('Waiting to get into combat');
  1108. if waitFunc(@diff300, 50, 4500) then
  1109. begin
  1110. failed := 0;
  1111. marktime(t);
  1112. while (inCombat) do
  1113. begin
  1114. if (not ss_in) then
  1115. exit();
  1116. myTimers.update();
  1117. m.progress('Fighting ' + m.name);
  1118. wait(100 + random(100));
  1119. if (timeFromMark(t) > _timeout) then
  1120. exit();
  1121. end;
  1122. if (not differentCount(10)) then
  1123. begin
  1124. m.progress('Killed ' + m.name);
  1125. kills := kills + 1;
  1126. if _loot then
  1127. begin
  1128. m.progress('Looting');
  1129. _PickUps.pickUp();
  1130. exit();
  1131. end else
  1132. exit();
  1133. end;
  1134. end else
  1135. m.progress('Unexpected out of combat');
  1136. end else
  1137. m.progress('did not find monster rotating compass');
  1138. rotateCompass;
  1139. exit();
  1140. m.progress('Failsafe, waiting, failedcount = ' + toStr(failed));
  1141. failed := failed + 1;
  1142. if (failed < 2) then
  1143. exit();
  1144. wait(random(3000));
  1145. end;
  1146. end;
  1147.  
  1148. procedure updateSettingsStuff();
  1149. begin
  1150. if (not hasSettingsFile) then
  1151. updateSettingsFiles;
  1152. saveSettings();
  1153. loadScriptVars;
  1154. if _displayMonsters then
  1155. begin
  1156. printLoaded();
  1157. terminateScript();
  1158. end;
  1159. printInfo(['news','authors','mentions','instructions'], 400, 50);
  1160. end;
  1161.  
  1162. procedure start();
  1163. begin
  1164. clearDebug();
  1165. m.init;
  1166. if (_trackSkills) then
  1167. customSkills.setUp(_track_skills);
  1168. debug := false;
  1169. myTimers.init();
  1170. _ss.init('soulsplit');
  1171. mousespeed := 35;
  1172. updateSettingsStuff();
  1173. ss_login;
  1174. startXP := ss_getXPBarTotal();
  1175. startXPString := ss_getXPBarTotalString();
  1176. startTotal := getTotalLevel();
  1177. currentTotal := getTotalLevel();
  1178. if (_trackSkills) then
  1179. begin
  1180. customSkills.update();
  1181. currentSkills.setUp(_track_skills);
  1182. updateStats();
  1183. end;
  1184. if (_pray) then
  1185. begin
  1186. normals.init('normal');
  1187. normals.activatePrayer(_use_prayers);
  1188. end;
  1189. if displayOnlineFriends then
  1190. updateOnlineFriends;
  1191. attackMode := getAttackModeString();
  1192. weaponName := getWeaponName();
  1193. combatLevel := getCombatLevelString();
  1194. addOnTerminate('printGainedLevels');
  1195. end;
  1196.  
  1197. begin
  1198. mouseSpeed := 15;
  1199. // writeln(getWeaponName());
  1200. start();
  1201.  
  1202. //exit;
  1203. repeat
  1204. _ssFight;
  1205. until isKeyDown(113);
  1206. end.
Advertisement
Add Comment
Please, Sign In to add comment