def before_giving(player, farfalla, idrusa, direction, behavioured):
    if not player.IS_PLAYER:
        to_say = "a %s *concentrato* No grazie. Non accetto nulla da chicchessia." % player.get_numbered_keyword(
        )
        defer_if_possible(1, 2, command_say, idrusa, to_say)
        return True

    command_look(idrusa, player.code)

    # Idrusa non ha iniziato a dare nessuna quest
    if "quest_status" not in idrusa.specials:
        to_say = "a %s *impensierito* No grazie. Ora non sono interessata." % player.code
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        return True

    quest_player_code = idrusa.specials["player_code"]
    quest_player = database["players"][quest_player_code]
    quest_player_name = quest_player.get_name(looker=idrusa)

    quest_status = idrusa.specials["quest_status"]
    if quest_status == "domanda":
        to_say = "a %s *concentrato* No grazie. Sto attendendo che %s mi risponda." % (
            player.code, quest_player_name)
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        return True

    # Controlla che l'entità che dà sia il giocatore della quest
    if player.code != quest_player_code:
        to_say = "a %s No grazie. Sto aspettando che %s mi porti ciò che deve." % (
            player.code, quest_player_name)
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        return True

    # Controlla se l'oggetto dato sia una farfalla
    if not farfalla.race == RACE.BUTTERFLY:
        to_say = "a %s *critica* Stai cercando di muovermi a pena o di turlupinarmi?" % quest_player_code
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        return True
    else:
        idrusa.specials["quest_status"] = "completa"
        # Ora che la quest è completa ne blocca un eventuale reset
        delete_deferred_reset(idrusa)

        to_yell = "a %s *scortese* Pensavo avessi desistito ormai!" % quest_player_code
        defer_if_possible(1, 2, idrusa, player, command_yell, idrusa, to_yell)
        to_say = "a %s *con un largo sorriso di scherno* La via per Klirbe non è però accessibile per te..." % quest_player_code
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        to_say = "a %s In compenso hai fatto un po' d'esperienza!" % quest_player_code
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        player.experience += 100

        # Tra un po' di tempo si potranno cercare farfalle
        defer_random_time(3600, 4800, its_farfalla_time, idrusa)
Exemplo n.º 2
0
def after_listen_say(charlie, speaker, target, phrase, ask, exclaimi, behavioured):
    if not speaker.IS_PLAYER:
        return

    # Controlla se la quest non sia già stata resettata oppure avanzata
    if ("charlie_banana_quest:status" not in charlie.specials
    or charlie.specials["charlie_banana_quest:status"] != "domanda"):
        return

    # Ricava la frase ripulita dalla punteggiatura e non continua la quest fino
    # a che il giocatore non dice: sì
    phrase = ALFA_ONLY_PATTERN.sub("", phrase)
    if not is_same(phrase, "si"):
        return

    # Guarda il giocatore che ha risposto, brrrr, fa sempre senso vedere i mob
    # così "intelligenti"
    command_look(charlie, speaker.code)

    # Ignora coloro che hanno risposto ma che non sono stati scelti per la quest
    quest_player_code = charlie.specials["charlie_banana_quest:player"]
    if speaker.code != quest_player_code:
        quest_player = database["players"][quest_player_code]
        # Ricava il nome o la short per come lo vede charlie
        to_say = "a %s *concentrato* Grazie, ma no, grazie! Sto aspettando la risposta da %s." % (
            speaker.code, quest_player.get_name(charlie))
        command_say(charlie, to_say)
        return

    # Visto che il secondo stadio della missione si sta attivando cancella il
    # precedente reset che è meglio che sia reimpostato a fine funzione
    delete_charlie_reset_call(charlie)

    # Ecco un nuovo pollo da spennare! Finalmente il giocatore si è deciso a
    # rispondere!
    # Facciamo avanzare lo stato della quest e descriviamo quello che vogliamo
    charlie.specials["charlie_banana_quest:status"] = "cerca"

    to_say = "a %s *esasperato* Non ce la faccio più! Questi due unicorni mi stanno facendo impazzire!" % quest_player_code
    reactor.callLater(random.randint(1, 2), command_say, charlie, to_say)

    to_say = "a %s Portami due banane, cosicché io possa sopportarli almeno per un po'.." % quest_player_code
    reactor.callLater(random.randint(4, 6), command_say, charlie, to_say)

    # (TT) questo è da snoopare.. forse non funziona il self say con parole chiave del nome
    to_murmur = "a self *pensieroso* Già! Con due banane potrei..."
    reactor.callLater(random.randint(20, 40), command_murmur, charlie, to_murmur)

    # Ecco qui, qui viene impostata la durata media della quest, ovvero quanto
    # charlie attenderà che il giocatore gli porti due banane
    reset_call = reactor.callLater(random.randint(200, 300), reset_banana_quest, charlie)
    charlie.specials["charlie_banana_quest:reset_call"] = reset_call
