SRL Archive - Research & Development Lounge

Great Orb Project development blog


J J

2012-04-07 15:27:44

Newest video, bot doing the whole minigame!
http://www.youtube.com/watch?v=ED9ZwhkLSV8
[youtube]ED9ZwhkLSV8[/youtube]



Development blog videos:
Video #1: Walking around two altars using my script
http://www.youtube.com/watch?v=WzaLJ-4bVDg
[youtube]WzaLJ-4bVDg[/youtube]

Video #2: Walking around every altar at the Great Orb Project using the script
http://www.youtube.com/watch?v=GCuzk_2vQ6I
[youtube]GCuzk_2vQ6I[/youtube]

Video #3: Updated walking by using SPS, DTM's, RadialWalk and much more
Part I: http://www.youtube.com/watch?v=9QVEKwHDKUI
[youtube]9QVEKwHDKUI[/youtube]
Part II: http://www.youtube.com/watch?v=mY0nWNuZ4M8
[youtube]mY0nWNuZ4M8[/youtube]

Video #4: Attracting green orbs @ Air Altar
www.youtube.com/watch?v=4lftEhKE5UU
[youtube]4lftEhKE5UU[/youtube]

Video #5: Joining a team, entering portals, walking, attracting orbs, crafting runes :D
www.youtube.com/watch?v=HSlrtvcVqPg
[youtube]HSlrtvcVqPg[/youtube]

Couple graphics for entertaining purposes :) [LARGE!]
http://img841.imageshack.us/img841/1084/goppicsv2.png
http://img813.imageshack.us/img813/9963/jjsgop.png

Hey! :)

Introduction
My goal is to build a Great Orb Project script. The script procedures should look as human like as possible and I want the script to be as flawless as possible. I decided to make a development blog to keep everything seperated because it's going to be a big project!

Once I manage to make something that suits my desires I will probably use the script to apply as SRL Member and release the whole script to SRL Member+ to avoid leechers abusing the script.

EDIT: 07/05/2012
I'm still unsure what I will be doing with this script once it's completed. It has taken much more time than I expected it to take, however, I am pretty sure that I'm capable of finishing it. Not sure what I'm going to do really…..

Information about the Great Orb Project
Full article here: [X]
Introduction
From: RuneScape Wiki
The Great Orb Project (often shortened to GOP) is a Runecrafting activity located in the Runecrafting Guild. It was released on 12 August 2008. It is a research project which involves two teams gathering different orbs near various Runecrafting altars. To play this game, players must have at least level 50 Runecrafting, and have completed the Rune Mysteries quest.

Objective
From: RuneScape Wiki
The objective of the game is for players to move as many orbs corresponding to their team colour as they can to the altars, as well as keeping orbs of the opposite team away from the altar. The team with the most orbs that has gone into the altar when the timer runs out wins the round.

Rewards
From: RuneScape Wiki
In addition to the essence received after each round, Runecrafting guild tokens will be awarded at the end of the game. For each altar that a team wins, each player on that team receives 100 tokens. For each altar lost, players receive 10 tokens. For each tied altar, players receive 25 tokens. An additional 200 tokens for members, or 150 tokens for free players, are awarded to players on the team that won the most altars. If both teams win the same number of altars, then the majority bonus is split evenly between both teams (100 tokens for members and 75 for free players). Therefore, the maximum number of tokens members can receive is 1,000, while for free players it is 750.


Overview:
Red color means: haven't been working on this yet.
Yellow color means: have been working on this, but it isn't finished yet or accurate enough yet.
Green color means: have been working on this, and it has been finished.

  • Starting the game
    • Detecting a normal wizard
    • [*]Detecting Wizard Acantha
      [*]Detect Wizard Vief
      [*]Detecting the portal to start the game
  • Playing the game
    • Detecting the altars (Air, Mind, Water, Earth, Fire, Body)
    • [*]Detecting orbs
      [*]Detecting barriers
      = Scrapped, inaccurate due to orbs and much more [*]Attract orbs
      [*]Repel orbs
      = Scrapped, hard to determine when you are repelling to the altar and not so useful either.. might work on this later [*]Destroying barriers
      = Scrapped, inaccurate to know which barriers aren't useful around the area [*]Placing barriers
      [*]Crafting runes
      [*]Detecting when kicked
      [*]Failsafes
      [*]Walking around at every altar. Biggest amount of work!
  • Making the mainloop with failsafes
-> Last thing to work on!

I have decided to remove some of the coding, because it could possible be abused already :P


My progress
  • Detecting a normal wizard

Last worked on at 31-04-2012
Detecting a normal wizard to join a random team.
Procedure has been created by using ACA, TPA's, Splitting TPA, Middle TPA, MMouse and some other stuff.

  • Detecting Wizard Acantha

Last worked on at 31-04-2012
Detecting Acantha by using the green color

Detecting Acantha by using the brown color of the wheelchair (third picture)

Procedure has been created by modifying the procedure for finding the wizards.

  • Detect Wizard Vief

Last worked on at 31-04-2012
Procedure has been created by modifying the procedure for finding the wizards.
This is one of the only fully working procedures that I will release to everyone :P Just to show some of the coding really ;)

* Removed the code *

  • Detecting the portal to start the game

Last worked on at 01-05-2012
Detecting the purple portal to enter/start the game.
Detecting the portal outside of GOP:
Detecting text to know when the script has succesfully joined a team

Procedure has been created by using TPA's, Middle TPA, MMouse, ClickMouse and some other things.

  • Detecting the altars (Air, Mind, Water, Earth, Fire, Body)

Last worked on at 31/04/2012
This is probably going to be one of the most time consuming parts. The script must be able to detect each of the above mentioned altars correctly.

Started with simply making a large script to detect it.
procedure Test;
var
X, Y: Integer;

begin
{EARTH ALTAR | Brown color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.07, 1.05);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(3298411, MMX1, MMY1, MMX2, MMY2, 12))+'');
if FindColoredAreaTolerance(X, Y, 3298411, MMX1, MMY1, MMX2, MMY2, 100000, 12) then
WriteLn('We are at the Earth Altar');

{FIRE ALTAR | Yellow color of the river}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.07, 2.64);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(6274014, MMX1, MMY1, MMX2, MMY2, 15))+'');
if FindColoredAreaTolerance(X, Y, 6274014, MMX1, MMY1, MMX2, MMY2, 10000, 15) then
WriteLn('We are at the Fire Altar');

{AIR ALTAR | Green color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.95, 1.87);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(2056526, MMX1, MMY1, MMX2, MMY2, 9))+'');
if FindColoredAreaTolerance(X, Y, 2056526, MMX1, MMY1, MMX2, MMY2, 50000, 9) then
WriteLn('We are at the Air Altar');
if CountColorTolerance(2056526, MMX1, MMY1, MMX2, MMY2, 9) > 10000 then
WriteLn('We have counted the Air Altar color over 10000 times');

{MIND ALTAR | Gray color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(2.78, 0.20);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(8027508, MMX1, MMY1, MMX2, MMY2, 18))+'');
if FindColoredAreaTolerance(X, Y, 8027508, MMX1, MMY1, MMX2, MMY2, 50000, 18) then
WriteLn('We are at the Mind Altar');

{BODY ALTAR | Dark gray color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(2.95, 0.22);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(6645080, MMX1, MMY1, MMX2, MMY2, 17))+'');
if FindColoredAreaTolerance(X, Y, 6645080, MMX1, MMY1, MMX2, MMY2, 50000, 17) then
WriteLn('We are at the Body Altar');

{WATER ALTAR | Blue color of the water}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(3.22, 0.91);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(10129543, MMX1, MMY1, MMX2, MMY2, 5))+'');
if FindColoredAreaTolerance(X, Y, 10129543, MMX1, MMY1, MMX2, MMY2, 10000, 5) then
WriteLn('We are at the Water Altar');
end;

Then I rewrote this into an Array.
procedure Test2;
var
AltarMMCol, AltarMMTol: Array of Integer;
AltarMMHue, AltarMMSat: Array of Extended;
PossibleAltars: Array of String;
i: Integer;

begin;
AltarMMCol := [3298411, 6274014, 2056526, 8027508, 6645080, 10129543];
AltarMMTol := [12, 15, 9, 18, 17, 5];
AltarMMHue := [0.07, 0.07, 0.95, 2.78, 2.95, 3.22];
AltarMMSat := [1.05, 2.64, 1.87, 0.20, 0.22, 0.91];
PossibleAltars := ['Earth', 'Fire', 'Air', 'Mind', 'Body', 'Water'];

for i := 0 to 5 do
begin
ColorToleranceSpeed(2);
SetColorspeed2Modifiers(AltarMMHue[i], AltarMMSat[i]);
if CountColorTolerance(AltarMMCol[i], MMX1, MMY1, MMX2, MMY2, AltarMMTol[i]) > 5000 then
WriteLn('We are at the '+PossibleAltars[i]+' Altar');
end;
end;

It works correctly. I have been modifying it, though.

  • Detecting orbs

Last worked on at 01-05-2012
The script must be able to detect the different types of orbs so it can either attract/repel the orbs or build barriers.
Detecting the green orbs at all areas

Detecting the yellow orbs at all areas

One of the problems with detecting the yellow orbs. Has been fixed now

My setup for getting the colors

Green boxes need to be blocked out when searching for obs
[Working on getting that working, to get the boxes blocked]

Procedure has been made by using CountColorTolerance, TPA's, Middle TPA and some other stuff.

  • Detecting barriers

The script must be able to detect barriers to avoid bot-like behaviour.
Yet to be worked on. One of the last things on my list.

15/05/2012: Decided to scrap this. Might add this later but for now it isn't really useful and they have the same colors as the orbs.. which will result in inaccuracy :\

  • Attract orbs

Last worked on at 01/05/2012
The script must be able to attract orbs to lower the bot-like behaviour and help people that are playing the minigame legitimately. This is also necessary to avoid getting kicked.

I made a procedure that detects the yellow and green orbs at every altar. It will click on the middle and it works fairly well. I still need to modify it a bit to my likings. And for more accurate clicking.

I still have to detect which staff is used, either to attract or to repel.

  • Repel orbs

Last worked on at 01/05/2012
The script must be able to repel orbs to lower the bot-like behaviour and help people that are playing the minigame legitimately. This is also necessary to avoid getting kicked.

This is basicly the same thing as attracting the orbs, but I will need to make a procedure that detects which staff is used.

  • Destroying barriers

The script should be capable to destroy barriers if it's helpful to destroy them.
Has yet to be worked on. One of the last things on my list.

  • Placing barriers

The script should be capable to place barriers if it could possible help the outcome of the minigame.
Should be fairly easy to make, but haven't started on this yet.

Finished this. 14/05/2012
Also destroys them

function MakeBarrier: Boolean;
var
i, X, Y, BarrierGreen, BarrierYellow: Integer;
Barriers: Array of Integer;
BarrierBox: TBox;
PossibleTeam: Array of String;

begin;
PossibleTeam := ['Green', 'Yellow'];
BarrierGreen := DTMFromString('mbQAAAHicY2VgYMhmYmAoAeIEIK4C4nwgfgIUvwbEH4D4LhDfBGItA00gyYSC/zNgAkYsGAwAeAkIJw==');
BarrierYellow := DTMFromString('mbQAAAHicY2VgYDjKxsCwC4h3A/FBIL4AYjMxMKwH4u1AvBmIjwFxYqI5UDUTCv7PgAkYsWAwAAACjgmY');
Barriers := [BarrierGreen, BarrierYellow];

for i:=0 to 1 do
begin
if (JoinedTeam = PossibleTeam[i]) then
begin
if FindDTM(Barriers[i], X, Y, MIX1, MIY1, MIX2, MIY2) then
begin
MMouse(X, Y, 2, 2);
if WaitUpTextMulti(['ake-', 'arri', 'gener'], 250) then
begin
ClickMouse2(1);
end;
end;
BarrierBox := IntToBox(245, 134, 282, 195);
Wait(100 + Random(100));
if PixelShift(Barrierbox, RandomRange(2500, 3000)) > 1000 then
begin
WriteLn('We have succesfully placed a barrier');
FreeDTM(BarrierGreen);
FreeDTM(BarrierYellow);
Antiban;
Result:=True;
Exit;
end else
begin
MouseCircle(MMCX, MMCY, 70, 1);
Wait(100 + Random(200));
repeat
Wait(50 + Random(100));
until(IsMoving=False);
MMouse(X, Y, 2, 2);
Wait(25 + Random(75));
ClickMouse2(1);
FreeDTM(BarrierGreen);
FreeDTM(BarrierYellow);
Antiban;
Result:=True;
Exit;
end;
end;
end;
end;


