summaryrefslogtreecommitdiff
path: root/lib/custom.py
blob: 6787d9aa669b008a60f97dcfccaa1829ea4a7349 (plain)
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