commit
762313e388
16 changed files with 4572 additions and 0 deletions
-
1IonJunkies-Merc/banks.txt
-
4bait/banks.txt
-
4banks.txt
-
4epilectrik/banks.txt
-
0file
-
3im bait/banks.txt
-
4im-bait/banks.txt
-
10mq.py
-
0mtron/banks.bak
-
1mtron/banks.txt
-
571mutant function.py
-
630mutant function.txt
-
661mutants.py
-
526mutants_localbbs.py
-
812mutants_paths.py
-
1341qmutants.py
@ -0,0 +1 @@ |
|||
done,tra 2000,look,drop monster-bait,east,east,east,east,east,east,east,east,east,east,east,drop nuclear-decay,!deposit,!stock,get nuclear-decay,tra 2000,look,get monster-bait,!return,look,done |
|||
@ -0,0 +1,4 @@ |
|||
done,tra 2000,drop monster-bait,south,!deposit,drop nuclear-decay,!stock,get nuclear-decay,north,get monster-bait,!return,done |
|||
done,tra 2000,drop monster-bait,east,east,east,!deposit,drop nuclear-decay,!stock,get nuclear-decay,tra 2000,get monster-bait,!return,done |
|||
done,tra 2000,drop monster-bait,south,south,south,south,south,south,west,west,west,north,!deposit,drop nuclear-decay,!stock,get nuclear-decay,tra 2000,get monster-bait,!return,done |
|||
|
|||
@ -0,0 +1,4 @@ |
|||
done,tra 2000,south,!deposit,drop nuclear-decay,!stock,get nuclear-decay,!return,done |
|||
done,tra 2000,east,east,east,!deposit,drop nuclear-decay,!stock,get nuclear-decay,!return,done |
|||
done,tra 2000,south,south,south,south,south,south,west,west,west,north,!deposit,drop nuclear-decay,!stock,get nuclear-decay,!return,done |
|||
|
|||
@ -0,0 +1,4 @@ |
|||
done,tra 2000,drop monster-bait,south,!deposit,drop nuclear-decay,!stock,get nuclear-decay,north,get monster-bait,!return,done |
|||
done,tra 2000,drop monster-bait,east,east,east,!deposit,drop nuclear-decay,!stock,get nuclear-decay,tra 2000,get monster-bait,!return,done |
|||
done,tra 2000,drop monster-bait,south,south,south,south,south,south,west,west,west,north,!deposit,drop nuclear-decay,!stock,get nuclear-decay,tra 2000,get monster-bait,!return,done |
|||
|
|||
@ -0,0 +1,3 @@ |
|||
done,tra 2400,drop monster-bait,north,!deposit,drop nuclear-decay,!stock,get nuclear-decay,south,get monster-bait,!return,done |
|||
done,tra 2000,drop monster-bait,south,south,south,south,south,south,west,west,west,north,!deposit,drop nuclear-decay,!stock,get nuclear-decay,tra 2000,get monster-bait,!return,done |
|||
|
|||
@ -0,0 +1,4 @@ |
|||
done,tra 2000,drop monster-bait,south,!deposit,drop nuclear-decay,!stock,get nuclear-decay,north,get monster-bait,!return,done |
|||
done,tra 2000,drop monster-bait,east,east,east,!deposit,drop nuclear-decay,!stock,get nuclear-decay,tra 2000,get monster-bait,!return,done |
|||
done,tra 2000,drop monster-bait,south,south,south,south,south,south,west,west,west,north,!deposit,drop nuclear-decay,!stock,get nuclear-decay,tra 2000,get monster-bait,!return,done |
|||
|
|||
@ -0,0 +1,10 @@ |
|||
import paho.mqtt.client as mqtt #import the client1 |
|||
broker_address="192.168.86.27" |
|||
#broker_address="iot.eclipse.org" |
|||
print("creating new instance") |
|||
client = mqtt.Client("P1") #create new instance |
|||
client.username_pw_set("homeassistant", "oes5gohng9gau1Quei2ohpixashi4Thidoon1shohGai2mae0ru2zaph2vooshai") |
|||
print("connecting to broker") |
|||
client.connect(broker_address) #connect to broker |
|||
username = "butthead three" |
|||
client.publish("mutants", username + "just died") |
|||
@ -0,0 +1 @@ |
|||
done,tra 2000,look,drop monster-bait,east,east,east,east,east,east,east,east,east,east,east,east,east,east,east,east,east,east,east,east,east,east,east,east,!sell,north,north,north,north,north,north,drop nuclear-decay,!deposit,!stock,get nuclear-decay,tra 2000,look,get monster-bait,!return,look,done |
|||
@ -0,0 +1,571 @@ |
|||
#search a list |
|||
def search(self, list, platform): |
|||
for i in range(len(list)): |
|||
if list[i] == platform: |
|||
return True |
|||
return False |
|||
|
|||
#Reup Ions |
|||
def convert_items(self): |
|||
for item_l in self.local_items: |
|||
for item in convert_list: |
|||
if item_l == item: |
|||
self.command_str.emit("get "+item+"\r\n") |
|||
self.command_str.emit("con "+item+"\r\n") |
|||
self.local_items.remove(item_l) |
|||
|
|||
#Farms valuable stuff |
|||
def farm_items(self): |
|||
for item_l in self.local_items: |
|||
for item in farm_list: |
|||
if item_l == item: |
|||
self.command_str.emit("get "+item+"\r\n") |
|||
self.local_items.remove(item_l) |
|||
self.sell_list.append(item_l) |
|||
self.no_action_cnt = 0 |
|||
|
|||
#Sell items |
|||
def sell_items(self): |
|||
print(self.sell_list) |
|||
while len(self.sell_list) > 0: |
|||
item_l=self.sell_list[0] |
|||
self.sell_list.pop(0) |
|||
if item_l != "Nuclear-Decay": |
|||
self.command_str.emit("sell "+item_l+"\r\n") |
|||
time.sleep(.25) |
|||
|
|||
#Remove friends from monster list |
|||
def remove_friends(self): |
|||
for friend in friend_list: |
|||
try: |
|||
self.local_monsters.remove(friend) |
|||
except: |
|||
pass |
|||
|
|||
#Flushes keyboard |
|||
def flush_input(self): |
|||
try: |
|||
import msvcrt |
|||
while msvcrt.kbhit(): |
|||
msvcrt.getch() |
|||
except ImportError: |
|||
import sys, termios |
|||
termios.tcflush(sys.stdin, termios.TCIOFLUSH) |
|||
|
|||
#Decode incoming information |
|||
def decode_line(self,line): |
|||
result = "" |
|||
if line.decode('cp1252') != "": |
|||
ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])') |
|||
result = ansi_escape.sub('', line.decode('cp1252').strip('\n')) |
|||
self.console.append(result) |
|||
return result |
|||
|
|||
#initiate combat |
|||
def combat_start(self): |
|||
self.command_str.emit("combat " + self.local_monsters[0]+"\r\n") |
|||
self.in_combat = True |
|||
self.heal = True |
|||
self.path_step = 0 |
|||
self.no_action_cnt = 0 |
|||
|
|||
#process wander |
|||
def wander_process(self, result): |
|||
#area clear |
|||
if result.find("north - area continues.") != -1 or result.find("north - open gate.") != -1: |
|||
self.direction_list.append("north") |
|||
if result.find("south - area continues.") != -1 or result.find("south - open gate.") != -1: |
|||
self.direction_list.append("south") |
|||
if result.find("east - area continues.") != -1 or result.find("east - open gate.") != -1: |
|||
self.direction_list.append("east") |
|||
if result.find("west - area continues.") != -1 or result.find("west - open gate.") != -1: |
|||
self.direction_list.append("west") |
|||
|
|||
#are there monsters |
|||
if result.find("You see shadows to the") != -1: |
|||
try: |
|||
if result.find("north") != -1: |
|||
self.direction_list.remove("north") |
|||
if result.find("south") != -1: |
|||
self.direction_list.remove("south") |
|||
if result.find("east") != -1: |
|||
self.direction_list.remove("east") |
|||
if result.find("west") != -1: |
|||
self.direction_list.remove("west") |
|||
except: |
|||
pass |
|||
|
|||
#process combat per loop |
|||
def combat_process(self, result): |
|||
if result.find("You suffer") != -1: |
|||
self.hits = self.hits + 1 |
|||
if self.hits == 2: |
|||
self.command_str.emit("heal\r\n") |
|||
self.command_str.emit("heal\r\n") |
|||
self.hits = 0 |
|||
|
|||
if result.find("have slain") != -1 or result.find("has just left") != -1 or result.find("isn't around here!") != -1 or result.find("You're not ready") != -1: |
|||
try: |
|||
self.local_monsters.pop(0) |
|||
except: |
|||
pass |
|||
if len(self.local_monsters) > 0: |
|||
self.command_str.emit("combat " + self.local_monsters[0]+"\r\n") |
|||
else: |
|||
print("Area cleared") |
|||
self.in_combat = False |
|||
|
|||
#time travel |
|||
def time_travel(self): |
|||
self.farm_year = self.farm_year + 100 |
|||
if self.farm_year > self.year_limit: |
|||
self.farm_year = 2000 |
|||
self.command_str.emit("tra "+str(self.farm_year)+"\r\n") |
|||
|
|||
#process path |
|||
def path_process(self): |
|||
path_str = self.path_list[self.selected_path][self.path_step] |
|||
if path_str != "done": |
|||
self.command_str.emit(path_str+"\r\n") |
|||
self.path_step = self.path_step + 1 |
|||
else: |
|||
self.path_step = 0 |
|||
|
|||
#process stats |
|||
def parse_stat(self, result): |
|||
if self.stat_parsed == False: |
|||
self.sell_list = [] |
|||
self.status += result |
|||
result.find(">") != -1: |
|||
self.stat_parsed = True |
|||
|
|||
if self.stat_parsed and self.status != "": |
|||
for item_l in farm_list: |
|||
x = self.status.count(item_l) |
|||
for i in range(x): |
|||
self.sell_list.append(item_l) |
|||
|
|||
if self.status.find("Riblets :") != -1: |
|||
start_index = self.status.index('Riblets : ') + 16 |
|||
riblets_str = self.status[start_index:] |
|||
try: |
|||
end_index = riblets_str.index(' ') |
|||
except: |
|||
pass |
|||
riblets_str = riblets_str[:end_index] |
|||
print("Riblets:" + riblets_str) |
|||
self.riblets = int(riblets_str) |
|||
self.status != "" |
|||
print(self.sell_list) |
|||
|
|||
#index area |
|||
def index_area(self,result): |
|||
if self.area_indexed == False: |
|||
self.area += result |
|||
result.find(">") != -1: |
|||
self.area_indexed = True |
|||
|
|||
if self.area_indexed and self.area != "": |
|||
if self.area.find("On the ground lies:") != -1: |
|||
start_index = self.area.index('On the ground lies:') |
|||
item_str = self.area[start_index:] |
|||
try: |
|||
end_index = item_str.index('***') |
|||
except: |
|||
try: |
|||
end_index = item_str.index('>') |
|||
except: |
|||
pass |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace("On the ground lies:","") |
|||
item_str = item_str.replace("0","") |
|||
item_str = item_str.replace("1","") |
|||
item_str = item_str.replace("2","") |
|||
item_str = item_str.replace("3","") |
|||
item_str = item_str.replace("4","") |
|||
item_str = item_str.replace("5","") |
|||
item_str = item_str.replace("6","") |
|||
item_str = item_str.replace("7","") |
|||
item_str = item_str.replace("8","") |
|||
item_str = item_str.replace("9","") |
|||
item_str = item_str.replace("(","") |
|||
item_str = item_str.replace(")","") |
|||
item_str = item_str.replace("A ","") |
|||
item_str = item_str.replace("An ","") |
|||
item_str = item_str.replace(" ","") |
|||
item_str = item_str.replace(".","") |
|||
item_str = item_str.replace("\r\n","") |
|||
item_str = item_str.replace("***","") |
|||
self.local_items = list(item_str.split(",")) |
|||
print(self.local_items) |
|||
|
|||
if self.area.find("here") != -1: |
|||
end_index = self.area.index('here') |
|||
monster_str = self.area[:end_index] |
|||
start_index = monster_str.rindex('***') |
|||
monster_str = monster_str[start_index:] |
|||
monster_str = monster_str.replace("\r\n","") |
|||
monster_str = monster_str.replace(" and ","") |
|||
monster_str = monster_str.replace(" are ","") |
|||
monster_str = monster_str.replace(" is ","") |
|||
monster_str = monster_str.replace(" ","") |
|||
monster_str = monster_str.replace(".","") |
|||
monster_str = monster_str.replace("***","") |
|||
self.local_monsters = list(monster_str.split(",")) |
|||
remove_friends() |
|||
print(self.local_monsters) |
|||
|
|||
self.area = "": |
|||
|
|||
#main game loop |
|||
def mutants(self,result): |
|||
|
|||
#Nothing has happened in a while, time jump |
|||
if self.no_action_cnt > self.na_thresh: |
|||
time_travel() |
|||
self.no_action_cnt = 0 |
|||
|
|||
#parse status |
|||
self.parse_stat(result) |
|||
#index area |
|||
self.index_area(result) |
|||
#deposit riblets |
|||
if self.riblets > self.riblet_thresh and self.path_step == 0: |
|||
self.path_step = 1 |
|||
|
|||
#auto farm if sold items |
|||
if len(self.sell_list) == 0 and self.wander: |
|||
self.auto_farm = True |
|||
|
|||
#process wander |
|||
if self.wander and not self.in_combat and self.path_step == 0: |
|||
self.wander_process(result) |
|||
|
|||
#process combat |
|||
if self.in_combat: |
|||
self.combat_process(result) |
|||
|
|||
#scrapers |
|||
if result == "(N)onstop, (Q)uit, or (C)ontinue?": |
|||
self.command_str.emit("N\r\n") |
|||
|
|||
#ion starvation |
|||
if result.find("You're starving for IONS!") != -1: |
|||
self.command_str.emit("con gold-chunck\r\n") |
|||
self.auto_combat = True |
|||
self.heal = True |
|||
|
|||
#too heavy |
|||
if self.wander and result.find("The weight of all your items forces you to the ground.") != -1: |
|||
self.wander = False |
|||
self.command_str.emit("X\r\n") |
|||
|
|||
#dropped your weapon! |
|||
if self.auto_farm and result.find("The Nuclear-Decay fell out of your sack!") != -1: |
|||
self.time_steps = 0 |
|||
self.command_str.emit("con gold-chunck\r\n") |
|||
self.command_str.emit("get nuclear-decay\r\n") |
|||
|
|||
#I can't remember why I did this |
|||
if self.auto_farm and result.find("You're not carrying a gold-chunck.") != -1: |
|||
self.auto_farm = False |
|||
|
|||
#Dropped the bait, pick it back up |
|||
if result.find("The Monster-Bait fell out of your sack!") != -1: |
|||
self.time_steps = 0 |
|||
self.command_str.emit("con gold-chunck\r\n") |
|||
self.command_str.emit("get monster-bait\r\n") |
|||
|
|||
#if wander and result.find("fell out of your sack!") != -1: |
|||
#wander = False |
|||
#self.auto_farm = False |
|||
|
|||
#GTFO |
|||
if self.wander and ((result.find("It's too dark to see anything!") != -1 or |
|||
result.find("has hit you with his Nuclear-Decay!") != -1 or |
|||
result.find("You're blocked!") != -1) or |
|||
len(self.local_monsters) > 4): |
|||
|
|||
self.heal = True |
|||
self.command_str.emit("tra "+str(self.farm_year)+"\r\n") |
|||
self.in_combat = False |
|||
|
|||
#Sell the loot |
|||
if result.find("City Trading Centre") != -1: |
|||
if len(self.sell_list) > 0: |
|||
self.sell_items() |
|||
|
|||
#New area, take a look |
|||
if result.find("Compass:") != -1: |
|||
self.area_indexed = True |
|||
|
|||
#Parse character status |
|||
if result.find("stat") != -1: |
|||
self.stat_parsed = False |
|||
|
|||
#Trigger stop healing |
|||
if result.find("Nothing happens!") != -1 or result.find("You don't have enough ions to heal!") != -1: |
|||
self.heal = False |
|||
|
|||
#Turn on healing |
|||
if result.find("You suffer") != -1 or result.find("You are poisoned!") != -1: |
|||
self.heal = True |
|||
|
|||
#monster list related |
|||
if (result.find("yells: Gimmie") != -1 or |
|||
result.find("just arrived from") != -1 or |
|||
result.find("has hit") != -1 or |
|||
result.find("body is glowing") != -1 or |
|||
result.find("Get away from me") != -1 or |
|||
result.find("has magically appeared") != -1): |
|||
m = result.index(' ') |
|||
monster = result[:m] |
|||
if not search(self.local_monsters, monster): |
|||
self.local_monsters.append(monster) |
|||
remove_friends() |
|||
print(self.local_monsters) |
|||
if len(self.local_monsters) > 0 and self.auto_combat and not self.in_combat: |
|||
combat_start() |
|||
|
|||
#Monster took off, remove from list |
|||
if result.find("has just left") != -1: |
|||
end_index = result.index(' has') |
|||
mon_str = result[:end_index] |
|||
mon_str = mon_str.replace(" ","") |
|||
try: |
|||
self.local_monsters.remove(mon_str) |
|||
except: |
|||
pass |
|||
print(mon_str) |
|||
print(self.local_monsters) |
|||
|
|||
#Monster died, remove from list |
|||
if result.find("is crumbling to dust") != -1: |
|||
end_index = result.index(' is') |
|||
mon_str = result[:end_index] |
|||
mon_str = mon_str.replace(" ","") |
|||
try: |
|||
self.local_monsters.remove(mon_str) |
|||
except: |
|||
pass |
|||
print(mon_str) |
|||
print(self.local_monsters) |
|||
|
|||
#Someone picked something up, remove from item list |
|||
if result.find("picked up the") != -1: |
|||
start_index = result.index('the') + 4 |
|||
item_str = result[start_index:] |
|||
end_index = item_str.index('.') |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace(" ","") |
|||
try: |
|||
self.local_items.remove(item_str) |
|||
except: |
|||
pass |
|||
print(item_str) |
|||
print(self.local_items) |
|||
|
|||
#Dead person dropping stuff, add to local list |
|||
if result.find("is falling from") != -1: |
|||
start_index = result.index('A') |
|||
item_str = result[start_index:] |
|||
end_index = item_str.index('is') |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace(" ","") |
|||
item_str = item_str.replace("is","") |
|||
item_str = item_str.replace("An","") |
|||
item_str = item_str.replace("A","") |
|||
self.local_items.append(item_str) |
|||
print(self.local_items) |
|||
|
|||
#You died, do some stuff |
|||
if result.find("Select (Bury, 1-5, ?)") != -1: |
|||
self.in_combat=False |
|||
self.heal = False |
|||
self.wander = False |
|||
self.auto_farm = False |
|||
self.auto_combat = False |
|||
|
|||
#farm items |
|||
if len(self.local_items) > 0 and not self.in_combat: |
|||
if self.auto_farm: |
|||
self.farm_items() |
|||
if self.auto_combat: |
|||
self.convert_items() |
|||
#print("convert") |
|||
|
|||
#keyboard related - this part sucks |
|||
if keyboard.is_pressed(self.lock_key): |
|||
time.sleep(.5) |
|||
if self.key_detect: |
|||
self.key_detect = False |
|||
print("Key detect off") |
|||
else: |
|||
self.key_detect = True |
|||
print("Key detect on") |
|||
|
|||
if self.key_detect: |
|||
if keyboard.is_pressed("?"): |
|||
time.sleep(.5) |
|||
for help in help_list: |
|||
print(help) |
|||
|
|||
#directions |
|||
if keyboard.is_pressed("8"): |
|||
self.local_monsters = [] |
|||
self.local_items = [] |
|||
self.command_str.emit("north\r\n") |
|||
time.sleep(.25) |
|||
|
|||
if keyboard.is_pressed("2"): |
|||
self.local_monsters = [] |
|||
self.local_items = [] |
|||
self.command_str.emit("south\r\n") |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("4"): |
|||
self.local_monsters = [] |
|||
self.local_items = [] |
|||
self.command_str.emit("west\r\n") |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("6"): |
|||
self.local_monsters = [] |
|||
self.local_items = [] |
|||
self.command_str.emit("east\r\n") |
|||
time.sleep(.25) |
|||
#functions |
|||
if keyboard.is_pressed("a"): |
|||
time.sleep(.5) |
|||
if self.auto_combat: |
|||
self.auto_combat = False |
|||
print("Auto combat off") |
|||
else: |
|||
self.auto_combat = True |
|||
print("Auto combat on") |
|||
#Auto Ion |
|||
if keyboard.is_pressed("i"): |
|||
time.sleep(.5) |
|||
if self.auto_combat: |
|||
self.auto_combat = False |
|||
print("Auto ion off") |
|||
else: |
|||
self.auto_combat = True |
|||
print("Auto ion on") |
|||
#Auto farm |
|||
if keyboard.is_pressed("f"): |
|||
time.sleep(.5) |
|||
if self.auto_farm: |
|||
self.auto_farm = False |
|||
print("Auto farm off") |
|||
else: |
|||
self.auto_farm = True |
|||
print("Auto farm on") |
|||
|
|||
#Year limit |
|||
if keyboard.is_pressed("y"): |
|||
time.sleep(.25) |
|||
self.flush_input() |
|||
st = input("Year limit: ") |
|||
self.year_limit = int(st) |
|||
|
|||
#No action threshhold |
|||
if keyboard.is_pressed("n"): |
|||
time.sleep(.25) |
|||
self.flush_input() |
|||
st = input("No action: ") |
|||
self.na_thresh = int(st) |
|||
|
|||
#Start combat |
|||
if keyboard.is_pressed("c"): |
|||
if len(self.local_monsters) > 0: |
|||
combat_start() |
|||
time.sleep(.25) |
|||
|
|||
#Start Combat |
|||
if keyboard.is_pressed("c"): |
|||
if len(self.local_monsters) > 0: |
|||
combat_start() |
|||
time.sleep(.25) |
|||
|
|||
#look around |
|||
if keyboard.is_pressed("5"): |
|||
self.command_str.emit("look ") |
|||
time.sleep(.25) |
|||
|
|||
#meander status |
|||
if keyboard.is_pressed("m"): |
|||
time.sleep(.5) |
|||
if self.wander: |
|||
self.wander = False |
|||
print("Meander off") |
|||
else: |
|||
self.wander = True |
|||
print("Meander on") |
|||
self.command_str.emit("look\r\n") |
|||
|
|||
#heal |
|||
if keyboard.is_pressed("h"): |
|||
self.command_str.emit("heal\r\n") |
|||
self.heal = True |
|||
time.sleep(.25) |
|||
|
|||
#look around |
|||
if keyboard.is_pressed("l"): |
|||
self.command_str.emit("look\r\n") |
|||
time.sleep(.25) |
|||
|
|||
#stats |
|||
if keyboard.is_pressed("v"): |
|||
self.command_str.emit("stat\r\n") |
|||
time.sleep(.25) |
|||
|
|||
#sell items |
|||
if keyboard.is_pressed("s"): |
|||
self.sell_items() |
|||
time.sleep(.25) |
|||
|
|||
#store path select |
|||
if keyboard.is_pressed("p") and not self.in_combat: |
|||
time.sleep(.25) |
|||
self.flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("Choose path input: ") |
|||
self.selected_path = int(st) |
|||
self.path_step = 1 |
|||
self.command_str.emit("Starting path..\r\n") |
|||
self.flush_input() |
|||
|
|||
#read keyboard |
|||
if keyboard.is_pressed("k") and not self.in_combat: |
|||
time.sleep(.25) |
|||
self.flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("Keyboard input: ") |
|||
self.command_str.emit(st+"\r\n") |
|||
self.flush_input() |
|||
|
|||
#wield weapon |
|||
if keyboard.is_pressed("w"): |
|||
time.sleep(.25) |
|||
self.command_str.emit("wie nuclear-decay\r\n") |
|||
|
|||
#drop item |
|||
if keyboard.is_pressed("d"): |
|||
time.sleep(.25) |
|||
self.flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("drop item: ") |
|||
drop_item = "drop " + st |
|||
self.command_str.emit(drop_item+"\r\n") |
|||
|
|||
#time travel |
|||
if keyboard.is_pressed("t") and not self.in_combat: |
|||
monster_list = [] |
|||
time.sleep(.25) |
|||
self.flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("year: ") |
|||
year = "travel " + st |
|||
self.command_str.emit(year+"\r\n") |
|||
|
|||
if keyboard.is_pressed("x"): |
|||
break |
|||
@ -0,0 +1,630 @@ |
|||
#search a list |
|||
def search(self, list, platform): |
|||
for i in range(len(list)): |
|||
if list[i] == platform: |
|||
return True |
|||
return False |
|||
|
|||
#Reup Ions |
|||
def convert_items(self): |
|||
for item_l in self.local_items: |
|||
for item in convert_list: |
|||
if item_l == item: |
|||
self.tn.write(b"get "+item.encode('ascii')+b"\r\n") |
|||
self.tn.write(b"con "+item.encode('ascii')+b"\r\n") |
|||
self.local_items.remove(item_l) |
|||
|
|||
#Farms valuable stuff |
|||
def farm_items(self): |
|||
for item_l in self.local_items: |
|||
for item in farm_list: |
|||
if item_l == item: |
|||
self.tn.write(b"get "+item.encode('ascii')+b"\r\n") |
|||
self.local_items.remove(item_l) |
|||
self.sell_list.append(item_l) |
|||
self.no_action_cnt = 0 |
|||
|
|||
#Sell items |
|||
def sell_items(self): |
|||
print(self.sell_list) |
|||
while len(self.sell_list) > 0: |
|||
item_l=self.sell_list[0] |
|||
self.sell_list.pop(0) |
|||
if item_l != "Nuclear-Decay": |
|||
self.tn.write(b"sell "+item_l.encode('ascii')+b"\r\n") |
|||
time.sleep(.25) |
|||
|
|||
#Remove friends from monster list |
|||
def remove_friends(self): |
|||
for friend in friend_list: |
|||
try: |
|||
self.local_monsters.remove(friend) |
|||
except: |
|||
pass |
|||
|
|||
#Flushes keyboard |
|||
def flush_input(self): |
|||
try: |
|||
import msvcrt |
|||
while msvcrt.kbhit(): |
|||
msvcrt.getch() |
|||
except ImportError: |
|||
import sys, termios |
|||
termios.tcflush(sys.stdin, termios.TCIOFLUSH) |
|||
|
|||
#Decode incoming information |
|||
def decode_line(self,line): |
|||
result = "" |
|||
if line.decode('cp1252') != "": |
|||
ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])') |
|||
result = ansi_escape.sub('', line.decode('cp1252').strip('\n')) |
|||
self.console.append(result) |
|||
return result |
|||
|
|||
#initiate combat |
|||
def combat_start(self): |
|||
self.tn.write(b"combat " + self.local_monsters[0].encode('ascii')+b"\r\n") |
|||
self.in_combat = True |
|||
self.heal = True |
|||
self.path_step = 0 |
|||
self.no_action_cnt = 0 |
|||
|
|||
#process wander |
|||
def wander_process(self, result, wander_trigger): |
|||
#area clear |
|||
if result.find("north - area continues.") != -1 or result.find("north - open gate.") != -1: |
|||
self.direction_list.append("north") |
|||
if result.find("south - area continues.") != -1 or result.find("south - open gate.") != -1: |
|||
self.direction_list.append("south") |
|||
if result.find("east - area continues.") != -1 or result.find("east - open gate.") != -1: |
|||
self.direction_list.append("east") |
|||
if result.find("west - area continues.") != -1 or result.find("west - open gate.") != -1: |
|||
self.direction_list.append("west") |
|||
|
|||
#are there monsters |
|||
if result.find("You see shadows to the") != -1: |
|||
try: |
|||
if result.find("north") != -1: |
|||
self.direction_list.remove("north") |
|||
if result.find("south") != -1: |
|||
self.direction_list.remove("south") |
|||
if result.find("east") != -1: |
|||
self.direction_list.remove("east") |
|||
if result.find("west") != -1: |
|||
self.direction_list.remove("west") |
|||
except: |
|||
pass |
|||
|
|||
if wander_trigger == 0: |
|||
print("wander triggered") |
|||
print("no action: " + str(self.no_action_cnt)) |
|||
#increment no action counter |
|||
self.no_action_cnt = self.no_action_cnt + 1 |
|||
if len(self.direction_list) == 0: |
|||
self.tn.write(b"look\r\n") |
|||
self.local_monsters = [] |
|||
self.local_items = [] |
|||
|
|||
#pick randomly |
|||
if len(self.direction_list) > 0 and wander_trigger == 0: |
|||
if len(self.direction_list) > 1: |
|||
try: |
|||
self.direction_list.remove(self.previous_dir) |
|||
except: |
|||
pass |
|||
print(self.direction_list) |
|||
dir_choice = random.choice(self.direction_list) |
|||
self.tn.write(dir_choice.encode('ascii')+b"\r\n") |
|||
self.direction_list = [] |
|||
self.previous_dir = opposite_dir[dir_choice] |
|||
|
|||
#process combat per loop |
|||
def combat_process(self): |
|||
|
|||
if result.find("You suffer") != -1: |
|||
self.hits = self.hits + 1 |
|||
if self.hits == 2: |
|||
self.tn.write(b"heal\r\n") |
|||
self.tn.write(b"heal\r\n") |
|||
self.hits = 0 |
|||
|
|||
if result.find("have slain") != -1 or result.find("has just left") != -1 or result.find("isn't around here!") != -1 or result.find("You're not ready") != -1: |
|||
try: |
|||
self.local_monsters.pop(0) |
|||
except: |
|||
pass |
|||
if len(self.local_monsters) > 0: |
|||
self.tn.write(b"combat " + self.local_monsters[0].encode('ascii')+b"\r\n") |
|||
else: |
|||
print("Area cleared") |
|||
self.in_combat = False |
|||
|
|||
wield = self.time_steps % 10 |
|||
|
|||
if wield == 0: |
|||
self.tn.write(b"wie nuclear-decay\r\n") |
|||
|
|||
#time travel |
|||
def time_travel(self): |
|||
self.farm_year = self.farm_year + 100 |
|||
if self.farm_year > self.year_limit: |
|||
self.farm_year = 2000 |
|||
self.tn.write(b"tra "+str(self.farm_year).encode('ascii')+b"\r\n") |
|||
|
|||
#process path |
|||
def path_process(self): |
|||
path_str = self.path_list[self.selected_path][self.path_step] |
|||
if path_str != "done": |
|||
self.tn.write(path_str.encode('ascii')+b"\r\n") |
|||
self.path_step = self.path_step + 1 |
|||
else: |
|||
self.path_step = 0 |
|||
|
|||
#process stats |
|||
def parse_stat(self): |
|||
self.sell_list = [] |
|||
line = self.tn.read_until(b">",0) # Read one line |
|||
result = self.decode_line(line) |
|||
for item_l in farm_list: |
|||
x = line.decode('ascii').count(item_l) |
|||
for i in range(x): |
|||
self.sell_list.append(item_l) |
|||
|
|||
if result.find("Riblets :") != -1: |
|||
start_index = result.index('Riblets : ') + 16 |
|||
riblets_str = result[start_index:] |
|||
try: |
|||
end_index = riblets_str.index(' ') |
|||
except: |
|||
pass |
|||
riblets_str = riblets_str[:end_index] |
|||
print("Riblets:" + riblets_str) |
|||
self.riblets = int(riblets_str) |
|||
print(self.sell_list) |
|||
|
|||
#index area |
|||
def index_area(self): |
|||
end_index = 0 |
|||
line = self.tn.read_until(b">",0) # Read one line |
|||
result = self.decode_line(line) |
|||
#Index items |
|||
if result.find("On the ground lies:") != -1: |
|||
start_index = result.index('On the ground lies:') |
|||
item_str = result[start_index:] |
|||
try: |
|||
end_index = item_str.index('***') |
|||
except: |
|||
try: |
|||
end_index = item_str.index('>') |
|||
except: |
|||
pass |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace("On the ground lies:","") |
|||
item_str = item_str.replace("0","") |
|||
item_str = item_str.replace("1","") |
|||
item_str = item_str.replace("2","") |
|||
item_str = item_str.replace("3","") |
|||
item_str = item_str.replace("4","") |
|||
item_str = item_str.replace("5","") |
|||
item_str = item_str.replace("6","") |
|||
item_str = item_str.replace("7","") |
|||
item_str = item_str.replace("8","") |
|||
item_str = item_str.replace("9","") |
|||
item_str = item_str.replace("(","") |
|||
item_str = item_str.replace(")","") |
|||
item_str = item_str.replace("A ","") |
|||
item_str = item_str.replace("An ","") |
|||
item_str = item_str.replace(" ","") |
|||
item_str = item_str.replace(".","") |
|||
item_str = item_str.replace("\r\n","") |
|||
item_str = item_str.replace("***","") |
|||
self.local_items = list(item_str.split(",")) |
|||
print(self.local_items) |
|||
|
|||
if result.find("here") != -1: |
|||
end_index = result.index('here') |
|||
monster_str = result[:end_index] |
|||
start_index = monster_str.rindex('***') |
|||
monster_str = monster_str[start_index:] |
|||
monster_str = monster_str.replace("\r\n","") |
|||
monster_str = monster_str.replace(" and ","") |
|||
monster_str = monster_str.replace(" are ","") |
|||
monster_str = monster_str.replace(" is ","") |
|||
monster_str = monster_str.replace(" ","") |
|||
monster_str = monster_str.replace(".","") |
|||
monster_str = monster_str.replace("***","") |
|||
self.local_monsters = list(monster_str.split(",")) |
|||
remove_friends() |
|||
print(self.local_monsters) |
|||
|
|||
#main game loop |
|||
def mutants(self): |
|||
area_indexed = False |
|||
while True: |
|||
#print(self.local_items) |
|||
time.sleep(.1) |
|||
self.time_steps = self.time_steps + 1 |
|||
|
|||
#data decode |
|||
result = "" |
|||
line = None |
|||
line = self.tn.read_until(b"\n",0) # Read one line |
|||
result = self.decode_line(line) |
|||
|
|||
#Nothing has happened in a while, time jump |
|||
if self.no_action_cnt > self.na_thresh: |
|||
time_travel() |
|||
self.no_action_cnt = 0 |
|||
|
|||
#deposit riblets |
|||
if self.riblets > self.riblet_thresh and self.path_step == 0: |
|||
self.path_step = 1 |
|||
|
|||
#follow path_list |
|||
path_trigger = self.time_steps % 10 |
|||
if path_trigger == 0 and not self.in_combat: |
|||
self.path_process() |
|||
|
|||
#parse status |
|||
stat_trigger = self.time_steps % 600 |
|||
if stat_trigger == 0 and not self.in_combat: |
|||
self.tn.write(b"stat\r\n") |
|||
|
|||
#heal |
|||
heal_trigger = self.time_steps % 20 |
|||
if heal_trigger == 0: |
|||
if self.heal: |
|||
self.tn.write(b"heal\r\n") |
|||
|
|||
#auto farm if sold items |
|||
if len(self.sell_list) == 0 and self.wander: |
|||
self.auto_farm = True |
|||
|
|||
#process wander |
|||
wander_trigger = self.time_steps % 30 |
|||
if self.wander and not self.in_combat and self.path_step == 0: |
|||
if wander_trigger == 0: |
|||
area_indexed = False |
|||
#print("wander triggered") |
|||
self.wander_process(result,wander_trigger) |
|||
|
|||
#Reset time steps |
|||
if self.time_steps == 1000: |
|||
self.time_steps = 0 |
|||
|
|||
#process combat |
|||
if self.in_combat: |
|||
self.combat_process(result) |
|||
|
|||
#scrapers |
|||
if result == "(N)onstop, (Q)uit, or (C)ontinue?": |
|||
self.tn.write(b"N\r\n") |
|||
|
|||
#ion starvation |
|||
if result.find("You're starving for IONS!") != -1: |
|||
self.tn.write(b"con gold-chunck\r\n") |
|||
self.auto_combat = True |
|||
self.heal = True |
|||
|
|||
#too heavy |
|||
if self.wander and result.find("The weight of all your items forces you to the ground.") != -1: |
|||
self.wander = False |
|||
self.tn.write(b"X\r\n") |
|||
|
|||
#dropped your weapon! |
|||
if self.auto_farm and result.find("The Nuclear-Decay fell out of your sack!") != -1: |
|||
self.time_steps = 0 |
|||
self.tn.write(b"con gold-chunck\r\n") |
|||
self.tn.write(b"get nuclear-decay\r\n") |
|||
|
|||
#I can't remember why I did this |
|||
if self.auto_farm and result.find("You're not carrying a gold-chunck.") != -1: |
|||
self.auto_farm = False |
|||
|
|||
#Dropped the bait, pick it back up |
|||
if result.find("The Monster-Bait fell out of your sack!") != -1: |
|||
self.time_steps = 0 |
|||
self.tn.write(b"con gold-chunck\r\n") |
|||
self.tn.write(b"get monster-bait\r\n") |
|||
|
|||
#if wander and result.find("fell out of your sack!") != -1: |
|||
#wander = False |
|||
#self.auto_farm = False |
|||
|
|||
#GTFO |
|||
if self.wander and ((result.find("It's too dark to see anything!") != -1 or |
|||
result.find("has hit you with his Nuclear-Decay!") != -1 or |
|||
result.find("You're blocked!") != -1) or |
|||
len(self.local_monsters) > 4): |
|||
|
|||
self.heal = True |
|||
self.tn.write(b"tra "+str(self.farm_year).encode('ascii')+b"\r\n") |
|||
self.in_combat = False |
|||
|
|||
#Sell the loot |
|||
if result.find("City Trading Centre") != -1: |
|||
if len(self.sell_list) > 0: |
|||
self.sell_items() |
|||
|
|||
#New area, take a look |
|||
if result.find("Compass:") != -1 and area_indexed == False: |
|||
self.index_area() |
|||
if self.wander: |
|||
self.tn.write(b"look\r\n") |
|||
area_indexed = True |
|||
|
|||
#Parse character status |
|||
if result.find("stat") != -1: |
|||
self.parse_stat() |
|||
|
|||
#Trigger stop healing |
|||
if result.find("Nothing happens!") != -1 or result.find("You don't have enough ions to heal!") != -1: |
|||
self.heal = False |
|||
|
|||
#Turn on healing |
|||
if result.find("You suffer") != -1 or result.find("You are poisoned!") != -1: |
|||
self.heal = True |
|||
|
|||
#monster list related |
|||
if (result.find("yells: Gimmie") != -1 or |
|||
result.find("just arrived from") != -1 or |
|||
result.find("has hit") != -1 or |
|||
result.find("body is glowing") != -1 or |
|||
result.find("Get away from me") != -1 or |
|||
result.find("has magically appeared") != -1): |
|||
m = result.index(' ') |
|||
monster = result[:m] |
|||
if not search(self.local_monsters, monster): |
|||
self.local_monsters.append(monster) |
|||
remove_friends() |
|||
print(self.local_monsters) |
|||
if len(self.local_monsters) > 0 and self.auto_combat and not self.in_combat: |
|||
combat_start() |
|||
|
|||
#Monster took off, remove from list |
|||
if result.find("has just left") != -1: |
|||
end_index = result.index(' has') |
|||
mon_str = result[:end_index] |
|||
mon_str = mon_str.replace(" ","") |
|||
try: |
|||
self.local_monsters.remove(mon_str) |
|||
except: |
|||
pass |
|||
print(mon_str) |
|||
print(self.local_monsters) |
|||
|
|||
#Monster died, remove from list |
|||
if result.find("is crumbling to dust") != -1: |
|||
end_index = result.index(' is') |
|||
mon_str = result[:end_index] |
|||
mon_str = mon_str.replace(" ","") |
|||
try: |
|||
self.local_monsters.remove(mon_str) |
|||
except: |
|||
pass |
|||
print(mon_str) |
|||
print(self.local_monsters) |
|||
|
|||
#Someone picked something up, remove from item list |
|||
if result.find("picked up the") != -1: |
|||
start_index = result.index('the') + 4 |
|||
item_str = result[start_index:] |
|||
end_index = item_str.index('.') |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace(" ","") |
|||
try: |
|||
self.local_items.remove(item_str) |
|||
except: |
|||
pass |
|||
print(item_str) |
|||
print(self.local_items) |
|||
|
|||
#Dead person dropping stuff, add to local list |
|||
if result.find("is falling from") != -1: |
|||
start_index = result.index('A') |
|||
item_str = result[start_index:] |
|||
end_index = item_str.index('is') |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace(" ","") |
|||
item_str = item_str.replace("is","") |
|||
item_str = item_str.replace("An","") |
|||
item_str = item_str.replace("A","") |
|||
self.local_items.append(item_str) |
|||
print(self.local_items) |
|||
|
|||
#You died, do some stuff |
|||
if result.find("Select (Bury, 1-5, ?)") != -1: |
|||
self.in_combat=False |
|||
self.heal = False |
|||
self.wander = False |
|||
self.auto_farm = False |
|||
self.auto_combat = False |
|||
|
|||
#farm items |
|||
if len(self.local_items) > 0 and not self.in_combat: |
|||
if self.auto_farm: |
|||
self.farm_items() |
|||
if self.auto_combat: |
|||
self.convert_items() |
|||
#print("convert") |
|||
|
|||
#keyboard related - this part sucks |
|||
if keyboard.is_pressed(self.lock_key): |
|||
time.sleep(.5) |
|||
if self.key_detect: |
|||
self.key_detect = False |
|||
print("Key detect off") |
|||
else: |
|||
self.key_detect = True |
|||
print("Key detect on") |
|||
|
|||
if self.key_detect: |
|||
if keyboard.is_pressed("?"): |
|||
time.sleep(.5) |
|||
for help in help_list: |
|||
print(help) |
|||
|
|||
#directions |
|||
if keyboard.is_pressed("8"): |
|||
self.local_monsters = [] |
|||
self.local_items = [] |
|||
self.tn.write(b"north\r\n") |
|||
area_indexed = False |
|||
time.sleep(.25) |
|||
|
|||
if keyboard.is_pressed("2"): |
|||
self.local_monsters = [] |
|||
self.local_items = [] |
|||
self.tn.write(b"south\r\n") |
|||
area_indexed = False |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("4"): |
|||
self.local_monsters = [] |
|||
self.local_items = [] |
|||
self.tn.write(b"west\r\n") |
|||
area_indexed = False |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("6"): |
|||
self.local_monsters = [] |
|||
self.local_items = [] |
|||
self.tn.write(b"east\r\n") |
|||
area_indexed = False |
|||
time.sleep(.25) |
|||
#functions |
|||
if keyboard.is_pressed("a"): |
|||
time.sleep(.5) |
|||
if self.auto_combat: |
|||
self.auto_combat = False |
|||
print("Auto combat off") |
|||
else: |
|||
self.auto_combat = True |
|||
print("Auto combat on") |
|||
#Auto Ion |
|||
if keyboard.is_pressed("i"): |
|||
time.sleep(.5) |
|||
if self.auto_combat: |
|||
self.auto_combat = False |
|||
print("Auto ion off") |
|||
else: |
|||
self.auto_combat = True |
|||
print("Auto ion on") |
|||
#Auto farm |
|||
if keyboard.is_pressed("f"): |
|||
time.sleep(.5) |
|||
if self.auto_farm: |
|||
self.auto_farm = False |
|||
print("Auto farm off") |
|||
else: |
|||
self.auto_farm = True |
|||
print("Auto farm on") |
|||
|
|||
#Year limit |
|||
if keyboard.is_pressed("y"): |
|||
time.sleep(.25) |
|||
self.flush_input() |
|||
st = input("Year limit: ") |
|||
self.year_limit = int(st) |
|||
|
|||
#No action threshhold |
|||
if keyboard.is_pressed("n"): |
|||
time.sleep(.25) |
|||
self.flush_input() |
|||
st = input("No action: ") |
|||
self.na_thresh = int(st) |
|||
|
|||
#Start combat |
|||
if keyboard.is_pressed("c"): |
|||
if len(self.local_monsters) > 0: |
|||
combat_start() |
|||
time.sleep(.25) |
|||
|
|||
#Start Combat |
|||
if keyboard.is_pressed("c"): |
|||
if len(self.local_monsters) > 0: |
|||
combat_start() |
|||
time.sleep(.25) |
|||
|
|||
#look around |
|||
if keyboard.is_pressed("5"): |
|||
self.tn.write(b"look ") |
|||
time.sleep(.25) |
|||
|
|||
#meander status |
|||
if keyboard.is_pressed("m"): |
|||
time.sleep(.5) |
|||
if self.wander: |
|||
self.wander = False |
|||
print("Meander off") |
|||
else: |
|||
self.wander = True |
|||
print("Meander on") |
|||
self.tn.write(b"look\r\n") |
|||
|
|||
#heal |
|||
if keyboard.is_pressed("h"): |
|||
self.tn.write(b"heal\r\n") |
|||
self.heal = True |
|||
time.sleep(.25) |
|||
|
|||
#look around |
|||
if keyboard.is_pressed("l"): |
|||
area_indexed = False |
|||
self.tn.write(b"look\r\n") |
|||
time.sleep(.25) |
|||
|
|||
#stats |
|||
if keyboard.is_pressed("v"): |
|||
self.tn.write(b"stat\r\n") |
|||
time.sleep(.25) |
|||
|
|||
#sell items |
|||
if keyboard.is_pressed("s"): |
|||
self.sell_items() |
|||
time.sleep(.25) |
|||
|
|||
#store path select |
|||
if keyboard.is_pressed("p") and not self.in_combat: |
|||
time.sleep(.25) |
|||
self.flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("Choose path input: ") |
|||
self.selected_path = int(st) |
|||
self.path_step = 1 |
|||
self.tn.write(b"Starting path..\r\n") |
|||
self.flush_input() |
|||
|
|||
#read keyboard |
|||
if keyboard.is_pressed("k") and not self.in_combat: |
|||
time.sleep(.25) |
|||
self.flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("Keyboard input: ") |
|||
self.tn.write(st.encode('ascii')+b"\r\n") |
|||
self.flush_input() |
|||
|
|||
#wield weapon |
|||
if keyboard.is_pressed("w"): |
|||
time.sleep(.25) |
|||
self.tn.write(b"wie nuclear-decay\r\n") |
|||
|
|||
#drop item |
|||
if keyboard.is_pressed("d"): |
|||
time.sleep(.25) |
|||
self.flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("drop item: ") |
|||
drop_item = "drop " + st |
|||
self.tn.write(drop_item.encode('ascii')+b"\r\n") |
|||
|
|||
#time travel |
|||
if keyboard.is_pressed("t") and not self.in_combat: |
|||
monster_list = [] |
|||
time.sleep(.25) |
|||
self.flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("year: ") |
|||
year = "travel " + st |
|||
self.tn.write(year.encode('ascii')+b"\r\n") |
|||
|
|||
if keyboard.is_pressed("x"): |
|||
break |
|||
@ -0,0 +1,661 @@ |
|||
import getpass |
|||
import telnetlib |
|||
import re |
|||
import time |
|||
import keyboard |
|||
import random |
|||
|
|||
HOST = "telnet.goldenunicorn.net" |
|||
user = "epilectrik" |
|||
password = "gupass" |
|||
tn = telnetlib.Telnet() |
|||
tn.open(HOST,23) |
|||
|
|||
#static lists |
|||
convert_list = ["Ion-Pack","Ion-Decay","Cheese","Nuclear-thong","Skull","Bottle-Cap","Cigarette-Butt","Knife","Gas-Grenade", |
|||
"Light-Spear","Silver-Potion","Bastard-Sword","Invisible-Knife","Great-Club","Spear","Blizzard-Staff","Devil_Key","Grey-Dagger","Bone","Axe","BlackJack", |
|||
"Golden-Key","Crystal-Key","Trident","Ice-Knife","Iron-Sickle","Gold-Spear","Fang-Dagger","Hound-Fang","Pink-Potion","Small-Dagger","Mage-Stick","Purple-Potion", |
|||
"Tree-Branch","Poker","Bronze Knife","Small-Club","Wonderous-Sword","Spell-Potion","Long-Sword","Ion-Gauntlet","Sling-Sword","Green-Vial","Small-Spear", |
|||
"Tree-Stump","Saphire","Flame-Sword","Rock-Club","Lava-Dagger","Bloody-Arm","Golden-Needle"] |
|||
|
|||
farm_list = ["Gold-Chunck","Nuclear-Rock","Nuclear-Decay","Invisible-Cloth","Troll-Skin","Nuclear-Waste"] |
|||
|
|||
friend_list = ["Epilectrik","ImBait","Mtron","Im"] |
|||
|
|||
help_list = ["$ - Key listener on/off", |
|||
"8 - North", |
|||
"2 - South", |
|||
"6 - East", |
|||
"4 - West", |
|||
"5 - Look direction", |
|||
"c - Combat", |
|||
"w - Wield weapon", |
|||
"a - Auto combat on/off", |
|||
"f - Auto farm on/off", |
|||
"i - Auto Ion on/off", |
|||
"t - time travel", |
|||
"d - drop item", |
|||
"k - keyboard input", |
|||
"v - status", |
|||
"m - meander" |
|||
] |
|||
|
|||
#dynamic lists |
|||
local_items = [] |
|||
local_monsters = [] |
|||
|
|||
#modes |
|||
heal = False |
|||
wander = False |
|||
auto_combat = False |
|||
auto_ion = False |
|||
auto_farm = False |
|||
key_detect = True |
|||
#states |
|||
time_steps = 0 |
|||
in_combat = False |
|||
hits = 0 |
|||
lock_key="$" |
|||
direction_list = [] |
|||
sell_list = [] |
|||
previous_dir = "" |
|||
|
|||
opposite_dir = { |
|||
"north":"south", |
|||
"south":"north", |
|||
"east":"west", |
|||
"west":"east", |
|||
} |
|||
|
|||
#search a list |
|||
def search(list, platform): |
|||
for i in range(len(list)): |
|||
if list[i] == platform: |
|||
return True |
|||
return False |
|||
|
|||
#Reup Ions |
|||
def convert_items(): |
|||
global local_items |
|||
global convert_list |
|||
for item_l in local_items: |
|||
for item in convert_list: |
|||
if item_l == item: |
|||
tn.write(b"get "+item.encode('ascii')+b"\r\n") |
|||
tn.write(b"con "+item.encode('ascii')+b"\r\n") |
|||
local_items.remove(item_l) |
|||
|
|||
#Farms valuable stuff |
|||
def farm_items(): |
|||
global local_items |
|||
global farm_list |
|||
global sell_list |
|||
|
|||
for item_l in local_items: |
|||
for item in farm_list: |
|||
if item_l == item: |
|||
tn.write(b"get "+item.encode('ascii')+b"\r\n") |
|||
local_items.remove(item_l) |
|||
sell_list.append(item_l) |
|||
|
|||
#Sell items |
|||
def sell_items(): |
|||
global sell_list |
|||
print(sell_list) |
|||
while len(sell_list) > 0: |
|||
item_l=sell_list[0] |
|||
sell_list.pop(0) |
|||
if item_l != "Nuclear-Decay": |
|||
tn.write(b"sell "+item_l.encode('ascii')+b"\r\n") |
|||
time.sleep(.25) |
|||
|
|||
|
|||
#Remove friends from monster list |
|||
def remove_friends(): |
|||
global local_monsters |
|||
for friend in friend_list: |
|||
try: |
|||
local_monsters.remove(friend) |
|||
except: |
|||
pass |
|||
|
|||
#Flushes keyboard |
|||
def flush_input(): |
|||
|
|||
try: |
|||
import msvcrt |
|||
while msvcrt.kbhit(): |
|||
msvcrt.getch() |
|||
except ImportError: |
|||
import sys, termios |
|||
termios.tcflush(sys.stdin, termios.TCIOFLUSH) |
|||
|
|||
def decode_line(line): |
|||
result = "" |
|||
if line.decode('cp1252') != "": |
|||
ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])') |
|||
result = ansi_escape.sub('', line.decode('cp1252').strip('\n')) |
|||
print(result) |
|||
return result |
|||
|
|||
#initiate combat |
|||
def combat_start(): |
|||
global local_monsters |
|||
global in_combat |
|||
|
|||
tn.write(b"combat " + local_monsters[0].encode('ascii')+b"\r\n") |
|||
in_combat = True |
|||
heal = True |
|||
|
|||
#process wander |
|||
def wander_process(result,wander_trigger): |
|||
global heal |
|||
global direction_list |
|||
global previous_dir |
|||
global local_monsters |
|||
global local_items |
|||
|
|||
#area clear |
|||
if result.find("north - area continues.") != -1 or result.find("north - open gate.") != -1: |
|||
direction_list.append("north") |
|||
if result.find("south - area continues.") != -1 or result.find("south - open gate.") != -1: |
|||
direction_list.append("south") |
|||
if result.find("east - area continues.") != -1 or result.find("east - open gate.") != -1: |
|||
direction_list.append("east") |
|||
if result.find("west - area continues.") != -1 or result.find("west - open gate.") != -1: |
|||
direction_list.append("west") |
|||
|
|||
#print(direction_list) |
|||
#are there monsters |
|||
if result.find("You see shadows to the") != -1: |
|||
try: |
|||
if result.find("north") != -1: |
|||
direction_list.remove("north") |
|||
if result.find("south") != -1: |
|||
direction_list.remove("south") |
|||
if result.find("east") != -1: |
|||
direction_list.remove("east") |
|||
if result.find("west") != -1: |
|||
direction_list.remove("west") |
|||
except: |
|||
pass |
|||
|
|||
if wander_trigger == 0: |
|||
print("wander triggered") |
|||
if len(direction_list) == 0: |
|||
tn.write(b"look\r\n") |
|||
local_monsters = [] |
|||
local_items = [] |
|||
|
|||
#pick randomly |
|||
if len(direction_list) > 0 and wander_trigger == 0: |
|||
if len(direction_list) > 1: |
|||
try: |
|||
direction_list.remove(previous_dir) |
|||
except: |
|||
pass |
|||
print(direction_list) |
|||
dir_choice = random.choice(direction_list) |
|||
tn.write(dir_choice.encode('ascii')+b"\r\n") |
|||
direction_list = [] |
|||
previous_dir = opposite_dir[dir_choice] |
|||
|
|||
#process combat per loop |
|||
def combat_process(result): |
|||
global heal |
|||
global hits |
|||
global time_steps |
|||
global local_monsters |
|||
global in_combat |
|||
|
|||
if result.find("You suffer") != -1: |
|||
hits = hits + 1 |
|||
if hits == 2: |
|||
tn.write(b"heal\r\n") |
|||
tn.write(b"heal\r\n") |
|||
hits = 0 |
|||
|
|||
if result.find("have slain") != -1 or result.find("has just left") != -1 or result.find("isn't around here!") != -1 or result.find("You're not ready") != -1: |
|||
try: |
|||
local_monsters.pop(0) |
|||
except: |
|||
pass |
|||
if len(local_monsters) > 0: |
|||
tn.write(b"combat " + local_monsters[0].encode('ascii')+b"\r\n") |
|||
else: |
|||
print("Area cleared") |
|||
in_combat = False |
|||
|
|||
wield = time_steps % 10 |
|||
|
|||
if wield == 0: |
|||
tn.write(b"wie nuclear-decay\r\n") |
|||
|
|||
def parse_stat(): |
|||
global farm_list |
|||
global sell_list |
|||
sell_list = [] |
|||
line = tn.read_until(b">",0) # Read one line |
|||
result = decode_line(line) |
|||
for item_l in farm_list: |
|||
x = line.decode('ascii').count(item_l) |
|||
for i in range(x): |
|||
sell_list.append(item_l) |
|||
print(sell_list) |
|||
|
|||
def index_area(): |
|||
global local_items |
|||
global local_monsters |
|||
end_index = 0 |
|||
line = tn.read_until(b">",0) # Read one line |
|||
result = decode_line(line) |
|||
#Index items |
|||
if result.find("On the ground lies:") != -1: |
|||
start_index = result.index('On the ground lies:') |
|||
item_str = result[start_index:] |
|||
try: |
|||
end_index = item_str.index('***') |
|||
except: |
|||
try: |
|||
end_index = item_str.index('>') |
|||
except: |
|||
pass |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace("On the ground lies:","") |
|||
item_str = item_str.replace("0","") |
|||
item_str = item_str.replace("1","") |
|||
item_str = item_str.replace("2","") |
|||
item_str = item_str.replace("3","") |
|||
item_str = item_str.replace("4","") |
|||
item_str = item_str.replace("5","") |
|||
item_str = item_str.replace("6","") |
|||
item_str = item_str.replace("7","") |
|||
item_str = item_str.replace("8","") |
|||
item_str = item_str.replace("9","") |
|||
item_str = item_str.replace("(","") |
|||
item_str = item_str.replace(")","") |
|||
item_str = item_str.replace("A ","") |
|||
item_str = item_str.replace("An ","") |
|||
item_str = item_str.replace(" ","") |
|||
item_str = item_str.replace(".","") |
|||
item_str = item_str.replace("\r\n","") |
|||
item_str = item_str.replace("***","") |
|||
local_items = list(item_str.split(",")) |
|||
print(local_items) |
|||
|
|||
if result.find("here") != -1: |
|||
end_index = result.index('here') |
|||
monster_str = result[:end_index] |
|||
start_index = monster_str.rindex('***') |
|||
monster_str = monster_str[start_index:] |
|||
monster_str = monster_str.replace("\r\n","") |
|||
monster_str = monster_str.replace(" and ","") |
|||
monster_str = monster_str.replace(" are ","") |
|||
monster_str = monster_str.replace(" is ","") |
|||
monster_str = monster_str.replace(" ","") |
|||
monster_str = monster_str.replace(".","") |
|||
monster_str = monster_str.replace("***","") |
|||
local_monsters = list(monster_str.split(",")) |
|||
remove_friends() |
|||
print(local_monsters) |
|||
|
|||
def mutants(): |
|||
global time_steps |
|||
global local_items |
|||
global local_monsters |
|||
global heal |
|||
global wander |
|||
global in_combat |
|||
global key_detect |
|||
global auto_combat |
|||
global auto_farm |
|||
global auto_ion |
|||
global lock_key |
|||
global direction_list |
|||
|
|||
area_indexed = False |
|||
while True: |
|||
#print(local_items) |
|||
time.sleep(.1) |
|||
time_steps = time_steps + 1 |
|||
#data decode |
|||
result = "" |
|||
line = None |
|||
line = tn.read_until(b"\n",0) # Read one line |
|||
result = decode_line(line) |
|||
|
|||
stat_trigger = time_steps % 600 |
|||
if stat_trigger == 0 and not in_combat: |
|||
tn.write(b"stat\r\n") |
|||
|
|||
heal_trigger = time_steps % 20 |
|||
if heal_trigger == 0: |
|||
if heal: |
|||
tn.write(b"heal\r\n") |
|||
|
|||
#auto farm if sold items |
|||
if len(sell_list) == 0 and wander: |
|||
auto_farm = True |
|||
|
|||
#process wander[[ |
|||
wander_trigger = time_steps % 30 |
|||
if wander and not in_combat: |
|||
if wander_trigger == 0: |
|||
area_indexed = False |
|||
#print("wander triggered") |
|||
wander_process(result,wander_trigger) |
|||
|
|||
if time_steps == 1000: |
|||
time_steps = 0 |
|||
|
|||
#process combat |
|||
if in_combat: |
|||
combat_process(result) |
|||
|
|||
#scrapers |
|||
if result == "(N)onstop, (Q)uit, or (C)ontinue?": |
|||
tn.write(b"N\r\n") |
|||
|
|||
if result.find("You're starving for IONS!") != -1: |
|||
tn.write(b"con gold-chunck\r\n") |
|||
auto_ion = True |
|||
heal = True |
|||
|
|||
if wander and result.find("The weight of all your items forces you to the ground.") != -1: |
|||
wander = False |
|||
tn.write(b"X\r\n") |
|||
|
|||
if auto_farm and result.find("The Nuclear-Decay fell out of your sack!") != -1: |
|||
time_steps = 0 |
|||
tn.write(b"con gold-chunck\r\n") |
|||
tn.write(b"get nuclear-decay\r\n") |
|||
|
|||
if auto_farm and result.find("You're not carrying a gold-chunck.") != -1: |
|||
auto_farm = False |
|||
|
|||
if result.find("The Monster-Bait fell out of your sack!") != -1: |
|||
time_steps = 0 |
|||
tn.write(b"con gold-chunck\r\n") |
|||
tn.write(b"get monster-bait\r\n") |
|||
|
|||
#if wander and result.find("fell out of your sack!") != -1: |
|||
#wander = False |
|||
#auto_farm = False |
|||
|
|||
if wander and (result.find("It's too dark to see anything!") != -1 or result.find("You're blocked!") != -1): |
|||
direction_list = ["north","south","east","west"] |
|||
|
|||
if result.find("travel") != -1: |
|||
local_monsters = [] |
|||
|
|||
if result.find("City Trading Centre") != -1: |
|||
#print("Sell trigger") |
|||
if len(sell_list) > 0: |
|||
sell_items() |
|||
|
|||
if result.find("Compass:") != -1 and area_indexed == False: |
|||
index_area() |
|||
if wander: |
|||
tn.write(b"look\r\n") |
|||
area_indexed = True |
|||
|
|||
if result.find("stat") != -1: |
|||
parse_stat() |
|||
|
|||
if result.find("Nothing happens!") != -1 or result.find("You don't have enough ions to heal!") != -1: |
|||
heal = False |
|||
|
|||
if result.find("You suffer") != -1 or result.find("You are poisoned!") != -1: |
|||
heal = True |
|||
|
|||
#monster list related |
|||
if (result.find("yells: Gimmie") != -1 or |
|||
result.find("just arrived from") != -1 or |
|||
result.find("has hit") != -1 or |
|||
result.find("body is glowing") != -1 or |
|||
result.find("Get away from me") != -1 or |
|||
result.find("has magically appeared") != -1): |
|||
m = result.index(' ') |
|||
monster = result[:m] |
|||
if not search(local_monsters, monster): |
|||
local_monsters.append(monster) |
|||
remove_friends() |
|||
print(local_monsters) |
|||
if len(local_monsters) > 0 and auto_combat and not in_combat: |
|||
combat_start() |
|||
|
|||
if result.find("has just left") != -1: |
|||
end_index = result.index(' has') |
|||
mon_str = result[:end_index] |
|||
mon_str = mon_str.replace(" ","") |
|||
try: |
|||
local_monsters.remove(mon_str) |
|||
except: |
|||
pass |
|||
print(mon_str) |
|||
print(local_monsters) |
|||
|
|||
if result.find("is crumbling to dust") != -1: |
|||
end_index = result.index(' is') |
|||
mon_str = result[:end_index] |
|||
mon_str = mon_str.replace(" ","") |
|||
try: |
|||
local_monsters.remove(mon_str) |
|||
except: |
|||
pass |
|||
print(mon_str) |
|||
print(local_monsters) |
|||
|
|||
if result.find("picked up the") != -1: |
|||
start_index = result.index('the') + 4 |
|||
item_str = result[start_index:] |
|||
end_index = item_str.index('.') |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace(" ","") |
|||
try: |
|||
local_items.remove(item_str) |
|||
except: |
|||
pass |
|||
print(item_str) |
|||
print(local_items) |
|||
|
|||
if result.find("is falling from") != -1: |
|||
start_index = result.index('A') |
|||
item_str = result[start_index:] |
|||
end_index = item_str.index('is') |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace(" ","") |
|||
item_str = item_str.replace("is","") |
|||
item_str = item_str.replace("An","") |
|||
item_str = item_str.replace("A","") |
|||
local_items.append(item_str) |
|||
print(local_items) |
|||
|
|||
if result.find("Select (Bury, 1-5, ?)") != -1: |
|||
in_combat=False |
|||
heal = False |
|||
wander = False |
|||
auto_farm = False |
|||
auto_ion = False |
|||
|
|||
#farm items |
|||
if len(local_items) > 0 and not in_combat: |
|||
if auto_farm: |
|||
farm_items() |
|||
if auto_ion: |
|||
convert_items() |
|||
#print("convert") |
|||
|
|||
#functions |
|||
if keyboard.is_pressed(lock_key): |
|||
time.sleep(.5) |
|||
if key_detect: |
|||
key_detect = False |
|||
print("Key detect off") |
|||
else: |
|||
key_detect = True |
|||
print("Key detect on") |
|||
|
|||
if key_detect: |
|||
if keyboard.is_pressed("?"): |
|||
time.sleep(.5) |
|||
for help in help_list: |
|||
print(help) |
|||
#directions |
|||
if keyboard.is_pressed("8"): |
|||
local_monsters = [] |
|||
local_items = [] |
|||
tn.write(b"north\r\n") |
|||
area_indexed = False |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("2"): |
|||
local_monsters = [] |
|||
local_items = [] |
|||
tn.write(b"south\r\n") |
|||
area_indexed = False |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("4"): |
|||
local_monsters = [] |
|||
local_items = [] |
|||
tn.write(b"west\r\n") |
|||
area_indexed = False |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("6"): |
|||
local_monsters = [] |
|||
local_items = [] |
|||
tn.write(b"east\r\n") |
|||
area_indexed = False |
|||
time.sleep(.25) |
|||
#functions |
|||
if keyboard.is_pressed("a"): |
|||
time.sleep(.5) |
|||
if auto_combat: |
|||
auto_combat = False |
|||
print("Auto combat off") |
|||
else: |
|||
auto_combat = True |
|||
print("Auto combat on") |
|||
#Auto Ion |
|||
if keyboard.is_pressed("i"): |
|||
time.sleep(.5) |
|||
if auto_ion: |
|||
auto_ion = False |
|||
print("Auto ion off") |
|||
else: |
|||
auto_ion = True |
|||
print("Auto ion on") |
|||
#Auto farm |
|||
if keyboard.is_pressed("f"): |
|||
time.sleep(.5) |
|||
if auto_farm: |
|||
auto_farm = False |
|||
print("Auto farm off") |
|||
else: |
|||
auto_farm = True |
|||
print("Auto farm on") |
|||
|
|||
if keyboard.is_pressed("c"): |
|||
if len(local_monsters) > 0: |
|||
combat_start() |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("5"): |
|||
tn.write(b"look ") |
|||
time.sleep(.25) |
|||
|
|||
if keyboard.is_pressed("m"): |
|||
time.sleep(.5) |
|||
if wander: |
|||
wander = False |
|||
print("Meander off") |
|||
else: |
|||
wander = True |
|||
print("Meander on") |
|||
tn.write(b"look\r\n") |
|||
|
|||
if keyboard.is_pressed("h"): |
|||
tn.write(b"heal\r\n") |
|||
heal = True |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("l"): |
|||
area_indexed == False |
|||
tn.write(b"look\r\n") |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("m"): |
|||
wander = True |
|||
if keyboard.is_pressed("v"): |
|||
tn.write(b"stat\r\n") |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("s"): |
|||
sell_items() |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("k") and not in_combat: |
|||
time.sleep(.25) |
|||
flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("Keyboard input: ") |
|||
tn.write(st.encode('ascii')+b"\r\n") |
|||
flush_input() |
|||
|
|||
if keyboard.is_pressed("w"): |
|||
time.sleep(.25) |
|||
tn.write(b"wie nuclear-decay\r\n") |
|||
|
|||
if keyboard.is_pressed("d"): |
|||
time.sleep(.25) |
|||
flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("drop item: ") |
|||
drop_item = "drop " + st |
|||
tn.write(drop_item.encode('ascii')+b"\r\n") |
|||
|
|||
if keyboard.is_pressed("t") and not in_combat: |
|||
monster_list = [] |
|||
time.sleep(.25) |
|||
flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("year: ") |
|||
year = "travel " + st |
|||
tn.write(year.encode('ascii')+b"\r\n") |
|||
|
|||
if keyboard.is_pressed("x"): |
|||
break |
|||
|
|||
user = input("User name:") |
|||
password = input("Password:") |
|||
lock_key = input("Lock key:") |
|||
|
|||
while True: |
|||
line = None |
|||
line = tn.read_until(b"\n",1) # Read one line |
|||
if line.decode('cp1252') == "": |
|||
#print("break") |
|||
#break |
|||
pass |
|||
else: |
|||
ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])') |
|||
result = ansi_escape.sub('', line.decode('cp1252').strip('\n')) |
|||
print(result) |
|||
if result == "Otherwise type \"new\": ": |
|||
tn.write(user.encode('ascii')+b"\r\n") |
|||
|
|||
if result == "Enter your password: ": |
|||
tn.write(password.encode('ascii')+b"\r\n") |
|||
|
|||
if result == "(N)onstop, (Q)uit, or (C)ontinue?": |
|||
tn.write(b"Q\r\n") |
|||
|
|||
if result == "Make your selection (G,T,F,M,S,? for help, or X to exit): ": |
|||
tn.write(b"G\r\n") |
|||
|
|||
if result == "help, or X to exit): ": |
|||
tn.write(b"C\r\n") |
|||
|
|||
if result == "Select (P,I,H,S,W,X,?): ": |
|||
tn.write(b"P\r\n") |
|||
|
|||
if result == "Select (Bury, 1-5, ?) ": |
|||
tn.write(b"4\r\n") |
|||
mutants() |
|||
break |
|||
|
|||
|
|||
@ -0,0 +1,526 @@ |
|||
import getpass |
|||
import telnetlib |
|||
import re |
|||
import time |
|||
import keyboard |
|||
import random |
|||
|
|||
HOST = "192.168.86.34" |
|||
user = "epilectrik" |
|||
password = "gupass" |
|||
tn = telnetlib.Telnet() |
|||
tn.open(HOST,2323) |
|||
|
|||
#static lists |
|||
convert_list = ["Ion-Pack","Ion-Decay","Cheese","Nuclear-thong","Skull","Bottle-Cap","Cigarette-Butt","Knife","Gas-Grenade", |
|||
"Light-Spear","Silver-Potion","Bastard-Sword","Invisible-Knife","Great-Club","Spear","Blizzard-Staff","Devil_Key","Grey-Dagger","Bone","Axe","BlackJack", |
|||
"Golden-Key","Crystal-Key","Trident","Ice-Knife","Iron-Sickle","Gold-Spear","Fang-Dagger","Hound-Fang","Pink-Potion","Small-Dagger","Mage-Stick","Purple-Potion", |
|||
"Tree-Branch","Poker","Bronze Knife","Small-Club","Wonderous-Sword","Spell-Potion","Long-Sword","Ion-Gauntlet","Sling-Sword","Green-Vial","Small-Spear", |
|||
"Tree-Stump","Saphire","Flame-Sword","Rock-Club","Lava-Dagger","Bloody-Arm"] |
|||
|
|||
farm_list = ["Gold-Chunck","Nuclear-Rock","Nuclear-Decay","Invisible-Cloth","Troll-Skin","Ion-Booster","Nuclear-Waste"] |
|||
|
|||
friend_list = ["Epilectrik","ImBait","Mtron","Im"] |
|||
|
|||
help_list = ["$ - Key listener on/off", |
|||
"8 - North", |
|||
"2 - South", |
|||
"6 - East", |
|||
"4 - West", |
|||
"5 - Look direction", |
|||
"c - Combat", |
|||
"w - Wield weapon", |
|||
"a - Auto combat on/off", |
|||
"f - Auto farm on/off", |
|||
"i - Auto Ion on/off", |
|||
"t - time travel", |
|||
"d - drop item", |
|||
"k - keyboard input", |
|||
"v - status", |
|||
"m - meander" |
|||
] |
|||
|
|||
#dynamic lists |
|||
local_items = [] |
|||
local_monsters = [] |
|||
|
|||
#modes |
|||
heal = False |
|||
wander = False |
|||
auto_combat = False |
|||
auto_ion = False |
|||
auto_farm = False |
|||
key_detect = True |
|||
#states |
|||
time_steps = 0 |
|||
in_combat = False |
|||
hits = 0 |
|||
lock_key="$" |
|||
north_ok = True |
|||
south_ok = True |
|||
west_ok = True |
|||
east_ok = True |
|||
|
|||
|
|||
#Reup Ions |
|||
def convert_items(): |
|||
global local_items |
|||
global convert_list |
|||
for item_l in local_items: |
|||
for item in convert_list: |
|||
if item_l == item: |
|||
tn.write(b"get "+item.encode('ascii')+b"\r\n") |
|||
tn.write(b"con "+item.encode('ascii')+b"\r\n") |
|||
local_items.remove(item_l) |
|||
|
|||
#Farms valuable stuff |
|||
def farm_items(): |
|||
global local_items |
|||
global farm_list |
|||
for item_l in local_items: |
|||
for item in farm_list: |
|||
if item_l == item: |
|||
tn.write(b"get "+item.encode('ascii')+b"\r\n") |
|||
local_items.remove(item_l) |
|||
|
|||
#Remove friends from monster list |
|||
def remove_friends(): |
|||
global local_monsters |
|||
for friend in friend_list: |
|||
try: |
|||
local_monsters.remove(friend) |
|||
except: |
|||
pass |
|||
|
|||
#Flushes keyboard |
|||
def flush_input(): |
|||
|
|||
try: |
|||
import msvcrt |
|||
while msvcrt.kbhit(): |
|||
msvcrt.getch() |
|||
except ImportError: |
|||
import sys, termios |
|||
termios.tcflush(sys.stdin, termios.TCIOFLUSH) |
|||
|
|||
def decode_line(line): |
|||
result = "" |
|||
if line.decode('cp1252') != "": |
|||
ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])') |
|||
result = ansi_escape.sub('', line.decode('cp1252').strip('\n')) |
|||
print(result) |
|||
return result |
|||
|
|||
#initiate combat |
|||
def combat_start(): |
|||
global local_monsters |
|||
global in_combat |
|||
|
|||
tn.write(b"combat " + local_monsters[0].encode('ascii')+b"\r\n") |
|||
in_combat = True |
|||
heal = True |
|||
|
|||
#process wander |
|||
def wander_process(result) |
|||
global heal |
|||
global north_ok |
|||
global south_ok |
|||
global east_ok |
|||
global west_ok |
|||
|
|||
direction_list = [] |
|||
|
|||
#area clear |
|||
if result.find("north - area continues.") != -1: |
|||
direction_list.add("north") |
|||
if result.find("south - area continues.") != -1: |
|||
direction_list.add("south") |
|||
if result.find("east - area continues.") != -1: |
|||
direction_list.add("east") |
|||
if result.find("west - area continues.") != -1: |
|||
direction_list.add("west") |
|||
|
|||
#are there monsters |
|||
if result.find("You see shadows to the"): |
|||
if result.find("north"): |
|||
direction_list.remove("north") |
|||
if result.find("south"): |
|||
direction_list.remove("south") |
|||
if result.find("east"): |
|||
direction_list.remove("east") |
|||
if result.find("west"): |
|||
direction_list.remove("west") |
|||
print(direction_list) |
|||
#pick randomly |
|||
if len(direction_list) > 0: |
|||
dir_choice = random.choice(direction_list) |
|||
tn.write(dir_choice.encode('ascii')+b"\r\n") |
|||
|
|||
#process combat per loop |
|||
def combat_process(result): |
|||
global heal |
|||
global hits |
|||
global time_steps |
|||
global local_monsters |
|||
global in_combat |
|||
|
|||
if result.find("You suffer") != -1: |
|||
hits = hits + 1 |
|||
if hits == 2: |
|||
tn.write(b"heal\r\n") |
|||
tn.write(b"heal\r\n") |
|||
hits = 0 |
|||
|
|||
if result.find("have slain") != -1 or result.find("has just left") != -1 or result.find("isn't around here!") != -1 or result.find("You're not ready") != -1: |
|||
try: |
|||
local_monsters.pop(0) |
|||
except: |
|||
pass |
|||
if len(local_monsters) > 0: |
|||
tn.write(b"combat " + local_monsters[0].encode('ascii')+b"\r\n") |
|||
else: |
|||
print("Area cleared") |
|||
in_combat = False |
|||
|
|||
wield = time_steps % 5 |
|||
|
|||
if wield == 0: |
|||
tn.write(b"wie nuclear-decay\r\n") |
|||
|
|||
def index_area(): |
|||
global local_items |
|||
global local_monsters |
|||
line = tn.read_until(b">",0) # Read one line |
|||
result = decode_line(line) |
|||
#Index items |
|||
if result.find("On the ground lies:") != -1: |
|||
start_index = result.index('On the ground lies:') |
|||
item_str = result[start_index:] |
|||
try: |
|||
end_index = item_str.index('***') |
|||
except: |
|||
end_index = item_str.index('>') |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace("On the ground lies:","") |
|||
item_str = item_str.replace("0","") |
|||
item_str = item_str.replace("1","") |
|||
item_str = item_str.replace("2","") |
|||
item_str = item_str.replace("3","") |
|||
item_str = item_str.replace("4","") |
|||
item_str = item_str.replace("5","") |
|||
item_str = item_str.replace("6","") |
|||
item_str = item_str.replace("7","") |
|||
item_str = item_str.replace("8","") |
|||
item_str = item_str.replace("9","") |
|||
item_str = item_str.replace("(","") |
|||
item_str = item_str.replace(")","") |
|||
item_str = item_str.replace("A ","") |
|||
item_str = item_str.replace("An ","") |
|||
item_str = item_str.replace(" ","") |
|||
item_str = item_str.replace(".","") |
|||
item_str = item_str.replace("\r\n","") |
|||
item_str = item_str.replace("***","") |
|||
local_items = list(item_str.split(",")) |
|||
print(local_items) |
|||
|
|||
if result.find("here") != -1: |
|||
end_index = result.index('here') |
|||
monster_str = result[:end_index] |
|||
start_index = monster_str.rindex('***') |
|||
monster_str = monster_str[start_index:] |
|||
monster_str = monster_str.replace("\r\n","") |
|||
monster_str = monster_str.replace(" and ","") |
|||
monster_str = monster_str.replace(" are ","") |
|||
monster_str = monster_str.replace(" is ","") |
|||
monster_str = monster_str.replace(" ","") |
|||
monster_str = monster_str.replace(".","") |
|||
monster_str = monster_str.replace("***","") |
|||
local_monsters = list(monster_str.split(",")) |
|||
remove_friends() |
|||
print(local_monsters) |
|||
|
|||
def mutants(): |
|||
global time_steps |
|||
global local_items |
|||
global local_monsters |
|||
global heal |
|||
global wander |
|||
global in_combat |
|||
global key_detect |
|||
global auto_combat |
|||
global auto_farm |
|||
global auto_ion |
|||
global lock_key |
|||
|
|||
while True: |
|||
#print(local_items) |
|||
time.sleep(.1) |
|||
time_steps = time_steps + 1 |
|||
#data decode |
|||
result = "" |
|||
line = None |
|||
line = tn.read_until(b"\n",0) # Read one line |
|||
result = decode_line(line) |
|||
|
|||
heal_trigger = time_steps % 20 |
|||
if heal_trigger == 0: |
|||
if heal: |
|||
tn.write(b"heal\r\n") |
|||
|
|||
#process wander |
|||
wander_trigger = time_steps % 50 |
|||
if wander: |
|||
process_wander(result) |
|||
|
|||
if time_steps == 1000: |
|||
time_steps = 0 |
|||
|
|||
#process combat |
|||
if in_combat: |
|||
combat_process(result) |
|||
|
|||
#scrapers |
|||
if result == "(N)onstop, (Q)uit, or (C)ontinue?": |
|||
tn.write(b"N\r\n") |
|||
|
|||
if result.find("travel") != -1: |
|||
local_monsters = [] |
|||
|
|||
if result.find("Compass:") != -1: |
|||
index_area() |
|||
|
|||
if result.find("Nothing happens!") != -1 or result.find("You don't have enough ions to heal!") != -1: |
|||
heal = False |
|||
|
|||
if result.find("You suffer") != -1 or result.find("You are poisoned!") != -1: |
|||
heal = True |
|||
|
|||
#monster list related |
|||
if result.find("yells: Gimmie") != -1 or result.find("just arrived from") != -1 or result.find("has magically appeared") != -1: |
|||
m = result.index(' ') |
|||
monster = result[:m] |
|||
local_monsters.append(monster) |
|||
remove_friends() |
|||
print(local_monsters) |
|||
if len(local_monsters) > 0 and auto_combat: |
|||
combat_start() |
|||
|
|||
if result.find("has just left") != -1: |
|||
end_index = result.index(' has') |
|||
mon_str = result[:end_index] |
|||
mon_str = mon_str.replace(" ","") |
|||
try: |
|||
local_monsters.remove(mon_str) |
|||
except: |
|||
pass |
|||
print(mon_str) |
|||
print(local_monsters) |
|||
|
|||
if result.find("is crumbling to dust") != -1: |
|||
end_index = result.index(' is') |
|||
mon_str = result[:end_index] |
|||
mon_str = mon_str.replace(" ","") |
|||
try: |
|||
local_monsters.remove(mon_str) |
|||
except: |
|||
pass |
|||
print(mon_str) |
|||
print(local_monsters) |
|||
|
|||
if result.find("picked up the") != -1: |
|||
start_index = result.index('the') + 4 |
|||
item_str = result[start_index:] |
|||
end_index = item_str.index('.') |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace(" ","") |
|||
try: |
|||
local_items.remove(item_str) |
|||
except: |
|||
pass |
|||
print(item_str) |
|||
print(local_items) |
|||
|
|||
if result.find("is falling from") != -1: |
|||
start_index = result.index('A') |
|||
item_str = result[start_index:] |
|||
end_index = item_str.index('is') |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace(" ","") |
|||
item_str = item_str.replace("is","") |
|||
item_str = item_str.replace("An","") |
|||
item_str = item_str.replace("A","") |
|||
local_items.append(item_str) |
|||
print(local_items) |
|||
|
|||
if result.find("Select (Bury, 1-5, ?)") != -1: |
|||
in_combat=False |
|||
heal = False |
|||
|
|||
#farm items |
|||
if len(local_items) > 0: |
|||
if auto_farm: |
|||
farm_items() |
|||
if auto_ion: |
|||
convert_items() |
|||
#print("convert") |
|||
|
|||
#functions |
|||
if keyboard.is_pressed(lock_key): |
|||
time.sleep(.5) |
|||
if key_detect: |
|||
key_detect = False |
|||
print("Key detect off") |
|||
else: |
|||
key_detect = True |
|||
print("Key detect on") |
|||
|
|||
if key_detect: |
|||
if keyboard.is_pressed("?"): |
|||
time.sleep(.5) |
|||
for help in help_list: |
|||
print(help) |
|||
#directions |
|||
if keyboard.is_pressed("8"): |
|||
local_monsters = [] |
|||
local_items = [] |
|||
tn.write(b"north\r\n") |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("2"): |
|||
local_monsters = [] |
|||
local_items = [] |
|||
tn.write(b"south\r\n") |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("4"): |
|||
local_monsters = [] |
|||
local_items = [] |
|||
tn.write(b"west\r\n") |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("6"): |
|||
local_monsters = [] |
|||
local_items = [] |
|||
tn.write(b"east\r\n") |
|||
time.sleep(.25) |
|||
#functions |
|||
if keyboard.is_pressed("a"): |
|||
time.sleep(.5) |
|||
if auto_combat: |
|||
auto_combat = False |
|||
print("Auto combat off") |
|||
else: |
|||
auto_combat = True |
|||
print("Auto combat on") |
|||
#Auto Ion |
|||
if keyboard.is_pressed("i"): |
|||
time.sleep(.5) |
|||
if auto_ion: |
|||
auto_ion = False |
|||
print("Auto ion off") |
|||
else: |
|||
auto_ion = True |
|||
print("Auto ion on") |
|||
#Auto farm |
|||
if keyboard.is_pressed("f"): |
|||
time.sleep(.5) |
|||
if auto_farm: |
|||
auto_farm = False |
|||
print("Auto farm off") |
|||
else: |
|||
auto_farm = True |
|||
print("Auto farm on") |
|||
|
|||
if keyboard.is_pressed("c"): |
|||
if len(local_monsters) > 0: |
|||
combat_start() |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("5"): |
|||
tn.write(b"look ") |
|||
time.sleep(.25) |
|||
|
|||
if keyboard.is_pressed("m"): |
|||
time.sleep(.5) |
|||
if wander: |
|||
wander = False |
|||
print("Meander off") |
|||
else: |
|||
wander = True |
|||
print("Meander on") |
|||
|
|||
if keyboard.is_pressed("h"): |
|||
tn.write(b"heal\r\n") |
|||
heal = True |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("l"): |
|||
tn.write(b"look\r\n") |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("m"): |
|||
wander = True |
|||
if keyboard.is_pressed("v"): |
|||
tn.write(b"stat\r\n") |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("s"): |
|||
tn.write(b"sell gold-chunck\r\n") |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("k"): |
|||
time.sleep(.25) |
|||
flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("Keyboard input: ") |
|||
tn.write(st.encode('ascii')+b"\r\n") |
|||
flush_input() |
|||
|
|||
if keyboard.is_pressed("d"): |
|||
time.sleep(.25) |
|||
flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("drop item: ") |
|||
drop_item = "drop " + st |
|||
tn.write(drop_item.encode('ascii')+b"\r\n") |
|||
|
|||
if keyboard.is_pressed("t"): |
|||
monster_list = [] |
|||
time.sleep(.25) |
|||
flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("year: ") |
|||
year = "travel " + st |
|||
tn.write(year.encode('ascii')+b"\r\n") |
|||
|
|||
if keyboard.is_pressed("x"): |
|||
break |
|||
|
|||
user = input("User name:") |
|||
password = input("Password:") |
|||
lock_key = input("Lock key:") |
|||
|
|||
while True: |
|||
line = None |
|||
line = tn.read_until(b"\n",1) # Read one line |
|||
if line.decode('cp1252') == "": |
|||
#print("break") |
|||
#break |
|||
pass |
|||
else: |
|||
ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])') |
|||
result = ansi_escape.sub('', line.decode('cp1252').strip('\n')) |
|||
print(result) |
|||
if result == "Username: ": |
|||
tn.write(user.encode('ascii')+b"\r\n") |
|||
|
|||
if result == "Password: ": |
|||
tn.write(password.encode('ascii')+b"\r\n") |
|||
|
|||
if result == "(N)onstop, (Q)uit, or (C)ontinue?": |
|||
tn.write(b"Q\r\n") |
|||
|
|||
if result == "Make your selection (X to exit): ": |
|||
tn.write(b"1\r\n") |
|||
|
|||
if result == "Select (P,I,H,S,W,X,?): ": |
|||
tn.write(b"P\r\n") |
|||
|
|||
if result == "Select (Bury, 1-5, ?) ": |
|||
tn.write(b"4\r\n") |
|||
mutants() |
|||
break |
|||
|
|||
|
|||
@ -0,0 +1,812 @@ |
|||
import getpass |
|||
import telnetlib |
|||
import re |
|||
import time |
|||
import keyboard |
|||
import random |
|||
|
|||
HOST = "telnet.goldenunicorn.net" |
|||
user = "epilectrik" |
|||
password = "gupass" |
|||
tn = telnetlib.Telnet() |
|||
tn.open(HOST,23) |
|||
|
|||
#static lists |
|||
convert_list = ["Ion-Pack","Ion-Decay","Cheese","Nuclear-thong","Skull","Bottle-Cap","Cigarette-Butt","Knife","Gas-Grenade", |
|||
"Light-Spear","Silver-Potion","Bastard-Sword","Invisible-Knife","Great-Club","Spear","Blizzard-Staff","Devil_Key","Grey-Dagger","Bone","Axe","BlackJack", |
|||
"Golden-Key","Crystal-Key","Trident","Ice-Knife","Iron-Sickle","Gold-Spear","Fang-Dagger","Hound-Fang","Pink-Potion","Small-Dagger","Mage-Stick","Purple-Potion", |
|||
"Tree-Branch","Poker","Bronze Knife","Small-Club","Wonderous-Sword","Spell-Potion","Long-Sword","Ion-Gauntlet","Sling-Sword","Green-Vial","Small-Spear", |
|||
"Tree-Stump","Saphire","Flame-Sword","Rock-Club","Lava-Dagger","Bloody-Arm","Golden-Needle","Ion-Booster"] |
|||
|
|||
farm_list = ["Gold-Chunck","Nuclear-Rock","Nuclear-Waste"] |
|||
|
|||
stock_list = ["Nuclear-Decay","Troll-Skin","Invisible-Cloth","Hell-Blade",""] |
|||
|
|||
friend_list = ["Epilectrik","ImBait","Mtron","Im"] |
|||
|
|||
help_list = ["$ - Key listener on/off", |
|||
"8 - North", |
|||
"2 - South", |
|||
"6 - East", |
|||
"4 - West", |
|||
"5 - Look direction", |
|||
"c - Combat", |
|||
"w - Wield weapon", |
|||
"a - Auto combat on/off", |
|||
"f - Auto farm on/off", |
|||
"i - Auto Ion on/off", |
|||
"t - time travel", |
|||
"d - drop item", |
|||
"k - keyboard input", |
|||
"v - status", |
|||
"m - meander" |
|||
] |
|||
|
|||
#dynamic lists |
|||
local_items = [] |
|||
local_monsters = [] |
|||
|
|||
#modes |
|||
heal = False |
|||
wander = False |
|||
auto_combat = False |
|||
auto_ion = False |
|||
auto_farm = False |
|||
key_detect = True |
|||
#states |
|||
time_steps = 0 |
|||
in_combat = False |
|||
hits = 0 |
|||
lock_key="$" |
|||
direction_list = [] |
|||
sell_list = [] |
|||
previous_dir = "" |
|||
selected_path = 0 |
|||
path_step = 0 |
|||
riblets = 0 |
|||
riblet_thresh = 100000 |
|||
farm_year=2000 |
|||
year_limit=2500 |
|||
no_action_cnt = 0 |
|||
na_thresh = 50 |
|||
|
|||
path_list = [ |
|||
["done","tra 2000","south","deposit "+str(riblet_thresh),"stat","tra "+str(farm_year),"done"], |
|||
["done","tra 2000","east","east","east","deposit "+str(riblet_thresh),"stat","tra "+str(farm_year),"done"], |
|||
["done","tra 2000","south","south","south","south","south","south","west","west","west","north","deposit "+str(riblet_thresh),"stat","tra "+str(farm_year),"done"] |
|||
] |
|||
|
|||
opposite_dir = { |
|||
"north":"south", |
|||
"south":"north", |
|||
"east":"west", |
|||
"west":"east", |
|||
} |
|||
|
|||
#search a list |
|||
def search(list, platform): |
|||
for i in range(len(list)): |
|||
if list[i] == platform: |
|||
return True |
|||
return False |
|||
|
|||
#Reup Ions |
|||
def convert_items(): |
|||
global local_items |
|||
global convert_list |
|||
for item_l in local_items: |
|||
for item in convert_list: |
|||
if item_l == item: |
|||
tn.write(b"get "+item.encode('ascii')+b"\r\n") |
|||
tn.write(b"con "+item.encode('ascii')+b"\r\n") |
|||
local_items.remove(item_l) |
|||
|
|||
#Farms valuable stuff |
|||
def farm_items(): |
|||
global local_items |
|||
global farm_list |
|||
global sell_list |
|||
global no_action_cnt |
|||
|
|||
for item_l in local_items: |
|||
for item in farm_list: |
|||
if item_l == item: |
|||
tn.write(b"get "+item.encode('ascii')+b"\r\n") |
|||
local_items.remove(item_l) |
|||
sell_list.append(item_l) |
|||
no_action_cnt = 0 |
|||
|
|||
#Sell items |
|||
def sell_items(): |
|||
global sell_list |
|||
print(sell_list) |
|||
while len(sell_list) > 0: |
|||
item_l=sell_list[0] |
|||
sell_list.pop(0) |
|||
if item_l != "Nuclear-Decay": |
|||
tn.write(b"sell "+item_l.encode('ascii')+b"\r\n") |
|||
time.sleep(.25) |
|||
|
|||
|
|||
#Remove friends from monster list |
|||
def remove_friends(): |
|||
global local_monsters |
|||
for friend in friend_list: |
|||
try: |
|||
local_monsters.remove(friend) |
|||
except: |
|||
pass |
|||
|
|||
#Flushes keyboard |
|||
def flush_input(): |
|||
|
|||
try: |
|||
import msvcrt |
|||
while msvcrt.kbhit(): |
|||
msvcrt.getch() |
|||
except ImportError: |
|||
import sys, termios |
|||
termios.tcflush(sys.stdin, termios.TCIOFLUSH) |
|||
|
|||
#Decode incoming information |
|||
def decode_line(line): |
|||
result = "" |
|||
if line.decode('cp1252') != "": |
|||
ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])') |
|||
result = ansi_escape.sub('', line.decode('cp1252').strip('\n')) |
|||
print(result) |
|||
return result |
|||
|
|||
#initiate combat |
|||
def combat_start(): |
|||
global local_monsters |
|||
global in_combat |
|||
global path_step |
|||
global no_action_cnt |
|||
|
|||
tn.write(b"combat " + local_monsters[0].encode('ascii')+b"\r\n") |
|||
in_combat = True |
|||
heal = True |
|||
path_step = 0 |
|||
no_action_cnt = 0 |
|||
|
|||
#process wander |
|||
def wander_process(result,wander_trigger): |
|||
global heal |
|||
global direction_list |
|||
global previous_dir |
|||
global local_monsters |
|||
global local_items |
|||
global no_action_cnt |
|||
|
|||
#area clear |
|||
if result.find("north - area continues.") != -1 or result.find("north - open gate.") != -1: |
|||
direction_list.append("north") |
|||
if result.find("south - area continues.") != -1 or result.find("south - open gate.") != -1: |
|||
direction_list.append("south") |
|||
if result.find("east - area continues.") != -1 or result.find("east - open gate.") != -1: |
|||
direction_list.append("east") |
|||
if result.find("west - area continues.") != -1 or result.find("west - open gate.") != -1: |
|||
direction_list.append("west") |
|||
|
|||
#are there monsters |
|||
if result.find("You see shadows to the") != -1: |
|||
try: |
|||
if result.find("north") != -1: |
|||
direction_list.remove("north") |
|||
if result.find("south") != -1: |
|||
direction_list.remove("south") |
|||
if result.find("east") != -1: |
|||
direction_list.remove("east") |
|||
if result.find("west") != -1: |
|||
direction_list.remove("west") |
|||
except: |
|||
pass |
|||
|
|||
if wander_trigger == 0: |
|||
print("wander triggered") |
|||
print("no action: " + str(no_action_cnt)) |
|||
#increment no action counter |
|||
no_action_cnt = no_action_cnt + 1 |
|||
if len(direction_list) == 0: |
|||
tn.write(b"look\r\n") |
|||
local_monsters = [] |
|||
local_items = [] |
|||
|
|||
#pick randomly |
|||
if len(direction_list) > 0 and wander_trigger == 0: |
|||
if len(direction_list) > 1: |
|||
try: |
|||
direction_list.remove(previous_dir) |
|||
except: |
|||
pass |
|||
print(direction_list) |
|||
dir_choice = random.choice(direction_list) |
|||
tn.write(dir_choice.encode('ascii')+b"\r\n") |
|||
direction_list = [] |
|||
previous_dir = opposite_dir[dir_choice] |
|||
|
|||
#process combat per loop |
|||
def combat_process(result): |
|||
global heal |
|||
global hits |
|||
global time_steps |
|||
global local_monsters |
|||
global in_combat |
|||
|
|||
if result.find("You suffer") != -1: |
|||
hits = hits + 1 |
|||
if hits == 2: |
|||
tn.write(b"heal\r\n") |
|||
tn.write(b"heal\r\n") |
|||
hits = 0 |
|||
|
|||
if result.find("have slain") != -1 or result.find("has just left") != -1 or result.find("isn't around here!") != -1 or result.find("You're not ready") != -1: |
|||
try: |
|||
local_monsters.pop(0) |
|||
except: |
|||
pass |
|||
if len(local_monsters) > 0: |
|||
tn.write(b"combat " + local_monsters[0].encode('ascii')+b"\r\n") |
|||
else: |
|||
print("Area cleared") |
|||
in_combat = False |
|||
|
|||
wield = time_steps % 10 |
|||
|
|||
if wield == 0: |
|||
tn.write(b"wie nuclear-decay\r\n") |
|||
|
|||
#time travel |
|||
def time_travel(): |
|||
global farm_year |
|||
global year_limit |
|||
farm_year = farm_year + 100 |
|||
if farm_year > year_limit: |
|||
farm_year = 2000 |
|||
tn.write(b"tra "+str(farm_year).encode('ascii')+b"\r\n") |
|||
|
|||
#process path |
|||
def path_process(): |
|||
global selected_path |
|||
global path_step |
|||
path_str = path_list[selected_path][path_step] |
|||
if path_str != "done": |
|||
tn.write(path_str.encode('ascii')+b"\r\n") |
|||
path_step = path_step + 1 |
|||
else: |
|||
path_step = 0 |
|||
|
|||
#process stats |
|||
def parse_stat(): |
|||
global farm_list |
|||
global sell_list |
|||
global riblets |
|||
sell_list = [] |
|||
line = tn.read_until(b">",0) # Read one line |
|||
result = decode_line(line) |
|||
for item_l in farm_list: |
|||
x = line.decode('ascii').count(item_l) |
|||
for i in range(x): |
|||
sell_list.append(item_l) |
|||
|
|||
if result.find("Riblets :") != -1: |
|||
start_index = result.index('Riblets : ') + 16 |
|||
riblets_str = result[start_index:] |
|||
try: |
|||
end_index = riblets_str.index(' ') |
|||
except: |
|||
pass |
|||
riblets_str = riblets_str[:end_index] |
|||
print("Riblets:" + riblets_str) |
|||
riblets = int(riblets_str) |
|||
print(sell_list) |
|||
|
|||
#index area |
|||
def index_area(): |
|||
global local_items |
|||
global local_monsters |
|||
end_index = 0 |
|||
line = tn.read_until(b">",0) # Read one line |
|||
result = decode_line(line) |
|||
#Index items |
|||
if result.find("On the ground lies:") != -1: |
|||
start_index = result.index('On the ground lies:') |
|||
item_str = result[start_index:] |
|||
try: |
|||
end_index = item_str.index('***') |
|||
except: |
|||
try: |
|||
end_index = item_str.index('>') |
|||
except: |
|||
pass |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace("On the ground lies:","") |
|||
item_str = item_str.replace("0","") |
|||
item_str = item_str.replace("1","") |
|||
item_str = item_str.replace("2","") |
|||
item_str = item_str.replace("3","") |
|||
item_str = item_str.replace("4","") |
|||
item_str = item_str.replace("5","") |
|||
item_str = item_str.replace("6","") |
|||
item_str = item_str.replace("7","") |
|||
item_str = item_str.replace("8","") |
|||
item_str = item_str.replace("9","") |
|||
item_str = item_str.replace("(","") |
|||
item_str = item_str.replace(")","") |
|||
item_str = item_str.replace("A ","") |
|||
item_str = item_str.replace("An ","") |
|||
item_str = item_str.replace(" ","") |
|||
item_str = item_str.replace(".","") |
|||
item_str = item_str.replace("\r\n","") |
|||
item_str = item_str.replace("***","") |
|||
local_items = list(item_str.split(",")) |
|||
print(local_items) |
|||
|
|||
if result.find("here") != -1: |
|||
end_index = result.index('here') |
|||
monster_str = result[:end_index] |
|||
start_index = monster_str.rindex('***') |
|||
monster_str = monster_str[start_index:] |
|||
monster_str = monster_str.replace("\r\n","") |
|||
monster_str = monster_str.replace(" and ","") |
|||
monster_str = monster_str.replace(" are ","") |
|||
monster_str = monster_str.replace(" is ","") |
|||
monster_str = monster_str.replace(" ","") |
|||
monster_str = monster_str.replace(".","") |
|||
monster_str = monster_str.replace("***","") |
|||
local_monsters = list(monster_str.split(",")) |
|||
remove_friends() |
|||
print(local_monsters) |
|||
|
|||
#main game loop |
|||
def mutants(): |
|||
global time_steps |
|||
global local_items |
|||
global local_monsters |
|||
global heal |
|||
global wander |
|||
global in_combat |
|||
global key_detect |
|||
global auto_combat |
|||
global auto_farm |
|||
global auto_ion |
|||
global lock_key |
|||
global direction_list |
|||
global selected_path |
|||
global path_step |
|||
global path_list |
|||
global riblets |
|||
global no_action_cnt |
|||
global na_thresh |
|||
global year_limit |
|||
global farm_year |
|||
|
|||
area_indexed = False |
|||
while True: |
|||
#print(local_items) |
|||
time.sleep(.1) |
|||
time_steps = time_steps + 1 |
|||
|
|||
#data decode |
|||
result = "" |
|||
line = None |
|||
line = tn.read_until(b"\n",0) # Read one line |
|||
result = decode_line(line) |
|||
|
|||
#Nothing has happened in a while, time jump |
|||
if no_action_cnt > na_thresh: |
|||
time_travel() |
|||
no_action_cnt = 0 |
|||
|
|||
#deposit riblets |
|||
if riblets > riblet_thresh and path_step == 0: |
|||
path_step = 1 |
|||
|
|||
#follow path_list |
|||
path_trigger = time_steps % 10 |
|||
if path_trigger == 0 and not in_combat: |
|||
path_process() |
|||
|
|||
#parse status |
|||
stat_trigger = time_steps % 600 |
|||
if stat_trigger == 0 and not in_combat: |
|||
tn.write(b"stat\r\n") |
|||
|
|||
#heal |
|||
heal_trigger = time_steps % 20 |
|||
if heal_trigger == 0: |
|||
if heal: |
|||
tn.write(b"heal\r\n") |
|||
|
|||
#auto farm if sold items |
|||
if len(sell_list) == 0 and wander: |
|||
auto_farm = True |
|||
|
|||
#process wander |
|||
wander_trigger = time_steps % 30 |
|||
if wander and not in_combat and path_step == 0: |
|||
if wander_trigger == 0: |
|||
area_indexed = False |
|||
#print("wander triggered") |
|||
wander_process(result,wander_trigger) |
|||
|
|||
#Reset time steps |
|||
if time_steps == 1000: |
|||
time_steps = 0 |
|||
|
|||
#process combat |
|||
if in_combat: |
|||
combat_process(result) |
|||
|
|||
#scrapers |
|||
if result == "(N)onstop, (Q)uit, or (C)ontinue?": |
|||
tn.write(b"N\r\n") |
|||
|
|||
#ion starvation |
|||
if result.find("You're starving for IONS!") != -1: |
|||
tn.write(b"con gold-chunck\r\n") |
|||
auto_ion = True |
|||
heal = True |
|||
|
|||
#too heavy |
|||
if wander and result.find("The weight of all your items forces you to the ground.") != -1: |
|||
wander = False |
|||
tn.write(b"X\r\n") |
|||
|
|||
#dropped your weapon! |
|||
if auto_farm and result.find("The Nuclear-Decay fell out of your sack!") != -1: |
|||
time_steps = 0 |
|||
tn.write(b"con gold-chunck\r\n") |
|||
tn.write(b"get nuclear-decay\r\n") |
|||
|
|||
#I can't remember why I did this |
|||
if auto_farm and result.find("You're not carrying a gold-chunck.") != -1: |
|||
auto_farm = False |
|||
|
|||
#Dropped the bait, pick it back up |
|||
if result.find("The Monster-Bait fell out of your sack!") != -1: |
|||
time_steps = 0 |
|||
tn.write(b"con gold-chunck\r\n") |
|||
tn.write(b"get monster-bait\r\n") |
|||
|
|||
#if wander and result.find("fell out of your sack!") != -1: |
|||
#wander = False |
|||
#auto_farm = False |
|||
|
|||
#GTFO |
|||
if wander and ((result.find("It's too dark to see anything!") != -1 or |
|||
result.find("has hit you with his Nuclear-Decay!") != -1 or |
|||
result.find("You're blocked!") != -1) or |
|||
len(local_monsters) > 4): |
|||
|
|||
heal = True |
|||
tn.write(b"tra "+str(farm_year).encode('ascii')+b"\r\n") |
|||
in_combat = False |
|||
|
|||
#Sell the loot |
|||
if result.find("City Trading Centre") != -1: |
|||
if len(sell_list) > 0: |
|||
sell_items() |
|||
|
|||
#New area, take a look |
|||
if result.find("Compass:") != -1 and area_indexed == False: |
|||
index_area() |
|||
if wander: |
|||
tn.write(b"look\r\n") |
|||
area_indexed = True |
|||
|
|||
#Parse character status |
|||
if result.find("stat") != -1: |
|||
parse_stat() |
|||
|
|||
#Trigger stop healing |
|||
if result.find("Nothing happens!") != -1 or result.find("You don't have enough ions to heal!") != -1: |
|||
heal = False |
|||
|
|||
#Turn on healing |
|||
if result.find("You suffer") != -1 or result.find("You are poisoned!") != -1: |
|||
heal = True |
|||
|
|||
#monster list related |
|||
if (result.find("yells: Gimmie") != -1 or |
|||
result.find("just arrived from") != -1 or |
|||
result.find("has hit") != -1 or |
|||
result.find("body is glowing") != -1 or |
|||
result.find("Get away from me") != -1 or |
|||
result.find("has magically appeared") != -1): |
|||
m = result.index(' ') |
|||
monster = result[:m] |
|||
if not search(local_monsters, monster): |
|||
local_monsters.append(monster) |
|||
remove_friends() |
|||
print(local_monsters) |
|||
if len(local_monsters) > 0 and auto_combat and not in_combat: |
|||
combat_start() |
|||
|
|||
#Monster took off, remove from list |
|||
if result.find("has just left") != -1: |
|||
end_index = result.index(' has') |
|||
mon_str = result[:end_index] |
|||
mon_str = mon_str.replace(" ","") |
|||
try: |
|||
local_monsters.remove(mon_str) |
|||
except: |
|||
pass |
|||
print(mon_str) |
|||
print(local_monsters) |
|||
|
|||
#Monster died, remove from list |
|||
if result.find("is crumbling to dust") != -1: |
|||
end_index = result.index(' is') |
|||
mon_str = result[:end_index] |
|||
mon_str = mon_str.replace(" ","") |
|||
try: |
|||
local_monsters.remove(mon_str) |
|||
except: |
|||
pass |
|||
print(mon_str) |
|||
print(local_monsters) |
|||
|
|||
#Someone picked something up, remove from item list |
|||
if result.find("picked up the") != -1: |
|||
start_index = result.index('the') + 4 |
|||
item_str = result[start_index:] |
|||
end_index = item_str.index('.') |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace(" ","") |
|||
try: |
|||
local_items.remove(item_str) |
|||
except: |
|||
pass |
|||
print(item_str) |
|||
print(local_items) |
|||
|
|||
#Dead person dropping stuff, add to local list |
|||
if result.find("is falling from") != -1: |
|||
start_index = result.index('A') |
|||
item_str = result[start_index:] |
|||
end_index = item_str.index('is') |
|||
item_str = item_str[:end_index] |
|||
item_str = item_str.replace(" ","") |
|||
item_str = item_str.replace("is","") |
|||
item_str = item_str.replace("An","") |
|||
item_str = item_str.replace("A","") |
|||
local_items.append(item_str) |
|||
print(local_items) |
|||
|
|||
#You died, do some stuff |
|||
if result.find("Select (Bury, 1-5, ?)") != -1: |
|||
in_combat=False |
|||
heal = False |
|||
wander = False |
|||
auto_farm = False |
|||
auto_ion = False |
|||
|
|||
#farm items |
|||
if len(local_items) > 0 and not in_combat: |
|||
if auto_farm: |
|||
farm_items() |
|||
if auto_ion: |
|||
convert_items() |
|||
#print("convert") |
|||
|
|||
#keyboard related - this part sucks |
|||
if keyboard.is_pressed(lock_key): |
|||
time.sleep(.5) |
|||
if key_detect: |
|||
key_detect = False |
|||
print("Key detect off") |
|||
else: |
|||
key_detect = True |
|||
print("Key detect on") |
|||
|
|||
if key_detect: |
|||
if keyboard.is_pressed("?"): |
|||
time.sleep(.5) |
|||
for help in help_list: |
|||
print(help) |
|||
|
|||
#directions |
|||
if keyboard.is_pressed("8"): |
|||
local_monsters = [] |
|||
local_items = [] |
|||
tn.write(b"north\r\n") |
|||
area_indexed = False |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("2"): |
|||
local_monsters = [] |
|||
local_items = [] |
|||
tn.write(b"south\r\n") |
|||
area_indexed = False |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("4"): |
|||
local_monsters = [] |
|||
local_items = [] |
|||
tn.write(b"west\r\n") |
|||
area_indexed = False |
|||
time.sleep(.25) |
|||
if keyboard.is_pressed("6"): |
|||
local_monsters = [] |
|||
local_items = [] |
|||
tn.write(b"east\r\n") |
|||
area_indexed = False |
|||
time.sleep(.25) |
|||
#functions |
|||
if keyboard.is_pressed("a"): |
|||
time.sleep(.5) |
|||
if auto_combat: |
|||
auto_combat = False |
|||
print("Auto combat off") |
|||
else: |
|||
auto_combat = True |
|||
print("Auto combat on") |
|||
#Auto Ion |
|||
if keyboard.is_pressed("i"): |
|||
time.sleep(.5) |
|||
if auto_ion: |
|||
auto_ion = False |
|||
print("Auto ion off") |
|||
else: |
|||
auto_ion = True |
|||
print("Auto ion on") |
|||
#Auto farm |
|||
if keyboard.is_pressed("f"): |
|||
time.sleep(.5) |
|||
if auto_farm: |
|||
auto_farm = False |
|||
print("Auto farm off") |
|||
else: |
|||
auto_farm = True |
|||
print("Auto farm on") |
|||
|
|||
#Year limit |
|||
if keyboard.is_pressed("y"): |
|||
time.sleep(.25) |
|||
flush_input() |
|||
st = input("Year limit: ") |
|||
year_limit = int(st) |
|||
|
|||
#No action threshhold |
|||
if keyboard.is_pressed("n"): |
|||
time.sleep(.25) |
|||
flush_input() |
|||
st = input("No action: ") |
|||
na_thresh = int(st) |
|||
|
|||
#Start combat |
|||
if keyboard.is_pressed("c"): |
|||
if len(local_monsters) > 0: |
|||
combat_start() |
|||
time.sleep(.25) |
|||
|
|||
#Start Combat |
|||
if keyboard.is_pressed("c"): |
|||
if len(local_monsters) > 0: |
|||
combat_start() |
|||
time.sleep(.25) |
|||
|
|||
#look around |
|||
if keyboard.is_pressed("5"): |
|||
tn.write(b"look ") |
|||
time.sleep(.25) |
|||
|
|||
#meander status |
|||
if keyboard.is_pressed("m"): |
|||
time.sleep(.5) |
|||
if wander: |
|||
wander = False |
|||
print("Meander off") |
|||
else: |
|||
wander = True |
|||
print("Meander on") |
|||
tn.write(b"look\r\n") |
|||
|
|||
#heal |
|||
if keyboard.is_pressed("h"): |
|||
tn.write(b"heal\r\n") |
|||
heal = True |
|||
time.sleep(.25) |
|||
|
|||
#look around |
|||
if keyboard.is_pressed("l"): |
|||
area_indexed = False |
|||
tn.write(b"look\r\n") |
|||
time.sleep(.25) |
|||
|
|||
#stats |
|||
if keyboard.is_pressed("v"): |
|||
tn.write(b"stat\r\n") |
|||
time.sleep(.25) |
|||
|
|||
#sell items |
|||
if keyboard.is_pressed("s"): |
|||
sell_items() |
|||
time.sleep(.25) |
|||
|
|||
#store path select |
|||
if keyboard.is_pressed("p") and not in_combat: |
|||
time.sleep(.25) |
|||
flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("Choose path input: ") |
|||
selected_path = int(st) |
|||
path_step = 1 |
|||
tn.write(b"Starting path..\r\n") |
|||
flush_input() |
|||
|
|||
#read keyboard |
|||
if keyboard.is_pressed("k") and not in_combat: |
|||
time.sleep(.25) |
|||
flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("Keyboard input: ") |
|||
tn.write(st.encode('ascii')+b"\r\n") |
|||
flush_input() |
|||
|
|||
#wield weapon |
|||
if keyboard.is_pressed("w"): |
|||
time.sleep(.25) |
|||
tn.write(b"wie nuclear-decay\r\n") |
|||
|
|||
#drop item |
|||
if keyboard.is_pressed("d"): |
|||
time.sleep(.25) |
|||
flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("drop item: ") |
|||
drop_item = "drop " + st |
|||
tn.write(drop_item.encode('ascii')+b"\r\n") |
|||
|
|||
#time travel |
|||
if keyboard.is_pressed("t") and not in_combat: |
|||
monster_list = [] |
|||
time.sleep(.25) |
|||
flush_input() |
|||
#toss = keyboard.read_key() |
|||
st = input("year: ") |
|||
year = "travel " + st |
|||
tn.write(year.encode('ascii')+b"\r\n") |
|||
|
|||
if keyboard.is_pressed("x"): |
|||
break |
|||
|
|||
user = input("User name:") |
|||
password = input("Password:") |
|||
lock_key = input("Lock key:") |
|||
|
|||
while True: |
|||
line = None |
|||
line = tn.read_until(b"\n",1) # Read one line |
|||
if line.decode('cp1252') == "": |
|||
#print("break") |
|||
#break |
|||
pass |
|||
else: |
|||
ansi_escape = re.compile(r'\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])') |
|||
result = ansi_escape.sub('', line.decode('cp1252').strip('\n')) |
|||
print(result) |
|||
if result == "Otherwise type \"new\": ": |
|||
tn.write(user.encode('ascii')+b"\r\n") |
|||
|
|||
if result == "Enter your password: ": |
|||
tn.write(password.encode('ascii')+b"\r\n") |
|||
|
|||
if result == "(N)onstop, (Q)uit, or (C)ontinue?": |
|||
tn.write(b"Q\r\n") |
|||
|
|||
if result == "Make your selection (G,T,F,M,S,? for help, or X to exit): ": |
|||
tn.write(b"G\r\n") |
|||
|
|||
if result == "help, or X to exit): ": |
|||
tn.write(b"C\r\n") |
|||
|
|||
if result == "Select (P,I,H,S,W,X,?): ": |
|||
tn.write(b"P\r\n") |
|||
|
|||
if result == "Select (Bury, 1-5, ?) ": |
|||
tn.write(b"4\r\n") |
|||
mutants() |
|||
break |
|||
|
|||
|
|||
1341
qmutants.py
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue