Exemple #1
0
    def do(self, player, line, direction):
        for exit in iimaginary.IContainer(player.thing.location).getExits():
            if exit.name == direction:
                if exit.sibling is not None:
                    evt = events.Success(location=exit.toLocation,
                                         otherMessage=language.Sentence([
                                             exit.sibling,
                                             " crumbles and disappears."
                                         ]))
                    evt.broadcast()

                evt = events.Success(actor=player.thing,
                                     actorMessage="It's gone.",
                                     otherMessage=language.Sentence([
                                         language.Noun(
                                             player.thing).nounPhrase(),
                                         " destroyed ", exit, "."
                                     ]))
                evt.broadcast()
                exit.destroy()
                return

        raise eimaginary.ActionFailure(
            events.ThatDoesntMakeSense(
                actor=player.thing,
                actorMessage="There isn't an exit in that direction."))
Exemple #2
0
    def coinAdded(self, coin):
        """
        Called when a coin is added to this thing.

        @type coin: C{ICoin} provider
        """
        self._currencyCounter += 1
        if self._currencyCounter >= 5 and self.getContents():
            self._currencyCounter = 0
            try:
                obj = iter(self.getContents()).next()
            except StopIteration:
                evt = events.Success(
                    actor=self.thing,
                    target=obj,
                    otherMessage=language.Sentence([self.thing, " thumps loudly."]))
            else:
                evt = events.Success(
                    actor=self.thing,
                    target=obj,
                    otherMessage=language.Sentence([
                        language.Noun(self.thing).definiteNounPhrase(),
                        " thumps loudly and spits out ", obj,
                        " onto the ground."]))
                state = self.closed
                self.closed = False
                try:
                    obj.moveTo(self.thing.location)
                finally:
                    self.closed = state
            evt.broadcast()
Exemple #3
0
    def do(self, player, line, target):
        if target is player:
            raise eimaginary.ActionFailure(
                events.ThatDoesntMakeSense(u"Hit yourself?  Stupid.",
                                           actor=player.thing))

        cost = random.randrange(1, 5)
        if player.stamina < cost:
            raise eimaginary.ActionFailure(
                events.ThatDoesntWork(u"You're too tired!",
                                      actor=player.thing))

        damage = random.randrange(1, 5)
        player.stamina.decrease(cost)
        thp = target.hitpoints.decrease(damage)
        events.Success(
            actor=player.thing,
            target=target.thing,
            targetMessage=language.Sentence([player.thing, " hits you for ", damage, " hitpoints."]),
            actorMessage=language.Sentence(["You hit ", language.Noun(target.thing).definiteNounPhrase(), " for ", damage, " hitpoints."]),
            otherMessage=language.Sentence([player.thing, " hits ", target.thing, "."])).broadcast()

        if thp <= 0:
            xp = target.experience / 2 + 1
            player.gainExperience(xp) # I LOVE IT
            targetIsDead = [target.thing, " is dead!", "\n"]
            events.Success(
                actor=player.thing, target=target.thing,
                actorMessage=["\n", targetIsDead, "You gain ", xp, " experience"],
                targetMessage=["You are dead!"],
                otherMessage=targetIsDead).broadcast()
            target.thing.destroy()
Exemple #4
0
    def do(self, player, line, target):
        from imaginary import garments
        try:
            player.putOn(target)
        except garments.TooBulky as e:
            raise eimaginary.ActionFailure(
                events.ThatDoesntWork(
                    actor=player.thing,
                    target=target.thing,
                    actorMessage=language.Sentence([
                        language.Noun(
                            e.wornGarment.thing).definiteNounPhrase(),
                        u" you are already wearing is too bulky for you to do"
                        u" that."
                    ]),
                    otherMessage=language.Sentence([
                        player.thing,
                        u" wrestles with basic personal problems."
                    ])))

        events.Success(actor=player.thing,
                       target=target.thing,
                       actorMessage=(u"You put on ", language.Noun(
                           target.thing).definiteNounPhrase(), "."),
                       otherMessage=language.Sentence(
                           [player.thing, " puts on ", target.thing,
                            "."])).broadcast()
Exemple #5
0
 def vt102(self, observer):
     heshe = language.Noun(self.thing).heShe()
     L = _orderTopClothingByGlobalSlotList(self.garments)
     if L is None:
         return language.Sentence([heshe, u' is naked.']).vt102(observer)
     return language.Sentence([
         heshe, u' is wearing ',
         language.ItemizedList(
             [language.Noun(g.thing).nounPhrase() for g in L]), u'.'
     ]).vt102(observer)
Exemple #6
0
def creationSuccess(player, creation):
    """
    Create and return an event describing that an object was successfully
    created.
    """
    phrase = language.Noun(creation).nounPhrase()
    return events.Success(
        actor=player,
        target=creation,
        actorMessage=language.Sentence(["You create ", phrase, "."]),
        targetMessage=language.Sentence([player, " creates you."]),
        otherMessage=language.Sentence([player, " creates ", phrase, "."]))
Exemple #7
0
    def do(self, player, line, tool, target):
        ctool = iimaginary.IContainer(tool, None)
        targetObject = target.thing
        if ctool is not None and (ctool.contains(targetObject)
                                  or ctool is target):
            raise eimaginary.ActionFailure(
                events.ThatDoesntWork(
                    actor=player.thing,
                    target=targetObject,
                    tool=tool,
                    actorMessage=
                    "A thing cannot contain itself in euclidean space."))

        dnf = language.Noun(targetObject).definiteNounPhrase()
        evt = events.Success(
            actor=player.thing,
            target=targetObject,
            tool=tool,
            actorMessage=("You put ", language.Noun(tool).definiteNounPhrase(),
                          " in ", dnf, "."),
            targetMessage=language.Sentence(
                [player.thing, " puts ", " tool in you."]),
            toolMessage=language.Sentence(
                [player.thing, " puts you in ", targetObject, "."]),
            otherMessage=language.Sentence(
                [player.thing, " puts ", tool, " in ", targetObject, "."]))
        evt.broadcast()

        try:
            tool.moveTo(target)
        except eimaginary.DoesntFit:
            # <allexpro> dash: put me in a tent and give it to moshez!
            raise eimaginary.ActionFailure(
                events.ThatDoesntWork(
                    actor=player.thing,
                    target=targetObject,
                    tool=tool,
                    actorMessage=language.Sentence([
                        language.Noun(tool).definiteNounPhrase(),
                        u" does not fit in ", dnf, u"."
                    ])))
        except eimaginary.Closed:
            raise eimaginary.ActionFailure(
                events.ThatDoesntWork(actor=player.thing,
                                      target=targetObject,
                                      tool=tool,
                                      actorMessage=language.Sentence(
                                          [dnf, " is closed."])))
Exemple #8
0
class Remove(TargetAction):
    expr = ((pyparsing.Literal("remove") | pyparsing.Literal("take off")) +
            pyparsing.White() + targetString("target"))

    targetInterface = iimaginary.IClothing
    actorInterface = iimaginary.IClothingWearer

    def do(self, player, line, target):
        from imaginary import garments
        try:
            player.takeOff(target)
        except garments.InaccessibleGarment, e:
            raise eimaginary.ActionFailure(
                events.ThatDoesntWork(
                    actor=player.thing,
                    target=target.thing,
                    actorMessage=(u"You cannot take off ",
                                  language.Noun(
                                      target.thing).definiteNounPhrase(),
                                  u" because you are wearing ",
                                  e.obscuringGarment.thing, u"."),
                    otherMessage=language.Sentence([
                        player.thing, u" gets a dumb look on ",
                        language.Noun(player.thing).hisHer(), u" face."
                    ])))

        evt = events.Success(
            actor=player.thing,
            target=target.thing,
            actorMessage=(u"You take off ",
                          language.Noun(target.thing).definiteNounPhrase(),
                          u"."),
            otherMessage=language.Sentence(
                [player.thing, u" takes off ", target.thing, u"."]))
        evt.broadcast()
Exemple #9
0
    def do(self, player, line, target):
        dnf = language.Noun(target.thing).definiteNounPhrase()
        if target.closed:
            raise eimaginary.ActionFailure(events.ThatDoesntWork(
                actor=player.thing,
                target=target.thing,
                actorMessage=language.Sentence([dnf, " is already closed."])))

        target.closed = True
        evt = events.Success(
            actor=player.thing,
            target=target.thing,
            actorMessage=("You close ", dnf, "."),
            targetMessage=language.Sentence([player.thing, " closes you."]),
            otherMessage=language.Sentence([player.thing, " closes ", target.thing, "."]))
        evt.broadcast()
Exemple #10
0
 def do(self, player, line, target, name):
     evt = events.Success(
         actor=player.thing,
         actorMessage=("You change ", target, "'s name."),
         otherMessage=language.Sentence([player.thing, " changes ", target, "'s name to ", name, "."]))
     evt.broadcast()
     target.name = name