procedure BarrierEmergency;
var
a, s: Integer;

begin
if FindChatBoxText('low!', 8, clBlack) then
begin
SMART_DrawDotsEx(False, ActionBoxTPA, RGBtoColor(194, 178, 146));
SMART_DrawText(290, 429, UpChars, 'making emergency barriers', clWhite);
if (MakeBarrier=True) then
begin
a:=0;
MarkTime(s);
Wait(1500 + Random(1000));
Mousebox(246, 147, 266, 182, 0);
WaitOptionMulti(['estr', 'estroy', 'Destroy'], 250);
Wait(1500 + Random(1000));
repeat
inc(a);
Antiban;
if MakeBarrier then
begin
Wait(1500 + Random(1000));
Mousebox(246, 147, 266, 182, 0);
WaitOptionMulti(['estr', 'estroy', 'Destroy'], 250);
Wait(1500 + Random(1000));
end;
until (a > RandomRange(2, 5)) or (TimeFromMark(s) > 15000) or (FindChatBoxText('cannot', 8, clBlack))
end;
end;
end;



  • Crafting runes

The scripts should craft runes at an altar of choice after finishing a sub-part of the game.
I can detect all the symbols already, I would just need to detect which altar the person is at. I have a procedure for that. Will need to write an array of results from another procedure, and after that find the middle of a TPA with the colors of the altar symbols.

  • Detect the portal to teleport to the next altar

Last worked on at 31-04-2012
The portal detected.
Portal locations
Script must know at which altar it is at and where to walk to, to go through the portal.
Detecting when a new portal will open inside GOP
Arrow Symbol

Detecting the arrow symbol to know where the altar is. Made this happen by using FindDeformedBitMap in and custom accuracy etc. pretty proud of the procedure to find the flashing arrow.

Procedure has been finished.

  • Walking around, etc.

LAST WORKED ON AT 01/05/2012
The script must be capable of walking around to points where it can perform helpful actions.

I've decided to map out the whole area myself to get a custom SPS Map.

After a couple hours of merging pictures this is the result:

Merging pictures together for a custom SPS map

Where the script should be able walk to from any position
Area is roughly the same for every altar.

Code to test it
program Test;
{$DEFINE SMART}
{$i srl/srl.simba}
{$i sps/sps.simba}

procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;

with Players[0] do
begin
Name := '';
Pass := '';
Pin := '';
Active := True;
end;
end;

procedure SetupLogin;
begin
ClearDebug;
Smart_Server := 10;
Smart_Members := False;
Smart_Signed := True;
Smart_SuperDetail := False;
SetupSRL;
DeclarePlayers;
LoginPlayer;
Wait(1000 + Random(3000));
ClickNorth(0);
end;

procedure Test;
var
MyPath:TPointArray;
MyPos:TPoint;

begin
SPS_Setup(RUNESCAPE_SURFACE, ['0_7RC']);
//myPath := [Point(75, 2503), Point(87, 2491), Point(107, 2495)];
//SPS_WalkPath(MyPath);

MyPos:=SPS_GetMyPos;
Writeln('My position is x: '+inttostr(MyPos.x)+' y: '+inttostr(MyPos.y));
if MyPos = Point(91, 2503) then
begin
WriteLn('We are on the correct spot!');
end else
end;

begin
SetUpLogin;
Test;
end.

Fire altar
My position is x: 419 y: -325
Earth altar
My position is x: 423 y: -193
Mind altar
My position is x: 167 y: 23

To be continued when I have more time! Excited about this.

24/04/2012
I've slightly updated the map with larger/higher quality pictures and SPS seems to work better now. New code
procedure Test;
var
MyPos:TPoint;
AirAltarBox: TBox;

begin
SPS_Setup(RUNESCAPE_SURFACE, ['0_5']);
//AirAltarBox := IntToBox(395, 2379, 411, 2399);
AirAltarBox := IntToBox(395, 2363, 415, 2379);
MyPos:=SPS_GetMyPos;
Writeln('My position is x: '+inttostr(MyPos.x)+' y: '+inttostr(MyPos.y));
if PointInBox(MyPos, AirAltarBox) then
WriteLn('We are standing on the correct place!');
if MyPos = Point(91, 2503) then
WriteLn('We are on the Point(91, 2503)');
end;

It returns nice values for the air altar which are all above zero. Now I've been working on some code to let the script test if I'm standing maximum of one square away from the altar. It's included in the test script above. To make sure I pick the right box co-ords I will be testing 6 different worlds to get the correct co-ords:

Air altar co-ords
395, 2379
411, 2399

395, 2363
415, 2379

395, 2383
411, 2399

395, 2383
411, 2399

391, 2383
411, 2395

395, 2379
411, 2399

Taking the most common/viable numbers:
(395, 2383, 411, 2399)

I've been testing SPS quite a lot and it works well for the air altar. However, it doesn't work too well at the mind altar because it detects the area around the altar all as the same co-ords. This is because SPS isn't 100% accurate when a lot of the colors are nearly identical. So I've been brainstorming to find a solution and I'm proud to present my new procedure that will walk to the Mind Altar from any spot around the map!

* Removed the code *

Been working on the earth altar one aswell. This one was harder because all of the colors are nearly the same. So radialwalk won't work as well as on the other procedures :P

* Removed the code *

Managed to get it working for every spot by using TPA's to find the way to the altar! Was pretty hard to find the right colors, but it works now.

After some testing I found out that this still wasn't accurate enough. I'm still working on getting more accurate walking, as it's one of the most important things in this script.

07/05/2012
I put the SPS maps apart and they are working fairly now.. Oh well, the other way is a nice failsafe!
The walking is really an extreme amount of work. There are six altars and this is only a very small part of each procedure to walk around
SPS_Setup(RUNESCAPE_SURFACE, ['99_2']);
MyPos := SPS_GetMyPos;
Writeln('My position is x: '+IntToStr(MyPos.x)+' y: '+IntToStr(MyPos.y)+'');

MindM := IntToBox(39839, 1023, 39871, 1051);
MindN := IntToBox(39831, 983, 39871, 1019);
MindNE := IntToBox(39871, 991, 39995, 1027);
MindE := IntToBox(39879, 1023, 39899, 1051);
MindEF := IntToBox(39903, 1035, 39923, 1057);
MindSE := IntToBox(39875, 1047, 39895, 1079);
MindSEF := IntToBox(39899, 1075, 39919, 1091);
MindSEFF := IntToBox(39871, 1103, 39887, 1127);
MindS := IntToBox(39843, 1059, 39863, 1091);
MindSFI := IntToBox(39859, 1095, 39875, 1127);
MindSFII := IntToBox(39827, 1095, 39855, 1127);
MindSW := IntToBox(39823, 1047, 39839, 1075);
MindSWF := IntToBox(39779, 1063, 39807, 1079);
MindW := IntToBox(39815, 1023, 39839, 1055);
MindWM := IntToBox(39775, 1027, 39807, 1051);
MindWF := IntToBox(39755, 1003, 39775, 1067);
MindNWFI := IntToBox(39779, 987, 39807, 1007);
MindNWFII := IntToBox(39771, 1011, 39807, 1035);
MindNW := IntToBox(39807, 983, 39831, 1015);

MindPositions := [MindM, MindN, MindNE, MindE, MindEF, MindSE, MindSEF, MindSEFF, MindS, MindSFI,
MindSFII, MindSW, MindSWF, MindW, MindWM, MindWF, MindNWFI, MindNWFII, MindNW];

MindPositionsTPA := TPAFromBox(MindM) + TPAFromBox(MindN) + TPAFRomBox(MindNE) + TPAFRomBox(MindE) + TPAFromBox(MindEF) +
TPAFRomBox(MindSE) + TPAFRomBox(MindSEF) + TPAFRomBox(MindSEFF) + TPAFRomBox(MindS) + TPAFRomBox(MindSFI) +
TPAFRomBox(MindSFII) + TPAFRomBox(MindSW) + TPAFromBox(MindSWF) + TPAFRomBox(MindW) + TPAFRomBox(MindWM) +
TPAFRomBox(MindWF) + TPAFRomBox(MindNWFI) + TPAFRomBox(MindNWFII) + TPAFRomBox(MindNW);

Will take a lot of time to finish everything.


  • Making the mainloop with failsafes
Been working on this, will post it later.
10/05/2012: Finished the mainloop, works well.

15/05/2012: Mainloop still needs some editing. It works well if nothing goes wrong, but it's hard to add failsafes when the player gets kicked. You get kicked when your activity or when there aren't enough players to continue. Need to be able to determine why the player got kicked!

Thanks for reading through the whole post! If you have any tips, be sure to leave a comment and let me know! :)

Sin

2012-04-07 15:29:17

Best of luck!

Le Jingle

2012-04-07 15:35:28

I don't know if you'd consider this a tip or a suggestion, but using runecrafting ess pouches can help in holding more essence. Could help possibly in less times clicking the altar to RC I suppose.

Joe

2012-04-07 15:39:23

If you need any help please PM me, I want to be a part of this :) Would love to test too.

J J

2012-04-07 15:45:20

From: Sin
Best of luck!

Thanks Sin :)

From: Le Jingle
I don't know if you'd consider this a tip or a suggestion, but using runecrafting ess pouches can help in holding more essence. Could help possibly in less times clicking the altar to RC I suppose.

I would consider that as a tip :P I will be working on a f2p version of this script first. Once that is done I will make my test account p2p and add a couple p2p features such as two more altars, runecrafting pouches and some other things :) Thanks.

From: JOEbot
If you need any help please PM me, I want to be a part of this :) Would love to test too.

Will do :)

Just finished another small part to detect Wizard Acantha to join the green team. Added the part to the blog aswell. Will be going out now & start working on Wizard Vief and some other stuff tomorrow I think. We'll see!

J J

2012-04-08 17:18:07

Worked on this today.

  • Detect the portal to teleport to the next altar
Last worked on at 08-04-2012
Just started my first two .. well actually 1,5 games as the game ended because some people rage quitted. Anyways, detecting the portal is fairly simple as there are no other purple colors around. Trying my best to get every portal at every altar detected using one auto color aid. And it turned out that it's possible!


Pretty happy with that. I'm not done though, will play a couple more games to get even more colors in there. Once that's done I can make a middle TPA function to click in the middle. Considering the object is around 40 px height and 20 px width I can make the MMouse pretty random once I can figure out the middle. I can see myself using MMouse(MiddlePortal.X, MiddlePortal.Y, 10, 20) to stay under that radar.
Will work on this again!

Portal in game, just did 1,5 game but it detects nearly everything of the portal already. Love auto color aid!
Color 11946163
Tolerance 24
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.38, 1.51);

catanado15

2012-04-09 12:55:42

gogogogo, that's the script to help all of f2p players to make some cash :D

Joe

2012-04-09 13:01:00

Your really getting along on this script, keep up the good work!

pigggy

2012-04-09 13:08:43

i…… love you :O ( not in a homosexual way )

putonajonny

2012-04-09 18:17:05

From: J J

  • Detecting the altars (Air, Mind, Water, Earth, Fire, Body)
This is probably going to be one of the most time consuming parts. The script must be able to detect each of the above mentioned altars correctly.


I'll do this for you if you want :)

Edit:
Are you planning on supporting p2p alters?

I don't have a p2p account so this is all I could get for now:


Const
Area_Air = 'Air';
Area_Earth = 'Earth';
Area_Water = 'Water';
Area_Fire = 'Fire';
Area_Mind = 'Mind';
Area_Body = 'Body';
Area_Chaos = 'Chaos';
Area_Nature = 'Nature';

Function MaxArray(A : array of Integer; Var Pos : integer) : integer;
Var
i : integer;
begin
Result := MaxA(A);
for i := low(A) to high(A) do
if(Result = A[i])then
begin
Pos := i;
break;
end;
end;

Function GetAlter : String; //This is the function that actually returns the alter
Var
P, i : integer;
AlterColours, Counts : array of integer;
begin

