-
Notifications
You must be signed in to change notification settings - Fork 1
/
Hero.py
82 lines (66 loc) · 2.92 KB
/
Hero.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
from Kernel import *
from EeekObject import *
class Hero(EeekObject):
def __init__(self):
EeekObject.__init__(self)
self.x = None
self.y = None
self.beforeMove = None
self.tmpCount = 0
self.blind = False
self.legShape = True
self.inBearTrap = False
self.inPit = False
self.isEngulfed = False
self.isPolymorphed = False
self.lastActionedTile = None # I sersiouly need to #enhance my english skills :'(
def coords(self):
return (self.y, self.x)
def attack(self, tile):
dir = Kernel.instance.Pathing.getDirection(tile)
Kernel.instance.drawString("Attacking -> %s (%s)" % (dir, tile))
Kernel.instance.send("F"+dir)
def move(self, tile):
if self.beforeMove == (self.x,self.y) and self.tmpCount < 5 and not (self.inBearTrap or self.inPit):
Kernel.instance.log("Hero asked to move, but I still havn't moved after last update, ignoring this")
self.tmpCount = self.tmpCount + 1
else:
if self.beforeMove != (self.x, self.y):
self.inBearTrap = False
self.inPit = False
else:
if self.tmpCount > 3:
if not tile.glyph:
Kernel.instance.log("Made a door at %s" % tile)
tile.glyph = '-'
tile.color = TermColor(33, 0, False, False)
Kernel.instance.sendSignal("interrupt_action")
dir = Kernel.instance.Pathing.getDirection(tile)
Kernel.instance.drawString("Walking -> %s (%s)" % (dir, tile))
self.beforeMove = (self.x,self.y)
self.tmpCount = 0
Kernel.instance.NethackSock.s.send(dir)
def descend(self):
Kernel.instance.log("Hero is descending..")
Kernel.instance.send(">")
Kernel.instance.dontUpdate()
def open(self, tile):
dir = Kernel.instance.Pathing.getDirection(tile)
Kernel.instance.log("Hero is opening a door..")
Kernel.instance.send("o%s" % dir)
self.lastActionedTile = tile
def kick(self, tile):
dir = Kernel.instance.Pathing.getDirection(tile)
Kernel.instance.log("Hero is kicking a door..")
Kernel.instance.send("\x04%s" % dir)
def search(self, times=2):
Kernel.instance.send("%ds" % times)
for neighbour in Kernel.instance.curTile().neighbours():
neighbour.searches = neighbour.searches + 1
if neighbour.searches == Kernel.instance.curLevel().maxSearches:
neighbour.searched = True
def canPickupHeavy(self):
# for poly and stuff
return False
def canOpen(self, tile):
return not tile.shopkeepDoor and tile.glyph == ']' and (tile.locked or Kernel.instance.Hero.legShape) and tile.isAdjacent(Kernel.instance.curTile())