SRL Archive - RS3 Script Requests

The Simba Dungeoneering Project


[D]ude

2012-04-09 19:48:04

Okay, I am not THAT great at scripting, edited and made like two for my own uses, but I am willing to help and organize the making of a dungeoneering script. What you need to do is script for one type of room or however many you want. You have to make it so that it recognizes when that room is there and then include everything to tell it how to do that room. Then post the script on the thread and maybe we could get people to run simba and test each of the individual room scripts. Those then run the best for each room can then be put in the script. We can make it so that if it fails to recognize or complete a room then it will restart a dungeon. Then we will need someone to put it all into one huge but impressive color script. I know this can be done, but we will need a whole lot of participation.



*edit* Chances are you are going to have to include which dungeoneering floor you are on too. We could also just make one that rushes floors 1-10 as a noobie bot and keep adding floors on from there.

*edit 2* Will also have to have someone make a script so that it will pick up keys and use the right keys on the right doors. And also add failsafe so that if it can't open a door, then go to another room and look around.

pigggy

2012-04-09 21:18:36

uhhh, it's gonna be way to hard…

Awkwardsaw

2012-04-09 21:28:04

According to the Skype SRL group, if we can make a dynamic SPS image of the floor, it wouldn't be to hard.

Olly

2012-04-09 21:28:07

From: Awkwardsaw
According to the Skype SRL group, if we can make a dynamic SPS image of the floor, it wouldn't be to hard.


+ Maybe come up with a real time SPS map "piecer" for walking though the dungeon and knowing where things are.

As in you start with the home room , then add the next room on the map so and so.

Also SRL Skype group? first ive heard of that :P

weequ

2012-04-09 21:30:48

I think the best approach would be creating an include for dungeoneering. Maybe spread the include to multiple files like bosses, navigation etc..

Awkwardsaw

2012-04-09 21:33:05

From: weequ
I think the best approach would be creating an include for dungeoneering. Maybe spread the include to multiple files like bosses, navigation etc..


I'm setting up a git atm, just for shits :p

John

2012-04-09 21:34:37

Could you some how incorporate how This works into it for walking?

Olly

2012-04-09 21:44:15

From: Evlin
Could you some how incorporate how This works into it for walking?


That has the locations already built in near enough from the rs map you don't know what a dungeon map is going to be so I don't think so, I still think my idea of a real time map "piecer" could work if its possible.

[XoL]

2012-04-09 21:45:38

Isn't this already in dev in SRL members section or am I thinking of something else with the word dungeon in it o.o…

regardless interesting ideas in here, dynamic flooring o.o

eska

2012-04-09 21:50:41

For navigation I'd use an array of records that store all the information related to a room.

So the record would contain the number of door in that room, the property of those door (Gd, keys, skill), and to which room they connect. It would also contain if there are monsters in the room and maybe the ressources in that room if necessary,

That way we could have a map of the dungeon in an array, then use dijkstra algorithm to find the best path to reach a certain room. There is only one path possible so using dijkstra is overkill.

I was thinking about this because I'd like to make a C2 dung fisher.

Awkwardsaw

2012-04-09 22:15:14

https://github.com/Awkwardsaw/SRLDung

Just throwing it out there. :)

eska

2012-04-10 07:18:46

Finished my pathfinding function.

Picture, cuz it's always easier to understand with picture.
Basicaly it tells you which room you need to go through to get to a certain room.
Say you start by the green circle, the function will examin all of the possible route in the array until it finds the target, which in this case is the boss room.

It uses an array of doors and an array of rooms (initialised when we first found them) to figure out which room it needs to cross to get to the target.

Oh and just to specify, it doesn't look at the map I've just shown, it uses a map of rooms and door made while progressing in the dungeon, all stored in 2 arrays.

I just drew myself a fake map, hardcoded the array myself and it found the route to the target perfectly.

Compiled successfully in 764 ms.
Analysing room 8
Analysing room 6
Analysing room 3
Analysing room 4
Analysing room 2
Analysing room 1
Analysing room 0
TARGET FOUND!
Analysing room 7
Analysing room 10
Path to target: [0, 1, 2, 3, 6, 8, 9].
Successfully executed.

