380 lines
12 KiB
Python
380 lines
12 KiB
Python
import logging
|
|
|
|
class ActionModul:
|
|
|
|
def isBlank(self,str):
|
|
logging.debug(f'isBlank(): str=*{str}*')
|
|
if str != None and len(str.strip()) == 0:
|
|
return True
|
|
return False
|
|
|
|
def __init__(self, world):
|
|
|
|
self.world = world
|
|
|
|
def warte(self):
|
|
print('Du wartest')
|
|
|
|
|
|
def inventar(self):
|
|
|
|
self.world.stdscr.addstr(12,0,'Du besitzt folgende Gegenstände:')
|
|
zeile=13
|
|
for itemid in self.world.inventar:
|
|
item = self.world.inventar[itemid]
|
|
self.world.stdscr.addstr(zeile,0,item.name)
|
|
zeile = zeile +1
|
|
|
|
def klettere(self, parsedCommand):
|
|
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
|
|
|
|
if item != None:
|
|
if item.id == self.world.ITEM_RANKGITTER:
|
|
self.rauf()
|
|
else:
|
|
self.setFehler('Das sehe ich hier nicht.')
|
|
|
|
|
|
def oeffne(self,parsedCommand):
|
|
item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand);
|
|
|
|
logging.debug(f'öffne RaumId= {self.world.aktuellerRaum.id}')
|
|
logging.debug(f'öffne Item= {item}')
|
|
if item != None:
|
|
logging.debug(f'öffne ItemId= {item.id}')
|
|
if item.id == self.world.ITEM_TRUHE:
|
|
logging.debug('öffne Truhe')
|
|
schluessel = self.world.findItemImInventarById(self.world.ITEM_KLEINER_SCHLUESSEL)
|
|
|
|
if schluessel != None and item.zustand != item.OFFEN:
|
|
item.zustand = item.OFFEN
|
|
schluessel.sichtbar = False
|
|
self.ausDemInventar(schluessel)
|
|
seil = self.world.findItemById(self.world.ITEM_SEIL)
|
|
seil.raumid = self.world.aktuellerRaum.id
|
|
seil.sichtbar = True
|
|
self.world.aktuellerRaum.items[seil.id] = seil
|
|
schwert = self.world.findItemById(self.world.ITEM_SCHWERT)
|
|
schwert.sichtbar = True
|
|
schwert.raumid = self.world.aktuellerRaum.id
|
|
self.world.aktuellerRaum.items[schwert.id] = schwert
|
|
self.setFehler('Aus der Truhe fallen ein Seil und ein Schwert. Der kleine Schlüssel löst sich auf.')
|
|
else:
|
|
self.setFehler('Die Truhe ist verschlossen und dir fehlt der passende Schlüssel.')
|
|
|
|
elif item.id == self.world.ITEM_HAUSTUER:
|
|
if self.world.aktuellerRaum.id == self.world.RAUM_FLUR:
|
|
schluessel = self.world.findItemImInventarById(self.world.ITEM_HAUSTUERSCHLUESSEL)
|
|
|
|
logging.debug(f'öffne Haustür Schlüssel ist {schluessel}')
|
|
if schluessel != None:
|
|
item.zustand = item.OFFEN
|
|
schluessel.sichtbar = False
|
|
self.setFehler('Die Haustür ist geöffnet,der Haustürschlüssel löst sich auf.')
|
|
self.world.aktuellerRaum.ausgaenge[self.world.SUED] = self.world.RAUM_GARTEN
|
|
self.ausDemInventar(schluessel)
|
|
else:
|
|
self.setFehler('Die Tür ist verschlossen.')
|
|
|
|
def isAktuellerRaum(self, raumid):
|
|
return self.world.aktuellerRaum.id == raumid
|
|
|
|
def benutze(self, parsedCommand):
|
|
item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand);
|
|
|
|
if item.id ==self.world.ITEM_JACKE:
|
|
self.setFehler('Also du die Jacke anziehst, findest du einen kleine Schlüssel in der Tasche.')
|
|
self.findeTruhenschluessel()
|
|
elif item.id == self.world.ITEM_LEITER:
|
|
if(self.world.aktuellerRaum.id == self.world.RAUM_ESSZIMMER):
|
|
logging.debug(f'aktuellerRaum ist {self.world.aktuellerRaum.id}')
|
|
self.rauf()
|
|
elif item.id == self.world.ITEM_PLANKE:
|
|
if self.isAktuellerRaum(self.world.RAUM_BACH):
|
|
self.baueBruecke()
|
|
self.setFehler('Du legst die Planke über den Bach und es ensteht eine Brücke.')
|
|
else:
|
|
self.setFehler('Das macht hier keinen Sinn.')
|
|
|
|
|
|
def baueBruecke(self):
|
|
bach = self.world.sucheRaum(self.world.RAUM_BACH)
|
|
bach.ausgaenge[self.world.OST] = self.world.RAUM_TEICH
|
|
|
|
def ausDemInventar(self,item):
|
|
del self.world.inventar[item.id]
|
|
self.world.aktuellerRaum.items[item.id] = item
|
|
item.raumid = self.world.aktuellerRaum.id
|
|
|
|
def verliere(self,parsedCommand):
|
|
item = self.world.findItemImInventar(parsedCommand.gegenstand);
|
|
|
|
|
|
logging.debug(f'verliere Item {item}')
|
|
if item != None:
|
|
|
|
if self.isAktuellerRaum(self.world.RAUM_BACH):
|
|
if item.id == self.world.ITEM_PLANKE:
|
|
self.baueBruecke()
|
|
self.setFehler('Du legst die Planke über den Bach und es ensteht eine Brücke über den Bach')
|
|
|
|
self.ausDemInventar(item)
|
|
else:
|
|
self.setFehler("Diesen Gegenstand besitzt du nicht.")
|
|
|
|
def setFehler(self,text):
|
|
self.world.fehler =text
|
|
|
|
def clearFehler(self):
|
|
self.world.fehler = ''
|
|
|
|
|
|
def stelle(self,parsedCommand):
|
|
item = self.world.findItemImInventar(parsedCommand.gegenstand);
|
|
|
|
if item != None:
|
|
logging.debug('stelle() item.id=' + str(item.id))
|
|
if item.id == self.world.ITEM_KRUG:
|
|
self.world.aktuellerRaum.ausgaenge[self.world.NORD] = '5'
|
|
self.verliere(parsedCommand)
|
|
self.world.printText('1')
|
|
else:
|
|
self.setFehler("Diesen Gegenstand besitzt du nicht.")
|
|
|
|
def untersucheAktuellenRaum(self, parsedCommand):
|
|
raum = self.world.sucheRaumName(parsedCommand.gegenstand)
|
|
|
|
logging.debug(f'raumId {raum.id}')
|
|
logging.debug(f'untersucheAktuellenRaum() {parsedCommand.gegenstand} in {self.world.aktuellerRaum.id}')
|
|
if self.isAktuellerRaum(raum.id):
|
|
logging.debug(f'untersuche aktuellen Raum {raum.name}')
|
|
|
|
|
|
def findeTruhenschluessel(self):
|
|
schluessel = self.world.findItemById(self.world.ITEM_KLEINER_SCHLUESSEL)
|
|
|
|
logging.debug(f'Schlüssel ist sichtbar {schluessel.sichtbar}')
|
|
if not schluessel.sichtbar:
|
|
logging.debug('mache Schlüssel sichtbar')
|
|
self.setFehler('In der Jackentasche findest du einen kleinen Schlüssel.')
|
|
schluessel.sichtbar = True
|
|
self.insInventar(schluessel)
|
|
|
|
def schlage(self, parsedCommand):
|
|
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
|
|
|
|
if item.id == self.world.ITEM_BOXSACK:
|
|
self.setFehler('Der Boxsack sagt: Hmm, hmm?')
|
|
|
|
def leere(self, parsedCommand):
|
|
skip
|
|
|
|
def fuelle(self, parsedCommand):
|
|
skip
|
|
|
|
|
|
def zeigeItemBeschreibung(self,item):
|
|
self.world.printText(f'item-{item.id}')
|
|
|
|
def untersuche(self,parsedCommand):
|
|
logging.debug(f'untersuche() suche nach Gegenstand: {parsedCommand.gegenstand}')
|
|
if parsedCommand.gegenstand == None:
|
|
self.untersucheAktuellenRaum()
|
|
|
|
return
|
|
|
|
item = self.world.findItemImInventarOderAktuellerRaum(parsedCommand.gegenstand)
|
|
|
|
if item != None:
|
|
if item.id == self.world.ITEM_PFLANZE:
|
|
krug = self.world.findRaumItemById(self.world.ITEM_KRUG)
|
|
logging.debug(f'mache Gegenstand {krug.name} sichtbar')
|
|
krug.sichtbar = True
|
|
self.setFehler('Die Pflanze ist in einen Krug gepflanzt.')
|
|
elif item.id == self.world.ITEM_BETT:
|
|
# Falltür sichtbar machen
|
|
self.world.aktuellerRaum.ausgaenge[self.world.RUNTER] = self.world.RAUM_KELLER
|
|
logging.debug('untersuche(): Keller ist jetzt zugänglich')
|
|
self.setFehler('Im Boden unter dem Bett findest du eine Falltür, die nach unten führt.')
|
|
elif item.id == self.world.ITEM_NACHTSCHRANK:
|
|
self.setFehler('In der Schublade findest du einen Schlüssel')
|
|
schluessel = self.world.findRaumItemById(self.world.ITEM_HAUSTUERSCHLUESSEL)
|
|
schluessel.sichtbar = True
|
|
elif item.id == self.world.ITEM_TEICH:
|
|
fisch = self.world.findItemById(self.world.ITEM_FISCH)
|
|
|
|
if fisch.raumid == self.world.RAUM_TEICH:
|
|
fisch.sichtbar = True
|
|
self.setFehler('Im Teich schwimmt ein kleiner Fisch')
|
|
fisch = self.world.findItemById(self.world.ITEM_FISCH)
|
|
fisch.sichtbar = True
|
|
elif item.id == self.world.ITEM_JACKE:
|
|
self.findeTruhenschluessel()
|
|
elif item.id == self.world.ITEM_FISCH:
|
|
self.zeigeItemBeschreibung(item)
|
|
item.sichtbar = False
|
|
self.ausDemInventar(item)
|
|
else:
|
|
self.zeigeItemBeschreibung(item)
|
|
|
|
|
|
|
|
|
|
|
|
else:
|
|
logging.debug('Kein Item gefunden, suche nach Raum')
|
|
self.untersucheAktuellenRaum(parsedCommand)
|
|
|
|
def ziehe(self,parsedCommand):
|
|
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
|
|
|
|
if item != None:
|
|
#alter Code!
|
|
if item.id == 8:
|
|
self.world.stdscr.addstr('Du ziehst den Hebel und es passiert.... nichts!')
|
|
else:
|
|
self.setFehler('Das sehe ich hier nicht.')
|
|
|
|
def fange(self, parsedCommand):
|
|
skip
|
|
|
|
def klettere(self, parsedCommand):
|
|
leiter = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
|
|
|
|
logging.debug(f'klettere(): Leiter is {leiter}')
|
|
if leiter != None:
|
|
if self.isAktuellerRaum(self.world.RAUM_ESSZIMMER):
|
|
logging.debug(f'aktuellerRaum ist {self.world.aktuellerRaum.id}')
|
|
self.rauf()
|
|
else:
|
|
self.setFehler('Eine Leiter sehe ich hier nicht.')
|
|
|
|
def insInventar(self, item):
|
|
logging.debug(f'neu ins Inventar: {item.name}')
|
|
self.world.inventar[item.id] = item
|
|
|
|
|
|
def nimm(self,parsedCommand):
|
|
item = self.world.findItemInAktuellerRaum(parsedCommand.gegenstand)
|
|
|
|
logging.debug(f'nimm(): item == {item}')
|
|
if item != None:
|
|
if item.imobil:
|
|
text = self.world.msg[item.pickupmsg]
|
|
|
|
if self.isBlank(item.pickupmsg):
|
|
self.setFehler('Das kannst du nicht mitnehmen')
|
|
else:
|
|
text = self.world.msg[item.pickupmsg]
|
|
self.setFehler(text)
|
|
else:
|
|
logging.debug(f'Item {item.name} aus aktuellem Raum entfernen')
|
|
del self.world.aktuellerRaum.items[item.id]
|
|
logging.debug(f'Item {item.name} ins Inventar')
|
|
|
|
aufnehmen = True
|
|
|
|
logging.debug(f'nimm(): RaumId== {self.world.aktuellerRaum.id}')
|
|
if self.isAktuellerRaum(self.world.RAUM_BACH):
|
|
logging.debug(f'nimm(): ItemId == {item.id}')
|
|
if item.id == self.world.ITEM_PLANKE:
|
|
logging.debug('nehme Planke am Bach')
|
|
self.world.aktuellerRaum.ausgaenge[self.world.SUED] = '-1'
|
|
elif self.isAktuellerRaum(self.world.RAUM_TEICH):
|
|
if item.id == self.world.ITEM_FISCH:
|
|
krug = self.world.findItemImInventarById(self.world.ITEM_KRUG)
|
|
|
|
if krug != None:
|
|
self.setFehler('Du schöpfst mit dem Krug und der Fisch ist drin.')
|
|
else:
|
|
self.setFehler('Der Fisch ist zu glitschig, um ihn mit der Hand zu fangen.')
|
|
aufnehmen = False
|
|
|
|
if aufnehmen:
|
|
self.insInventar(item)
|
|
|
|
|
|
else:
|
|
self.setFehler("diesen Gegenstand sehe ich hier nicht.")
|
|
|
|
|
|
def sprich(self,parsedCommand):
|
|
geist = self.world.findPersonImAktuellenRaum(parsedCommand.gegenstand)
|
|
|
|
if geist != None:
|
|
self.world.printText('geist')
|
|
else:
|
|
self.setFehler(f'{parsedCommand.gegenstand} ist nicht im Raum.')
|
|
|
|
def hilfe(self,parsedCommand):
|
|
if parsedCommand.gegenstand == 'befehle':
|
|
self.world.printBefehle()
|
|
else:
|
|
self.world.printText('hilfe')
|
|
|
|
def gehe(self,parsedCommand):
|
|
richtung = parsedCommand.gegenstand.lower()
|
|
logging.debug("gehe nach " + richtung)
|
|
|
|
if richtung == 'nord':
|
|
self.geheNach(richtung)
|
|
elif richtung == 'süd':
|
|
self.geheNach(richtung)
|
|
if richtung == 'west':
|
|
self.geheNach(richtung)
|
|
if richtung == 'ost':
|
|
self.geheNach(richtung)
|
|
if richtung == 'rauf':
|
|
self.rauf()
|
|
|
|
|
|
def geheNach(self,richtung):
|
|
logging.debug(f'geheNach() Richtung {richtung}')
|
|
raum = self.world.aktuellerRaum
|
|
|
|
if raum.ausgaenge[richtung]:
|
|
ausgang = raum.sucheRaumAusgang(richtung)
|
|
logging.debug(f'gefundener Ausgang: {ausgang}')
|
|
if ausgang != None:
|
|
raum = self.world.sucheRaum(ausgang)
|
|
else:
|
|
logging.warn('Keine AusgandId gefunde')
|
|
self.setFehler("In diese Richtung gibt's keine Ausgang!")
|
|
|
|
if raum != None:
|
|
self.world.aktuellerRaum = raum
|
|
else:
|
|
logging.debug('Kein Raum zur AusgangId')
|
|
self.setFehler("In diese Richtung gibt's keine Ausgang!")
|
|
else:
|
|
self.setFehler("In diese Richtung kannst du nicht gehen")
|
|
|
|
def nord(self):
|
|
self.geheNach(self.world.NORD)
|
|
|
|
def sued(self):
|
|
self.geheNach(self.world.SUED)
|
|
|
|
def west(self):
|
|
self.geheNach(self.world.WEST)
|
|
|
|
def ost(self):
|
|
self.geheNach(self.world.OST)
|
|
|
|
def rauf(self):
|
|
self.geheNach(self.world.RAUF)
|
|
|
|
def runter(self):
|
|
self.geheNach(self.world.RUNTER)
|
|
|
|
def about(self):
|
|
print("Tomb Version " + self.world.VERSION)
|
|
self.world.waitForCR
|
|
|
|
def raumaction(self):
|
|
raumid = self.world.aktuellerRaum.id
|
|
|
|
print('Raumaction für Raum: ' + raumid)
|
|
|
|
|