def before_giving(player, farfalla, idrusa, direction, behavioured):
    if not player.IS_PLAYER:
        to_say = "a %s *concentrato* No grazie. Non accetto nulla da chicchessia." % player.get_numbered_keyword()
        defer_if_possible(1, 2, command_say, idrusa, to_say)
        return True

    command_look(idrusa, player.code)

    # Idrusa non ha iniziato a dare nessuna quest
    if "quest_status" not in idrusa.specials:
        to_say = "a %s *impensierito* No grazie. Ora non sono interessata." % player.code
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        return True

    quest_player_code = idrusa.specials["player_code"]
    quest_player = database["players"][quest_player_code]
    quest_player_name = quest_player.get_name(looker=idrusa)

    quest_status = idrusa.specials["quest_status"]
    if quest_status == "domanda":
        to_say = "a %s *concentrato* No grazie. Sto attendendo che %s mi risponda." % (
            player.code, quest_player_name)
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        return True

    # Controlla che l'entità che dà sia il giocatore della quest
    if player.code != quest_player_code:
        to_say = "a %s No grazie. Sto aspettando che %s mi porti ciò che deve." % (
            player.code, quest_player_name)
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        return True

    # Controlla se l'oggetto dato sia una farfalla
    if not farfalla.race == RACE.BUTTERFLY:
        to_say = "a %s *critica* Stai cercando di muovermi a pena o di turlupinarmi?" % quest_player_code
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        return True
    else:
        idrusa.specials["quest_status"] = "completa"
        # Ora che la quest è completa ne blocca un eventuale reset
        delete_deferred_reset(idrusa)

        to_yell = "a %s *scortese* Pensavo avessi desistito ormai!" % quest_player_code
        defer_if_possible(1, 2, idrusa, player, command_yell, idrusa, to_yell)
        to_say = "a %s *con un largo sorriso di scherno* La via per Klirbe non è però accessibile per te..." % quest_player_code
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        to_say = "a %s In compenso hai fatto un po' d'esperienza!" % quest_player_code
        defer_if_possible(1, 2, idrusa, player, command_say, idrusa, to_say)
        player.experience += 100

        # Tra un po' di tempo si potranno cercare farfalle
        defer_random_time(3600, 4800, its_farfalla_time, idrusa)
def after_listen_say(idrusa, speaker, target, phrase, behavioured):
    if not speaker.IS_PLAYER:
        return

    # Controlla se la quest non sia già stata resettata oppure avanzata
    if "quest_status" not in idrusa.specials or idrusa.specials[
            "quest_status"] != "domanda":
        return

    # Ricava la frase ripulita dalla punteggiatura e non continua la quest fino
    # a che il giocatore non dice: sì
    phrase = ALFA_ONLY_PATTERN.sub("", phrase)
    if not is_same(phrase, "si"):
        return

    # Guarda il giocatore che ha risposto
    command_look(idrusa, speaker.code)

    # Ignora coloro che hanno risposto ma che non hanno avviato la quest
    quest_player_code = idrusa.specials["player_code"]
    if speaker.code != quest_player_code:
        quest_player = database["players"][quest_player_code]
        # Ricava il nome o la short per come lo vede idrusa
        to_say = "a %s No, non la tua risposta attendo ma di %s." % (
            speaker.code, quest_player.get_name(looker=idrusa))
        command_say(idrusa, to_say)
        return

    # Visto che il secondo stadio della missione si sta attivando cancella il
    # precedente reset che è meglio che sia reimpostato a fine funzione
    delete_deferred_reset(idrusa)

    # Facciamo avanzare lo stato della quest
    idrusa.specials["quest_status"] = "cerca"

    # Descriviamo quello che vogliamo
    to_say = "a %s *in tono grave* L'accesso ti verrà indicato solo se porterai una farfalla!" % speaker.code
    defer_if_possible(1, 2, idrusa, speaker, command_say, idrusa, to_say)

    # Ecco qui, qui viene impostata la durata media della quest, ovvero quanto
    # idrusa attenderà che il giocatore gli porti la farfalla
    deferred_reset = defer_random_time(200, 300, reset_farfalla_quest, idrusa)
    idrusa.specials["deferred_reset"] = deferred_reset