AlterColours := [2450544, 2706787, 2589310, 3688535, 8487814, 7369098]
SetArrayLength(Counts, 6);

for i := low(Counts) to high(Counts) do
Counts[i] := CountColorTolerance(AlterColours[i], MMCX - 30, MMCY - 30, MMCX + 30, MMCY + 30, 15);

MaxArray(Counts, P);

Case P of
0 : Result := Area_Air;
1 : Result := Area_Earth;
2 : Result := Area_Water;
3 : Result := Area_Fire;
4 : Result := Area_Mind;
5 : Result := Area_Body;
end;

end;

J J

2012-04-10 10:52:54

From: catanado15
gogogogo, that's the script to help all of f2p players to make some cash :D

Yes, if you become a SRL Member that is :)

From: JOEbot
Your really getting along on this script, keep up the good work!

Thanks, appreciate it and it keeps me motivated :P

From: pigggy
i…… love you :O ( not in a homosexual way )

Thanks I guess :P

From: putonajonny
I'll do this for you if you want :)

Edit:
Are you planning on supporting p2p alters?

I don't have a p2p account so this is all I could get for now:


Const
Area_Air = 'Air';
Area_Earth = 'Earth';
Area_Water = 'Water';
Area_Fire = 'Fire';
Area_Mind = 'Mind';
Area_Body = 'Body';
Area_Chaos = 'Chaos';
Area_Nature = 'Nature';

Function MaxArray(A : array of Integer; Var Pos : integer) : integer;
Var
i : integer;
begin
Result := MaxA(A);
for i := low(A) to high(A) do
if(Result = A[i])then
begin
Pos := i;
break;
end;
end;

Function GetAlter : String; //This is the function that actually returns the alter
Var
P, i : integer;
AlterColours, Counts : array of integer;
begin

AlterColours := [2450544, 2706787, 2589310, 3688535, 8487814, 7369098]
SetArrayLength(Counts, 6);

for i := low(Counts) to high(Counts) do
Counts[i] := CountColorTolerance(AlterColours[i], MMCX - 30, MMCY - 30, MMCX + 30, MMCY + 30, 15);

MaxArray(Counts, P);

Case P of
0 : Result := Area_Air;
1 : Result := Area_Earth;
2 : Result := Area_Water;
3 : Result := Area_Fire;
4 : Result := Area_Mind;
5 : Result := Area_Body;
end;

end;

Thanks for your effort, +rep ;)
For your questions about p2p, the development will take pretty long because I'm aiming for a flawless or atleast near-flawless script. I currently have one p2p account, my summoning tank, that has 3 runecrafting (2x small xp lamp runecrafing haha) so it can't access the GOP anyways. My other account is just a basic main that has 50 runecrafting, I have some other accounts but those are all <50 runecrafting, and also f2p. Once I make the script work flawless/near-flawless for f2p I will probably add p2p support aswell.

That means, two new altars and the use of runecrafting pouches. Which is interesting, because I have no idea if the pouches will degrade during the minigame, and if they do I would have to work around that haha. First part is f2p though.

I'm not 100% sure what your script part does, but I'll try to explain it what I think it does.
Constants are simply declared so that you can use them in the other functions/procedures.
Function MaxArray is an array of integer and positions.
Function Getalter has an array of 6 altar colors (you misspelled that I think :P).
Those 6 colors are probably (in chronological order): air, earth, water, fire, mind, body. I will check this later to see if the color fit. I think you took the colors of the rune colors on the altar, the little icons.
Then you have an array of the amount of counts and 6 colors.
For the count, low to high it will count the colortolerance of the altercolours.
Not sure what this means:
MMCX-30
MMCY-30
MMCX+30
MMCY+30
And a tolerance of 15.

Then there is a case which returns the result of which altar you are currently add.

Did I get that right?

I also just google'd MMCX and I think that is the minimap. Not sure if you took the altar colors or just some common color that appears on the minimap.

Let me know please :P
I will probably be working on finishing the portal part later today. Going to study for science first and after that I'll probably have to eat & after that I'm always going to the gym on tuesday. After that I got my free time though :D I will finish the color picking & make a middle TPA function to click the portal. Will also make a failsafe by using uptext and some other stuff :)

putonajonny

2012-04-10 13:44:25

From: J J

Thanks for your effort, +rep ;)
For your questions about p2p, the development will take pretty long because I'm aiming for a flawless or atleast near-flawless script. I currently have one p2p account, my summoning tank, that has 3 runecrafting (2x small xp lamp runecrafing haha) so it can't access the GOP anyways. My other account is just a basic main that has 50 runecrafting, I have some other accounts but those are all <50 runecrafting, and also f2p. Once I make the script work flawless/near-flawless for f2p I will probably add p2p support aswell.

That means, two new altars and the use of runecrafting pouches. Which is interesting, because I have no idea if the pouches will degrade during the minigame, and if they do I would have to work around that haha. First part is f2p though.

I'm not 100% sure what your script part does, but I'll try to explain it what I think it does.
Constants are simply declared so that you can use them in the other functions/procedures.
Function MaxArray is an array of integer and positions.
Function Getalter has an array of 6 altar colors (you misspelled that I think :P).
Those 6 colors are probably (in chronological order): air, earth, water, fire, mind, body. I will check this later to see if the color fit. I think you took the colors of the rune colors on the altar, the little icons.
Then you have an array of the amount of counts and 6 colors.
For the count, low to high it will count the colortolerance of the altercolours.
Not sure what this means:
MMCX-30
MMCY-30
MMCX+30
MMCY+30
And a tolerance of 15.

Then there is a case which returns the result of which altar you are currently add.

Did I get that right?

I also just google'd MMCX and I think that is the minimap. Not sure if you took the altar colors or just some common color that appears on the minimap.

Let me know please :P
I will probably be working on finishing the portal part later today. Going to study for science first and after that I'll probably have to eat & after that I'm always going to the gym on tuesday. After that I got my free time though :D I will finish the color picking & make a middle TPA function to click the portal. Will also make a failsafe by using uptext and some other stuff :)


Thanks very much for the rep, I will talk you through it:
Function GetAlter : String;  
Var
P, i : integer;
AlterColours, Counts : array of integer;
begin

AlterColours := [2450544, 2706787, 2589310, 3688535, 8487814, 7369098]; //These are colours that appear on the minimap for each of the alters in this order: Air, Earth, Water, Fire, Mind, Body
SetArrayLength(Counts, 6);

for i := low(Counts) to high(Counts) do
Counts[i] := CountColorTolerance(AlterColours[i], MMCX - 30, MMCY - 30, MMCX + 30, MMCY + 30, 15); //for each of these colours it counts how many times it appears in a box in the minimap defined by MMCX - 30, MMCY - 30, MMCX + 30, MMCY + 30, where MMCX is the x co-ordinate of the centre of the minimap and MMCY is the y co-ordinate of the centre of the minimap

MaxArray(Counts, P); //It then works out which is the most abundant and stores it in P

Case P of //Then depending on P it returns the alter that colour corresponds to
0 : Result := Area_Air;
1 : Result := Area_Earth;
2 : Result := Area_Water;
3 : Result := Area_Fire;
4 : Result := Area_Mind;
5 : Result := Area_Body;
end;

end; //I thought that checking the minimap would be better since the alter might not always be visible

If you don't understand anything let me know, what do you think about the actual mechanics of playing the game, run this and see what you think:
program new;

{.include SRL/SRL.simba}

Var
CurrentAction : String;
TimeToDoAction, Swapped : integer;

Const
Action_FarFromAlter = 'Far From Alter'; //Standing far from an alter repelling your orbs, attracting other teams
Action_NearAlter = 'Near Alter'; //Standing close to an alter attracting your orbs, repelling other teams
Action_CreateBarriers = 'Create Barriers';
Action_DestroyBarriers = 'Destroy Barriers';

Procedure ChooseAction(ForceSwap : Boolean);
begin
if((TimeFromMark(Swapped) < TimeToDoAction) and (CurrentAction <> '') and (not ForceSwap))then
exit;
Case Random(10) of
0..3 : CurrentAction := Action_FarFromAlter;
4..7 : CurrentAction := Action_NearAlter;
8 : CurrentAction := Action_CreateBarriers;
9 : CurrentAction := Action_DestroyBarriers;
end;

TimeToDoAction := 15000 + Random(105000); //Does action for 15 seconds to 2 minutes
MarkTime(Swapped);

WriteLn('Doing "'+CurrentAction+'" for '+IntToStr(TimeToDoAction / 1000)+' seconds.');

end;

Procedure CreateBarriers;
begin
//Do this
end;

Procedure DestroyBarriers;
begin
//Do this
end;

Procedure FarFromAlter;
begin
//Do this
end;

Procedure NearAlter;
begin
//Do this
end;

Procedure DoAction;
begin
Case CurrentAction of
Action_CreateBarriers : CreateBarriers;
Action_DestroyBarriers : DestroyBarriers;
Action_FarFromAlter : FarFromAlter;
Action_NearAlter : NearAlter;
end;
end;

Procedure Loop;
begin
Repeat
ChooseAction(False);
DoAction;
Until(false);
end;

begin
Loop;
end.

J J

2012-04-10 16:17:05

I see, MMCX stands for Mini Map Center X and you simply add and divide a couple pixels to make a box :) I understand it now :) I've got some spare time now so I'll give the last simba code a test and finish my portal finding :P

EDIT:
This procedure enters the portal in game, it works for all area's :) I have loads of more information but my parents are raging because it's late for a school day, will add it tomorrow.

program Test;
{$i srl/srl.simba}

procedure EnterPortalInGame;
var
arP: TPointArray;
ararP: T2DPointArray;
i, arL, X, Y: Integer;
P: TPoint;

begin
{ Detects the colors of the portal }
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.30, 1.34);
FindColorsSpiralTolerance(X, Y, arP, 12341400, MSX1, MSY1, MSX2, MSY2, 26);
SortTPAFrom(arP, Point(MSCX, MSCY));
ararP := SplitTPAEx(arP, 200, 200);
arL := High(ararP);
for i := 0 to arL do
begin
{ Enters the portal }
P := MiddleTPA(ararP[i]);
MMouse(P.x, P.y, 5, 5);
if WaitUpTextMulti(['ortal', 'nter'], 250) then
GetMousePos(X, Y);
//Mouse(X, Y, 0, 0, 1);
end;
end;


begin
SetUpSRL;
ActivateClient;
EnterPortalInGame;
end.

putonajonny

2012-04-10 17:37:41

Just so you know that latest code doesn't actually do anything, it just divides up time during the game doing different tasks

J J

2012-04-13 11:05:47

From: putonajonny
Just so you know that latest code doesn't actually do anything, it just divides up time during the game doing different tasks

Yes, I did realise that. Re-worked some parts of the altar finder to get some results. Will work on this script again this weekend :D Probably right now.

J J

2012-04-13 13:55:46

Been working on it! This is also some progress from Tuesday!

Purple portal inside the game to continue to the next altar
I've been working pretty hard to get the portal inside right. I've now succeeded to get the correct colors to detect the portal every time, at each altar.
I still have to work around detecting players. If someone on your team has pink/purple clothes there is a chance they get detected as seen in pic #2.

ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.30, 1.34);
Color of the purple portal ingame = 12341400
Tolerance = 26


Green orbs in game
I've also been working on detecting the green orbs ingame.
I came across a couple problems, when I used to many colors it would start detecting the grass and tree's around the altar. So I decided to stick with less colors which is the reason that they aren't detected 100%. But I figured this would be the best solution!

ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.48, 1.32);
Green orb color = 4240206
Tolerance = 18


Purple portal to start the game
Also been working on the purple portal. But this time, to start the game.
Same problem as with the portal in game, it might detect players at portal.
Can probably be fixed by finding atleast an X amount of colors.
And obviously uptext, but I would rather have it find it flawless without checking for uptext.

ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.45, 1.09);
Portal color = 11426731
Tolerance = 25


The portal is open
Waiting for portal to open
Draw = 405 tokens

J J

2012-04-16 13:29:06

Been working on some graphics

http://img813.imageshack.us/img813/9963/jjsgop.png

http://img841.imageshack.us/img841/1084/goppicsv2.png

momotron

2012-04-17 20:48:50

