BryceTheCoder Posted December 3, 2015 Share Posted December 3, 2015 Hey everyone! I am starting back to programming bot scripts for oldschool runescape! It is going to be a lot of fun. Here is just a simple basic bone bury & bank script for prayer experience. Source Code: {www.2007Bot.com} {This script's version is: 1.0} {$DEFINE RS07} {$DEFINE OSI_RS07_Color_Anti_Randoms} {$I OSI\OSI.scar} var bankX, bankY, boneX, boneY : Integer; del : LongInt; done : Boolean; bone : TSCARBitmap; procedure ScriptTerminate; begin FreeOSI; end; function BankIsOpen() : Boolean; var x, y : Integer; begin if (FindColor(x, y, 2070783, 172, 12, 468, 33)) then begin result := true; end else begin result := false; end; end; procedure AntiBan; begin MouseSpeed := RandomRange(12, 20); end; procedure ChooseBank; begin ClearDebug; Writeln(''); Writeln('>>> Please click on the bank! <<<'); PickColor(del, bankX, bankY); ClearDebug; Wait(1000); end; procedure ChooseBones; begin ClearDebug; Writeln(''); Writeln('>>> Please click on the bones! <<<'); PickColor(del, boneX, boneY); ClearDebug; Wait(1000); end; procedure OpenBank; begin repeat Mouse(bankX, bankY, 10, 10, false); WaitRR(75, 150); ChooseOption('Bank') WaitRR(350, 900); until BankIsOpen; end; procedure GetBones; var x, y : Integer; begin MMouse(boneX, boneY, 5, 5); WaitRR(5, 100); if UpTextContains('Bones') then begin GetMousePos(x, y); Mouse(x, y, 0, 0, false); WaitRR(10, 300); ChooseOption('All'); Mouse(485, 25, 3, 3, true); WaitRR(50, 200); end else begin done := true; end; end; procedure BuryBones; var i : Integer; begin if done then begin //Don't burry. end else begin SetGameTab(3); for i := 0 to 27 do begin MouseBox(GetInvSlotBounds(i).X1, GetInvSlotBounds(i).Y1, GetInvSlotBounds(i).X2, GetInvSlotBounds(i).Y2, ClickLeft); WaitRR(1750, 2100); end; end; end; begin SetupOSI; bone := TSCARBitmap.Create('deNpjZGBkYGBgBAAAFAAE'); ChooseBank; OpenBank; ChooseBones; GetBones; BuryBones; repeat AntiBan; OpenBank; AntiBan; GetBones; AntiBan; BuryBones; until done; Logout; end. Changelog & Help at: 2007Bot.com Quote Link to comment Share on other sites More sharing options...
Wanted Posted December 3, 2015 Share Posted December 3, 2015 (edited) Some suggestions from someone who's made a lot of scripts like this before and some OSI utilization tips. No need for {$DEFINE OSI_RS07_Color_Anti_Randoms} when Randoms no longer exist in 07 or are now ignorable. Either way OSI doesn't contain a dismiss random function (though that might be a good addition) Would advise against global variables wherever possible. Rather do things like function SomeFunction(var SomeVariable: Integer): Boolean; Then you can pass some variable locally without congesting your script with global variables. Some situations might not allow this and hence where global variable usage comes into play. "BankIsOpen" already has an equivalent in RS07\Core\Bank.scar "BankScreen" though it's possible this function may not be working currently. (if that's the case then I must have the local working version and haven't committed the updated one yet.. though they are very similar with basic number values changed) Anti-ban is a bit insufficient for extended use. OSI already implements a bit of variance for MouseSpeed. Would recommend spacing out longer time intervals of anti ban (like every 2-15 minutes) of other things like hover random skill, hover prayer xp, click random game tab, play with camera/mouse etc. Bank opener is a bit simplistic. Would recommend writing a custom TPA color and OCR based bank finder and opener. Use of X,Y in your script instead of TPoints is entirely personal preference although passing around P: TPoint with the point wrapper functions makes for faster cleaner coding. MouseP(P etc. "SetGameTab(3)... try to use OSI constants from Globals like SetGameTab(Tab_Inv) instead to make code more readable. MouseBox(GetInvBounds etc. is close to full OSI utilization however there are functions like MoueInvItem etc. making coding something like that much easier /cleaner. Bitmap for bone may be sufficient but DTMs, blacklist (counting the black outline pixels) etc. may offer less CPU usage /cleaner /more easily up-datable coding. More user statistics may be a good thing (total XP, bone count, xp/hour, bones/h, tracking etc.) If you wanted to go beyond the realm of quick scripting things like user interface GUI and player arrays with log out breaks etc. auto login and such may be a good addition. As for general script timing it seems you use a lot of arbitrary WaitRR's. Though there's nothing inherently wrong with this, especially with simplicity, it is possible to create finite-breakable-wait-loops that better time the script to be faster or more variable based on responses from the client. Like waiting for the XP drop to appear and looping a wait until it finds it gone out of the inventory (obviously you have to test if that's applicable to the specific situation but you get the gist) there's also functions in Divi\Human\Timing.scar to help with this aspects such as WaitFunc etc. though they may have some limitations they can generally be used when preferable short hand coding is implemented. Your coding skill shows but scripting RS with OSI implementation style is a very specific knowledge. I hope you found this criticism to be useful in future coding with OSI Edited December 3, 2015 by Wanted Quote Link to comment Share on other sites More sharing options...
BryceTheCoder Posted December 4, 2015 Author Share Posted December 4, 2015 (edited) Some suggestions from someone who's made a lot of scripts like this before and some OSI utilization tips. No need for {$DEFINE OSI_RS07_Color_Anti_Randoms} when Randoms no longer exist in 07 or are now ignorable. Either way OSI doesn't contain a dismiss random function (though that might be a good addition) Would advise against global variables wherever possible. Rather do things like function SomeFunction(var SomeVariable: Integer): Boolean; Then you can pass some variable locally without congesting your script with global variables. Some situations might not allow this and hence where global variable usage comes into play. "BankIsOpen" already has an equivalent in RS07\Core\Bank.scar "BankScreen" though it's possible this function may not be working currently. (if that's the case then I must have the local working version and haven't committed the updated one yet.. though they are very similar with basic number values changed) Anti-ban is a bit insufficient for extended use. OSI already implements a bit of variance for MouseSpeed. Would recommend spacing out longer time intervals of anti ban (like every 2-15 minutes) of other things like hover random skill, hover prayer xp, click random game tab, play with camera/mouse etc. Bank opener is a bit simplistic. Would recommend writing a custom TPA color and OCR based bank finder and opener. Use of X,Y in your script instead of TPoints is entirely personal preference although passing around P: TPoint with the point wrapper functions makes for faster cleaner coding. MouseP(P etc. "SetGameTab(3)... try to use OSI constants from Globals like SetGameTab(Tab_Inv) instead to make code more readable. MouseBox(GetInvBounds etc. is close to full OSI utilization however there are functions like MoueInvItem etc. making coding something like that much easier /cleaner. Bitmap for bone may be sufficient but DTMs, blacklist (counting the black outline pixels) etc. may offer less CPU usage /cleaner /more easily up-datable coding. More user statistics may be a good thing (total XP, bone count, xp/hour, bones/h, tracking etc.) If you wanted to go beyond the realm of quick scripting things like user interface GUI and player arrays with log out breaks etc. auto login and such may be a good addition. As for general script timing it seems you use a lot of arbitrary WaitRR's. Though there's nothing inherently wrong with this, especially with simplicity, it is possible to create finite-breakable-wait-loops that better time the script to be faster or more variable based on responses from the client. Like waiting for the XP drop to appear and looping a wait until it finds it gone out of the inventory (obviously you have to test if that's applicable to the specific situation but you get the gist) there's also functions in Divi\Human\Timing.scar to help with this aspects such as WaitFunc etc. though they may have some limitations they can generally be used when preferable short hand coding is implemented. Your coding skill shows but scripting RS with OSI implementation style is a very specific knowledge. I hope you found this criticism to be useful in future coding with OSI Okay, I have implemented & updated a lot of what you said. However, I initially did want to get the bank booth from finding a color + tolerance, but I believe every bank booth has different colors. For example, the lumberidge bank will be way different colors than Al-Kharid banks? Am I correct? Is there a function or methods within OSI I can simple say like "FindBank" or something? EDIT: Also, I am trying to use the WaitFunc, and getting type mismatch compilation error. Is it because it returns a boolean? If so, how do I use this properly then? procedure BuryBones; var i : Integer; begin if done then begin //Don't burry. end else begin SetGameTab(Tab_Inv); for i := 0 to 27 do begin MouseInvItem(i, ClickLeft, true); Inc(buried); //WaitRR(1600, 1900); WaitFunc(UpTextContains('Bury'), false, 900, 1200, 900, 1200); end; end; end; P.S. The BankScreen boolean is very unstable. It might take like 5-10 seconds to realize its true. Can you update it please for more accuracy? Edited December 4, 2015 by BryceTheCoder Quote Link to comment Share on other sites More sharing options...
Wanted Posted December 4, 2015 Share Posted December 4, 2015 (edited) Okay, I have implemented & updated a lot of what you said.However, I initially did want to get the bank booth from finding a color + tolerance, but I believe every bank booth has different colors. For example, the lumberidge bank will be way different colors than Al-Kharid banks? Am I correct? Is there a function or methods within OSI I can simple say like "FindBank" or something? You generally have to have the script user set a location and use a find bank with different locations made into it and have it chose that location, make it work everywhere almost, or have it only work in 1 or certain banks. I've found the best solution is having the script user set a location. EDIT: Also, I am trying to use the WaitFunc, and getting type mismatch compilation error. Is it because it returns a boolean? If so, how do I use this properly then? procedure BuryBones; var i : Integer; begin if done then begin //Don't burry. end else begin SetGameTab(Tab_Inv); for i := 0 to 27 do begin MouseInvItem(i, ClickLeft, true); Inc(buried); //WaitRR(1600, 1900); WaitFunc(UpTextContains('Bury'), false, 900, 1200, 900, 1200); end; end; end; You can't use WaitFunc/Ex with functions that have parameters you'll have to set up a custom loop like T := GetSystemTime + RR(1500, 2500); while ((GetSystemTime < T) and (InvCount(False) = C)) do WaitRR(100, 200); P.S. The BankScreen boolean is very unstable. It might take like 5-10 seconds to realize its true. Can you update it please for more accuracy? https://github.com/OSI1/OfficialSCARInclude/commit/014bf30a835f0785437d6c8fb48ce06f21cd1895 Should be fine now (simplified solution) it's the quick patched version of OSI I've been running private scripts with. Edited December 4, 2015 by Wanted Quote Link to comment Share on other sites More sharing options...
JanisItach Posted June 22 Share Posted June 22 Похудение это тема, которая всегда актуальна для большинства женщин. Многие из нас стремятся к идеальной форме, но довольно частенько сталкиваются с трудностями и препятствиями для этой цели. Однако, с правильным подходом, похудение возможно достижимо без стресса и изнурительных диет. В данной статье мы рассмотрим 10 эффективных стратегий похудения, которые помогут девушкам добиться хотимых результатов и сохранить здоровье. 1. Установите цель Первым шагом к успешному похудению является установление конкретной цели. Определите, сколько килограммов вы хотите сбросить и по какой причине. Цель должна быть близкой к реальности, измеримой и достижимой. 2. Питание Здоровое питание играет ключевую роль в процессе похудения. Сосредотачивайтесь на употреблении натуральных товаров, богатых витаминами и минералами. Избегайте быстрых углеводов и жирной пищи. Стремитесь к балансу макро- и микроэлементов в рационе. 3. Физическая активность Регулярные физические упражнения включая помогут спаливать калории, да и укрепят мышцы, улучшат общее самочувствие и увеличат выносливость. Найдите вид активности, который вам нравится: от йоги до плавания, от бега до танцев. 4. Гидрация Пить достаточное количество воды во время денька включая поможет вам поддерживать уровень воды в организме, да и ускорит метаболизм, понизит аппетит и поможет скинуть излишний вес. 5. Сон Качественный сон играет важную роль в ходе похудения. Пытайтесь спать не менее 7-8 часов в день, чтоб ваш организм мог восстановиться, а метаболизм был в норме. 6. Управление стрессом Стресс может стать препятствием на пути к похудению похудении Найдите методы расслабления и отдыха: медитация, йога, чтение книг, прогулки на свежем воздухе. 7. Каждодневный контроль Ведение дневника пищевых повадок и физической активности поможет вам понять, что вы едите и какое количество калорий потребляете, а также оценить свои успехи. 8. Постепенные изменения Избегайте радикальных диет и раздражающих факторов и ситуаций. Внедряйте изменения в питании и виде жизни равномерно, чтоб они стали стабильными привычками. Quote Link to comment Share on other sites More sharing options...
Michaeldesia Posted September 26 Share Posted September 26 В современном мире технологий Apple остаётся номером один в списке фаворитных и узнаваемых марок. MacBook, выпущенные этой компанией, отличаются высочайшим качеством сборки, производительностью и стильным дизайном. Однако время не стоит на месте, и многие юзеры буть то рано или давольно поздно думают о том, что необходимо обновления своих устройств. В данном случае скупка MacBook становится отличным вариантом тем, кто желает не просто выкинуть свой ветхий ноутбук, да и получить за него мудрую цену. По какой причине стоит сдавать MacBook в скупку? 1. Экономия средств: Новый MacBook может стоить достаточно недешево. Продав свой ветхий ноутбук, вы можете существенно снизить расходы на покупку нового устройства. 2. Экологическая ответственность: Сдавая ноутбук на переработку или повторное внедрение, вы помогаете сократить количество электронных отходов, что положительно сказывается на экологии. 3. Быстрая продажа: Скупка MacBook зачастую проходит быстрее, чем поиск покупателя на рынкее БУ. Вам не надо волноваться о размещении объявлений и безопасной сделке. 4. Проф оценка: Почти многие сервисы, занимающиеся скупкой техники, предлагают профессиональную оценку вашего устройства, что позволяет получить максимальную цену. Как происходит процесс скупки? 1. Оценка состояния: Первым шагом является оценка состояния вашего MacBook. Это может включать проверку функциональности, состояния экрана, клавиатуры, корпуса и других компонент. 2. Определение стоимости: На основе состояния ноутбука, года выпуска и прочих параметров, вам будет предложена стоимость. Многие сервисы предоставляют возможность предварительной онлайн-оценки. 3. Заключение сделки: Если вас устраивает предложенная цена, вы можете заключить сделку. Обычно это происходит быстро, и вам не надо растрачивать время на долгие переговоры. 4. Получение средств: В большинстве случаев после завершения сделки средства выплачиваются сходу, либо на ваши банковские реквизиты, либо наличными. Что необходимо учитывать при сдаче MacBook? 1. Физическое состояние: Чем превосходнее https://skupkamacbook.ru состояние устройства, тем выше его стоимость. Постарайтесь сохранить ноутбук в хорошем состоянии и, елико возможно, очистить его от личной инфы. 2. Модель и год выпуска: Новые и более мощные модели стоят дороже на рынкее БУ. Проверьте, какую цену имеют аналогичные модели. 3. Комплектация: Наличие оригинальной упаковки, зарядного устройства и прочих аксессуаров также может положительно сказаться на итоговой стоимости. 4. Выбор компании: Прежде чем сдать собственный MacBook, исследуйте несколько компаний, занимающихся скупкой техники. Сравните цены и условия, чтоб избрать более прибыльный вариант. Итог Скупка MacBook это не только удобный способ избавиться от устаревшего устройства, да и красивая возможность получить дополнительные средства для покупки нового ноутбука. До этого чем сдать свой MacBook, стоит внимательно оценить его состояние и осмотреть разные варианты скупки. Это поможет вам сделать прибыльное предложение и избежать лишних затрат. Пользуйтесь на ответственно и экономично! Quote Link to comment Share on other sites More sharing options...