def after_listen_say(idrusa, speaker, target, phrase, behavioured):
    if not speaker.IS_PLAYER:
        return

    # Controlla se la quest non sia già stata resettata oppure avanzata
    if "quest_status" not in idrusa.specials or idrusa.specials["quest_status"] != "domanda":
        return

    # Ricava la frase ripulita dalla punteggiatura e non continua la quest fino
    # a che il giocatore non dice: sì
    phrase = ALFA_ONLY_PATTERN.sub("", phrase)
    if not is_same(phrase, "si"):
        return

    # Guarda il giocatore che ha risposto
    command_look(idrusa, speaker.code)

    # Ignora coloro che hanno risposto ma che non hanno avviato la quest
    quest_player_code = idrusa.specials["player_code"]
    if speaker.code != quest_player_code:
        quest_player = database["players"][quest_player_code]
        # Ricava il nome o la short per come lo vede idrusa
        to_say = "a %s No, non la tua risposta attendo ma di %s." % (speaker.code, quest_player.get_name(looker=idrusa))
        command_say(idrusa, to_say)
        return

    # Visto che il secondo stadio della missione si sta attivando cancella il
    # precedente reset che è meglio che sia reimpostato a fine funzione
    delete_deferred_reset(idrusa)

    # Facciamo avanzare lo stato della quest
    idrusa.specials["quest_status"] = "cerca"

    # Descriviamo quello che vogliamo
    to_say = "a %s *in tono grave* L'accesso ti verrà indicato solo se porterai una farfalla!" % speaker.code
    defer_if_possible(1, 2, idrusa, speaker, command_say, idrusa, to_say)

    # Ecco qui, qui viene impostata la durata media della quest, ovvero quanto
    # idrusa attenderà che il giocatore gli porti la farfalla
    deferred_reset = defer_random_time(200, 300, reset_farfalla_quest, idrusa)
    idrusa.specials["deferred_reset"] = deferred_reset
Exemplo n.º 6
0
def command_examine(entity, argument="", verbs=VERBS, behavioured=False):
    # È possibile se il comando è stato deferrato
    if not entity:
        return False

    entity = entity.split_entity(1)

    if not argument:
        entity.send_output("Che cosa vorresti %s?" % verbs["infinitive"])
        if entity.IS_PLAYER and OPTION.NEWBIE in entity.account.options:
            syntax = get_command_syntax(entity, "command_examine")
            entity.send_output(syntax, break_line=False)
        return False

    # (TD)
    return command_look(entity, argument, behavioured=behavioured, use_examine=True)
Exemplo n.º 7
0
def command_examine(entity, argument="", verbs=VERBS, behavioured=False):
    # È possibile se il comando è stato deferrato
    if not entity:
        return False

    entity = entity.split_entity(1)

    if not argument:
        entity.send_output("Che cosa vorresti %s?" % verbs["infinitive"])
        if entity.IS_PLAYER and OPTION.NEWBIE in entity.account.options:
            syntax = get_command_syntax(entity, "command_examine")
            entity.send_output(syntax, break_line=False)
        return False

    # (TD)
    return command_look(entity,
                        argument,
                        behavioured=behavioured,
                        use_examine=True)
