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
83
84
85
|
# Murder in the Park - A Robotic Mystery
# Copyright (C) 2008 Jeffrey Armstrong (a.k.a. PrintStar)
# http://jeff.rainbow-100.com/
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# A full version of the license terms is available in LICENSE.
import gamedb
NPC_VERBS = ['ask',
'question',
'talk',
'tell',
'say',
'speak',
'show',
'hand',
'give']
DIRECTIONS = ['north','n',
'west','w',
'south','s',
'east','e']
def isDirection(word):
try:
DIRECTIONS.index(word)
return True
except ValueError:
return False
def handleVerbOnly(db,verb):
return None
def parseAction(db,action):
if not action:
return
actions = action.split(';')
for each in actions:
each = each.strip()
components = each.split()
if each.startswith('unblock'):
db.unblock(components[1])
elif each.startswith('increment'):
db.increment(components[1])
elif each.startswith('remove'):
db.remove(components[1])
elif each.startswith('create'):
db.to_inv(components[1])
elif each.startswith('state'):
try:
db.setState(components[1],int(components[2]))
except ValueError:
continue
def handle(db,verb,obj1=None,obj2=None):
verb = db.checkVerb(verb)
if not obj1 and not obj2:
return handleVerbOnly(db,verb)
result = db.getResult(obj1,obj2,verb)
action = db.getAction(obj1,obj2,verb)
parseAction(db,action)
return result
|