Deprecated: The behavior of unparenthesized expressions containing both '.' and '+'/'-' will change in PHP 8: '+'/'-' will take a higher precedence in /home/iano/public_html/tpforums-vb5/forum/includes/class_core.php on line 5842

PHP Warning: Use of undefined constant MYSQL_NUM - assumed 'MYSQL_NUM' (this will throw an Error in a future version of PHP) in ..../includes/init.php on line 165

PHP Warning: Use of undefined constant MYSQL_ASSOC - assumed 'MYSQL_ASSOC' (this will throw an Error in a future version of PHP) in ..../includes/init.php on line 165

PHP Warning: Use of undefined constant MYSQL_BOTH - assumed 'MYSQL_BOTH' (this will throw an Error in a future version of PHP) in ..../includes/init.php on line 165

PHP Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in ..../includes/functions_navigation.php on line 588

PHP Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in ..../includes/functions_navigation.php on line 612

PHP Warning: Use of undefined constant misc - assumed 'misc' (this will throw an Error in a future version of PHP) in ..../global.php(29) : eval()'d code(6) : eval()'d code on line 1

PHP Warning: Use of undefined constant index - assumed 'index' (this will throw an Error in a future version of PHP) in ..../global.php(29) : eval()'d code(6) : eval()'d code on line 1

PHP Warning: Use of undefined constant misc - assumed 'misc' (this will throw an Error in a future version of PHP) in ..../includes/class_bootstrap.php(1422) : eval()'d code(4) : eval()'d code on line 1

PHP Warning: Use of undefined constant index - assumed 'index' (this will throw an Error in a future version of PHP) in ..../includes/class_bootstrap.php(1422) : eval()'d code(4) : eval()'d code on line 1

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6

PHP Warning: Use of undefined constant onlinestatusphrase - assumed 'onlinestatusphrase' (this will throw an Error in a future version of PHP) in ..../includes/class_core.php(4684) : eval()'d code on line 6
[9.44] TheLazyHunter - Page 2
Page 2 of 3 FirstFirst 123 LastLast
Results 11 to 20 of 23

