SRL Archive - Senior Discussions and Debates

Becoming an Essential Runescape's social life


Sir R. M8gic1an

2013-04-17 10:12:00

I'll try to keep this as short at possible.

I couldn't help but have another idea for another group script idea, with a new twist. Many of us have attempted and some have succeeded to do some do everything in this city scripts. I think we could take it further by actually owning the city. Mafia style.

Al-Kharid was the first place that came to mind. It has a lot of skills available to practice that all compliment each other (mining, smelting, (smithing?)), (fishing, combat), crafting, and whatever other skills there are.

How would you own the city is the question that really would need answering imo. The Grand Exchange is like the stock market, and yet mafia still exists - the idea is simple - we collect the goods and sell them for cheaper than they are being sold at the GE, a bit like how if you go to the market you get cheaper goods than if you go to the high street.

This would of course mean we profit a little less - economically we could consider that by not having to go to the GE the money we are not making is the money that it would take us to travel there - but there is an even more interesting factor - By selling the goods cheaper than the GE we could easily become an essential part of Runescape's economy (and not just on price levels like we say bots keep the prices down). We could have our bots interacting with real people all the time, making real deals. This is not hard to do, it was one of my very first scripts. I think the benefit of us being able to merchant is that we would actually be the ones "creating the vibe" at al-kharid. We'll also have a much stronger impact on the game, making us more valuable to jagex making them not want to ban us so badly because we are bringing life back into the game.

I think that bringing real-life to our bot characters could take us a long, long, long way to not ever getting banned again. Having such a real say in the market would also open a lot of opportunities for us. And in a city as diversified as Al-Kharid and yet somewhat placed off the main f2p map it is the perfect place to start something like this - jagex wouldn't see it coming. And do I need to mention that with sudoku we could also have a big market for runes? Or just simply a perfect source to get runes easy to practice magic?

And furthermore, if I am mining at AK, and Coh3n is smithing at AK and my character comes to AK Bank selling coal and Coh3n's character is there and picks up on my sales line, he could just keep on smelting for longer, at a reduced ore price. Isn't that just awesome?

~RM

senrath

2013-04-17 11:49:55

Sounds like an amazing and incredibly complex idea to pull off.

masterBB

2013-04-17 19:47:48

I've thought about stuff like this too. It takes too much time and I probably stop because of being bored before it is finished. The idea is awesome though.

Sir R. M8gic1an

2013-04-18 08:21:16

From: masterBB
I've thought about stuff like this too. It takes too much time and I probably stop because of being bored before it is finished. The idea is awesome though.


As a team it wouldn't be that hard to achieve and reach completion I believe. We are all perfectly capable of making individual scripts, and for these to work together the connecting point would be in banking (where you would also merch, you could choose to merch just outside the bank), making it easily possible for people to just write their own script and include a merching module in it. I'm putting the idea here in case somebody wants to take it up, I do hope one day I'll have the time to take it up myself.

I see the merching as only a first connecting point between these scripts, that could eventually lead to bartering such as a fisherman bringing fish to someone fighting the AK warriors and exchanging it for bones (which can be sold for a lot more, but done in this order allow the AK fighter to remain fighting for a much longer time) - This would start indeed getting more complex needing the script to be able to deal with several market places or setting up trade routes etc. (The bigger the idea the better so we always have something more to aim for)

If these trade routes / regular traders came into play, we could develop a whole lot more of AI talking revolving around the fact that we want to merch our goods with each other and possibly just regular players. Bot contact with regular players seeming legit would go an awful long way to making us undetectable - of course we might just end up sounding like runescape businessmen, but then again, how is that a bad thing?

Of course something of this complexity and in fact risky, risky because we will be putting our bots at the mercy of grammatical and syntax logic, would be better to be kept in SSRL. We might say that we don't auto that much but when something like sudoku comes along all of a sudden everyone is active again, and this certainly wouldn't be the same fast profit as sudoku but has a lot of potential to achieve our bots actually sounding not just looking like real people, which is very valuable in itself.

cause

2013-04-19 18:42:00

From: Sir R. M8gic1an
As a team it wouldn't be that hard to achieve and reach completion I believe. We are all perfectly capable of making individual scripts, and for these to work together the connecting point would be in banking (where you would also merch, you could choose to merch just outside the bank), making it easily possible for people to just write their own script and include a merching module in it. I'm putting the idea here in case somebody wants to take it up, I do hope one day I'll have the time to take it up myself.

