PDA

View Full Version : Xenobot - my feelings after using it and how to make bot better.



dedi
09-02-2013, 10:50 AM
Hi there. First of all I want to say that I do not want to flame or offend anyone. I want to share my view on botting.

I started on BlackD Proxy times, later was using Elfbot, Neobot, IBot. Now I started to use Xenobot, because I believe it CAN be best bot on market.
Yes, I say "CAN", because it is not. I was always using bot to work better than a humman. In all ways, not only faster reaction. Making advanced scripts was my passion since blackd.

DarkstR is doing great job, but his bot has lack of some usefull functions. Another problem is, that DarkstaR do not know how his user-friendly features affect the most advanced scripts.


The issue is that if we skip waypoints when the Walker is stuck, it can cause the script to mess up. This is when you see somebody standing in spawn getting killed by Wyrms as they spam "Hi deposit all yes." Not only is it dangerous but it's easy to detect.


This adds a layer of complexity. People will neglect to do it, like they have with every other advanced option they have been given, and then blame the bot when it doesn't work or gets them banned.

1) Here is an example:
I made script for Sea Serpents with lure mode (to make more exp/h). It works like this - when you levitate down to a cave it turn off targeting, then walk to the middle of cave (node, because can't use stand - walker was stucking when sea serpent blocked spot) and turn targeting on.

Where is the problem? Here:

http://img600.imageshack.us/img600/5378/m40i.jpg

It was't big problem in this script because simple lua could solve the problem:


--Target on if stucked
Module.New("AntiStuck", function(module)
if ( standTime(30) ) then
Targeting.Start()
end
end)

function standTime(timesec)
local curtime = os.time()
local curpos = Self.Position()
while (Self.Position().x == curpos.x and Self.Position().y == curpos.y and Self.Position().z == curpos.z) do
if (os.time() - curtime >= timesec) then
return true
end
wait(1000)
end
return false
end
Now imagine what happen if your bot get stuck in this way while you bot deep banuta on EK, where you lure 3 medusa, 3 serpent spawns and 2 hydras.

How DarkstaR can help us making scripts like this without making bot much more complicated for people that are not good in scripting?
It is really simple, just add third option to walker (next to Node and Stand): Walk, which works in same way as Stand, with the exception that it will skip to next waypoint/label/script if path is blocked (ofc if there is a monster which has option "If Stuck" it will attack the monster, then try to walk again and if can't find path again it will just skip)


2) Another problem: there is no ShootAble function.
In what way it could be usefull? Just check this screenshot.

http://img819.imageshack.us/img819/9094/uo0115w.jpg
Screen take from forum, but it still shows where is the problem.

I need this function in my Area Rune shooter also. Now I use "Map.isTileWalkable", but it is not the same and it cannot replace it.
I know it is not that easy as it looks like, so it is not a priority. (I have read a thread on TPForum (http://tpforums.org/forum/threads/5781-How-the-IsShootable-works-(BlocksMissile-etc)), where you posted)


3) What more? There is no access to current states of bot (example: you can not check if Targeting is currently enabled or not).
You can say it is useless, but I will give you how it can be usefull.

Let's go back to my sea serpent script (with lure mode).
I am luring sea serpents. Two of them are already close to me and bot start to use "utito tempo", but bot keeps to luring (you can find 4 in cave)



Targeting.State() --returns true if targeting is enabled, false otherwise


How the script could looks like:
Module.New("Utito", function(module)
local Creatures = {"Sea Serpent"}
if (Targeting.State() andSelf.MonstersAround(2, unpack(Creatures)) >= 2 and Utito and Self.Mana() >= 600) then
Self.Cast("utito tempo", 290)
module:Delay(10000)
end
end)

4) While we are at bot states, let's see current character states.
I know they already exist (Support > Condition Manager).

Why we do not have functions like this:


Self.PZone() --returns true when character stays in protection zone, false otherwise
Self.Hasted() --returns true when character is hasted, false otherwise


For what we can use it ?
Advanced anty-paralize (which use haste and healing spells if haste is on cooldown)
Auto-manashield - which use energy rings and mana shield if you do not have any rings
Auto haste (which you can turn on/off any time in scripter)


5) Another lack of functionality. Targeting is really simpe. You can call it "primitive"...

It support only one spell, when we got in tibia all those strong strikes:
exori max flam/vis/tera/frigo
exori gran flam/vis/tera/frigo
exori amp
flam/vis/tera/frigo

No categories function. It is really waste of time to add 10 monsters, every with same settings of chasing at low health and stand if they are 90<
Or it is immposible to attack only when there is 3 monsters on some kind (like medusa, serpent spawn and hydra)
It will count separately (lmedusa, serpent spawn and hydra), but will not attack if you have on screen 2 medusae and 1 serpent spawn.

6) Laziness? Why do we have:

LootMessageProxy.New(key)
while there is no function to read: 12:46 Using one of 780 mana potions...

7) And the last thing - I miss a really usefull function:
SetSettings - change ANY feature of bot, useable in scripter. I know function LoadSettings already exist, but it is too complicated and impossible to use.

Let's say I have yalahar grim reaper script for paladin. I always was using pathfinding like this:
Module.New("Pathfinder", function(module)
if ( Self.Position().y <= 32154 ) then --this position is only example
SetSettings("Special Areas//Blok1//Enabled", "Targeting")
else
SetSettings("SpecialAreas//Blok1//Enabled", "None")
end
end)