Good luck with this, I'd get that RC amour just for bragging rights ;)

J J

2012-04-18 13:57:02

From: momotron
Good luck with this, I'd get that RC amour just for bragging rights ;)

The armour is actually pretty good haha, and it looks good. Thanks :P

Been busy with learning SPS and I've made my own custom map for the air altar @ GOP now. And it finally works.

program Test;
{$DEFINE SMART}
{$i srl/srl.simba}
{$i sps/sps.simba}

procedure DeclarePlayers;
begin
HowManyPlayers := 1;
NumberOfPlayers(HowManyPlayers);
CurrentPlayer := 0;

with Players[0] do
begin
Name := '';
Pass := '';
Pin := '';
Active := True;
end;
end;

procedure SetupLogin;
begin
ClearDebug;
Smart_Server := 10;
Smart_Members := False;
Smart_Signed := True;
Smart_SuperDetail := False;
SetupSRL;
DeclarePlayers;
LoginPlayer;
Wait(1000 + Random(3000));
ClickNorth(0);
end;

procedure Test;
var
MyPath:TPointArray;
MyPos:TPoint;

begin
SPS_Setup(RUNESCAPE_SURFACE, ['0_6']);
myPath := [Point(75, 2503), Point(87, 2491), Point(107, 2495)];
SPS_WalkPath(MyPath);

MyPos:=SPS_GetMyPos;
Writeln('My position is x: '+inttostr(MyPos.x)+' y: '+inttostr(MyPos.y));
if MyPos = Point(91, 2503) then
begin
WriteLn('We are on the correct spot!');
end else
end;

begin
SetUpLogin;
Test;
end.

J J

2012-04-24 10:15:55

I've been working on it again :)

24/04/2012
I've slightly updated the map with larger/higher quality pictures and SPS seems to work better now. New code
procedure Test;
var
MyPos:TPoint;
AirAltarBox: TBox;

begin
SPS_Setup(RUNESCAPE_SURFACE, ['0_5']);
//AirAltarBox := IntToBox(395, 2379, 411, 2399);
AirAltarBox := IntToBox(395, 2363, 415, 2379);
MyPos:=SPS_GetMyPos;
Writeln('My position is x: '+inttostr(MyPos.x)+' y: '+inttostr(MyPos.y));
if PointInBox(MyPos, AirAltarBox) then
WriteLn('We are standing on the correct place!');
if MyPos = Point(91, 2503) then
WriteLn('We are on the Point(91, 2503)');
end;

It returns nice values for the air altar which are all above zero. Now I've been working on some code to let the script test if I'm standing maximum of one square away from the altar. It's included in the test script above. To make sure I pick the right box co-ords I will be testing 6 different worlds to get the correct co-ords:

Air altar co-ords
395, 2379
411, 2399

395, 2363
415, 2379

395, 2383
411, 2399

395, 2383
411, 2399

391, 2383
411, 2395

395, 2379
411, 2399

Taking the most common/viable numbers:
(395, 2383, 411, 2399)

J J

2012-04-25 09:37:47

After some brainstorming I've came up with this method to find the Mind altar from every location at the mind altar map.. :D

Proud to present it:
procedure FindTheMindAltar;
var
MindAltarDTM, X, Y: Integer;
aFound: Extended;

begin
//if not(FindColorSpiralTolerance(X, Y, 6249310, MSX1, MSY1, MSX2, MSY2, 10)) then
if not(FindColoredAreaTolerance(X, Y, 6249310, MSX1, MSY1, MSX2, MSY2, 350, 2)) then
begin
MindAltarDTM := DTMFromString('mwQAAAHic42RgYGBmZ2BgB+IvbAwMbEBaFIj/AtnfgVgIyBYEYgkmBgZOIBYHYg0gFgNiLiBWBGIFIOYF4q62FobaqnK8+D/QPlYiMBMBDAcAPz4Slg==');
if not(FindDTMRotated(MindAltarDTM, X, Y, MMX1, MMY1, MMX2, MMY2, -Pi/4, Pi/4, Pi/60, aFound)) then
begin
RadialWalkTolerance(9474711, 0, 359, 75, 5, 5, 5);
if FindDTMRotated(MindAltarDTM, X, Y, MMX1, MMY1, MMX2, MMY2, -Pi/4, Pi/4, Pi/60, aFound) then
begin
WriteLn('We have found the MindAltarDTM on the minimap this time');
MMouse(X, Y, 2, 2);
Wait(25 + Random(125));
ClickMouse2(1);
end else
begin
RadialWalkTolerance(9474711, 0, 359, 25, 5, 5, 5);
if FindDTMRotated(MindAltarDTM, X, Y, MMX1, MMY1, MMX2, MMY2, -Pi/4, Pi/4, Pi/60, aFound) then
begin
WriteLn('We have found the MindAltarDTM on the minimap this time');
MMouse(X, Y, 2, 2);
Wait(25 + Random(125));
ClickMouse2(1);
end else
begin
WriteLn('Something has went wrong, not able to navigate to the Mind Altar');
end;
end;
end else
begin
WriteLn('We have found the MindAltarDTM on the minimap');
MMouse(X, Y, 2, 2);
Wait(25 + Random(125));
ClickMouse2(1);
end;
FreeDTM(MindAltarDTM);
end else
begin
WriteLn('We can see the mind altar on our main screen!');
end;
end;

litoris

2012-04-25 11:01:13

Hey, the guy who came up with the leecher script idea here :P

It seems like you have had a lot of progress. I think you could try getting the yellow orb color from yellow barriers. They have the same color with the orbs but they occasionally have the solid yellow color when they are rotating. I think you could use that with a large threshold to detect the yellow orbs.

I don't have any tips with the altar staff because I know nothing about SPS.
Keep up the good work!

CephaXz

2012-04-26 06:40:30

Very interesting! Don't think you're gonna release it publicly, but you might just add some anti-leech in the script and release it. Because I'm very interested on how you script it. Good work there!

ssshhhaaa

2012-04-26 08:03:04

Your a pro at scripting :) i want you as my scripting mentor now :]

J J

2012-04-26 09:20:07

From: litoris
Hey, the guy who came up with the leecher script idea here :P

It seems like you have had a lot of progress. I think you could try getting the yellow orb color from yellow barriers. They have the same color with the orbs but they occasionally have the solid yellow color when they are rotating. I think you could use that with a large threshold to detect the yellow orbs.

I don't have any tips with the altar staff because I know nothing about SPS.
Keep up the good work!

Well not really a leecher script idea, it was well written :P I'm making pretty good/stable progress so far. I have some troubles with getting the walking right, but yeah, it is hard. I want the script to be able to return the altar from any position around the altar. Some colors around the altars are just the same, so I've made my own SPS maps. However, they aren't working at all times because even SPS has troubles because the colors are nearly the same. But I've managed to get it working for three altars now :)

The earth altar has been giving me some trouble. I had it working, but when I came back from eating and hopped to a new world it didn't work anymore because the colors changed slightly. I couldn't find any good colors that worked on any world.. but I've written a neat procedure now that works flawless.

[procedure]procedure Test;
var
MyPos, EarthAltarPos: TPoint;

begin
SPS_Setup(RUNESCAPE_SURFACE, ['0_8']);
MyPos:=SPS_GetMyPos;
Writeln('My position is x: '+inttostr(MyPos.x)+' y: '+inttostr(MyPos.y));
EarthAltarPos := Point(RandomRange(223, 247), RandomRange(3415, 3431));
SPS_BlindWalk(EarthAltarPos);
end; [/procedure]


From: CephaXz
Very interesting! Don't think you're gonna release it publicly, but you might just add some anti-leech in the script and release it. Because I'm very interested on how you script it. Good work there!

I will probably use this to apply as a SRL Member, in the future. I might release it without anti-leech there, but it will probably add loads, even at the SRL Members section.. who knows though. I will probably release a Lite version to public, but it will also have anti-leech. Thanks :P

From: ssshhhaaa
Your a pro at scripting :) i want you as my scripting mentor now :]

Haha thanks. If you have any questions you can add me on MSN or give me a PM ;)

EDIT: I've finished the locating for all of the altars! Been working on the functions that Putonajonny have made me. I've figured it out and it returns the area now.

function MaxArray(A : array of Integer; Var Pos : integer) : integer;
var
i : integer;
begin
Result := MaxA(A);
for i := low(A) to high(A) do
if(Result = A[i])then
begin
Pos := i;
break;
end;
end;

function GetAlter: String; //This is the function that actually returns the alter
var
P, i : integer;
AlterColours, Counts : array of integer;
begin

AlterColours := [2450544, 2706787, 2589310, 3688535, 8487814, 7369098]
SetArrayLength(Counts, 6);

for i := low(Counts) to high(Counts) do
Counts[i] := CountColorTolerance(AlterColours[i], MMCX - 30, MMCY - 30, MMCX + 30, MMCY + 30, 15);

MaxArray(Counts, P);

case P of
0 : Result := Area_Air;
1 : Result := Area_Earth;
2 : Result := Area_Water;
3 : Result := Area_Fire;
4 : Result := Area_Mind;
5 : Result := Area_Body;
end;
end;

procedure Test2;
var
PossibleArea: Array [0..5] of String;
i: Integer;

begin
PossibleArea[0]:=Area_Air;
PossibleArea[1]:=Area_Earth;
PossibleArea[2]:=Area_Water;
PossibleArea[3]:=Area_Fire;
PossibleArea[4]:=Area_Mind;
PossibleArea[5]:=Area_Body;

begin
for i:= 0 to 5 do
begin
if GetAlter=PossibleArea[i] then
WriteLn('Our location is '+PossibleArea[i]+'')
end;
end;
end;

procedure Test3;
begin
if GetAlter=Area_Mind then
WriteLn('Succesful test');
end;

BuckWild

2012-04-26 16:31:55

This looks complex and simply amazing. Keep up the good work!

J J

2012-04-27 17:46:41

From: BuckWild
This looks complex and simply amazing. Keep up the good work!

It's pretty complex yeah, thanks for the support

Been busy rewriting some procedures to get more accurate results
procedure Test;
var
X, Y: Integer;

begin
{EARTH ALTAR | Brown color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.07, 1.05);
if FindColoredAreaTolerance(X, Y, 3298411, MMX1, MMY1, MMX2, MMY2, 100000, 12) then
WriteLn('We are at the Earth Altar');

{FIRE ALTAR | Yellow color of the river}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.07, 2.64);
if FindColoredAreaTolerance(X, Y, 6274014, MMX1, MMY1, MMX2, MMY2, 10000, 15) then
WriteLn('We are at the Fire Altar');

{AIR ALTAR | All Colors of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.22, 0.36);
if FindColoredAreaTolerance(X, Y, 3560798, MMX1, MMY1, MMX2, MMY2, 100000, 14) then
WriteLn('We are at the Air Altar');

{MIND ALTAR | Gray Color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(2.78, 0.20);
if FindColoredAreaTolerance(X, Y, 8027508, MMX1, MMY1, MMX2, MMY2, 500000, 18) then
WriteLn('We are at the Mind Altar');

{BODY ALTAR | Dark Gray Color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(2.95, 0.22);
if FindColoredAreaTolerance(X, Y, 6645080, MMX1, MMY1, MMX2, MMY2, 100000, 17) then
WriteLn('We are at the Body Altar');

{WATER ALTAR | Blue Color of the water}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(3.22, 0.91);
if FindColoredAreaTolerance(X, Y, 10129543, MMX1, MMY1, MMX2, MMY2, 10000, 5) then
WriteLn('We are at the Water Altar');
end;

Should return the correct altar that you are at. If anyone is willing to test let me know. Will rewrite it to an array tomorrow.

Joe

2012-04-27 19:45:10

Some of the walking alone will get you places on a membership! I should have done this… maybe sometime

punkd

2012-04-27 19:56:18

Support JJ! Let me know if I could be of any help!

Joe

2012-04-27 20:02:27

From: punkd
Support JJ! Let me know if I could be of any help!


Lol I'm 3rd comment on the thread for this…

J J

2012-04-28 13:03:23

From: JOEbot
Some of the walking alone will get you places on a membership! I should have done this… maybe sometime

Yeah it could possibly already get me membership :P You could be the first to make a script for the new runecrafting method. It should probably come out today, or atleast within a few days I believe. It will be extremely hard though.

From: punkd
Support JJ! Let me know if I could be of any help!

Thanks, and I will do!

From: JOEbot
Lol I'm 3rd comment on the thread for this…

#1 Poster, after me haha. I appreciate it ;)

Been working on detecting the altar that the character is at. The procedures/functions that another person has written for me (Post #5?) are (unfortunately) not accurate enough. And I just like to make this script 100% on my own, or atleast, write the code myself. I'm obviously going to need some help. So I appreciate the example and been working on detecting the altars by using CTS 2.

Started with simply making a large script to detect it.
procedure Test;
var
X, Y: Integer;

begin
{EARTH ALTAR | Brown color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.07, 1.05);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(3298411, MMX1, MMY1, MMX2, MMY2, 12))+'');
if FindColoredAreaTolerance(X, Y, 3298411, MMX1, MMY1, MMX2, MMY2, 100000, 12) then
WriteLn('We are at the Earth Altar');

{FIRE ALTAR | Yellow color of the river}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.07, 2.64);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(6274014, MMX1, MMY1, MMX2, MMY2, 15))+'');
if FindColoredAreaTolerance(X, Y, 6274014, MMX1, MMY1, MMX2, MMY2, 10000, 15) then
WriteLn('We are at the Fire Altar');

