Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {$I RSPS/srlRSPS.Simba}
- {$I RSPS/core/prayer.Simba}
- const
- _timeout = 30000;
- _loot = false;
- _loot_distance = 5;
- _rightClick = false;
- _useUptext = true;
- _checkCombat = true;
- _autoLoad = true;
- _displayMonsters = false;
- _updateTotal = true;
- _update_total = 170000;
- _pray = false;
- _use_prayers = ['Ultimate Strength'];
- _check_prayer_every = 5000;
- _pray_at = 15;
- _trackSkills = true;
- _track_skills = ['Hitpoints'];
- _update_every = 100000;
- displayOnlineFriends = true;
- update_friends_every = 50000;
- display_task = false;
- attack_mode = 3;
- monsterID = 8;
- // do not touch
- scriptVersion = 14;
- type
- _monster = record
- color, tol:tintegerarray;
- health, filter:integer;
- hue, sat:textendedarray;
- uptext:tstringarray;
- name:string;
- end;
- _loot_item = record
- options:TStringArray;
- name:string;
- Value, count:Integer;
- end;
- tStatInfo = record
- skillLevel:array[0..20] of integer;
- skillName:TStringArray;
- end;
- tCustomStatInfo = record
- skillLevels:TIntegerArray;
- skillName:TStringarray;
- end;
- _eventTimer = record
- eventName:string;
- lastTime, _maxTime:integer;
- onTimeup:procedure;
- activated:boolean;
- end;
- _eventTimerArray = array of _eventTimer;
- _loot_array = array of _loot_item;
- var
- timeout, loot_distance, startXP, lastCheck, currentTotal:integer;
- loot, rightClick, checkCombat, useUptext:boolean;
- customSkills, currentSkills:tCustomStatInfo;
- startXPString, attackMode, weaponName, combatLevel:string;
- myTimers:_eventTimerArray;
- _pickUps:_loot_array;
- lastOnline:TStringArray;
- procedure _loot_array.init;
- begin
- setLength(self, 3);
- with self[0] do
- begin
- name := 'Gold charm';
- options := ['ake old','ld cha'];
- value := 0;
- end;
- with self[1] do
- begin
- name := 'Green charm';
- options := ['ake Gr','en cha'];
- value := 0;
- end;
- with self[2] do
- begin
- name := 'Coins';
- options := ['ake Coi','oins'];
- value := 1;
- end;
- end;
- var
- _ss:_rsps_server;
- m:_monster;
- debug:boolean;
- failed, kills, startTotal:integer;
- procedure _monster.init;
- begin
- with self do
- begin
- color := [9148055];
- tol := [15];
- health := 22;
- filter := 140;
- hue := [0.10];
- sat := [0.15];
- uptext := ['ave','rawl','raw'];
- name := 'Cave crawler';
- end;
- end;
- function findFile(path, ext, name:string):boolean;
- var
- s:TStringArray;
- i:Integer;
- begin
- s := GetFiles(path, ext);
- for i := 0 to high(s) do
- result := (s[i] = (name +'.' + ext));
- end;
- function hasprofile():boolean;
- begin
- result := fileExists(appPath + 'SSfighterSettings\_soulsplit.monsterProfiles.txt');
- end;
- function hasSettingsFile():boolean;
- begin
- result := fileExists(appPath + 'SSfighterSettings\_soulsplit.settings.txt');
- end;
- function ss_in:boolean;
- begin
- result := getColor(426, 543) = 16777215
- end;
- procedure ss_login;
- begin
- if ss_in then
- exit
- else begin
- mouse(489, 466);
- if waitFunc(@ss_in, 40, 6000) then
- wait(6000);
- end;
- end;
- function getFileString:String;
- var
- tmpFile:integer;
- str:string;
- begin
- tmpFile := openFile(appPath + 'SSfighterSettings\_soulsplit.monsterProfiles' + '.txt', true);
- try
- ReadFileString(tmpFile, str, 20000);
- finally
- result := str;
- closeFile(tmpFile);
- end;
- end;
- procedure printLoaded;
- var
- str, info:string;
- i, t:integer;
- begin
- t := getSystemTime();
- str := getFileString();
- repeat
- i := i + 1;
- info := between('<monster' + toStr(i) + '>', '</monster>', str);
- if length(info) < 10 then
- exit();
- writeln('ID: ' , i , ' ', between('<name>','</name>', info));
- until ((getSystemTime - t) > 2000);
- end;
- procedure printInfo(search:string;lineTime:integer);
- var
- str, info:string;
- i, t:integer;
- begin
- t := getSystemTime();
- str := getFileString();
- str := between('<' + search + '>', '</' + search + '>', str);
- repeat
- i := i + 1;
- info := between('<' + toStr(i) + '>', '</>', str);
- if length(info) < 1 then
- exit();
- writeln(info);
- wait(lineTime);
- until ((getSystemTime - t) > 15000);
- end;
- procedure printInfo(search:TStringArray;time, lineTime:integer);overload;
- var
- i:integer;
- begin
- for i := 0 to high(search) do
- begin
- printInfo(search[i], lineTime);
- wait(time);
- end;
- end;
- procedure _monster.load(id:integer);
- var
- profileString, monsterInfo:String;
- tmpFile:Integer;
- begin
- profileString := getFileString();
- monsterInfo := between('<monster' + toStr(id) + '>', '</monster>', profileString);
- if length(monsterInfo) < 1 then
- begin
- writeln('Invalid monster ID! ' , id);
- exit();
- end;
- with self do
- begin
- Color := between('<color>', '</color>', monsterInfo).toIntegerArray();
- tol := between('<tol>', '</tol>', monsterInfo).toIntegerArray();
- health := StrToInt(between('<health>', '</health>', monsterInfo));
- hue := between('<hue>', '</hue>', monsterInfo).toExtendedArray();
- sat := between('<sat>', '</sat>', monsterInfo).toExtendedArray();
- uptext := between('<uptext>', '</uptext>', monsterInfo).toStringArray();
- name := between('<name>', '</name>', monsterInfo);
- end;
- end;
- function getSettingsString():string;
- var
- tmpFile:integer;
- str:string;
- begin
- tmpFile := openFile(appPath + 'SSfighterSettings\_soulsplit.settings' + '.txt', true);
- try
- ReadFileString(tmpFile, str, 20000);
- finally
- result := str;
- closeFile(tmpFile);
- end;
- end;
- procedure loadSettingsFromFile;
- var
- profileString, settingsInfo:String;
- begin
- profileString := getSettingsString();
- settingsInfo := between('<settings>', '</settings>', profileString);
- if (length(settingsInfo) > 10) then
- begin
- timeout := StrToInt(between('<timeout>', '</timeout>', settingsInfo));
- loot_distance := StrToInt(between('<lootdist>', '</lootdist>', settingsInfo));
- loot := between('<loot>', '</loot>', settingsInfo).toBoolean();
- rightClick := between('<rightClick>', '</rightClick>', settingsInfo).toBoolean();
- useUptext := between('<useUptext>', '</useUptext>', settingsInfo).toBoolean();
- checkCombat := between('<checkCombat>', '</checkCombat>', settingsInfo).toBoolean();
- end else
- writeln('Error loading settings!');
- end;
- function localVersion():integer;
- var
- profileString, settingsInfo:String;
- begin
- profileString := getFileString();
- if length(profileString) > 1 then
- try
- result := StrToInt(between('<revision>','</revision>', profileString));
- except
- result := -1;
- end
- else
- writeln('Unable to get current revision');
- end;
- function GetProfileVersion():integer;
- begin
- try
- result := StrToInt(getPage('http://pastebin.com/raw.php?i=r9hGvtAu'));
- except
- result := -1;
- end;
- end;
- function getOnlineProfiles():string;
- begin
- result := getPage('http://pastebin.com/raw.php?i=WFS9KJtK');
- end;
- procedure updateProfile;
- var
- tmpFile:integer;
- begin
- try
- tmpFile := rewriteFile(appPath + 'SSfighterSettings\_soulsplit.monsterProfiles.txt', true);
- writeFileString(tmpFile, getOnlineProfiles());
- closeFile(tmpFile);
- writeln('Monster profiles updated');
- except
- writeln('Error updating profile');
- end;
- end;
- function getScriptVersion():integer;
- begin
- try
- result := StrToInt(getPage('http://pastebin.com/raw.php?i=yf87fYMd'));
- except
- result := -1;
- end;
- end;
- function getScriptText():string;
- begin
- result := getPage('http://pastebin.com/raw.php?i=JX6THqXD');
- end;
- procedure updateScript(rev:integer);
- var
- tmpFile:integer;
- path:string;
- sucess:boolean;
- begin
- path := appPath + 'scripts\Soulsplit fighter V' + toStr(rev) + '.simba';
- writeln('Saving latest script at ' , path);
- try
- tmpFile := createFile(path);
- closeFile(tmpFile);
- tmpFile := rewriteFile(path, true);
- writeFileString(tmpFile, getScriptText());
- sucess := true;
- except
- writeln('Error writing script to file');
- finally
- closeFile(tmpFile);
- end;
- if sucess then
- begin
- writeln('please use the script at ', path);
- terminateScript;
- end;
- end;
- procedure UpdateScriptFiles;
- var
- latestProfileVersion, latestScriptVersion, tmpFile:integer;
- begin
- if (not hasProfile) then
- begin
- Writeln('Profiles file not found attempting to download...');
- try
- tmpFile := createFile(appPath + 'SSfighterSettings\_soulsplit.monsterProfiles.txt');
- closeFile(tmpFile);
- UpdateScriptFiles;
- exit();
- except
- Writeln('Error downloading monster profiles');
- end;
- end else
- begin
- latestProfileVersion := GetProfileVersion();
- Writeln('Current profiles version: ' , localVersion(), ' latest: ' , latestProfileVersion);
- if (latestProfileVersion > localVersion()) then
- updateProfile
- else if (latestProfileVersion = localVersion()) then
- writeln('Monster profiles up to date')
- else
- writeln('Local version is newer then online version');
- end;
- latestScriptVersion := getScriptVersion();
- writeln('Current script version: ' , scriptVersion, ' Latest script version: ' , latestScriptVersion);
- if (scriptVersion < latestScriptVersion) then
- begin
- writeln('Updating script..');
- updateScript(latestScriptVersion);
- end else
- begin
- if (scriptVersion = latestScriptVersion) then
- writeln('Script up to date')
- else
- writeln('Local version is newer then online version');
- end;
- end;
- procedure createSettingsFile();
- var
- tmpFile:integer;
- begin
- tmpFile := createFile(appPath + 'SSfighterSettings\_soulsplit.settings.txt');
- closeFile(tmpFile);
- end;
- procedure saveSettings();
- var
- path:string;
- tmpFile:integer;
- begin
- path := appPath + 'SSfighterSettings\_soulsplit.settings.txt';
- try
- tmpFile := rewriteFile(path, true);
- writeFileString(tmpFile, '<settings>');
- writeFileString(tmpFile, '<timeout>' + toStr(_timeout) + '</timeout>');
- writeFileString(tmpFile, '<loot>' + toStr(_loot) + '</loot>');
- writeFileString(tmpFile, '<lootdist>' + toStr(_loot_distance) + '</lootdist>');
- writeFileString(tmpFile, '<debug>' + toStr(debug) + '</debug>');
- writeFileString(tmpFile, '<rightClick>' + toStr(_rightClick) + '</rightClick>');
- writeFileString(tmpFile, '<checkUptext>' + toStr(_useUpText) + '</checkUptext>');
- writeFileString(tmpFile, '<monsterID>' + toStr(monsterID) + '</monsterID>');
- writeFileString(tmpFile, '</settings>');
- writeln('Saved settings to ' , path);
- except
- writeln('Error saving script settings');
- finally
- closeFile(tmpFile);
- end;
- end;
- procedure updateSettingsFiles;
- begin
- if (not directoryExists(appPath + 'SSfighterSettings')) then
- begin
- writeln('Could not find settings folder creating one now');
- if createDirectory(appPath + 'SSfighterSettings') then
- writeln('Directory created');
- end;
- if (not hasSettingsfile) then
- begin
- writeln('Creating settings file');
- createSettingsFile();
- saveSettings();
- end;
- end;
- procedure loadScriptVars;
- begin
- UpdateScriptFiles;
- if _autoLoad then
- begin
- loadSettingsFromFile();
- m.load(monsterID);
- end else
- begin
- timeout := _timeout;
- loot_distance := _loot_distance;
- loot := _loot;
- rightClick := _rightClick;
- useUpText := _useUptext;
- checkCombat := _checkCombat;
- m.init();
- end;
- end;
- function center(bx: TBox): TPoint;
- begin
- if ((bx.X1 > bx.X2) or (bx.Y1 > bx.Y2)) then
- begin
- if (bx.X1 > bx.X2) then
- Swap(bx.X1, bx.X2);
- if (bx.Y1 > bx.Y2) then
- Swap(bx.Y1, bx.Y2);
- end;
- Result := Point(Round(bx.X1 + ((bx.X2 - bx.X1) div 2)), Round(bx.Y1 + ((bx.Y2 - bx.Y1) div 2)));
- end;
- function perHour(what:integer):integer;
- begin
- result := Round(what * (3600.0 / (GetTimeRunning / 1000.0)));
- end;
- procedure _monster.progress(state:string);
- var
- i:integer;
- begin
- clearDebug();
- writeln('- Time running: ' , timeRunning);
- writeln('- State: ', state);
- writeln('- ', kills, ' ', self.name, ' Killed [', perHour(kills),'] per hour ' , 'Levels gained: ' , (currentTotal - startTotal));
- writeln('- Start XP: ' , startXPString, ' XP gained: ', (ss_getXpBarTotal - startXP), ' [', perHour(ss_getXpBarTotal - startXP),'] per hour');
- writeln('- Using : ', weaponName , ' Attack mode: [', attackMode, '] Combat level: ', combatLevel);
- if displayOnlineFriends then
- writeln('- Online freinds: ' , lastOnline);
- if display_task then
- for i := 0 to high(myTimers) do
- writeln('- Task [',i,']', myTimers[i].eventName, ' next update in ' , msToTime(myTimers[i]._maxTime - (getSystemtime - myTimers[i].lastTime), 0));
- end;
- procedure _loot_array.pickUp();
- var
- _dots:TPointArray;
- options:array of TOptions;
- i, k, e, _count:integer;
- opt_strs:TStringArray;
- _ls:TPoint;
- moved:boolean;
- begin
- _dots := GetMiniMapDotsIn('item',539, 61, 708, 217);//getRedDots();
- filterpointspie(_dots, 0, 360, 0, loot_distance * 4, 627, 138);
- sortTPAFrom(_dots, point(627, 138));
- setLength(_dots, 2);
- for i := 0 to high(_dots) do
- begin
- if moved then
- exit();
- _ls := ss_MMtoMsPoint(_dots[i]);
- mouse(_ls.x, _ls.y, 0, 0, mouse_right);
- options := _ss.getOptions();
- setLength(opt_strs, length(options));
- for k := 0 to high(options) do
- opt_strs[k] := options[k].Str;
- writeln('k=' , k);
- k := 0;
- writeln(k);
- //setLength(LookFor, 3);
- writeln(opt_strs);
- for k := 0 to high(self) do
- begin
- writeln(self[k].options);
- if isText(opt_strs, self[k].options) then
- _count := _count + 1;
- end;
- for k := 0 to _count do
- begin
- if moved then
- mouse(258, 230, 0, 0, mouse_right);
- for e := 0 to high(self) do
- if not _ss.waitOptionMulti(self[e].options, 150) then
- if debug then
- writeln('Did not find ' , self[e].options)
- else
- moved := true;
- end;
- end;
- end;
- function healthBar(b:tbox):boolean;
- var
- red, green, bar:tpointarray;
- healthbar:t2dpointarray;
- i:integer;
- bx:tbox;
- begin
- if ((mainscreen.bounds.x1 + (b.x1 - 2)) < 0) then
- exit(false);
- findColors(green, 65280, b.x1 - 2, b.y1-7, b.x2, b.y2);
- findColors(red, 255, b.x1 - 2, b.y1 - 7, b.x2, b.y2);
- bar := mergeAtpa([green, red]);
- if (length(bar) > 0) then
- begin
- healthbar := clustertpa(bar, 1);
- if (length(healthbar) = 0) then
- exit(false);
- for i := 0 to high(healthbar) do
- begin
- bx := gettpabounds(healthbar[i]);
- if ((bx.x1 - bx.x1) > 25) then
- exit(true);
- end;
- end;
- end;
- function specOn:boolean;
- var
- tpa:TPointArray;
- begin
- result := false;
- findcolorstolerance(tpa, 1210821, 471, 221, 509, 259, 53);
- if (length(tpa) > 25) then
- exit(true);
- end;
- function specPercentage:extended;
- var
- greentpa:tpointarray;
- barOpen:boolean;
- begin
- if specOn then
- begin
- mouse(491, 241);
- wait(200);
- end;
- ColorToleranceSpeed(2);
- SetColorSpeed2Modifiers(0.55, 0.59);
- findcolorstolerance(greentpa, 4176530, 475, 224, 507, 258, 38);
- ColorToleranceSpeed(1);
- SetColorSpeed2Modifiers(0.02, 0.02);
- if (length(greentpa) > 1) then
- result := ((length(greentpa) / 917) * 100)
- else
- result := 0;
- end;
- function differentCount(time:integer): Boolean;
- var
- _white_count:integer;
- begin
- if not ss_xpBarOpen then
- mouse(534, 117);
- _white_count := countColorTolerance(16777215, 410, 110, 508, 123, 5);
- wait(time);
- result := (_white_count <> countColorTolerance(16777215, 410, 110, 508, 123, 5));
- end;
- function inCombat:boolean;
- begin
- result := differentCount(3300);
- end;
- procedure holdKey(ID, time:Integer);
- begin
- keyDown(ID);
- wait(time);
- keyUp(ID);
- end;
- procedure rotateCompass;
- var
- currentAngle:Extended;
- t:Integer;
- begin
- currentAngle := map.GetCompassAngleDegrees();
- t := getSystemTime;
- repeat
- holdKey(37, 150);
- until ((map.GetCompassAngleDegrees() - currentAngle) > 60) or ((map.GetCompassAngleDegrees() - currentAngle) < 60) or ((GetSystemTime - t) > 2500);
- end;
- function _monster.find:boolean;
- var
- mtpas, matpa:t2dpointarray;
- mtpa:tpointarray;
- i, x, y:integer;
- bx:tbox;
- dx, dy, dx2, dy2:integer;
- begin
- ColorToleranceSpeed(2);
- setLength(mtpas, length(self.color));
- for i := 0 to high(self.color) do
- begin
- SetColorSpeed2Modifiers(self.hue[i], self.sat[i]);
- findColorsTolerance(mtpas[i], self.color[i], mainscreen.bounds, self.tol[i]);
- end;
- ColorToleranceSpeed(1);
- SetColorSpeed2Modifiers(0.02, 0.02);
- if (length(mtpas) > 1) then
- mtpa := mergeAtpa(mtpas)
- else
- mtpa := mtpas[0];
- if (length(mtpa) > 0) then
- begin
- matpa := clustertpa(mtpa, 4);
- filtertpasbetween(matpa, 0, self.filter);
- SortATPAFromFirstpoint(matpa, Point(256, 216));
- if debug then
- debugatpa(matpa, 'bmp');
- for i := 0 to high(matpa) do
- begin
- if (checkCombat) then
- begin
- bx := gettpabounds(matpa[i]);
- if not healthBar(bx) then
- continue;
- end;
- if (i > 2) then
- exit(false);
- if useUptext then
- if (_ss.waitUpTextMulti(self.uptext, 150)) then
- continue
- else
- if debug then
- writeln('Uptext ' , self.uptext, ' not found');
- MiddleTPAEx(matpa[i], x, y);
- if rightClick then
- begin
- Mouse(x, y, 0, 0, Mouse_right);
- if _ss.waitOptionMulti(['ttack', 'Atta' ], 1200) then
- exit(true);
- end else
- begin
- mouse(x, y);
- exit(true);
- end;
- end;
- end;
- end;
- function diff300:boolean;
- begin
- result := differentCount(300);
- end;
- procedure updateTotal();
- var
- ct:integer;
- begin
- ct := getTotalLevel();
- if (ct > - 1) then
- currentTotal := ct;
- end;
- function rsps_inventory.clickColor(color, tol:integer):boolean;
- var
- i, x, y:integer;
- begin
- openTab(TAB_INV);
- for i := 0 to high(self.slots) do
- if findColorTolerance(x, y, color, self.slots[i], tol) then
- begin
- self.interactItem(i, mouse_left);
- wait(50 + random(250));
- exit(true);
- end;
- end;
- function rsps_inventory.clickColor(colors, tols:TIntegerArray):boolean;overload;
- var
- i:integer;
- begin
- if (length(colors) <> length(tols)) then
- exit();
- for i := 0 to high(colors) do
- if self.clickColor(colors[i], tols[i]) then
- exit(true);
- end;
- procedure checkPrayer;
- begin
- if (map.getPrayer() < _pray_at) then
- inventory.clickColor([9750065, 6897065], [5, 5]);
- normals.activatePrayer(_use_prayers);
- wait(random(300));
- end;
- procedure tStatInfo.printSkillInfo;
- var
- i:integer;
- begin
- for i := 0 to high(self.skillLevel) do
- writeln(self.skillName[i], ' = ' , self.skillLevel[i]);
- end;
- procedure tStatInfo.setSkillNames;
- begin
- self.skillName := ['Attack','Strength','Defense','Range',
- 'Prayer','Magic','Runecrafting','Hitpoints', 'Agility','Herblore',
- 'Theiving','Crafting','Fletching','Slayer','Mining','Smithing',
- 'Fishing','Cooking','Firemaking','Woodcutting','Farming'];
- end;
- procedure tStatInfo.getSkills;
- var
- i, k, basex, basey, c:integer;
- begin
- self.setSkillNames();
- openTab(TAB_STATS);
- basex := 586;
- basey := 300;
- for i := 0 to 2 do
- for k := 0 to 6 do
- begin
- try
- self.skillLevel[c] := StrToInt(getSimpleText([65535], basex + (i * 54), basey + (k * 32), basex + 14 + (i * 54), basey + 11 + (k * 32), 'statchars07'));
- except
- self.skillLevel[c] := -1;
- end;
- c := c + 1;
- end;
- end;
- function getStatID(name:string):integer;
- var
- p:tStatInfo;
- i:integer;
- begin
- p.setSkillNames();
- for i := 0 to high(p.skillName) do
- if (lowercase(p.skillName[i]) = lowercase(name)) then
- exit(i);
- end;
- function getStatID(names:tstringarray):TIntegerArray; overload;
- var
- i:integer;
- begin
- setLength(result, length(names));
- for i := 0 to high(names) do
- result[i] := getStatID(names[i]);
- end;
- function getStatLevel(ID:integer):integer;
- var
- p:tStatInfo;
- begin
- p.getSkills();
- result := p.skillLevel[ID];
- end;
- function getStatLevel(IDs:TIntegerArray):TIntegerArray; overload;
- var
- i:integer;
- begin
- setLength(result, length(IDs));
- for i := 0 to high(IDs) do
- result[i] := getStatLevel(IDs[i]);
- end;
- function getStatLevel(name:string):integer; overload;
- begin
- result := getStatLevel(getStatID(name));
- end;
- function getStatLevel(names:tStringarray):TIntegerArray; overload;
- begin
- result := getStatLevel(getStatID(names));
- end;
- procedure tCustomStatInfo.setUp(skillNames:TStringArray);
- var
- i:integer;
- begin
- setLength(self.skillName, length(skillNames));
- setLength(self.skillLevels,length(skillNames));
- for i := 0 to high(skillNames) do
- self.skillName[i] := skillNames[i];
- end;
- procedure tCustomStatInfo.compare(var p:tCustomStatInfo);
- var
- i:integer;
- tl:integer;
- begin
- p.setUp(self.Skillname);
- for i := 0 to high(self.skillLevels) do
- begin
- tl := getStatLevel(self.skillName[i]);
- if (tl > - 1) then
- p.skillLevels[i] := (self.SkillLevels[i] - tl);
- end;
- end;
- procedure tCustomStatInfo.update();
- begin
- self.skillLevels := getStatLevel(self.skillName);
- end;
- procedure updateStats();
- begin
- currentSkills.update();
- end;
- procedure _eventTimerArray.update;
- var
- i:integer;
- begin
- for i := 0 to high(self) do
- begin
- if (self[i].activated) then
- if ((getSystemTime - self[i].lastTime) > self[i]._maxTime) then
- begin
- self[i].onTimeUp();
- markTime(self[i].lastTime);
- end;
- end;
- end;
- procedure printGainedLevels;
- var
- i:integer;
- begin
- writeln('============Script finish report============');
- for i := 0 to high(customSkills.skillLevels) do
- writeln(customSkills.skillName[i] , ' Start: ' , customSkills.skillLevels[i], ' Finish: ' , currentSkills.skillLevels[i], ' Gained: ' , (customSkills.skillLevels[i] - currentSkills.skillLevels[i]));
- writeln('Total levels gained ' , (startTotal - currentTotal));
- end;
- function isOnlineIndex(index:integer):boolean;
- var
- x, y:integer;
- begin
- openTab(TAB_FRIENDS);
- result := findColorTolerance(x, y, 65280, 556, 289 + (index * 15), 702, 299 + (index * 15), 1);
- end;
- function getOnlineFriendCount:integer;
- var
- i, c:integer;
- begin
- openTab(TAB_FRIENDS);
- for i := 0 to 11 do
- if (isOnlineIndex(i)) then
- c := c + 1
- else
- break;
- result := c;
- end;
- function getOnlineFriends:TStringArray;
- var
- i, c:integer;
- begin
- c := getOnlinefriendCount();
- setLength(result, c);
- if (c = 0) then
- exit;
- for i := 0 to c - 1 do
- result[i] := getFriendName(i);
- end;
- procedure updateOnlineFriends;
- begin
- lastOnline := getOnlineFriends();
- end;
- function getAttackMode():integer;
- var
- i, k, c, x, y:integer;
- begin
- result := -1;
- openTab(TAB_COMBAT);
- for i := 0 to 1 do
- for k := 0 to 1 do
- if (countColorTolerance(1974405,
- 569 + (i * 82), 305 + (k * 54),
- 634 + (i * 82), 348 + (k * 54),
- 13) > 200) then
- exit(c)
- else
- c := c + 1;
- end;
- function getAttackModeName(index:integer):string;overload;
- var
- i, k, c:integer;
- tpa:TPointArray;
- atpa:T2DPointArray;
- b:Tbox;
- begin
- if (index > 3) then exit;
- openTab(TAB_COMBAT);
- for i := 0 to 1 do
- for k := 0 to 1 do
- if (c = index) then
- exit(getSimpleText([2070783],
- 569 + (i * 82), 305 + (k * 54),
- 634 + (i * 82), 348 + (k * 54),
- 'statchars07'))
- else
- c := c + 1;
- end;
- function getAttackModeString():string;
- var
- mode:integer;
- begin
- mode := getAttackMode();
- if (mode <> -1) then
- result := getAttackModeName(mode);
- end;
- procedure switchStyle(style:integer);
- var
- i, k, c:integer;
- begin
- if (style > 3) or (getAttackMode = style) then
- exit;
- openTab(TAB_COMBAT);
- for i := 0 to 1 do
- for k := 0 to 1 do
- if (c = style) then
- begin
- mouse(569 + (i * 82) + 25, 305 + (k * 54) + 25);
- exit;
- end else
- c := c + 1;
- end;
- procedure switchStyle(style:string); overload;
- var
- i:integer;
- begin
- for i := 0 to 3 do
- if (lowercase(getAttackModeName(i)) = lowercase(style)) then
- begin
- switchStyle(i);
- exit;
- end;
- end;
- function getCombatLevelString():string;
- begin
- openTab(TAB_COMBAT);
- result := getSimpleText([2070783], 664, 283, 680, 295, 'statchars07');
- end;
- function getCombatLevel():integer;
- begin
- try
- result := StrToInt(getCombatLevelString);
- except
- result := 3;
- end;
- end;
- procedure checkStyle;
- begin
- switchStyle(attack_mode);
- combatLevel := getCombatLevelString();
- end;
- procedure _eventTimerArray.init;
- var
- i:integer;
- begin
- setLength(self, 5);
- with self[0] do
- begin
- eventName := 'Check total';
- _maxtime := _update_total;
- activated := _updateTotal;
- onTimeUp := @updateTotal;
- end;
- with self[1] do
- begin
- eventName := 'Check prayer';
- _maxtime := _check_prayer_every;
- activated := _pray;
- onTimeUp := @checkPrayer;
- end;
- with self[2] do
- begin
- eventName := 'Check levels';
- activated := _trackSkills;
- _maxtime := _update_every;
- onTimeUp := @updateStats;
- end;
- with self[3] do
- begin
- eventName := 'Check Online fiends';
- activated := displayOnlineFriends;
- _maxtime := update_friends_every;
- onTimeUp := @updateOnlineFriends;
- end;
- with self[4] do
- begin
- eventName := 'Check attack style and combat level';
- activated := true;
- _maxtime := 100000;
- onTimeUp := @checkStyle;
- end;
- for i := 0 to high(self) do
- markTime(self[i].lastTime);
- end;
- procedure _ssFight;
- var
- t, reply:integer;
- begin
- ss_login;
- myTimers.update();
- if (failed > 40) then
- begin
- m.progress('Script failed');
- reply := messageBox('The script has failed more then 5 times, would you like to enter Debug mode?', 'ATTENTION', 2);
- writeln('The script has failed more then 5 times');
- if (reply = 4) then
- begin
- debug := true;
- failed := 0
- end
- else if (reply = 3) then
- terminateScript
- else
- failed := 0;
- end else begin
- if (m.find) then
- begin
- m.progress('Waiting to get into combat');
- if waitFunc(@diff300, 50, 4500) then
- begin
- failed := 0;
- marktime(t);
- while (inCombat) do
- begin
- if (not ss_in) then
- exit();
- myTimers.update();
- m.progress('Fighting ' + m.name);
- wait(100 + random(100));
- if (timeFromMark(t) > _timeout) then
- exit();
- end;
- if (not differentCount(10)) then
- begin
- m.progress('Killed ' + m.name);
- kills := kills + 1;
- if _loot then
- begin
- m.progress('Looting');
- _PickUps.pickUp();
- exit();
- end else
- exit();
- end;
- end else
- m.progress('Unexpected out of combat');
- end else
- m.progress('did not find monster rotating compass');
- rotateCompass;
- exit();
- m.progress('Failsafe, waiting, failedcount = ' + toStr(failed));
- failed := failed + 1;
- if (failed < 2) then
- exit();
- wait(random(3000));
- end;
- end;
- procedure updateSettingsStuff();
- begin
- if (not hasSettingsFile) then
- updateSettingsFiles;
- saveSettings();
- loadScriptVars;
- if _displayMonsters then
- begin
- printLoaded();
- terminateScript();
- end;
- printInfo(['news','authors','mentions','instructions'], 400, 50);
- end;
- procedure start();
- begin
- clearDebug();
- m.init;
- if (_trackSkills) then
- customSkills.setUp(_track_skills);
- debug := false;
- myTimers.init();
- _ss.init('soulsplit');
- mousespeed := 35;
- updateSettingsStuff();
- ss_login;
- startXP := ss_getXPBarTotal();
- startXPString := ss_getXPBarTotalString();
- startTotal := getTotalLevel();
- currentTotal := getTotalLevel();
- if (_trackSkills) then
- begin
- customSkills.update();
- currentSkills.setUp(_track_skills);
- updateStats();
- end;
- if (_pray) then
- begin
- normals.init('normal');
- normals.activatePrayer(_use_prayers);
- end;
- if displayOnlineFriends then
- updateOnlineFriends;
- attackMode := getAttackModeString();
- weaponName := getWeaponName();
- combatLevel := getCombatLevelString();
- addOnTerminate('printGainedLevels');
- end;
- begin
- mouseSpeed := 15;
- // writeln(getWeaponName());
- start();
- //exit;
- repeat
- _ssFight;
- until isKeyDown(113);
- end.
Advertisement
Add Comment
Please, Sign In to add comment