Building a Modern MUD
with your host, termie
Friday, July 20, 12
Building a Modern MUD with your host, termie Friday, July 20, 12 - - PowerPoint PPT Presentation
Building a Modern MUD with your host, termie Friday, July 20, 12 Me. Friday, July 20, 12 Me. Friday, July 20, 12 working on games always seemed like a dream job, probably isnt i really loved playing muds so much, i wanted to make one
with your host, termie
Friday, July 20, 12working on games always seemed like a dream job, probably isn’t i really loved playing muds so much, i wanted to make one where users could surprise me again minecraft, dwarf fortress, lo-fi and indie games back on the rise
Friday, July 20, 12working on games always seemed like a dream job, probably isn’t i really loved playing muds so much, i wanted to make one where users could surprise me again minecraft, dwarf fortress, lo-fi and indie games back on the rise
Friday, July 20, 12working on games always seemed like a dream job, probably isn’t i really loved playing muds so much, i wanted to make one where users could surprise me again minecraft, dwarf fortress, lo-fi and indie games back on the rise
Friday, July 20, 12this talk
Ancient Times Contemporary Inspirations A Modern Approach Future Awesomeness Where It’s At / Demo
Friday, July 20, 12ancient times
West of House You are standing in an open field west of a white house, with a boarded front door. There is a small mailbox here. > zork! not designed for multiple users inform 7
Friday, July 20, 12interactive fiction
Volume 4 - Physical Environment Book 1 - The Study Chapter 1 - Basic Room The Water Study is a room. "The walls are painted black with simple architectural motifs, except for the cunning panel of three green pears[if the pitcher is whole] and a pitcher of water. The glass is painted so that light seems to fall through it from [the window], and the pears are[end if] luscious enough to eat[if the pitcher is ruined]. The shards of glass and the pool of water are a little hard to explain, but might be written off as the artist's odd fancy[end if]." The printed name of the Water Study is "Study with Pears and [if the pitcher is whole]Pitcher[otherwise]Spilled Water[end if]". Instead of going nowhere: say "You can go in and out the window, but otherwise gallivanting around the villa is a bad idea. The
found out about inform last year at oscon ben collins- sussman
Friday, July 20, 12interactive fiction
Volume 4 - Physical Environment Book 1 - The Study Chapter 1 - Basic Room The Water Study is a room. "The walls are painted black with simple architectural motifs, except for the cunning panel of three green pears[if the pitcher is whole] and a pitcher of water. The glass is painted so that light seems to fall through it from [the window], and the pears are[end if] luscious enough to eat[if the pitcher is ruined]. The shards of glass and the pool of water are a little hard to explain, but might be written off as the artist's odd fancy[end if]." The printed name of the Water Study is "Study with Pears and [if the pitcher is whole]Pitcher[otherwise]Spilled Water[end if]". Instead of going nowhere: say "You can go in and out the window, but otherwise gallivanting around the villa is a bad idea. The
found out about inform last year at oscon ben collins- sussman
Friday, July 20, 12interactive fiction
Volume 4 - Physical Environment Book 1 - The Study Chapter 1 - Basic Room The Water Study is a room. "The walls are painted black with simple architectural motifs, except for the cunning panel of three green pears[if the pitcher is whole] and a pitcher of water. The glass is painted so that light seems to fall through it from [the window], and the pears are[end if] luscious enough to eat[if the pitcher is ruined]. The shards of glass and the pool of water are a little hard to explain, but might be written off as the artist's odd fancy[end if]." The printed name of the Water Study is "Study with Pears and [if the pitcher is whole]Pitcher[otherwise]Spilled Water[end if]". Instead of going nowhere: say "You can go in and out the window, but otherwise gallivanting around the villa is a bad idea. The
found out about inform last year at oscon ben collins- sussman
Friday, July 20, 12ancient times
Let’s face it, kinda sucks best thing we had at the time Connected to term.ie. Escape character is '^]'.
Friday, July 20, 12ancient times
MCP , basically described a system of passing additional information for clients via what amount to comments that clients were meant not to display #$#spam 12345 from: Biff text*: "" _data-tag: 9b76 #$#* 9b76 text: This is some sample text. #$#* 9b76 text: #$#* 9b76 text: Note that you don't need to quote strings #$#* 9b76 text: in multiline data. Also, you can include "special" #$#* 9b76 text: characters like quotes. Everything after the #$#* 9b76 text: space after the keyword and colon is considered #$#* 9b76 text: part of the value. #$#* 9b76 text: This means that spaces can also be part of the value. #$#: 9b76
Friday, July 20, 12ancient times
LPC was the first programming language i used extensively at the time printed out the manual at my mother’s office
inherit "/lib/room"; void create() { ::create(); set_short("a simple room"); set_long("A simple room in a simple building."); set_description("This is a simple room in a simple building. It is very nice."); add_exit("north", "/realms/descartes/north_room"); }
Friday, July 20, 12ancient times
found out when researching this people still working
people still playing them pretty much everybody tried to write one
Friday, July 20, 12contemporary inspirations
twisted, django comet (precursor to websockets) style web interface in addition to mud protocols relatively full-featured all-in-one server i don’t really like twisted any more (though it taught me everything i know)
Friday, July 20, 12contemporary inspirations
c, python for scripting rather mature but very stripped down, no stock combat, currency, etc all-in-one server c, yuck i looked at its source a bunch to see which things i hadn’t thought about yet for my code
Friday, July 20, 12contemporary inspirations
i don’t think it is a joke, but it might be twisted, meant to be a simulation can’t really find the code anywhere
Friday, July 20, 12contemporary inspirations
i don’t think it is a joke, but it might be twisted, meant to be a simulation can’t really find the code anywhere maybe glyph knows more
contemporary inspirations
not really a mud, but has many
that cater well to developers housemate worked on it, always discussed possible ideas about hosting own land it’s graphical and i think that takes away a lot from the immersive experience, the space between things makes worlds feel empty
Friday, July 20, 12contemporary inspirations
totally awesome project from a few years back, ben cerveny and matt webb users are basically in a python shell connected with
share objects has a perspective concept where the client interprets the available verbs and properties with the goal that individual clients can be interacting while playing different types of games
Friday, July 20, 12a modern approach
locations can run in different processes, different servers most calls require very little state trust models i looked at eve online quite a bit in modeling it why is that better? well, it implies certain scaling characteristics, allows usage of high-end load balancing techniques
Friday, July 20, 12a modern approach
rich objects rather than line-
calls get routed between users and (users, npcs, objects) via the location
why is this better?
much easier to write
interactions easy
a modern approach
items, locations, users, everything has a trust chain this allows for many types of interactions that do not require checking a database also allows in-game entities to create new items that they can trust, for example a bank
Friday, July 20, 12a modern approach
represented by REST web services notch and his MMO and DCPU to operate while
maybe instead an avatar that forwards messages to a web service? github integration
Friday, July 20, 12future awesomeness
sci-fi has a lot of really interesting philosophical models demarchy liquid democracy example voting topics:
limited resources
to affect story line
Friday, July 20, 12future awesomeness
register a location running on your
possibly connect your own entire world, see federation / layering later
Friday, July 20, 12future awesomeness
give people in-game credit for successfully submitting patches to the project connect to the real world also, bittorrent file- sharing
Friday, July 20, 12future awesomeness
bunch of VMs already for DCPU why not allow you to program NPCs with it? different programs could possibly be traded cost credits to run
Friday, July 20, 12future awesomeness
because things are signed, a person could be in two worlds at the same time trusting one cert might show the current world, but trusting a new cert might allow interaction with a world on top of that new people might be on a “lower plane”
Friday, July 20, 12where it’s at
servers endpoints all using pretty much the same interfaces right now zmq
Friday, July 20, 12where it’s at
Friday, July 20, 12where it’s at
user
Friday, July 20, 12where it’s at
user
Friday, July 20, 12where it’s at
user
Friday, July 20, 12where it’s at
user
Friday, July 20, 12where it’s at
where it’s at
where it’s at
housemate made a joke about not creating a language
gets used for 10 years
Friday, July 20, 12locations.txt
awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0
Friday, July 20, 12locations.txt
awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0
Friday, July 20, 12locations.txt
awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0
Friday, July 20, 12locations.txt
awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0
Friday, July 20, 12locations.txt
awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0
Friday, July 20, 12locations.txt
awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0
Friday, July 20, 12locations.txt
awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0
Friday, July 20, 12locations.txt
awakening You are cold. You shake. You cannot breathe. The liquid around you drains away and you open your eyes to a birthing chamber. EXITS the door: testing_chamber_0 OBJECTS the rock: rock_singularity testing_chamber_0 This is a small white room. There is a console. EXITS the door: testing_chamber_1 OBJECTS the rock: rock_singularity console: testing_console_0
Friday, July 20, 12where it’s at
similar to locations but for objects also naive but allows extensibility
Friday, July 20, 12rock_singularity This rock seems to exist in all locations. TRIGGERS: not used: not used testing_console_0: zombie.objects.console.GithubConsole This is the first test console. Try use-ing it. TRIGGERS: not used: not used
Friday, July 20, 12rock_singularity This rock seems to exist in all locations. TRIGGERS: not used: not used testing_console_0: zombie.objects.console.GithubConsole This is the first test console. Try use-ing it. TRIGGERS: not used: not used
Friday, July 20, 12rock_singularity This rock seems to exist in all locations. TRIGGERS: not used: not used testing_console_0: zombie.objects.console.GithubConsole This is the first test console. Try use-ing it. TRIGGERS: not used: not used
Friday, July 20, 12zombie.objects.console.GithubConsole
class GithubConsole(Console): def cmd_use(self, ctx): """Tell the user what to do.""" session = self.sessions.get(ctx.caller_id, {'tick': 0}) if session['tick'] == 0: ctx.reply({'message': self.message_0.strip()}) def cmd_show(self, ctx, data): """Do something cool using the github api.""" if 'token' in data: github_login = gh.get_identity(data['token']) item = {'id': uuid.uuid4().hex, 'description': 'A github identity card for %s' % github_login, 'github_login': github_login} item_s = json.dumps(item) signer_id, sig = ctx._sign(item_s) ctx.reply({'item': [item_s, signer_id, sig]})
Friday, July 20, 12zombie.objects.console.GithubConsole
class GithubConsole(Console): def cmd_use(self, ctx): """Tell the user what to do.""" session = self.sessions.get(ctx.caller_id, {'tick': 0}) if session['tick'] == 0: ctx.reply({'message': self.message_0.strip()}) def cmd_show(self, ctx, data): """Do something cool using the github api.""" if 'token' in data: github_login = gh.get_identity(data['token']) item = {'id': uuid.uuid4().hex, 'description': 'A github identity card for %s' % github_login, 'github_login': github_login} item_s = json.dumps(item) signer_id, sig = ctx._sign(item_s) ctx.reply({'item': [item_s, signer_id, sig]})
Friday, July 20, 12zombie.objects.console.GithubConsole
class GithubConsole(Console): def cmd_use(self, ctx): """Tell the user what to do.""" session = self.sessions.get(ctx.caller_id, {'tick': 0}) if session['tick'] == 0: ctx.reply({'message': self.message_0.strip()}) def cmd_show(self, ctx, data): """Do something cool using the github api.""" if 'token' in data: github_login = gh.get_identity(data['token']) item = {'id': uuid.uuid4().hex, 'description': 'A github identity card for %s' % github_login, 'github_login': github_login} item_s = json.dumps(item) signer_id, sig = ctx._sign(item_s) ctx.reply({'item': [item_s, signer_id, sig]})
Friday, July 20, 12zombie.objects.console.GithubConsole
class GithubConsole(Console): def cmd_use(self, ctx): """Tell the user what to do.""" session = self.sessions.get(ctx.caller_id, {'tick': 0}) if session['tick'] == 0: ctx.reply({'message': self.message_0.strip()}) def cmd_show(self, ctx, data): """Do something cool using the github api.""" if 'token' in data: github_login = gh.get_identity(data['token']) item = {'id': uuid.uuid4().hex, 'description': 'A github identity card for %s' % github_login, 'github_login': github_login} item_s = json.dumps(item) signer_id, sig = ctx._sign(item_s) ctx.reply({'item': [item_s, signer_id, sig]})
Friday, July 20, 12zombie.objects.console.GithubConsole
class GithubConsole(Console): def cmd_use(self, ctx): """Tell the user what to do.""" session = self.sessions.get(ctx.caller_id, {'tick': 0}) if session['tick'] == 0: ctx.reply({'message': self.message_0.strip()}) def cmd_show(self, ctx, data): """Do something cool using the github api.""" if 'token' in data: github_login = gh.get_identity(data['token']) item = {'id': uuid.uuid4().hex, 'description': 'A github identity card for %s' % github_login, 'github_login': github_login} item_s = json.dumps(item) signer_id, sig = ctx._sign(item_s) ctx.reply({'item': [item_s, signer_id, sig]})
Friday, July 20, 12zombie.objects.console.GithubConsole
class GithubConsole(Console): def cmd_use(self, ctx): """Tell the user what to do.""" session = self.sessions.get(ctx.caller_id, {'tick': 0}) if session['tick'] == 0: ctx.reply({'message': self.message_0.strip()}) def cmd_show(self, ctx, data): """Do something cool using the github api.""" if 'token' in data: github_login = gh.get_identity(data['token']) item = {'id': uuid.uuid4().hex, 'description': 'A github identity card for %s' % github_login, 'github_login': github_login} item_s = json.dumps(item) signer_id, sig = ctx._sign(item_s) ctx.reply({'item': [item_s, signer_id, sig]})
Friday, July 20, 12where it’s at
DEBUG:zombie.net:World:foo:SERVE tcp://127.0.0.1:2222 DEBUG:zombie.net:Location:awakening:SERVE tcp://127.0.0.1:54632 DEBUG:zombie.net:Location:awakening:CONNECT tcp://127.0.0.1:2222 DEBUG:zombie.net:Client:rock_singularity:CONNECT tcp://127.0.0.1:54632 spawns everything in one process yay eventlet
Friday, July 20, 12where it’s at
DEBUG:zombie.net:World:foo:SERVE tcp://127.0.0.1:2222 DEBUG:zombie.net:Location:awakening:SERVE tcp://127.0.0.1:54632 DEBUG:zombie.net:Location:awakening:CONNECT tcp://127.0.0.1:2222 DEBUG:zombie.net:Client:rock_singularity:CONNECT tcp://127.0.0.1:54632
Friday, July 20, 12where it’s at
DEBUG:zombie.net:World:foo:SERVE tcp://127.0.0.1:2222 DEBUG:zombie.net:Location:awakening:SERVE tcp://127.0.0.1:54632 DEBUG:zombie.net:Location:awakening:CONNECT tcp://127.0.0.1:2222 DEBUG:zombie.net:Client:rock_singularity:CONNECT tcp://127.0.0.1:54632
Friday, July 20, 12where it’s at
DEBUG:zombie.net:World:foo:SERVE tcp://127.0.0.1:2222 DEBUG:zombie.net:Location:awakening:SERVE tcp://127.0.0.1:54632 DEBUG:zombie.net:Location:awakening:CONNECT tcp://127.0.0.1:2222 DEBUG:zombie.net:Client:rock_singularity:CONNECT tcp://127.0.0.1:54632
Friday, July 20, 12where it’s at
DEBUG:zombie.net:World:foo:SERVE tcp://127.0.0.1:2222 DEBUG:zombie.net:Location:awakening:SERVE tcp://127.0.0.1:54632 DEBUG:zombie.net:Location:awakening:CONNECT tcp://127.0.0.1:2222 DEBUG:zombie.net:Client:rock_singularity:CONNECT tcp://127.0.0.1:54632
Friday, July 20, 12where it’s at
DEBUG:zombie.net:World:foo:SERVE tcp://127.0.0.1:2222 DEBUG:zombie.net:Location:awakening:SERVE tcp://127.0.0.1:54632 DEBUG:zombie.net:Location:awakening:CONNECT tcp://127.0.0.1:2222 DEBUG:zombie.net:Client:rock_singularity:CONNECT tcp://127.0.0.1:54632
Friday, July 20, 12where it’s at
DEBUG:zombie.net:World:foo:SERVE tcp://127.0.0.1:2222 DEBUG:zombie.net:Location:awakening:SERVE tcp://127.0.0.1:54632 DEBUG:zombie.net:Location:awakening:CONNECT tcp://127.0.0.1:2222 DEBUG:zombie.net:Client:rock_singularity:CONNECT tcp://127.0.0.1:54632
Friday, July 20, 12where it’s at
zombie_devclient.py
===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================
This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>
Friday, July 20, 12zombie_devclient.py
===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================
This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>
Friday, July 20, 12zombie_devclient.py
===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================
This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>
Friday, July 20, 12zombie_devclient.py
===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================
This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>
Friday, July 20, 12zombie_devclient.py
===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================
This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>
Friday, July 20, 12zombie_devclient.py
===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================
This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>
Friday, July 20, 12zombie_devclient.py
===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================
This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>
Friday, July 20, 12zombie_devclient.py
===================================================================== You are now in an interactive python shell. You've got couple common functions already floating around in here: look(<object name or player id>) move(<exit name>) proxy(<object name>) show(<object name>, <data>) store(<custom name>, <item>) use(<object name>) =====================================================================
This is a small white room. There is a console. Exits: the door <zombie.client.LocationClient object at 0x10d5e4c10> >>> _ <zombie.client.LocationClient object at 0x10d5e4c10> >>> tool.gh.get_token('termie', 'XXXXXX') {'token': u'XXXXXX'} >>> show('console', _) {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']} >>> store('github_id', _) >>> items() [('github_id', {u'item': [u'{"github_login": "termie", "id": "32aea29e38d540f5b298f3cfa7685c54", "description": "A github identity card for termie"}', u'testing_console_0', u'signature']})] >>>
Friday, July 20, 12code at: http://github.com/termie/zombie me at: @termie http://term.ie
Friday, July 20, 12