Ezio Auditore da Firenze

2012-04-10 07:30:49

For what I've read in the past about color detection, SPS ect, will the new dungeoneering update make things a little easier, as items will be stacked, tool belts added and keys shared?

eska

2012-04-10 07:33:34

Won't make anything easier for bots unless I missed something

Olly

2012-04-10 07:54:15

As were soloing key sharing wont be a issue toolbelts and some extra item stacking will help slightly

eska

2012-04-10 07:56:44

The only way it would help is if you wanted to make a bot that does dungeon in teams.

That would make it much easier because you wouldn't need to have a keyer, they could just all pick up key and run around unlocking things.

The puzzle would still be very hard to solve though.

Imanoobbot

2012-04-10 09:39:53

From: sir eska eau
Finished my pathfinding function.

Picture, cuz it's always easier to understand with picture.
Basicaly it tells you which room you need to go through to get to a certain room.
Say you start by the green circle, the function will examin all of the possible route in the array until it finds the target, which in this case is the boss room.

It uses an array of doors and an array of rooms (initialised when we first found them) to figure out which room it needs to cross to get to the target.

Oh and just to specify, it doesn't look at the map I've just shown, it uses a map of rooms and door made while progressing in the dungeon, all stored in 2 arrays.

I just drew myself a fake map, hardcoded the array myself and it found the route to the target perfectly.

Compiled successfully in 764 ms.
Analysing room 8
Analysing room 6
Analysing room 3
Analysing room 4
Analysing room 2
Analysing room 1
Analysing room 0
TARGET FOUND!
Analysing room 7
Analysing room 10
Path to target: [0, 1, 2, 3, 6, 8, 9].
Successfully executed.


But every dungeon looks new and the bot have to find the keys, solve quizes, fight bosses with special tactics etc etc etc. Sounds unreal for me making this with color detection ;)

Awkwardsaw

2012-04-10 14:41:56

From: Imanoobbot
But every dungeon looks new and the bot have to find the keys, solve quizes, fight bosses with special tactics etc etc etc. Sounds unreal for me making this with color detection ;)


It's easy if you have the correct records. ;)

eska

2012-04-10 15:33:17

From: Imanoobbot
But every dungeon looks new and the bot have to find the keys, solve quizes, fight bosses with special tactics etc etc etc. Sounds unreal for me making this with color detection ;)


Well for now I'm not even thinking about solving the quizes.

All I'm doing is navigation. Basicaly a script that could solve a floor if there's no quize, and no bosses.

To loot the key, I'll just look at the minimap, walk to the red dot then search on the main screen. (It's a bit more complicated than that though)
If it's a key I pick it up, if it's a chisel, it means it's a quizze and I could make it cancel the dungeon. The problem is mostly finding the doors and the information related to it (Gd, just a door, key door (if keydoor, which key?).

Once all the information, the map is contained in the array and we can move around as we wish without getting lost. If we do get lost then we could always tele back to smuggler.

Joe

2012-04-10 16:09:27

My advice:
go through a bunch of levels and DTM every key you find, then add it to an array that when it finds a door and goes through the keys you have, then have a if keyfound then proceed or if not keyfound then go find it… just trying to help. PM me for any help if you want :)

eska

2012-04-10 16:34:58

Nah, the first thing that should be done is pick up a key as soon as it is found, else if we kill other monster there will be a lot of red dots. That means alot of false positive.

About the keyfound, I already got that covered.

Joe

2012-04-10 16:48:30

From: sir eska eau
Nah, the first thing that should be done is pick up a key as soon as it is found, else if we kill other monster there will be a lot of red dots. That means alot of false positive.

About the keyfound, I already got that covered.


My point has been diffused

As you were, soldier.

xtrapsp

2012-04-10 17:04:12

Could we not get a database of each room? I mean they all follow a layout. Slightly modified each time. and each time it goes into a room it defines the room and looks for stuff?

eska

2012-04-10 17:05:58

From: xtrapsp
Could we not get a database of each room? I mean they all follow a layout. Slightly modified each time. and each time it goes into a room it defines the room and looks for stuff?


That's what I'm doing already. I'm storing all the information I gather in arrays.

Then using all those information I find a path to where I want to go. Say ealier in the dung I find a gold diamond door and I don't have the key. Later in the dung, I find the gold diamond key. Then the script would look at all the doors and look for a locked gold diamond door and find out in what room number it is. Then the pathfinding function would tell me by which room I need to pass to get to that room.

So far this is how I want my algorithm to open doors if all door could be opened in one trip (meaning no keys or puzzle)


Hardcoded this map in an array to do some testing:

SetLength(roomsArray, 58);
roomsArray[0]:= newRoomTest(0, [0, 1, 2, -1]);
roomsArray[1]:= newRoomTest(1, [8, 0, 4, 5]);
roomsArray[2]:= newRoomTest(2, [1, -1, 3, -1]);
roomsArray[3]:= newRoomTest(3, [-1, -1, 54, 2]);
roomsArray[4]:= newRoomTest(4, [-1, 8, -1, -1]);
roomsArray[5]:= newRoomTest(5, [-1, -1, 9, 4]);
roomsArray[6]:= newRoomTest(6, [7, -1, 5, 6]);
roomsArray[7]:= newRoomTest(7, [55, -1, 10, 9]);
roomsArray[8]:= newRoomTest(8, [-1, 55, 11, -1]);
roomsArray[9]:= newRoomTest(9, [-1, -1, -1, 10]);
roomsArray[10]:= newRoomTest(10, [-1, -1, -1, 11]);
roomsArray[11]:= newRoomTest(11, [20, 7, -1, -1]);
roomsArray[12]:= newRoomTest(12, [-1, 29, 6, 28]);
roomsArray[13]:= newRoomTest(13, [19, 20, 18, -1]);
roomsArray[14]:= newRoomTest(14, [-1, 19, -1, -1]);
roomsArray[15]:= newRoomTest(15, [56, -1, 17, 18]);
roomsArray[16]:= newRoomTest(16, [-1, 56, 16, -1]);
roomsArray[17]:= newRoomTest(17, [-1, 12, -1, 17]);
roomsArray[18]:= newRoomTest(18, [-1, -1, 15, 16]);
roomsArray[19]:= newRoomTest(19, [-1, 42, 14, 15]);
roomsArray[20]:= newRoomTest(20, [42, -1, 13, -1]);
roomsArray[21]:= newRoomTest(21, [-1, -1, -1, 14]);
roomsArray[22]:= newRoomTest(22, [-1, -1, -1, 13]);
roomsArray[23]:= newRoomTest(23, [12, -1, -1, -1]);
roomsArray[24]:= newRoomTest(24, [29, -1, -1, -1]);
roomsArray[25]:= newRoomTest(25, [27, 30, 28, -1]);
roomsArray[26]:= newRoomTest(26, [24, 27, 23, -1]);
roomsArray[27]:= newRoomTest(27, [30, 32, 31, -1]);
roomsArray[28]:= newRoomTest(28, [43, 24, -1, 25]);
roomsArray[29]:= newRoomTest(29, [22, -1, -1, 23]);
roomsArray[30]:= newRoomTest(30, [-1, 43, -1, -1]);
roomsArray[31]:= newRoomTest(31, [26, -1, 25, -1]);
roomsArray[32]:= newRoomTest(32, [-1, 26, -1, -1]);
roomsArray[33]:= newRoomTest(33, [21, 22, -1, -1]);
roomsArray[34]:= newRoomTest(34, [-1, 21, -1, -1]);
roomsArray[35]:= newRoomTest(35, [22, -1, 33, -1]);
roomsArray[36]:= newRoomTest(36, [-1, -1, 31, -1]);
roomsArray[37]:= newRoomTest(37, [-1, 35, 34, 33]);
roomsArray[38]:= newRoomTest(38, [35, 38, -1, 36]);
roomsArray[39]:= newRoomTest(39, [-1, -1, -1, 34]);
roomsArray[40]:= newRoomTest(40, [38, -1, 40, 39]);
roomsArray[41]:= newRoomTest(41, [-1, -1, 36, 37]);
roomsArray[42]:= newRoomTest(42, [-1, -1, 41, 40]);
roomsArray[43]:= newRoomTest(43, [-1, -1, 39, -1]);
roomsArray[44]:= newRoomTest(44, [44, -1, -1, 41]);
roomsArray[45]:= newRoomTest(45, [-1, 44, 45, -1]);
roomsArray[46]:= newRoomTest(46, [-1, 46, 47, 45]);
roomsArray[47]:= newRoomTest(47, [46, -1, 48, -1]);
roomsArray[48]:= newRoomTest(48, [-1, -1, 49, 47]);
roomsArray[49]:= newRoomTest(49, [-1, 50, -1, 49]);
roomsArray[50]:= newRoomTest(50, [50, -1, -1, -1]);
roomsArray[51]:= newRoomTest(51, [-1, -1, -1, 48]);
roomsArray[52]:= newRoomTest(52, [-1, -1, 37, -1]);
roomsArray[53]:= newRoomTest(53, [-1, -1, 51, 3]);
roomsArray[54]:= newRoomTest(54, [-1, -1, 52, 51]);
roomsArray[55]:= newRoomTest(55, [-1, -1, -1, 52]);
roomsArray[56]:= newRoomTest(56, [-1, -1, 53, 54]);
roomsArray[57]:= newRoomTest(57, [-1, -1, -1, 53]);

SetLength(doorsArray, 57);
doorsArray[0]:= newDoorTest(0, [0, 1]);
doorsArray[1]:= newDoorTest(1, [0, 2]);
doorsArray[2]:= newDoorTest(2, [0, 3]);
doorsArray[3]:= newDoorTest(3, [2, 53]);
doorsArray[4]:= newDoorTest(4, [1, 5]);
doorsArray[5]:= newDoorTest(5, [1, 6]);
doorsArray[6]:= newDoorTest(6, [6, 12]);
doorsArray[7]:= newDoorTest(7, [6, 11]);
doorsArray[8]:= newDoorTest(8, [1, 4]);
doorsArray[9]:= newDoorTest(9, [5, 7]);
doorsArray[10]:= newDoorTest(10, [7, 9]);
doorsArray[11]:= newDoorTest(11, [8, 10]);
doorsArray[12]:= newDoorTest(12, [17, 23]);
doorsArray[13]:= newDoorTest(13, [20, 22]);
doorsArray[14]:= newDoorTest(14, [19, 21]);
doorsArray[15]:= newDoorTest(15, [18, 19]);
doorsArray[16]:= newDoorTest(16, [16, 18]);
doorsArray[17]:= newDoorTest(17, [15, 17]);
doorsArray[18]:= newDoorTest(18, [13, 15]);
doorsArray[19]:= newDoorTest(19, [13, 19]);
doorsArray[20]:= newDoorTest(20, [11, 13]);
doorsArray[21]:= newDoorTest(21, [33, 34]);
doorsArray[22]:= newDoorTest(22, [29, 33]);
doorsArray[23]:= newDoorTest(23, [26, 29]);
doorsArray[24]:= newDoorTest(24, [26, 28]);
doorsArray[25]:= newDoorTest(25, [28, 31]);
doorsArray[26]:= newDoorTest(26, [31, 32]);
doorsArray[27]:= newDoorTest(27, [25, 26]);
doorsArray[28]:= newDoorTest(28, [12, 25]);
doorsArray[29]:= newDoorTest(29, [12, 24]);
doorsArray[30]:= newDoorTest(30, [25, 27]);
doorsArray[31]:= newDoorTest(31, [27, 36]);
doorsArray[32]:= newDoorTest(32, [27, 35]);
doorsArray[33]:= newDoorTest(33, [35, 37]);
doorsArray[34]:= newDoorTest(34, [37, 39]);
doorsArray[35]:= newDoorTest(35, [37, 38]);
doorsArray[36]:= newDoorTest(36, [38, 41]);
doorsArray[37]:= newDoorTest(37, [41, 52]);
doorsArray[38]:= newDoorTest(38, [38, 40]);
doorsArray[39]:= newDoorTest(39, [40, 43]);
doorsArray[40]:= newDoorTest(40, [40, 42]);
doorsArray[41]:= newDoorTest(41, [42, 44]);
doorsArray[42]:= newDoorTest(42, [19, 20]);
doorsArray[43]:= newDoorTest(43, [28, 30]);
doorsArray[44]:= newDoorTest(44, [44, 45]);
doorsArray[45]:= newDoorTest(45, [45, 46]);
doorsArray[46]:= newDoorTest(46, [46, 47]);
doorsArray[47]:= newDoorTest(47, [46, 48]);
doorsArray[48]:= newDoorTest(48, [47, 51]);
doorsArray[49]:= newDoorTest(49, [48, 49]);
doorsArray[50]:= newDoorTest(50, [49, 50]);
doorsArray[51]:= newDoorTest(51, [53, 54]);
doorsArray[52]:= newDoorTest(52, [54, 55]);
doorsArray[53]:= newDoorTest(53, [56, 57]);
doorsArray[54]:= newDoorTest(54, [3, 56]);
doorsArray[55]:= newDoorTest(55, [7, 8]);
doorsArray[56]:= newDoorTest(56, [15, 16]);

