What's new

- Skrypt Keep distance skrypt

Status
Not open for further replies.

Axosword

New User
Joined
Apr 25, 2009
Messages
9
Reaction score
1
Witam chcia?bym podexpi? troch? mojego palladyna jednak mam pewien problem dok?adnie moja posta? czasami nie radzi sobie z walk? w zwarciu zacz??em szuka? wi?c skryptu Keep distance jednak nigdzie nie mog? go znale?? . Wi?c je?li kto? m?g?by w jaki? spos?b mi pom?c by?bym bardzo wdzi?czny z g?ry dzi?kuj?
 

Fardos

Senior User
Joined
Mar 21, 2009
Messages
868
Reaction score
34
Odp: Keep distance skrypt

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;

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

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);
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 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)

Oczywi?cie python script (.py)

 

arko

User
Joined
Jul 27, 2008
Messages
30
Reaction score
0
Odp: Keep distance skrypt

da ktos aktualny keep dist z oficialnej strony TA ^^ ten na gorze nie dziala ;s tzn zaznaczam enable yes i nic nie oddala sie i nie wali ;s.
A na tibia auto nie moge sie zarejestrowac nie da sie
 

chudek

Active User
Joined
Oct 31, 2009
Messages
68
Reaction score
0
Odp: Keep distance skrypt

nie rozumiem po co dajecie skrypty kt?re nie dzia?aj?,sprawdzcie je chocia? przed
do??czam si? do pro?by o skrypt
 
Status
Not open for further replies.
Top