Exemple #11
0
 def conceptFor(self, observer):
     if observer is self.thing:
         return None
     if self.origin is not None:
         msg = [" arrives from ", self.origin, "."]
     elif self.direction is not None:
         msg = [" arrives from the ", self.direction, "."]
     else:
         msg = [" arrives."]
     msg.insert(0, self.thing)
     return language.Sentence(msg)
Exemple #12
0
 def responseReceived(self, responder, romajiResponse):
     """
     Called when some speech is observed.
     """
     me = self._actor().thing
     if self.vetteChallengeResponse(romajiResponse):
         self._currentChallenge = None
         verb = u"salute"
     else:
         verb = u"bite"
     evt = events.Success(
         actor=me,
         target=responder,
         actorMessage=language.Sentence(["You ", verb, " ", responder,
                                         "."]),
         targetMessage=language.Sentence(
             [language.Noun(me).shortName(), " ", verb, "s you!"]),
         otherMessage=language.Sentence(
             [me, " ", verb, "s ", responder, "."]))
     # F**k the reactor, F**k scheduling, why does responseReceived
     # need to be concerned with these stupid scheduling details
     # when all it wants to do is respond basically-immediately.
     self._callLater(0, evt.broadcast)
Exemple #13
0
 def __init__(self, speaker, text):
     """
     @type speaker: L{iimaginary.IThing} provider.
     @param speaker: The actor emitting this speech.
     @type text: C{unicode}
     @param text: The text that the actor said.
     """
     self.speaker = speaker
     self.text = text
     Success.__init__(self,
                      location=speaker.location,
                      actor=speaker,
                      actorMessage=["You say, '", text, "'"],
                      otherMessage=language.Sentence(
                          [speaker, " says, '", text, "'"]))
Exemple #14
0
    def do(self, player, line, direction, name):
        direction = expandDirection(direction)
        if iimaginary.IContainer(player.thing.location).getExitNamed(direction, None) is not None:
            raise eimaginary.ActionFailure(events.ThatDoesntMakeSense(
                actor=player.thing,
                actorMessage="There is already an exit in that direction."))

        room = objects.Thing(store=player.store, name=name)
        objects.Container.createFor(room, capacity=1000)
        objects.Exit.link(player.thing.location, room, direction)

        evt = events.Success(
            actor=player.thing,
            actorMessage="You create an exit.",
            otherMessage=language.Sentence([player.thing, " created an exit to the ", direction, "."]))
        evt.broadcast()
Exemple #15
0
 def do(self, player, line, target):
     from imaginary import garments
     try:
         player.takeOff(target)
     except garments.InaccessibleGarment, e:
         raise eimaginary.ActionFailure(events.ThatDoesntWork(
             actor=player.thing,
             target=target.thing,
             actorMessage=(u"You cannot take off ",
                           language.Noun(target.thing).definiteNounPhrase(),
                           u" because you are wearing ",
                           e.obscuringGarment.thing, u"."),
             otherMessage=language.Sentence([
                 player.thing,
                 u" gets a dumb look on ",
                 language.Noun(player.thing).hisHer(),
                 u" face."])))
Exemple #16
0
class Wear(TargetAction):
    expr = (pyparsing.Literal("wear") + pyparsing.White() +
            targetString("target"))

    targetInterface = iimaginary.IClothing
    actorInterface = iimaginary.IClothingWearer

    def do(self, player, line, target):
        from imaginary import garments
        try:
            player.putOn(target)
        except garments.TooBulky, e:
            raise eimaginary.ActionFailure(
                events.ThatDoesntWork(
                    actor=player.thing,
                    target=target.thing,
                    actorMessage=language.Sentence([
                        language.Noun(
                            e.wornGarment.thing).definiteNounPhrase(),
                        u" you are already wearing is too bulky for you to do"
                        u" that."
                    ]),
                    otherMessage=language.Sentence([
                        player.thing,
                        u" wrestles with basic personal problems."
                    ])))

        evt = events.Success(
            actor=player.thing,
            target=target.thing,
            actorMessage=(u"You put on ",
                          language.Noun(target.thing).definiteNounPhrase(),
                          "."),
            otherMessage=language.Sentence(
                [player.thing, " puts on ", target.thing, "."]))
        evt.broadcast()
Exemple #17
0
 def testSentence(self):
     self.assertEquals(
         self.format(
             language.Sentence([self.noun.nounPhrase(), u" is awesome."])),
         u"A fake thing is awesome.")