Exemplo n.º 8
0
def before_giving(player, banana, charlie, direction, behavioured):
    if not player.IS_PLAYER:
        to_say = "a %s *concentrato* Grazie, ma no, grazie! Non accetto nulla da chicchessia." % player.get_keywords_attr().split()[0]
        reactor.callLater(random.randint(1, 2), command_say, charlie, to_say)
        return True

    command_look(charlie, player.code)

    # Charlie non ha iniziato a dare nessuna quest
    if "charlie_banana_quest:status" not in charlie.specials:
        to_say = "a %s *impensierito* Grazie, ma no, grazie! Non accetto mai caramelle da sconosciuti." % (player.code)
        reactor.callLater(random.randint(1, 2), command_say, charlie, to_say)
        to_say = "a %s Sai, da quanto ho perso un rene..." % (player.code)
        reactor.callLater(random.randint(3, 4), command_whisper, charlie, to_say)
        return True

    quest_player_code = charlie.specials["charlie_banana_quest:player"]
    quest_player = database["players"][quest_player_code]
    quest_player_name = quest_player.get_name(charlie)

    quest_status = charlie.specials["charlie_banana_quest:status"]
    if quest_status == "domanda":
        to_say = "a %s *concentrato* Grazie, ma no, grazie! Sto attendendo che %s si decida a rispondermi." % (
            player.code, quest_player_name)
        reactor.callLater(random.randint(1, 2), command_say, charlie, to_say)
        return True

    # Controlla che l'entità che dà sia il giocatore della quest
    if player.code != quest_player_code:
        to_say = "a %s Grazie, ma no, grazie! Sto aspettando delle banane da parte di %s." % (
            player.code, quest_player_name)
        reactor.callLater(random.randint(1, 2), command_say, charlie, to_say)
        return True

    # Controlla se l'oggetto dato sia una banana, lo fa in maniera grezza, prima
    # di tutto controlla se sia un cibo, e poi ne controlla la short
    if not banana.entitype == ENTITYPE.FOOD:
        to_say = "a %s *critico* Questa cosa non mi sembra del cibo, figuriamoci una banana!" % quest_player_code
        reactor.callLater(random.randint(1, 2), command_say, charlie, to_say)
        return True
        
    if not is_same(("banana", "banane"), banana.short.split()) and not is_same(("banana", "banane"), banana.short_night.split()):
        to_say = "a %s *disinteressato* Sono convinto che sia buono, ma ora non ho fame, ho bisogno di banane!" % quest_player_code
        reactor.callLater(random.randint(1, 2), command_say, charlie, to_say)
        return True

    # Charlie decide che l'oggetto dato è abbastanza bananoso e lo accetta
    if charlie.specials["charlie_banana_quest:status"] != "banana" and is_same("banana", banana.short.split()):
        to_yell = "a %s *sorpreso* Eccone una! Ora mi serve anche l'altra!" % quest_player_code
        reactor.callLater(random.randint(1, 2), command_yell, charlie, to_yell)
        charlie.specials["charlie_banana_quest:status"] = "banana"
    else:
        charlie.specials["charlie_banana_quest:status"] = "completa"
        # Ora che la quest è completa ne blocca un eventuale reset, fino a
        # quando le banane non si sciolgono
        delete_charlie_reset_call(charlie)

        to_yell = "a %s *al settimo cielo* Sei il mio salvatore! Finalmente con queste banane potrò sopportare questi due!" % quest_player_code
        reactor.callLater(random.randint(1, 2), command_yell, charlie, to_yell)
        to_emote = "con la $hand destra si mette una banana nell'orecchio destra"
        reactor.callLater(random.randint(4, 6), command_emote, charlie, to_emote)
        to_emote = "con la $hand sinistra si mette una banana nell'orecchio sinistra"
        reactor.callLater(random.randint(7, 9), command_emote, charlie, to_emote)
        to_say = "a self *sollevato* finalmente non li sento più..."
        reactor.callLater(random.randint(10, 13), command_say, charlie, to_say)

        # Tra un po' di tempo le banane si squaglieranno e quindi charlie
        # dovrà di nuovo affidarsi a qualche alla bontà di qualche player
        reactor.callLater(random.randint(3600, 4800), you_are_not_the_banana_king, charlie)
Exemplo n.º 9
0
    def enter_in_game(self):
        force_return = check_trigger(self, "before_enter_in_game", self)
        if force_return:
            return

        # Resetta il contatore di idle, è normale che conn non sia valido
        # durante il test degli inputs
        conn = self.get_conn()
        if conn:
            conn.reinit()
        elif not engine.test_inputs_mode:
            log.bug("conn non è valido: %r" % conn)
            return

        # Se il pg ha impostato l'incognito ma non è un admin allora gli
        # viene rimosso
        if self.incognito and self.trust == TRUST.PLAYER:
            log.admin("Rimozione automatica dell'incognito al giocatore %s" % self.code)
            self.incognito = False

        # Se la stanza in cui il personaggio si trova è ancora impostata
        # significa che il giocatore si sta riconnettendo (per colpa di un
        # crash oppure utilizzando un altro browser)
        if self.location:
            # Ripulisce qualsiasi precedente istanza di connessione alla pagina
            # del gioco che non sia quella attuale
            actual_session = self.game_request.getSession()
            for session, connection in connections.iteritems():
                if session == actual_session:
                    continue
                if connection.account and OPTION.COMET not in connection.account.options:
                    continue
                if ("/game_input.html" in repr(connection.request)
                or  "/game_output.html" in repr(connection.request)):
                    # (TT) in realtà qui dovrei ucciderla o unpausarla,
                    # altrimenti mi occupa spazio di memoria, magari aggiungerla
                    # come lista alle precedenti deferrenti di questa connessione
                    connection.defer_exit_from_game.pause()
                    connection.defer_exit_from_game = None
                    del(connection)
            # Se un pg si riconnette non avvisa via mail
            send_a_mail = False
            log_message = "%s si riconnette al gioco" % self.code
        # Qui dovrebbe passare per tutti i personaggi che sono entrati almeno
        # una volta in gioco e che non hanno avuto problemi di sorta
        elif self.previous_location and self.previous_location() and not self.previous_location().IS_PLAYER:
            location = self.previous_location()
            self.previous_location = None
            self.to_location(location, use_iterative_put=False)
            send_a_mail = True
            self.login_times += 1
            log_message = "%s entra nel gioco per la %d° volta" % (self.code, self.login_times)
        # Se la stanza in cui se ne era andato il personaggio non è stata
        # impostata durante il quit allora significa che il giocatore è nuovo
        # oppure c'è stato un baco che ne ha corrotto il riferimento
        else:
            destination_room = config.initial_destination.get_room()
            if not destination_room:
                log.bug("destination_room non valida: %r" % destination_room)
                return
            self.to_location(destination_room, use_iterative_put=True)
            send_a_mail = True
            self.login_times += 1
            log_message = "%s entra nel gioco per la %d° volta" % (self.code, self.login_times)

        if not engine.test_inputs_mode:
            log.always(log_message)

        # Controlla se deve donare un'entità all'evento a cui il giocatore
        # sta partecipando; il regalo può essere sia un oggetto che un mob
        if config.gift_on_enter and config.gift_on_enter not in self.gifts:
            gift = config.gift_on_enter.CONSTRUCTOR(config.gift_on_enter.code)
            if gift:
                # Si presuppone che i gift non abbiano il max_global_quantity
                gift.inject(self)
                self.gifts.append(config.gift_on_enter)
            else:
                log.bug("Impossibile creare il dono %s per %s: %r" % (
                    config.gift_on_enter.code, self.code, gift))

        # Avvisa gli admin via mail se un pg è appena entrato nel Mud
        if self.account and self.account.trust > TRUST.PLAYER:
            send_a_mail = False
        for player in self.account.players.itervalues():
            if player.trust > TRUST.PLAYER:
                send_a_mail = False
        if send_a_mail and config.mail_on_enter_in_game:
            mail.send_to_admins(log_message, "%s è un %s di livello %s dell'account %s." % (
                self.code,
                self.sex_replacer(remove_colors(self.race.name)),
                self.level,
                self.account.name if self.account else "<Errore>"))

        eyes = self.eye_colorize("occhi")
        self.act("Ti materializzi poco a poco dal nulla e poi apri gli %s.\n" % eyes, TO.ENTITY)
        self.act("$n si materializza poco a poco dal nulla e apre gli %s come se si stesse svegliando." % eyes, TO.OTHERS)
        command_look(self)

        self.inactivity = 0

        log.connections()

        force_return = check_trigger(self, "after_enter_in_game", self)
        if force_return:
            return