{AIR ALTAR | Green color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.95, 1.87);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(2056526, MMX1, MMY1, MMX2, MMY2, 9))+'');
if FindColoredAreaTolerance(X, Y, 2056526, MMX1, MMY1, MMX2, MMY2, 50000, 9) then
WriteLn('We are at the Air Altar');
if CountColorTolerance(2056526, MMX1, MMY1, MMX2, MMY2, 9) > 10000 then
WriteLn('We have counted the Air Altar color over 10000 times');

{MIND ALTAR | Gray color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(2.78, 0.20);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(8027508, MMX1, MMY1, MMX2, MMY2, 18))+'');
if FindColoredAreaTolerance(X, Y, 8027508, MMX1, MMY1, MMX2, MMY2, 50000, 18) then
WriteLn('We are at the Mind Altar');

{BODY ALTAR | Dark gray color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(2.95, 0.22);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(6645080, MMX1, MMY1, MMX2, MMY2, 17))+'');
if FindColoredAreaTolerance(X, Y, 6645080, MMX1, MMY1, MMX2, MMY2, 50000, 17) then
WriteLn('We are at the Body Altar');

{WATER ALTAR | Blue color of the water}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(3.22, 0.91);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(10129543, MMX1, MMY1, MMX2, MMY2, 5))+'');
if FindColoredAreaTolerance(X, Y, 10129543, MMX1, MMY1, MMX2, MMY2, 10000, 5) then
WriteLn('We are at the Water Altar');
end;

Then I rewrote this into an Array.
procedure Test2;
var
AltarMMCol, AltarMMTol: Array of Integer;
AltarMMHue, AltarMMSat: Array of Extended;
PossibleAltars: Array of String;
i: Integer;

begin;
AltarMMCol := [3298411, 6274014, 2056526, 8027508, 6645080, 10129543];
AltarMMTol := [12, 15, 9, 18, 17, 5];
AltarMMHue := [0.07, 0.07, 0.95, 2.78, 2.95, 3.22];
AltarMMSat := [1.05, 2.64, 1.87, 0.20, 0.22, 0.91];
PossibleAltars := ['Earth', 'Fire', 'Air', 'Mind', 'Body', 'Water'];

for i := 0 to 5 do
begin
ColorToleranceSpeed(2);
SetColorspeed2Modifiers(AltarMMHue[i], AltarMMSat[i]);
if CountColorTolerance(AltarMMCol[i], MMX1, MMY1, MMX2, MMY2, AltarMMTol[i]) > 5000 then
WriteLn('We are at the '+PossibleAltars[i]+' Altar');
end;
end;

21 lines can accomplish the same thing as 62 lines. Pretty amazing haha. Well I will be testing it now ;)

Joe

2012-04-28 13:06:10

From: J J
Yeah it could possibly already get me membership :P You could be the first to make a script for the new runecrafting method. It should probably come out today, or atleast within a few days I believe. It will be extremely hard though.


Thanks, and I will do!


#1 Poster, after me haha. I appreciate it ;)

Been working on detecting the altar that the character is at. The procedures/functions that another person has written for me (Post #5?) are (unfortunately) not accurate enough. And I just like to make this script 100% on my own, or atleast, write the code myself. I'm obviously going to need some help. So I appreciate the example and been working on detecting the altars by using CTS 2.

Started with simply making a large script to detect it.
procedure Test;
var
X, Y: Integer;

begin
{EARTH ALTAR | Brown color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.07, 1.05);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(3298411, MMX1, MMY1, MMX2, MMY2, 12))+'');
if FindColoredAreaTolerance(X, Y, 3298411, MMX1, MMY1, MMX2, MMY2, 100000, 12) then
WriteLn('We are at the Earth Altar');

{FIRE ALTAR | Yellow color of the river}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.07, 2.64);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(6274014, MMX1, MMY1, MMX2, MMY2, 15))+'');
if FindColoredAreaTolerance(X, Y, 6274014, MMX1, MMY1, MMX2, MMY2, 10000, 15) then
WriteLn('We are at the Fire Altar');

{AIR ALTAR | Green color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.95, 1.87);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(2056526, MMX1, MMY1, MMX2, MMY2, 9))+'');
if FindColoredAreaTolerance(X, Y, 2056526, MMX1, MMY1, MMX2, MMY2, 50000, 9) then
WriteLn('We are at the Air Altar');
if CountColorTolerance(2056526, MMX1, MMY1, MMX2, MMY2, 9) > 10000 then
WriteLn('We have counted the Air Altar color over 10000 times');

{MIND ALTAR | Gray color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(2.78, 0.20);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(8027508, MMX1, MMY1, MMX2, MMY2, 18))+'');
if FindColoredAreaTolerance(X, Y, 8027508, MMX1, MMY1, MMX2, MMY2, 50000, 18) then
WriteLn('We are at the Mind Altar');

{BODY ALTAR | Dark gray color of the area}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(2.95, 0.22);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(6645080, MMX1, MMY1, MMX2, MMY2, 17))+'');
if FindColoredAreaTolerance(X, Y, 6645080, MMX1, MMY1, MMX2, MMY2, 50000, 17) then
WriteLn('We are at the Body Altar');

{WATER ALTAR | Blue color of the water}
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(3.22, 0.91);
WriteLn('Counted colors: '+IntToStr(CountColorTolerance(10129543, MMX1, MMY1, MMX2, MMY2, 5))+'');
if FindColoredAreaTolerance(X, Y, 10129543, MMX1, MMY1, MMX2, MMY2, 10000, 5) then
WriteLn('We are at the Water Altar');
end;

Then I rewrote this into an Array.
procedure Test2;
var
AltarMMCol, AltarMMTol: Array of Integer;
AltarMMHue, AltarMMSat: Array of Extended;
PossibleAltars: Array of String;
i: Integer;

begin;
AltarMMCol := [3298411, 6274014, 2056526, 8027508, 6645080, 10129543];
AltarMMTol := [12, 15, 9, 18, 17, 5];
AltarMMHue := [0.07, 0.07, 0.95, 2.78, 2.95, 3.22];
AltarMMSat := [1.05, 2.64, 1.87, 0.20, 0.22, 0.91];
PossibleAltars := ['Earth', 'Fire', 'Air', 'Mind', 'Body', 'Water'];

for i := 0 to 5 do
begin
ColorToleranceSpeed(2);
SetColorspeed2Modifiers(AltarMMHue[i], AltarMMSat[i]);
if CountColorTolerance(AltarMMCol[i], MMX1, MMY1, MMX2, MMY2, AltarMMTol[i]) > 5000 then
WriteLn('We are at the '+PossibleAltars[i]+' Altar');
end;
end;

21 lines can accomplish the same thing as 62 lines. Pretty amazing haha. Well I will be testing it now ;)


If you need a fellow tester I'm your man!

J J

2012-04-29 15:13:11

From: JOEbot
If you need a fellow tester I'm your man!

Will let you know :P Been working on the script today, will update the blog tomorrow as I have some pretty big plans. Just finished a SPS Guide.

And made a new video yesterday.

Video #2: Walking around every altar at the Great Orb Project using the script
http://www.youtube.com/watch?v=GCuzk_2vQ6I
[youtube]GCuzk_2vQ6I[/youtube]

J J

2012-04-30 08:10:46

I've noticed that my scripting speed is going up pretty quickly over the last few weeks. Made this procedure now. It walks to your desired wizard.

procedure JoinGame;
var
i: Integer;
DesiredWizard: String;
MyPos: TPoint;
RandomWizard: Array of String;

begin
DesiredWizard := 'Wizards';
SPS_Setup(RUNESCAPE_SURFACE, ['0_5']);
MyPos := SPS_GetMyPos;
WriteLn('My position is x: '+inttostr(MyPos.x)+' y: '+inttostr(MyPos.y));

RandomWizard := ['Wizards', 'Wizard Acantha', 'Wizard Vief']
for i:=0 to 2 do
begin
if DesiredWizard = RandomWizard[i] then
begin
case RandomWizard[i] of
RandomWizard[0]: begin;
case Random(3) of
0: begin;
WriteLn('We are walking to the '+RandomWizard[i]+' at the west side');
SPS_BlindWalk(Point(RandomRange(211, 223), RandomRange(2243, 2255))); //Wizards west
end;
1..2: begin;
WriteLn('We are walking to the '+RandomWizard[i]+' at the east side');
SPS_BlindWalk(Point(RandomRange(247, 263), RandomRange(2239, 2259))); // Wizards east
end;
end;
end;
RandomWizard[1]: begin;
WriteLn('We are walking to '+RandomWizard[i]+'');
SPS_BlindWalk(Point(RandomRange(215, 223), RandomRange(2227, 2239)));
end;
RandomWizard[2]: begin;
WriteLn('We are walking to '+RandomWizard[i]+'');
SPS_BlindWalk(Point(RandomRange(247, 263), RandomRange(2227, 2239)));
end;
end;
end;
end;
end;

Still have to edit it, but going to celebrate Queen's Day now!

J J

2012-04-30 18:22:40

Some things I will be working on tomorrow and some details I have gathered today.

*NEED TO UPDATE THIS*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mind altar DTM
Make CountColorTolerance for Fire Area larger
BOdy altar colors of the altar
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*NEW DETAILS*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
550, 536 gray colors
356 red colors


Yellow ball:
5236454, 10
ColorToleranceSpeed(2);
SetColorSpeed2Modifiers(0.16, 2.03);

Green ball:


Acantha team full text:
I'm glad to see things my way and want to keep the yellow orbs out. I have enough helpers for the moment, however. I suppose you could speak to 'Wizard' Vief to see if he needs help. Just remembeer: green is good!

Vief team full text:
I've got enough helpers for the moment, thank you. Maybe you should try 'Wizard' Acantha. She sometimes has trouble coping on her own.

Wizard full text:
I'm afraid there are too many people waiting to start at the moment. Try again in a few minutes.

Low activity text:
Warning: Your activity bar is getting low! Help out with the project to refill it!

Slone

2012-04-30 18:30:07

I think the Earth alter and Fire alter will provide the biggest challenges! If i recall correctly they have some orbs that spawn behind objects.

J J

2012-04-30 18:34:44

From: Slone
I think the Earth alter and Fire alter will provide the biggest challenges! If i recall correctly they have some orbs that spawn behind objects.

Well the biggest challenge so far has been the making of the walking system. I've been busy with other things than walking today, but it should still work after the RuneSpan update. It can walk to the altar again at any altar, and this will be very helpful. I will probably make the script look for a green/yellow orb on the main screen. If it doesn't find one, it will walk to a yellow dot on the minimap and look again. Repeat that process until the game is over.. and have it walk back to the altar again.

It really depends on how human being I want to make the script. I can either make it leech by just clicking on the orbs. Or I can make it actually play the game and try to lure as many as possible orbs to the altar. I will probably attempt to make it as human like as possible.

I just finished a couple procedures, and made them work together. Starting at the Great Orb Project start hall, the script will now walk to a random wizard. Either blue, green or yellow, and join a game. After that it will wait until the portal opens, and once it's open it will walk near the portal and enter it.

