The reworked tutorial world builds now without error; need to play-test it.

This commit is contained in:
Griatch 2015-02-21 20:55:34 +01:00
parent c63ae1742f
commit 6f4cbbc1be
4 changed files with 42 additions and 30 deletions

View file

@ -739,7 +739,7 @@ hole
the remains of the castle. There is also a standing archway the remains of the castle. There is also a standing archway
offering passage to a path along the old {wsouth{nern inner wall. offering passage to a path along the old {wsouth{nern inner wall.
# #
@detail portoculis;fall;fallen;grating @detail portoculis;fall;fallen;grating =
This heavy iron grating used to block off the inner part of the gate house, now it has fallen This heavy iron grating used to block off the inner part of the gate house, now it has fallen
to the ground together with the stone archway that once help it up. to the ground together with the stone archway that once help it up.
# #
@ -834,7 +834,7 @@ archway
# #
@set ghost/get_err_msg = Your fingers just pass straight through it! @set ghost/get_err_msg = Your fingers just pass straight through it!
# #
@desc ghost/desc_alive = @set ghost/desc_alive =
This ghostly shape could momentarily be mistaken for a thick fog had This ghostly shape could momentarily be mistaken for a thick fog had
it not moved with such determination and giving echoing hollow it not moved with such determination and giving echoing hollow
screams as it did. The shape is hard to determine, now and then it screams as it did. The shape is hard to determine, now and then it
@ -842,7 +842,7 @@ archway
later. The thing reeks of almost tangible spite at your later. The thing reeks of almost tangible spite at your
presence. This must be the ruin's eternal guardian. presence. This must be the ruin's eternal guardian.
# #
@desc ghost/desc_dead = @set ghost/desc_dead =
The ghostly apparition is nothing but a howling on the wind, an eternal The ghostly apparition is nothing but a howling on the wind, an eternal
cold spot that can never be fully eradicated from these walls. While harmless cold spot that can never be fully eradicated from these walls. While harmless
in this state, there is no doubt that it shall eventually return to this plane in this state, there is no doubt that it shall eventually return to this plane
@ -970,6 +970,7 @@ mobon ghost
@detail altar = @detail altar =
The altar is a massive stone slab. It might once have had ornate decorations The altar is a massive stone slab. It might once have had ornate decorations
but time and the salty air has broken everything down into dust. but time and the salty air has broken everything down into dust.
#
@detail ceiling = @detail ceiling =
The dome still looming intact above you is a marvel of engineering. The dome still looming intact above you is a marvel of engineering.
@ -1248,6 +1249,8 @@ stairs down
# #
@set sarcophagus/rack_id = rack_sarcophagus @set sarcophagus/rack_id = rack_sarcophagus
# #
@set sarcophagus/available_weapons = ["ornate_longsword","warhammer","rune axe","thruning","slayer waraxe","ghostblade","hawkblade"]
#
@set sarcophagus/no_more_weapons_msg = @set sarcophagus/no_more_weapons_msg =
The tomb has already granted you all the might it will ever do. The tomb has already granted you all the might it will ever do.
# #
@ -1284,7 +1287,7 @@ stairs down
# rack_id. This we can use to check if any such weapon is in inventory # rack_id. This we can use to check if any such weapon is in inventory
# before unlocking the exit. # before unlocking the exit.
# #
@lock Exit tutorial: view:holds(rack_sarcophagus) ; traverse:holds(rack_sarcophagus) @lock Exit tutorial = view:holds(rack_sarcophagus) ; traverse:holds(rack_sarcophagus)
# #
# to tutorial outro # to tutorial outro
@tel tut#17 @tel tut#17

View file

@ -41,7 +41,7 @@ class CmdMobOnOff(Command):
mob = self.caller.search(self.args) mob = self.caller.search(self.args)
if not mob: if not mob:
return return
if self.cmdname == "mobon": if self.cmdstring == "mobon":
mob.set_alive() mob.set_alive()
else: else:
mob.set_dead() mob.set_dead()
@ -91,7 +91,7 @@ class Mob(tut_objects.TutorialObject):
happen to roam into a room with no exits. happen to roam into a room with no exits.
""" """
def __init__(self): def at_init(self):
""" """
When initialized from cache (after a server reboot), set up When initialized from cache (after a server reboot), set up
the AI state. the AI state.
@ -107,7 +107,7 @@ class Mob(tut_objects.TutorialObject):
Called the first time the object is created. Called the first time the object is created.
We set up the base properties and flags here. We set up the base properties and flags here.
""" """
self.cmdsets.add(MobCmdSet, permanent=True) self.cmdset.add(MobCmdSet, permanent=True)
# Main AI flags. We start in dead mode so we don't have to # Main AI flags. We start in dead mode so we don't have to
# chase the mob around when building. # chase the mob around when building.
self.db.patrolling = True self.db.patrolling = True

View file

@ -576,9 +576,9 @@ class CrumblingWall(TutorialObject, DefaultExit):
whenever the button is pushed (this hides it as an exit whenever the button is pushed (this hides it as an exit
until it actually is) until it actually is)
""" """
def __init__(self): def at_init(self):
""" """
We make sure to reset the puzzle after a server reload/reboot. Called when object is recalled from cache.
""" """
self.reset() self.reset()
@ -913,42 +913,51 @@ WEAPON_PROTOTYPES = {
"hit": 0.4, "hit": 0.4,
"damage": 6, "damage": 6,
"parry": 0.2}, "parry": 0.2},
"axe": {
"prototype": "weapon",
"key":"Axe",
"desc": "A woodcutter's axe with a keen edge.",
"hit": 0.4,
"damage": 6,
"parry": 0.2},
"ornate longsword": { "ornate longsword": {
"prototype":"sword", "prototype":"sword",
"key": "Ornate longsword", "key": "Ornate longsword",
"desc": "A fine longsword with some swirling patterns on the handle.", "desc": "A fine longsword with some swirling patterns on the handle.",
"hit": 0.5, "hit": 0.5,
"magic": True,
"damage": 5}, "damage": 5},
"rune axe": {
"prototype": "club",
"key": "Runeaxe",
"aliases": ["axe"],
"hit": 0.4,
"damage": 6},
"thruning": {
"prototype": "sword",
"key": "Broadsword named Thruning",
"desc": "This heavy bladed weapon is marked with the name 'Thruning'. It is very powerful in skilled hands.",
"hit": 0.6,
"parry": 0.6,
"damage": 7},
"warhammer": { "warhammer": {
"prototype": "club", "prototype": "club",
"key": "Silver Warhammer", "key": "Silver Warhammer",
"aliases": ["hammer", "warhammer", "war"], "aliases": ["hammer", "warhammer", "war"],
"desc": "A heavy war hammer with silver ornaments. This huge weapon causes massive damage - if you can hit.", "desc": "A heavy war hammer with silver ornaments. This huge weapon causes massive damage - if you can hit.",
"hit": 0.4, "hit": 0.4,
"damage": 10}, "magic": True,
"slayer waraxe": { "damage": 8},
"rune axe": {
"prototype": "axe", "prototype": "axe",
"key": "Runeaxe",
"aliases": ["axe"],
"hit": 0.4,
"magic": True,
"damage": 6},
"thruning": {
"prototype": "ornate longsword",
"key": "Broadsword named Thruning",
"desc": "This heavy bladed weapon is marked with the name 'Thruning'. It is very powerful in skilled hands.",
"hit": 0.6,
"parry": 0.6,
"damage": 7},
"slayer waraxe": {
"prototype": "rune axe",
"key": "Slayer waraxe", "key": "Slayer waraxe",
"aliases": ["waraxe", "war", "slayer"], "aliases": ["waraxe", "war", "slayer"],
"desc": "A huge double-bladed axe marked with the runes for 'Slayer'. It has more runic inscriptions on its head, which you cannot decipher.", "desc": "A huge double-bladed axe marked with the runes for 'Slayer'. It has more runic inscriptions on its head, which you cannot decipher.",
"magic": True,
"hit": 0.7, "hit": 0.7,
"damage": 8}, "damage": 8},
"ghostblade": { "ghostblade": {
"prototype": "slayer waraxe", "prototype": "ornate longsword",
"key": "The Ghostblade", "key": "The Ghostblade",
"aliases": ["blade", "ghost"], "aliases": ["blade", "ghost"],
"desc": "This massive sword is large as you are tall, yet seems to weigh almost nothing. It's almost like it's not really there.", "desc": "This massive sword is large as you are tall, yet seems to weigh almost nothing. It's almost like it's not really there.",
@ -960,9 +969,9 @@ WEAPON_PROTOTYPES = {
"key": "The Hawblade", "key": "The Hawblade",
"aliases": ["hawk", "blade"], "aliases": ["hawk", "blade"],
"desc": "The weapon of a long-dead heroine and a more civilized age, the hawk-shaped hilt of this blade almost has a life of its own.", "desc": "The weapon of a long-dead heroine and a more civilized age, the hawk-shaped hilt of this blade almost has a life of its own.",
"hit": 0.95, "hit": 0.85,
"parry": 0.8, "parry": 0.7,
"damage": 12} "damage": 11}
} }

View file

@ -524,7 +524,7 @@ def has_player(accessing_obj, accessed_obj, *args, **kwargs):
This is a useful lock for traverse-locking Exits to restrain NPC This is a useful lock for traverse-locking Exits to restrain NPC
mobiles from moving outside their areas. mobiles from moving outside their areas.
""" """
return hasattr(accessing_obj, "has_player") and accessing_obj.has_player return hasattr(accessing_obj, "has_player") and accessing_obj.has_player()
def serversetting(accessing_obj, accessed_obj, *args, **kwargs): def serversetting(accessing_obj, accessed_obj, *args, **kwargs):
""" """