From 018bb0242ebd2b7e9fde170fae830376dea55e16 Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Thu, 3 Dec 2020 05:39:16 +0100 Subject: [PATCH] Turn Consumable into Bottle that may be full or empty. --- plomrogue/commands.py | 9 +++++++++ plomrogue/game.py | 4 +++- plomrogue/tasks.py | 11 ++++++----- plomrogue/things.py | 7 ++++--- rogue_chat.py | 12 +++++++----- 5 files changed, 29 insertions(+), 14 deletions(-) diff --git a/plomrogue/commands.py b/plomrogue/commands.py index 0638cb8..dea4b63 100644 --- a/plomrogue/commands.py +++ b/plomrogue/commands.py @@ -305,3 +305,12 @@ def cmd_THING_MUSICPLAYER_PLAYLIST_ITEM(game, thing_id, title, length): raise GameError('thing of ID %s not music player' % thing_id) t.playlist += [(title, length)] cmd_THING_MUSICPLAYER_PLAYLIST_ITEM.argtypes = 'int:pos string int:pos' + +def cmd_THING_BOTTLE_EMPTY(game, thing_id): + t = game.get_thing(thing_id) + if not t: + raise GameError('thing of ID %s not found' % thing_id) + if not t.type_ == 'Bottle': + raise GameError('thing of ID %s not bottle' % thing_id) + t.full = False +cmd_THING_BOTTLE_EMPTY.argtypes = 'int:pos' diff --git a/plomrogue/game.py b/plomrogue/game.py index ba25eca..453ee30 100755 --- a/plomrogue/game.py +++ b/plomrogue/game.py @@ -354,12 +354,14 @@ class Game(GameBase): write(f, 'GOD_THING_NAME %s %s' % (t.id_, quote(t.name))) if t.type_ == 'Door' and t.blocking: write(f, 'THING_DOOR_CLOSED %s' % t.id_) - if t.type_ == 'MusicPlayer': + elif t.type_ == 'MusicPlayer': write(f, 'THING_MUSICPLAYER_SETTINGS %s %s %s %s' % (t.id_, int(t.playing), t.playlist_index, int(t.repeat))) for item in t.playlist: write(f, 'THING_MUSICPLAYER_PLAYLIST_ITEM %s %s %s' % (t.id_, quote(item[0]), item[1])) + elif t.type_ == 'Bottle' and not t.full: + write(f, 'THING_BOTTLE_EMPTY %s' % t.id_) write(f, 'SPAWN_POINT %s %s' % (self.spawn_point[0], self.spawn_point[1])) diff --git a/plomrogue/tasks.py b/plomrogue/tasks.py index 0bc0d9c..eca9400 100644 --- a/plomrogue/tasks.py +++ b/plomrogue/tasks.py @@ -128,13 +128,14 @@ class Task_INTOXICATE(Task): def check(self): if self.thing.carrying is None: - raise PlayError('nothing to consume') - if self.thing.carrying.type_ != 'Consumable': - raise PlayError('cannot consume non-consumable') + raise PlayError('carrying nothing to drink from') + if self.thing.carrying.type_ != 'Bottle': + raise PlayError('cannot drink from non-bottle') + if not self.thing.carrying.full: + raise PlayError('bottle is empty') def do(self): - self.thing.game.things.remove(self.thing.carrying) - self.thing.carrying = None + self.thing.carrying.full = False for c_id in self.thing.game.sessions: if self.thing.game.sessions[c_id]['thing_id'] == self.thing.id_: self.thing.game.io.send('RANDOM_COLORS', c_id) diff --git a/plomrogue/things.py b/plomrogue/things.py index 15216ef..67a3807 100644 --- a/plomrogue/things.py +++ b/plomrogue/things.py @@ -141,14 +141,15 @@ class Thing_Door(Thing): -class Thing_Consumable(Thing): +class Thing_Bottle(Thing): symbol_hint = 'B' portable = True + full = True -class Thing_ConsumableSpawner(ThingSpawner): - child_type = 'Consumable' +class Thing_BottleSpawner(ThingSpawner): + child_type = 'Bottle' diff --git a/rogue_chat.py b/rogue_chat.py index 076fd92..cb3080d 100755 --- a/rogue_chat.py +++ b/rogue_chat.py @@ -11,14 +11,15 @@ from plomrogue.commands import (cmd_ALL, cmd_LOGIN, cmd_NICK, cmd_PING, cmd_THIN cmd_GOD_THING_PROTECTION, cmd_THING_PROTECTION, cmd_SET_MAP_CONTROL_PASSWORD, cmd_SPAWN_POINT, cmd_THING_MUSICPLAYER_SETTINGS, - cmd_THING_MUSICPLAYER_PLAYLIST_ITEM) + cmd_THING_MUSICPLAYER_PLAYLIST_ITEM, + cmd_THING_BOTTLE_EMPTY) from plomrogue.tasks import (Task_WAIT, Task_MOVE, Task_WRITE, Task_PICK_UP, Task_DROP, Task_FLATTEN_SURROUNDINGS, Task_DOOR, Task_INTOXICATE, Task_COMMAND) from plomrogue.things import (Thing_Player, Thing_Item, Thing_ItemSpawner, Thing_SpawnPoint, Thing_SpawnPointSpawner, - Thing_Door, Thing_DoorSpawner, Thing_Consumable, - Thing_ConsumableSpawner, Thing_MusicPlayer) + Thing_Door, Thing_DoorSpawner, Thing_Bottle, + Thing_BottleSpawner, Thing_MusicPlayer) from plomrogue.config import config game = Game(config['savefile']) @@ -53,6 +54,7 @@ game.register_command(cmd_BECOME_ADMIN) game.register_command(cmd_SPAWN_POINT) game.register_command(cmd_THING_MUSICPLAYER_SETTINGS) game.register_command(cmd_THING_MUSICPLAYER_PLAYLIST_ITEM) +game.register_command(cmd_THING_BOTTLE_EMPTY) game.register_task(Task_WAIT) game.register_task(Task_MOVE) game.register_task(Task_WRITE) @@ -69,8 +71,8 @@ game.register_thing_type(Thing_SpawnPoint) game.register_thing_type(Thing_SpawnPointSpawner) game.register_thing_type(Thing_Door) game.register_thing_type(Thing_DoorSpawner) -game.register_thing_type(Thing_Consumable) -game.register_thing_type(Thing_ConsumableSpawner) +game.register_thing_type(Thing_Bottle) +game.register_thing_type(Thing_BottleSpawner) game.register_thing_type(Thing_MusicPlayer) game.read_savefile() game.io.start_loop() -- 2.30.2