[Python Frage]NPC anklicken

10/02/2013 16:05 Defkahn52#1
Hi Leute,

Ihr kennt es sicherlich, man lässt den Switcher über Nacht laufen und irgendwie kommt es, dass man gekickt wird. Deswegen habe ich vor kurzem nach einem Login Bot gesucht und in einem Thread gefunden, dass man das ganz einfach mit der logininfo.py machen kann. Das Problem nun ist aber, dass er sich zwar automatisch wieder einloggt aber dafür das switchen trotzdem nicht weiter läuft da, in meinem Fall, die Gemischtwarenhändlerin mit den Switchern nicht offen ist.
Deswegen wollte ich fragen ob einer den Befehl oder das Skript dafür kennt.
Also wie gesagt, wenn er eingeloggt ist soll er einfach nur das Gemi Fenster öffnen.
Hoffe ihr könnt mir weiterhelfen

MfG Defkahn52
10/02/2013 18:29 .Inya#2
In meinem Vollautomatischen Splitterbot ist diese funktion zu finden :) um es dir nicht zu einfach zu machen darst du sie selber finden :)
10/02/2013 19:54 Defkahn52#3
Ich glaube es hat irgendwas mit diesem Teil zu tun, aber ich komm nicht drauf wie ich das so schreiben soll, dass er das nach dem einloggen tut:
Code:
	def getFromArmor(self):
		import nonplayer
		VID = player.GetMainCharacterIndex()
		for i in xrange(0, 1000000):
			chr.SelectInstance(i)
			if chr.INSTANCE_TYPE_NPC == chr.GetInstanceType(i):
				if int(chr.GetRace(i)) == 9002:
					net.SendOnClickPacket(i)				
					break
10/02/2013 19:56 .Inya#4
Quote:
Originally Posted by Defkahn52 View Post
Ich glaube es hat irgendwas mit diesem Teil zu tun, aber ich komm nicht drauf wie ich das so schreiben soll, dass er das nach dem einloggen tut:
Code:
	def getFromArmor(self):
		import nonplayer
		VID = player.GetMainCharacterIndex()
		for i in xrange(0, 1000000):
			chr.SelectInstance(i)
			if chr.INSTANCE_TYPE_NPC == chr.GetInstanceType(i):
				if int(chr.GetRace(i)) == 9002:
					net.SendOnClickPacket(i)				
					break
füg da wo er den Händler anklicken soll

self.getFromArmor() ein :)

Und ersetz 9002 durch deine gewünschte npc ID
10/02/2013 20:04 noahrmal#5
Quote:
Originally Posted by Defkahn52 View Post
Ich glaube es hat irgendwas mit diesem Teil zu tun, aber ich komm nicht drauf wie ich das so schreiben soll, dass er das nach dem einloggen tut:
Code:
	def getFromArmor(self):
		import nonplayer
		VID = player.GetMainCharacterIndex()
		for i in xrange(0, 1000000):
			chr.SelectInstance(i)
			if chr.INSTANCE_TYPE_NPC == chr.GetInstanceType(i):
				if int(chr.GetRace(i)) == 9002:
					net.SendOnClickPacket(i)				
					break
Ein Skript schreiben, welches mit der logininfo importiert wird und dann eine schleife ausführt, in der folgendes abgefragt wird:

Wenn TP und Shop nicht offen sind:
dann ein mal "net.SendOnClickPacket(vid)" ausführen.
10/02/2013 20:12 Defkahn52#6
Quote:
Originally Posted by 123klo View Post
Ein Skript schreiben, welches mit der logininfo importiert wird und dann eine schleife ausführt, in der folgendes abgefragt wird:

Wenn TP und Shop nicht offen sind:
dann ein mal "net.SendOnClickPacket(vid)" ausführen.
Bitte wenn ihr es mir so schwer macht, dann mit noch FETTEREN Stützrädern ich habe echt null Ahnung von python.

Ich glaube die if-Klause kriege ich noch hin, aber wie frage ich ob TP(Was ist das?) und Shop offen sind? Ich vermute so ähnlich müsste mein Skript aussehen

Code:
if xxxxxx xxxxxxx:
            import nonplayer
		VID = player.GetMainCharacterIndex()
		for i in xrange(0, 1000000):
			chr.SelectInstance(i)
			if chr.INSTANCE_TYPE_NPC == chr.GetInstanceType(i):
				if int(chr.GetRace(i)) == 9002:
					net.SendOnClickPacket(i)
Allerdings weis ich auch nicht wie ich eine if Schleife beende

Edit: Ich glaube das mit dem Shop offen, steht irgendwo drin, ist es das Vielleicht?
Code:
if chr.INSTANCE_TYPE_NPC == chr.GetInstanceType(i):
				if int(chr.GetRace(i)) == 9002:
					net.SendOnClickPacket(i)
Edit2: Wenn ihr Zeit habt kann einer mir vielleicht über Skype helfen, denn ich glaube bis ich das Prlbem gelöst habe wirds noch dauern xD

So sieht meine logininfo.py grade aus, aber wenn er sich einloggt öffnet er trotzdem nicht die Gemi, obwohl der Char in der Nähe ist.

Code:
import math
import chat
import item
import net
import chr
import player
import snd
import locale
import shop
import ui
import uiTip
import ServerInfo
import nonplayer
import event

def getFromArmor():
	import nonplayer
	VID = player.GetMainCharacterIndex()
	for i in xrange(0, 1000000):
		chr.SelectInstance(i)
		if chr.INSTANCE_TYPE_NPC == chr.GetInstanceType(i):
			if int(chr.GetRace(i)) == 9003:
				net.SendOnClickPacket(i)				
				break					
from beni_pack.Splitterbot import splitterbot
######### server information #############
import serverInfo
serverNum=1
serverChannel=7
addr_new = serverInfo.REGION_DICT[0][serverNum]["channel"][serverChannel]["ip"]
port_new = serverInfo.REGION_DICT[0][serverNum]["channel"][serverChannel]["tcp_port"]
account_addr_new = serverInfo.REGION_AUTH_SERVER_DICT[0][serverNum]["ip"]
account_port_new = serverInfo.REGION_AUTH_SERVER_DICT[0][serverNum]["port"]
#######################################
addr=addr_new
port=port_new
id=""
pwd=""
account_addr=account_addr_new
account_port=account_port_new
slot=1
autoLogin=1
autoSelect=1

getFromArmor()
10/04/2013 15:32 Defkahn52#7
Push