It works flawless so I'm happy with that. Also added support for Green team only, Yellow team only or Blue Wizard only. Or a mix of green/yellow/blue, which should come out pretty closely to 50/50 aswell.

Time to sleep now haha. Got some plans for tomorrow which includes detecting the green orbs & yellow stars, and clicking on them while they are moving.

Slone

2012-04-30 18:47:00

Very nice man, seems like your doing very well. Good luck with the script!

J J

2012-05-01 17:51:57

From: Slone
Very nice man, seems like your doing very well. Good luck with the script!

Thanks :)

Been working on the mainloop now. It works fairly well. The procedure/function names should explain themselves.

begin
SetUpLogin;
//JoinWizards;
//JoinAcantha;
//JoinVief;
//EnterPortalInside;
//EnterPortalOutside;
//FindTheAirAltar;
//FindTheMindAltar;
//FindTheWaterAltar;
//FindTheEarthAltar;
//FindTheFireAltar;
//FindTheBodyAltar;
//DefineArea;
//WalkToAltar;
//JoinGame;
//WaitForPortal;
//YellowStars;
//GreenOrbs;
repeat
//YellowStars;
GreenOrbs;
Wait(500 + Random(10000));
until (CountColorTolerance(10798276, 173, 279, 352, 292, 1) > 400) or (CountColorTolerance(204, 208, 208, 324, 220, 1) > 250);
if (FindPortalByArrow = True) then
begin
if (EnterPortalInside = False) then
begin;
FindPortalByArrow;
EnterPortalInside;
end;
end else
begin
DefineArea;
WalkToAltar;
if (FindPortalByArrow = True) then
begin
if (EnterPortalInside = False) then
begin;
FindPortalByArrow;
EnterPortalInside;
end;
end else
begin;
DefineArea;
WalkToAltar;
FindPortalByArrow;
EnterPortalInside;
end;
end;
end.

Still have some problems with the FindPortalByArrow but I think I know what's causing that. Time to Sleep now.

punkd

2012-05-01 19:23:56

JJ lOoks awesome. Pm me if need of any help!

J J

2012-05-02 03:27:14

From: punkd
JJ lOoks awesome. Pm me if need of any help!

Thanks, and I will do that :P

Haven't really been updating the mainpost, will update it with some text and some pictures from the past days. Will update it somewhere today. For the scripting, I'm going to work on the walking back to the altar and on I will be working on letting procedures work together.

So far it has been going fairly well :)

J J

2012-05-02 17:24:37

Been working on some more maths related problems by drawing circles and getting the radius, coords.. Haha

Altar locations from the top of the screen
Altar #1 Middle = (66, 44) Box = (39, 11, 93, 76)
Altar #2 Middle = (123, 44) Box = (96, 11, 150, 76)
Altar #3 Middle = (179, 44) Box = (152, 11, 206, 76)
Altar #4 Middle = (236, 44) Box = (209, 11, 263, 76)
Altar #5 Middle = (292, 44) Box = (265, 11, 319, 76)
Altar #6 Middle = (349, 44) Box = (322, 11, 376, 76)

(33, 11, 384, 77)

57


*NEED TO UPDATE THIS*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Box #1: [rechts]
(421, 193, 515, 311)

Box #2: [top]
(39, 0, 370, 76)

6 altars
39, 0, 370, 76

~CUT OUT THIS AREA~
Altar #1
Middle = (67,44)
TOP = 65,11
Bottom = 66,76
Left = 40,60
Right = 93,60
–>
(40, 11, 93, 76)
MiddleX = 40+93/2 = 66.5
MiddleY = 11+76/2= 43.5
Middle = (67, 44)
RadiusX = 67-40=27
RadiusY = 44-11=33


Altar #2
Middle = (123, 44)
bottom = 123,76
top = 123,11
right = 150,28
left = 96,29
–>
(96, 11, 150, 76)
MiddleX = 96+150/2=123
MiddleY=11+76/2=43.5
Middle = (123, 44)
RadiusX=123-96=27
RadiusY=44-11=33
11+76/2=43.5
76-43.5=32,5
Radius X = 27
Radius Y = 33


Altar #3
Middle = (179, 44)

Top = 178, 11
Bottom = 178, 76
Left = 152,29
Right = 206, 28
(152, 11, 206, 76);
MiddleX = 152+206/2=179
MiddleY=11+76/2=43.5
Middle = (179, 44);
Radius X = 179-152 = 27
Radius Y = 44-11 = 33


Altar #4
top = 230, 11
bottom = 230, 76
left = 203, 29
right = 257, 60
(203, 11, 257, 76)
MiddleX = 203+257/2= 230
MiddleY= 11+76/2 = 44
Middle: (230, 44);


Altar #5
top = 286, 11
bottom = 286,76
left = 259, 29
right = 313, 60
–>
(259, 11, 313, 76)
MiddleX = 259+313/2= 286
MiddlY=11+76/2= 44
(286, 44);


Altar #6
top =
bottom =
left =
right =
–>
()
MiddleX=
MiddleY=
Middle =

All altars =
(39, 11, 378, 311)

Joe

2012-05-02 17:33:55

It looks so good! I just want to test it right now!

pigggy

2012-05-02 19:09:29

this looks so complicated lol, gl though

J J

2012-05-03 08:02:17

From: JOEbot
It looks so good! I just want to test it right now!

Should be done atleast this month. By done I mean fully functioning. I can make one that leeches pretty fast from this point.. But I want one that actually plays the game or atleast attempts to :P

From: pigggy
this looks so complicated lol, gl though

Thanks.

litoris

2012-05-03 09:54:42

From: J J
Should be done atleast this month. By done I mean fully functioning. I can make one that leeches pretty fast from this point.. But I want one that actually plays the game or atleast attempts to :P


Thanks.


I could extensively test the leecher if you want, just letting you know ;)

J J

2012-05-03 10:48:08

From: litoris
I could extensively test the leecher if you want, just letting you know ;)

I'm currently adding some failsafes to the walking and making the detecting/clicking on orbs faster/smoother. I'm not sure what I will be doing after that, I might make some sort of leecher that just makes barriers at all times. However, I believe that you have to attract/repel orbs for a while, otherwise you won't get any tokens. But I'll test that later. I will let you know (and JOEBot hehe)

litoris

2012-05-03 10:53:46

From: J J
I'm currently adding some failsafes to the walking and making the detecting/clicking on orbs faster/smoother. I'm not sure what I will be doing after that, I might make some sort of leecher that just makes barriers at all times. However, I believe that you have to attract/repel orbs for a while, otherwise you won't get any tokens. But I'll test that later. I will let you know (and JOEBot hehe)


Tapping an orb of your color for once is enough to get tokens. You just need to stay active afterwards.

J J

2012-05-03 12:41:30

From: litoris
Tapping an orb of your color for once is enough to get tokens. You just need to stay active afterwards.

Yeah the script is capable of tapping an orb atleast once right now. Well, the green orb / yellow orb functions I have :P

Just finished the function to define of which team you are a part. Will use this to determine if the script needs to find green orbs or yellow orbs.

function DefineTeam:String;
var
HatCol, HatTol, ColorCount: Array of Integer;
HatHue, HatSat: Array of Extended;
PossibleHats, HatUptexts: Array of String;
i: Integer;

begin;
HatCol := [3455174, 3555132];
HatTol := [19, 13];
HatHue := [0.02, 1.07];
HatSat := [1.07, 0.51];
PossibleHats := ['Yellow', 'Green'];
ColorCount := [100, 100];

for i := 0 to 1 do
begin
ColorToleranceSpeed(2);
SetColorspeed2Modifiers(HatHue[i], HatSat[i]);
if CountColorTolerance(HatCol[i], 246, 138, 274, 164, HatTol[i]) > ColorCount[i] then
begin
Result:=PossibleHats[i];
WriteLn('We are part of the '+PossibleHats[i]+' team');
Exit;
end;
end;

HatUptexts := ['reen', 'ellow', 'Green', 'Yellow'];
if not(GameTab(Tab_Equip)) then
begin
FTab(Tab_Equip);
Wait(250 + Random(250));
end;
MouseBox(570, 290, 600, 320, 2);

for i := 0 to 1 do
begin;
if WaitUpTextMulti([HatUptexts[i]], 500) then
begin
Result:=HatUptexts[i];
WriteLn(''+HatUptexts[i]+'');
Exit;
end;
end;
end;

Works well.

EDIT: Finished another procedure that uses the result of the function above
procedure AttractOrbs;
var
i: Integer;
PossibleTeam: Array of String;

begin
PossibleTeam := ['Green', 'Yellow']

for i:= 0 to 1 do
begin
if DefineTeam = PossibleTeam[i] then
begin
case PossibleTeam[i] of
PossibleTeam[0]: begin;
WriteLn('We are part of the green team, trying to attract green orbs');
GreenOrbs;
end;
PossibleTeam[1]: begin;
WriteLn('We are part of the yellow team, trying to attract yellow orbs');
YellowStars;
end;
end;
end;
end;
end;

Works well for the yellow team, will test it for the green team after I come back from working out, which is what I'm going to do now :P

If it works correctly I will be making the YellowStars & GreenOrbs procedures more advanced to walk to the orbs/stars. So far it detects/clicks on them well - even if they are moving. But I will be working on some radial walking / color finding to walk to new stars I think.


EDIT 2:
Will be adding some neat new pictures tomorrow
One of the examples

Detecting how many circles to draw. Detecting the hat to determine the team that you are in. Detecting the box on the right. Will leave the TPA's that are in the red circle area's and the box on the right out of the search. :D

J J

2012-05-04 08:04:14

I will be working on walking to orbs today. Once I've found a nice way to walk to them I will work on the mainloop.

Gop script mainloop

1) Join a team
2) Wait until the portal opens
3) Walk to the portal and enter the portal
4) Find out at which altar the player is
5) Find out which team the player is a part of
6) Attract orbs of the same team as the player. Walk around to find orbs.
7) Wait until the portal opens.
8) Walk to the portal and enter the portal.

Repeat 6, 7, 8 until we are at altar #6
9) Enter the final portal.
10) Game has been finished.

Repeat 1-10

The script is at 1100 lines of pure coding so far

kevin33

2012-05-04 08:18:48

What a great project. I look forward to the end result! I will do my best to help if you ever need help and will test this if you need testers. As an f2p player I dont get to test many scripts or dont get the chance to cuz Im busy, but this script I could test if need be because I support it and appreciate all the hard work required. Great work! :)

J J

2012-05-04 11:15:09

From: kevin33
What a great project. I look forward to the end result! I will do my best to help if you ever need help and will test this if you need testers. As an f2p player I dont get to test many scripts or dont get the chance to cuz Im busy, but this script I could test if need be because I support it and appreciate all the hard work required. Great work! :)

Thanks man :)
It has indeed costed me a lot time so far, but I've also learned a lot from it already. I've just made the walking even better, it's 99% flawless. Which means that it can find every altar by running one procedure, from any given position. 99 out of 100 times :P The 1 out of 100 times it doesn't work I can simply run it again and 999 out of 1000 times it should be able to find the altar again. And for that small 1 out of 1000 times.. it will fix itself eventually lol.

Just recorded a video of the updated walking, will be uploaded soon enough.

J J

2012-05-05 18:44:15

I've made a lot of progress today.

I've nearly managed to make the script play the Great Orb Project like a human, at the air altar. It's a good step to the right direction. I'm currently still testing everything and tweaking it, but I will upload a video tomorrow to show the progress. So far it has been able to attract orbs to the air altar and have an activity between 50-100%!

It's 300 lines of code already and I'm not finished.. even using arrays. Will take me a lot of time to do the same for the other five altars. But it will be so epic once it's done. From this point till the final result it will simply take a lot of time, the scripting part is pretty much done. I just need to fill in the right numbers.. hundreds of numbers.. hundreds of new lines.. but the biggest part is done.

zsand

2012-05-05 19:24:26

Really impressive amount of work you've done so far, good luck and don't give up. :)

key

2012-05-05 20:15:25

Daaamn, goodluck!

Joe

2012-05-05 20:29:20

You've put quite a lot of time and effort (and if I'm a normal scripter- a lot of anger as well)… looking forward to seeing anymore updates and videos. You are quite talented at scripting, in a vote you would have a yes from me.
EDIT: and now you will!