I see the merching as only a first connecting point between these scripts, that could eventually lead to bartering such as a fisherman bringing fish to someone fighting the AK warriors and exchanging it for bones (which can be sold for a lot more, but done in this order allow the AK fighter to remain fighting for a much longer time) - This would start indeed getting more complex needing the script to be able to deal with several market places or setting up trade routes etc. (The bigger the idea the better so we always have something more to aim for)

If these trade routes / regular traders came into play, we could develop a whole lot more of AI talking revolving around the fact that we want to merch our goods with each other and possibly just regular players. Bot contact with regular players seeming legit would go an awful long way to making us undetectable - of course we might just end up sounding like runescape businessmen, but then again, how is that a bad thing?

Of course something of this complexity and in fact risky, risky because we will be putting our bots at the mercy of grammatical and syntax logic, would be better to be kept in SSRL. We might say that we don't auto that much but when something like sudoku comes along all of a sudden everyone is active again, and this certainly wouldn't be the same fast profit as sudoku but has a lot of potential to achieve our bots actually sounding not just looking like real people, which is very valuable in itself.


Really cool idea. It would seem like, even with a Merch Module, this would take too much effort for the average SSRL or even SRL member to commit to. On the other hand, maybe not. It would be very cool though if someone had a fish-running bot to the combat trainers trade for, as you said, bones. Very cool idea. If the fish-runner was implemented well enough, it could even trade to legits (1 fish per bone?)…that would be awesome. Could very well make us a crucial part of the Alkhrid community. Hmmm…well, you going to write something up this summer?

masterBB

2013-04-19 20:30:33

[Drunkish]Before you all start this script thingy, one should know that since the eoc update once could fight forever without food.

senrath

2013-04-19 20:32:30

That requires 52 Defense, though, right?

weequ

2013-04-20 01:12:53

I don't see much point in this other than maybe antiban but if we make it always sell the items on the street it will become obvious that we are botting…

Olly

2013-04-20 17:57:37

eh, I still think the best "anti-ban" would be mining for an hour, going to do some hunter taking a short break going back to hunter then to do some more mining and such.

Le Jingle

2013-04-21 00:15:33

I might have interpreted this wrongly, but I sense the reincarnation of MSI floating in the OP message.

(Again, only me thinking this as far as I know; not change topics either if misinterpreted - sorry in advance)

Sir R. M8gic1an

2013-04-21 18:15:34

As for me writing something over summer, that will really depend on my travel plans,
For always selling on the street… that's the way it was before GE and we could just call it street priced goods,
As for the update, I'm sure we can find enough viable options, either in al-kharid or elsewhere and that there are still enough pures or low defense training on the warriors,
And as for a re–incarnation of MSI - only to the extent of team work and even as such I'd think that SSRL needs a lot more scripting independence than MSI did, I wouldn't at all be aiming to micro manage this or anything like that, more of a joining up of scripts through modules and aiming for a general goal… and certainly nothing at the scale of MSI.

As for anti-ban I believe it's a window of opportunity… in fact I'd love it if the Dev Auto Responder were posted somewhere in SSRL cus that has been lost for a while now and it was well worth it…

The Claw

2013-04-23 01:59:33

Goes without saying not to leak this :p Don't know if it will still work though I may have made some changes.

{
Just set usenewrespond to true in SRL.scar to use this file
use the Respond; function in your script or call FindNormalRandoms

on editing this include: be careful with adding too many trigger words;
every one of those are checked on every chat line, but go crazy with replies

you can/should put spaces in triggers if applicable
there is a space added to beginning and end of TheLine automagically

needed responses:
fight me/wild
food

it is possible to add specific responses inside your script(more skill related?)
just increase the array by one and add responses as below

masquerader
}

// MADE BY ZYT3X. FEEL FREE TO EDIT, BUT DO NOT COMPLAIN ABOUT IT NOT WORKING IF YOU DO!
type TAIPlayer = record
Name : String;
ID : Extended;
end;
AIBot = record
Players : array of TAIPlayer;
end;

var
AI : AIBot;
AI_Setup : Boolean;
Names: TStringArray;

const
//Extendeds
AI_SERVERID = 53455.25645524944;

function AI_GetIDFromName(Name : String): Extended;
var
I, H : Integer;
begin
H := High(AI.Players);
for I := 0 to H do
if AI.Players[I].Name = Name then
Result := AI.Players[I].ID;
end;

function AI_SetupNewPlayer(Name, Input : String): Boolean;
var
I, H : Integer;
E : Extended;
S : String;
begin
Result := False;
if not AI_Setup then Exit;
S := IntToStr(Random(99999) + 1) + '.' + IntToStr(Random(99999) + 1);
try
E := StrToFloat(S);
except
WriteLn(S);
E := 1.1;
end;
H := High(AI.Players);
for I := 0 to H do
begin
if (AI.Players[I].ID = E) then
begin
E := StrToFloat(IntToStr(Random(99999) + 1) + '.' + IntToStr(Random(99999) + 1));
I := 0;
end;
end;
SetLength(AI.Players, H+2);
H := High(AI.Players);
AI.Players[H].Name := Name;
AI.Players[H].ID := E;
Result := True;
end;

function AI_GetOutput(Input : String; ID : Extended) : String;
begin
Result := '';
if not AI_Setup then Exit;
Result := Between('<B>splotchy ==> ', '</B>', GetPage('http://www.cooldictionary.com/splotchy.mpl?input=' + Input + '&session_id=' + FloatToStr(ID) + '&Submit=Submit'));
Result := Replace(Result, '&#' + '39;', '''');
end;

function AI_TalkedToPlayerBefore(Name : String) : Boolean;
var
I, H : Integer;
begin
Result := False;
if not AI_Setup then Exit;
H := High(AI.Players);
for I := 0 to H do
if AI.Players[I].Name = Name then
begin
Result := True;
Exit;
end;
end;

function AI_Respond(Name, Input : String): Boolean;
var
S : String;
E : Extended;
begin
Result := False;
if not AI_Setup then Exit;
if AI_TalkedToPlayerBefore(Name) then
E := AI_GetIDFromName(Name)
else
if not AI_SetupNewPlayer(Name, Input) then
Exit;
S := AI_GetOutput(Input, E);
Result := S <> '';
if Result then
begin
TypeSend(S);
WriteLn('Talked to ' + Name + ': ' + S);
end;
end;

function AI_ResponderIsWorking : Boolean;
begin
Result := AI_GetOutput(' ', AI_SERVERID) <> '';
end;

function SetupAIResponder : Boolean;
begin
SetArrayLength(AI.Players, 1);
Result := AI_ResponderIsWorking;
AI_Setup := Result;
end;


////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
//////////////////////// BEGIN SRL DEV RESPONDER
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////
////////////////////////////////////////////////

type
Response=record
Name:string;
Trigger:array of string;
Reply:array of string;
Counter:Integer;
Time:Integer;
end;

LevelResponse=record
Name:string;
Short:array of string;
Time:Integer;
end;

var
AutoText:array of Response;
AutoLevels:array[1..21] of LevelResponse;

var
UseAutoResponder: Boolean;

const
RespWait=120;
//time to wait(seconds) between responding to triggers of same type

{*******************************************************************************
procedure LoadNewWords;
By:Masquerader
Description: Loads the words to say into memory
*******************************************************************************}
procedure LoadNewWords;
begin
SetArrayLength(AutoText,15)

AutoText[0].Name:='report';

SetArrayLength(AutoText[0].Trigger,1)
AutoText[0].Trigger[0]:= 'report';

SetArrayLength(AutoText[0].Reply,9)
AutoText[0].Reply[0] := 'why ';
AutoText[0].Reply[1] := 'you are too kind ';
AutoText[0].Reply[2] := 'ow ok. ';
AutoText[0].Reply[3] := 'why ';
AutoText[0].Reply[4] := 'who me ';
AutoText[0].Reply[5] := 'nooo dont ';
AutoText[0].Reply[6] := 'please ';
AutoText[0].Reply[7] := 'ty ';
AutoText[0].Reply[8] := 'huh what. sry chatting...';

////////////////////////////////////////////////////////////////////////////////
AutoText[1].Name:= 'auto'

SetArrayLength(AutoText[1].Trigger,3)
AutoText[1].Trigger[0]:= 'auto';
AutoText[1].Trigger[1]:= 'bot';
AutoText[1].Trigger[2]:= 'macro';

SetArrayLength(AutoText[1].Reply,8)
AutoText[1].Reply[0] := 'huh...me';
AutoText[1].Reply[1] := 'no, lol';
AutoText[1].Reply[2] := 'i am not autoing';
AutoText[1].Reply[3] := 'autoing ruins the game';
AutoText[1].Reply[4] := 'autoers should be banned =p';
AutoText[1].Reply[5] := 'i h8 autoers';
AutoText[1].Reply[6] := '=/ grrr. no way';
AutoText[1].Reply[7] := 'busy chatting..';

////////////////////////////////////////////////////////////////////////////////

AutoText[2].Name:='hi';

SetArrayLength(AutoText[2].Trigger,7)
AutoText[2].Trigger[0]:=' hi '
AutoText[2].Trigger[1]:='ello '
AutoText[2].Trigger[2]:='sup'
AutoText[2].Trigger[3]:=' yo '
AutoText[2].Trigger[4]:='howdy'
AutoText[2].Trigger[5]:='hey'
AutoText[2].Trigger[6]:='s up'

SetArrayLength(AutoText[2].Reply,7)
AutoText[2].Reply[0]:='hi'
AutoText[2].Reply[1]:='hello'
AutoText[2].Reply[2]:='sup'
AutoText[2].Reply[3]:='yo'
AutoText[2].Reply[4]:='howdy'
AutoText[2].Reply[5]:='hey'
AutoText[2].Reply[6]:='good day'

////////////////////////////////////////////////////////////////////////////////

AutoText[3].Name:='name'

SetArrayLength(AutoText[3].Trigger,1);
AutoText[3].Trigger[0]:='' //this gets set to the nick in Login;
//at the same time as NickNameBMP
SetArrayLength(AutoText[3].Reply,9)
AutoText[3].Reply[0] := 'what';
AutoText[3].Reply[1] := 'no';
AutoText[3].Reply[2] := 'go away';
AutoText[3].Reply[3] := 'huh';
AutoText[3].Reply[4] := 'busy';
AutoText[3].Reply[5] := 'leave me alone.';
AutoText[3].Reply[6] := 'heey';
AutoText[3].Reply[7] := 'dont talk to me';
AutoText[3].Reply[8] := 'stfu';

////////////////////////////////////////////////////////////////////////////////

AutoText[4].Name:='bye';

SetArrayLength(AutoText[4].Trigger,7)
AutoText[4].Trigger[0]:='bye'
AutoText[4].Trigger[1]:='g2g'
AutoText[4].Trigger[2]:='gtg'
AutoText[4].Trigger[3]:='later'
AutoText[4].Trigger[4]:='l8r'
AutoText[4].Trigger[5]:='cya'
AutoText[4].Trigger[6]:='c ya'

SetArrayLength(AutoText[4].Reply,7)
AutoText[4].Reply[0]:='bye'
AutoText[4].Reply[1]:='cya'
AutoText[4].Reply[2]:='by'
AutoText[4].Reply[3]:='later'
AutoText[4].Reply[4]:='see you'
AutoText[4].Reply[5]:='goodbye'
AutoText[4].Reply[6]:='nightynight'

////////////////////////////////////////////////////////////////////////////////

AutoText[5].Name:='lol';

SetArrayLength(AutoText[5].Trigger,7)
AutoText[5].Trigger[0]:='lol'
AutoText[5].Trigger[1]:='haha'
AutoText[5].Trigger[2]:='hehe'
AutoText[5].Trigger[3]:='rofl'
AutoText[5].Trigger[4]:='rotfl'
AutoText[5].Trigger[5]:='lmao'
AutoText[5].Trigger[6]:='lmfao'

SetArrayLength(AutoText[5].Reply,8)
AutoText[5].Reply[0]:='lol'
AutoText[5].Reply[1]:='haha'
AutoText[5].Reply[2]:='rofl'
AutoText[5].Reply[3]:='hehe'
AutoText[5].Reply[4]:='lmao'
AutoText[5].Reply[5]:='rotfl'
AutoText[5].Reply[6]:='=]'
AutoText[5].Reply[7]:='lmfao'

////////////////////////////////////////////////////////////////////////////////

AutoText[6].Name:='noob';

SetArrayLength(AutoText[6].Trigger,4)
AutoText[6].Trigger[0]:='noob'
AutoText[6].Trigger[1]:='newb'
AutoText[6].Trigger[2]:='nub'
AutoText[6].Trigger[3]:='n00b'

SetArrayLength(AutoText[6].Reply,10)
AutoText[6].Reply[0]:='u r the noob'
AutoText[6].Reply[1]:='ubernoob'
AutoText[6].Reply[2]:='n00b'
AutoText[6].Reply[3]:='yeahyeah'
AutoText[6].Reply[4]:='noobs are the future'
AutoText[6].Reply[5]:='i dont get it'
AutoText[6].Reply[6]:='nvm'
AutoText[6].Reply[7]:='blahblah'
AutoText[6].Reply[8]:='we need more noobs'
AutoText[6].Reply[9]:='it happens'

////////////////////////////////////////////////////////////////////////////////

AutoText[7].Name:='team';

SetArrayLength(AutoText[7].Trigger,1)
AutoText[7].Trigger[0]:='team'

SetArrayLength(AutoText[7].Reply,10)
AutoText[7].Reply[0]:='no team'
AutoText[7].Reply[1]:='no'
AutoText[7].Reply[2]:='i work alone'
AutoText[7].Reply[3]:='nah'
AutoText[7].Reply[4]:='nty'
AutoText[7].Reply[5]:='why'
AutoText[7].Reply[6]:='nah nvm'
AutoText[7].Reply[7]:='i kill solo'
AutoText[7].Reply[8]:='lemme be'
AutoText[7].Reply[9]:='noho'

////////////////////////////////////////////////////////////////////////////////

AutoText[8].Name:='friend';

SetArrayLength(AutoText[8].Trigger,5)
AutoText[8].Trigger[0]:='gf'
AutoText[8].Trigger[1]:='girlf'
AutoText[8].Trigger[2]:='bf'
AutoText[8].Trigger[3]:='boyf'
AutoText[8].Trigger[4]:='friend'

SetArrayLength(AutoText[8].Reply,10)
AutoText[8].Reply[0]:='go away'
AutoText[8].Reply[1]:='no i dont want to be your friend'
AutoText[8].Reply[2]:='no friend'
AutoText[8].Reply[3]:='no. i live alone'
AutoText[8].Reply[4]:='never'
AutoText[8].Reply[5]:='i dont get it'
AutoText[8].Reply[6]:='no. leave me alone'
AutoText[8].Reply[7]:='i already have a friend'
AutoText[8].Reply[8]:='no. stop it'
AutoText[8].Reply[9]:='i dont think so'

////////////////////////////////////////////////////////////////////////////////

AutoText[9].Name:='buy';

SetArrayLength(AutoText[9].Trigger,2)
AutoText[9].Trigger[0]:='uy yo'
AutoText[9].Trigger[1]:='uy ur'

SetArrayLength(AutoText[9].Reply,9)
AutoText[9].Reply[0]:='no'
AutoText[9].Reply[1]:='nfs'
AutoText[9].Reply[2]:='go away'
AutoText[9].Reply[3]:='what'
AutoText[9].Reply[4]:='not for sale'
AutoText[9].Reply[5]:='get lost'
AutoText[9].Reply[6]:='stop bothering me'
AutoText[9].Reply[7]:='noooo.....'
AutoText[9].Reply[8]:='im busy'

////////////////////////////////////////////////////////////////////////////////

AutoText[10].Name:='grr';

SetArrayLength(AutoText[10].Trigger,7)
AutoText[10].Trigger[0]:='grr'
AutoText[10].Trigger[1]:='f off'
AutoText[10].Trigger[2]:='come on'
AutoText[10].Trigger[3]:='meanie'
AutoText[10].Trigger[4]:='meany'
AutoText[10].Trigger[5]:='re mean'
AutoText[10].Trigger[6]:='r mean'

SetArrayLength(AutoText[10].Reply,9)
AutoText[10].Reply[0]:='no'
AutoText[10].Reply[1]:='mine'
AutoText[10].Reply[2]:='i dont share'
AutoText[10].Reply[3]:='sorry'
AutoText[10].Reply[4]:='im tryin to lvl up'
AutoText[10].Reply[5]:='i am mean'
AutoText[10].Reply[6]:='sry'
AutoText[10].Reply[7]:='it wont take long'
AutoText[10].Reply[8]:='i am an ahole'

////////////////////////////////////////////////////////////////////////////////

AutoText[11].Name:='nice';

SetArrayLength(AutoText[11].Trigger,1)
AutoText[11].Trigger[0]:='nice'

SetArrayLength(AutoText[11].Reply,7)
AutoText[11].Reply[0]:='yes'
AutoText[11].Reply[1]:='very nice'
AutoText[11].Reply[2]:='indeed'
AutoText[11].Reply[3]:='yup'
AutoText[11].Reply[4]:='good'
AutoText[11].Reply[5]:='nice indeed'
AutoText[11].Reply[6]:='very good'

////////////////////////////////////////////////////////////////////////////////

AutoText[12].Name:='go away';

SetArrayLength(AutoText[12].Trigger,1)
AutoText[12].Trigger[0]:='go aw'

SetArrayLength(AutoText[12].Reply,6)
AutoText[12].Reply[0]:='no'
AutoText[12].Reply[1]:='i dont'
AutoText[12].Reply[2]:='i stay'
AutoText[12].Reply[3]:='never'
AutoText[12].Reply[4]:='i dont go away'
AutoText[12].Reply[5]:='im staying'

////////////////////////////////////////////////////////////////////////////////

AutoText[13].Name:='trade';

SetArrayLength(AutoText[13].Trigger,2)
AutoText[13].Trigger[0]:='trade'
AutoText[13].Trigger[1]:='look'

SetArrayLength(AutoText[13].Reply,7)
AutoText[13].Reply[0]:='i dont want to trade'
AutoText[13].Reply[1]:='busy'
AutoText[13].Reply[2]:='nty'
AutoText[13].Reply[3]:='dont trade sry'
AutoText[13].Reply[4]:='no ty'
AutoText[13].Reply[5]:='no trade'
AutoText[13].Reply[6]:='no thanks'

////////////////////////////////////////////////////////////////////////////////

AutoText[14].Name:='begging';

SetArrayLength(AutoText[14].Trigger,3)
AutoText[14].Trigger[0]:='m poor'
AutoText[14].Trigger[1]:='give me'
AutoText[14].Trigger[2]:='free stuff'

SetArrayLength(AutoText[14].Reply,7)
AutoText[14].Reply[0]:='beggar'
AutoText[14].Reply[1]:='get a job'
AutoText[14].Reply[2]:='nope'
AutoText[14].Reply[3]:='go away'
AutoText[14].Reply[4]:='blahblah'
AutoText[14].Reply[5]:='go get urself a job'
AutoText[14].Reply[6]:='i dont have any'

// Note on AutoLevels array:
// .Name is the full name, as found in GameTab.scar (DONT EDIT)
// .Short is 3-4 letters out of the name, or whatever players use

AutoLevels[1].Name := 'attack'
SetArrayLength(AutoLevels[1].Short,2)
AutoLevels[1].Short[0]:='atk';
AutoLevels[1].Short[1]:='att';

AutoLevels[2].Name := 'strength'
SetArrayLength(AutoLevels[2].Short,1)
AutoLevels[2].Short[0]:='str';

AutoLevels[3].Name := 'defence'
SetArrayLength(AutoLevels[3].Short,1)
AutoLevels[3].Short[0]:='def';

AutoLevels[4].Name := 'range'
SetArrayLength(AutoLevels[4].Short,1)
AutoLevels[4].Short[0]:='rang';

AutoLevels[5].Name := 'prayer'
SetArrayLength(AutoLevels[5].Short,1)
AutoLevels[5].Short[0]:='pray';

AutoLevels[6].Name := 'magic'
SetArrayLength(AutoLevels[6].Short,1)
AutoLevels[6].Short[0]:='mag'; //magic,mage

AutoLevels[7].Name := 'runecrafting'
SetArrayLength(AutoLevels[7].Short,2)
AutoLevels[7].Short[0]:='rc';
AutoLevels[7].Short[1]:='runec';

AutoLevels[8].Name := 'hitpoints'
SetArrayLength(AutoLevels[8].Short,2)
AutoLevels[8].Short[0]:='hp';
AutoLevels[8].Short[1]:='hit';

AutoLevels[9].Name := 'agility'
SetArrayLength(AutoLevels[9].Short,1)
AutoLevels[9].Short[0]:='agil';

AutoLevels[10].Name := 'herblore'
SetArrayLength(AutoLevels[10].Short,1)
AutoLevels[10].Short[0]:='herb';

AutoLevels[11].Name := 'thieving'
SetArrayLength(AutoLevels[11].Short,2)
AutoLevels[11].Short[0]:='heiv';
AutoLevels[11].Short[1]:='hiev';

AutoLevels[12].Name := 'crafting'
SetArrayLength(AutoLevels[12].Short,1)
AutoLevels[12].Short[0]:='craf';

AutoLevels[13].Name := 'fletching'
SetArrayLength(AutoLevels[13].Short,1)
AutoLevels[13].Short[0]:='flet';

AutoLevels[14].Name := 'slayer'
SetArrayLength(AutoLevels[14].Short,1)
AutoLevels[14].Short[0]:='slay';

AutoLevels[15].Name := 'mining'
SetArrayLength(AutoLevels[15].Short,1)
AutoLevels[15].Short[0]:='min';

AutoLevels[16].Name := 'smithing'
SetArrayLength(AutoLevels[16].Short,1)
AutoLevels[16].Short[0]:='smit';

AutoLevels[17].Name := 'fishing'
SetArrayLength(AutoLevels[17].Short,1)
AutoLevels[17].Short[0]:='fish';

AutoLevels[18].Name := 'cooking'
SetArrayLength(AutoLevels[18].Short,1)
AutoLevels[18].Short[0]:='ook';

AutoLevels[19].Name := 'firemaking'
SetArrayLength(AutoLevels[19].Short,2)
AutoLevels[19].Short[0]:='fm';
AutoLevels[19].Short[1]:='fire';

AutoLevels[20].Name := 'woodcutting'
SetArrayLength(AutoLevels[20].Short,2)
AutoLevels[20].Short[0]:='wc';
AutoLevels[20].Short[1]:='wood';

AutoLevels[21].Name := 'farming'
SetArrayLength(AutoLevels[21].Short,1)
AutoLevels[21].Short[0]:='farm';

end;

{*******************************************************************************
function InChatPost(Text : String) : Boolean;
By: WT-Fakawi
Description: Returns True if Text is in last Chat Message.
*******************************************************************************}

function InChatPost(Text: string): Boolean;
begin
Result := (Pos(Text, TheLine) <> 0);
end;

{*******************************************************************************
function NewRespond : boolean;
By: Masquerader
Description: Responds to keywords about skill levels. Adds to ChatLog.txt.
*******************************************************************************}
function RespondLevels:boolean;
var
i,j,TheLevel:integer;
begin
for i:=1 to 21 do
begin
for j:=0 to GetArrayLength(AutoLevels[i].Short)-1 do
begin
if(InChatPost(AutoLevels[i].Short[j]))then
begin
if(TimeFromMark(AutoLevels[i].Time)<1000*RespWait)then
begin
WriteLn('RESPONSE SUPPRESSED TO: '+AutoLevels[i].Name+' level')
WriteFileString(TheFile, TheTime +
' RESPONSE SUPPRESSED TO: '+AutoLevels[i].Name+' level' + Chr(13));
Exit;
end;
TheLevel:=Players[CurrentPlayer].Level[i];
if(TheLevel=0)then
begin
Players[CurrentPlayer].Level[i]:= GetSkillInfo(AutoLevels[i].Name,False);
TheLevel:=Players[CurrentPlayer].Level[i];
if(TheLevel=0)then
begin
WriteLn('ERROR: Could not get '+AutoLevels[i].Name+' level');
WriteFileString(TheFile, TheTime + ' ' +
'ERROR: Could not get '+AutoLevels[i].Name+' level'+ Chr(13));
Exit;
end;
end;
TypeSend(IntToStr(TheLevel))
Wait(500+Random(200));
WriteFileString(TheFile, TheTime + ' RESPONDED TO '+
AutoLevels[i].Name+' level : ' +IntToStr(TheLevel) + Chr(13));
WriteLn(TheTime + ' RESPONDED TO '+AutoLevels[i].Name+' level : ' +IntToStr(TheLevel));
MarkTime(AutoLevels[i].Time);
Result:=True;
Exit;
end;
end;
end;
end;

{*******************************************************************************
function Respond : boolean;
By: Masquerader
Description: Responds to keywords. Adds to ChatLog.txt.
*******************************************************************************}
function Respond: boolean;
var
i,j,z:integer;
TheResponse:string;
begin
if (not(UseAutoResponder)) then Exit;

SaveToChatLog;

if(OldLine=TheLine)then
Exit; //text hasnt changed
if(TheName=TheLine)then
Exit; //happens when no blue text or colon error
if (Pos(Players[CurrentPlayer].Nick, TheName) <> 0) then
Exit; //it is us talking

if(inchatpost('lv')or inchatpost('lev'))then
if(RespondLevels)then
begin
Result:=True;
Exit;
end;

for z := 0 to High(Names) do
if not Names[z] = TheName then
begin
AI_SetupNewPlayer(TheName);
SetArrayLength(Names, High(Names) + 1);
Names[z + 1] := TheName;
end;

AI_Respond;

for i:=0 to GetArrayLength(AutoText)-1 do
begin
for j:=0 to GetArrayLength(AutoText[i].Trigger)-1 do
begin
if(InChatPost(AutoText[i].Trigger[j]))then
begin
if(TimeFromMark(AutoText[i].Time)<1000*RespWait)then
begin
WriteLn('RESPONSE SUPPRESSED TO: '+AutoText[i].Name)
WriteFileString(TheFile, TheTime +
' RESPONSE SUPPRESSED TO: '+AutoText[i].Name+ Chr(13));
Exit;
end;
TheResponse:=AutoText[i].Reply[AutoText[i].Counter]
Wait(1000 + Random(2000));
TypeSend(TheResponse);
Wait(500+Random(200));
WriteFileString(TheFile, TheTime + ' RESPONDED TO '+
AutoText[i].Name+': ' +TheResponse + Chr(13));
WriteLn(TheTime + ' RESPONDED TO '+ AutoText[i].Name+': ' +TheResponse);
MarkTime(AutoText[i].Time)
AutoText[i].Counter:=AutoText[i].Counter+1;
if(AutoText[i].Counter>GetArrayLength(AutoText[i].Reply)-1)then
AutoText[i].Counter:=0;
Result:=True;
Exit;
end;
end;
end;


end;

{*******************************************************************************
procedure SetupNewSRLAutoResponder;
By: WT-Fakawi
Description: Sets up the auto responder
*******************************************************************************}

procedure SetupSRLAutoResponder;
begin
LoadNewWords;
end;

Sir R. M8gic1an

2013-06-18 15:15:43

I've also been figuring this is an easy way to pass goods between our botters.

person 1: bots A, B
person 2: bots C, D
person 3: bots E, F

A, B, C are mining and as they are mining they trade ores to D, E, F

A could trade with D, E or F;
B could trade with D, E or F;
C could trade with D, E or F;

this means that wether you are getting goods from one of your bots or somebody else's bots everyone will still be getting the ores they need to do their smelting.

While you are smelting you could also be selling your bars and getting goods for your next activity: eg buying food to go fighting.

R0b0t1

2013-06-19 00:05:15

I was able to coordinate bots a long time ago on a small scale. You don't need to do anything special, you simply write a script to do some activity but allow it to buy and sell materials. What is harder is making sure there will be materials to buy, or a buyer to sell materials to. For that I used an outside-of-RS protocol to schedule bot activities.

If you want to interact with the world at large, treat it like file sharing with enforced seeding. To buy materials at a discount, you must sell materials at a discount. This way bot interactions are exactly the same as human interactions. Everyone reports to a clan leader for sales. Bonus points: get legit players to join your "clan".

Sadly, the "clan leader" (trade arbitrator/point tracker) becomes a single point of failure. It may be possible to tell nodes to "pay it forward" - if they receive a particularly good deal, give someone a particularly good deal. Sadly, I don't think this one stands up to malicious action.

Sir R. M8gic1an

2014-07-16 15:32:03

This idea popped back into my mind and had me coming on here.

Your password is 322 days old, and has therefore expired.

Seems like it's been nearly a year since my last visit!

It came back to me with a few realizations that this has the field to create a social structure (which is an interesting thing to do in and by itself)

Out of several running scripts, some which generate more profit than others, each person gets access to a certain amount of selected scripts - the bigger your contributions to the clan the more access you gain. Access to these scripts would also be per character and not per person - and advancement would be automatic. Say you gain more access at every 500k you've contributed to the economy.

Newbie characters would be killing for hides, which is good but slow money. Characters with more access could be making fast money tanning the hides. Even higher access would have you crafting the hides - which is a money drain, therefore the need for higher access.

The system would work with some businessmen bots buying your goods at fair prices everytime you reach a certain amount of goods. These businessmen would (after buying several bulks) attempt to make a profit at GE in order to bring the money back or pass the items on to the next bot again at a fair price.

Say you've got 25k worth of cowhides - the scripts contacts the base (a website we set up) announcing its stock. Once someone with access to the broker script comes on it'll run the broker script and buy the stock.

Similarly, if a person just gained access to the smelter script it will need ores to work with. The character might have some ores, but odds are he sold his bulks - so it announces its need to buy stock and once again once a broker with enough stock comes on it'll pass the stock on.

So to picture it - you've been mining for a couple weeks and selling your stock and you've just gained an access level. This access level comes with a dungeon fighter, a willow cutter and a smelter and so you need full set of mithril armour (assuming you're level 20 Defense), an adamant axe and copper & tin ores. While you are peacefully chopping willows with your (nearly outdated) mithril axe a broker(s) will come find you at the bank where you are and trade you all these things you need.

And oh, you've just made 500k off your willows & bronze bars and gained another access level!
Now you'll get coal & iron ore to make even more money with!

You've just made 1 mill off your steel bars! Perfect, you'll get 750k and you'll keep 250k to start using your newbie broker script!

—-

Where I see this going is the more you contribute the more access to better things, both in terms of scripts and materials. I don't see the setting as SSRL anymore, this is something that needs a lot of regulation and where I'd be aiming to develop some sort of emotionally intelligent bot, bots that can actually live and have conversations as a community. "Hey what you up to? Yeh? How much u got? Cool I'll buy it off of you, where you at?"

Eventually this would lead to a community that has a large stock of goods, and possibly aiming for GE manipulations to make ourselves some real $$$.

I'd be making competitions with part of the prize being tester/developer access to the script.

Just many things that popped into my mind that I don't know when I'll have the time for.