It was luring grim reaper and then running around in desired area.


I have no idea why some functions are realsed, but we do not have access to them - like states of character and bot. In my opinion this is due to lack of imagination of DarkstaR. He does not seems those functions usefull for normal botuser (which mostly can only load settings, start bot and eventually change setup).

The question is about scripters which know how to write a script? I noticed lack of this functions after 5 days of using XenoBot. The possibilities are limited by our imagination.


Sorry if my english isn't perfect, but it should be good enough to show my point of view.

Regards,
Dedi

Nakuu
09-02-2013, 11:12 AM
Pretty much agree with (almost) all you said. About 'isShootable' it can be done already in .lua - I don't think Tibia provides such information to make it any easier to implement than simple write an algorithm to detect walls etc.

Personally I am also missing the function such as (Walker.isStuck()) that would return true/false. Would make it a lot easier to do few things without having to create another .xbst with different Targeting/Walker settings. Also having additional 'flag' in panels that would allows us to create few panels of same module in one .xbst file would be perfect:

[Example]
<panel name="Targeting" id="1"></panel>
<panel name="Targeting" id="2"></panel>
<panel name="Targeting" id="3"></panel>
so we could loadSettings like this:
loadSettings(name, id)

Having to create different .xbst files just to load different settings is damn annoying for both script makers and users (having to keep those files makes Settings folder messy and makes it harder to find anything in Load Settings window)

Anyway... SIGNED :)

dedi
09-02-2013, 11:15 AM
Pretty much agree with (almost) all you said. About 'isShootable' it can be done already in .lua - I don't think Tibia provides such information to make it any easier to implement than simple write an algorithm to detect walls etc.

As I've read on this TP Forum tibia provides only flags about tiles and show if you are able to should though exact sqm (not form your position, but in general).


Would make it a lot easier to do few things without having to create another .xbst with different Targeting/Walker settings. Also having additional 'flag' in panels that would allows us to create few panels of same module in one .xbst file would be perfect:

[Example]
<panel name="Targeting" id="1"></panel>
<panel name="Targeting" id="2"></panel>
<panel name="Targeting" id="3"></panel>
so we could loadSettings like this:
loadSettings(name, id)

Having to create different .xbst files just to load different settings is damn annoying for both script makers and users (having to keep those files makes Settings folder messy and makes it harder to find anything in Load Settings window)

SetSettings would solve problem.


Anyway thanks for your feedback :)

Tripkip
09-02-2013, 11:45 AM
Agreed, We could use some extra functions, such as Area/TileShootAble. , self.Haste and ifWalkerStuck Etc!!

DarkstaR
09-03-2013, 01:39 PM
Your post is very well written and does outline some things I need to work on. These are mostly know things with know fixes and little time to get them done. One suggestion I do like that has not been said before, though, is abstracting waypoint skipping to only special waypoint types. I'll try to get some of these hammered out soon.

dedi
09-03-2013, 01:45 PM
Nice to hear :)

Avani
09-03-2013, 02:44 PM
Great post

Agreed :)

RoxZin xD
09-03-2013, 02:58 PM
You've shown some great points there. I had the same feeling when I first tried XB, it has a great potential to be the best bot, but lacks these you've mentioned and a few more, such as simple cavebot actions that doesn't need a .lua script running, or some more. I didn't try on hardcore places, for ~200 it works great, but when it comes to higher than that you need to know a lot about how the bot works and how to make it work the way you desire, and that's a point I haven't reached yet.

Anyways, all your points are completely necessary, I can't believe the scripters here survive without those functions, I surely wouldn't last long.

Xeromex
09-03-2013, 03:11 PM
Great functions, I also think these would bring in some more costumers.
Functions that are also missing are the Self.<skill>, like Self.Sword() etc.

100% Signed

Biesje Team
09-03-2013, 03:41 PM
Nice work, I completely agree, thumbs up!

Mish
09-14-2013, 06:28 PM
@dedo I'd like to know which bot you are currently using then. Ibot?


I can only compare Xeno to RBP and have got to say that it's a lot better because it's smoother and seems less clunky.

The only thing bothering me about Xeno is how user-unfriendly it is and the lack of advanced functions. Some things are more complicated than they need to be, as you already pointed out with the targeting.

DarkstaR
09-14-2013, 06:43 PM
You'll see some of this in the upcoming update.

Xeno Scripts
09-14-2013, 06:58 PM
You'll see some of this in the upcoming update.

I can't wait for this update, very curious!

Eion
09-14-2013, 07:22 PM
dedi Very good post. I agree with every issue.


You'll see some of this in the upcoming update.

Cant wait for this....

dedi
09-14-2013, 07:37 PM
You'll see some of this in the upcoming update.

I can't wait :D


@dedo I'd like to know which bot you are currently using then. Ibot?


I can only compare Xeno to RBP and have got to say that it's a lot better because it's smoother and seems less clunky.

The only thing bothering me about Xeno is how user-unfriendly it is and the lack of advanced functions. Some things are more complicated than they need to be, as you already pointed out with the targeting.

I bot on Xeno, but not those hardcore spawns like banuta, vengoth etc. I sit at deeplings and seas