bas

2012-05-05 20:35:16

Looks great! Good luck! :)

J J

2012-05-06 07:09:40

From: zsand
Really impressive amount of work you've done so far, good luck and don't give up. :)

Thanks :)

From: key
Daaamn, goodluck!

Thanks :)

From: JOEbot
You've put quite a lot of time and effort (and if I'm a normal scripter- a lot of anger as well)… looking forward to seeing anymore updates and videos. You are quite talented at scripting, in a vote you would have a yes from me.

Well it has mainly been enjoyable so far. Nearly everything that I've made so far has proven helpful, only a couple things were a waste of time lol. I've just made a new video:
www.youtube.com/watch?v=4lftEhKE5UU
[youtube]4lftEhKE5UU[/youtube]


For testing:
http://www.villavu.com/forum/showthread.php?p=1009184

From: kipjes bende
Looks great! Good luck! :)

Thanks :D

litoris

2012-05-06 09:36:37

I have 3 accounts with RC guild access other than my main, i could run full-team tests for you when/if you get a full script. Don't have much time these days due to exams so can't test the air thing, sorry.

J J

2012-05-06 09:46:22

From: litoris
I have 3 accounts with RC guild access other than my main, i could run full-team tests for you when/if you get a full script. Don't have much time these days due to exams so can't test the air thing, sorry.

Would be great :P I will be botting 50 runecrafting on some of my accounts aswell. Been busy with some graphics now, will upload a "bèta header" soon lol.

EDIT: finished it for now

b3asts

2012-05-06 21:55:58

is there an eta, and will this be paid, free, or members only? Willing to pay a good sum for this project!

J J

2012-05-07 05:17:34

From: b3asts
is there an eta, and will this be paid, free, or members only? Willing to pay a good sum for this project!

Well, right now, in my newest video it can basicly start from lobby and do all the actions required to get to the mind altar. That means, joining a team, waiting for the first portal to open, entering the portal, attracting orbs, crafting air runes once the time is over and walking/entering the next portal, to the mind altar.

I would say there are around 7 parts.
1) Joining a game
2, 3, 4, 5, 6, 7 are all the different altars (6 altars: air -> mind -> etc.)

Right now I got 2/7th completed and I got ~65% of the procedures needed for the other altars. I still need to figure out all co-ords and make a walking pattern for each altar. That will take like 5-10 hours per altar, which means it's 25-50 hours for that alone. After that I still need to add some failsafes and edit some procedures.. which should be another 25 hours or so? Add some unforeseen problems..

I would say it will take around 50-100 hours to complete it from this point. Average scripting time for the next 4 weeks (Final exams after 6 years, count 50% of your ending note) will be around 10-20h/week. After that I got3 months holiday so yeah. I would say around the beginning of June.

J J

2012-05-07 16:22:05

MindM := IntToBox(39839, 1023, 39871, 1051);
MindN := IntToBox(39831, 983, 39871, 1019);
MindNE := IntToBox(39871, 991, 39995, 1027);
MindE := IntToBox(39879, 1023, 39899, 1051);
MindEF := IntToBox(39903, 1035, 39923, 1057);
MindSE := IntToBox(39875, 1047, 39895, 1079);
MindSEF := IntToBox(39899, 1075, 39919, 1091);
MindSEFF := IntToBox(39871, 1103, 39887, 1127);
MindS := IntToBox(39843, 1059, 39863, 1091);
MindSFI := IntToBox(39859, 1095, 39875, 1127);
MindSFII := IntToBox(39827, 1095, 39855, 1127);
MindSW := IntToBox(39823, 1047, 39839, 1075);
MindSWF := IntToBox(39779, 1063, 39807, 1079);
MindW := IntToBox(39815, 1023, 39839, 1055);
MindWM := IntToBox(39775, 1027, 39807, 1051);
MindWF := IntToBox(39755, 1003, 39775, 1067);
MindNWFI := IntToBox(39779, 987, 39807, 1007);
MindNWFII := IntToBox(39771, 1011, 39807, 1035);
MindNW := IntToBox(39807, 983, 39831, 1015);

MindPositions := [MindM, MindN, MindNE, MindE, MindEF, MindSE, MindSEF, MindSEFF, MindS, MindSFI,
MindSFII, MindSW, MindSWF, MindW, MindWM, MindWF, MindNWFI, MindNWFII, MindNW];

MindPositionsTPA := TPAFromBox(MindM) + TPAFromBox(MindN) + TPAFRomBox(MindNE) + TPAFRomBox(MindE) + TPAFromBox(MindEF) +
TPAFRomBox(MindSE) + TPAFRomBox(MindSEF) + TPAFRomBox(MindSEFF) + TPAFRomBox(MindS) + TPAFRomBox(MindSFI) +
TPAFRomBox(MindSFII) + TPAFRomBox(MindSW) + TPAFromBox(MindSWF) + TPAFRomBox(MindW) + TPAFRomBox(MindWM) +
TPAFRomBox(MindWF) + TPAFRomBox(MindNWFI) + TPAFRomBox(MindNWFII) + TPAFRomBox(MindNW);

Been busy with getting coords.. it's just an extreme amount of work and will take a long time to finish everything for all altars. The code above is just a small part..

for i:=0 to 18 do
if PointInBox(MyPos, MindPositions[i]) then
begin
WriteLn('Our location is located');
case i of
0: begin
WriteLn('We are in the middle of the mind altar');
WriteLn('Walking to the altar');
case Random(4) of
0: SPS_BlindWalk(Point(RandomRange(39843, 39867), 1027));
1: SPS_BlindWalk(Point(39867, RandomRange(1027, 1047)));
2: SPS_BlindWalk(Point(RandomRange(39843, 39867), 1043));
3: SPS_BlindWalk(Point(39843, RandomRange(1027, 1043)));
end;
end;
I have to make blindwalk procedure/coords for EVERY MindPosition. For the air altar around 8 different positions where enough. But this altar is LARGE and needed 19 different positions. Takes a long time to make a random path to the altar, while luring the green/yellow orbs. The code above is just one position. Imagine doing that for 19 different ones

Also not sure what I'm going to do when it's actually finished. It seems like it has been too much work to simply give it away sort of.. Hm.

litoris

2012-05-07 16:54:31

From: J J
MindM := IntToBox(39839, 1023, 39871, 1051);
MindN := IntToBox(39831, 983, 39871, 1019);
MindNE := IntToBox(39871, 991, 39995, 1027);
MindE := IntToBox(39879, 1023, 39899, 1051);
MindEF := IntToBox(39903, 1035, 39923, 1057);
MindSE := IntToBox(39875, 1047, 39895, 1079);
MindSEF := IntToBox(39899, 1075, 39919, 1091);
MindSEFF := IntToBox(39871, 1103, 39887, 1127);
MindS := IntToBox(39843, 1059, 39863, 1091);
MindSFI := IntToBox(39859, 1095, 39875, 1127);
MindSFII := IntToBox(39827, 1095, 39855, 1127);
MindSW := IntToBox(39823, 1047, 39839, 1075);
MindSWF := IntToBox(39779, 1063, 39807, 1079);
MindW := IntToBox(39815, 1023, 39839, 1055);
MindWM := IntToBox(39775, 1027, 39807, 1051);
MindWF := IntToBox(39755, 1003, 39775, 1067);
MindNWFI := IntToBox(39779, 987, 39807, 1007);
MindNWFII := IntToBox(39771, 1011, 39807, 1035);
MindNW := IntToBox(39807, 983, 39831, 1015);

MindPositions := [MindM, MindN, MindNE, MindE, MindEF, MindSE, MindSEF, MindSEFF, MindS, MindSFI,
MindSFII, MindSW, MindSWF, MindW, MindWM, MindWF, MindNWFI, MindNWFII, MindNW];

MindPositionsTPA := TPAFromBox(MindM) + TPAFromBox(MindN) + TPAFRomBox(MindNE) + TPAFRomBox(MindE) + TPAFromBox(MindEF) +
TPAFRomBox(MindSE) + TPAFRomBox(MindSEF) + TPAFRomBox(MindSEFF) + TPAFRomBox(MindS) + TPAFRomBox(MindSFI) +
TPAFRomBox(MindSFII) + TPAFRomBox(MindSW) + TPAFromBox(MindSWF) + TPAFRomBox(MindW) + TPAFRomBox(MindWM) +
TPAFRomBox(MindWF) + TPAFRomBox(MindNWFI) + TPAFRomBox(MindNWFII) + TPAFRomBox(MindNW);

Been busy with getting coords.. it's just an extreme amount of work and will take a long time to finish everything for all altars. The code above is just a small part..

for i:=0 to 18 do
if PointInBox(MyPos, MindPositions[i]) then
begin
WriteLn('Our location is located');
case i of
0: begin
WriteLn('We are in the middle of the mind altar');
WriteLn('Walking to the altar');
case Random(4) of
0: SPS_BlindWalk(Point(RandomRange(39843, 39867), 1027));
1: SPS_BlindWalk(Point(39867, RandomRange(1027, 1047)));
2: SPS_BlindWalk(Point(RandomRange(39843, 39867), 1043));
3: SPS_BlindWalk(Point(39843, RandomRange(1027, 1043)));
end;
end;
I have to make blindwalk procedure/coords for EVERY MindPosition. For the air altar around 8 different positions where enough. But this altar is LARGE and needed 19 different positions. Takes a long time to make a random path to the altar, while luring the green/yellow orbs. The code above is just one position. Imagine doing that for 19 different ones

Also not sure what I'm going to do when it's actually finished. It seems like it has been too much work to simply give it away sort of.. Hm.


Make a version that just manages to get tokens by leeching orbs/barriers <–Public/Members+ for extensive testing
Full version that can play it all<–Members+ or sythe if you want cash or anything

J J

2012-05-07 17:19:14

Yeah I was thinking of doing something like that.
Version that leeches but still gains tokens Members+
Possibly sell a full script.. It doesn't feel right to have this blog and simply sell the script after people have been helping me with the procedures etc. On the other hand it would be nice to get money to pay for my study, next year. Oh well, let's work on actually finishing it.

:P

Two pictures of defining the area's so far

After wednesday I won't be making much progress for three weeks, because I will have my final exams that count 50% of your ending result from 6 years.

J J

2012-05-08 17:36:49

Well I've actually been wasting my time by doing the things like the post above ^. I've made a custom SPS function now and it works better and it is more accurate than the method above. Took me a total of 2 hours of editing procedures/functions and the script can succesfully walk around every altar now and attract orbs at all the altars aswell.

Huge step pretty much. I've also decided what I will be releasing, and what not.
I will release a "leeching" version to SRL Members+. It will simply stand near the altar and make some barriers to keep the activity up and it will some times click on orbs or walk to orbs. This is perfect for a 50/50 friendchat like GOP Addict. It will only join the blue wizard and it will get sucked through the portal instead of actually going through it.

Basicly a basic version, but it will gain a nice amount of token. No multi player support to avoid gold farming. But yeah, it will still be capable of getting 1800 tokens per hour by winning four 50/50 games per hour which give 450 tokens each I believe.

And I will make an advanced version for personal use, and I might send it to YoHoJo to apply as a SRL Member. But I'm pretty sure that the basic version will be advanced enough aswell.

Anyways, to sum it up:
New function saved me of 50 hours of work of finding out co-ordinates. Bot is now better at attracting orbs than some players :)

Joe

2012-05-08 18:01:53

From: J J
Well I've actually been wasting my time by doing the things like the post above ^. I've made a custom SPS function now and it works better and it is more accurate than the method above. Took me a total of 2 hours of editing procedures/functions and the script can succesfully walk around every altar now and attract orbs at all the altars aswell.

Huge step pretty much. I've also decided what I will be releasing, and what not.
I will release a "leeching" version to SRL Members+. It will simply stand near the altar and make some barriers to keep the activity up and it will some times click on orbs or walk to orbs. This is perfect for a 50/50 friendchat like GOP Addict. It will only join the blue wizard and it will get sucked through the portal instead of actually going through it.

Basicly a basic version, but it will gain a nice amount of token. No multi player support to avoid gold farming. But yeah, it will still be capable of getting 1800 tokens per hour by winning four 50/50 games per hour which give 450 tokens each I believe.

And I will make an advanced version for personal use, and I might send it to YoHoJo to apply as a SRL Member. But I'm pretty sure that the basic version will be advanced enough aswell.

Anyways, to sum it up:
New function saved me of 50 hours of work of finding out co-ordinates. Bot is now better at attracting orbs than some players :)


I would suggest making a public version that does only attracting orbs + starting games. Then with the feedback, improve on it (give it a week or 2) then apply for SRL members.

b3astown

2012-05-08 18:05:13

may i suggest that for a free version, it would ONLY join blue wizard(aka the losing team most of the time) and repel only…. Would show how great ur script is, without having water tallies get fucked by leeches

J J

2012-05-10 04:23:45

From: JOEbot
I would suggest making a public version that does only attracting orbs + starting games. Then with the feedback, improve on it (give it a week or 2) then apply for SRL members.

Might do that, but I'm also leaning towards just releasing the full version to SRL Members.

From: b3astown
may i suggest that for a free version, it would ONLY join blue wizard(aka the losing team most of the time) and repel only…. Would show how great ur script is, without having water tallies get fucked by leeches

Could do that, but it wouldn't be hard to rewrite it to join another team and to attract orbs. Someone could easily rewrite it within an hour.




Now for the big news:
The script just managed to play a full game 99% correct. There will some small minor mistakes which I fixed within minutes, after the game. I think it can play a full game around 99.5% correct now. I just need to fix some minor bugs and test the script.. progress has gone very fast the last three days because I made a custom sps walking function. Saved me a LOT of hours.

EDIT;
Been running in a problem now when testing the Yellow team. Somehow it thinks that it is part of the green team, even though it defined to be in the yellow team earlier..

SRL Compiled in 0 msec
SMART Initialized.
Loaded: Server 10, Members: False, Signed: True, Super Detail: False.
Current player:
My position is x: 39835 y: 3067
We are walking to the Wizards at the east side
My position is x: 39863 y: 3055
We have joined a game. Time to wait until the portal opens
It`s time to define which team we joined...
Counted colors: 163

We are part of the Yellow team

We are at the Air Altar
My position is x: 39851 y: 647
Walking near the air altar
We are going to attract orbs at the Air Altar
Counted yellow colors: 141
My position is x: 39835 y: 627
Array length is 3
We are very close to our desired point, result is true
We are at the Air Altar
My position is x: 39835 y: 627
Walking near the air altar
Counted yellow colors: 1313
Counted colors: 0
Counted colors: 129

We are part of the Green team

Counted yellow colors: 440
Array length is 4
We are very close to our desired point, result is true
We are at the Air Altar
My position is x: 39835 y: 627
Walking near the air altar
Counted green colors: 452
Counted green colors: 771
Array length is 2
We are very close to our desired point, result is true
We are at the Air Altar
My position is x: 39843 y: 627
Our location is near the air altar
Counted green colors: 493
Counted green colors: 1197
Array length is 3
We are very close to our desired point, result is true
We are at the Air Altar
My position is x: 39843 y: 627
Our location is near the air altar
Counted green colors: 494
Counted green colors: 879
Array length is 3
We are very close to our desired point, result is true
We are at the Air Altar
My position is x: 39843 y: 627
Our location is near the air altar
Counted green colors: 1324
Successfully executed.

Edit 2:
Fixed that problem, had a wrong loop that would only work if the joined team was green. But it has been fixed.

Vid:
[youtube]ED9ZwhkLSV8[/youtube]
http://www.youtube.com/watch?v=ED9ZwhkLSV8

J J

2012-05-10 14:18:37

Busy with the last procedures, then this will be finished :)

procedure MakeBarrier;
var
X, Y, BarrierGenerator: Integer;
BarrierBox: TBox;

begin;
//BarrierGenerator := DTMFromString('mwQAAAHic42RgYChlYmCIB+J0IC4E4mogzgfiFCDOA+IKIL4JVPcBiF8D8QMgvgPEN4D4BRDfA+JrQCwmJQYkmfDi/wyEASMRGA4AY2cNPg==');
BarrierGenerator := DTMFromString('mbQAAAHicY2VgYMhmYmAoAeIEIK4C4nwgfgIUvwbEH4D4LhDfBGItA00gyYSC/zNgAkYsGAwAeAkIJw==');
if FindDTM(BarrierGenerator, X, Y, MIX1, MIY1, MIX2, MIY2) then
begin
MMouse(X, Y, 2, 2);
if WaitUpTextMulti(['ake-', 'arri', 'gener'], 250) then
begin
ClickMouse2(1);
end;
end;

BarrierBox := IntToBox(245, 134, 282, 195);
Wait(100 + Random(100));
if PixelShift(Barrierbox, RandomRange(2500, 3000)) > 1000 then
begin
WriteLn('We have succesfully placed a barrier');
FreeDTM(BarrierGenerator);
Exit;
end else
begin
MouseCircle(MMCX, MMCY, 70, 1);
Wait(100 + Random(200));
repeat
Wait(50 + Random(100));
until(IsMoving=False);
MMouse(X, Y, 2, 2);
Wait(25 + Random(75));
ClickMouse2(1);
FreeDTM(BarrierGenerator);
end;
end;

procedure DestroyBarrier;
var
X, Y: Integer;

begin

end;

procedure RepelOrbs;
var
X, Y: Integer;

begin

end;

Making barriers works well for the green team. Testing for the yellow team next.

J J

2012-05-11 09:18:01

Working on finishing touches such as an on screen progress report


Time to make it dynamic now.

f1fanatic

2012-05-11 10:38:18

Been following this blog for a number of weeks and I was so impressed how much work you put into it. Can't wait for release if you decide to release it ofcourse :)!! Master RC robes ftw!

J J

2012-05-11 17:05:31

From: f1fanatic
Been following this blog for a number of weeks and I was so impressed how much work you put into it. Can't wait for release if you decide to release it ofcourse :)!! Master RC robes ftw!

Thanks :P I'm pretty impressed myself aswell lol. I'm pretty sure that this script will be better than all the previous GOP scripts. And it will be the first color GOP script :)

Made a procedure that detects how many tokens we have received after completing a game and it works.

procedure TokensUpdate;
var
i: Integer;
TokensBox: TBox;
TokensBoxTPA: TPointArray;
TokensGainedString: String;
NumbersCheck: Array of String;

begin
TokensGainedString := GetChatBoxText(8, clBlack);
NumbersCheck := ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];

for i:=0 to 10 do
begin
if Pos(NumbersCheck[i], TokensGainedString) > 0 then
begin
TokensGained := StrToInt(GetNumbers(TokensGainedString));
Tokens := (Tokens + TokensGained);
TokensBox := IntToBox(289, 456, 350, 470);
TPAFromBoxWrap(TokensBox, TokensBoxTPA);
SMART_DrawDotsEx(False, TokensBoxTPA, RGBtoColor(194, 178, 146));
SMART_DrawText(290, 457, UpChars, ''+IntToStr(Tokens)+'', clWhite);
Exit;
end;
end;
end;

Also shows the progress report, I like it :D

J J

2012-05-12 17:21:55

Pretty proud of this function
It detects if the player is kicked, and if the player is kicked it will wait the amount of minutes it has to wait.
It also paints the time it's going to wait on screen and currently draws a box around the detected text. But I will remove the drawing of the text, it's just for the testing.

EDIT: I'm working on the last parts. Just some newer edits that will make this look less bot like.

J J

2012-05-14 06:06:17

It didn't update the tokens properly after a game, fixed that

It's still sort of glitchy but it manages to play the whole game and it doesn't get kicked so yeah.. it's extremely hard to make it work flawless purely on colors.. I'll try to get it better but as long as it can play multiple games without getting kicked etc. I'm happy.

J J

2012-05-15 12:36:22

  • Placing barriers

The script should be capable to place barriers if it could possible help the outcome of the minigame.
Should be fairly easy to make, but haven't started on this yet.

Finished this. 14/05/2012
Also destroys them

function MakeBarrier: Boolean;
var
i, X, Y, BarrierGreen, BarrierYellow: Integer;
Barriers: Array of Integer;
BarrierBox: TBox;
PossibleTeam: Array of String;

begin;
PossibleTeam := ['Green', 'Yellow'];
BarrierGreen := DTMFromString('mbQAAAHicY2VgYMhmYmAoAeIEIK4C4nwgfgIUvwbEH4D4LhDfBGItA00gyYSC/zNgAkYsGAwAeAkIJw==');
BarrierYellow := DTMFromString('mbQAAAHicY2VgYDjKxsCwC4h3A/FBIL4AYjMxMKwH4u1AvBmIjwFxYqI5UDUTCv7PgAkYsWAwAAACjgmY');
Barriers := [BarrierGreen, BarrierYellow];

for i:=0 to 1 do
begin
if (JoinedTeam = PossibleTeam[i]) then
begin
if FindDTM(Barriers[i], X, Y, MIX1, MIY1, MIX2, MIY2) then
begin
MMouse(X, Y, 2, 2);
if WaitUpTextMulti(['ake-', 'arri', 'gener'], 250) then
begin
ClickMouse2(1);
end;
end;
BarrierBox := IntToBox(245, 134, 282, 195);
Wait(100 + Random(100));
if PixelShift(Barrierbox, RandomRange(2500, 3000)) > 1000 then
begin
WriteLn('We have succesfully placed a barrier');
FreeDTM(BarrierGreen);
FreeDTM(BarrierYellow);
Antiban;
Result:=True;
Exit;
end else
begin
MouseCircle(MMCX, MMCY, 70, 1);
Wait(100 + Random(200));
repeat
Wait(50 + Random(100));
until(IsMoving=False);
MMouse(X, Y, 2, 2);
Wait(25 + Random(75));
ClickMouse2(1);
FreeDTM(BarrierGreen);
FreeDTM(BarrierYellow);
Antiban;
Result:=True;
Exit;
end;
end;
end;
end;


procedure BarrierEmergency;
var
a, s: Integer;

begin
if FindChatBoxText('low!', 8, clBlack) then
begin
SMART_DrawDotsEx(False, ActionBoxTPA, RGBtoColor(194, 178, 146));
SMART_DrawText(290, 429, UpChars, 'making emergency barriers', clWhite);
if (MakeBarrier=True) then
begin
a:=0;
MarkTime(s);
Wait(1500 + Random(1000));
Mousebox(246, 147, 266, 182, 0);
WaitOptionMulti(['estr', 'estroy', 'Destroy'], 250);
Wait(1500 + Random(1000));
repeat
inc(a);
Antiban;
if MakeBarrier then
begin
Wait(1500 + Random(1000));
Mousebox(246, 147, 266, 182, 0);
WaitOptionMulti(['estr', 'estroy', 'Destroy'], 250);
Wait(1500 + Random(1000));
end;
until (a > RandomRange(2, 5)) or (TimeFromMark(s) > 15000) or (FindChatBoxText('cannot', 8, clBlack))
end;
end;
end;

EDIT: Used the script to apply as a SRL Member.. there we go :O

J J

2012-05-16 06:40:13

The script has been running 40 minutes now without any major problems.. leaving it running while I'm off to school. Let's see what has happened once I come back lol. I think it will just keep spamclicking at some point.. but I think there also is a chance that it will work.

litoris

2012-05-16 09:16:57

From: J J
The script has been running 40 minutes now without any major problems.. leaving it running while I'm off to school. Let's see what has happened once I come back lol. I think it will just keep spamclicking at some point.. but I think there also is a chance that it will work.


Are you running 4 bots for your won games or using gop addict or something? Anyway, good luck surviving 6 hours!

J J

2012-05-16 11:14:44

From: litoris
Are you running 4 bots for your won games or using gop addict or something? Anyway, good luck surviving 6 hours!

World 61. It crashed after 1 hour and 37 minutes but I gained 1600 tokens which is roughly 1000 tokens per hour. And the tokens are a bit off some times because it reads it from the chatbox. Not bad.

litoris

2012-05-16 12:44:56

From: J J
World 61. It crashed after 1 hour and 37 minutes but I gained 1600 tokens which is roughly 1000 tokens per hour. And the tokens are a bit off some times because it reads it from the chatbox. Not bad.


Nice! 1k tokens per hour=20 water talismans per hour= roughly 150k/h. Could sell to the goldfarmers at sythe and make bank :P
Make sure it recognizes the text when a game ends halfway through(people d/c and such)