First test:
Target : 50 (bottom left)
Source : 30 (boss room)

Compiled successfully in 265 ms.
Analysing room 49
Analysing room 48
Analysing room 46
Analysing room 47
Analysing room 51
Analysing room 45
Analysing room 44
Analysing room 42
Analysing room 40
Analysing room 38
Analysing room 37
Analysing room 39
Analysing room 35
Analysing room 29
Analysing room 33
Analysing room 34
Analysing room 26
Analysing room 28
TARGET ROOM FOUND!
Path to target: [28, 26, 29, 35, 37, 38, 40, 42, 44, 45, 46, 48, 49, 50].
Successfully executed.

Second test:
Target : 22
Source : 50

Compiled successfully in 265 ms.
Analysing room 20
Analysing room 19
Analysing room 21
Analysing room 18
Analysing room 16
Analysing room 15
Analysing room 17
Analysing room 23
Analysing room 13
Analysing room 14
Analysing room 11
Analysing room 6
Analysing room 1
Analysing room 4
Analysing room 0
Analysing room 2
Analysing room 53
Analysing room 54
Analysing room 55
Analysing room 3
Analysing room 56
Analysing room 57
Analysing room 5
Analysing room 7
Analysing room 8
Analysing room 10
Analysing room 9
Analysing room 12
Analysing room 24
Analysing room 25
Analysing room 26
Analysing room 28
Analysing room 30
Analysing room 31
Analysing room 32
Analysing room 29
Analysing room 33
Analysing room 34
Analysing room 27
Analysing room 35
Analysing room 37
Analysing room 38
Analysing room 40
Analysing room 42
Analysing room 44
Analysing room 45
Analysing room 46
Analysing room 47
Analysing room 51
Analysing room 48
Analysing room 49
TARGET ROOM FOUND!
Path to target: [49, 48, 46, 45, 44, 42, 40, 38, 37, 35, 27, 25, 12, 6, 11, 13, 15, 16, 18, 19, 20, 22].
Successfully executed.

charizowl

2012-08-27 14:46:34

Sorry to wake up this thread but it seems to be interesting =o

Eska seems to have something coming along. =P

Andres

2012-08-27 15:52:50

From: charizowl
Sorry to wake up this thread but it seems to be interesting =o

Eska seems to have something coming along. =P


Please avoid gravedigging, it is very frowned upon. I'm sure eska would have posted more if he had been so inclined.

Enslaved

2012-09-01 17:34:31

what you need is for it to turn guide mode on
that way it detects the highlighed rooms and follows the path