Thread: [9.44] TheLazyHunter

  1. #11
    Senior Member
    Join Date
    May 2007
    Posts
    448

    RE: [9.44] TheLazyHunter

    Keeping distance sure take some advanced programming, I have some milstones left to rea h before I get even close to that but I will certanily try to get there!

  2. #12

    RE: [9.44] TheLazyHunter

    I think Neobot used the code from OTserv, the code that keeps distance from players.. check that out?

    EDIT:
    Check here, https://github.com/opentibia/otserv/blob/master/monster.cpp (maybe on line 1140?) :P

  3. #13
    Senior Member
    Join Date
    May 2007
    Posts
    448

    RE: [9.44] TheLazyHunter

    Looks interesting, Ill have a look at it! Thanks!

  4. #14
    Junior Member
    Join Date
    Jan 2012
    Posts
    10

    RE: [9.44] TheLazyHunter

    Xavbot dot com fourmz plxxx

  5. #15

    RE: [9.44] TheLazyHunter

    yeah, I agreed with charlesc. If your going serious, a dedicated forum is the way to go

    Gimmie a shout if you need help setting it up

  6. #16
    Senior Member
    Join Date
    May 2007
    Posts
    448

    RE: [9.44] TheLazyHunter

    Even if that was the case, theres alot work to do to even get close to a decent enough tool that would have use for a dedicated forum.. But time will tell

    Currently creating a more sophisticated attacker, when I get this to work propely Ill add looting functions aswell.

  7. #17
    Junior Member
    Join Date
    Jan 2012
    Posts
    10

    RE: [9.44] TheLazyHunter

    Quote Originally Posted by Xavious
    Even if that was the case, theres alot work to do to even get close to a decent enough tool that would have use for a dedicated forum.. But time will tell

    Currently creating a more sophisticated attacker, when I get this to work propely Ill add looting functions aswell.
    Cant Wait!!

  8. #18
    Senior Member
    Join Date
    May 2007
    Posts
    448

    RE: [9.44] TheLazyHunter

    So far whats been added is the heal friend function I mentioned earlier, an anti paralyze function(automatically uses method chosen as High heal priority when regular auto heal is enabled) and a decent working targeting. The targeting works somewhat like Elfbots targeting with fewers functions and ability to save and load targeting settings. Basic looter is also added but need more testing before release. Until I make a decent walker I will probably only upload it as a beta under the unverified board and ask Jo3 to verify when the walker is done.

    Then the next goal will be to make scripts and expand hotkeys posibilities. If anyone has suggestions or questions please reply here or send a private message

  9. #19

    RE: [9.44] TheLazyHunter

    Apart from the hotkeys you got in Classic bot as always a nice additon would be interacting with depots, tradeing/talking with NPC's

    And again, an example of how to keep distance from target (In python, author is wisling@tibiaauto.net | Thread here)
    [code=python]
    import time
    def getPathToEx (selfPos, targetPos, minDist, maxDist):
    ab = time.clock()
    if selfPos['z'] != targetPos['z']:
    return False;

    currentDist = max(abs(selfPos['x'] - targetPos['x']),abs(selfPos['y'] - targetPos['y']));

    if(currentDist == maxDist):
    return False;

    if (selfPos['x'] - targetPos['x']) <= 0: dxMin = maxDist;
    else: dxMin = 0;
    if (selfPos['x'] - targetPos['x']) >= 0: dxMax = maxDist;
    else: dxMax = 0;
    if (selfPos['y'] - targetPos['y']) <= 0: dyMin = maxDist;
    else: dyMin = 0;
    if (selfPos['y'] - targetPos['y']) >= 0: dyMax = maxDist;
    else: dyMax = 0;

    tile = 0;

    minWalkPos = {};
    tmpPos = {};

    minWalkDist = 100;
    maxTaxi = -1;

    tmpDist = -1;
    tmpWalkDist = -1;
    tmpMaxTaxi = -1;

    tryDist = maxDist;

    point = [];

    while tryDist >= minDist:
    for y in range(targetPos['y'] - dyMin, targetPos['y'] + dyMax + 1):
    for x in range(targetPos['x'] - dxMin, targetPos['x'] + dxMax + 1):
    tmpDist = max(abs(targetPos['x'] - x),abs(targetPos['y'] - y));
    if tmpDist == tryDist:
    point += [[x,y]];
    while len(point) > 0:
    p = point.pop(random.randint(0,len(point)-1));
    x = p[0];
    y = p[1];

    tmpWalkDist = abs(selfPos['x'] - x) + abs(selfPos['y'] - y);
    tmpPos = {};
    tmpPos['x'] = x;
    tmpPos['y'] = y;
    tmpPos['z'] = selfPos['z'];

    tmpMaxTaxi = abs(targetPos['x'] - x) + abs(targetPos['y'] - y)

    #print tmpPos,(tmpWalkDist < minWalkDist and tmpMaxTaxi+1 >= maxTaxi ),(tmpMaxTaxi >= tmpWalkDist and tmpMaxTaxi > maxTaxi),minWalkPos.get('x',0)-tmpPos.get('x',0),tmpPos.get('y',0)-minWalkPos.get('y',0);
    #print tmpWalkDist,minWalkDist,tmpMaxTaxi,maxTaxi;
    if (tmpWalkDist < minWalkDist and tmpMaxTaxi+1 >= maxTaxi ) or (tmpMaxTaxi >= tmpWalkDist and tmpMaxTaxi > maxTaxi) or minWalkDist == 100:
    if tmpPos != selfPos:
    if tamap.isPointAvailable(x, y, selfPos['z']) and tamap.getPointUpDown(x, y, selfPos['z']) == 0:
    minWalkDist = tmpWalkDist;
    minWalkPos = tmpPos;
    maxTaxi = tmpMaxTaxi;



    if minWalkDist != 100:
    return minWalkPos;

    tryDist -= 1;
    return False;

    def facing(direction):
    return [-abs(direction%4-1)+1,-abs(direction%4-2)+1];

    class ModuleKeepDistance:
    RUN = True;
    walkTo = False;
    zCoordinate = tareader.readSelfCharacter()['z'];
    tareader.setMemIntValue(0x7E4ED4, tareader.readSelfCharacter()['z']);

    def getName(self):
    tasender.sendTAMessage("Start KeepDistance to Toggle with \'%ta dist\'");
    return "Keep Distance 9.4";

    def getVersion(self):
    return "1.0";

    def getFunDef(self,nr):
    if (nr==0): return (0,800,self.findPath);
    if (nr==1): return (0,300,self.walkToPoint);
    if (nr==2): return (1,0,self.walkToPoint2);
    if (nr==3): return (2,0,self.toggle);
    if (nr==4): return (0,800,self.bypassZFloor);
    return ();

    def getConfigParam(self,nr):
    if (nr==0): return ('minDistance','Def:2, Distance to stay over.');
    if (nr==1): return ('maxDistance','Def:3, Max Distance to try for.');
    if (nr==2): return ('hardCreatures','Eg:demon,fury,ghoul,skeleton (List of hard creatures to keep minDist+1 distance from)');
    if (nr==3): return ('followCreatures', 'Eg:Fire Devil ("Monsters that you want to follow that are either really easy, or distance fighters)');
    return;

    def bypassZFloor(self, params):
    if tareader.readSelfCharacter()['z']!=self.zCoordinate:
    self.zCoordinate = tareader.readSelfCharacter()['z'];
    tareader.setMemIntValue(0x800FBC, tareader.readSelfCharacter()['z']) # 9.4
    return;

    def findPath (self, params):
    if self.RUN:
    me = tareader.readSelfCharacter();
    targID = tareader.getAttackedCreature();
    if targID != 0:
    targ = tareader.getCharacterByTibiaId (targID);
    try: minDist = int(params['minDistance']);
    except: minDist = 3;
    try: maxDist = int(params['maxDistance']);
    except: maxDist = 100;

    hList = params['hardCreatures'].lower().split(',');
    isHard = int(hList.count(targ['name'].lower()) != 0);
    minDist += isHard;

    face = facing(targ['lookDirection']);
    monToMe = [(me['x']-targ['x']),(me['y']-targ['y'])];
    isRunning = int((face[0]*monToMe[0] + face[1]*monToMe[1]) < 0);#will bring to 1 less than maxDist if monster is running
    #print "first:", isRunning;
    followCreature = params['followCreatures'].lower().split(',');
    isRunning = int(followCreature.count(targ['name'].lower()) != 0);
    #//print "sec:", isRunning;

    if isRunning:
    maxDist = 1;
    minDist = 1;

    isToofar = max(abs(me['x'] - targ['x']),abs(me['y'] - targ['y'])) > maxDist;
    isNotBestDiag = abs(me['x'] - targ['x'])+abs(me['y'] - targ['y']) < minDist*2;
    isClose = max(abs(me['x'] - targ['x']),abs(me['y'] - targ['y'])) <= minDist;
    if isToofar or (isNotBestDiag and isClose):
    #print {'x':me['x'],'y':me['y'],'z':me['z']},{'x':targ['x'],'y':targ['y'],'z':targ['z']}
    self.walkTo = getPathToEx({'x':me['x'],'y':me['y'],'z':me['z']},{'x':targ['x'],'y':targ['y'],'z':targ['z']},minDist,minDist)
    #print self.walkTo['x'] - me['x'],self.walkTo['y'] - me['y'];
    self.walkToPoint(params);
    return;

    def walkToPoint (self, params):
    if tareader.getAttackedCreature() == 0:
    self.walkTo = False;
    return;
    targ = tareader.getCharacterByTibiaId (tareader.getAttackedCreature());
    if targ['hpPercLeft'] == 0:
    self.walkTo = False;
    return;
    if self.walkTo != False:
    tareader.writeGotoCoords (self.walkTo['x'],self.walkTo['y'],self.walkTo['z']);
    return;

    def walkToPoint2 (self, params,(type,channel,nick,message)):
    me = tareader.readSelfCharacter();
    if nick == me['name'] and self.walkTo != False:
    tareader.writeGotoCoords (self.walkTo['x'],self.walkTo['y'],self.walkTo['z']);
    return;

    def toggle (self, params, message):
    if message == "%ta dist":
    self.RUN = not self.RUN;
    tasender.sendTAMessage("Keep Distance is = "+str(self.RUN));
    return;

    tibiaauto.registerPlugin(ModuleKeepDistance);


    #print getPathToEx({'x':0,'y':2,'z':0},{'x':0,'y':0,'z':0 },6,6+1)
    [/code]

  10. #20
    Senior Member
    Join Date
    May 2007
    Posts
    448

    RE: [9.44] TheLazyHunter

    Since I dont want to use packets, as sending bad or incorrect packets probably have a good chance to your account deleted I have to figure out where every item on your gamewindow is located which can be very hard(at least for me as Im fairly new to the subject) it will be hard to implement interacting with npc for buying or selling items. I however hope that I can learn more on how its used to eventually add such functions. But for now it will not be added.

    As I update map reading I will try to implement functions to keep distance from targets aswell. Its not very difficult to make your character run away from creatures but finding the best, and even possible path to run in is quite hard as I need to read tile information to see which are and are not blocking. Thanks to Tibia API and other open source projects I believe I can get some basic distance keeper in a while

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •